Artifact ddbf6476eff17ec63f1f58aba5a867769590d42f:
- File
cackey.c
— part of check-in
[c70fbcca60]
at
2010-05-17 05:09:46
on branch trunk
— Fixed issue with double-free when PC/SC connection manager is unavailable
Fixed issues found from splint(1) output (user: rkeene, size: 145721) [annotate] [blame] [check-ins using]
0000: 23 69 66 64 65 66 20 48 41 56 45 5f 43 4f 4e 46 #ifdef HAVE_CONF 0010: 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 IG_H.#include "c 0020: 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a onfig.h".#endif. 0030: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 50 43 53 .#ifdef HAVE_PCS 0040: 43 4c 49 54 45 5f 48 0a 23 20 20 69 6e 63 6c 75 CLITE_H.# inclu 0050: 64 65 20 3c 70 63 73 63 6c 69 74 65 2e 68 3e 0a de <pcsclite.h>. 0060: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 #endif.#ifdef HA 0070: 56 45 5f 57 49 4e 53 43 41 52 44 5f 48 0a 23 20 VE_WINSCARD_H.# 0080: 20 69 6e 63 6c 75 64 65 20 3c 77 69 6e 73 63 61 include <winsca 0090: 72 64 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 rd.h>.#endif.#if 00a0: 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54 5f def HAVE_STDINT_ 00b0: 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c 73 74 H.# include <st 00c0: 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 dint.h>.#endif.# 00d0: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 ifdef HAVE_INTTY 00e0: 50 45 53 5f 48 0a 23 20 20 69 6e 63 6c 75 64 65 PES_H.# include 00f0: 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 <inttypes.h>.#e 0100: 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 ndif.#ifdef HAVE 0110: 5f 53 54 44 4c 49 42 5f 48 0a 23 20 20 69 6e 63 _STDLIB_H.# inc 0120: 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a lude <stdlib.h>. 0130: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 #endif.#ifdef HA 0140: 56 45 5f 55 4e 49 53 54 44 5f 48 0a 23 20 20 69 VE_UNISTD_H.# i 0150: 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 nclude <unistd.h 0160: 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 >.#endif.#ifdef 0170: 48 41 56 45 5f 53 54 52 49 4e 47 5f 48 0a 23 20 HAVE_STRING_H.# 0180: 20 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 include <string 0190: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 .h>.#endif.#ifde 01a0: 66 20 48 41 56 45 5f 50 54 48 52 45 41 44 5f 48 f HAVE_PTHREAD_H 01b0: 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c 70 74 68 .# include <pth 01c0: 72 65 61 64 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 read.h>.#endif.# 01d0: 69 66 64 65 66 20 48 41 56 45 5f 4c 49 4d 49 54 ifdef HAVE_LIMIT 01e0: 53 5f 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c S_H.# include < 01f0: 6c 69 6d 69 74 73 2e 68 3e 0a 23 65 6e 64 69 66 limits.h>.#endif 0200: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 5a 4c 49 .#ifdef HAVE_ZLI 0210: 42 5f 48 0a 23 20 20 69 66 64 65 66 20 48 41 56 B_H.# ifdef HAV 0220: 45 5f 4c 49 42 5a 0a 23 20 20 20 20 69 6e 63 6c E_LIBZ.# incl 0230: 75 64 65 20 3c 7a 6c 69 62 2e 68 3e 0a 23 20 20 ude <zlib.h>.# 0240: 65 6e 64 69 66 0a 23 65 6c 73 65 0a 23 20 20 69 endif.#else.# i 0250: 66 64 65 66 20 48 41 56 45 5f 4c 49 42 5a 0a 23 fdef HAVE_LIBZ.# 0260: 20 20 20 20 75 6e 64 65 66 20 48 41 56 45 5f 4c undef HAVE_L 0270: 49 42 5a 0a 23 20 20 65 6e 64 69 66 0a 23 65 6e IBZ.# endif.#en 0280: 64 69 66 0a 0a 23 64 65 66 69 6e 65 20 43 4b 5f dif..#define CK_ 0290: 50 54 52 20 2a 0a 23 64 65 66 69 6e 65 20 43 4b PTR *.#define CK 02a0: 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 02b0: 28 72 65 74 75 72 6e 54 79 70 65 2c 20 6e 61 6d (returnType, nam 02c0: 65 29 20 72 65 74 75 72 6e 54 79 70 65 20 6e 61 e) returnType na 02d0: 6d 65 0a 23 64 65 66 69 6e 65 20 43 4b 5f 44 45 me.#define CK_DE 02e0: 43 4c 41 52 45 5f 46 55 4e 43 54 49 4f 4e 28 72 CLARE_FUNCTION(r 02f0: 65 74 75 72 6e 54 79 70 65 2c 20 6e 61 6d 65 29 eturnType, name) 0300: 20 72 65 74 75 72 6e 54 79 70 65 20 6e 61 6d 65 returnType name 0310: 0a 23 64 65 66 69 6e 65 20 43 4b 5f 44 45 43 4c .#define CK_DECL 0320: 41 52 45 5f 46 55 4e 43 54 49 4f 4e 5f 50 4f 49 ARE_FUNCTION_POI 0330: 4e 54 45 52 28 72 65 74 75 72 6e 54 79 70 65 2c NTER(returnType, 0340: 20 6e 61 6d 65 29 20 72 65 74 75 72 6e 54 79 70 name) returnTyp 0350: 65 20 28 2a 20 6e 61 6d 65 29 0a 23 64 65 66 69 e (* name).#defi 0360: 6e 65 20 43 4b 5f 43 41 4c 4c 42 41 43 4b 5f 46 ne CK_CALLBACK_F 0370: 55 4e 43 54 49 4f 4e 28 72 65 74 75 72 6e 54 79 UNCTION(returnTy 0380: 70 65 2c 20 6e 61 6d 65 29 20 72 65 74 75 72 6e pe, name) return 0390: 54 79 70 65 20 28 2a 20 6e 61 6d 65 29 0a 23 69 Type (* name).#i 03a0: 66 6e 64 65 66 20 4e 55 4c 4c 5f 50 54 52 0a 23 fndef NULL_PTR.# 03b0: 20 20 64 65 66 69 6e 65 20 4e 55 4c 4c 5f 50 54 define NULL_PT 03c0: 52 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 R 0.#endif..#inc 03d0: 6c 75 64 65 20 22 70 6b 63 73 31 31 2e 68 22 0a lude "pkcs11.h". 03e0: 23 69 6e 63 6c 75 64 65 20 22 61 73 6e 31 2d 78 #include "asn1-x 03f0: 35 30 39 2e 68 22 0a 0a 23 69 66 6e 64 65 66 20 509.h"..#ifndef 0400: 43 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b 49 5f CACKEY_CRYPTOKI_ 0410: 56 45 52 53 49 4f 4e 5f 43 4f 44 45 0a 23 20 20 VERSION_CODE.# 0420: 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 43 52 define CACKEY_CR 0430: 59 50 54 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 YPTOKI_VERSION_C 0440: 4f 44 45 20 30 78 30 32 31 65 30 30 0a 23 65 6e ODE 0x021e00.#en 0450: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 43 4b 41 dif..#ifndef CKA 0460: 5f 54 52 55 53 54 5f 53 45 52 56 45 52 5f 41 55 _TRUST_SERVER_AU 0470: 54 48 0a 23 20 20 64 65 66 69 6e 65 20 43 4b 41 TH.# define CKA 0480: 5f 54 52 55 53 54 5f 53 45 52 56 45 52 5f 41 55 _TRUST_SERVER_AU 0490: 54 48 20 30 78 63 65 35 33 36 33 35 38 0a 23 65 TH 0xce536358.#e 04a0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 43 4b 41 ndif.#ifndef CKA 04b0: 5f 54 52 55 53 54 5f 43 4c 49 45 4e 54 5f 41 55 _TRUST_CLIENT_AU 04c0: 54 48 0a 23 20 20 64 65 66 69 6e 65 20 43 4b 41 TH.# define CKA 04d0: 5f 54 52 55 53 54 5f 43 4c 49 45 4e 54 5f 41 55 _TRUST_CLIENT_AU 04e0: 54 48 20 30 78 63 65 35 33 36 33 35 39 0a 23 65 TH 0xce536359.#e 04f0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 43 4b 41 ndif.#ifndef CKA 0500: 5f 54 52 55 53 54 5f 43 4f 44 45 5f 53 49 47 4e _TRUST_CODE_SIGN 0510: 49 4e 47 0a 23 20 20 64 65 66 69 6e 65 20 43 4b ING.# define CK 0520: 41 5f 54 52 55 53 54 5f 43 4f 44 45 5f 53 49 47 A_TRUST_CODE_SIG 0530: 4e 49 4e 47 20 30 78 63 65 35 33 36 33 35 61 0a NING 0xce53635a. 0540: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 43 #endif.#ifndef C 0550: 4b 41 5f 54 52 55 53 54 5f 45 4d 41 49 4c 5f 50 KA_TRUST_EMAIL_P 0560: 52 4f 54 45 43 54 49 4f 4e 0a 23 20 20 64 65 66 ROTECTION.# def 0570: 69 6e 65 20 43 4b 41 5f 54 52 55 53 54 5f 45 4d ine CKA_TRUST_EM 0580: 41 49 4c 5f 50 52 4f 54 45 43 54 49 4f 4e 20 30 AIL_PROTECTION 0 0590: 78 63 65 35 33 36 33 35 62 0a 23 65 6e 64 69 66 xce53635b.#endif 05a0: 0a 0a 2f 2a 20 47 53 43 2d 49 53 20 76 32 2e 31 ../* GSC-IS v2.1 05b0: 20 44 65 66 69 6e 69 74 69 6f 6e 73 20 2a 2f 0a Definitions */. 05c0: 2f 2a 2a 20 43 6c 61 73 73 65 73 20 2a 2a 2f 0a /** Classes **/. 05d0: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 43 4c #define GSCIS_CL 05e0: 41 53 53 5f 49 53 4f 37 38 31 36 20 20 20 20 20 ASS_ISO7816 05f0: 20 20 20 20 20 20 30 78 30 30 0a 23 64 65 66 69 0x00.#defi 0600: 6e 65 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 47 ne GSCIS_CLASS_G 0610: 4c 4f 42 41 4c 5f 50 4c 41 54 46 4f 52 4d 20 20 LOBAL_PLATFORM 0620: 20 30 78 38 30 0a 0a 2f 2a 2a 20 49 6e 73 74 72 0x80../** Instr 0630: 75 63 74 69 6f 6e 73 20 2a 2a 2f 0a 23 64 65 66 uctions **/.#def 0640: 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f ine GSCIS_INSTR_ 0650: 47 45 54 5f 52 45 53 50 4f 4e 53 45 20 20 20 20 GET_RESPONSE 0660: 20 20 30 78 43 30 0a 23 64 65 66 69 6e 65 20 47 0xC0.#define G 0670: 53 43 49 53 5f 49 4e 53 54 52 5f 52 45 41 44 5f SCIS_INSTR_READ_ 0680: 42 49 4e 41 52 59 20 20 20 20 20 20 20 30 78 42 BINARY 0xB 0690: 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 0.#define GSCIS_ 06a0: 49 4e 53 54 52 5f 55 50 44 41 54 45 5f 42 49 4e INSTR_UPDATE_BIN 06b0: 41 52 59 20 20 20 20 20 30 78 44 36 0a 23 64 65 ARY 0xD6.#de 06c0: 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 fine GSCIS_INSTR 06d0: 5f 53 45 4c 45 43 54 20 20 20 20 20 20 20 20 20 _SELECT 06e0: 20 20 20 30 78 41 34 0a 23 64 65 66 69 6e 65 20 0xA4.#define 06f0: 47 53 43 49 53 5f 49 4e 53 54 52 5f 45 58 54 45 GSCIS_INSTR_EXTE 0700: 52 4e 41 4c 5f 41 55 54 48 20 20 20 20 20 30 78 RNAL_AUTH 0x 0710: 38 32 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 82.#define GSCIS 0720: 5f 49 4e 53 54 52 5f 47 45 54 5f 43 48 41 4c 4c _INSTR_GET_CHALL 0730: 45 4e 47 45 20 20 20 20 20 30 78 38 34 0a 23 64 ENGE 0x84.#d 0740: 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 efine GSCIS_INST 0750: 52 5f 49 4e 54 45 52 4e 41 4c 5f 41 55 54 48 20 R_INTERNAL_AUTH 0760: 20 20 20 20 30 78 38 38 0a 23 64 65 66 69 6e 65 0x88.#define 0770: 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 56 45 52 GSCIS_INSTR_VER 0780: 49 46 59 20 20 20 20 20 20 20 20 20 20 20 20 30 IFY 0 0790: 78 32 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x20.#define GSCI 07a0: 53 5f 49 4e 53 54 52 5f 53 49 47 4e 20 20 20 20 S_INSTR_SIGN 07b0: 20 20 20 20 20 20 20 20 20 20 30 78 32 41 0a 23 0x2A.# 07c0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 define GSCIS_INS 07d0: 54 52 5f 47 45 54 5f 50 52 4f 50 20 20 20 20 20 TR_GET_PROP 07e0: 20 20 20 20 20 30 78 35 36 0a 23 64 65 66 69 6e 0x56.#defin 07f0: 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 47 45 e GSCIS_INSTR_GE 0800: 54 5f 41 43 52 20 20 20 20 20 20 20 20 20 20 20 T_ACR 0810: 30 78 34 43 0a 23 64 65 66 69 6e 65 20 47 53 43 0x4C.#define GSC 0820: 49 53 5f 49 4e 53 54 52 5f 52 45 41 44 5f 42 55 IS_INSTR_READ_BU 0830: 46 46 45 52 20 20 20 20 20 20 20 30 78 35 32 0a FFER 0x52. 0840: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e #define GSCIS_IN 0850: 53 54 52 5f 53 49 47 4e 44 45 43 52 59 50 54 20 STR_SIGNDECRYPT 0860: 20 20 20 20 20 20 30 78 34 32 0a 0a 23 64 65 66 0x42..#def 0870: 69 6e 65 20 47 53 43 49 53 5f 50 41 52 41 4d 5f ine GSCIS_PARAM_ 0880: 53 45 4c 45 43 54 5f 41 50 50 4c 45 54 20 20 20 SELECT_APPLET 0890: 20 20 30 78 30 34 0a 0a 2f 2a 2a 20 54 61 67 73 0x04../** Tags 08a0: 20 2a 2a 2f 0a 2f 2a 2a 2a 20 43 43 43 20 54 61 **/./*** CCC Ta 08b0: 67 73 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 gs ***/.#define 08c0: 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44 GSCIS_TAG_CARDID 08d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 0x 08e0: 46 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 F0.#define GSCIS 08f0: 5f 54 41 47 5f 43 43 43 5f 56 45 52 20 20 20 20 _TAG_CCC_VER 0900: 20 20 20 20 20 20 20 20 20 30 78 46 31 0a 23 64 0xF1.#d 0910: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0920: 43 43 47 5f 56 45 52 20 20 20 20 20 20 20 20 20 CCG_VER 0930: 20 20 20 20 30 78 46 32 0a 23 64 65 66 69 6e 65 0xF2.#define 0940: 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 55 GSCIS_TAG_CARDU 0950: 52 4c 20 20 20 20 20 20 20 20 20 20 20 20 20 30 RL 0 0960: 78 46 33 0a 23 64 65 66 69 6e 65 20 47 53 43 49 xF3.#define GSCI 0970: 53 5f 54 41 47 5f 50 4b 43 53 31 35 20 20 20 20 S_TAG_PKCS15 0980: 20 20 20 20 20 20 20 20 20 20 30 78 46 34 0a 23 0xF4.# 0990: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 09a0: 5f 52 45 47 5f 44 41 54 41 5f 4d 4f 44 45 4c 20 _REG_DATA_MODEL 09b0: 20 20 20 20 20 30 78 46 35 0a 23 64 65 66 69 6e 0xF5.#defin 09c0: 65 20 47 53 43 49 53 5f 54 41 47 5f 41 43 52 5f e GSCIS_TAG_ACR_ 09d0: 54 41 42 4c 45 20 20 20 20 20 20 20 20 20 20 20 TABLE 09e0: 30 78 46 36 0a 23 64 65 66 69 6e 65 20 47 53 43 0xF6.#define GSC 09f0: 49 53 5f 54 41 47 5f 43 41 52 44 5f 41 50 44 55 IS_TAG_CARD_APDU 0a00: 20 20 20 20 20 20 20 20 20 20 20 30 78 46 37 0a 0xF7. 0a10: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0a20: 47 5f 52 45 44 49 52 45 43 54 49 4f 4e 20 20 20 G_REDIRECTION 0a30: 20 20 20 20 20 20 30 78 46 41 0a 23 64 65 66 69 0xFA.#defi 0a40: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 54 20 ne GSCIS_TAG_CT 0a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a60: 20 30 78 46 42 0a 23 64 65 66 69 6e 65 20 47 53 0xFB.#define GS 0a70: 43 49 53 5f 54 41 47 5f 53 54 20 20 20 20 20 20 CIS_TAG_ST 0a80: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 46 43 0xFC 0a90: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0aa0: 41 47 5f 4e 45 58 54 43 43 43 20 20 20 20 20 20 AG_NEXTCCC 0ab0: 20 20 20 20 20 20 20 30 78 46 44 0a 0a 2f 2a 2a 0xFD../** 0ac0: 2a 20 47 65 6e 65 72 61 6c 20 2d 20 45 46 20 32 * General - EF 2 0ad0: 32 30 30 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 200 ***/.#define 0ae0: 20 47 53 43 49 53 5f 54 41 47 5f 46 4e 41 4d 45 GSCIS_TAG_FNAME 0af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0 0b00: 78 30 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x01.#define GSCI 0b10: 53 5f 54 41 47 5f 4d 4e 41 4d 45 20 20 20 20 20 S_TAG_MNAME 0b20: 20 20 20 20 20 20 20 20 20 20 30 78 30 32 0a 23 0x02.# 0b30: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0b40: 5f 4c 4e 41 4d 45 20 20 20 20 20 20 20 20 20 20 _LNAME 0b50: 20 20 20 20 20 30 78 30 33 0a 23 64 65 66 69 6e 0x03.#defin 0b60: 65 20 47 53 43 49 53 5f 54 41 47 5f 53 55 46 46 e GSCIS_TAG_SUFF 0b70: 49 58 20 20 20 20 20 20 20 20 20 20 20 20 20 20 IX 0b80: 30 78 30 34 0a 23 64 65 66 69 6e 65 20 47 53 43 0x04.#define GSC 0b90: 49 53 5f 54 41 47 5f 47 4f 56 54 5f 41 47 45 4e IS_TAG_GOVT_AGEN 0ba0: 43 59 20 20 20 20 20 20 20 20 20 30 78 30 35 0a CY 0x05. 0bb0: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0bc0: 47 5f 42 55 52 45 41 55 20 20 20 20 20 20 20 20 G_BUREAU 0bd0: 20 20 20 20 20 20 30 78 30 36 0a 23 64 65 66 69 0x06.#defi 0be0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 52 ne GSCIS_TAG_BUR 0bf0: 45 41 55 5f 43 4f 44 45 20 20 20 20 20 20 20 20 EAU_CODE 0c00: 20 30 78 30 37 0a 23 64 65 66 69 6e 65 20 47 53 0x07.#define GS 0c10: 43 49 53 5f 54 41 47 5f 44 45 50 54 5f 43 4f 44 CIS_TAG_DEPT_COD 0c20: 45 20 20 20 20 20 20 20 20 20 20 20 30 78 30 38 E 0x08 0c30: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0c40: 41 47 5f 54 49 54 4c 45 20 20 20 20 20 20 20 20 AG_TITLE 0c50: 20 20 20 20 20 20 20 30 78 30 39 0a 23 64 65 66 0x09.#def 0c60: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 ine GSCIS_TAG_BU 0c70: 49 4c 44 49 4e 47 20 20 20 20 20 20 20 20 20 20 ILDING 0c80: 20 20 30 78 31 30 0a 23 64 65 66 69 6e 65 20 47 0x10.#define G 0c90: 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f SCIS_TAG_OFFICE_ 0ca0: 41 44 44 52 31 20 20 20 20 20 20 20 20 30 78 31 ADDR1 0x1 0cb0: 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 1.#define GSCIS_ 0cc0: 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 32 TAG_OFFICE_ADDR2 0cd0: 20 20 20 20 20 20 20 20 30 78 31 32 0a 23 64 65 0x12.#de 0ce0: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4f fine GSCIS_TAG_O 0cf0: 46 46 49 43 45 5f 43 49 54 59 20 20 20 20 20 20 FFICE_CITY 0d00: 20 20 20 30 78 31 33 0a 23 64 65 66 69 6e 65 20 0x13.#define 0d10: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 0d20: 5f 53 54 41 54 45 20 20 20 20 20 20 20 20 30 78 _STATE 0x 0d30: 31 34 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 14.#define GSCIS 0d40: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 5a 49 50 20 _TAG_OFFICE_ZIP 0d50: 20 20 20 20 20 20 20 20 20 30 78 31 35 0a 23 64 0x15.#d 0d60: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0d70: 4f 46 46 49 43 45 5f 43 4f 55 4e 54 52 59 20 20 OFFICE_COUNTRY 0d80: 20 20 20 20 30 78 31 36 0a 23 64 65 66 69 6e 65 0x16.#define 0d90: 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 GSCIS_TAG_OFFIC 0da0: 45 5f 50 48 4f 4e 45 20 20 20 20 20 20 20 20 30 E_PHONE 0 0db0: 78 31 37 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x17.#define GSCI 0dc0: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 4f S_TAG_OFFICE_PHO 0dd0: 4e 45 5f 45 58 54 20 20 20 20 30 78 31 38 0a 23 NE_EXT 0x18.# 0de0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0df0: 5f 4f 46 46 49 43 45 5f 46 41 58 20 20 20 20 20 _OFFICE_FAX 0e00: 20 20 20 20 20 30 78 31 39 0a 23 64 65 66 69 6e 0x19.#defin 0e10: 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 e GSCIS_TAG_OFFI 0e20: 43 45 5f 45 4d 41 49 4c 20 20 20 20 20 20 20 20 CE_EMAIL 0e30: 30 78 31 41 0a 23 64 65 66 69 6e 65 20 47 53 43 0x1A.#define GSC 0e40: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 52 4f IS_TAG_OFFICE_RO 0e50: 4f 4d 20 20 20 20 20 20 20 20 20 30 78 31 42 0a OM 0x1B. 0e60: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0e70: 47 5f 4e 4f 4e 47 4f 56 5f 41 47 45 4e 43 59 20 G_NONGOV_AGENCY 0e80: 20 20 20 20 20 20 30 78 31 43 0a 23 64 65 66 69 0x1C.#defi 0e90: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 53 53 4e ne GSCIS_TAG_SSN 0ea0: 5f 44 45 53 49 47 4e 41 54 4f 52 20 20 20 20 20 _DESIGNATOR 0eb0: 20 30 78 31 44 0a 0a 2f 2a 2a 2a 20 50 49 49 20 0x1D../*** PII 0ec0: 2d 20 45 46 20 32 31 30 30 20 2a 2a 2a 2f 0a 23 - EF 2100 ***/.# 0ed0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0ee0: 5f 53 53 4e 20 20 20 20 20 20 20 20 20 20 20 20 _SSN 0ef0: 20 20 20 20 20 30 78 32 30 0a 23 64 65 66 69 6e 0x20.#defin 0f00: 65 20 47 53 43 49 53 5f 54 41 47 5f 44 4f 42 20 e GSCIS_TAG_DOB 0f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0f20: 30 78 32 31 0a 23 64 65 66 69 6e 65 20 47 53 43 0x21.#define GSC 0f30: 49 53 5f 54 41 47 5f 47 45 4e 44 45 52 20 20 20 IS_TAG_GENDER 0f40: 20 20 20 20 20 20 20 20 20 20 20 30 78 32 32 0a 0x22. 0f50: 0a 2f 2a 2a 2a 20 4c 6f 67 69 6e 20 49 6e 66 6f ./*** Login Info 0f60: 72 6d 61 74 69 6f 6e 20 2d 20 45 46 20 34 30 30 rmation - EF 400 0f70: 30 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 0 ***/.#define G 0f80: 53 43 49 53 5f 54 41 47 5f 55 53 45 52 49 44 20 SCIS_TAG_USERID 0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 34 0x4 0fa0: 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 0.#define GSCIS_ 0fb0: 54 41 47 5f 44 4f 4d 41 49 4e 20 20 20 20 20 20 TAG_DOMAIN 0fc0: 20 20 20 20 20 20 20 20 30 78 34 31 0a 23 64 65 0x41.#de 0fd0: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 50 fine GSCIS_TAG_P 0fe0: 41 53 53 57 4f 52 44 20 20 20 20 20 20 20 20 20 ASSWORD 0ff0: 20 20 20 30 78 34 32 0a 0a 2f 2a 2a 2a 20 43 61 0x42../*** Ca 1000: 72 64 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 2d rd Information - 1010: 20 45 46 20 35 30 30 30 20 2a 2a 2a 2f 0a 23 64 EF 5000 ***/.#d 1020: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 1030: 49 53 53 55 45 52 49 44 20 20 20 20 20 20 20 20 ISSUERID 1040: 20 20 20 20 30 78 35 30 0a 23 64 65 66 69 6e 65 0x50.#define 1050: 20 47 53 43 49 53 5f 54 41 47 5f 53 45 52 4e 4f GSCIS_TAG_SERNO 1060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0 1070: 78 35 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x51.#define GSCI 1080: 53 5f 54 41 47 5f 49 53 53 55 45 5f 44 41 54 45 S_TAG_ISSUE_DATE 1090: 20 20 20 20 20 20 20 20 20 20 30 78 35 32 0a 23 0x52.# 10a0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 10b0: 5f 45 58 50 49 52 45 5f 44 41 54 45 20 20 20 20 _EXPIRE_DATE 10c0: 20 20 20 20 20 30 78 35 33 0a 23 64 65 66 69 6e 0x53.#defin 10d0: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 e GSCIS_TAG_CARD 10e0: 5f 54 59 50 45 20 20 20 20 20 20 20 20 20 20 20 _TYPE 10f0: 30 78 35 34 0a 23 64 65 66 69 6e 65 20 47 53 43 0x54.#define GSC 1100: 49 53 5f 54 41 47 5f 53 45 43 55 52 49 54 59 5f IS_TAG_SECURITY_ 1110: 43 4f 44 45 20 20 20 20 20 20 20 30 78 35 37 0a CODE 0x57. 1120: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 1130: 47 5f 43 41 52 44 49 44 5f 41 49 44 20 20 20 20 G_CARDID_AID 1140: 20 20 20 20 20 20 30 78 35 38 0a 0a 2f 2a 2a 2a 0x58../*** 1150: 20 50 4b 49 20 49 6e 66 6f 72 6d 61 74 69 6f 6e PKI Information 1160: 20 2d 20 45 46 20 37 30 30 30 20 2a 2a 2a 2f 0a - EF 7000 ***/. 1170: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 1180: 47 5f 43 45 52 54 49 46 49 43 41 54 45 20 20 20 G_CERTIFICATE 1190: 20 20 20 20 20 20 30 78 37 30 0a 23 64 65 66 69 0x70.#defi 11a0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 ne GSCIS_TAG_CER 11b0: 54 5f 49 53 53 55 45 5f 44 41 54 45 20 20 20 20 T_ISSUE_DATE 11c0: 20 30 78 37 31 0a 23 64 65 66 69 6e 65 20 47 53 0x71.#define GS 11d0: 43 49 53 5f 54 41 47 5f 43 45 52 54 5f 45 58 50 CIS_TAG_CERT_EXP 11e0: 49 52 45 5f 44 41 54 45 20 20 20 20 30 78 37 32 IRE_DATE 0x72 11f0: 0a 0a 2f 2a 2a 20 41 70 70 6c 65 74 20 49 44 73 ../** Applet IDs 1200: 20 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 43 **/.#define GSC 1210: 49 53 5f 41 49 44 5f 43 43 43 20 20 20 20 20 20 IS_AID_CCC 1220: 20 20 20 20 20 20 20 20 20 20 20 30 78 41 30 2c 0xA0, 1230: 20 30 78 30 30 2c 20 30 78 30 30 2c 20 30 78 30 0x00, 0x00, 0x0 1240: 31 2c 20 30 78 31 36 2c 20 30 78 44 42 2c 20 30 1, 0x16, 0xDB, 0 1250: 78 30 30 0a 0a 23 69 66 64 65 66 20 43 41 43 4b x00..#ifdef CACK 1260: 45 59 5f 44 45 42 55 47 0a 23 20 20 69 66 64 65 EY_DEBUG.# ifde 1270: 66 20 48 41 56 45 5f 53 54 44 49 4f 5f 48 0a 23 f HAVE_STDIO_H.# 1280: 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 73 74 64 include <std 1290: 69 6f 2e 68 3e 0a 23 20 20 65 6e 64 69 66 0a 0a io.h>.# endif.. 12a0: 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 # define CACKEY 12b0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 78 2e _DEBUG_PRINTF(x. 12c0: 2e 2e 29 20 7b 20 66 70 72 69 6e 74 66 28 73 74 ..) { fprintf(st 12d0: 64 65 72 72 2c 20 22 25 73 28 29 3a 25 69 3a 20 derr, "%s():%i: 12e0: 22 2c 20 5f 5f 66 75 6e 63 5f 5f 2c 20 5f 5f 4c ", __func__, __L 12f0: 49 4e 45 5f 5f 29 3b 20 66 70 72 69 6e 74 66 28 INE__); fprintf( 1300: 73 74 64 65 72 72 2c 20 78 29 3b 20 66 70 72 69 stderr, x); fpri 1310: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 5c 6e 22 ntf(stderr, "\n" 1320: 29 3b 20 7d 0a 23 20 20 64 65 66 69 6e 65 20 43 ); }.# define C 1330: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1340: 54 42 55 46 28 66 2c 20 78 2c 20 79 29 20 7b 20 TBUF(f, x, y) { 1350: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 54 unsigned char *T 1360: 4d 50 42 55 46 3b 20 75 6e 73 69 67 6e 65 64 20 MPBUF; unsigned 1370: 6c 6f 6e 67 20 69 64 78 3b 20 54 4d 50 42 55 46 long idx; TMPBUF 1380: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 = (unsigned cha 1390: 72 20 2a 29 20 28 78 29 3b 20 66 70 72 69 6e 74 r *) (x); fprint 13a0: 66 28 73 74 64 65 72 72 2c 20 22 25 73 28 29 3a f(stderr, "%s(): 13b0: 25 69 3a 20 25 73 20 20 28 25 73 2f 25 6c 75 20 %i: %s (%s/%lu 13c0: 3d 20 7b 25 30 32 78 22 2c 20 5f 5f 66 75 6e 63 = {%02x", __func 13d0: 5f 5f 2c 20 5f 5f 4c 49 4e 45 5f 5f 2c 20 66 2c __, __LINE__, f, 13e0: 20 23 78 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c #x, (unsigned l 13f0: 6f 6e 67 29 20 28 79 29 2c 20 54 4d 50 42 55 46 ong) (y), TMPBUF 1400: 5b 30 5d 29 3b 20 66 6f 72 20 28 69 64 78 20 3d [0]); for (idx = 1410: 20 31 3b 20 69 64 78 20 3c 20 28 79 29 3b 20 69 1; idx < (y); i 1420: 64 78 2b 2b 29 20 7b 20 66 70 72 69 6e 74 66 28 dx++) { fprintf( 1430: 73 74 64 65 72 72 2c 20 22 2c 20 25 30 32 78 22 stderr, ", %02x" 1440: 2c 20 54 4d 50 42 55 46 5b 69 64 78 5d 29 3b 20 , TMPBUF[idx]); 1450: 7d 3b 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 }; fprintf(stder 1460: 72 2c 20 22 7d 29 5c 6e 22 29 3b 20 7d 0a 23 20 r, "})\n"); }.# 1470: 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 define CACKEY_D 1480: 45 42 55 47 5f 50 45 52 52 4f 52 28 78 29 20 7b EBUG_PERROR(x) { 1490: 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c fprintf(stderr, 14a0: 20 22 25 73 28 29 3a 25 69 3a 20 22 2c 20 5f 5f "%s():%i: ", __ 14b0: 66 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 4e 45 5f 5f func__, __LINE__ 14c0: 29 3b 20 70 65 72 72 6f 72 28 78 29 3b 20 7d 0a ); perror(x); }. 14d0: 23 20 20 64 65 66 69 6e 65 20 66 72 65 65 28 78 # define free(x 14e0: 29 20 7b 20 43 41 43 4b 45 59 5f 44 45 42 55 47 ) { CACKEY_DEBUG 14f0: 5f 50 52 49 4e 54 46 28 22 46 52 45 45 28 25 70 _PRINTF("FREE(%p 1500: 29 20 28 25 73 29 22 2c 20 78 2c 20 23 78 29 3b ) (%s)", x, #x); 1510: 20 66 72 65 65 28 78 29 3b 20 7d 0a 0a 73 74 61 free(x); }..sta 1520: 74 69 63 20 76 6f 69 64 20 2a 43 41 43 4b 45 59 tic void *CACKEY 1530: 5f 44 45 42 55 47 5f 46 55 4e 43 5f 4d 41 4c 4c _DEBUG_FUNC_MALL 1540: 4f 43 28 73 69 7a 65 5f 74 20 73 69 7a 65 2c 20 OC(size_t size, 1550: 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 75 6e 63 const char *func 1560: 2c 20 69 6e 74 20 6c 69 6e 65 29 20 7b 0a 09 76 , int line) {..v 1570: 6f 69 64 20 2a 72 65 74 76 61 6c 3b 0a 0a 09 72 oid *retval;...r 1580: 65 74 76 61 6c 20 3d 20 6d 61 6c 6c 6f 63 28 73 etval = malloc(s 1590: 69 7a 65 29 3b 0a 0a 09 66 70 72 69 6e 74 66 28 ize);...fprintf( 15a0: 73 74 64 65 72 72 2c 20 22 25 73 28 29 3a 25 69 stderr, "%s():%i 15b0: 3a 20 22 2c 20 66 75 6e 63 2c 20 6c 69 6e 65 29 : ", func, line) 15c0: 3b 0a 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 ;..fprintf(stder 15d0: 72 2c 20 22 4d 41 4c 4c 4f 43 28 29 20 3d 20 25 r, "MALLOC() = % 15e0: 70 22 2c 20 72 65 74 76 61 6c 29 3b 0a 09 66 70 p", retval);..fp 15f0: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 5c rintf(stderr, "\ 1600: 6e 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 n");...return(re 1610: 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 tval);.}..static 1620: 20 76 6f 69 64 20 2a 43 41 43 4b 45 59 5f 44 45 void *CACKEY_DE 1630: 42 55 47 5f 46 55 4e 43 5f 52 45 41 4c 4c 4f 43 BUG_FUNC_REALLOC 1640: 28 76 6f 69 64 20 2a 70 74 72 2c 20 73 69 7a 65 (void *ptr, size 1650: 5f 74 20 73 69 7a 65 2c 20 63 6f 6e 73 74 20 63 _t size, const c 1660: 68 61 72 20 2a 66 75 6e 63 2c 20 69 6e 74 20 6c har *func, int l 1670: 69 6e 65 29 20 7b 0a 09 76 6f 69 64 20 2a 72 65 ine) {..void *re 1680: 74 76 61 6c 3b 0a 0a 09 72 65 74 76 61 6c 20 3d tval;...retval = 1690: 20 72 65 61 6c 6c 6f 63 28 70 74 72 2c 20 73 69 realloc(ptr, si 16a0: 7a 65 29 3b 0a 0a 09 69 66 20 28 72 65 74 76 61 ze);...if (retva 16b0: 6c 20 21 3d 20 70 74 72 29 20 7b 0a 09 09 66 70 l != ptr) {...fp 16c0: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 rintf(stderr, "% 16d0: 73 28 29 3a 25 69 3a 20 22 2c 20 66 75 6e 63 2c s():%i: ", func, 16e0: 20 6c 69 6e 65 29 3b 0a 09 09 66 70 72 69 6e 74 line);...fprint 16f0: 66 28 73 74 64 65 72 72 2c 20 22 52 45 41 4c 4c f(stderr, "REALL 1700: 4f 43 28 25 70 29 20 3d 20 25 70 22 2c 20 70 74 OC(%p) = %p", pt 1710: 72 2c 20 72 65 74 76 61 6c 29 3b 0a 09 09 66 70 r, retval);...fp 1720: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 5c rintf(stderr, "\ 1730: 6e 22 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e n");..}...return 1740: 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61 (retval);.}..sta 1750: 74 69 63 20 63 68 61 72 20 2a 43 41 43 4b 45 59 tic char *CACKEY 1760: 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 54 52 44 _DEBUG_FUNC_STRD 1770: 55 50 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 UP(const char *p 1780: 74 72 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a tr, const char * 1790: 66 75 6e 63 2c 20 69 6e 74 20 6c 69 6e 65 29 20 func, int line) 17a0: 7b 0a 09 63 68 61 72 20 2a 72 65 74 76 61 6c 3b {..char *retval; 17b0: 0a 0a 09 72 65 74 76 61 6c 20 3d 20 73 74 72 64 ...retval = strd 17c0: 75 70 28 70 74 72 29 3b 0a 0a 09 66 70 72 69 6e up(ptr);...fprin 17d0: 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 28 29 tf(stderr, "%s() 17e0: 3a 25 69 3a 20 22 2c 20 66 75 6e 63 2c 20 6c 69 :%i: ", func, li 17f0: 6e 65 29 3b 0a 09 66 70 72 69 6e 74 66 28 73 74 ne);..fprintf(st 1800: 64 65 72 72 2c 20 22 53 54 52 44 55 50 5f 4d 41 derr, "STRDUP_MA 1810: 4c 4c 4f 43 28 29 20 3d 20 25 70 22 2c 20 72 65 LLOC() = %p", re 1820: 74 76 61 6c 29 3b 0a 09 66 70 72 69 6e 74 66 28 tval);..fprintf( 1830: 73 74 64 65 72 72 2c 20 22 5c 6e 22 29 3b 0a 0a stderr, "\n");.. 1840: 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b .return(retval); 1850: 0a 7d 0a 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 .}..static const 1860: 20 63 68 61 72 20 2a 43 41 43 4b 45 59 5f 44 45 char *CACKEY_DE 1870: 42 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54 4f 5f BUG_FUNC_TAG_TO_ 1880: 53 54 52 28 75 6e 73 69 67 6e 65 64 20 63 68 61 STR(unsigned cha 1890: 72 20 74 61 67 29 20 7b 0a 09 73 77 69 74 63 68 r tag) {..switch 18a0: 20 28 74 61 67 29 20 7b 0a 09 09 63 61 73 65 20 (tag) {...case 18b0: 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44 GSCIS_TAG_CARDID 18c0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 18d0: 49 53 5f 54 41 47 5f 43 41 52 44 49 44 22 29 3b IS_TAG_CARDID"); 18e0: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 18f0: 47 5f 43 43 43 5f 56 45 52 3a 0a 09 09 09 72 65 G_CCC_VER:....re 1900: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1910: 43 43 43 5f 56 45 52 22 29 3b 0a 09 09 63 61 73 CCC_VER");...cas 1920: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 43 47 5f e GSCIS_TAG_CCG_ 1930: 56 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 VER:....return(" 1940: 47 53 43 49 53 5f 54 41 47 5f 43 43 47 5f 56 45 GSCIS_TAG_CCG_VE 1950: 52 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 R");...case GSCI 1960: 53 5f 54 41 47 5f 43 41 52 44 55 52 4c 3a 0a 09 S_TAG_CARDURL:.. 1970: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 1980: 54 41 47 5f 43 41 52 44 55 52 4c 22 29 3b 0a 09 TAG_CARDURL");.. 1990: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 19a0: 50 4b 43 53 31 35 3a 0a 09 09 09 72 65 74 75 72 PKCS15:....retur 19b0: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 50 4b 43 n("GSCIS_TAG_PKC 19c0: 53 31 35 22 29 3b 0a 09 09 63 61 73 65 20 47 53 S15");...case GS 19d0: 43 49 53 5f 54 41 47 5f 52 45 47 5f 44 41 54 41 CIS_TAG_REG_DATA 19e0: 5f 4d 4f 44 45 4c 3a 0a 09 09 09 72 65 74 75 72 _MODEL:....retur 19f0: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 52 45 47 n("GSCIS_TAG_REG 1a00: 5f 44 41 54 41 5f 4d 4f 44 45 4c 22 29 3b 0a 09 _DATA_MODEL");.. 1a10: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 1a20: 41 43 52 5f 54 41 42 4c 45 3a 0a 09 09 09 72 65 ACR_TABLE:....re 1a30: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1a40: 41 43 52 5f 54 41 42 4c 45 22 29 3b 0a 09 09 63 ACR_TABLE");...c 1a50: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 ase GSCIS_TAG_CA 1a60: 52 44 5f 41 50 44 55 3a 0a 09 09 09 72 65 74 75 RD_APDU:....retu 1a70: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 43 41 rn("GSCIS_TAG_CA 1a80: 52 44 5f 41 50 44 55 22 29 3b 0a 09 09 63 61 73 RD_APDU");...cas 1a90: 65 20 47 53 43 49 53 5f 54 41 47 5f 52 45 44 49 e GSCIS_TAG_REDI 1aa0: 52 45 43 54 49 4f 4e 3a 0a 09 09 09 72 65 74 75 RECTION:....retu 1ab0: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 52 45 rn("GSCIS_TAG_RE 1ac0: 44 49 52 45 43 54 49 4f 4e 22 29 3b 0a 09 09 63 DIRECTION");...c 1ad0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 54 ase GSCIS_TAG_CT 1ae0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 1af0: 49 53 5f 54 41 47 5f 43 54 22 29 3b 0a 09 09 63 IS_TAG_CT");...c 1b00: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 53 54 ase GSCIS_TAG_ST 1b10: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 1b20: 49 53 5f 54 41 47 5f 53 54 22 29 3b 0a 09 09 63 IS_TAG_ST");...c 1b30: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4e 45 ase GSCIS_TAG_NE 1b40: 58 54 43 43 43 3a 0a 09 09 09 72 65 74 75 72 6e XTCCC:....return 1b50: 28 22 47 53 43 49 53 5f 54 41 47 5f 4e 45 58 54 ("GSCIS_TAG_NEXT 1b60: 43 43 43 22 29 3b 0a 09 09 63 61 73 65 20 47 53 CCC");...case GS 1b70: 43 49 53 5f 54 41 47 5f 46 4e 41 4d 45 3a 0a 09 CIS_TAG_FNAME:.. 1b80: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 1b90: 54 41 47 5f 46 4e 41 4d 45 22 29 3b 0a 09 09 63 TAG_FNAME");...c 1ba0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4d 4e ase GSCIS_TAG_MN 1bb0: 41 4d 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 AME:....return(" 1bc0: 47 53 43 49 53 5f 54 41 47 5f 4d 4e 41 4d 45 22 GSCIS_TAG_MNAME" 1bd0: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 1be0: 54 41 47 5f 4c 4e 41 4d 45 3a 0a 09 09 09 72 65 TAG_LNAME:....re 1bf0: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1c00: 4c 4e 41 4d 45 22 29 3b 0a 09 09 63 61 73 65 20 LNAME");...case 1c10: 47 53 43 49 53 5f 54 41 47 5f 53 55 46 46 49 58 GSCIS_TAG_SUFFIX 1c20: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 1c30: 49 53 5f 54 41 47 5f 53 55 46 46 49 58 22 29 3b IS_TAG_SUFFIX"); 1c40: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 1c50: 47 5f 47 4f 56 54 5f 41 47 45 4e 43 59 3a 0a 09 G_GOVT_AGENCY:.. 1c60: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 1c70: 54 41 47 5f 47 4f 56 54 5f 41 47 45 4e 43 59 22 TAG_GOVT_AGENCY" 1c80: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 1c90: 54 41 47 5f 42 55 52 45 41 55 3a 0a 09 09 09 72 TAG_BUREAU:....r 1ca0: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 1cb0: 5f 42 55 52 45 41 55 22 29 3b 0a 09 09 63 61 73 _BUREAU");...cas 1cc0: 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 52 45 e GSCIS_TAG_BURE 1cd0: 41 55 5f 43 4f 44 45 3a 0a 09 09 09 72 65 74 75 AU_CODE:....retu 1ce0: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 42 55 rn("GSCIS_TAG_BU 1cf0: 52 45 41 55 5f 43 4f 44 45 22 29 3b 0a 09 09 63 REAU_CODE");...c 1d00: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 44 45 ase GSCIS_TAG_DE 1d10: 50 54 5f 43 4f 44 45 3a 0a 09 09 09 72 65 74 75 PT_CODE:....retu 1d20: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 44 45 rn("GSCIS_TAG_DE 1d30: 50 54 5f 43 4f 44 45 22 29 3b 0a 09 09 63 61 73 PT_CODE");...cas 1d40: 65 20 47 53 43 49 53 5f 54 41 47 5f 54 49 54 4c e GSCIS_TAG_TITL 1d50: 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 E:....return("GS 1d60: 43 49 53 5f 54 41 47 5f 54 49 54 4c 45 22 29 3b CIS_TAG_TITLE"); 1d70: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 1d80: 47 5f 42 55 49 4c 44 49 4e 47 3a 0a 09 09 09 72 G_BUILDING:....r 1d90: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 1da0: 5f 42 55 49 4c 44 49 4e 47 22 29 3b 0a 09 09 63 _BUILDING");...c 1db0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 ase GSCIS_TAG_OF 1dc0: 46 49 43 45 5f 41 44 44 52 31 3a 0a 09 09 09 72 FICE_ADDR1:....r 1dd0: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 1de0: 5f 4f 46 46 49 43 45 5f 41 44 44 52 31 22 29 3b _OFFICE_ADDR1"); 1df0: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 1e00: 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 32 3a 0a G_OFFICE_ADDR2:. 1e10: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 1e20: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 _TAG_OFFICE_ADDR 1e30: 32 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 2");...case GSCI 1e40: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 43 49 54 S_TAG_OFFICE_CIT 1e50: 59 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 Y:....return("GS 1e60: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 43 CIS_TAG_OFFICE_C 1e70: 49 54 59 22 29 3b 0a 09 09 63 61 73 65 20 47 53 ITY");...case GS 1e80: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 53 CIS_TAG_OFFICE_S 1e90: 54 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 TATE:....return( 1ea0: 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 "GSCIS_TAG_OFFIC 1eb0: 45 5f 53 54 41 54 45 22 29 3b 0a 09 09 63 61 73 E_STATE");...cas 1ec0: 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 e GSCIS_TAG_OFFI 1ed0: 43 45 5f 5a 49 50 3a 0a 09 09 09 72 65 74 75 72 CE_ZIP:....retur 1ee0: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 n("GSCIS_TAG_OFF 1ef0: 49 43 45 5f 5a 49 50 22 29 3b 0a 09 09 63 61 73 ICE_ZIP");...cas 1f00: 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 e GSCIS_TAG_OFFI 1f10: 43 45 5f 43 4f 55 4e 54 52 59 3a 0a 09 09 09 72 CE_COUNTRY:....r 1f20: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 1f30: 5f 4f 46 46 49 43 45 5f 43 4f 55 4e 54 52 59 22 _OFFICE_COUNTRY" 1f40: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 1f50: 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 4f 4e 45 TAG_OFFICE_PHONE 1f60: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 1f70: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 IS_TAG_OFFICE_PH 1f80: 4f 4e 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 ONE");...case GS 1f90: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 CIS_TAG_OFFICE_P 1fa0: 48 4f 4e 45 5f 45 58 54 3a 0a 09 09 09 72 65 74 HONE_EXT:....ret 1fb0: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f urn("GSCIS_TAG_O 1fc0: 46 46 49 43 45 5f 50 48 4f 4e 45 5f 45 58 54 22 FFICE_PHONE_EXT" 1fd0: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 1fe0: 54 41 47 5f 4f 46 46 49 43 45 5f 46 41 58 3a 0a TAG_OFFICE_FAX:. 1ff0: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 2000: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 46 41 58 22 _TAG_OFFICE_FAX" 2010: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 2020: 54 41 47 5f 4f 46 46 49 43 45 5f 45 4d 41 49 4c TAG_OFFICE_EMAIL 2030: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 2040: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 45 4d IS_TAG_OFFICE_EM 2050: 41 49 4c 22 29 3b 0a 09 09 63 61 73 65 20 47 53 AIL");...case GS 2060: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 52 CIS_TAG_OFFICE_R 2070: 4f 4f 4d 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 OOM:....return(" 2080: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 2090: 5f 52 4f 4f 4d 22 29 3b 0a 09 09 63 61 73 65 20 _ROOM");...case 20a0: 47 53 43 49 53 5f 54 41 47 5f 4e 4f 4e 47 4f 56 GSCIS_TAG_NONGOV 20b0: 5f 41 47 45 4e 43 59 3a 0a 09 09 09 72 65 74 75 _AGENCY:....retu 20c0: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4e 4f rn("GSCIS_TAG_NO 20d0: 4e 47 4f 56 5f 41 47 45 4e 43 59 22 29 3b 0a 09 NGOV_AGENCY");.. 20e0: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 20f0: 53 53 4e 5f 44 45 53 49 47 4e 41 54 4f 52 3a 0a SSN_DESIGNATOR:. 2100: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 2110: 5f 54 41 47 5f 53 53 4e 5f 44 45 53 49 47 4e 41 _TAG_SSN_DESIGNA 2120: 54 4f 52 22 29 3b 0a 09 09 63 61 73 65 20 47 53 TOR");...case GS 2130: 43 49 53 5f 54 41 47 5f 53 53 4e 3a 0a 09 09 09 CIS_TAG_SSN:.... 2140: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 2150: 47 5f 53 53 4e 22 29 3b 0a 09 09 63 61 73 65 20 G_SSN");...case 2160: 47 53 43 49 53 5f 54 41 47 5f 44 4f 42 3a 0a 09 GSCIS_TAG_DOB:.. 2170: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 2180: 54 41 47 5f 44 4f 42 22 29 3b 0a 09 09 63 61 73 TAG_DOB");...cas 2190: 65 20 47 53 43 49 53 5f 54 41 47 5f 47 45 4e 44 e GSCIS_TAG_GEND 21a0: 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 ER:....return("G 21b0: 53 43 49 53 5f 54 41 47 5f 47 45 4e 44 45 52 22 SCIS_TAG_GENDER" 21c0: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 21d0: 54 41 47 5f 55 53 45 52 49 44 3a 0a 09 09 09 72 TAG_USERID:....r 21e0: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 21f0: 5f 55 53 45 52 49 44 22 29 3b 0a 09 09 63 61 73 _USERID");...cas 2200: 65 20 47 53 43 49 53 5f 54 41 47 5f 44 4f 4d 41 e GSCIS_TAG_DOMA 2210: 49 4e 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 IN:....return("G 2220: 53 43 49 53 5f 54 41 47 5f 44 4f 4d 41 49 4e 22 SCIS_TAG_DOMAIN" 2230: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 2240: 54 41 47 5f 50 41 53 53 57 4f 52 44 3a 0a 09 09 TAG_PASSWORD:... 2250: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 2260: 41 47 5f 50 41 53 53 57 4f 52 44 22 29 3b 0a 09 AG_PASSWORD");.. 2270: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 2280: 49 53 53 55 45 52 49 44 3a 0a 09 09 09 72 65 74 ISSUERID:....ret 2290: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 49 urn("GSCIS_TAG_I 22a0: 53 53 55 45 52 49 44 22 29 3b 0a 09 09 63 61 73 SSUERID");...cas 22b0: 65 20 47 53 43 49 53 5f 54 41 47 5f 53 45 52 4e e GSCIS_TAG_SERN 22c0: 4f 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 O:....return("GS 22d0: 43 49 53 5f 54 41 47 5f 53 45 52 4e 4f 22 29 3b CIS_TAG_SERNO"); 22e0: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 22f0: 47 5f 49 53 53 55 45 5f 44 41 54 45 3a 0a 09 09 G_ISSUE_DATE:... 2300: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 2310: 41 47 5f 49 53 53 55 45 5f 44 41 54 45 22 29 3b AG_ISSUE_DATE"); 2320: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 2330: 47 5f 45 58 50 49 52 45 5f 44 41 54 45 3a 0a 09 G_EXPIRE_DATE:.. 2340: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 2350: 54 41 47 5f 45 58 50 49 52 45 5f 44 41 54 45 22 TAG_EXPIRE_DATE" 2360: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 2370: 54 41 47 5f 43 41 52 44 5f 54 59 50 45 3a 0a 09 TAG_CARD_TYPE:.. 2380: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 2390: 54 41 47 5f 43 41 52 44 5f 54 59 50 45 22 29 3b TAG_CARD_TYPE"); 23a0: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 23b0: 47 5f 53 45 43 55 52 49 54 59 5f 43 4f 44 45 3a G_SECURITY_CODE: 23c0: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 23d0: 53 5f 54 41 47 5f 53 45 43 55 52 49 54 59 5f 43 S_TAG_SECURITY_C 23e0: 4f 44 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 ODE");...case GS 23f0: 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44 5f 41 CIS_TAG_CARDID_A 2400: 49 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 ID:....return("G 2410: 53 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44 5f SCIS_TAG_CARDID_ 2420: 41 49 44 22 29 3b 0a 09 09 63 61 73 65 20 47 53 AID");...case GS 2430: 43 49 53 5f 54 41 47 5f 43 45 52 54 49 46 49 43 CIS_TAG_CERTIFIC 2440: 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 ATE:....return(" 2450: 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 49 46 GSCIS_TAG_CERTIF 2460: 49 43 41 54 45 22 29 3b 0a 09 09 63 61 73 65 20 ICATE");...case 2470: 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 5f 49 GSCIS_TAG_CERT_I 2480: 53 53 55 45 5f 44 41 54 45 3a 0a 09 09 09 72 65 SSUE_DATE:....re 2490: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 24a0: 43 45 52 54 5f 49 53 53 55 45 5f 44 41 54 45 22 CERT_ISSUE_DATE" 24b0: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 24c0: 54 41 47 5f 43 45 52 54 5f 45 58 50 49 52 45 5f TAG_CERT_EXPIRE_ 24d0: 44 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 DATE:....return( 24e0: 22 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 5f "GSCIS_TAG_CERT_ 24f0: 45 58 50 49 52 45 5f 44 41 54 45 22 29 3b 0a 09 EXPIRE_DATE");.. 2500: 7d 0a 0a 09 72 65 74 75 72 6e 28 22 55 4e 4b 4e }...return("UNKN 2510: 4f 57 4e 22 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 OWN");.}..static 2520: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 43 41 43 const char *CAC 2530: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 KEY_DEBUG_FUNC_S 2540: 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 4c CARDERR_TO_STR(L 2550: 4f 4e 47 20 72 65 74 63 6f 64 65 29 20 7b 0a 09 ONG retcode) {.. 2560: 73 77 69 74 63 68 20 28 72 65 74 63 6f 64 65 29 switch (retcode) 2570: 20 7b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f {...case SCARD_ 2580: 53 5f 53 55 43 43 45 53 53 3a 0a 09 09 09 72 65 S_SUCCESS:....re 2590: 74 75 72 6e 28 22 53 43 41 52 44 5f 53 5f 53 55 turn("SCARD_S_SU 25a0: 43 43 45 53 53 22 29 3b 0a 09 09 63 61 73 65 20 CCESS");...case 25b0: 53 43 41 52 44 5f 45 5f 43 41 4e 43 45 4c 4c 45 SCARD_E_CANCELLE 25c0: 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 D:....return("SC 25d0: 41 52 44 5f 45 5f 43 41 4e 43 45 4c 4c 45 44 22 ARD_E_CANCELLED" 25e0: 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f );...case SCARD_ 25f0: 45 5f 43 41 4e 54 5f 44 49 53 50 4f 53 45 3a 0a E_CANT_DISPOSE:. 2600: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2610: 5f 45 5f 43 41 4e 54 5f 44 49 53 50 4f 53 45 22 _E_CANT_DISPOSE" 2620: 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f );...case SCARD_ 2630: 45 5f 49 4e 53 55 46 46 49 43 49 45 4e 54 5f 42 E_INSUFFICIENT_B 2640: 55 46 46 45 52 3a 0a 09 09 09 72 65 74 75 72 6e UFFER:....return 2650: 28 22 53 43 41 52 44 5f 45 5f 49 4e 53 55 46 46 ("SCARD_E_INSUFF 2660: 49 43 49 45 4e 54 5f 42 55 46 46 45 52 22 29 3b ICIENT_BUFFER"); 2670: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 2680: 49 4e 56 41 4c 49 44 5f 41 54 52 3a 0a 09 09 09 INVALID_ATR:.... 2690: 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f return("SCARD_E_ 26a0: 49 4e 56 41 4c 49 44 5f 41 54 52 22 29 3b 0a 09 INVALID_ATR");.. 26b0: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 49 4e .case SCARD_E_IN 26c0: 56 41 4c 49 44 5f 48 41 4e 44 4c 45 3a 0a 09 09 VALID_HANDLE:... 26d0: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 26e0: 5f 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 22 _INVALID_HANDLE" 26f0: 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f );...case SCARD_ 2700: 45 5f 49 4e 56 41 4c 49 44 5f 50 41 52 41 4d 45 E_INVALID_PARAME 2710: 54 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 TER:....return(" 2720: 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f SCARD_E_INVALID_ 2730: 50 41 52 41 4d 45 54 45 52 22 29 3b 0a 09 09 63 PARAMETER");...c 2740: 61 73 65 20 53 43 41 52 44 5f 45 5f 49 4e 56 41 ase SCARD_E_INVA 2750: 4c 49 44 5f 54 41 52 47 45 54 3a 0a 09 09 09 72 LID_TARGET:....r 2760: 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 49 eturn("SCARD_E_I 2770: 4e 56 41 4c 49 44 5f 54 41 52 47 45 54 22 29 3b NVALID_TARGET"); 2780: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 2790: 49 4e 56 41 4c 49 44 5f 56 41 4c 55 45 3a 0a 09 INVALID_VALUE:.. 27a0: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 27b0: 45 5f 49 4e 56 41 4c 49 44 5f 56 41 4c 55 45 22 E_INVALID_VALUE" 27c0: 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f );...case SCARD_ 27d0: 45 5f 4e 4f 5f 4d 45 4d 4f 52 59 3a 0a 09 09 09 E_NO_MEMORY:.... 27e0: 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f return("SCARD_E_ 27f0: 4e 4f 5f 4d 45 4d 4f 52 59 22 29 3b 0a 09 09 63 NO_MEMORY");...c 2800: 61 73 65 20 53 43 41 52 44 5f 45 5f 55 4e 4b 4e ase SCARD_E_UNKN 2810: 4f 57 4e 5f 52 45 41 44 45 52 3a 0a 09 09 09 72 OWN_READER:....r 2820: 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 55 eturn("SCARD_E_U 2830: 4e 4b 4e 4f 57 4e 5f 52 45 41 44 45 52 22 29 3b NKNOWN_READER"); 2840: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 2850: 54 49 4d 45 4f 55 54 3a 0a 09 09 09 72 65 74 75 TIMEOUT:....retu 2860: 72 6e 28 22 53 43 41 52 44 5f 45 5f 54 49 4d 45 rn("SCARD_E_TIME 2870: 4f 55 54 22 29 3b 0a 09 09 63 61 73 65 20 53 43 OUT");...case SC 2880: 41 52 44 5f 45 5f 53 48 41 52 49 4e 47 5f 56 49 ARD_E_SHARING_VI 2890: 4f 4c 41 54 49 4f 4e 3a 0a 09 09 09 72 65 74 75 OLATION:....retu 28a0: 72 6e 28 22 53 43 41 52 44 5f 45 5f 53 48 41 52 rn("SCARD_E_SHAR 28b0: 49 4e 47 5f 56 49 4f 4c 41 54 49 4f 4e 22 29 3b ING_VIOLATION"); 28c0: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 28d0: 4e 4f 5f 53 4d 41 52 54 43 41 52 44 3a 0a 09 09 NO_SMARTCARD:... 28e0: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 28f0: 5f 4e 4f 5f 53 4d 41 52 54 43 41 52 44 22 29 3b _NO_SMARTCARD"); 2900: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 2910: 55 4e 4b 4e 4f 57 4e 5f 43 41 52 44 3a 0a 09 09 UNKNOWN_CARD:... 2920: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 2930: 5f 55 4e 4b 4e 4f 57 4e 5f 43 41 52 44 22 29 3b _UNKNOWN_CARD"); 2940: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 2950: 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 3a 0a PROTO_MISMATCH:. 2960: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2970: 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 _E_PROTO_MISMATC 2980: 48 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 H");...case SCAR 2990: 44 5f 45 5f 4e 4f 54 5f 52 45 41 44 59 3a 0a 09 D_E_NOT_READY:.. 29a0: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 29b0: 45 5f 4e 4f 54 5f 52 45 41 44 59 22 29 3b 0a 09 E_NOT_READY");.. 29c0: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 53 59 .case SCARD_E_SY 29d0: 53 54 45 4d 5f 43 41 4e 43 45 4c 4c 45 44 3a 0a STEM_CANCELLED:. 29e0: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 29f0: 5f 45 5f 53 59 53 54 45 4d 5f 43 41 4e 43 45 4c _E_SYSTEM_CANCEL 2a00: 4c 45 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 LED");...case SC 2a10: 41 52 44 5f 45 5f 4e 4f 54 5f 54 52 41 4e 53 41 ARD_E_NOT_TRANSA 2a20: 43 54 45 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 CTED:....return( 2a30: 22 53 43 41 52 44 5f 45 5f 4e 4f 54 5f 54 52 41 "SCARD_E_NOT_TRA 2a40: 4e 53 41 43 54 45 44 22 29 3b 0a 09 09 63 61 73 NSACTED");...cas 2a50: 65 20 53 43 41 52 44 5f 45 5f 52 45 41 44 45 52 e SCARD_E_READER 2a60: 5f 55 4e 41 56 41 49 4c 41 42 4c 45 3a 0a 09 09 _UNAVAILABLE:... 2a70: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 2a80: 5f 52 45 41 44 45 52 5f 55 4e 41 56 41 49 4c 41 _READER_UNAVAILA 2a90: 42 4c 45 22 29 3b 0a 09 09 63 61 73 65 20 53 43 BLE");...case SC 2aa0: 41 52 44 5f 57 5f 55 4e 53 55 50 50 4f 52 54 45 ARD_W_UNSUPPORTE 2ab0: 44 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 D_CARD:....retur 2ac0: 6e 28 22 53 43 41 52 44 5f 57 5f 55 4e 53 55 50 n("SCARD_W_UNSUP 2ad0: 50 4f 52 54 45 44 5f 43 41 52 44 22 29 3b 0a 09 PORTED_CARD");.. 2ae0: 09 63 61 73 65 20 53 43 41 52 44 5f 57 5f 55 4e .case SCARD_W_UN 2af0: 52 45 53 50 4f 4e 53 49 56 45 5f 43 41 52 44 3a RESPONSIVE_CARD: 2b00: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 2b10: 44 5f 57 5f 55 4e 52 45 53 50 4f 4e 53 49 56 45 D_W_UNRESPONSIVE 2b20: 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 20 _CARD");...case 2b30: 53 43 41 52 44 5f 57 5f 55 4e 50 4f 57 45 52 45 SCARD_W_UNPOWERE 2b40: 44 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 D_CARD:....retur 2b50: 6e 28 22 53 43 41 52 44 5f 57 5f 55 4e 50 4f 57 n("SCARD_W_UNPOW 2b60: 45 52 45 44 5f 43 41 52 44 22 29 3b 0a 09 09 63 ERED_CARD");...c 2b70: 61 73 65 20 53 43 41 52 44 5f 57 5f 52 45 53 45 ase SCARD_W_RESE 2b80: 54 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 T_CARD:....retur 2b90: 6e 28 22 53 43 41 52 44 5f 57 5f 52 45 53 45 54 n("SCARD_W_RESET 2ba0: 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 20 _CARD");...case 2bb0: 53 43 41 52 44 5f 57 5f 52 45 4d 4f 56 45 44 5f SCARD_W_REMOVED_ 2bc0: 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 CARD:....return( 2bd0: 22 53 43 41 52 44 5f 57 5f 52 45 4d 4f 56 45 44 "SCARD_W_REMOVED 2be0: 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 20 _CARD");...case 2bf0: 53 43 41 52 44 5f 45 5f 50 43 49 5f 54 4f 4f 5f SCARD_E_PCI_TOO_ 2c00: 53 4d 41 4c 4c 3a 0a 09 09 09 72 65 74 75 72 6e SMALL:....return 2c10: 28 22 53 43 41 52 44 5f 45 5f 50 43 49 5f 54 4f ("SCARD_E_PCI_TO 2c20: 4f 5f 53 4d 41 4c 4c 22 29 3b 0a 09 09 63 61 73 O_SMALL");...cas 2c30: 65 20 53 43 41 52 44 5f 45 5f 52 45 41 44 45 52 e SCARD_E_READER 2c40: 5f 55 4e 53 55 50 50 4f 52 54 45 44 3a 0a 09 09 _UNSUPPORTED:... 2c50: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 2c60: 5f 52 45 41 44 45 52 5f 55 4e 53 55 50 50 4f 52 _READER_UNSUPPOR 2c70: 54 45 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 TED");...case SC 2c80: 41 52 44 5f 45 5f 44 55 50 4c 49 43 41 54 45 5f ARD_E_DUPLICATE_ 2c90: 52 45 41 44 45 52 3a 0a 09 09 09 72 65 74 75 72 READER:....retur 2ca0: 6e 28 22 53 43 41 52 44 5f 45 5f 44 55 50 4c 49 n("SCARD_E_DUPLI 2cb0: 43 41 54 45 5f 52 45 41 44 45 52 22 29 3b 0a 09 CATE_READER");.. 2cc0: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 43 41 .case SCARD_E_CA 2cd0: 52 44 5f 55 4e 53 55 50 50 4f 52 54 45 44 3a 0a RD_UNSUPPORTED:. 2ce0: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2cf0: 5f 45 5f 43 41 52 44 5f 55 4e 53 55 50 50 4f 52 _E_CARD_UNSUPPOR 2d00: 54 45 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 TED");...case SC 2d10: 41 52 44 5f 45 5f 4e 4f 5f 53 45 52 56 49 43 45 ARD_E_NO_SERVICE 2d20: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 :....return("SCA 2d30: 52 44 5f 45 5f 4e 4f 5f 53 45 52 56 49 43 45 22 RD_E_NO_SERVICE" 2d40: 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f );...case SCARD_ 2d50: 45 5f 53 45 52 56 49 43 45 5f 53 54 4f 50 50 45 E_SERVICE_STOPPE 2d60: 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 D:....return("SC 2d70: 41 52 44 5f 45 5f 53 45 52 56 49 43 45 5f 53 54 ARD_E_SERVICE_ST 2d80: 4f 50 50 45 44 22 29 3b 0a 09 09 63 61 73 65 20 OPPED");...case 2d90: 53 43 41 52 44 5f 57 5f 49 4e 53 45 52 54 45 44 SCARD_W_INSERTED 2da0: 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 6e _CARD:....return 2db0: 28 22 53 43 41 52 44 5f 57 5f 49 4e 53 45 52 54 ("SCARD_W_INSERT 2dc0: 45 44 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 ED_CARD");...cas 2dd0: 65 20 53 43 41 52 44 5f 45 5f 55 4e 53 55 50 50 e SCARD_E_UNSUPP 2de0: 4f 52 54 45 44 5f 46 45 41 54 55 52 45 3a 0a 09 ORTED_FEATURE:.. 2df0: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 2e00: 45 5f 55 4e 53 55 50 50 4f 52 54 45 44 5f 46 45 E_UNSUPPORTED_FE 2e10: 41 54 55 52 45 22 29 3b 0a 09 7d 0a 0a 09 72 65 ATURE");..}...re 2e20: 74 75 72 6e 28 22 55 4e 4b 4e 4f 57 4e 22 29 3b turn("UNKNOWN"); 2e30: 0a 7d 0a 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 .}..static const 2e40: 20 63 68 61 72 20 2a 43 41 43 4b 45 59 5f 44 45 char *CACKEY_DE 2e50: 42 55 47 5f 46 55 4e 43 5f 4f 42 4a 49 44 5f 54 BUG_FUNC_OBJID_T 2e60: 4f 5f 53 54 52 28 75 69 6e 74 31 36 5f 74 20 6f O_STR(uint16_t o 2e70: 62 6a 69 64 29 20 7b 0a 09 73 77 69 74 63 68 20 bjid) {..switch 2e80: 28 6f 62 6a 69 64 29 20 7b 0a 09 09 63 61 73 65 (objid) {...case 2e90: 20 30 78 32 30 30 30 3a 0a 09 09 09 72 65 74 75 0x2000:....retu 2ea0: 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f rn("CACKEY_TLV_O 2eb0: 42 4a 49 44 5f 47 45 4e 45 52 41 4c 49 4e 46 4f BJID_GENERALINFO 2ec0: 22 29 3b 0a 09 09 63 61 73 65 20 30 78 32 31 30 ");...case 0x210 2ed0: 30 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 0:....return("CA 2ee0: 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 50 CKEY_TLV_OBJID_P 2ef0: 52 4f 50 45 52 53 4f 4e 41 4c 49 4e 46 4f 22 29 ROPERSONALINFO") 2f00: 3b 0a 09 09 63 61 73 65 20 30 78 33 30 30 30 3a ;...case 0x3000: 2f10: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b ....return("CACK 2f20: 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 41 43 43 EY_TLV_OBJID_ACC 2f30: 45 53 53 43 4f 4e 54 52 4f 4c 22 29 3b 0a 09 09 ESSCONTROL");... 2f40: 63 61 73 65 20 30 78 34 30 30 30 3a 0a 09 09 09 case 0x4000:.... 2f50: 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 return("CACKEY_T 2f60: 4c 56 5f 4f 42 4a 49 44 5f 4c 4f 47 49 4e 22 29 LV_OBJID_LOGIN") 2f70: 3b 0a 09 09 63 61 73 65 20 30 78 35 30 30 30 3a ;...case 0x5000: 2f80: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b ....return("CACK 2f90: 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 52 EY_TLV_OBJID_CAR 2fa0: 44 49 4e 46 4f 22 29 3b 0a 09 09 63 61 73 65 20 DINFO");...case 2fb0: 30 78 36 30 30 30 3a 0a 09 09 09 72 65 74 75 72 0x6000:....retur 2fc0: 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 n("CACKEY_TLV_OB 2fd0: 4a 49 44 5f 42 49 4f 4d 45 54 52 49 43 53 22 29 JID_BIOMETRICS") 2fe0: 3b 0a 09 09 63 61 73 65 20 30 78 37 30 30 30 3a ;...case 0x7000: 2ff0: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b ....return("CACK 3000: 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 44 49 47 EY_TLV_OBJID_DIG 3010: 49 54 41 4c 53 49 47 43 45 52 54 22 29 3b 0a 09 ITALSIGCERT");.. 3020: 09 63 61 73 65 20 30 78 30 32 30 30 3a 0a 09 09 .case 0x0200:... 3030: 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f .return("CACKEY_ 3040: 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 45 TLV_OBJID_CAC_PE 3050: 52 53 4f 4e 22 29 3b 0a 09 09 63 61 73 65 20 30 RSON");...case 0 3060: 78 30 32 30 32 3a 0a 09 09 09 72 65 74 75 72 6e x0202:....return 3070: 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a ("CACKEY_TLV_OBJ 3080: 49 44 5f 43 41 43 5f 42 45 4e 45 46 49 54 53 22 ID_CAC_BENEFITS" 3090: 29 3b 0a 09 09 63 61 73 65 20 30 78 30 32 30 33 );...case 0x0203 30a0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 :....return("CAC 30b0: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 KEY_TLV_OBJID_CA 30c0: 43 5f 4f 54 48 45 52 42 45 4e 45 46 49 54 53 22 C_OTHERBENEFITS" 30d0: 29 3b 0a 09 09 63 61 73 65 20 30 78 30 32 30 31 );...case 0x0201 30e0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 :....return("CAC 30f0: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 KEY_TLV_OBJID_CA 3100: 43 5f 50 45 52 53 4f 4e 4e 45 4c 22 29 3b 0a 09 C_PERSONNEL");.. 3110: 09 63 61 73 65 20 30 78 30 32 46 45 3a 0a 09 09 .case 0x02FE:... 3120: 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f .return("CACKEY_ 3130: 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 4b TLV_OBJID_CAC_PK 3140: 49 43 45 52 54 22 29 3b 0a 09 7d 0a 09 0a 09 72 ICERT");..}....r 3150: 65 74 75 72 6e 28 22 55 4e 4b 4e 4f 57 4e 22 29 eturn("UNKNOWN") 3160: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63 6f 6e 73 ;.}..static cons 3170: 74 20 63 68 61 72 20 2a 43 41 43 4b 45 59 5f 44 t char *CACKEY_D 3180: 45 42 55 47 5f 46 55 4e 43 5f 41 50 50 54 59 50 EBUG_FUNC_APPTYP 3190: 45 5f 54 4f 5f 53 54 52 28 75 69 6e 74 38 5f 74 E_TO_STR(uint8_t 31a0: 20 61 70 70 74 79 70 65 29 20 7b 0a 09 73 77 69 apptype) {..swi 31b0: 74 63 68 20 28 61 70 70 74 79 70 65 29 20 7b 0a tch (apptype) {. 31c0: 09 09 63 61 73 65 20 30 78 30 30 3a 0a 09 09 09 ..case 0x00:.... 31d0: 72 65 74 75 72 6e 28 22 4e 4f 4e 45 22 29 3b 0a return("NONE");. 31e0: 09 09 63 61 73 65 20 30 78 30 31 3a 0a 09 09 09 ..case 0x01:.... 31f0: 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 return("CACKEY_T 3200: 4c 56 5f 41 50 50 5f 47 45 4e 45 52 49 43 22 29 LV_APP_GENERIC") 3210: 3b 0a 09 09 63 61 73 65 20 30 78 30 32 3a 0a 09 ;...case 0x02:.. 3220: 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 ..return("CACKEY 3230: 5f 54 4c 56 5f 41 50 50 5f 53 4b 49 22 29 3b 0a _TLV_APP_SKI");. 3240: 09 09 63 61 73 65 20 30 78 30 33 3a 0a 09 09 09 ..case 0x03:.... 3250: 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 return("CACKEY_T 3260: 4c 56 5f 41 50 50 5f 47 45 4e 45 52 49 43 20 7c LV_APP_GENERIC | 3270: 20 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f CACKEY_TLV_APP_ 3280: 53 4b 49 22 29 3b 0a 09 09 63 61 73 65 20 30 78 SKI");...case 0x 3290: 30 34 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 04:....return("C 32a0: 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b ACKEY_TLV_APP_PK 32b0: 49 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 35 I");...case 0x05 32c0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 :....return("CAC 32d0: 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 47 45 4e 45 KEY_TLV_APP_GENE 32e0: 52 49 43 20 7c 20 43 41 43 4b 45 59 5f 54 4c 56 RIC | CACKEY_TLV 32f0: 5f 41 50 50 5f 50 4b 49 22 29 3b 0a 09 09 63 61 _APP_PKI");...ca 3300: 73 65 20 30 78 30 36 3a 0a 09 09 09 72 65 74 75 se 0x06:....retu 3310: 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 41 rn("CACKEY_TLV_A 3320: 50 50 5f 53 4b 49 20 7c 20 43 41 43 4b 45 59 5f PP_SKI | CACKEY_ 3330: 54 4c 56 5f 41 50 50 5f 50 4b 49 22 29 3b 0a 09 TLV_APP_PKI");.. 3340: 09 63 61 73 65 20 30 78 30 37 3a 0a 09 09 09 72 .case 0x07:....r 3350: 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c eturn("CACKEY_TL 3360: 56 5f 41 50 50 5f 47 45 4e 45 52 49 43 20 7c 20 V_APP_GENERIC | 3370: 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 53 CACKEY_TLV_APP_S 3380: 4b 49 20 7c 20 43 41 43 4b 45 59 5f 54 4c 56 5f KI | CACKEY_TLV_ 3390: 41 50 50 5f 50 4b 49 22 29 3b 0a 09 7d 0a 0a 09 APP_PKI");..}... 33a0: 72 65 74 75 72 6e 28 22 49 4e 56 41 4c 49 44 22 return("INVALID" 33b0: 29 3b 0a 7d 0a 0a 23 20 20 64 65 66 69 6e 65 20 );.}..# define 33c0: 6d 61 6c 6c 6f 63 28 78 29 20 43 41 43 4b 45 59 malloc(x) CACKEY 33d0: 5f 44 45 42 55 47 5f 46 55 4e 43 5f 4d 41 4c 4c _DEBUG_FUNC_MALL 33e0: 4f 43 28 78 2c 20 5f 5f 66 75 6e 63 5f 5f 2c 20 OC(x, __func__, 33f0: 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 20 64 65 66 __LINE__).# def 3400: 69 6e 65 20 72 65 61 6c 6c 6f 63 28 78 2c 20 79 ine realloc(x, y 3410: 29 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 ) CACKEY_DEBUG_F 3420: 55 4e 43 5f 52 45 41 4c 4c 4f 43 28 78 2c 20 79 UNC_REALLOC(x, y 3430: 2c 20 5f 5f 66 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 , __func__, __LI 3440: 4e 45 5f 5f 29 0a 23 20 20 69 66 64 65 66 20 73 NE__).# ifdef s 3450: 74 72 64 75 70 0a 23 20 20 20 20 75 6e 64 65 66 trdup.# undef 3460: 20 73 74 72 64 75 70 0a 23 20 20 65 6e 64 69 66 strdup.# endif 3470: 0a 23 20 20 64 65 66 69 6e 65 20 73 74 72 64 75 .# define strdu 3480: 70 28 78 29 20 43 41 43 4b 45 59 5f 44 45 42 55 p(x) CACKEY_DEBU 3490: 47 5f 46 55 4e 43 5f 53 54 52 44 55 50 28 78 2c G_FUNC_STRDUP(x, 34a0: 20 5f 5f 66 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 4e __func__, __LIN 34b0: 45 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 E__).#else.# de 34c0: 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 fine CACKEY_DEBU 34d0: 47 5f 50 52 49 4e 54 46 28 78 2e 2e 2e 29 20 2f G_PRINTF(x...) / 34e0: 2a 2a 2f 0a 23 20 20 64 65 66 69 6e 65 20 43 41 **/.# define CA 34f0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 3500: 42 55 46 28 66 2c 20 78 2c 20 79 29 20 2f 2a 2a BUF(f, x, y) /** 3510: 2f 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b /.# define CACK 3520: 45 59 5f 44 45 42 55 47 5f 50 45 52 52 4f 52 28 EY_DEBUG_PERROR( 3530: 78 29 20 2f 2a 2a 2f 0a 23 20 20 64 65 66 69 6e x) /**/.# defin 3540: 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 e CACKEY_DEBUG_F 3550: 55 4e 43 5f 54 41 47 5f 54 4f 5f 53 54 52 28 78 UNC_TAG_TO_STR(x 3560: 29 20 22 44 45 42 55 47 5f 44 49 53 41 42 4c 45 ) "DEBUG_DISABLE 3570: 44 22 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 D".# define CAC 3580: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 KEY_DEBUG_FUNC_S 3590: 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 78 CARDERR_TO_STR(x 35a0: 29 20 22 44 45 42 55 47 5f 44 49 53 41 42 4c 45 ) "DEBUG_DISABLE 35b0: 44 22 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 D".# define CAC 35c0: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 4f KEY_DEBUG_FUNC_O 35d0: 42 4a 49 44 5f 54 4f 5f 53 54 52 28 78 29 20 22 BJID_TO_STR(x) " 35e0: 44 45 42 55 47 5f 44 49 53 41 42 4c 45 44 22 0a DEBUG_DISABLED". 35f0: 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 # define CACKEY 3600: 5f 44 45 42 55 47 5f 46 55 4e 43 5f 41 50 50 54 _DEBUG_FUNC_APPT 3610: 59 50 45 5f 54 4f 5f 53 54 52 28 78 29 20 22 44 YPE_TO_STR(x) "D 3620: 45 42 55 47 5f 44 49 53 41 42 4c 45 44 22 0a 23 EBUG_DISABLED".# 3630: 65 6e 64 69 66 0a 0a 73 74 72 75 63 74 20 63 61 endif..struct ca 3640: 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 ckey_pcsc_identi 3650: 74 79 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 63 ty {..unsigned c 3660: 68 61 72 20 61 70 70 6c 65 74 5b 37 5d 3b 0a 09 har applet[7];.. 3670: 75 69 6e 74 31 36 5f 74 20 66 69 6c 65 3b 0a 0a uint16_t file;.. 3680: 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a .unsigned char * 3690: 6c 61 62 65 6c 3b 0a 0a 09 73 69 7a 65 5f 74 20 label;...size_t 36a0: 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 3b certificate_len; 36b0: 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 ..unsigned char 36c0: 2a 63 65 72 74 69 66 69 63 61 74 65 3b 0a 7d 3b *certificate;.}; 36d0: 0a 0a 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f ..struct cackey_ 36e0: 69 64 65 6e 74 69 74 79 20 7b 0a 09 73 74 72 75 identity {..stru 36f0: 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 ct cackey_pcsc_i 3700: 64 65 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 74 dentity *identit 3710: 79 3b 0a 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 y;...CK_ATTRIBUT 3720: 45 20 2a 61 74 74 72 69 62 75 74 65 73 3b 0a 09 E *attributes;.. 3730: 43 4b 5f 55 4c 4f 4e 47 20 61 74 74 72 69 62 75 CK_ULONG attribu 3740: 74 65 73 5f 63 6f 75 6e 74 3b 0a 7d 3b 0a 0a 73 tes_count;.};..s 3750: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 65 73 truct cackey_ses 3760: 73 69 6f 6e 20 7b 0a 09 69 6e 74 20 61 63 74 69 sion {..int acti 3770: 76 65 3b 0a 0a 09 43 4b 5f 53 4c 4f 54 5f 49 44 ve;...CK_SLOT_ID 3780: 20 73 6c 6f 74 49 44 3b 0a 0a 09 43 4b 5f 53 54 slotID;...CK_ST 3790: 41 54 45 20 73 74 61 74 65 3b 0a 09 43 4b 5f 46 ATE state;..CK_F 37a0: 4c 41 47 53 20 66 6c 61 67 73 3b 0a 09 43 4b 5f LAGS flags;..CK_ 37b0: 55 4c 4f 4e 47 20 75 6c 44 65 76 69 63 65 45 72 ULONG ulDeviceEr 37c0: 72 6f 72 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 54 ror;..CK_VOID_PT 37d0: 52 20 70 41 70 70 6c 69 63 61 74 69 6f 6e 3b 0a R pApplication;. 37e0: 09 43 4b 5f 4e 4f 54 49 46 59 20 4e 6f 74 69 66 .CK_NOTIFY Notif 37f0: 79 3b 0a 0a 09 73 74 72 75 63 74 20 63 61 63 6b y;...struct cack 3800: 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 69 64 65 ey_identity *ide 3810: 6e 74 69 74 69 65 73 3b 0a 09 75 6e 73 69 67 6e ntities;..unsign 3820: 65 64 20 6c 6f 6e 67 20 69 64 65 6e 74 69 74 69 ed long identiti 3830: 65 73 5f 63 6f 75 6e 74 3b 0a 0a 09 69 6e 74 20 es_count;...int 3840: 73 65 61 72 63 68 5f 61 63 74 69 76 65 3b 0a 09 search_active;.. 3850: 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 CK_ATTRIBUTE_PTR 3860: 20 73 65 61 72 63 68 5f 71 75 65 72 79 3b 0a 09 search_query;.. 3870: 43 4b 5f 55 4c 4f 4e 47 20 73 65 61 72 63 68 5f CK_ULONG search_ 3880: 71 75 65 72 79 5f 63 6f 75 6e 74 3b 0a 09 75 6e query_count;..un 3890: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 73 65 61 72 signed long sear 38a0: 63 68 5f 63 75 72 72 5f 69 64 3b 0a 0a 09 69 6e ch_curr_id;...in 38b0: 74 20 73 69 67 6e 5f 61 63 74 69 76 65 3b 0a 09 t sign_active;.. 38c0: 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 59 50 CK_MECHANISM_TYP 38d0: 45 20 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 6d E sign_mechanism 38e0: 3b 0a 09 43 4b 5f 42 59 54 45 5f 50 54 52 20 73 ;..CK_BYTE_PTR s 38f0: 69 67 6e 5f 62 75 66 3b 0a 09 75 6e 73 69 67 6e ign_buf;..unsign 3900: 65 64 20 6c 6f 6e 67 20 73 69 67 6e 5f 62 75 66 ed long sign_buf 3910: 6c 65 6e 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c len;..unsigned l 3920: 6f 6e 67 20 73 69 67 6e 5f 62 75 66 75 73 65 64 ong sign_bufused 3930: 3b 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 ;..struct cackey 3940: 5f 69 64 65 6e 74 69 74 79 20 2a 73 69 67 6e 5f _identity *sign_ 3950: 69 64 65 6e 74 69 74 79 3b 0a 0a 09 69 6e 74 20 identity;...int 3960: 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 3b 0a decrypt_active;. 3970: 09 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 59 .CK_MECHANISM_TY 3980: 50 45 20 64 65 63 72 79 70 74 5f 6d 65 63 68 61 PE decrypt_mecha 3990: 6e 69 73 6d 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 nism;..CK_VOID_P 39a0: 54 52 20 64 65 63 72 79 70 74 5f 6d 65 63 68 5f TR decrypt_mech_ 39b0: 70 61 72 6d 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 parm;..CK_ULONG 39c0: 64 65 63 72 79 70 74 5f 6d 65 63 68 5f 70 61 72 decrypt_mech_par 39d0: 6d 6c 65 6e 3b 0a 09 73 74 72 75 63 74 20 63 61 mlen;..struct ca 39e0: 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 64 ckey_identity *d 39f0: 65 63 72 79 70 74 5f 69 64 65 6e 74 69 74 79 3b ecrypt_identity; 3a00: 0a 7d 3b 0a 0a 73 74 72 75 63 74 20 63 61 63 6b .};..struct cack 3a10: 65 79 5f 73 6c 6f 74 20 7b 0a 09 69 6e 74 20 61 ey_slot {..int a 3a20: 63 74 69 76 65 3b 0a 0a 09 63 68 61 72 20 2a 70 ctive;...char *p 3a30: 63 73 63 5f 72 65 61 64 65 72 3b 0a 0a 09 69 6e csc_reader;...in 3a40: 74 20 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e t pcsc_card_conn 3a50: 65 63 74 65 64 3b 0a 09 53 43 41 52 44 48 41 4e ected;..SCARDHAN 3a60: 44 4c 45 20 70 63 73 63 5f 63 61 72 64 3b 0a 0a DLE pcsc_card;.. 3a70: 09 69 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e .int transaction 3a80: 5f 64 65 70 74 68 3b 0a 0a 09 69 6e 74 20 73 6c _depth;...int sl 3a90: 6f 74 5f 72 65 73 65 74 3b 0a 7d 3b 0a 0a 74 79 ot_reset;.};..ty 3aa0: 70 65 64 65 66 20 65 6e 75 6d 20 7b 0a 09 43 41 pedef enum {..CA 3ab0: 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 47 45 4e CKEY_TLV_APP_GEN 3ac0: 45 52 49 43 20 3d 20 30 78 30 31 2c 0a 09 43 41 ERIC = 0x01,..CA 3ad0: 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 53 4b 49 CKEY_TLV_APP_SKI 3ae0: 20 20 20 20 20 3d 20 30 78 30 32 2c 0a 09 43 41 = 0x02,..CA 3af0: 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 CKEY_TLV_APP_PKI 3b00: 20 20 20 20 20 3d 20 30 78 30 34 0a 7d 20 63 61 = 0x04.} ca 3b10: 63 6b 65 79 5f 74 6c 76 5f 61 70 70 74 79 70 65 ckey_tlv_apptype 3b20: 3b 0a 0a 74 79 70 65 64 65 66 20 65 6e 75 6d 20 ;..typedef enum 3b30: 7b 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 {..CACKEY_TLV_OB 3b40: 4a 49 44 5f 47 45 4e 45 52 41 4c 49 4e 46 4f 20 JID_GENERALINFO 3b50: 20 20 20 20 20 20 3d 20 30 78 32 30 30 30 2c 0a = 0x2000,. 3b60: 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 .CACKEY_TLV_OBJI 3b70: 44 5f 50 52 4f 50 45 52 53 4f 4e 41 4c 49 4e 46 D_PROPERSONALINF 3b80: 4f 20 20 20 3d 20 30 78 32 31 30 30 2c 0a 09 43 O = 0x2100,..C 3b90: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 3ba0: 41 43 43 45 53 53 43 4f 4e 54 52 4f 4c 20 20 20 ACCESSCONTROL 3bb0: 20 20 3d 20 30 78 33 30 30 30 2c 0a 09 43 41 43 = 0x3000,..CAC 3bc0: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 4c 4f KEY_TLV_OBJID_LO 3bd0: 47 49 4e 20 20 20 20 20 20 20 20 20 20 20 20 20 GIN 3be0: 3d 20 30 78 34 30 30 30 2c 0a 09 43 41 43 4b 45 = 0x4000,..CACKE 3bf0: 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 52 44 Y_TLV_OBJID_CARD 3c00: 49 4e 46 4f 20 20 20 20 20 20 20 20 20 20 3d 20 INFO = 3c10: 30 78 35 30 30 30 2c 0a 09 43 41 43 4b 45 59 5f 0x5000,..CACKEY_ 3c20: 54 4c 56 5f 4f 42 4a 49 44 5f 42 49 4f 4d 45 54 TLV_OBJID_BIOMET 3c30: 52 49 43 53 20 20 20 20 20 20 20 20 3d 20 30 78 RICS = 0x 3c40: 36 30 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 6000,..CACKEY_TL 3c50: 56 5f 4f 42 4a 49 44 5f 44 49 47 49 54 41 4c 53 V_OBJID_DIGITALS 3c60: 49 47 43 45 52 54 20 20 20 20 3d 20 30 78 37 30 IGCERT = 0x70 3c70: 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 00,..CACKEY_TLV_ 3c80: 4f 42 4a 49 44 5f 43 41 43 5f 50 45 52 53 4f 4e OBJID_CAC_PERSON 3c90: 20 20 20 20 20 20 20 20 3d 20 30 78 30 32 30 30 = 0x0200 3ca0: 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 ,..CACKEY_TLV_OB 3cb0: 4a 49 44 5f 43 41 43 5f 42 45 4e 45 46 49 54 53 JID_CAC_BENEFITS 3cc0: 20 20 20 20 20 20 3d 20 30 78 30 32 30 32 2c 0a = 0x0202,. 3cd0: 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 .CACKEY_TLV_OBJI 3ce0: 44 5f 43 41 43 5f 4f 54 48 45 52 42 45 4e 45 46 D_CAC_OTHERBENEF 3cf0: 49 54 53 20 3d 20 30 78 30 32 30 33 2c 0a 09 43 ITS = 0x0203,..C 3d00: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 3d10: 43 41 43 5f 50 45 52 53 4f 4e 4e 45 4c 20 20 20 CAC_PERSONNEL 3d20: 20 20 3d 20 30 78 30 32 30 31 2c 0a 09 43 41 43 = 0x0201,..CAC 3d30: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 KEY_TLV_OBJID_CA 3d40: 43 5f 50 4b 49 43 45 52 54 20 20 20 20 20 20 20 C_PKICERT 3d50: 3d 20 30 78 30 32 46 45 0a 7d 20 63 61 63 6b 65 = 0x02FE.} cacke 3d60: 79 5f 74 6c 76 5f 6f 62 6a 65 63 74 69 64 3b 0a y_tlv_objectid;. 3d70: 0a 74 79 70 65 64 65 66 20 65 6e 75 6d 20 7b 0a .typedef enum {. 3d80: 09 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 54 .CACKEY_PCSC_S_T 3d90: 4f 4b 45 4e 50 52 45 53 45 4e 54 20 20 20 20 3d OKENPRESENT = 3da0: 20 32 2c 0a 09 43 41 43 4b 45 59 5f 50 43 53 43 2,..CACKEY_PCSC 3db0: 5f 53 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 20 20 _S_TOKENABSENT 3dc0: 20 20 20 3d 20 31 2c 0a 09 43 41 43 4b 45 59 5f = 1,..CACKEY_ 3dd0: 50 43 53 43 5f 53 5f 4f 4b 20 20 20 20 20 20 20 PCSC_S_OK 3de0: 20 20 20 20 20 20 20 3d 20 30 2c 0a 09 43 41 43 = 0,..CAC 3df0: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 3e00: 49 43 20 20 20 20 20 20 20 20 20 3d 20 2d 31 2c IC = -1, 3e10: 0a 09 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f ..CACKEY_PCSC_E_ 3e20: 42 41 44 50 49 4e 20 20 20 20 20 20 20 20 20 20 BADPIN 3e30: 3d 20 2d 32 2c 0a 09 43 41 43 4b 45 59 5f 50 43 = -2,..CACKEY_PC 3e40: 53 43 5f 45 5f 4c 4f 43 4b 45 44 20 20 20 20 20 SC_E_LOCKED 3e50: 20 20 20 20 20 3d 20 2d 33 2c 0a 7d 20 63 61 63 = -3,.} cac 3e60: 6b 65 79 5f 72 65 74 3b 0a 0a 73 74 72 75 63 74 key_ret;..struct 3e70: 20 63 61 63 6b 65 79 5f 74 6c 76 5f 63 61 72 64 cackey_tlv_card 3e80: 75 72 6c 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 url {..unsigned 3e90: 63 68 61 72 20 20 20 20 20 20 20 20 72 69 64 5b char rid[ 3ea0: 35 5d 3b 0a 09 63 61 63 6b 65 79 5f 74 6c 76 5f 5];..cackey_tlv_ 3eb0: 61 70 70 74 79 70 65 20 20 20 61 70 70 74 79 70 apptype apptyp 3ec0: 65 3b 0a 09 63 61 63 6b 65 79 5f 74 6c 76 5f 6f e;..cackey_tlv_o 3ed0: 62 6a 65 63 74 69 64 20 20 6f 62 6a 65 63 74 69 bjectid objecti 3ee0: 64 3b 0a 09 63 61 63 6b 65 79 5f 74 6c 76 5f 6f d;..cackey_tlv_o 3ef0: 62 6a 65 63 74 69 64 20 20 61 70 70 69 64 3b 0a bjectid appid;. 3f00: 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 20 .unsigned char 3f10: 20 20 20 20 20 20 70 69 6e 69 64 3b 0a 7d 3b 0a pinid;.};. 3f20: 0a 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 .struct cackey_t 3f30: 6c 76 5f 65 6e 74 69 74 79 3b 0a 73 74 72 75 63 lv_entity;.struc 3f40: 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 t cackey_tlv_ent 3f50: 69 74 79 20 7b 0a 09 75 69 6e 74 38 5f 74 20 74 ity {..uint8_t t 3f60: 61 67 3b 0a 09 73 69 7a 65 5f 74 20 6c 65 6e 67 ag;..size_t leng 3f70: 74 68 3b 0a 0a 09 75 6e 69 6f 6e 20 7b 0a 09 09 th;...union {... 3f80: 76 6f 69 64 20 2a 76 61 6c 75 65 3b 0a 09 09 73 void *value;...s 3f90: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 truct cackey_tlv 3fa0: 5f 63 61 72 64 75 72 6c 20 2a 76 61 6c 75 65 5f _cardurl *value_ 3fb0: 63 61 72 64 75 72 6c 3b 0a 09 09 75 69 6e 74 38 cardurl;...uint8 3fc0: 5f 74 20 76 61 6c 75 65 5f 62 79 74 65 3b 0a 09 _t value_byte;.. 3fd0: 7d 3b 0a 0a 09 73 74 72 75 63 74 20 63 61 63 6b };...struct cack 3fe0: 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a 5f ey_tlv_entity *_ 3ff0: 6e 65 78 74 3b 0a 7d 3b 0a 0a 2f 2a 20 43 41 43 next;.};../* CAC 4000: 4b 45 59 20 47 6c 6f 62 61 6c 20 48 61 6e 64 6c KEY Global Handl 4010: 65 73 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 es */.static voi 4020: 64 20 2a 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 d *cackey_bigloc 4030: 6b 20 3d 20 4e 55 4c 4c 3b 0a 73 74 61 74 69 63 k = NULL;.static 4040: 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 struct cackey_s 4050: 65 73 73 69 6f 6e 20 63 61 63 6b 65 79 5f 73 65 ession cackey_se 4060: 73 73 69 6f 6e 73 5b 31 32 38 5d 3b 0a 73 74 61 ssions[128];.sta 4070: 74 69 63 20 73 74 72 75 63 74 20 63 61 63 6b 65 tic struct cacke 4080: 79 5f 73 6c 6f 74 20 63 61 63 6b 65 79 5f 73 6c y_slot cackey_sl 4090: 6f 74 73 5b 31 32 38 5d 3b 0a 73 74 61 74 69 63 ots[128];.static 40a0: 20 69 6e 74 20 63 61 63 6b 65 79 5f 69 6e 69 74 int cackey_init 40b0: 69 61 6c 69 7a 65 64 20 3d 20 30 3b 0a 73 74 61 ialized = 0;.sta 40c0: 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 62 tic int cackey_b 40d0: 69 67 6c 6f 63 6b 5f 69 6e 69 74 20 3d 20 30 3b iglock_init = 0; 40e0: 0a 43 4b 5f 43 5f 49 4e 49 54 49 41 4c 49 5a 45 .CK_C_INITIALIZE 40f0: 5f 41 52 47 53 20 63 61 63 6b 65 79 5f 61 72 67 _ARGS cackey_arg 4100: 73 3b 0a 0a 2f 2a 20 50 43 53 43 20 47 6c 6f 62 s;../* PCSC Glob 4110: 61 6c 20 48 61 6e 64 6c 65 73 20 2a 2f 0a 73 74 al Handles */.st 4120: 61 74 69 63 20 4c 50 53 43 41 52 44 43 4f 4e 54 atic LPSCARDCONT 4130: 45 58 54 20 63 61 63 6b 65 79 5f 70 63 73 63 5f EXT cackey_pcsc_ 4140: 68 61 6e 64 6c 65 20 3d 20 4e 55 4c 4c 3b 0a 0a handle = NULL;.. 4150: 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 static unsigned 4160: 6c 6f 6e 67 20 63 61 63 6b 65 79 5f 67 65 74 76 long cackey_getv 4170: 65 72 73 69 6f 6e 28 76 6f 69 64 29 20 7b 0a 09 ersion(void) {.. 4180: 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 static unsigned 4190: 6c 6f 6e 67 20 72 65 74 76 61 6c 20 3d 20 32 35 long retval = 25 41a0: 35 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 5;..unsigned lon 41b0: 67 20 6d 61 6a 6f 72 20 3d 20 30 3b 0a 09 75 6e g major = 0;..un 41c0: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6d 69 6e 6f signed long mino 41d0: 72 20 3d 20 30 3b 0a 09 63 68 61 72 20 2a 6d 61 r = 0;..char *ma 41e0: 6a 6f 72 5f 73 74 72 20 3d 20 4e 55 4c 4c 3b 0a jor_str = NULL;. 41f0: 09 63 68 61 72 20 2a 6d 69 6e 6f 72 5f 73 74 72 .char *minor_str 4200: 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 43 41 43 4b 45 = NULL;...CACKE 4210: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 4220: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 4230: 28 72 65 74 76 61 6c 20 21 3d 20 32 35 35 29 20 (retval != 255) 4240: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 4250: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 4260: 6e 67 20 30 78 25 6c 78 20 28 63 61 63 68 65 64 ng 0x%lx (cached 4270: 29 2e 22 2c 20 72 65 74 76 61 6c 29 3b 0a 0a 09 ).", retval);... 4280: 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b .return(retval); 4290: 0a 09 7d 0a 0a 09 72 65 74 76 61 6c 20 3d 20 30 ..}...retval = 0 42a0: 3b 0a 0a 23 69 66 64 65 66 20 50 41 43 4b 41 47 ;..#ifdef PACKAG 42b0: 45 5f 56 45 52 53 49 4f 4e 0a 20 20 20 20 20 20 E_VERSION. 42c0: 20 20 6d 61 6a 6f 72 5f 73 74 72 20 3d 20 50 41 major_str = PA 42d0: 43 4b 41 47 45 5f 56 45 52 53 49 4f 4e 3b 0a 09 CKAGE_VERSION;.. 42e0: 69 66 20 28 6d 61 6a 6f 72 5f 73 74 72 29 20 7b if (major_str) { 42f0: 0a 09 20 20 20 20 20 20 20 20 6d 61 6a 6f 72 20 .. major 4300: 3d 20 73 74 72 74 6f 75 6c 28 6d 61 6a 6f 72 5f = strtoul(major_ 4310: 73 74 72 2c 20 26 6d 69 6e 6f 72 5f 73 74 72 2c str, &minor_str, 4320: 20 31 30 29 3b 0a 0a 09 09 69 66 20 28 6d 69 6e 10);....if (min 4330: 6f 72 5f 73 74 72 29 20 7b 0a 09 09 09 6d 69 6e or_str) {....min 4340: 6f 72 20 3d 20 73 74 72 74 6f 75 6c 28 6d 69 6e or = strtoul(min 4350: 6f 72 5f 73 74 72 20 2b 20 31 2c 20 4e 55 4c 4c or_str + 1, NULL 4360: 2c 20 31 30 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 , 10);...}..}... 4370: 72 65 74 76 61 6c 20 3d 20 28 6d 61 6a 6f 72 20 retval = (major 4380: 3c 3c 20 31 36 29 20 7c 20 28 6d 69 6e 6f 72 20 << 16) | (minor 4390: 3c 3c 20 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 09 << 8);.#endif... 43a0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 43b0: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 30 NTF("Returning 0 43c0: 78 25 6c 78 22 2c 20 72 65 74 76 61 6c 29 3b 0a x%lx", retval);. 43d0: 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 ..return(retval) 43e0: 3b 0a 7d 0a 0a 2f 2a 20 50 43 2f 53 43 20 52 65 ;.}../* PC/SC Re 43f0: 6c 61 74 65 64 20 46 75 6e 63 74 69 6f 6e 73 20 lated Functions 4400: 2a 2f 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 */./*. * SYNPOSI 4410: 53 0a 20 2a 20 20 20 20 20 76 6f 69 64 20 63 61 S. * void ca 4420: 63 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f ckey_slots_disco 4430: 6e 6e 65 63 74 5f 61 6c 6c 28 76 6f 69 64 29 3b nnect_all(void); 4440: 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 . *. * ARGUMENTS 4450: 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a . * None. *. 4460: 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a * RETURN VALUE. 4470: 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 * None. *. 4480: 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 54 * NOTES. * T 4490: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 64 69 73 his function dis 44a0: 63 6f 6e 6e 65 63 74 73 20 66 72 6f 6d 20 61 6c connects from al 44b0: 6c 20 63 61 72 64 73 2e 0a 20 2a 0a 20 2a 2f 0a l cards.. *. */. 44c0: 73 74 61 74 69 63 20 76 6f 69 64 20 63 61 63 6b static void cack 44d0: 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e ey_slots_disconn 44e0: 65 63 74 5f 61 6c 6c 28 76 6f 69 64 29 20 7b 0a ect_all(void) {. 44f0: 09 75 69 6e 74 33 32 5f 74 20 69 64 78 3b 0a 0a .uint32_t idx;.. 4500: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 4510: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 4520: 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b ...for (idx = 0; 4530: 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 idx < (sizeof(c 4540: 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 ackey_slots) / s 4550: 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f izeof(cackey_slo 4560: 74 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 ts[0])); idx++) 4570: 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 {...if (cackey_s 4580: 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 63 lots[idx].pcsc_c 4590: 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 29 20 7b ard_connected) { 45a0: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 45b0: 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 44 69 _PRINTF("SCardDi 45c0: 73 63 6f 6e 6e 65 63 74 28 25 6c 75 29 20 63 61 sconnect(%lu) ca 45d0: 6c 6c 65 64 22 2c 20 28 75 6e 73 69 67 6e 65 64 lled", (unsigned 45e0: 20 6c 6f 6e 67 29 20 69 64 78 29 3b 0a 0a 09 09 long) idx);.... 45f0: 09 53 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 .SCardDisconnect 4600: 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 (cackey_slots[id 4610: 78 5d 2e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 x].pcsc_card, SC 4620: 41 52 44 5f 4c 45 41 56 45 5f 43 41 52 44 29 3b ARD_LEAVE_CARD); 4630: 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 ...}....cackey_s 4640: 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 63 lots[idx].pcsc_c 4650: 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 ard_connected = 4660: 30 3b 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 0;...cackey_slot 4670: 73 5b 69 64 78 5d 2e 74 72 61 6e 73 61 63 74 69 s[idx].transacti 4680: 6f 6e 5f 64 65 70 74 68 20 3d 20 30 3b 0a 0a 09 on_depth = 0;... 4690: 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 .if (cackey_slot 46a0: 73 5b 69 64 78 5d 2e 61 63 74 69 76 65 29 20 7b s[idx].active) { 46b0: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 46c0: 5f 50 52 49 4e 54 46 28 22 4d 61 72 6b 69 6e 67 _PRINTF("Marking 46d0: 20 61 63 74 69 76 65 20 73 6c 6f 74 20 25 6c 75 active slot %lu 46e0: 20 61 73 20 62 65 69 6e 67 20 72 65 73 65 74 22 as being reset" 46f0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 4700: 29 20 69 64 78 29 3b 0a 09 09 7d 0a 0a 09 09 63 ) idx);...}....c 4710: 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d ackey_slots[idx] 4720: 2e 73 6c 6f 74 5f 72 65 73 65 74 20 3d 20 31 3b .slot_reset = 1; 4730: 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 4740: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 4750: 6e 69 6e 67 22 29 3b 0a 0a 09 72 65 74 75 72 6e ning");...return 4760: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f ;.}../*. * SYNPO 4770: 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 SIS. * cacke 4780: 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 70 63 73 y_ret cackey_pcs 4790: 63 5f 63 6f 6e 6e 65 63 74 28 76 6f 69 64 29 3b c_connect(void); 47a0: 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 . *. * ARGUMENTS 47b0: 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a . * None. *. 47c0: 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a * RETURN VALUE. 47d0: 20 2a 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 * CACKEY_PC 47e0: 53 43 5f 53 5f 4f 4b 20 20 20 20 20 20 20 20 20 SC_S_OK 47f0: 4f 6e 20 73 75 63 63 65 73 73 0a 20 2a 20 20 20 On success. * 4800: 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f CACKEY_PCSC_E_ 4810: 47 45 4e 45 52 49 43 20 20 20 20 4f 6e 20 65 72 GENERIC On er 4820: 72 6f 72 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a ror. *. * NOTES. 4830: 20 2a 20 20 20 20 20 54 68 69 73 20 66 75 6e 63 * This func 4840: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 73 20 74 6f tion connects to 4850: 20 74 68 65 20 50 43 2f 53 43 20 43 6f 6e 6e 65 the PC/SC Conne 4860: 63 74 69 6f 6e 20 4d 61 6e 61 67 65 72 20 61 6e ction Manager an 4870: 64 20 75 70 64 61 74 65 73 20 74 68 65 0a 20 2a d updates the. * 4880: 20 20 20 20 20 67 6c 6f 62 61 6c 20 68 61 6e 64 global hand 4890: 6c 65 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 le.. *. */.stati 48a0: 63 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 c cackey_ret cac 48b0: 6b 65 79 5f 70 63 73 63 5f 63 6f 6e 6e 65 63 74 key_pcsc_connect 48c0: 28 76 6f 69 64 29 20 7b 0a 09 4c 4f 4e 47 20 73 (void) {..LONG s 48d0: 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 card_est_context 48e0: 5f 72 65 74 3b 0a 23 69 66 64 65 66 20 48 41 56 _ret;.#ifdef HAV 48f0: 45 5f 53 43 41 52 44 49 53 56 41 4c 49 44 43 4f E_SCARDISVALIDCO 4900: 4e 54 45 58 54 0a 09 4c 4f 4e 47 20 73 63 61 72 NTEXT..LONG scar 4910: 64 5f 69 73 76 61 6c 69 64 5f 72 65 74 3b 0a 23 d_isvalid_ret;.# 4920: 65 6e 64 69 66 0a 0a 09 43 41 43 4b 45 59 5f 44 endif...CACKEY_D 4930: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 4940: 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 63 61 led.");...if (ca 4950: 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 ckey_pcsc_handle 4960: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 63 61 == NULL) {...ca 4970: 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 ckey_pcsc_handle 4980: 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 = malloc(sizeof 4990: 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 (*cackey_pcsc_ha 49a0: 6e 64 6c 65 29 29 3b 0a 09 09 69 66 20 28 63 61 ndle));...if (ca 49b0: 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 ckey_pcsc_handle 49c0: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 43 == NULL) {....C 49d0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 49e0: 54 46 28 22 43 61 6c 6c 20 74 6f 20 6d 61 6c 6c TF("Call to mall 49f0: 6f 63 28 29 20 66 61 69 6c 65 64 2c 20 72 65 74 oc() failed, ret 4a00: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 4a10: 65 22 29 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f e");.....cackey_ 4a20: 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 slots_disconnect 4a30: 5f 61 6c 6c 28 29 3b 0a 0a 09 09 09 72 65 74 75 _all();.....retu 4a40: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 4a50: 5f 47 45 4e 45 52 49 43 29 3b 0a 09 09 7d 0a 0a _GENERIC);...}.. 4a60: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 4a70: 52 49 4e 54 46 28 22 53 43 61 72 64 45 73 74 61 RINTF("SCardEsta 4a80: 62 6c 69 73 68 43 6f 6e 74 65 78 74 28 29 20 63 blishContext() c 4a90: 61 6c 6c 65 64 22 29 3b 0a 09 09 73 63 61 72 64 alled");...scard 4aa0: 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 _est_context_ret 4ab0: 20 3d 20 53 43 61 72 64 45 73 74 61 62 6c 69 73 = SCardEstablis 4ac0: 68 43 6f 6e 74 65 78 74 28 53 43 41 52 44 5f 53 hContext(SCARD_S 4ad0: 43 4f 50 45 5f 53 59 53 54 45 4d 2c 20 4e 55 4c COPE_SYSTEM, NUL 4ae0: 4c 2c 20 4e 55 4c 4c 2c 20 63 61 63 6b 65 79 5f L, NULL, cackey_ 4af0: 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 09 pcsc_handle);... 4b00: 69 66 20 28 73 63 61 72 64 5f 65 73 74 5f 63 6f if (scard_est_co 4b10: 6e 74 65 78 74 5f 72 65 74 20 21 3d 20 53 43 41 ntext_ret != SCA 4b20: 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a RD_S_SUCCESS) {. 4b30: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 4b40: 50 52 49 4e 54 46 28 22 43 61 6c 6c 20 74 6f 20 PRINTF("Call to 4b50: 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 43 6f SCardEstablishCo 4b60: 6e 74 65 78 74 20 66 61 69 6c 65 64 20 28 72 65 ntext failed (re 4b70: 74 75 72 6e 65 64 20 25 73 2f 25 6c 69 29 2c 20 turned %s/%li), 4b80: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai 4b90: 6c 75 72 65 22 2c 20 43 41 43 4b 45 59 5f 44 45 lure", CACKEY_DE 4ba0: 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 BUG_FUNC_SCARDER 4bb0: 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f 65 R_TO_STR(scard_e 4bc0: 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 29 2c st_context_ret), 4bd0: 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f 65 73 (long) scard_es 4be0: 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 29 3b 0a t_context_ret);. 4bf0: 0a 09 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f ....free(cackey_ 4c00: 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 09 pcsc_handle);... 4c10: 09 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e .cackey_pcsc_han 4c20: 64 6c 65 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 dle = NULL;..... 4c30: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 cackey_slots_dis 4c40: 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 29 3b 0a 0a connect_all();.. 4c50: 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 4c60: 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 _PCSC_E_GENERIC) 4c70: 3b 0a 09 09 7d 0a 09 7d 0a 0a 23 69 66 64 65 66 ;...}..}..#ifdef 4c80: 20 48 41 56 45 5f 53 43 41 52 44 49 53 56 41 4c HAVE_SCARDISVAL 4c90: 49 44 43 4f 4e 54 45 58 54 0a 09 43 41 43 4b 45 IDCONTEXT..CACKE 4ca0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 4cb0: 53 43 61 72 64 49 73 56 61 6c 69 64 43 6f 6e 74 SCardIsValidCont 4cc0: 65 78 74 28 29 20 63 61 6c 6c 65 64 22 29 3b 0a ext() called");. 4cd0: 09 73 63 61 72 64 5f 69 73 76 61 6c 69 64 5f 72 .scard_isvalid_r 4ce0: 65 74 20 3d 20 53 43 61 72 64 49 73 56 61 6c 69 et = SCardIsVali 4cf0: 64 43 6f 6e 74 65 78 74 28 2a 63 61 63 6b 65 79 dContext(*cackey 4d00: 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 _pcsc_handle);.. 4d10: 69 66 20 28 73 63 61 72 64 5f 69 73 76 61 6c 69 if (scard_isvali 4d20: 64 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f 53 d_ret != SCARD_S 4d30: 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 43 41 _SUCCESS) {...CA 4d40: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 4d50: 46 28 22 48 61 6e 64 6c 65 20 68 61 73 20 62 65 F("Handle has be 4d60: 63 6f 6d 65 20 69 6e 76 61 6c 69 64 20 28 53 43 come invalid (SC 4d70: 61 72 64 49 73 56 61 6c 69 64 43 6f 6e 74 65 78 ardIsValidContex 4d80: 74 20 3d 20 25 73 2f 25 6c 69 29 2c 20 74 72 79 t = %s/%li), try 4d90: 69 6e 67 20 74 6f 20 72 65 2d 65 73 74 61 62 6c ing to re-establ 4da0: 69 73 68 2e 2e 2e 22 2c 20 43 41 43 4b 45 59 5f ish...", CACKEY_ 4db0: 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 DEBUG_FUNC_SCARD 4dc0: 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 ERR_TO_STR(scard 4dd0: 5f 69 73 76 61 6c 69 64 5f 72 65 74 29 2c 20 28 _isvalid_ret), ( 4de0: 6c 6f 6e 67 29 20 73 63 61 72 64 5f 69 73 76 61 long) scard_isva 4df0: 6c 69 64 5f 72 65 74 29 3b 0a 0a 09 09 43 41 43 lid_ret);....CAC 4e00: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 4e10: 28 22 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 ("SCardEstablish 4e20: 43 6f 6e 74 65 78 74 28 29 20 63 61 6c 6c 65 64 Context() called 4e30: 22 29 3b 0a 09 09 73 63 61 72 64 5f 65 73 74 5f ");...scard_est_ 4e40: 63 6f 6e 74 65 78 74 5f 72 65 74 20 3d 20 53 43 context_ret = SC 4e50: 61 72 64 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 ardEstablishCont 4e60: 65 78 74 28 53 43 41 52 44 5f 53 43 4f 50 45 5f ext(SCARD_SCOPE_ 4e70: 53 59 53 54 45 4d 2c 20 4e 55 4c 4c 2c 20 4e 55 SYSTEM, NULL, NU 4e80: 4c 4c 2c 20 63 61 63 6b 65 79 5f 70 63 73 63 5f LL, cackey_pcsc_ 4e90: 68 61 6e 64 6c 65 29 3b 0a 09 09 69 66 20 28 73 handle);...if (s 4ea0: 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 card_est_context 4eb0: 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f _ret != SCARD_S_ 4ec0: 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 43 41 SUCCESS) {....CA 4ed0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 4ee0: 46 28 22 43 61 6c 6c 20 74 6f 20 53 43 61 72 64 F("Call to SCard 4ef0: 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 EstablishContext 4f00: 20 66 61 69 6c 65 64 20 28 72 65 74 75 72 6e 65 failed (returne 4f10: 64 20 25 73 2f 25 6c 69 29 2c 20 72 65 74 75 72 d %s/%li), retur 4f20: 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 ning in failure" 4f30: 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F 4f40: 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f UNC_SCARDERR_TO_ 4f50: 53 54 52 28 73 63 61 72 64 5f 65 73 74 5f 63 6f STR(scard_est_co 4f60: 6e 74 65 78 74 5f 72 65 74 29 2c 20 28 6c 6f 6e ntext_ret), (lon 4f70: 67 29 20 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e g) scard_est_con 4f80: 74 65 78 74 5f 72 65 74 29 3b 0a 0a 09 09 09 66 text_ret);.....f 4f90: 72 65 65 28 63 61 63 6b 65 79 5f 70 63 73 63 5f ree(cackey_pcsc_ 4fa0: 68 61 6e 64 6c 65 29 3b 0a 09 09 09 63 61 63 6b handle);....cack 4fb0: 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d ey_pcsc_handle = 4fc0: 20 4e 55 4c 4c 3b 0a 0a 09 09 09 63 61 63 6b 65 NULL;.....cacke 4fd0: 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 y_slots_disconne 4fe0: 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 09 72 65 ct_all();.....re 4ff0: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC 5000: 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 09 7d _E_GENERIC);...} 5010: 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 5020: 5f 50 52 49 4e 54 46 28 22 48 61 6e 64 6c 65 20 _PRINTF("Handle 5030: 68 61 73 20 62 65 65 6e 20 72 65 2d 65 73 74 61 has been re-esta 5040: 62 6c 69 73 68 65 64 22 29 3b 0a 09 7d 0a 23 65 blished");..}.#e 5050: 6e 64 69 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ndif...CACKEY_DE 5060: 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 63 65 BUG_PRINTF("Suce 5070: 73 73 66 75 6c 6c 79 20 63 6f 6e 6e 65 63 74 65 ssfully connecte 5080: 64 20 74 6f 20 50 43 2f 53 43 2c 20 72 65 74 75 d to PC/SC, retu 5090: 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 73 73 rning in success 50a0: 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 ");...return(CAC 50b0: 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a KEY_PCSC_S_OK);. 50c0: 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 }../*. * SYNPOSI 50d0: 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 79 5f S. * cackey_ 50e0: 72 65 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f ret cackey_pcsc_ 50f0: 64 69 73 63 6f 6e 6e 65 63 74 28 76 6f 69 64 29 disconnect(void) 5100: 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 ;. *. * ARGUMENT 5110: 53 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a S. * None. * 5120: 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 . * RETURN VALUE 5130: 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 5f 50 . * CACKEY_P 5140: 43 53 43 5f 53 5f 4f 4b 20 20 20 20 20 20 20 20 CSC_S_OK 5150: 20 4f 6e 20 73 75 63 63 65 73 73 0a 20 2a 20 20 On success. * 5160: 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 CACKEY_PCSC_E 5170: 5f 47 45 4e 45 52 49 43 20 20 20 20 4f 6e 20 65 _GENERIC On e 5180: 72 72 6f 72 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 rror. *. * NOTES 5190: 0a 20 2a 20 20 20 20 20 54 68 69 73 20 66 75 6e . * This fun 51a0: 63 74 69 6f 6e 20 64 69 73 63 6f 6e 6e 65 63 74 ction disconnect 51b0: 73 20 66 72 6f 6d 20 74 68 65 20 50 43 2f 53 43 s from the PC/SC 51c0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 6e 61 Connection mana 51d0: 67 65 72 20 61 6e 64 20 75 70 64 61 74 65 73 0a ger and updates. 51e0: 20 2a 20 20 20 20 20 74 68 65 20 67 6c 6f 62 61 * the globa 51f0: 6c 20 68 61 6e 64 6c 65 2e 0a 20 2a 0a 20 2a 2f l handle.. *. */ 5200: 0a 73 74 61 74 69 63 20 63 61 63 6b 65 79 5f 72 .static cackey_r 5210: 65 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 64 et cackey_pcsc_d 5220: 69 73 63 6f 6e 6e 65 63 74 28 76 6f 69 64 29 20 isconnect(void) 5230: 7b 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f 72 65 {..LONG scard_re 5240: 6c 5f 63 6f 6e 74 65 78 74 5f 72 65 74 3b 0a 0a l_context_ret;.. 5250: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 5260: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 5270: 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 70 63 ...if (cackey_pc 5280: 73 63 5f 68 61 6e 64 6c 65 20 3d 3d 20 4e 55 4c sc_handle == NUL 5290: 4c 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 43 41 L) {...return(CA 52a0: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b CKEY_PCSC_S_OK); 52b0: 0a 09 7d 0a 0a 09 73 63 61 72 64 5f 72 65 6c 5f ..}...scard_rel_ 52c0: 63 6f 6e 74 65 78 74 5f 72 65 74 20 3d 20 53 43 context_ret = SC 52d0: 61 72 64 52 65 6c 65 61 73 65 43 6f 6e 74 65 78 ardReleaseContex 52e0: 74 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 t(*cackey_pcsc_h 52f0: 61 6e 64 6c 65 29 3b 0a 0a 09 69 66 20 28 63 61 andle);...if (ca 5300: 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 ckey_pcsc_handle 5310: 29 20 7b 0a 09 09 66 72 65 65 28 63 61 63 6b 65 ) {...free(cacke 5320: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a y_pcsc_handle);. 5330: 09 0a 09 09 63 61 63 6b 65 79 5f 70 63 73 63 5f ....cackey_pcsc_ 5340: 68 61 6e 64 6c 65 20 3d 20 4e 55 4c 4c 3b 0a 09 handle = NULL;.. 5350: 7d 0a 0a 09 69 66 20 28 73 63 61 72 64 5f 72 65 }...if (scard_re 5360: 6c 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20 21 3d l_context_ret != 5370: 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 SCARD_S_SUCCESS 5380: 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 43 41 43 ) {...return(CAC 5390: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 53a0: 49 43 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e IC);..}...return 53b0: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f (CACKEY_PCSC_S_O 53c0: 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e K);.}../*. * SYN 53d0: 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 POSIS. * cac 53e0: 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 63 key_ret cackey_c 53f0: 6f 6e 6e 65 63 74 5f 63 61 72 64 28 73 74 72 75 onnect_card(stru 5400: 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a ct cackey_slot * 5410: 73 6c 6f 74 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 slot);. *. * ARG 5420: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 63 61 UMENTS. * ca 5430: 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a ckey_slot *slot. 5440: 20 2a 20 20 20 20 20 20 20 20 20 53 6c 6f 74 20 * Slot 5450: 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 to send commands 5460: 20 74 6f 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e to. *. * RETURN 5470: 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 43 41 VALUE. * CA 5480: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 CKEY_PCSC_S_OK 5490: 20 20 20 20 20 20 20 4f 6e 20 73 75 63 63 65 73 On succes 54a0: 73 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 5f s. * CACKEY_ 54b0: 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 20 20 PCSC_E_GENERIC 54c0: 20 20 4f 6e 20 65 72 72 6f 72 0a 20 2a 0a 20 2a On error. *. * 54d0: 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 4e 6f NOTES. * No 54e0: 6e 65 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 ne. *. */.static 54f0: 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b cackey_ret cack 5500: 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 72 64 28 ey_connect_card( 5510: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl 5520: 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a 09 63 61 63 ot *slot) {..cac 5530: 6b 65 79 5f 72 65 74 20 70 63 73 63 5f 63 6f 6e key_ret pcsc_con 5540: 6e 65 63 74 5f 72 65 74 3b 0a 09 44 57 4f 52 44 nect_ret;..DWORD 5550: 20 70 72 6f 74 6f 63 6f 6c 3b 0a 09 4c 4f 4e 47 protocol;..LONG 5560: 20 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 3b scard_conn_ret; 5570: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 5580: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 5590: 29 3b 0a 0a 09 69 66 20 28 21 73 6c 6f 74 29 20 );...if (!slot) 55a0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 55b0: 5f 50 52 49 4e 54 46 28 22 49 6e 76 61 6c 69 64 _PRINTF("Invalid 55c0: 20 73 6c 6f 74 20 73 70 65 63 69 66 69 65 64 2c slot specified, 55d0: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 returning in fa 55e0: 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 ilure");....retu 55f0: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 5600: 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 _GENERIC);..}... 5610: 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 pcsc_connect_ret 5620: 20 3d 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 63 = cackey_pcsc_c 5630: 6f 6e 6e 65 63 74 28 29 3b 0a 09 69 66 20 28 70 onnect();..if (p 5640: 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 csc_connect_ret 5650: 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 != CACKEY_PCSC_S 5660: 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f _OK) {...CACKEY_ 5670: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 6f DEBUG_PRINTF("Co 5680: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 50 43 2f 53 nnection to PC/S 5690: 43 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e C failed, return 56a0: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 56b0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b ;....return(CACK 56c0: 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 EY_PCSC_E_GENERI 56d0: 43 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 43 6f 6e 6e C);..}.../* Conn 56e0: 65 63 74 20 74 6f 20 72 65 61 64 65 72 2c 20 69 ect to reader, i 56f0: 66 20 6e 65 65 64 65 64 20 2a 2f 0a 09 69 66 20 f needed */..if 5700: 28 21 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 (!slot->pcsc_car 5710: 64 5f 63 6f 6e 6e 65 63 74 65 64 29 20 7b 0a 09 d_connected) {.. 5720: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 5730: 49 4e 54 46 28 22 53 43 61 72 64 43 6f 6e 6e 65 INTF("SCardConne 5740: 63 74 28 25 73 29 20 63 61 6c 6c 65 64 22 2c 20 ct(%s) called", 5750: 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 slot->pcsc_reade 5760: 72 29 3b 0a 09 09 73 63 61 72 64 5f 63 6f 6e 6e r);...scard_conn 5770: 5f 72 65 74 20 3d 20 53 43 61 72 64 43 6f 6e 6e _ret = SCardConn 5780: 65 63 74 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 ect(*cackey_pcsc 5790: 5f 68 61 6e 64 6c 65 2c 20 73 6c 6f 74 2d 3e 70 _handle, slot->p 57a0: 63 73 63 5f 72 65 61 64 65 72 2c 20 53 43 41 52 csc_reader, SCAR 57b0: 44 5f 53 48 41 52 45 5f 53 48 41 52 45 44 2c 20 D_SHARE_SHARED, 57c0: 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 SCARD_PROTOCOL_T 57d0: 30 2c 20 26 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 0, &slot->pcsc_c 57e0: 61 72 64 2c 20 26 70 72 6f 74 6f 63 6f 6c 29 3b ard, &protocol); 57f0: 0a 0a 09 09 69 66 20 28 73 63 61 72 64 5f 63 6f ....if (scard_co 5800: 6e 6e 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f nn_ret != SCARD_ 5810: 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 S_SUCCESS) {.... 5820: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 5830: 4e 54 46 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 NTF("Connection 5840: 74 6f 20 63 61 72 64 20 66 61 69 6c 65 64 2c 20 to card failed, 5850: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai 5860: 6c 75 72 65 20 28 53 43 61 72 64 43 6f 6e 6e 65 lure (SCardConne 5870: 63 74 28 29 20 3d 20 25 73 2f 25 6c 69 29 22 2c ct() = %s/%li)", 5880: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 CACKEY_DEBUG_FU 5890: 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 NC_SCARDERR_TO_S 58a0: 54 52 28 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 TR(scard_conn_re 58b0: 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 t), (long) scard 58c0: 5f 63 6f 6e 6e 5f 72 65 74 29 3b 0a 0a 09 09 09 _conn_ret);..... 58d0: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 58e0: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 58f0: 09 7d 0a 0a 09 09 73 6c 6f 74 2d 3e 70 63 73 63 .}....slot->pcsc 5900: 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 _card_connected 5910: 3d 20 31 3b 0a 09 09 73 6c 6f 74 2d 3e 74 72 61 = 1;...slot->tra 5920: 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3d nsaction_depth = 5930: 20 30 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 0;..}...return( 5940: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK 5950: 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 );.}../*. * SYNP 5960: 4f 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b OSIS. * cack 5970: 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 62 65 ey_ret cackey_be 5980: 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 gin_transaction( 5990: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl 59a0: 6f 74 20 2a 73 6c 6f 74 29 3b 0a 20 2a 0a 20 2a ot *slot);. *. * 59b0: 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 ARGUMENTS. * 59c0: 20 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 cackey_slot *s 59d0: 6c 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 53 lot. * S 59e0: 6c 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d 6d lot to send comm 59f0: 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 52 45 ands to. *. * RE 5a00: 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 TURN VALUE. * 5a10: 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f CACKEY_PCSC_S_ 5a20: 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e 20 73 75 OK On su 5a30: 63 63 65 73 73 0a 20 2a 20 20 20 20 20 43 41 43 ccess. * CAC 5a40: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 5a50: 49 43 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 IC On error. 5a60: 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 *. * NOTES. * 5a70: 20 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f The transactio 5a80: 6e 20 73 68 6f 75 6c 64 20 62 65 20 74 65 72 6d n should be term 5a90: 69 6e 61 74 65 64 20 75 73 69 6e 67 20 22 63 61 inated using "ca 5aa0: 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 ckey_end_transac 5ab0: 74 69 6f 6e 22 0a 20 2a 0a 20 2a 2f 0a 73 74 61 tion". *. */.sta 5ac0: 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 63 tic cackey_ret c 5ad0: 61 63 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e ackey_begin_tran 5ae0: 73 61 63 74 69 6f 6e 28 73 74 72 75 63 74 20 63 saction(struct c 5af0: 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 ackey_slot *slot 5b00: 29 20 7b 0a 09 63 61 63 6b 65 79 5f 72 65 74 20 ) {..cackey_ret 5b10: 63 61 63 6b 65 79 5f 63 6f 6e 6e 5f 72 65 74 3b cackey_conn_ret; 5b20: 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f 74 72 61 ..LONG scard_tra 5b30: 6e 73 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 ns_ret;...CACKEY 5b40: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 5b50: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 63 61 63 6b alled.");...cack 5b60: 65 79 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 63 61 ey_conn_ret = ca 5b70: 63 6b 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 72 ckey_connect_car 5b80: 64 28 73 6c 6f 74 29 3b 0a 09 69 66 20 28 63 61 d(slot);..if (ca 5b90: 63 6b 65 79 5f 63 6f 6e 6e 5f 72 65 74 20 21 3d ckey_conn_ret != 5ba0: 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f CACKEY_PCSC_S_O 5bb0: 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 K) {...CACKEY_DE 5bc0: 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 BUG_PRINTF("Unab 5bd0: 6c 65 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 6f le to connect to 5be0: 20 63 61 72 64 2c 20 72 65 74 75 72 6e 69 6e 67 card, returning 5bf0: 20 69 6e 20 65 72 72 6f 72 22 29 3b 0a 0a 09 09 in error");.... 5c00: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 5c10: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 5c20: 7d 0a 0a 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 }...slot->transa 5c30: 63 74 69 6f 6e 5f 64 65 70 74 68 2b 2b 3b 0a 0a ction_depth++;.. 5c40: 09 69 66 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 .if (slot->trans 5c50: 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3e 20 31 action_depth > 1 5c60: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 5c70: 55 47 5f 50 52 49 4e 54 46 28 22 41 6c 72 65 61 UG_PRINTF("Alrea 5c80: 64 79 20 69 6e 20 61 20 74 72 61 6e 73 61 63 74 dy in a transact 5c90: 69 6f 6e 2c 20 70 65 72 66 6f 72 6d 69 6e 67 20 ion, performing 5ca0: 6e 6f 20 61 63 74 69 6f 6e 20 28 6e 65 77 20 64 no action (new d 5cb0: 65 70 74 68 20 3d 20 25 69 29 22 2c 20 73 6c 6f epth = %i)", slo 5cc0: 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 t->transaction_d 5cd0: 65 70 74 68 29 3b 0a 0a 09 09 72 65 74 75 72 6e epth);....return 5ce0: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f (CACKEY_PCSC_S_O 5cf0: 4b 29 3b 0a 09 7d 0a 0a 09 73 63 61 72 64 5f 74 K);..}...scard_t 5d00: 72 61 6e 73 5f 72 65 74 20 3d 20 53 43 61 72 64 rans_ret = SCard 5d10: 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e BeginTransaction 5d20: 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 (slot->pcsc_card 5d30: 29 3b 0a 09 69 66 20 28 73 63 61 72 64 5f 74 72 );..if (scard_tr 5d40: 61 6e 73 5f 72 65 74 20 21 3d 20 53 43 41 52 44 ans_ret != SCARD 5d50: 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 _S_SUCCESS) {... 5d60: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 5d70: 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 62 NTF("Unable to b 5d80: 65 67 69 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e egin transaction 5d90: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 65 , returning in e 5da0: 72 72 6f 72 22 29 3b 0a 0a 09 09 72 65 74 75 72 rror");....retur 5db0: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f n(CACKEY_PCSC_E_ 5dc0: 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 43 GENERIC);..}...C 5dd0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 5de0: 54 46 28 22 53 75 63 65 73 73 66 75 6c 6c 79 20 TF("Sucessfully 5df0: 62 65 67 61 6e 20 74 72 61 6e 73 61 63 74 69 6f began transactio 5e00: 6e 20 6f 6e 20 73 6c 6f 74 20 28 25 73 29 22 2c n on slot (%s)", 5e10: 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 64 slot->pcsc_read 5e20: 65 72 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 41 er);...return(CA 5e30: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b CKEY_PCSC_S_OK); 5e40: 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 .}../*. * SYNPOS 5e50: 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 79 IS. * cackey 5e60: 5f 72 65 74 20 63 61 63 6b 65 79 5f 65 6e 64 5f _ret cackey_end_ 5e70: 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 74 72 75 transaction(stru 5e80: 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a ct cackey_slot * 5e90: 73 6c 6f 74 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 slot);. *. * ARG 5ea0: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 63 61 UMENTS. * ca 5eb0: 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a ckey_slot *slot. 5ec0: 20 2a 20 20 20 20 20 20 20 20 20 53 6c 6f 74 20 * Slot 5ed0: 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 to send commands 5ee0: 20 74 6f 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e to. *. * RETURN 5ef0: 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 43 41 VALUE. * CA 5f00: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 CKEY_PCSC_S_OK 5f10: 20 20 20 20 20 20 20 4f 6e 20 73 75 63 63 65 73 On succes 5f20: 73 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 5f s. * CACKEY_ 5f30: 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 20 20 PCSC_E_GENERIC 5f40: 20 20 4f 6e 20 65 72 72 6f 72 0a 20 2a 0a 20 2a On error. *. * 5f50: 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 54 68 NOTES. * Th 5f60: 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 71 75 is function requ 5f70: 69 72 65 73 20 22 63 61 63 6b 65 79 5f 62 65 67 ires "cackey_beg 5f80: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 22 20 in_transaction" 5f90: 74 6f 20 62 65 20 63 61 6c 6c 65 64 20 66 69 72 to be called fir 5fa0: 73 74 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 st. *. */.static 5fb0: 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b cackey_ret cack 5fc0: 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 ey_end_transacti 5fd0: 6f 6e 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 on(struct cackey 5fe0: 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a 09 _slot *slot) {.. 5ff0: 4c 4f 4e 47 20 73 63 61 72 64 5f 74 72 61 6e 73 LONG scard_trans 6000: 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 _ret;...CACKEY_D 6010: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 6020: 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 73 led.");...if (!s 6030: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f 63 lot->pcsc_card_c 6040: 6f 6e 6e 65 63 74 65 64 29 20 7b 0a 09 09 43 41 onnected) {...CA 6050: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 6060: 46 28 22 43 61 72 64 20 69 73 20 6e 6f 74 20 63 F("Card is not c 6070: 6f 6e 6e 65 63 74 65 64 2c 20 75 6e 61 62 6c 65 onnected, unable 6080: 20 74 6f 20 65 6e 64 20 74 72 61 6e 73 61 63 74 to end transact 6090: 69 6f 6e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ion");....return 60a0: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 (CACKEY_PCSC_E_G 60b0: 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 69 66 ENERIC);..}...if 60c0: 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 (slot->transact 60d0: 69 6f 6e 5f 64 65 70 74 68 20 3d 3d 20 30 29 20 ion_depth == 0) 60e0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 60f0: 5f 50 52 49 4e 54 46 28 22 54 65 72 6d 69 6e 61 _PRINTF("Termina 6100: 74 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69 ting a transacti 6110: 6f 6e 20 74 68 61 74 20 68 61 73 20 6e 6f 74 20 on that has not 6120: 62 65 67 75 6e 21 22 29 3b 0a 0a 09 09 72 65 74 begun!");....ret 6130: 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f urn(CACKEY_PCSC_ 6140: 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a E_GENERIC);..}.. 6150: 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 .slot->transacti 6160: 6f 6e 5f 64 65 70 74 68 2d 2d 3b 0a 0a 09 69 66 on_depth--;...if 6170: 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 (slot->transact 6180: 69 6f 6e 5f 64 65 70 74 68 20 3e 20 30 29 20 7b ion_depth > 0) { 6190: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 61a0: 50 52 49 4e 54 46 28 22 54 72 61 6e 73 61 63 74 PRINTF("Transact 61b0: 69 6f 6e 73 20 73 74 69 6c 6c 20 69 6e 20 70 72 ions still in pr 61c0: 6f 67 72 65 73 73 2c 20 6e 6f 74 20 74 65 72 6d ogress, not term 61d0: 69 6e 61 74 69 6e 67 20 6f 6e 2d 63 61 72 64 20 inating on-card 61e0: 54 72 61 6e 73 61 63 74 69 6f 6e 20 28 63 75 72 Transaction (cur 61f0: 72 65 6e 74 20 64 65 70 74 68 20 3d 20 25 69 29 rent depth = %i) 6200: 22 2c 20 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 ", slot->transac 6210: 74 69 6f 6e 5f 64 65 70 74 68 29 3b 0a 0a 09 09 tion_depth);.... 6220: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 6230: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 6240: 7d 0a 0a 09 73 63 61 72 64 5f 74 72 61 6e 73 5f }...scard_trans_ 6250: 72 65 74 20 3d 20 53 43 61 72 64 45 6e 64 54 72 ret = SCardEndTr 6260: 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 2d 3e ansaction(slot-> 6270: 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 pcsc_card, SCARD 6280: 5f 4c 45 41 56 45 5f 43 41 52 44 29 3b 0a 09 69 _LEAVE_CARD);..i 6290: 66 20 28 73 63 61 72 64 5f 74 72 61 6e 73 5f 72 f (scard_trans_r 62a0: 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 et != SCARD_S_SU 62b0: 43 43 45 53 53 29 20 7b 0a 09 09 43 41 43 4b 45 CCESS) {...CACKE 62c0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 62d0: 55 6e 61 62 6c 65 20 74 6f 20 65 6e 64 20 74 72 Unable to end tr 62e0: 61 6e 73 61 63 74 69 6f 6e 2c 20 72 65 74 75 72 ansaction, retur 62f0: 6e 69 6e 67 20 69 6e 20 65 72 72 6f 72 22 29 3b ning in error"); 6300: 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 ....return(CACKE 6310: 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 Y_PCSC_E_GENERIC 6320: 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 6330: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 63 EBUG_PRINTF("Suc 6340: 65 73 73 66 75 6c 6c 79 20 74 65 72 6d 69 6e 61 essfully termina 6350: 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 ted transaction 6360: 6f 6e 20 73 6c 6f 74 20 28 25 73 29 22 2c 20 73 on slot (%s)", s 6370: 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 72 lot->pcsc_reader 6380: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b );...return(CACK 6390: 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 7d EY_PCSC_S_OK);.} 63a0: 0a 0a 2f 2a 20 41 50 44 55 20 52 65 6c 61 74 65 ../* APDU Relate 63b0: 64 20 46 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 2f d Functions */./ 63c0: 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a *. * SYNPOSIS. * 63d0: 20 20 20 20 20 63 61 63 6b 65 79 5f 72 65 74 20 cackey_ret 63e0: 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 cackey_send_apdu 63f0: 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 (struct cackey_s 6400: 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 lot *slot, unsig 6410: 6e 65 64 20 63 68 61 72 20 63 6c 61 73 73 2c 20 ned char class, 6420: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 69 6e unsigned char in 6430: 73 74 72 75 63 74 69 6f 6e 2c 20 75 6e 73 69 67 struction, unsig 6440: 6e 65 64 20 63 68 61 72 20 70 31 2c 20 75 6e 73 ned char p1, uns 6450: 69 67 6e 65 64 20 63 68 61 72 20 70 32 2c 20 75 igned char p2, u 6460: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c 63 2c nsigned char lc, 6470: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a unsigned char * 6480: 64 61 74 61 2c 20 75 6e 73 69 67 6e 65 64 20 63 data, unsigned c 6490: 68 61 72 20 6c 65 2c 20 75 69 6e 74 31 36 5f 74 har le, uint16_t 64a0: 20 2a 72 65 73 70 63 6f 64 65 2c 20 75 6e 73 69 *respcode, unsi 64b0: 67 6e 65 64 20 63 68 61 72 20 2a 72 65 73 70 64 gned char *respd 64c0: 61 74 61 2c 20 73 69 7a 65 5f 74 20 2a 72 65 73 ata, size_t *res 64d0: 70 64 61 74 61 5f 6c 65 6e 29 3b 0a 20 2a 0a 20 pdata_len);. *. 64e0: 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 * ARGUMENTS. * 64f0: 20 20 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a cackey_slot * 6500: 73 6c 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 slot. * 6510: 53 6c 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d Slot to send com 6520: 6d 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 20 mands to. *. * 6530: 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 unsigned char 6540: 20 63 6c 61 73 73 0a 20 2a 20 20 20 20 20 20 20 class. * 6550: 20 20 41 50 44 55 20 43 6c 61 73 73 20 28 47 53 APDU Class (GS 6560: 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 31 CIS_CLASS_ISO781 6570: 36 20 6f 72 20 47 53 43 49 53 5f 43 4c 41 53 53 6 or GSCIS_CLASS 6580: 5f 47 4c 4f 42 41 4c 5f 50 4c 41 54 46 4f 52 4d _GLOBAL_PLATFORM 6590: 0a 20 2a 20 20 20 20 20 20 20 20 20 75 73 75 61 . * usua 65a0: 6c 6c 79 29 2c 20 28 43 4c 41 29 0a 20 2a 0a 20 lly), (CLA). *. 65b0: 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 * unsigned c 65c0: 68 61 72 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a har instruction. 65d0: 20 2a 20 20 20 20 20 20 20 20 20 41 50 44 55 20 * APDU 65e0: 49 6e 73 74 72 75 63 74 69 6f 6e 20 28 49 4e 53 Instruction (INS 65f0: 29 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e 73 69 ). *. * unsi 6600: 67 6e 65 64 20 63 68 61 72 20 70 31 0a 20 2a 20 gned char p1. * 6610: 20 20 20 20 20 20 20 20 41 50 44 55 20 50 61 72 APDU Par 6620: 61 6d 65 74 65 72 20 31 20 28 50 31 29 0a 20 2a ameter 1 (P1). * 6630: 0a 20 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 64 . * unsigned 6640: 20 63 68 61 72 20 70 32 0a 20 2a 20 20 20 20 20 char p2. * 6650: 20 20 20 20 41 50 44 55 20 50 61 72 61 6d 65 74 APDU Paramet 6660: 65 72 20 32 20 28 50 32 29 0a 20 2a 0a 20 2a 20 er 2 (P2). *. * 6670: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 unsigned cha 6680: 72 20 6c 63 0a 20 2a 20 20 20 20 20 20 20 20 20 r lc. * 6690: 41 50 44 55 20 4c 65 6e 67 74 68 20 6f 66 20 43 APDU Length of C 66a0: 6f 6e 74 65 6e 74 20 28 4c 63 29 20 2d 2d 20 74 ontent (Lc) -- t 66b0: 68 69 73 20 69 73 20 74 68 65 20 6c 65 6e 67 74 his is the lengt 66c0: 68 20 6f 66 20 22 64 61 74 61 22 0a 20 2a 20 20 h of "data". * 66d0: 20 20 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 parameter 66e0: 2e 20 20 49 66 20 22 64 61 74 61 22 20 69 73 20 . If "data" is 66f0: 73 70 65 63 69 66 69 65 64 20 61 73 20 4e 55 4c specified as NUL 6700: 4c 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 L, this paramete 6710: 72 20 77 69 6c 6c 0a 20 2a 20 20 20 20 20 20 20 r will. * 6720: 20 20 62 65 20 69 67 6e 6f 72 65 64 2e 0a 20 2a be ignored.. * 6730: 0a 20 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 64 . * unsigned 6740: 20 63 68 61 72 20 2a 64 61 74 61 0a 20 2a 20 20 char *data. * 6750: 20 20 20 20 20 20 20 50 6f 69 6e 74 65 72 20 74 Pointer t 6760: 6f 20 62 75 66 66 65 72 20 74 6f 20 73 65 6e 64 o buffer to send 6770: 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 62 65 20 . It should be 6780: 22 4c 63 22 20 62 79 74 65 73 20 6c 6f 6e 67 2e "Lc" bytes long. 6790: 20 20 49 66 0a 20 2a 20 20 20 20 20 20 20 20 20 If. * 67a0: 73 70 65 63 69 66 69 65 64 20 61 73 20 4e 55 4c specified as NUL 67b0: 4c 2c 20 22 4c 63 22 20 77 69 6c 6c 20 6e 6f 74 L, "Lc" will not 67c0: 20 62 65 20 73 65 6e 74 2c 20 61 6e 64 20 74 68 be sent, and th 67d0: 69 73 20 62 75 66 66 65 72 20 77 69 6c 6c 20 62 is buffer will b 67e0: 65 0a 20 2a 20 20 20 20 20 20 20 20 20 69 67 6e e. * ign 67f0: 6f 72 65 64 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 ored.. *. * 6800: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c 65 unsigned char le 6810: 0a 20 2a 20 20 20 20 20 20 20 20 20 41 50 44 55 . * APDU 6820: 20 4c 65 6e 67 74 68 20 6f 66 20 45 78 70 65 63 Length of Expec 6830: 74 61 74 69 6f 6e 20 28 4c 65 29 20 2d 2d 20 74 tation (Le) -- t 6840: 68 69 73 20 69 73 20 74 68 65 20 6c 65 6e 67 74 his is the lengt 6850: 68 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 20 h of the. * 6860: 20 20 20 20 65 78 70 65 63 74 65 64 20 72 65 70 expected rep 6870: 6c 79 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 ly. If this is 6880: 73 70 65 63 69 66 69 65 64 20 61 73 20 30 20 74 specified as 0 t 6890: 68 65 6e 20 69 74 20 77 69 6c 6c 20 6e 6f 74 0a hen it will not. 68a0: 20 2a 20 20 20 20 20 20 20 20 20 62 65 20 73 65 * be se 68b0: 6e 74 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 75 69 nt.. *. * ui 68c0: 6e 74 31 36 5f 74 20 2a 72 65 73 70 63 6f 64 65 nt16_t *respcode 68d0: 0a 20 2a 20 20 20 20 20 20 20 20 20 5b 4f 55 54 . * [OUT 68e0: 5d 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 74 6f ] Pointer to sto 68f0: 72 61 67 65 20 6f 66 20 41 50 44 55 20 72 65 73 rage of APDU res 6900: 70 6f 6e 73 65 20 63 6f 64 65 2e 20 20 49 66 20 ponse code. If 6910: 74 68 69 73 20 69 73 0a 20 2a 20 20 20 20 20 20 this is. * 6920: 20 20 20 73 70 65 63 69 66 69 65 64 20 61 73 20 specified as 6930: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 70 6f 6e NULL, the respon 6940: 73 65 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 se code will be 6950: 64 69 73 63 61 72 64 65 64 2e 0a 20 2a 0a 20 2a discarded.. *. * 6960: 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 unsigned ch 6970: 61 72 20 2a 72 65 73 70 64 61 74 61 0a 20 2a 20 ar *respdata. * 6980: 20 20 20 20 20 20 20 20 5b 4f 55 54 5d 20 50 6f [OUT] Po 6990: 69 6e 74 65 72 20 74 6f 20 73 74 6f 72 61 67 65 inter to storage 69a0: 20 6f 66 20 41 50 44 55 20 72 65 73 70 6f 6e 73 of APDU respons 69b0: 65 20 64 61 74 61 2e 20 20 49 66 20 74 68 69 73 e data. If this 69c0: 20 69 73 0a 20 2a 20 20 20 20 20 20 20 20 20 73 is. * s 69d0: 70 65 63 69 66 69 65 64 20 61 73 20 4e 55 4c 4c pecified as NULL 69e0: 2c 20 74 68 65 20 72 65 73 70 6f 6e 73 65 20 64 , the response d 69f0: 61 74 61 20 77 69 6c 6c 20 62 65 20 64 69 73 63 ata will be disc 6a00: 61 72 64 65 64 2e 20 20 49 66 0a 20 2a 20 20 20 arded. If. * 6a10: 20 20 20 20 20 20 74 68 65 20 22 72 65 73 70 64 the "respd 6a20: 61 74 61 5f 6c 65 6e 22 20 70 61 72 61 6d 65 74 ata_len" paramet 6a30: 65 72 20 69 73 20 73 70 65 63 69 66 69 65 64 20 er is specified 6a40: 61 73 20 4e 55 4c 4c 2c 20 74 68 69 73 20 62 75 as NULL, this bu 6a50: 66 66 65 72 0a 20 2a 20 20 20 20 20 20 20 20 20 ffer. * 6a60: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 75 70 64 61 will not be upda 6a70: 74 65 64 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 73 ted.. *. * s 6a80: 69 7a 65 5f 74 20 2a 72 65 73 70 64 61 74 61 5f ize_t *respdata_ 6a90: 6c 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 5b len. * [ 6aa0: 49 4e 2c 20 4f 55 54 5d 20 50 6f 69 6e 74 65 72 IN, OUT] Pointer 6ab0: 20 69 6e 69 74 69 61 6c 69 6e 67 20 63 6f 6e 74 initialing cont 6ac0: 61 69 6e 69 6e 67 20 74 68 65 20 73 69 7a 65 20 aining the size 6ad0: 6f 66 20 74 68 65 20 22 72 65 73 70 64 61 74 61 of the "respdata 6ae0: 22 0a 20 2a 20 20 20 20 20 20 20 20 20 62 75 66 ". * buf 6af0: 66 65 72 2e 20 20 42 65 66 6f 72 65 20 72 65 74 fer. Before ret 6b00: 75 72 6e 69 6e 67 2c 20 74 68 65 20 70 6f 69 6e urning, the poin 6b10: 74 65 64 20 74 6f 20 76 61 6c 75 65 20 69 73 20 ted to value is 6b20: 75 70 64 61 74 65 64 20 74 6f 20 74 68 65 0a 20 updated to the. 6b30: 2a 20 20 20 20 20 20 20 20 20 6e 75 6d 62 65 72 * number 6b40: 20 6f 66 20 62 79 74 65 73 20 77 72 69 74 74 65 of bytes writte 6b50: 6e 20 74 6f 20 74 68 65 20 62 75 66 66 65 72 2e n to the buffer. 6b60: 20 20 49 66 20 74 68 69 73 20 69 73 20 73 70 65 If this is spe 6b70: 63 69 66 69 65 64 20 61 73 0a 20 2a 20 20 20 20 cified as. * 6b80: 20 20 20 20 20 4e 55 4c 4c 2c 20 69 74 20 77 69 NULL, it wi 6b90: 6c 6c 20 6e 6f 74 20 62 65 20 75 70 64 61 74 65 ll not be update 6ba0: 64 2c 20 61 6e 64 20 22 72 65 73 70 64 61 74 61 d, and "respdata 6bb0: 22 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 " will be ignore 6bc0: 64 20 63 61 75 73 69 6e 67 0a 20 2a 20 20 20 20 d causing. * 6bd0: 20 20 20 20 20 74 68 65 20 72 65 73 70 6f 6e 73 the respons 6be0: 65 20 64 61 74 61 20 74 6f 20 62 65 20 64 69 73 e data to be dis 6bf0: 63 61 72 64 65 64 2e 0a 20 2a 0a 20 2a 20 52 45 carded.. *. * RE 6c00: 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 TURN VALUE. * 6c10: 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f CACKEY_PCSC_S_ 6c20: 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e 20 73 75 OK On su 6c30: 63 63 65 73 73 0a 20 2a 20 20 20 20 20 43 41 43 ccess. * CAC 6c40: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 6c50: 49 43 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 IC On error. 6c60: 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 *. * NOTES. * 6c70: 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 This function 6c80: 77 69 6c 6c 20 63 6f 6e 6e 65 63 74 20 74 6f 20 will connect to 6c90: 74 68 65 20 50 43 2f 53 43 20 43 6f 6e 6e 65 63 the PC/SC Connec 6ca0: 74 69 6f 6e 20 4d 61 6e 61 67 65 72 20 76 69 61 tion Manager via 6cb0: 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 70 . * cackey_p 6cc0: 63 73 63 5f 63 6f 6e 6e 65 63 74 28 29 20 69 66 csc_connect() if 6cd0: 20 6e 65 65 64 65 64 2e 0a 20 2a 0a 20 2a 20 20 needed.. *. * 6ce0: 20 20 20 49 74 20 77 69 6c 6c 20 63 6f 6e 6e 65 It will conne 6cf0: 63 74 20 74 6f 20 74 68 65 20 63 61 72 64 20 69 ct to the card i 6d00: 6e 20 74 68 65 20 72 65 61 64 65 72 20 61 74 74 n the reader att 6d10: 61 63 68 65 64 20 74 6f 20 74 68 65 20 73 6c 6f ached to the slo 6d20: 74 0a 20 2a 20 20 20 20 20 73 70 65 63 69 66 69 t. * specifi 6d30: 65 64 2e 20 20 49 74 20 77 69 6c 6c 20 72 65 63 ed. It will rec 6d40: 6f 6e 6e 65 63 74 20 74 6f 20 74 68 65 20 63 61 onnect to the ca 6d50: 72 64 20 69 66 20 74 68 65 20 63 6f 6e 6e 65 63 rd if the connec 6d60: 74 69 6f 6e 0a 20 2a 20 20 20 20 20 67 6f 65 73 tion. * goes 6d70: 20 61 77 61 79 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 away.. *. */.st 6d80: 61 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 atic cackey_ret 6d90: 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 cackey_send_apdu 6da0: 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 (struct cackey_s 6db0: 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 lot *slot, unsig 6dc0: 6e 65 64 20 63 68 61 72 20 63 6c 61 73 73 2c 20 ned char class, 6dd0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 69 6e unsigned char in 6de0: 73 74 72 75 63 74 69 6f 6e 2c 20 75 6e 73 69 67 struction, unsig 6df0: 6e 65 64 20 63 68 61 72 20 70 31 2c 20 75 6e 73 ned char p1, uns 6e00: 69 67 6e 65 64 20 63 68 61 72 20 70 32 2c 20 75 igned char p2, u 6e10: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c 63 2c nsigned char lc, 6e20: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a unsigned char * 6e30: 64 61 74 61 2c 20 75 6e 73 69 67 6e 65 64 20 63 data, unsigned c 6e40: 68 61 72 20 6c 65 2c 20 75 69 6e 74 31 36 5f 74 har le, uint16_t 6e50: 20 2a 72 65 73 70 63 6f 64 65 2c 20 75 6e 73 69 *respcode, unsi 6e60: 67 6e 65 64 20 63 68 61 72 20 2a 72 65 73 70 64 gned char *respd 6e70: 61 74 61 2c 20 73 69 7a 65 5f 74 20 2a 72 65 73 ata, size_t *res 6e80: 70 64 61 74 61 5f 6c 65 6e 29 20 7b 0a 09 75 69 pdata_len) {..ui 6e90: 6e 74 38 5f 74 20 6d 61 6a 6f 72 5f 72 63 2c 20 nt8_t major_rc, 6ea0: 6d 69 6e 6f 72 5f 72 63 3b 0a 09 73 69 7a 65 5f minor_rc;..size_ 6eb0: 74 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 2c t bytes_to_copy, 6ec0: 20 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 tmp_respdata_le 6ed0: 6e 3b 0a 09 44 57 4f 52 44 20 70 72 6f 74 6f 63 n;..DWORD protoc 6ee0: 6f 6c 3b 0a 09 44 57 4f 52 44 20 78 6d 69 74 5f ol;..DWORD xmit_ 6ef0: 6c 65 6e 2c 20 72 65 63 76 5f 6c 65 6e 3b 0a 09 len, recv_len;.. 6f00: 4c 4f 4e 47 20 73 63 61 72 64 5f 78 6d 69 74 5f LONG scard_xmit_ 6f10: 72 65 74 2c 20 73 63 61 72 64 5f 72 65 63 6f 6e ret, scard_recon 6f20: 6e 5f 72 65 74 3b 0a 09 42 59 54 45 20 78 6d 69 n_ret;..BYTE xmi 6f30: 74 5f 62 75 66 5b 31 30 32 34 5d 2c 20 72 65 63 t_buf[1024], rec 6f40: 76 5f 62 75 66 5b 31 30 32 34 5d 3b 0a 09 69 6e v_buf[1024];..in 6f50: 74 20 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 t pcsc_connect_r 6f60: 65 74 2c 20 70 63 73 63 5f 67 65 74 72 65 73 70 et, pcsc_getresp 6f70: 5f 72 65 74 3b 0a 09 69 6e 74 20 69 64 78 3b 0a _ret;..int idx;. 6f80: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 6f90: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 6fa0: 3b 0a 0a 09 69 66 20 28 21 73 6c 6f 74 29 20 7b ;...if (!slot) { 6fb0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 6fc0: 50 52 49 4e 54 46 28 22 49 6e 76 61 6c 69 64 20 PRINTF("Invalid 6fd0: 73 6c 6f 74 20 73 70 65 63 69 66 69 65 64 2e 22 slot specified." 6fe0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 );....return(CAC 6ff0: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 7000: 49 43 29 3b 0a 09 7d 0a 0a 09 70 63 73 63 5f 63 IC);..}...pcsc_c 7010: 6f 6e 6e 65 63 74 5f 72 65 74 20 3d 20 63 61 63 onnect_ret = cac 7020: 6b 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 72 64 key_connect_card 7030: 28 73 6c 6f 74 29 3b 0a 09 69 66 20 28 70 63 73 (slot);..if (pcs 7040: 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 21 3d c_connect_ret != 7050: 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f CACKEY_PCSC_S_O 7060: 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 K) {...CACKEY_DE 7070: 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 BUG_PRINTF("Unab 7080: 6c 65 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 6f le to connect to 7090: 20 63 61 72 64 2c 20 72 65 74 75 72 6e 69 6e 67 card, returning 70a0: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. 70b0: 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f ..return(CACKEY_ 70c0: 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b PCSC_E_GENERIC); 70d0: 0a 09 7d 0a 0a 09 2f 2a 20 54 72 61 6e 73 6d 69 ..}.../* Transmi 70e0: 74 20 2a 2f 0a 09 78 6d 69 74 5f 6c 65 6e 20 3d t */..xmit_len = 70f0: 20 30 3b 0a 09 78 6d 69 74 5f 62 75 66 5b 78 6d 0;..xmit_buf[xm 7100: 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 63 6c 61 73 it_len++] = clas 7110: 73 3b 0a 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 s;..xmit_buf[xmi 7120: 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 69 6e 73 74 72 t_len++] = instr 7130: 75 63 74 69 6f 6e 3b 0a 09 78 6d 69 74 5f 62 75 uction;..xmit_bu 7140: 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 f[xmit_len++] = 7150: 70 31 3b 0a 09 78 6d 69 74 5f 62 75 66 5b 78 6d p1;..xmit_buf[xm 7160: 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 70 32 3b 0a it_len++] = p2;. 7170: 09 69 66 20 28 64 61 74 61 29 20 7b 0a 09 09 78 .if (data) {...x 7180: 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e mit_buf[xmit_len 7190: 2b 2b 5d 20 3d 20 6c 63 3b 0a 09 09 66 6f 72 20 ++] = lc;...for 71a0: 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 (idx = 0; idx < 71b0: 6c 63 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 09 lc; idx++) {.... 71c0: 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 xmit_buf[xmit_le 71d0: 6e 2b 2b 5d 20 3d 20 64 61 74 61 5b 69 64 78 5d n++] = data[idx] 71e0: 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 6c ;...}..}...if (l 71f0: 65 20 21 3d 20 30 78 30 30 29 20 7b 0a 09 09 78 e != 0x00) {...x 7200: 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e mit_buf[xmit_len 7210: 2b 2b 5d 20 3d 20 6c 65 3b 0a 09 7d 0a 0a 09 2f ++] = le;..}.../ 7220: 2a 20 42 65 67 69 6e 20 53 6d 61 72 74 63 61 72 * Begin Smartcar 7230: 64 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f d Transaction */ 7240: 0a 09 63 61 63 6b 65 79 5f 62 65 67 69 6e 5f 74 ..cackey_begin_t 7250: 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 ransaction(slot) 7260: 3b 0a 0a 09 69 66 20 28 63 6c 61 73 73 20 3d 3d ;...if (class == 7270: 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f GSCIS_CLASS_ISO 7280: 37 38 31 36 20 26 26 20 69 6e 73 74 72 75 63 74 7816 && instruct 7290: 69 6f 6e 20 3d 3d 20 47 53 43 49 53 5f 49 4e 53 ion == GSCIS_INS 72a0: 54 52 5f 56 45 52 49 46 59 20 26 26 20 70 31 20 TR_VERIFY && p1 72b0: 3d 3d 20 30 78 30 30 20 26 26 20 70 32 20 3d 3d == 0x00 && p2 == 72c0: 20 30 78 30 30 29 20 7b 0a 09 09 43 41 43 4b 45 0x00) {...CACKE 72d0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 72e0: 53 65 6e 64 69 6e 67 20 41 50 44 55 3a 20 3c 3c Sending APDU: << 72f0: 63 65 6e 73 6f 72 65 64 3e 3e 22 29 3b 0a 09 7d censored>>");..} 7300: 20 65 6c 73 65 20 7b 0a 09 09 43 41 43 4b 45 59 else {...CACKEY 7310: 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 _DEBUG_PRINTBUF( 7320: 22 53 65 6e 64 69 6e 67 20 41 50 44 55 3a 22 2c "Sending APDU:", 7330: 20 78 6d 69 74 5f 62 75 66 2c 20 78 6d 69 74 5f xmit_buf, xmit_ 7340: 6c 65 6e 29 3b 0a 09 7d 0a 0a 09 72 65 63 76 5f len);..}...recv_ 7350: 6c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 72 65 63 len = sizeof(rec 7360: 76 5f 62 75 66 29 3b 0a 09 73 63 61 72 64 5f 78 v_buf);..scard_x 7370: 6d 69 74 5f 72 65 74 20 3d 20 53 43 61 72 64 54 mit_ret = SCardT 7380: 72 61 6e 73 6d 69 74 28 73 6c 6f 74 2d 3e 70 63 ransmit(slot->pc 7390: 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 50 sc_card, SCARD_P 73a0: 43 49 5f 54 30 2c 20 78 6d 69 74 5f 62 75 66 2c CI_T0, xmit_buf, 73b0: 20 78 6d 69 74 5f 6c 65 6e 2c 20 53 43 41 52 44 xmit_len, SCARD 73c0: 5f 50 43 49 5f 54 31 2c 20 72 65 63 76 5f 62 75 _PCI_T1, recv_bu 73d0: 66 2c 20 26 72 65 63 76 5f 6c 65 6e 29 3b 0a 09 f, &recv_len);.. 73e0: 69 66 20 28 73 63 61 72 64 5f 78 6d 69 74 5f 72 if (scard_xmit_r 73f0: 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 et != SCARD_S_SU 7400: 43 43 45 53 53 29 20 7b 0a 09 09 43 41 43 4b 45 CCESS) {...CACKE 7410: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 7420: 46 61 69 6c 65 64 20 74 6f 20 73 65 6e 64 20 41 Failed to send A 7430: 50 44 55 20 74 6f 20 63 61 72 64 20 28 53 43 61 PDU to card (SCa 7440: 72 64 54 72 61 6e 73 6d 69 74 28 29 20 3d 20 25 rdTransmit() = % 7450: 73 2f 25 6c 78 29 22 2c 20 43 41 43 4b 45 59 5f s/%lx)", CACKEY_ 7460: 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 DEBUG_FUNC_SCARD 7470: 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 ERR_TO_STR(scard 7480: 5f 78 6d 69 74 5f 72 65 74 29 2c 20 28 75 6e 73 _xmit_ret), (uns 7490: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 63 61 72 igned long) scar 74a0: 64 5f 78 6d 69 74 5f 72 65 74 29 3b 0a 09 09 43 d_xmit_ret);...C 74b0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 74c0: 54 46 28 22 4d 61 72 6b 69 6e 67 20 73 6c 6f 74 TF("Marking slot 74d0: 20 61 73 20 68 61 76 69 6e 67 20 62 65 65 6e 20 as having been 74e0: 72 65 73 65 74 22 29 3b 0a 0a 09 09 73 6c 6f 74 reset");....slot 74f0: 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 ->transaction_de 7500: 70 74 68 20 3d 20 30 3b 0a 09 09 73 6c 6f 74 2d pth = 0;...slot- 7510: 3e 73 6c 6f 74 5f 72 65 73 65 74 20 3d 20 31 3b >slot_reset = 1; 7520: 0a 0a 09 09 69 66 20 28 73 63 61 72 64 5f 78 6d ....if (scard_xm 7530: 69 74 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f it_ret == SCARD_ 7540: 57 5f 52 45 53 45 54 5f 43 41 52 44 29 20 7b 0a W_RESET_CARD) {. 7550: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 7560: 50 52 49 4e 54 46 28 22 52 65 73 65 74 20 72 65 PRINTF("Reset re 7570: 71 75 69 72 65 64 2c 20 70 6c 65 61 73 65 20 68 quired, please h 7580: 6f 6c 64 2e 2e 2e 22 29 3b 0a 0a 09 09 09 73 63 old...");.....sc 7590: 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 20 3d ard_reconn_ret = 75a0: 20 53 43 61 72 64 52 65 63 6f 6e 6e 65 63 74 28 SCardReconnect( 75b0: 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c slot->pcsc_card, 75c0: 20 53 43 41 52 44 5f 53 48 41 52 45 5f 53 48 41 SCARD_SHARE_SHA 75d0: 52 45 44 2c 20 53 43 41 52 44 5f 50 52 4f 54 4f RED, SCARD_PROTO 75e0: 43 4f 4c 5f 54 30 2c 20 53 43 41 52 44 5f 52 45 COL_T0, SCARD_RE 75f0: 53 45 54 5f 43 41 52 44 2c 20 26 70 72 6f 74 6f SET_CARD, &proto 7600: 63 6f 6c 29 3b 0a 09 09 09 69 66 20 28 73 63 61 col);....if (sca 7610: 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 20 3d 3d rd_reconn_ret == 7620: 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 SCARD_S_SUCCESS 7630: 29 20 7b 0a 09 09 09 09 2f 2a 20 52 65 2d 65 73 ) {...../* Re-es 7640: 74 61 62 6c 69 73 68 20 74 72 61 6e 73 61 63 74 tablish transact 7650: 69 6f 6e 2c 20 69 66 20 69 74 20 77 61 73 20 70 ion, if it was p 7660: 72 65 73 65 6e 74 20 2a 2f 0a 09 09 09 09 69 66 resent */.....if 7670: 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 (slot->transact 7680: 69 6f 6e 5f 64 65 70 74 68 20 3e 20 30 29 20 7b ion_depth > 0) { 7690: 0a 09 09 09 09 09 73 6c 6f 74 2d 3e 74 72 61 6e ......slot->tran 76a0: 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 2d 2d 3b saction_depth--; 76b0: 0a 09 09 09 09 09 63 61 63 6b 65 79 5f 62 65 67 ......cackey_beg 76c0: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 in_transaction(s 76d0: 6c 6f 74 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 lot);.....}..... 76e0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 76f0: 49 4e 54 46 28 22 52 65 73 65 74 20 73 75 63 63 INTF("Reset succ 7700: 65 73 73 66 75 6c 2c 20 72 65 74 72 61 6e 73 6d essful, retransm 7710: 69 74 74 69 6e 67 22 29 3b 0a 09 09 09 09 73 63 itting");.....sc 7720: 61 72 64 5f 78 6d 69 74 5f 72 65 74 20 3d 20 53 ard_xmit_ret = S 7730: 43 61 72 64 54 72 61 6e 73 6d 69 74 28 73 6c 6f CardTransmit(slo 7740: 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 t->pcsc_card, SC 7750: 41 52 44 5f 50 43 49 5f 54 30 2c 20 78 6d 69 74 ARD_PCI_T0, xmit 7760: 5f 62 75 66 2c 20 78 6d 69 74 5f 6c 65 6e 2c 20 _buf, xmit_len, 7770: 53 43 41 52 44 5f 50 43 49 5f 54 30 2c 20 72 65 SCARD_PCI_T0, re 7780: 63 76 5f 62 75 66 2c 20 26 72 65 63 76 5f 6c 65 cv_buf, &recv_le 7790: 6e 29 3b 0a 0a 09 09 09 09 69 66 20 28 73 63 61 n);......if (sca 77a0: 72 64 5f 78 6d 69 74 5f 72 65 74 20 21 3d 20 53 rd_xmit_ret != S 77b0: 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 CARD_S_SUCCESS) 77c0: 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {......CACKEY_DE 77d0: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 72 BUG_PRINTF("Retr 77e0: 61 6e 73 6d 69 74 20 66 61 69 6c 65 64 2c 20 72 ansmit failed, r 77f0: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail 7800: 75 72 65 20 61 66 74 65 72 20 64 69 73 63 6f 6e ure after discon 7810: 6e 65 63 74 69 6e 67 20 74 68 65 20 63 61 72 64 necting the card 7820: 20 28 53 43 61 72 64 54 72 61 6e 73 6d 69 74 20 (SCardTransmit 7830: 3d 20 25 73 2f 25 6c 69 29 22 2c 20 43 41 43 4b = %s/%li)", CACK 7840: 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 EY_DEBUG_FUNC_SC 7850: 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 ARDERR_TO_STR(sc 7860: 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 2c 20 28 ard_xmit_ret), ( 7870: 6c 6f 6e 67 29 20 73 63 61 72 64 5f 78 6d 69 74 long) scard_xmit 7880: 5f 72 65 74 29 3b 0a 0a 09 09 09 09 09 53 43 61 _ret);.......SCa 7890: 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 73 6c 6f rdDisconnect(slo 78a0: 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 t->pcsc_card, SC 78b0: 41 52 44 5f 52 45 53 45 54 5f 43 41 52 44 29 3b ARD_RESET_CARD); 78c0: 0a 09 09 09 09 09 73 6c 6f 74 2d 3e 70 63 73 63 ......slot->pcsc 78d0: 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 _card_connected 78e0: 3d 20 30 3b 0a 0a 09 09 09 09 09 2f 2a 20 45 6e = 0;......./* En 78f0: 64 20 53 6d 61 72 74 63 61 72 64 20 54 72 61 6e d Smartcard Tran 7900: 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 09 09 09 saction */...... 7910: 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f slot->transactio 7920: 6e 5f 64 65 70 74 68 20 3d 20 31 3b 0a 09 09 09 n_depth = 1;.... 7930: 09 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 ..cackey_end_tra 7940: 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a nsaction(slot);. 7950: 0a 09 09 09 09 09 72 65 74 75 72 6e 28 43 41 43 ......return(CAC 7960: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 7970: 49 43 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 20 IC);.....}....} 7980: 65 6c 73 65 20 7b 0a 09 09 09 09 43 41 43 4b 45 else {.....CACKE 7990: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 79a0: 44 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 63 61 Disconnecting ca 79b0: 72 64 22 29 3b 0a 0a 09 09 09 09 53 43 61 72 64 rd");......SCard 79c0: 44 69 73 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d Disconnect(slot- 79d0: 3e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 52 >pcsc_card, SCAR 79e0: 44 5f 52 45 53 45 54 5f 43 41 52 44 29 3b 0a 09 D_RESET_CARD);.. 79f0: 09 09 09 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 ...slot->pcsc_ca 7a00: 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 rd_connected = 0 7a10: 3b 0a 0a 09 09 09 09 2f 2a 20 45 6e 64 20 53 6d ;....../* End Sm 7a20: 61 72 74 63 61 72 64 20 54 72 61 6e 73 61 63 74 artcard Transact 7a30: 69 6f 6e 20 2a 2f 0a 09 09 09 09 73 6c 6f 74 2d ion */.....slot- 7a40: 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 70 >transaction_dep 7a50: 74 68 20 3d 20 31 3b 0a 09 09 09 09 63 61 63 6b th = 1;.....cack 7a60: 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 ey_end_transacti 7a70: 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 09 09 43 on(slot);......C 7a80: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 7a90: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 6e TF("Returning in 7aa0: 20 66 61 69 6c 75 72 65 22 29 3b 0a 09 09 09 09 failure");..... 7ab0: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 7ac0: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 7ad0: 09 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 ..}...} else {.. 7ae0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 7af0: 52 49 4e 54 46 28 22 44 69 73 63 6f 6e 6e 65 63 RINTF("Disconnec 7b00: 74 69 6e 67 20 63 61 72 64 22 29 3b 0a 0a 09 09 ting card");.... 7b10: 09 53 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 .SCardDisconnect 7b20: 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 (slot->pcsc_card 7b30: 2c 20 53 43 41 52 44 5f 52 45 53 45 54 5f 43 41 , SCARD_RESET_CA 7b40: 52 44 29 3b 0a 09 09 09 73 6c 6f 74 2d 3e 70 63 RD);....slot->pc 7b50: 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 sc_card_connecte 7b60: 64 20 3d 20 30 3b 0a 0a 09 09 09 2f 2a 20 45 6e d = 0;...../* En 7b70: 64 20 53 6d 61 72 74 63 61 72 64 20 54 72 61 6e d Smartcard Tran 7b80: 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 09 73 6c saction */....sl 7b90: 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f ot->transaction_ 7ba0: 64 65 70 74 68 20 3d 20 31 3b 0a 09 09 09 63 61 depth = 1;....ca 7bb0: 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 ckey_end_transac 7bc0: 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 09 tion(slot);..... 7bd0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 7be0: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 NTF("Returning i 7bf0: 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 09 09 09 n failure");.... 7c00: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 7c10: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 7c20: 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 .}..}...CACKEY_D 7c30: 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 52 EBUG_PRINTBUF("R 7c40: 65 74 75 72 6e 65 64 20 56 61 6c 75 65 3a 22 2c eturned Value:", 7c50: 20 72 65 63 76 5f 62 75 66 2c 20 72 65 63 76 5f recv_buf, recv_ 7c60: 6c 65 6e 29 3b 0a 0a 09 69 66 20 28 72 65 63 76 len);...if (recv 7c70: 5f 6c 65 6e 20 3c 20 32 29 20 7b 0a 09 09 2f 2a _len < 2) {.../* 7c80: 20 4d 69 6e 69 6d 61 6c 20 72 65 73 70 6f 6e 73 Minimal respons 7c90: 65 20 6c 65 6e 67 74 68 20 69 73 20 32 20 62 79 e length is 2 by 7ca0: 74 65 73 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 tes, returning i 7cb0: 6e 20 66 61 69 6c 75 72 65 20 2a 2f 0a 09 09 43 n failure */...C 7cc0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 7cd0: 54 46 28 22 52 65 73 70 6f 6e 73 65 20 74 6f 6f TF("Response too 7ce0: 20 73 6d 61 6c 6c 2c 20 72 65 74 75 72 6e 69 6e small, returnin 7cf0: 67 20 69 6e 20 66 61 69 6c 75 72 65 20 28 72 65 g in failure (re 7d00: 63 76 5f 6c 65 6e 20 3d 20 25 6c 75 29 22 2c 20 cv_len = %lu)", 7d10: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 7d20: 72 65 63 76 5f 6c 65 6e 29 3b 0a 0a 09 09 2f 2a recv_len);..../* 7d30: 20 45 6e 64 20 53 6d 61 72 74 63 61 72 64 20 54 End Smartcard T 7d40: 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 ransaction */... 7d50: 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 cackey_end_trans 7d60: 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 action(slot);... 7d70: 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 .return(CACKEY_P 7d80: 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a CSC_E_GENERIC);. 7d90: 09 7d 0a 0a 09 2f 2a 20 44 65 74 65 72 6d 69 6e .}.../* Determin 7da0: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 2a 2f e result code */ 7db0: 0a 09 6d 61 6a 6f 72 5f 72 63 20 3d 20 72 65 63 ..major_rc = rec 7dc0: 76 5f 62 75 66 5b 72 65 63 76 5f 6c 65 6e 20 2d v_buf[recv_len - 7dd0: 20 32 5d 3b 0a 09 6d 69 6e 6f 72 5f 72 63 20 3d 2];..minor_rc = 7de0: 20 72 65 63 76 5f 62 75 66 5b 72 65 63 76 5f 6c recv_buf[recv_l 7df0: 65 6e 20 2d 20 31 5d 3b 0a 09 69 66 20 28 72 65 en - 1];..if (re 7e00: 73 70 63 6f 64 65 29 20 7b 0a 09 09 2a 72 65 73 spcode) {...*res 7e10: 70 63 6f 64 65 20 3d 20 28 6d 61 6a 6f 72 5f 72 pcode = (major_r 7e20: 63 20 3c 3c 20 38 29 20 7c 20 6d 69 6e 6f 72 5f c << 8) | minor_ 7e30: 72 63 3b 0a 09 7d 0a 0a 09 2f 2a 20 41 64 6a 75 rc;..}.../* Adju 7e40: 73 74 20 6d 65 73 73 61 67 65 20 62 75 66 66 65 st message buffe 7e50: 72 20 2a 2f 0a 09 72 65 63 76 5f 6c 65 6e 20 2d r */..recv_len - 7e60: 3d 20 32 3b 0a 0a 09 2f 2a 20 41 64 64 20 62 79 = 2;.../* Add by 7e70: 74 65 73 20 74 6f 20 72 65 74 75 72 6e 20 76 61 tes to return va 7e80: 6c 75 65 20 2a 2f 0a 09 74 6d 70 5f 72 65 73 70 lue */..tmp_resp 7e90: 64 61 74 61 5f 6c 65 6e 20 3d 20 30 3b 0a 09 69 data_len = 0;..i 7ea0: 66 20 28 72 65 73 70 64 61 74 61 20 26 26 20 72 f (respdata && r 7eb0: 65 73 70 64 61 74 61 5f 6c 65 6e 29 20 7b 0a 09 espdata_len) {.. 7ec0: 09 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 .tmp_respdata_le 7ed0: 6e 20 3d 20 2a 72 65 73 70 64 61 74 61 5f 6c 65 n = *respdata_le 7ee0: 6e 3b 0a 0a 09 09 62 79 74 65 73 5f 74 6f 5f 63 n;....bytes_to_c 7ef0: 6f 70 79 20 3d 20 2a 72 65 73 70 64 61 74 61 5f opy = *respdata_ 7f00: 6c 65 6e 3b 0a 0a 09 09 69 66 20 28 72 65 63 76 len;....if (recv 7f10: 5f 6c 65 6e 20 3c 20 62 79 74 65 73 5f 74 6f 5f _len < bytes_to_ 7f20: 63 6f 70 79 29 20 7b 0a 09 09 09 62 79 74 65 73 copy) {....bytes 7f30: 5f 74 6f 5f 63 6f 70 79 20 3d 20 72 65 63 76 5f _to_copy = recv_ 7f40: 6c 65 6e 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b len;...}....CACK 7f50: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 7f60: 22 43 6f 70 79 69 6e 67 20 25 6c 75 20 62 79 74 "Copying %lu byt 7f70: 65 73 20 74 6f 20 74 68 65 20 62 75 66 66 65 72 es to the buffer 7f80: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 7f90: 67 29 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 g) bytes_to_copy 7fa0: 29 3b 0a 0a 09 09 6d 65 6d 63 70 79 28 72 65 73 );....memcpy(res 7fb0: 70 64 61 74 61 2c 20 72 65 63 76 5f 62 75 66 2c pdata, recv_buf, 7fc0: 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 3b bytes_to_copy); 7fd0: 0a 09 09 72 65 73 70 64 61 74 61 20 2b 3d 20 62 ...respdata += b 7fe0: 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a 0a 09 ytes_to_copy;... 7ff0: 09 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e 20 3d .*respdata_len = 8000: 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a bytes_to_copy;. 8010: 09 09 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c ..tmp_respdata_l 8020: 65 6e 20 2d 3d 20 62 79 74 65 73 5f 74 6f 5f 63 en -= bytes_to_c 8030: 6f 70 79 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 opy;..} else {.. 8040: 09 69 66 20 28 72 65 63 76 5f 6c 65 6e 20 21 3d .if (recv_len != 8050: 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 0) {....CACKEY_ 8060: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 54 68 DEBUG_PRINTF("Th 8070: 72 6f 77 69 6e 67 20 61 77 61 79 20 25 6c 75 20 rowing away %lu 8080: 62 79 74 65 73 2c 20 6e 6f 77 68 65 72 65 20 74 bytes, nowhere t 8090: 6f 20 70 75 74 20 74 68 65 6d 21 22 2c 20 28 75 o put them!", (u 80a0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 72 65 nsigned long) re 80b0: 63 76 5f 6c 65 6e 29 3b 0a 09 09 7d 0a 09 7d 0a cv_len);...}..}. 80c0: 0a 09 69 66 20 28 6d 61 6a 6f 72 5f 72 63 20 3d ..if (major_rc = 80d0: 3d 20 30 78 36 31 29 20 7b 0a 09 09 2f 2a 20 57 = 0x61) {.../* W 80e0: 65 20 6e 65 65 64 20 74 6f 20 52 45 41 44 20 2a e need to READ * 80f0: 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 /...CACKEY_DEBUG 8100: 5f 50 52 49 4e 54 46 28 22 42 75 66 66 65 72 20 _PRINTF("Buffer 8110: 72 65 61 64 20 72 65 71 75 69 72 65 64 22 29 3b read required"); 8120: 0a 0a 09 09 70 63 73 63 5f 67 65 74 72 65 73 70 ....pcsc_getresp 8130: 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 _ret = cackey_se 8140: 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 nd_apdu(slot, GS 8150: 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 31 CIS_CLASS_ISO781 8160: 36 2c 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 47 6, GSCIS_INSTR_G 8170: 45 54 5f 52 45 53 50 4f 4e 53 45 2c 20 30 78 30 ET_RESPONSE, 0x0 8180: 30 2c 20 30 78 30 30 2c 20 30 2c 20 4e 55 4c 4c 0, 0x00, 0, NULL 8190: 2c 20 6d 69 6e 6f 72 5f 72 63 2c 20 72 65 73 70 , minor_rc, resp 81a0: 63 6f 64 65 2c 20 72 65 73 70 64 61 74 61 2c 20 code, respdata, 81b0: 26 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 &tmp_respdata_le 81c0: 6e 29 3b 0a 09 09 69 66 20 28 70 63 73 63 5f 67 n);...if (pcsc_g 81d0: 65 74 72 65 73 70 5f 72 65 74 20 21 3d 20 43 41 etresp_ret != CA 81e0: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 CKEY_PCSC_S_OK) 81f0: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU 8200: 47 5f 50 52 49 4e 54 46 28 22 42 75 66 66 65 72 G_PRINTF("Buffer 8210: 20 72 65 61 64 20 66 61 69 6c 65 64 21 20 20 52 read failed! R 8220: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail 8230: 75 72 65 22 29 3b 0a 0a 09 09 09 2f 2a 20 45 6e ure");...../* En 8240: 64 20 53 6d 61 72 74 63 61 72 64 20 54 72 61 6e d Smartcard Tran 8250: 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 09 63 61 saction */....ca 8260: 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 ckey_end_transac 8270: 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 09 tion(slot);..... 8280: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 8290: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 82a0: 09 7d 0a 0a 09 09 69 66 20 28 72 65 73 70 64 61 .}....if (respda 82b0: 74 61 5f 6c 65 6e 29 20 7b 0a 09 09 09 2a 72 65 ta_len) {....*re 82c0: 73 70 64 61 74 61 5f 6c 65 6e 20 2b 3d 20 74 6d spdata_len += tm 82d0: 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 6e 3b 0a p_respdata_len;. 82e0: 09 09 7d 0a 0a 09 09 2f 2a 20 45 6e 64 20 53 6d ..}..../* End Sm 82f0: 61 72 74 63 61 72 64 20 54 72 61 6e 73 61 63 74 artcard Transact 8300: 69 6f 6e 20 2a 2f 0a 09 09 63 61 63 6b 65 79 5f ion */...cackey_ 8310: 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 end_transaction( 8320: 73 6c 6f 74 29 3b 0a 0a 09 09 43 41 43 4b 45 59 slot);....CACKEY 8330: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 8340: 65 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 eturning in succ 8350: 65 73 73 20 28 62 75 66 66 65 72 20 72 65 61 64 ess (buffer read 8360: 20 63 6f 6d 70 6c 65 74 65 29 22 29 3b 0a 09 09 complete)");... 8370: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 8380: 53 43 5f 53 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 2f SC_S_OK);..}.../ 8390: 2a 20 45 6e 64 20 53 6d 61 72 74 63 61 72 64 20 * End Smartcard 83a0: 54 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 Transaction */.. 83b0: 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 cackey_end_trans 83c0: 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 action(slot);... 83d0: 69 66 20 28 6d 61 6a 6f 72 5f 72 63 20 3d 3d 20 if (major_rc == 83e0: 30 78 39 30 29 20 7b 0a 09 09 2f 2a 20 53 75 63 0x90) {.../* Suc 83f0: 63 65 73 73 20 2a 2f 0a 09 09 43 41 43 4b 45 59 cess */...CACKEY 8400: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 8410: 65 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 eturning in succ 8420: 65 73 73 20 28 6d 61 6a 6f 72 5f 72 63 20 3d 20 ess (major_rc = 8430: 30 78 39 30 29 22 29 3b 0a 0a 09 09 72 65 74 75 0x90)");....retu 8440: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 rn(CACKEY_PCSC_S 8450: 5f 4f 4b 29 3b 0a 09 7d 0a 0a 0a 09 43 41 43 4b _OK);..}....CACK 8460: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 8470: 22 41 50 44 55 20 52 65 74 75 72 6e 65 64 20 61 "APDU Returned a 8480: 6e 20 65 72 72 6f 72 2c 20 72 65 74 75 72 6e 69 n error, returni 8490: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b ng in failure"); 84a0: 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 84b0: 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 _PCSC_E_GENERIC) 84c0: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f ;.}../*. * SYNPO 84d0: 53 49 53 0a 20 2a 20 20 20 20 20 73 73 69 7a 65 SIS. * ssize 84e0: 5f 74 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 _t cackey_read_b 84f0: 75 66 66 65 72 28 73 74 72 75 63 74 20 63 61 63 uffer(struct cac 8500: 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 key_slot *slot, 8510: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 unsigned char *b 8520: 75 66 66 65 72 2c 20 73 69 7a 65 5f 74 20 63 6f uffer, size_t co 8530: 75 6e 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 unt, unsigned ch 8540: 61 72 20 74 5f 6f 72 5f 76 2c 20 73 69 7a 65 5f ar t_or_v, size_ 8550: 74 20 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 t initial_offset 8560: 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e );. *. * ARGUMEN 8570: 54 53 0a 20 2a 20 20 20 20 20 73 74 72 75 63 74 TS. * struct 8580: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c cackey_slot *sl 8590: 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 53 6c ot. * Sl 85a0: 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 ot to send comma 85b0: 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 20 20 20 nds to. *. * 85c0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a unsigned char * 85d0: 62 75 66 66 65 72 0a 20 2a 20 20 20 20 20 20 20 buffer. * 85e0: 20 20 5b 4f 55 54 5d 20 42 75 66 66 65 72 0a 20 [OUT] Buffer. 85f0: 2a 0a 20 2a 20 20 20 20 20 73 69 7a 65 5f 74 20 *. * size_t 8600: 63 6f 75 6e 74 0a 20 2a 20 20 20 20 20 20 20 20 count. * 8610: 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 Number of bytes 8620: 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 72 to attempt to r 8630: 65 61 64 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e ead. *. * un 8640: 73 69 67 6e 65 64 20 63 68 61 72 20 74 5f 6f 72 signed char t_or 8650: 5f 76 0a 20 2a 20 20 20 20 20 20 20 20 20 53 65 _v. * Se 8660: 6c 65 63 74 20 74 68 65 20 54 2d 62 75 66 66 65 lect the T-buffe 8670: 72 20 28 30 31 29 20 6f 72 20 56 2d 62 75 66 66 r (01) or V-buff 8680: 65 72 20 28 30 32 29 20 74 6f 20 72 65 61 64 20 er (02) to read 8690: 66 72 6f 6d 2e 20 20 0a 20 2a 0a 20 2a 20 20 20 from. . *. * 86a0: 20 20 73 69 7a 65 5f 74 20 69 6e 69 74 69 61 6c size_t initial 86b0: 5f 6f 66 66 73 65 74 0a 20 2a 20 20 20 20 20 20 _offset. * 86c0: 20 20 20 53 70 65 63 69 66 79 20 74 68 65 20 6f Specify the o 86d0: 66 66 73 65 74 20 74 6f 20 62 65 67 69 6e 20 74 ffset to begin t 86e0: 68 65 20 72 65 61 64 20 66 72 6f 6d 0a 20 2a 0a he read from. *. 86f0: 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c *. * RETURN VAL 8700: 55 45 0a 20 2a 20 20 20 20 20 54 68 69 73 20 66 UE. * This f 8710: 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 unction returns 8720: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 the number of by 8730: 74 65 73 20 61 63 74 75 61 6c 6c 79 20 72 65 61 tes actually rea 8740: 64 2c 20 6f 72 20 2d 31 20 6f 6e 20 65 72 72 6f d, or -1 on erro 8750: 72 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 r.. *. * NOTES. 8760: 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a * None. *. * 8770: 2f 0a 73 74 61 74 69 63 20 73 73 69 7a 65 5f 74 /.static ssize_t 8780: 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 cackey_read_buf 8790: 66 65 72 28 73 74 72 75 63 74 20 63 61 63 6b 65 fer(struct cacke 87a0: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e y_slot *slot, un 87b0: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 75 66 signed char *buf 87c0: 66 65 72 2c 20 73 69 7a 65 5f 74 20 63 6f 75 6e fer, size_t coun 87d0: 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 t, unsigned char 87e0: 20 74 5f 6f 72 5f 76 2c 20 73 69 7a 65 5f 74 20 t_or_v, size_t 87f0: 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 29 20 initial_offset) 8800: 7b 0a 09 73 69 7a 65 5f 74 20 6f 66 66 73 65 74 {..size_t offset 8810: 20 3d 20 30 2c 20 6d 61 78 5f 6f 66 66 73 65 74 = 0, max_offset 8820: 2c 20 6d 61 78 5f 63 6f 75 6e 74 3b 0a 09 75 6e , max_count;..un 8830: 73 69 67 6e 65 64 20 63 68 61 72 20 63 6d 64 5b signed char cmd[ 8840: 32 5d 3b 0a 09 75 69 6e 74 31 36 5f 74 20 72 65 2];..uint16_t re 8850: 73 70 63 6f 64 65 3b 0a 09 69 6e 74 20 73 65 6e spcode;..int sen 8860: 64 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f d_ret;...CACKEY_ 8870: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 8880: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 6d 61 78 5f 6f lled.");...max_o 8890: 66 66 73 65 74 20 3d 20 63 6f 75 6e 74 3b 0a 09 ffset = count;.. 88a0: 6d 61 78 5f 63 6f 75 6e 74 20 3d 20 32 35 32 3b max_count = 252; 88b0: 0a 0a 09 69 66 20 28 74 5f 6f 72 5f 76 20 21 3d ...if (t_or_v != 88c0: 20 31 20 26 26 20 74 5f 6f 72 5f 76 20 21 3d 20 1 && t_or_v != 88d0: 32 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 2) {...CACKEY_DE 88e0: 42 55 47 5f 50 52 49 4e 54 46 28 22 49 6e 76 61 BUG_PRINTF("Inva 88f0: 6c 69 64 20 54 20 6f 72 20 56 20 70 61 72 61 6d lid T or V param 8900: 65 74 65 72 20 73 70 65 63 69 66 69 65 64 2c 20 eter specified, 8910: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai 8920: 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 lure");....retur 8930: 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 63 6d 64 5b n(-1);..}...cmd[ 8940: 30 5d 20 3d 20 74 5f 6f 72 5f 76 3b 0a 0a 09 77 0] = t_or_v;...w 8950: 68 69 6c 65 20 28 31 29 20 7b 0a 09 09 69 66 20 hile (1) {...if 8960: 28 6f 66 66 73 65 74 20 3e 3d 20 6d 61 78 5f 6f (offset >= max_o 8970: 66 66 73 65 74 29 20 7b 0a 09 09 09 43 41 43 4b ffset) {....CACK 8980: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 8990: 22 42 75 66 66 65 72 20 74 6f 6f 20 73 6d 61 6c "Buffer too smal 89a0: 6c 2c 20 72 65 74 75 72 6e 69 6e 67 20 77 68 61 l, returning wha 89b0: 74 20 77 65 20 67 6f 74 2e 2e 2e 22 29 3b 0a 0a t we got...");.. 89c0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 ...break;...}... 89d0: 09 63 6f 75 6e 74 20 3d 20 6d 61 78 5f 6f 66 66 .count = max_off 89e0: 73 65 74 20 2d 20 6f 66 66 73 65 74 3b 0a 09 09 set - offset;... 89f0: 69 66 20 28 63 6f 75 6e 74 20 3e 20 6d 61 78 5f if (count > max_ 8a00: 63 6f 75 6e 74 29 20 7b 0a 09 09 09 63 6f 75 6e count) {....coun 8a10: 74 20 3d 20 6d 61 78 5f 63 6f 75 6e 74 3b 0a 09 t = max_count;.. 8a20: 09 7d 0a 0a 09 09 63 6d 64 5b 31 5d 20 3d 20 63 .}....cmd[1] = c 8a30: 6f 75 6e 74 3b 0a 0a 09 09 73 65 6e 64 5f 72 65 ount;....send_re 8a40: 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f t = cackey_send_ 8a50: 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 apdu(slot, GSCIS 8a60: 5f 43 4c 41 53 53 5f 47 4c 4f 42 41 4c 5f 50 4c _CLASS_GLOBAL_PL 8a70: 41 54 46 4f 52 4d 2c 20 47 53 43 49 53 5f 49 4e ATFORM, GSCIS_IN 8a80: 53 54 52 5f 52 45 41 44 5f 42 55 46 46 45 52 2c STR_READ_BUFFER, 8a90: 20 28 28 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 ((initial_offse 8aa0: 74 20 2b 20 6f 66 66 73 65 74 29 20 3e 3e 20 38 t + offset) >> 8 8ab0: 29 20 26 20 30 78 66 66 2c 20 28 69 6e 69 74 69 ) & 0xff, (initi 8ac0: 61 6c 5f 6f 66 66 73 65 74 20 2b 20 6f 66 66 73 al_offset + offs 8ad0: 65 74 29 20 26 20 30 78 66 66 2c 20 73 69 7a 65 et) & 0xff, size 8ae0: 6f 66 28 63 6d 64 29 2c 20 63 6d 64 2c 20 30 78 of(cmd), cmd, 0x 8af0: 30 30 2c 20 26 72 65 73 70 63 6f 64 65 2c 20 62 00, &respcode, b 8b00: 75 66 66 65 72 20 2b 20 6f 66 66 73 65 74 2c 20 uffer + offset, 8b10: 26 63 6f 75 6e 74 29 3b 0a 09 09 69 66 20 28 73 &count);...if (s 8b20: 65 6e 64 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 end_ret != CACKE 8b30: 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 Y_PCSC_S_OK) {.. 8b40: 09 09 69 66 20 28 72 65 73 70 63 6f 64 65 20 3d ..if (respcode = 8b50: 3d 20 30 78 36 41 38 36 29 20 7b 0a 09 09 09 09 = 0x6A86) {..... 8b60: 69 66 20 28 6d 61 78 5f 63 6f 75 6e 74 20 3d 3d if (max_count == 8b70: 20 31 29 20 7b 0a 09 09 09 09 09 62 72 65 61 6b 1) {......break 8b80: 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 6d 61 78 ;.....}......max 8b90: 5f 63 6f 75 6e 74 20 3d 20 6d 61 78 5f 63 6f 75 _count = max_cou 8ba0: 6e 74 20 2f 20 32 3b 0a 0a 09 09 09 09 63 6f 6e nt / 2;......con 8bb0: 74 69 6e 75 65 3b 0a 09 09 09 7d 0a 0a 09 09 09 tinue;....}..... 8bc0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 8bd0: 4e 54 46 28 22 63 61 63 6b 65 79 5f 73 65 6e 64 NTF("cackey_send 8be0: 5f 61 70 64 75 28 29 20 66 61 69 6c 65 64 2c 20 _apdu() failed, 8bf0: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai 8c00: 6c 75 72 65 22 29 3b 0a 0a 09 09 09 72 65 74 75 lure");.....retu 8c10: 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 6f rn(-1);...}....o 8c20: 66 66 73 65 74 20 2b 3d 20 63 6f 75 6e 74 3b 0a ffset += count;. 8c30: 0a 09 09 69 66 20 28 63 6f 75 6e 74 20 3c 20 6d ...if (count < m 8c40: 61 78 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09 43 ax_count) {....C 8c50: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 8c60: 54 46 28 22 53 68 6f 72 74 20 72 65 61 64 20 2d TF("Short read - 8c70: 2d 20 63 6f 75 6e 74 20 3d 20 25 69 2c 20 63 6d - count = %i, cm 8c80: 64 5b 31 5d 20 3d 20 25 69 22 2c 20 28 69 6e 74 d[1] = %i", (int 8c90: 29 20 63 6f 75 6e 74 2c 20 28 69 6e 74 29 20 63 ) count, (int) c 8ca0: 6d 64 5b 31 5d 29 3b 0a 0a 09 09 09 62 72 65 61 md[1]);.....brea 8cb0: 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a 23 69 66 64 65 k;...}..}..#ifde 8cc0: 66 20 43 41 43 4b 45 59 5f 50 41 52 41 4e 4f 49 f CACKEY_PARANOI 8cd0: 44 0a 23 20 20 69 66 64 65 66 20 5f 50 4f 53 49 D.# ifdef _POSI 8ce0: 58 5f 53 53 49 5a 45 5f 4d 41 58 0a 09 69 66 20 X_SSIZE_MAX..if 8cf0: 28 6f 66 66 73 65 74 20 3e 20 5f 50 4f 53 49 58 (offset > _POSIX 8d00: 5f 53 53 49 5a 45 5f 4d 41 58 29 20 7b 0a 09 09 _SSIZE_MAX) {... 8d10: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 8d20: 4e 54 46 28 22 4f 66 66 73 65 74 20 65 78 63 65 NTF("Offset exce 8d30: 65 64 73 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 eds maximum valu 8d40: 65 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 e, returning in 8d50: 66 61 69 6c 75 72 65 2e 20 28 6d 61 78 20 3d 20 failure. (max = 8d60: 25 6c 69 2c 20 6f 66 66 73 65 74 20 3d 20 25 6c %li, offset = %l 8d70: 75 29 22 2c 20 28 6c 6f 6e 67 29 20 5f 50 4f 53 u)", (long) _POS 8d80: 49 58 5f 53 53 49 5a 45 5f 4d 41 58 2c 20 28 75 IX_SSIZE_MAX, (u 8d90: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6f 66 nsigned long) of 8da0: 66 73 65 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e fset);....return 8db0: 28 2d 31 29 3b 0a 09 7d 0a 23 20 20 65 6e 64 69 (-1);..}.# endi 8dc0: 66 0a 23 65 6e 64 69 66 0a 0a 09 43 41 43 4b 45 f.#endif...CACKE 8dd0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 8de0: 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 Returning in suc 8df0: 63 65 73 73 2c 20 72 65 61 64 20 25 6c 75 20 62 cess, read %lu b 8e00: 79 74 65 73 22 2c 20 28 75 6e 73 69 67 6e 65 64 ytes", (unsigned 8e10: 20 6c 6f 6e 67 29 20 6f 66 66 73 65 74 29 3b 0a long) offset);. 8e20: 0a 09 72 65 74 75 72 6e 28 6f 66 66 73 65 74 29 ..return(offset) 8e30: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f ;.}../*. * SYNPO 8e40: 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 SIS. * cacke 8e50: 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 73 65 6c y_ret cackey_sel 8e60: 65 63 74 5f 61 70 70 6c 65 74 28 73 74 72 75 63 ect_applet(struc 8e70: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 t cackey_slot *s 8e80: 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 lot, unsigned ch 8e90: 61 72 20 2a 61 69 64 2c 20 73 69 7a 65 5f 74 20 ar *aid, size_t 8ea0: 61 69 64 5f 6c 65 6e 29 3b 0a 20 2a 0a 20 2a 20 aid_len);. *. * 8eb0: 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 ARGUMENTS. * 8ec0: 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 struct cackey_s 8ed0: 6c 6f 74 20 2a 73 6c 6f 74 0a 20 2a 20 20 20 20 lot *slot. * 8ee0: 20 20 20 20 20 53 6c 6f 74 20 74 6f 20 73 65 6e Slot to sen 8ef0: 64 20 63 6f 6d 6d 61 6e 64 73 20 74 6f 0a 20 2a d commands to. * 8f00: 0a 20 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 64 . * unsigned 8f10: 20 63 68 61 72 20 2a 61 69 64 0a 20 2a 20 20 20 char *aid. * 8f20: 20 20 20 20 20 20 42 75 66 66 65 72 20 63 6f 6e Buffer con 8f30: 74 61 69 6e 69 6e 67 20 41 70 70 6c 65 74 20 49 taining Applet I 8f40: 44 20 74 6f 20 73 65 6c 65 63 74 0a 20 2a 0a 20 D to select. *. 8f50: 2a 20 20 20 20 20 73 69 7a 65 5f 74 20 61 69 64 * size_t aid 8f60: 5f 6c 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 _len. * 8f70: 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 Number of bytes 8f80: 69 6e 20 74 68 65 20 22 61 69 64 22 20 28 41 70 in the "aid" (Ap 8f90: 70 6c 65 74 20 49 44 29 20 70 61 72 61 6d 65 74 plet ID) paramet 8fa0: 65 72 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 er. *. * RETURN 8fb0: 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 43 41 43 VALUE. * CAC 8fc0: 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 20 KEY_PCSC_S_OK 8fd0: 20 20 20 20 20 20 4f 6e 20 73 75 63 63 65 73 73 On success 8fe0: 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 5f 50 . * CACKEY_P 8ff0: 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 20 20 20 CSC_E_GENERIC 9000: 20 4f 6e 20 65 72 72 6f 72 0a 20 2a 0a 20 2a 20 On error. *. * 9010: 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 4e 6f 6e NOTES. * Non 9020: 65 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 e. *. */.static 9030: 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 cackey_ret cacke 9040: 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c 65 74 28 y_select_applet( 9050: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl 9060: 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 6e ot *slot, unsign 9070: 65 64 20 63 68 61 72 20 2a 61 69 64 2c 20 73 69 ed char *aid, si 9080: 7a 65 5f 74 20 61 69 64 5f 6c 65 6e 29 20 7b 0a ze_t aid_len) {. 9090: 09 69 6e 74 20 73 65 6e 64 5f 72 65 74 3b 0a 0a .int send_ret;.. 90a0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 90b0: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 90c0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 90d0: 50 52 49 4e 54 42 55 46 28 22 53 65 6c 65 63 74 PRINTBUF("Select 90e0: 69 6e 67 20 61 70 70 6c 65 74 3a 22 2c 20 61 69 ing applet:", ai 90f0: 64 2c 20 61 69 64 5f 6c 65 6e 29 3b 0a 0a 09 73 d, aid_len);...s 9100: 65 6e 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 end_ret = cackey 9110: 5f 73 65 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c _send_apdu(slot, 9120: 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f GSCIS_CLASS_ISO 9130: 37 38 31 36 2c 20 47 53 43 49 53 5f 49 4e 53 54 7816, GSCIS_INST 9140: 52 5f 53 45 4c 45 43 54 2c 20 47 53 43 49 53 5f R_SELECT, GSCIS_ 9150: 50 41 52 41 4d 5f 53 45 4c 45 43 54 5f 41 50 50 PARAM_SELECT_APP 9160: 4c 45 54 2c 20 30 78 30 43 2c 20 61 69 64 5f 6c LET, 0x0C, aid_l 9170: 65 6e 2c 20 61 69 64 2c 20 30 78 30 30 2c 20 4e en, aid, 0x00, N 9180: 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 ULL, NULL, NULL) 9190: 3b 0a 09 69 66 20 28 73 65 6e 64 5f 72 65 74 20 ;..if (send_ret 91a0: 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 != CACKEY_PCSC_S 91b0: 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f _OK) {...CACKEY_ 91c0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 61 DEBUG_PRINTF("Fa 91d0: 69 6c 65 64 20 74 6f 20 6f 70 65 6e 20 61 70 70 iled to open app 91e0: 6c 65 74 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 let, returning i 91f0: 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 n failure");.... 9200: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 9210: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 9220: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 9230: 5f 50 52 49 4e 54 46 28 22 53 75 63 63 65 73 73 _PRINTF("Success 9240: 66 75 6c 6c 79 20 73 65 6c 65 63 74 65 64 20 66 fully selected f 9250: 69 6c 65 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 ile");...return( 9260: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK 9270: 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 );.}../*. * SYNP 9280: 4f 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b OSIS. * cack 9290: 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 73 65 ey_ret cackey_se 92a0: 6c 65 63 74 5f 66 69 6c 65 28 73 74 72 75 63 74 lect_file(struct 92b0: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c cackey_slot *sl 92c0: 6f 74 2c 20 75 69 6e 74 31 36 5f 74 20 65 66 29 ot, uint16_t ef) 92d0: 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 ;. *. * ARGUMENT 92e0: 53 0a 20 2a 20 20 20 20 20 73 74 72 75 63 74 20 S. * struct 92f0: 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f cackey_slot *slo 9300: 74 0a 20 2a 20 20 20 20 20 20 20 20 20 53 6c 6f t. * Slo 9310: 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 6e t to send comman 9320: 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 20 20 20 20 ds to. *. * 9330: 75 69 6e 74 31 36 5f 74 20 65 66 0a 20 2a 20 20 uint16_t ef. * 9340: 20 20 20 20 20 20 20 45 6c 65 6d 65 6e 74 61 6c Elemental 9350: 20 46 69 6c 65 20 74 6f 20 73 65 6c 65 63 74 0a File to select. 9360: 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c *. * RETURN VAL 9370: 55 45 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 UE. * CACKEY 9380: 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 20 20 20 20 _PCSC_S_OK 9390: 20 20 20 4f 6e 20 73 75 63 63 65 73 73 0a 20 2a On success. * 93a0: 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 CACKEY_PCSC 93b0: 5f 45 5f 47 45 4e 45 52 49 43 20 20 20 20 4f 6e _E_GENERIC On 93c0: 20 65 72 72 6f 72 0a 20 2a 0a 20 2a 20 4e 4f 54 error. *. * NOT 93d0: 45 53 0a 20 2a 20 20 20 20 20 54 68 69 73 20 73 ES. * This s 93e0: 65 6c 65 63 74 73 20 61 6e 20 45 6c 65 6d 65 6e elects an Elemen 93f0: 74 61 72 79 20 46 69 6c 65 20 28 45 46 29 20 75 tary File (EF) u 9400: 6e 64 65 72 20 74 68 65 20 63 75 72 72 65 6e 74 nder the current 9410: 6c 79 20 73 65 6c 65 63 74 65 64 0a 20 2a 20 20 ly selected. * 9420: 20 20 20 44 65 64 69 63 61 74 65 64 20 46 69 6c Dedicated Fil 9430: 65 20 28 44 46 29 0a 20 2a 0a 20 2a 20 20 20 20 e (DF). *. * 9440: 20 54 79 70 69 63 61 6c 6c 79 20 74 68 69 73 20 Typically this 9450: 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 is called after 9460: 73 65 6c 65 63 74 69 6e 67 20 74 68 65 20 63 6f selecting the co 9470: 72 72 65 63 74 20 41 70 70 6c 65 74 20 28 75 73 rrect Applet (us 9480: 69 6e 67 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 ing. * cacke 9490: 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c 65 74 29 y_select_applet) 94a0: 20 66 6f 72 20 56 4d 20 63 61 72 64 73 0a 20 2a for VM cards. * 94b0: 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63 61 63 6b . */.static cack 94c0: 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 73 65 ey_ret cackey_se 94d0: 6c 65 63 74 5f 66 69 6c 65 28 73 74 72 75 63 74 lect_file(struct 94e0: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c cackey_slot *sl 94f0: 6f 74 2c 20 75 69 6e 74 31 36 5f 74 20 65 66 29 ot, uint16_t ef) 9500: 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 {..unsigned cha 9510: 72 20 66 69 64 5f 62 75 66 5b 32 5d 3b 0a 09 69 r fid_buf[2];..i 9520: 6e 74 20 73 65 6e 64 5f 72 65 74 3b 0a 0a 09 43 nt send_ret;...C 9530: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 9540: 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 9550: 09 2f 2a 20 4f 70 65 6e 20 74 68 65 20 65 6c 65 ./* Open the ele 9560: 6d 65 6e 74 61 72 79 20 66 69 6c 65 20 2a 2f 0a mentary file */. 9570: 09 66 69 64 5f 62 75 66 5b 30 5d 20 3d 20 28 65 .fid_buf[0] = (e 9580: 66 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a f >> 8) & 0xff;. 9590: 09 66 69 64 5f 62 75 66 5b 31 5d 20 3d 20 65 66 .fid_buf[1] = ef 95a0: 20 26 20 30 78 66 66 3b 0a 0a 09 43 41 43 4b 45 & 0xff;...CACKE 95b0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 95c0: 53 65 6c 65 63 74 69 6e 67 20 66 69 6c 65 3a 20 Selecting file: 95d0: 25 30 34 6c 78 22 2c 20 28 75 6e 73 69 67 6e 65 %04lx", (unsigne 95e0: 64 20 6c 6f 6e 67 29 20 65 66 29 3b 0a 0a 09 73 d long) ef);...s 95f0: 65 6e 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 end_ret = cackey 9600: 5f 73 65 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c _send_apdu(slot, 9610: 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f GSCIS_CLASS_ISO 9620: 37 38 31 36 2c 20 47 53 43 49 53 5f 49 4e 53 54 7816, GSCIS_INST 9630: 52 5f 53 45 4c 45 43 54 2c 20 30 78 30 32 2c 20 R_SELECT, 0x02, 9640: 30 78 30 43 2c 20 73 69 7a 65 6f 66 28 66 69 64 0x0C, sizeof(fid 9650: 5f 62 75 66 29 2c 20 66 69 64 5f 62 75 66 2c 20 _buf), fid_buf, 9660: 30 78 30 30 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 0x00, NULL, NULL 9670: 2c 20 4e 55 4c 4c 29 3b 0a 09 69 66 20 28 73 65 , NULL);..if (se 9680: 6e 64 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 nd_ret != CACKEY 9690: 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 _PCSC_S_OK) {... 96a0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 96b0: 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 6f NTF("Failed to o 96c0: 70 65 6e 20 66 69 6c 65 2c 20 72 65 74 75 72 6e pen file, return 96d0: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 96e0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b ;....return(CACK 96f0: 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 EY_PCSC_E_GENERI 9700: 43 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f C);..}...CACKEY_ 9710: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 DEBUG_PRINTF("Su 9720: 63 63 65 73 73 66 75 6c 6c 79 20 73 65 6c 65 63 ccessfully selec 9730: 74 65 64 20 66 69 6c 65 22 29 3b 0a 0a 09 72 65 ted file");...re 9740: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC 9750: 5f 53 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a _S_OK);.}../*. * 9760: 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 SYNPOSIS. * 9770: 20 76 6f 69 64 20 63 61 63 6b 65 79 5f 66 72 65 void cackey_fre 9780: 65 5f 74 6c 76 28 73 74 72 75 63 74 20 63 61 63 e_tlv(struct cac 9790: 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a key_tlv_entity * 97a0: 72 6f 6f 74 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 root);. *. * ARG 97b0: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 73 74 UMENTS. * st 97c0: 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f ruct cackey_tlv_ 97d0: 65 6e 74 69 74 79 20 2a 72 6f 6f 74 0a 20 2a 20 entity *root. * 97e0: 20 20 20 20 20 20 20 20 52 6f 6f 74 20 6f 66 20 Root of 97f0: 74 68 65 20 54 4c 56 20 6c 69 73 74 20 74 6f 20 the TLV list to 9800: 73 74 61 72 74 20 66 72 65 65 69 6e 67 0a 20 2a start freeing. * 9810: 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 . * RETURN VALUE 9820: 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a . * None. *. 9830: 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 * NOTES. * 9840: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 66 72 This function fr 9850: 65 65 73 20 74 68 65 20 54 4c 56 20 6c 69 6e 6b ees the TLV link 9860: 65 64 20 6c 69 73 74 65 64 20 72 65 74 75 72 6e ed listed return 9870: 65 64 20 66 72 6f 6d 0a 20 2a 20 20 20 20 20 22 ed from. * " 9880: 63 61 63 6b 65 79 5f 72 65 61 64 5f 74 6c 76 22 cackey_read_tlv" 9890: 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 76 . *. */.static v 98a0: 6f 69 64 20 63 61 63 6b 65 79 5f 66 72 65 65 5f oid cackey_free_ 98b0: 74 6c 76 28 73 74 72 75 63 74 20 63 61 63 6b 65 tlv(struct cacke 98c0: 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a 72 6f y_tlv_entity *ro 98d0: 6f 74 29 20 7b 0a 09 73 74 72 75 63 74 20 63 61 ot) {..struct ca 98e0: 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 ckey_tlv_entity 98f0: 2a 63 75 72 72 2c 20 2a 6e 65 78 74 3b 0a 0a 09 *curr, *next;... 9900: 69 66 20 28 72 6f 6f 74 20 3d 3d 20 4e 55 4c 4c if (root == NULL 9910: 29 20 7b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d ) {...return;..} 9920: 0a 0a 09 66 6f 72 20 28 63 75 72 72 20 3d 20 72 ...for (curr = r 9930: 6f 6f 74 3b 20 63 75 72 72 3b 20 63 75 72 72 20 oot; curr; curr 9940: 3d 20 6e 65 78 74 29 20 7b 0a 09 09 6e 65 78 74 = next) {...next 9950: 20 3d 20 63 75 72 72 2d 3e 5f 6e 65 78 74 3b 0a = curr->_next;. 9960: 0a 09 09 73 77 69 74 63 68 20 28 63 75 72 72 2d ...switch (curr- 9970: 3e 74 61 67 29 20 7b 0a 09 09 09 63 61 73 65 20 >tag) {....case 9980: 47 53 43 49 53 5f 54 41 47 5f 41 43 52 5f 54 41 GSCIS_TAG_ACR_TA 9990: 42 4c 45 3a 0a 09 09 09 63 61 73 65 20 47 53 43 BLE:....case GSC 99a0: 49 53 5f 54 41 47 5f 43 45 52 54 49 46 49 43 41 IS_TAG_CERTIFICA 99b0: 54 45 3a 0a 09 09 09 09 69 66 20 28 63 75 72 72 TE:.....if (curr 99c0: 2d 3e 76 61 6c 75 65 29 20 7b 0a 09 09 09 09 09 ->value) {...... 99d0: 66 72 65 65 28 63 75 72 72 2d 3e 76 61 6c 75 65 free(curr->value 99e0: 29 3b 0a 09 09 09 09 7d 0a 09 09 09 09 62 72 65 );.....}.....bre 99f0: 61 6b 3b 0a 09 09 09 63 61 73 65 20 47 53 43 49 ak;....case GSCI 9a00: 53 5f 54 41 47 5f 43 41 52 44 55 52 4c 3a 0a 09 S_TAG_CARDURL:.. 9a10: 09 09 09 69 66 20 28 63 75 72 72 2d 3e 76 61 6c ...if (curr->val 9a20: 75 65 5f 63 61 72 64 75 72 6c 29 20 7b 0a 09 09 ue_cardurl) {... 9a30: 09 09 09 66 72 65 65 28 63 75 72 72 2d 3e 76 61 ...free(curr->va 9a40: 6c 75 65 5f 63 61 72 64 75 72 6c 29 3b 0a 09 09 lue_cardurl);... 9a50: 09 09 7d 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 ..}.....break;.. 9a60: 09 7d 0a 0a 09 09 66 72 65 65 28 63 75 72 72 29 .}....free(curr) 9a70: 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d ;..}...return;.} 9a80: 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 ../*. * SYNPOSIS 9a90: 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 . * .... *. 9aa0: 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 * ARGUMENTS. * 9ab0: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 52 45 54 .... *. * RET 9ac0: 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 URN VALUE. * 9ad0: 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 .... *. * NOTES 9ae0: 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 . * .... *. 9af0: 2a 2f 0a 73 74 61 74 69 63 20 73 74 72 75 63 74 */.static struct 9b00: 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 cackey_tlv_enti 9b10: 74 79 20 2a 63 61 63 6b 65 79 5f 72 65 61 64 5f ty *cackey_read_ 9b20: 74 6c 76 28 73 74 72 75 63 74 20 63 61 63 6b 65 tlv(struct cacke 9b30: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a y_slot *slot) {. 9b40: 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 .struct cackey_t 9b50: 6c 76 5f 65 6e 74 69 74 79 20 2a 63 75 72 72 5f lv_entity *curr_ 9b60: 65 6e 74 69 74 79 2c 20 2a 72 6f 6f 74 20 3d 20 entity, *root = 9b70: 4e 55 4c 4c 2c 20 2a 6c 61 73 74 20 3d 20 4e 55 NULL, *last = NU 9b80: 4c 4c 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 LL;..unsigned ch 9b90: 61 72 20 74 6c 65 6e 5f 62 75 66 5b 32 5d 2c 20 ar tlen_buf[2], 9ba0: 74 76 61 6c 5f 62 75 66 5b 31 30 32 34 5d 2c 20 tval_buf[1024], 9bb0: 2a 74 76 61 6c 3b 0a 09 75 6e 73 69 67 6e 65 64 *tval;..unsigned 9bc0: 20 63 68 61 72 20 76 6c 65 6e 5f 62 75 66 5b 32 char vlen_buf[2 9bd0: 5d 2c 20 76 76 61 6c 5f 62 75 66 5b 38 31 39 32 ], vval_buf[8192 9be0: 5d 2c 20 2a 76 76 61 6c 3b 0a 09 75 6e 73 69 67 ], *vval;..unsig 9bf0: 6e 65 64 20 63 68 61 72 20 2a 74 6d 70 62 75 66 ned char *tmpbuf 9c00: 3b 0a 09 73 73 69 7a 65 5f 74 20 74 6c 65 6e 2c ;..ssize_t tlen, 9c10: 20 76 6c 65 6e 3b 0a 09 73 73 69 7a 65 5f 74 20 vlen;..ssize_t 9c20: 72 65 61 64 5f 72 65 74 3b 0a 09 73 69 7a 65 5f read_ret;..size_ 9c30: 74 20 6f 66 66 73 65 74 5f 74 20 3d 20 30 2c 20 t offset_t = 0, 9c40: 6f 66 66 73 65 74 5f 76 20 3d 20 30 3b 0a 09 75 offset_v = 0;..u 9c50: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 74 61 67 nsigned char tag 9c60: 3b 0a 09 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 ;..size_t length 9c70: 3b 0a 23 69 66 64 65 66 20 48 41 56 45 5f 4c 49 ;.#ifdef HAVE_LI 9c80: 42 5a 0a 09 75 4c 6f 6e 67 66 20 74 6d 70 62 75 BZ..uLongf tmpbu 9c90: 66 6c 65 6e 3b 0a 09 69 6e 74 20 75 6e 63 6f 6d flen;..int uncom 9ca0: 70 72 65 73 73 5f 72 65 74 3b 0a 23 65 6e 64 69 press_ret;.#endi 9cb0: 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 f...CACKEY_DEBUG 9cc0: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 9cd0: 22 29 3b 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d ");...read_ret = 9ce0: 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 cackey_read_buf 9cf0: 66 65 72 28 73 6c 6f 74 2c 20 74 6c 65 6e 5f 62 fer(slot, tlen_b 9d00: 75 66 2c 20 73 69 7a 65 6f 66 28 74 6c 65 6e 5f uf, sizeof(tlen_ 9d10: 62 75 66 29 2c 20 31 2c 20 6f 66 66 73 65 74 5f buf), 1, offset_ 9d20: 74 29 3b 0a 09 69 66 20 28 72 65 61 64 5f 72 65 t);..if (read_re 9d30: 74 20 21 3d 20 73 69 7a 65 6f 66 28 74 6c 65 6e t != sizeof(tlen 9d40: 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 43 4b 45 _buf)) {...CACKE 9d50: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 9d60: 52 65 61 64 20 66 61 69 6c 65 64 2c 20 72 65 74 Read failed, ret 9d70: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 9d80: 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e e");....return(N 9d90: 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 74 6c 65 6e 20 ULL);..}...tlen 9da0: 3d 20 28 74 6c 65 6e 5f 62 75 66 5b 31 5d 20 3c = (tlen_buf[1] < 9db0: 3c 20 38 29 20 7c 20 74 6c 65 6e 5f 62 75 66 5b < 8) | tlen_buf[ 9dc0: 30 5d 3b 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d 0];...read_ret = 9dd0: 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 cackey_read_buf 9de0: 66 65 72 28 73 6c 6f 74 2c 20 76 6c 65 6e 5f 62 fer(slot, vlen_b 9df0: 75 66 2c 20 73 69 7a 65 6f 66 28 76 6c 65 6e 5f uf, sizeof(vlen_ 9e00: 62 75 66 29 2c 20 32 2c 20 6f 66 66 73 65 74 5f buf), 2, offset_ 9e10: 76 29 3b 0a 09 69 66 20 28 72 65 61 64 5f 72 65 v);..if (read_re 9e20: 74 20 21 3d 20 73 69 7a 65 6f 66 28 76 6c 65 6e t != sizeof(vlen 9e30: 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 43 4b 45 _buf)) {...CACKE 9e40: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 9e50: 52 65 61 64 20 66 61 69 6c 65 64 2c 20 72 65 74 Read failed, ret 9e60: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 9e70: 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e e");....return(N 9e80: 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 76 6c 65 6e 20 ULL);..}...vlen 9e90: 3d 20 28 76 6c 65 6e 5f 62 75 66 5b 31 5d 20 3c = (vlen_buf[1] < 9ea0: 3c 20 38 29 20 7c 20 76 6c 65 6e 5f 62 75 66 5b < 8) | vlen_buf[ 9eb0: 30 5d 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 0];...CACKEY_DEB 9ec0: 55 47 5f 50 52 49 4e 54 46 28 22 54 61 67 20 4c UG_PRINTF("Tag L 9ed0: 65 6e 67 74 68 20 3d 20 25 69 2c 20 56 61 6c 75 ength = %i, Valu 9ee0: 65 20 4c 65 6e 67 74 68 20 3d 20 25 69 22 2c 20 e Length = %i", 9ef0: 74 6c 65 6e 2c 20 76 6c 65 6e 29 3b 0a 0a 09 6f tlen, vlen);...o 9f00: 66 66 73 65 74 5f 74 20 2b 3d 20 32 3b 0a 09 6f ffset_t += 2;..o 9f10: 66 66 73 65 74 5f 76 20 2b 3d 20 32 3b 0a 0a 09 ffset_v += 2;... 9f20: 69 66 20 28 74 6c 65 6e 20 3e 20 73 69 7a 65 6f if (tlen > sizeo 9f30: 66 28 74 76 61 6c 5f 62 75 66 29 29 20 7b 0a 09 f(tval_buf)) {.. 9f40: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 9f50: 49 4e 54 46 28 22 54 61 67 20 6c 65 6e 67 74 68 INTF("Tag length 9f60: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 2c 20 72 is too large, r 9f70: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail 9f80: 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ure");....return 9f90: 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 69 66 20 (NULL);..}...if 9fa0: 28 76 6c 65 6e 20 3e 20 73 69 7a 65 6f 66 28 76 (vlen > sizeof(v 9fb0: 76 61 6c 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 val_buf)) {...CA 9fc0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 9fd0: 46 28 22 56 61 6c 75 65 20 6c 65 6e 67 74 68 20 F("Value length 9fe0: 69 73 20 74 6f 6f 20 6c 61 72 67 65 2c 20 72 65 is too large, re 9ff0: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu a000: 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 re");....return( a010: 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 72 65 61 64 NULL);..}...read a020: 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 72 65 _ret = cackey_re a030: 61 64 5f 62 75 66 66 65 72 28 73 6c 6f 74 2c 20 ad_buffer(slot, a040: 74 76 61 6c 5f 62 75 66 2c 20 74 6c 65 6e 2c 20 tval_buf, tlen, a050: 31 2c 20 6f 66 66 73 65 74 5f 74 29 3b 0a 09 69 1, offset_t);..i a060: 66 20 28 72 65 61 64 5f 72 65 74 20 21 3d 20 74 f (read_ret != t a070: 6c 65 6e 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f len) {...CACKEY_ a080: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e DEBUG_PRINTF("Un a090: 61 62 6c 65 20 74 6f 20 72 65 61 64 20 65 6e 74 able to read ent a0a0: 69 72 65 20 54 2d 62 75 66 66 65 72 2c 20 72 65 ire T-buffer, re a0b0: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu a0c0: 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 re");....return( a0d0: 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 72 65 61 64 NULL);..}...read a0e0: 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 72 65 _ret = cackey_re a0f0: 61 64 5f 62 75 66 66 65 72 28 73 6c 6f 74 2c 20 ad_buffer(slot, a100: 76 76 61 6c 5f 62 75 66 2c 20 76 6c 65 6e 2c 20 vval_buf, vlen, a110: 32 2c 20 6f 66 66 73 65 74 5f 76 29 3b 0a 09 69 2, offset_v);..i a120: 66 20 28 72 65 61 64 5f 72 65 74 20 21 3d 20 76 f (read_ret != v a130: 6c 65 6e 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f len) {...CACKEY_ a140: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e DEBUG_PRINTF("Un a150: 61 62 6c 65 20 74 6f 20 72 65 61 64 20 65 6e 74 able to read ent a160: 69 72 65 20 56 2d 62 75 66 66 65 72 2c 20 72 65 ire V-buffer, re a170: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu a180: 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 re");....return( a190: 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 74 76 61 6c NULL);..}...tval a1a0: 20 3d 20 74 76 61 6c 5f 62 75 66 3b 0a 09 76 76 = tval_buf;..vv a1b0: 61 6c 20 3d 20 76 76 61 6c 5f 62 75 66 3b 0a 09 al = vval_buf;.. a1c0: 77 68 69 6c 65 20 28 74 6c 65 6e 20 3e 20 30 20 while (tlen > 0 a1d0: 26 26 20 76 6c 65 6e 20 3e 20 30 29 20 7b 0a 09 && vlen > 0) {.. a1e0: 09 74 61 67 20 3d 20 2a 74 76 61 6c 3b 0a 09 09 .tag = *tval;... a1f0: 74 76 61 6c 2b 2b 3b 0a 09 09 74 6c 65 6e 2d 2d tval++;...tlen-- a200: 3b 0a 0a 09 09 69 66 20 28 2a 74 76 61 6c 20 3d ;....if (*tval = a210: 3d 20 30 78 66 66 29 20 7b 0a 09 09 09 6c 65 6e = 0xff) {....len a220: 67 74 68 20 3d 20 28 74 76 61 6c 5b 32 5d 20 3c gth = (tval[2] < a230: 3c 20 38 29 20 7c 20 74 76 61 6c 5b 31 5d 3b 0a < 8) | tval[1];. a240: 09 09 09 74 76 61 6c 20 2b 3d 20 33 3b 0a 09 09 ...tval += 3;... a250: 09 74 6c 65 6e 20 2d 3d 20 33 3b 0a 09 09 7d 20 .tlen -= 3;...} a260: 65 6c 73 65 20 7b 0a 09 09 09 6c 65 6e 67 74 68 else {....length a270: 20 3d 20 2a 74 76 61 6c 3b 0a 09 09 09 74 76 61 = *tval;....tva a280: 6c 2b 2b 3b 0a 09 09 09 74 6c 65 6e 2d 2d 3b 0a l++;....tlen--;. a290: 09 09 7d 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 ..}....CACKEY_DE a2a0: 42 55 47 5f 50 52 49 4e 54 46 28 22 54 61 67 3a BUG_PRINTF("Tag: a2b0: 20 25 73 20 28 25 30 32 78 29 22 2c 20 43 41 43 %s (%02x)", CAC a2c0: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 54 KEY_DEBUG_FUNC_T a2d0: 41 47 5f 54 4f 5f 53 54 52 28 74 61 67 29 2c 20 AG_TO_STR(tag), a2e0: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 74 (unsigned int) t a2f0: 61 67 29 3b 0a 09 09 43 41 43 4b 45 59 5f 44 45 ag);...CACKEY_DE a300: 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 56 61 BUG_PRINTBUF("Va a310: 6c 75 65 3a 22 2c 20 76 76 61 6c 2c 20 6c 65 6e lue:", vval, len a320: 67 74 68 29 3b 0a 0a 09 09 63 75 72 72 5f 65 6e gth);....curr_en a330: 74 69 74 79 20 3d 20 4e 55 4c 4c 3b 0a 09 09 73 tity = NULL;...s a340: 77 69 74 63 68 20 28 74 61 67 29 20 7b 0a 09 09 witch (tag) {... a350: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ a360: 43 41 52 44 55 52 4c 3a 0a 09 09 09 09 63 75 72 CARDURL:.....cur a370: 72 5f 65 6e 74 69 74 79 20 3d 20 6d 61 6c 6c 6f r_entity = mallo a380: 63 28 73 69 7a 65 6f 66 28 2a 63 75 72 72 5f 65 c(sizeof(*curr_e a390: 6e 74 69 74 79 29 29 3b 0a 09 09 09 09 63 75 72 ntity));.....cur a3a0: 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 5f r_entity->value_ a3b0: 63 61 72 64 75 72 6c 20 3d 20 6d 61 6c 6c 6f 63 cardurl = malloc a3c0: 28 73 69 7a 65 6f 66 28 2a 63 75 72 72 5f 65 6e (sizeof(*curr_en a3d0: 74 69 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 tity->value_card a3e0: 75 72 6c 29 29 3b 0a 0a 09 09 09 09 6d 65 6d 63 url));......memc a3f0: 70 79 28 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e py(curr_entity-> a400: 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 72 value_cardurl->r a410: 69 64 2c 20 76 76 61 6c 2c 20 35 29 3b 0a 09 09 id, vval, 5);... a420: 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 ..curr_entity->v a430: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 alue_cardurl->ap a440: 70 74 79 70 65 20 3d 20 76 76 61 6c 5b 35 5d 3b ptype = vval[5]; a450: 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 .....curr_entity a460: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d ->value_cardurl- a470: 3e 6f 62 6a 65 63 74 69 64 20 3d 20 28 76 76 61 >objectid = (vva a480: 6c 5b 36 5d 20 3c 3c 20 38 29 20 7c 20 76 76 61 l[6] << 8) | vva a490: 6c 5b 37 5d 3b 0a 09 09 09 09 63 75 72 72 5f 65 l[7];.....curr_e a4a0: 6e 74 69 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 ntity->value_car a4b0: 64 75 72 6c 2d 3e 61 70 70 69 64 20 3d 20 28 76 durl->appid = (v a4c0: 76 61 6c 5b 38 5d 20 3c 3c 20 38 29 20 7c 20 76 val[8] << 8) | v a4d0: 76 61 6c 5b 39 5d 3b 0a 0a 09 09 09 09 63 75 72 val[9];......cur a4e0: 72 5f 65 6e 74 69 74 79 2d 3e 74 61 67 20 3d 20 r_entity->tag = a4f0: 74 61 67 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e tag;.....curr_en a500: 74 69 74 79 2d 3e 5f 6e 65 78 74 20 3d 20 4e 55 tity->_next = NU a510: 4c 4c 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a LL;......break;. a520: 09 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA a530: 47 5f 41 43 52 5f 54 41 42 4c 45 3a 0a 09 09 09 G_ACR_TABLE:.... a540: 09 63 75 72 72 5f 65 6e 74 69 74 79 20 3d 20 6d .curr_entity = m a550: 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 75 alloc(sizeof(*cu a560: 72 72 5f 65 6e 74 69 74 79 29 29 3b 0a 09 09 09 rr_entity));.... a570: 09 74 6d 70 62 75 66 20 3d 20 6d 61 6c 6c 6f 63 .tmpbuf = malloc a580: 28 6c 65 6e 67 74 68 29 3b 0a 0a 09 09 09 09 6d (length);......m a590: 65 6d 63 70 79 28 74 6d 70 62 75 66 2c 20 76 76 emcpy(tmpbuf, vv a5a0: 61 6c 2c 20 6c 65 6e 67 74 68 29 3b 0a 0a 09 09 al, length);.... a5b0: 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 74 ..curr_entity->t a5c0: 61 67 20 3d 20 74 61 67 3b 0a 09 09 09 09 63 75 ag = tag;.....cu a5d0: 72 72 5f 65 6e 74 69 74 79 2d 3e 6c 65 6e 67 74 rr_entity->lengt a5e0: 68 20 3d 20 6c 65 6e 67 74 68 3b 0a 09 09 09 09 h = length;..... a5f0: 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c curr_entity->val a600: 75 65 20 3d 20 74 6d 70 62 75 66 3b 0a 09 09 09 ue = tmpbuf;.... a610: 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 5f 6e .curr_entity->_n a620: 65 78 74 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 ext = NULL;..... a630: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 .break;....case a640: 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 49 46 GSCIS_TAG_CERTIF a650: 49 43 41 54 45 3a 0a 09 09 09 09 63 75 72 72 5f ICATE:.....curr_ a660: 65 6e 74 69 74 79 20 3d 20 6d 61 6c 6c 6f 63 28 entity = malloc( a670: 73 69 7a 65 6f 66 28 2a 63 75 72 72 5f 65 6e 74 sizeof(*curr_ent a680: 69 74 79 29 29 3b 0a 0a 09 09 09 09 74 6d 70 62 ity));......tmpb a690: 75 66 6c 65 6e 20 3d 20 6c 65 6e 67 74 68 20 2a uflen = length * a6a0: 20 32 3b 0a 09 09 09 09 74 6d 70 62 75 66 20 3d 2;.....tmpbuf = a6b0: 20 6d 61 6c 6c 6f 63 28 74 6d 70 62 75 66 6c 65 malloc(tmpbufle a6c0: 6e 29 3b 0a 0a 23 69 66 64 65 66 20 48 41 56 45 n);..#ifdef HAVE a6d0: 5f 4c 49 42 5a 0a 09 09 09 09 75 6e 63 6f 6d 70 _LIBZ.....uncomp a6e0: 72 65 73 73 5f 72 65 74 20 3d 20 75 6e 63 6f 6d ress_ret = uncom a6f0: 70 72 65 73 73 28 74 6d 70 62 75 66 2c 20 26 74 press(tmpbuf, &t a700: 6d 70 62 75 66 6c 65 6e 2c 20 76 76 61 6c 2c 20 mpbuflen, vval, a710: 6c 65 6e 67 74 68 29 3b 0a 09 09 09 09 69 66 20 length);.....if a720: 28 75 6e 63 6f 6d 70 72 65 73 73 5f 72 65 74 20 (uncompress_ret a730: 21 3d 20 5a 5f 4f 4b 29 20 7b 0a 09 09 09 09 09 != Z_OK) {...... a740: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI a750: 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 64 NTF("Failed to d a760: 65 63 6f 6d 70 72 65 73 73 2c 20 75 6e 63 6f 6d ecompress, uncom a770: 70 72 65 73 73 28 29 20 72 65 74 75 72 6e 65 64 press() returned a780: 20 25 69 20 2d 2d 20 72 65 73 6f 72 74 69 6e 67 %i -- resorting a790: 20 74 6f 20 64 69 72 65 63 74 20 63 6f 70 79 22 to direct copy" a7a0: 2c 20 75 6e 63 6f 6d 70 72 65 73 73 5f 72 65 74 , uncompress_ret a7b0: 29 3b 0a 0a 09 09 09 09 09 74 6d 70 62 75 66 6c );.......tmpbufl a7c0: 65 6e 20 3d 20 6c 65 6e 67 74 68 3b 0a 09 09 09 en = length;.... a7d0: 09 09 6d 65 6d 63 70 79 28 74 6d 70 62 75 66 2c ..memcpy(tmpbuf, a7e0: 20 76 76 61 6c 2c 20 6c 65 6e 67 74 68 29 3b 0a vval, length);. a7f0: 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 ....}......CACKE a800: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 Y_DEBUG_PRINTBUF a810: 28 22 44 65 63 6f 6d 70 72 65 73 73 65 64 20 74 ("Decompressed t a820: 6f 3a 22 2c 20 74 6d 70 62 75 66 2c 20 74 6d 70 o:", tmpbuf, tmp a830: 62 75 66 6c 65 6e 29 3b 0a 23 65 6c 73 65 0a 09 buflen);.#else.. a840: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ a850: 50 52 49 4e 54 46 28 22 4d 69 73 73 69 6e 67 20 PRINTF("Missing a860: 5a 4c 49 42 20 53 75 70 70 6f 72 74 2c 20 74 68 ZLIB Support, th a870: 69 73 20 63 65 72 74 69 66 69 63 61 74 65 20 69 is certificate i a880: 73 20 6c 69 6b 65 6c 79 20 75 73 65 6c 65 73 73 s likely useless a890: 2e 2e 2e 22 29 3b 0a 0a 09 09 09 09 74 6d 70 62 ...");......tmpb a8a0: 75 66 6c 65 6e 20 3d 20 6c 65 6e 67 74 68 3b 0a uflen = length;. a8b0: 09 09 09 09 6d 65 6d 63 70 79 28 74 6d 70 62 75 ....memcpy(tmpbu a8c0: 66 2c 20 76 76 61 6c 2c 20 6c 65 6e 67 74 68 29 f, vval, length) a8d0: 3b 0a 23 65 6e 64 69 66 0a 0a 09 09 09 09 63 75 ;.#endif......cu a8e0: 72 72 5f 65 6e 74 69 74 79 2d 3e 74 61 67 20 3d rr_entity->tag = a8f0: 20 74 61 67 3b 0a 09 09 09 09 63 75 72 72 5f 65 tag;.....curr_e a900: 6e 74 69 74 79 2d 3e 6c 65 6e 67 74 68 20 3d 20 ntity->length = a910: 74 6d 70 62 75 66 6c 65 6e 3b 0a 09 09 09 09 63 tmpbuflen;.....c a920: 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 urr_entity->valu a930: 65 20 3d 20 74 6d 70 62 75 66 3b 0a 09 09 09 09 e = tmpbuf;..... a940: 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 5f 6e 65 curr_entity->_ne a950: 78 74 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 09 xt = NULL;...... a960: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 47 break;....case G a970: 53 43 49 53 5f 54 41 47 5f 50 4b 43 53 31 35 3a SCIS_TAG_PKCS15: a980: 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 .....curr_entity a990: 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 = malloc(sizeof a9a0: 28 2a 63 75 72 72 5f 65 6e 74 69 74 79 29 29 3b (*curr_entity)); a9b0: 0a 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 ......curr_entit a9c0: 79 2d 3e 74 61 67 20 3d 20 74 61 67 3b 0a 09 09 y->tag = tag;... a9d0: 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 ..curr_entity->v a9e0: 61 6c 75 65 5f 62 79 74 65 20 3d 20 76 76 61 6c alue_byte = vval a9f0: 5b 30 5d 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e [0];.....curr_en aa00: 74 69 74 79 2d 3e 5f 6e 65 78 74 20 3d 20 4e 55 tity->_next = NU aa10: 4c 4c 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a LL;......break;. aa20: 09 09 7d 0a 0a 09 09 76 76 61 6c 20 2b 3d 20 6c ..}....vval += l aa30: 65 6e 67 74 68 3b 0a 09 09 76 6c 65 6e 20 2d 3d ength;...vlen -= aa40: 20 6c 65 6e 67 74 68 3b 0a 0a 09 09 69 66 20 28 length;....if ( aa50: 63 75 72 72 5f 65 6e 74 69 74 79 20 21 3d 20 4e curr_entity != N aa60: 55 4c 4c 29 20 7b 0a 09 09 09 69 66 20 28 72 6f ULL) {....if (ro aa70: 6f 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 ot == NULL) {... aa80: 09 09 72 6f 6f 74 20 3d 20 63 75 72 72 5f 65 6e ..root = curr_en aa90: 74 69 74 79 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 tity;....}.....i aaa0: 66 20 28 6c 61 73 74 20 21 3d 20 4e 55 4c 4c 29 f (last != NULL) aab0: 20 7b 0a 09 09 09 09 6c 61 73 74 2d 3e 5f 6e 65 {.....last->_ne aac0: 78 74 20 3d 20 63 75 72 72 5f 65 6e 74 69 74 79 xt = curr_entity aad0: 3b 0a 09 09 09 7d 0a 0a 09 09 09 6c 61 73 74 20 ;....}.....last aae0: 3d 20 63 75 72 72 5f 65 6e 74 69 74 79 3b 0a 09 = curr_entity;.. aaf0: 09 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 72 .}..}...return(r ab00: 6f 6f 74 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 oot);.}../*. * S ab10: 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 2e YNPOSIS. * . ab20: 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e ... *. * ARGUMEN ab30: 54 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a TS. * .... * ab40: 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 . * RETURN VALUE ab50: 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 . * .... *. ab60: 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 2e * NOTES. * . ab70: 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 ... *. */.static ab80: 20 76 6f 69 64 20 63 61 63 6b 65 79 5f 66 72 65 void cackey_fre ab90: 65 5f 63 65 72 74 73 28 73 74 72 75 63 74 20 63 e_certs(struct c aba0: 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 ackey_pcsc_ident abb0: 69 74 79 20 2a 73 74 61 72 74 2c 20 73 69 7a 65 ity *start, size abc0: 5f 74 20 63 6f 75 6e 74 2c 20 69 6e 74 20 66 72 _t count, int fr abd0: 65 65 5f 73 74 61 72 74 29 20 7b 0a 09 73 69 7a ee_start) {..siz abe0: 65 5f 74 20 69 64 78 3b 0a 0a 09 66 6f 72 20 28 e_t idx;...for ( abf0: 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 63 idx = 0; idx < c ac00: 6f 75 6e 74 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 ount; idx++) {.. ac10: 09 69 66 20 28 73 74 61 72 74 5b 69 64 78 5d 2e .if (start[idx]. ac20: 63 65 72 74 69 66 69 63 61 74 65 29 20 7b 0a 09 certificate) {.. ac30: 09 09 66 72 65 65 28 73 74 61 72 74 5b 69 64 78 ..free(start[idx ac40: 5d 2e 63 65 72 74 69 66 69 63 61 74 65 29 3b 0a ].certificate);. ac50: 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 66 72 65 ..}..}...if (fre ac60: 65 5f 73 74 61 72 74 29 20 7b 0a 09 09 66 72 65 e_start) {...fre ac70: 65 28 73 74 61 72 74 29 3b 0a 09 7d 0a 0a 09 72 e(start);..}...r ac80: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 eturn;.}../*. * ac90: 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 SYNPOSIS. * aca0: 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 .... *. * ARGUME acb0: 4e 54 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 NTS. * .... acc0: 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 *. * RETURN VALU acd0: 45 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a E. * .... *. ace0: 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 * NOTES. * acf0: 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 .... *. */.stati ad00: 63 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f c struct cackey_ ad10: 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 2a 63 pcsc_identity *c ad20: 61 63 6b 65 79 5f 72 65 61 64 5f 63 65 72 74 73 ackey_read_certs ad30: 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 (struct cackey_s ad40: 6c 6f 74 20 2a 73 6c 6f 74 2c 20 73 74 72 75 63 lot *slot, struc ad50: 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 t cackey_pcsc_id ad60: 65 6e 74 69 74 79 20 2a 63 65 72 74 73 2c 20 75 entity *certs, u ad70: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 63 6f nsigned long *co ad80: 75 6e 74 29 20 7b 0a 09 73 74 72 75 63 74 20 63 unt) {..struct c ad90: 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 ackey_pcsc_ident ada0: 69 74 79 20 2a 63 75 72 72 5f 69 64 3b 0a 09 73 ity *curr_id;..s adb0: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 truct cackey_tlv adc0: 5f 65 6e 74 69 74 79 20 2a 63 63 63 5f 74 6c 76 _entity *ccc_tlv add0: 2c 20 2a 63 63 63 5f 63 75 72 72 2c 20 2a 61 70 , *ccc_curr, *ap ade0: 70 5f 74 6c 76 2c 20 2a 61 70 70 5f 63 75 72 72 p_tlv, *app_curr adf0: 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 ;..unsigned char ae00: 20 63 63 63 5f 61 69 64 5b 5d 20 3d 20 7b 47 53 ccc_aid[] = {GS ae10: 43 49 53 5f 41 49 44 5f 43 43 43 7d 3b 0a 09 75 CIS_AID_CCC};..u ae20: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 75 72 nsigned char cur ae30: 72 5f 61 69 64 5b 37 5d 3b 0a 09 75 6e 73 69 67 r_aid[7];..unsig ae40: 6e 65 64 20 6c 6f 6e 67 20 6f 75 74 69 64 78 20 ned long outidx ae50: 3d 20 30 3b 0a 09 63 61 63 6b 65 79 5f 72 65 74 = 0;..cackey_ret ae60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 5f 72 65 74 transaction_ret ae70: 3b 0a 09 69 6e 74 20 63 65 72 74 73 5f 72 65 73 ;..int certs_res ae80: 69 7a 61 62 6c 65 3b 0a 09 69 6e 74 20 73 65 6e izable;..int sen ae90: 64 5f 72 65 74 2c 20 73 65 6c 65 63 74 5f 72 65 d_ret, select_re aea0: 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 t;...CACKEY_DEBU aeb0: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called aec0: 2e 22 29 3b 0a 0a 09 69 66 20 28 63 6f 75 6e 74 .");...if (count aed0: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 == NULL) {...CA aee0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT aef0: 46 28 22 63 6f 75 6e 74 20 69 73 20 4e 55 4c 4c F("count is NULL af00: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f af10: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 ailure");....ret af20: 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 urn(NULL);..}... af30: 69 66 20 28 63 65 72 74 73 20 21 3d 20 4e 55 4c if (certs != NUL af40: 4c 29 20 7b 0a 09 09 69 66 20 28 2a 63 6f 75 6e L) {...if (*coun af50: 74 20 3d 3d 20 30 29 20 7b 0a 09 09 09 43 41 43 t == 0) {....CAC af60: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF af70: 28 22 52 65 71 75 65 73 74 65 64 20 77 65 20 72 ("Requested we r af80: 65 74 75 72 6e 20 30 20 6f 62 6a 65 63 74 73 2c eturn 0 objects, af90: 20 73 68 6f 72 74 2d 63 69 72 63 75 69 74 22 29 short-circuit") afa0: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 63 65 72 ;.....return(cer afb0: 74 73 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 2f 2a ts);...}..}.../* afc0: 20 42 65 67 69 6e 20 61 20 53 6d 61 72 74 43 61 Begin a SmartCa afd0: 72 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a rd transaction * afe0: 2f 0a 09 74 72 61 6e 73 61 63 74 69 6f 6e 5f 72 /..transaction_r aff0: 65 74 20 3d 20 63 61 63 6b 65 79 5f 62 65 67 69 et = cackey_begi b000: 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c n_transaction(sl b010: 6f 74 29 3b 0a 09 69 66 20 28 74 72 61 6e 73 61 ot);..if (transa b020: 63 74 69 6f 6e 5f 72 65 74 20 21 3d 20 43 41 43 ction_ret != CAC b030: 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b KEY_PCSC_S_OK) { b040: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ b050: 50 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 62 PRINTF("Unable b b060: 65 67 69 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e egin transaction b070: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f b080: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 ailure");....ret b090: 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 urn(NULL);..}... b0a0: 69 66 20 28 63 65 72 74 73 20 3d 3d 20 4e 55 4c if (certs == NUL b0b0: 4c 29 20 7b 0a 09 09 63 65 72 74 73 20 3d 20 6d L) {...certs = m b0c0: 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 65 alloc(sizeof(*ce b0d0: 72 74 73 29 20 2a 20 35 29 3b 0a 09 09 2a 63 6f rts) * 5);...*co b0e0: 75 6e 74 20 3d 20 35 3b 0a 09 09 63 65 72 74 73 unt = 5;...certs b0f0: 5f 72 65 73 69 7a 61 62 6c 65 20 3d 20 31 3b 0a _resizable = 1;. b100: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 63 65 72 74 .} else {...cert b110: 73 5f 72 65 73 69 7a 61 62 6c 65 20 3d 20 30 3b s_resizable = 0; b120: 0a 09 7d 0a 0a 09 2f 2a 20 53 65 6c 65 63 74 20 ..}.../* Select b130: 74 68 65 20 43 43 43 20 41 70 70 6c 65 74 20 2a the CCC Applet * b140: 2f 0a 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 61 /..send_ret = ca b150: 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c ckey_select_appl b160: 65 74 28 73 6c 6f 74 2c 20 63 63 63 5f 61 69 64 et(slot, ccc_aid b170: 2c 20 73 69 7a 65 6f 66 28 63 63 63 5f 61 69 64 , sizeof(ccc_aid b180: 29 29 3b 0a 09 69 66 20 28 73 65 6e 64 5f 72 65 ));..if (send_re b190: 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 t != CACKEY_PCSC b1a0: 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 _S_OK) {...CACKE b1b0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" b1c0: 55 6e 61 62 6c 65 20 74 6f 20 73 65 6c 65 63 74 Unable to select b1d0: 20 43 43 43 20 41 70 70 6c 65 74 2c 20 72 65 74 CCC Applet, ret b1e0: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur b1f0: 65 22 29 3b 0a 0a 09 09 2f 2a 20 54 65 72 6d 69 e");..../* Termi b200: 6e 61 74 65 20 53 6d 61 72 74 43 61 72 64 20 54 nate SmartCard T b210: 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 ransaction */... b220: 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 cackey_end_trans b230: 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 action(slot);... b240: 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 .return(NULL);.. b250: 7d 0a 0a 09 2f 2a 20 52 65 61 64 20 61 6c 6c 20 }.../* Read all b260: 74 68 65 20 61 70 70 6c 65 74 73 20 66 72 6f 6d the applets from b270: 20 74 68 65 20 43 43 43 27 73 20 54 4c 56 20 2a the CCC's TLV * b280: 2f 0a 09 63 63 63 5f 74 6c 76 20 3d 20 63 61 63 /..ccc_tlv = cac b290: 6b 65 79 5f 72 65 61 64 5f 74 6c 76 28 73 6c 6f key_read_tlv(slo b2a0: 74 29 3b 0a 0a 09 2f 2a 20 4c 6f 6f 6b 20 66 6f t);.../* Look fo b2b0: 72 20 43 41 52 44 55 52 4c 73 20 74 68 61 74 20 r CARDURLs that b2c0: 63 6f 6f 72 65 73 70 6f 6e 64 20 74 6f 20 50 4b coorespond to PK b2d0: 49 20 61 70 70 6c 65 74 73 20 2a 2f 0a 09 66 6f I applets */..fo b2e0: 72 20 28 63 63 63 5f 63 75 72 72 20 3d 20 63 63 r (ccc_curr = cc b2f0: 63 5f 74 6c 76 3b 20 63 63 63 5f 63 75 72 72 3b c_tlv; ccc_curr; b300: 20 63 63 63 5f 63 75 72 72 20 3d 20 63 63 63 5f ccc_curr = ccc_ b310: 63 75 72 72 2d 3e 5f 6e 65 78 74 29 20 7b 0a 09 curr->_next) {.. b320: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR b330: 49 4e 54 46 28 22 46 6f 75 6e 64 20 74 61 67 3a INTF("Found tag: b340: 20 25 73 20 2e 2e 2e 20 22 2c 20 43 41 43 4b 45 %s ... ", CACKE b350: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 54 41 47 Y_DEBUG_FUNC_TAG b360: 5f 54 4f 5f 53 54 52 28 63 63 63 5f 63 75 72 72 _TO_STR(ccc_curr b370: 2d 3e 74 61 67 29 29 3b 0a 0a 09 09 69 66 20 28 ->tag));....if ( b380: 63 63 63 5f 63 75 72 72 2d 3e 74 61 67 20 21 3d ccc_curr->tag != b390: 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 55 GSCIS_TAG_CARDU b3a0: 52 4c 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f RL) {....CACKEY_ b3b0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 20 DEBUG_PRINTF(" b3c0: 2e 2e 2e 20 73 6b 69 70 70 69 6e 67 20 69 74 20 ... skipping it b3d0: 28 77 65 20 6f 6e 6c 79 20 63 61 72 65 20 61 62 (we only care ab b3e0: 6f 75 74 20 43 41 52 44 55 52 4c 73 29 22 29 3b out CARDURLs)"); b3f0: 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 .....continue;.. b400: 09 7d 0a 0a 09 09 69 66 20 28 28 63 63 63 5f 63 .}....if ((ccc_c b410: 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 urr->value_cardu b420: 72 6c 2d 3e 61 70 70 74 79 70 65 20 26 20 43 41 rl->apptype & CA b430: 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 CKEY_TLV_APP_PKI b440: 29 20 21 3d 20 43 41 43 4b 45 59 5f 54 4c 56 5f ) != CACKEY_TLV_ b450: 41 50 50 5f 50 4b 49 29 20 7b 0a 09 09 09 43 41 APP_PKI) {....CA b460: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT b470: 46 28 22 20 20 2e 2e 2e 20 73 6b 69 70 70 69 6e F(" ... skippin b480: 67 20 69 74 20 28 77 65 20 6f 6e 6c 79 20 63 61 g it (we only ca b490: 72 65 20 61 62 6f 75 74 20 50 4b 49 20 61 70 70 re about PKI app b4a0: 6c 65 74 73 2c 20 74 68 69 73 20 61 70 70 6c 65 lets, this apple b4b0: 74 20 73 75 70 70 6f 72 74 73 3a 20 25 73 2f 25 t supports: %s/% b4c0: 30 32 78 29 22 2c 20 43 41 43 4b 45 59 5f 44 45 02x)", CACKEY_DE b4d0: 42 55 47 5f 46 55 4e 43 5f 41 50 50 54 59 50 45 BUG_FUNC_APPTYPE b4e0: 5f 54 4f 5f 53 54 52 28 63 63 63 5f 63 75 72 72 _TO_STR(ccc_curr b4f0: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d ->value_cardurl- b500: 3e 61 70 70 74 79 70 65 29 2c 20 28 75 6e 73 69 >apptype), (unsi b510: 67 6e 65 64 20 69 6e 74 29 20 63 63 63 5f 63 75 gned int) ccc_cu b520: 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 rr->value_cardur b530: 6c 2d 3e 61 70 70 74 79 70 65 29 3b 0a 0a 09 09 l->apptype);.... b540: 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a .continue;...}.. b550: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P b560: 52 49 4e 54 42 55 46 28 22 52 49 44 3a 22 2c 20 RINTBUF("RID:", b570: 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f ccc_curr->value_ b580: 63 61 72 64 75 72 6c 2d 3e 72 69 64 2c 20 73 69 cardurl->rid, si b590: 7a 65 6f 66 28 63 63 63 5f 63 75 72 72 2d 3e 76 zeof(ccc_curr->v b5a0: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 72 69 alue_cardurl->ri b5b0: 64 29 29 3b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d));...CACKEY_DE b5c0: 42 55 47 5f 50 52 49 4e 54 46 28 22 41 70 70 49 BUG_PRINTF("AppI b5d0: 44 20 3d 20 25 73 2f 25 30 34 6c 78 22 2c 20 43 D = %s/%04lx", C b5e0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC b5f0: 5f 4f 42 4a 49 44 5f 54 4f 5f 53 54 52 28 63 63 _OBJID_TO_STR(cc b600: 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 c_curr->value_ca b610: 72 64 75 72 6c 2d 3e 61 70 70 69 64 29 2c 20 28 rdurl->appid), ( b620: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 unsigned long) c b630: 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 cc_curr->value_c b640: 61 72 64 75 72 6c 2d 3e 61 70 70 69 64 29 3b 0a ardurl->appid);. b650: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P b660: 52 49 4e 54 46 28 22 4f 62 6a 65 63 74 49 44 20 RINTF("ObjectID b670: 3d 20 25 73 2f 25 30 34 6c 78 22 2c 20 43 41 43 = %s/%04lx", CAC b680: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 4f KEY_DEBUG_FUNC_O b690: 42 4a 49 44 5f 54 4f 5f 53 54 52 28 63 63 63 5f BJID_TO_STR(ccc_ b6a0: 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 curr->value_card b6b0: 75 72 6c 2d 3e 6f 62 6a 65 63 74 69 64 29 2c 20 url->objectid), b6c0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) b6d0: 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f ccc_curr->value_ b6e0: 63 61 72 64 75 72 6c 2d 3e 6f 62 6a 65 63 74 69 cardurl->objecti b6f0: 64 29 3b 0a 0a 09 09 6d 65 6d 63 70 79 28 63 75 d);....memcpy(cu b700: 72 72 5f 61 69 64 2c 20 63 63 63 5f 63 75 72 72 rr_aid, ccc_curr b710: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d ->value_cardurl- b720: 3e 72 69 64 2c 20 73 69 7a 65 6f 66 28 63 63 63 >rid, sizeof(ccc b730: 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 _curr->value_car b740: 64 75 72 6c 2d 3e 72 69 64 29 29 3b 0a 09 09 63 durl->rid));...c b750: 75 72 72 5f 61 69 64 5b 73 69 7a 65 6f 66 28 63 urr_aid[sizeof(c b760: 75 72 72 5f 61 69 64 29 20 2d 20 32 5d 20 3d 20 urr_aid) - 2] = b770: 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 (ccc_curr->value b780: 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 69 64 20 _cardurl->appid b790: 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 09 09 >> 8) & 0xff;... b7a0: 63 75 72 72 5f 61 69 64 5b 73 69 7a 65 6f 66 28 curr_aid[sizeof( b7b0: 63 75 72 72 5f 61 69 64 29 20 2d 20 31 5d 20 3d curr_aid) - 1] = b7c0: 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 ccc_curr->value b7d0: 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 69 64 20 _cardurl->appid b7e0: 26 20 30 78 66 66 3b 0a 0a 09 09 2f 2a 20 53 65 & 0xff;..../* Se b7f0: 6c 65 63 74 20 66 6f 75 6e 64 20 61 70 70 6c 65 lect found apple b800: 74 20 2e 2e 2e 20 2a 2f 0a 09 09 73 65 6c 65 63 t ... */...selec b810: 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 t_ret = cackey_s b820: 65 6c 65 63 74 5f 61 70 70 6c 65 74 28 73 6c 6f elect_applet(slo b830: 74 2c 20 63 75 72 72 5f 61 69 64 2c 20 73 69 7a t, curr_aid, siz b840: 65 6f 66 28 63 75 72 72 5f 61 69 64 29 29 3b 0a eof(curr_aid));. b850: 09 09 69 66 20 28 73 65 6c 65 63 74 5f 72 65 74 ..if (select_ret b860: 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f != CACKEY_PCSC_ b870: 53 5f 4f 4b 29 20 7b 0a 09 09 09 43 41 43 4b 45 S_OK) {....CACKE b880: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" b890: 46 61 69 6c 65 64 20 74 6f 20 73 65 6c 65 63 74 Failed to select b8a0: 20 61 70 70 6c 65 74 2c 20 73 6b 69 70 70 69 6e applet, skippin b8b0: 67 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 g processing of b8c0: 74 68 69 73 20 6f 62 6a 65 63 74 22 29 3b 0a 0a this object");.. b8d0: 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d ...continue;...} b8e0: 0a 0a 09 09 2f 2a 20 2e 2e 2e 20 61 6e 64 20 6f ..../* ... and o b8f0: 62 6a 65 63 74 20 28 66 69 6c 65 29 20 2a 2f 0a bject (file) */. b900: 09 09 73 65 6c 65 63 74 5f 72 65 74 20 3d 20 63 ..select_ret = c b910: 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f 66 69 6c ackey_select_fil b920: 65 28 73 6c 6f 74 2c 20 63 63 63 5f 63 75 72 72 e(slot, ccc_curr b930: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d ->value_cardurl- b940: 3e 6f 62 6a 65 63 74 69 64 29 3b 0a 09 09 69 66 >objectid);...if b950: 20 28 73 65 6c 65 63 74 5f 72 65 74 20 21 3d 20 (select_ret != b960: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK b970: 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE b980: 42 55 47 5f 50 52 49 4e 54 46 28 22 46 61 69 6c BUG_PRINTF("Fail b990: 65 64 20 74 6f 20 73 65 6c 65 63 74 20 66 69 6c ed to select fil b9a0: 65 2c 20 73 6b 69 70 70 69 6e 67 20 70 72 6f 63 e, skipping proc b9b0: 65 73 73 69 6e 67 20 6f 66 20 74 68 69 73 20 6f essing of this o b9c0: 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 63 6f 6e bject");.....con b9d0: 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 2f 2a tinue;...}..../* b9e0: 20 50 72 6f 63 65 73 73 20 74 68 69 73 20 66 69 Process this fi b9f0: 6c 65 27 73 20 54 4c 56 20 6c 6f 6f 6b 69 6e 67 le's TLV looking ba00: 20 66 6f 72 20 63 65 72 74 69 66 69 63 61 74 65 for certificate ba10: 73 20 2a 2f 0a 09 09 61 70 70 5f 74 6c 76 20 3d s */...app_tlv = ba20: 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 74 6c 76 cackey_read_tlv ba30: 28 73 6c 6f 74 29 3b 0a 0a 09 09 66 6f 72 20 28 (slot);....for ( ba40: 61 70 70 5f 63 75 72 72 20 3d 20 61 70 70 5f 74 app_curr = app_t ba50: 6c 76 3b 20 61 70 70 5f 63 75 72 72 3b 20 61 70 lv; app_curr; ap ba60: 70 5f 63 75 72 72 20 3d 20 61 70 70 5f 63 75 72 p_curr = app_cur ba70: 72 2d 3e 5f 6e 65 78 74 29 20 7b 0a 09 09 09 43 r->_next) {....C ba80: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN ba90: 54 46 28 22 46 6f 75 6e 64 20 74 61 67 3a 20 25 TF("Found tag: % baa0: 73 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 s", CACKEY_DEBUG bab0: 5f 46 55 4e 43 5f 54 41 47 5f 54 4f 5f 53 54 52 _FUNC_TAG_TO_STR bac0: 28 61 70 70 5f 63 75 72 72 2d 3e 74 61 67 29 29 (app_curr->tag)) bad0: 3b 0a 09 09 09 69 66 20 28 61 70 70 5f 63 75 72 ;....if (app_cur bae0: 72 2d 3e 74 61 67 20 21 3d 20 47 53 43 49 53 5f r->tag != GSCIS_ baf0: 54 41 47 5f 43 45 52 54 49 46 49 43 41 54 45 29 TAG_CERTIFICATE) bb00: 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {.....CACKEY_DE bb10: 42 55 47 5f 50 52 49 4e 54 46 28 22 20 20 2e 2e BUG_PRINTF(" .. bb20: 2e 20 73 6b 69 70 70 69 6e 67 20 69 74 20 28 77 . skipping it (w bb30: 65 20 6f 6e 6c 79 20 63 61 72 65 20 61 62 6f 75 e only care abou bb40: 74 20 43 45 52 54 49 46 49 43 41 54 45 73 29 22 t CERTIFICATEs)" bb50: 29 3b 0a 0a 09 09 09 09 63 6f 6e 74 69 6e 75 65 );......continue bb60: 3b 0a 09 09 09 7d 0a 0a 09 09 09 63 75 72 72 5f ;....}.....curr_ bb70: 69 64 20 3d 20 26 63 65 72 74 73 5b 6f 75 74 69 id = &certs[outi bb80: 64 78 5d 3b 0a 09 09 09 6f 75 74 69 64 78 2b 2b dx];....outidx++ bb90: 3b 0a 0a 09 09 09 6d 65 6d 63 70 79 28 63 75 72 ;.....memcpy(cur bba0: 72 5f 69 64 2d 3e 61 70 70 6c 65 74 2c 20 63 75 r_id->applet, cu bbb0: 72 72 5f 61 69 64 2c 20 73 69 7a 65 6f 66 28 63 rr_aid, sizeof(c bbc0: 75 72 72 5f 69 64 2d 3e 61 70 70 6c 65 74 29 29 urr_id->applet)) bbd0: 3b 0a 09 09 09 63 75 72 72 5f 69 64 2d 3e 66 69 ;....curr_id->fi bbe0: 6c 65 20 3d 20 63 63 63 5f 63 75 72 72 2d 3e 76 le = ccc_curr->v bbf0: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 alue_cardurl->ob bc00: 6a 65 63 74 69 64 3b 0a 09 09 09 63 75 72 72 5f jectid;....curr_ bc10: 69 64 2d 3e 6c 61 62 65 6c 20 3d 20 4e 55 4c 4c id->label = NULL bc20: 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ;.....CACKEY_DEB bc30: 55 47 5f 50 52 49 4e 54 46 28 22 46 69 6c 6c 69 UG_PRINTF("Filli bc40: 6e 67 20 63 75 72 72 5f 69 64 2d 3e 61 70 70 6c ng curr_id->appl bc50: 65 74 20 28 25 70 29 20 77 69 74 68 20 25 6c 75 et (%p) with %lu bc60: 20 62 79 74 65 73 3a 22 2c 20 63 75 72 72 5f 69 bytes:", curr_i bc70: 64 2d 3e 61 70 70 6c 65 74 2c 20 28 75 6e 73 69 d->applet, (unsi bc80: 67 6e 65 64 20 6c 6f 6e 67 29 20 73 69 7a 65 6f gned long) sizeo bc90: 66 28 63 75 72 72 5f 69 64 2d 3e 61 70 70 6c 65 f(curr_id->apple bca0: 74 29 29 3b 0a 09 09 09 43 41 43 4b 45 59 5f 44 t));....CACKEY_D bcb0: 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 56 EBUG_PRINTBUF("V bcc0: 41 4c 3a 22 2c 20 63 75 72 72 5f 69 64 2d 3e 61 AL:", curr_id->a bcd0: 70 70 6c 65 74 2c 20 73 69 7a 65 6f 66 28 63 75 pplet, sizeof(cu bce0: 72 72 5f 69 64 2d 3e 61 70 70 6c 65 74 29 29 3b rr_id->applet)); bcf0: 0a 0a 09 09 09 63 75 72 72 5f 69 64 2d 3e 63 65 .....curr_id->ce bd00: 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3d 20 rtificate_len = bd10: 61 70 70 5f 63 75 72 72 2d 3e 6c 65 6e 67 74 68 app_curr->length bd20: 3b 0a 0a 09 09 09 63 75 72 72 5f 69 64 2d 3e 63 ;.....curr_id->c bd30: 65 72 74 69 66 69 63 61 74 65 20 3d 20 6d 61 6c ertificate = mal bd40: 6c 6f 63 28 63 75 72 72 5f 69 64 2d 3e 63 65 72 loc(curr_id->cer bd50: 74 69 66 69 63 61 74 65 5f 6c 65 6e 29 3b 0a 09 tificate_len);.. bd60: 09 09 6d 65 6d 63 70 79 28 63 75 72 72 5f 69 64 ..memcpy(curr_id bd70: 2d 3e 63 65 72 74 69 66 69 63 61 74 65 2c 20 61 ->certificate, a bd80: 70 70 5f 63 75 72 72 2d 3e 76 61 6c 75 65 2c 20 pp_curr->value, bd90: 63 75 72 72 5f 69 64 2d 3e 63 65 72 74 69 66 69 curr_id->certifi bda0: 63 61 74 65 5f 6c 65 6e 29 3b 0a 0a 09 09 09 69 cate_len);.....i bdb0: 66 20 28 6f 75 74 69 64 78 20 3e 3d 20 2a 63 6f f (outidx >= *co bdc0: 75 6e 74 29 20 7b 0a 09 09 09 09 69 66 20 28 63 unt) {.....if (c bdd0: 65 72 74 73 5f 72 65 73 69 7a 61 62 6c 65 29 20 erts_resizable) bde0: 7b 0a 09 09 09 09 09 2a 63 6f 75 6e 74 20 2a 3d {......*count *= bdf0: 20 32 3b 0a 09 09 09 09 09 63 65 72 74 73 20 3d 2;......certs = be00: 20 72 65 61 6c 6c 6f 63 28 63 65 72 74 73 2c 20 realloc(certs, be10: 73 69 7a 65 6f 66 28 2a 63 65 72 74 73 29 20 2a sizeof(*certs) * be20: 20 28 2a 63 6f 75 6e 74 29 29 3b 0a 09 09 09 09 (*count));..... be30: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 62 72 } else {......br be40: 65 61 6b 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 0a eak;.....}....}. be50: 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 66 72 ..}....cackey_fr be60: 65 65 5f 74 6c 76 28 61 70 70 5f 74 6c 76 29 3b ee_tlv(app_tlv); be70: 0a 0a 09 09 69 66 20 28 6f 75 74 69 64 78 20 3e ....if (outidx > be80: 3d 20 2a 63 6f 75 6e 74 29 20 7b 0a 09 09 09 62 = *count) {....b be90: 72 65 61 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 63 reak;...}..}...c bea0: 61 63 6b 65 79 5f 66 72 65 65 5f 74 6c 76 28 63 ackey_free_tlv(c beb0: 63 63 5f 74 6c 76 29 3b 0a 0a 09 2a 63 6f 75 6e cc_tlv);...*coun bec0: 74 20 3d 20 6f 75 74 69 64 78 3b 0a 0a 09 69 66 t = outidx;...if bed0: 20 28 63 65 72 74 73 5f 72 65 73 69 7a 61 62 6c (certs_resizabl bee0: 65 29 20 7b 0a 09 09 63 65 72 74 73 20 3d 20 72 e) {...certs = r bef0: 65 61 6c 6c 6f 63 28 63 65 72 74 73 2c 20 73 69 ealloc(certs, si bf00: 7a 65 6f 66 28 2a 63 65 72 74 73 29 20 2a 20 28 zeof(*certs) * ( bf10: 2a 63 6f 75 6e 74 29 29 3b 0a 09 7d 0a 0a 09 2f *count));..}.../ bf20: 2a 20 54 65 72 6d 69 6e 61 74 65 20 53 6d 61 72 * Terminate Smar bf30: 74 43 61 72 64 20 54 72 61 6e 73 61 63 74 69 6f tCard Transactio bf40: 6e 20 2a 2f 0a 09 63 61 63 6b 65 79 5f 65 6e 64 n */..cackey_end bf50: 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f _transaction(slo bf60: 74 29 3b 0a 0a 09 72 65 74 75 72 6e 28 63 65 72 t);...return(cer bf70: 74 73 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 ts);.}../*. * SY bf80: 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 2e 2e NPOSIS. * .. bf90: 2e 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 .. *. * ARGUMENT bfa0: 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a S. * .... *. bfb0: 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a * RETURN VALUE. bfc0: 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a * .... *. * bfd0: 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 2e 2e NOTES. * .. bfe0: 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 .. *. */.static bff0: 73 73 69 7a 65 5f 74 20 63 61 63 6b 65 79 5f 73 ssize_t cackey_s c000: 69 67 6e 64 65 63 72 79 70 74 28 73 74 72 75 63 igndecrypt(struc c010: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 t cackey_slot *s c020: 6c 6f 74 2c 20 73 74 72 75 63 74 20 63 61 63 6b lot, struct cack c030: 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 69 64 65 ey_identity *ide c040: 6e 74 69 74 79 2c 20 75 6e 73 69 67 6e 65 64 20 ntity, unsigned c050: 63 68 61 72 20 2a 62 75 66 2c 20 73 69 7a 65 5f char *buf, size_ c060: 74 20 62 75 66 6c 65 6e 2c 20 75 6e 73 69 67 6e t buflen, unsign c070: 65 64 20 63 68 61 72 20 2a 6f 75 74 62 75 66 2c ed char *outbuf, c080: 20 73 69 7a 65 5f 74 20 6f 75 74 62 75 66 6c 65 size_t outbufle c090: 6e 29 20 7b 0a 09 63 61 63 6b 65 79 5f 72 65 74 n) {..cackey_ret c0a0: 20 73 65 6e 64 5f 72 65 74 3b 0a 09 69 6e 74 20 send_ret;..int c0b0: 6c 65 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 le;...CACKEY_DEB c0c0: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle c0d0: 64 2e 22 29 3b 0a 0a 09 69 66 20 28 62 75 66 6c d.");...if (bufl c0e0: 65 6e 20 3e 20 32 35 35 29 20 7b 0a 09 09 43 41 en > 255) {...CA c0f0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT c100: 46 28 22 45 72 72 6f 72 2e 20 20 62 75 66 6c 65 F("Error. bufle c110: 6e 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 n is greater tha c120: 6e 20 32 35 35 20 28 62 75 66 6c 65 6e 20 3d 20 n 255 (buflen = c130: 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 %lu)", (unsigned c140: 20 6c 6f 6e 67 29 20 62 75 66 6c 65 6e 29 3b 0a long) buflen);. c150: 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. c160: 7d 0a 0a 09 69 66 20 28 6f 75 74 62 75 66 6c 65 }...if (outbufle c170: 6e 20 3e 20 32 35 33 29 20 7b 0a 09 09 6c 65 20 n > 253) {...le c180: 3d 20 32 35 33 3b 0a 09 7d 20 65 6c 73 65 20 7b = 253;..} else { c190: 0a 09 09 6c 65 20 3d 20 6f 75 74 62 75 66 6c 65 ...le = outbufle c1a0: 6e 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6c 6f 74 n;..}...if (slot c1b0: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 == NULL) {...CA c1c0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT c1d0: 46 28 22 45 72 72 6f 72 2e 20 20 73 6c 6f 74 20 F("Error. slot c1e0: 69 73 20 4e 55 4c 4c 22 29 3b 0a 0a 09 09 72 65 is NULL");....re c1f0: 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 69 turn(-1);..}...i c200: 66 20 28 62 75 66 20 3d 3d 20 4e 55 4c 4c 29 20 f (buf == NULL) c210: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG c220: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. c230: 20 62 75 66 20 69 73 20 4e 55 4c 4c 22 29 3b 0a buf is NULL");. c240: 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. c250: 7d 0a 0a 09 69 66 20 28 6f 75 74 62 75 66 20 3d }...if (outbuf = c260: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK c270: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( c280: 22 45 72 72 6f 72 2e 20 20 6f 75 74 62 75 66 20 "Error. outbuf c290: 69 73 20 4e 55 4c 4c 22 29 3b 0a 0a 09 09 72 65 is NULL");....re c2a0: 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 2f turn(-1);..}.../ c2b0: 2a 20 42 65 67 69 6e 20 74 72 61 6e 73 61 63 74 * Begin transact c2c0: 69 6f 6e 20 2a 2f 0a 09 63 61 63 6b 65 79 5f 62 ion */..cackey_b c2d0: 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e egin_transaction c2e0: 28 73 6c 6f 74 29 3b 0a 0a 09 2f 2a 20 53 65 6c (slot);.../* Sel c2f0: 65 63 74 20 63 6f 72 72 65 63 74 20 61 70 70 6c ect correct appl c300: 65 74 20 2a 2f 0a 09 43 41 43 4b 45 59 5f 44 45 et */..CACKEY_DE c310: 42 55 47 5f 50 52 49 4e 54 46 28 22 53 65 6c 65 BUG_PRINTF("Sele c320: 63 74 69 6e 67 20 61 70 70 6c 65 74 20 66 6f 75 cting applet fou c330: 6e 64 20 61 74 20 25 70 20 2e 2e 2e 22 2c 20 69 nd at %p ...", i c340: 64 65 6e 74 69 74 79 2d 3e 69 64 65 6e 74 69 74 dentity->identit c350: 79 2d 3e 61 70 70 6c 65 74 29 3b 0a 09 63 61 63 y->applet);..cac c360: 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c 65 key_select_apple c370: 74 28 73 6c 6f 74 2c 20 69 64 65 6e 74 69 74 79 t(slot, identity c380: 2d 3e 69 64 65 6e 74 69 74 79 2d 3e 61 70 70 6c ->identity->appl c390: 65 74 2c 20 73 69 7a 65 6f 66 28 69 64 65 6e 74 et, sizeof(ident c3a0: 69 74 79 2d 3e 69 64 65 6e 74 69 74 79 2d 3e 61 ity->identity->a c3b0: 70 70 6c 65 74 29 29 3b 0a 0a 09 2f 2a 20 53 65 pplet));.../* Se c3c0: 6c 65 63 74 20 63 6f 72 72 65 63 74 20 66 69 6c lect correct fil c3d0: 65 20 2a 2f 0a 09 63 61 63 6b 65 79 5f 73 65 6c e */..cackey_sel c3e0: 65 63 74 5f 66 69 6c 65 28 73 6c 6f 74 2c 20 69 ect_file(slot, i c3f0: 64 65 6e 74 69 74 79 2d 3e 69 64 65 6e 74 69 74 dentity->identit c400: 79 2d 3e 66 69 6c 65 29 3b 0a 0a 09 73 65 6e 64 y->file);...send c410: 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 _ret = cackey_se c420: 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 nd_apdu(slot, GS c430: 43 49 53 5f 43 4c 41 53 53 5f 47 4c 4f 42 41 4c CIS_CLASS_GLOBAL c440: 5f 50 4c 41 54 46 4f 52 4d 2c 20 47 53 43 49 53 _PLATFORM, GSCIS c450: 5f 49 4e 53 54 52 5f 53 49 47 4e 44 45 43 52 59 _INSTR_SIGNDECRY c460: 50 54 2c 20 30 78 30 30 2c 20 30 78 30 30 2c 20 PT, 0x00, 0x00, c470: 62 75 66 6c 65 6e 2c 20 62 75 66 2c 20 6c 65 2c buflen, buf, le, c480: 20 4e 55 4c 4c 2c 20 6f 75 74 62 75 66 2c 20 26 NULL, outbuf, & c490: 6f 75 74 62 75 66 6c 65 6e 29 3b 0a 09 69 66 20 outbuflen);..if c4a0: 28 73 65 6e 64 5f 72 65 74 20 21 3d 20 43 41 43 (send_ret != CAC c4b0: 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b KEY_PCSC_S_OK) { c4c0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ c4d0: 50 52 49 4e 54 46 28 22 41 44 50 55 20 53 65 6e PRINTF("ADPU Sen c4e0: 64 69 6e 67 20 46 61 69 6c 65 64 20 2d 2d 20 72 ding Failed -- r c4f0: 65 74 75 72 6e 69 6e 67 20 69 6e 20 65 72 72 6f eturning in erro c500: 72 2e 22 29 3b 0a 0a 09 09 2f 2a 20 45 6e 64 20 r.");..../* End c510: 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 transaction */.. c520: 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e .cackey_end_tran c530: 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a saction(slot);.. c540: 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d ..return(-1);..} c550: 0a 0a 09 2f 2a 20 45 6e 64 20 74 72 61 6e 73 61 .../* End transa c560: 63 74 69 6f 6e 20 2a 2f 0a 09 63 61 63 6b 65 79 ction */..cackey c570: 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e _end_transaction c580: 28 73 6c 6f 74 29 3b 0a 0a 23 69 66 64 65 66 20 (slot);..#ifdef c590: 43 41 43 4b 45 59 5f 50 41 52 41 4e 4f 49 44 0a CACKEY_PARANOID. c5a0: 23 20 20 69 66 64 65 66 20 5f 50 4f 53 49 58 5f # ifdef _POSIX_ c5b0: 53 53 49 5a 45 5f 4d 41 58 0a 09 69 66 20 28 6f SSIZE_MAX..if (o c5c0: 75 74 62 75 66 6c 65 6e 20 3e 20 5f 50 4f 53 49 utbuflen > _POSI c5d0: 58 5f 53 53 49 5a 45 5f 4d 41 58 29 20 7b 0a 09 X_SSIZE_MAX) {.. c5e0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR c5f0: 49 4e 54 46 28 22 4f 75 74 62 75 66 6c 65 6e 20 INTF("Outbuflen c600: 65 78 63 65 65 64 73 20 6d 61 78 69 6d 75 6d 20 exceeds maximum c610: 76 61 6c 75 65 2c 20 72 65 74 75 72 6e 69 6e 67 value, returning c620: 20 69 6e 20 66 61 69 6c 75 72 65 2e 20 28 6d 61 in failure. (ma c630: 78 20 3d 20 25 6c 69 2c 20 6f 75 74 62 75 66 6c x = %li, outbufl c640: 65 6e 20 3d 20 25 6c 75 29 22 2c 20 28 6c 6f 6e en = %lu)", (lon c650: 67 29 20 5f 50 4f 53 49 58 5f 53 53 49 5a 45 5f g) _POSIX_SSIZE_ c660: 4d 41 58 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c MAX, (unsigned l c670: 6f 6e 67 29 20 6f 75 74 62 75 66 6c 65 6e 29 3b ong) outbuflen); c680: 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. c690: 09 7d 0a 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 .}.# endif.#end c6a0: 69 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 if...CACKEY_DEBU c6b0: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return c6c0: 69 6e 67 20 69 6e 20 73 75 63 63 65 73 73 2e 22 ing in success." c6d0: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 6f 75 74 62 );...return(outb c6e0: 75 66 6c 65 6e 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a uflen);.}../*. * c6f0: 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 SYNPOSIS. * c700: 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 55 4d .... *. * ARGUM c710: 45 4e 54 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a ENTS. * .... c720: 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c *. * RETURN VAL c730: 55 45 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a UE. * .... * c740: 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 . * NOTES. * c750: 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 .... *. */.stat c760: 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 ic cackey_ret ca c770: 63 6b 65 79 5f 6c 6f 67 69 6e 28 73 74 72 75 63 ckey_login(struc c780: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 t cackey_slot *s c790: 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 lot, unsigned ch c7a0: 61 72 20 2a 70 69 6e 2c 20 75 6e 73 69 67 6e 65 ar *pin, unsigne c7b0: 64 20 6c 6f 6e 67 20 70 69 6e 5f 6c 65 6e 2c 20 d long pin_len, c7c0: 69 6e 74 20 2a 74 72 69 65 73 5f 72 65 6d 61 69 int *tries_remai c7d0: 6e 69 6e 67 5f 70 29 20 7b 0a 09 75 6e 73 69 67 ning_p) {..unsig c7e0: 6e 65 64 20 63 68 61 72 20 63 61 63 5f 70 69 6e ned char cac_pin c7f0: 5b 38 5d 20 3d 20 7b 30 78 46 46 2c 20 30 78 46 [8] = {0xFF, 0xF c800: 46 2c 20 30 78 46 46 2c 20 30 78 46 46 2c 20 30 F, 0xFF, 0xFF, 0 c810: 78 46 46 2c 20 30 78 46 46 2c 20 30 78 46 46 2c xFF, 0xFF, 0xFF, c820: 20 30 78 46 46 7d 3b 0a 09 75 69 6e 74 31 36 5f 0xFF};..uint16_ c830: 74 20 72 65 73 70 6f 6e 73 65 5f 63 6f 64 65 3b t response_code; c840: 0a 09 69 6e 74 20 74 72 69 65 73 5f 72 65 6d 61 ..int tries_rema c850: 69 6e 69 6e 67 3b 0a 09 69 6e 74 20 73 65 6e 64 ining;..int send c860: 5f 72 65 74 3b 0a 0a 09 2f 2a 20 49 6e 64 69 63 _ret;.../* Indic c870: 61 74 65 20 74 68 61 74 20 77 65 20 64 6f 20 6e ate that we do n c880: 6f 74 20 6b 6e 6f 77 20 61 62 6f 75 74 20 68 6f ot know about ho c890: 77 20 6d 61 6e 79 20 74 72 69 65 73 20 61 72 65 w many tries are c8a0: 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 09 69 remaining */..i c8b0: 66 20 28 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 f (tries_remaini c8c0: 6e 67 5f 70 29 20 7b 0a 09 09 2a 74 72 69 65 73 ng_p) {...*tries c8d0: 5f 72 65 6d 61 69 6e 69 6e 67 5f 70 20 3d 20 2d _remaining_p = - c8e0: 31 3b 0a 09 7d 0a 0a 09 2f 2a 20 41 70 70 61 72 1;..}.../* Appar c8f0: 65 6e 74 6c 79 2c 20 43 41 43 20 50 49 4e 73 20 ently, CAC PINs c900: 61 72 65 20 2a 45 58 41 43 54 4c 59 2a 20 38 20 are *EXACTLY* 8 c910: 62 79 74 65 73 20 6c 6f 6e 67 20 2d 2d 20 70 61 bytes long -- pa c920: 64 20 77 69 74 68 20 30 78 46 46 20 69 66 20 74 d with 0xFF if t c930: 6f 6f 20 73 68 6f 72 74 20 2a 2f 0a 09 69 66 20 oo short */..if c940: 28 70 69 6e 5f 6c 65 6e 20 3e 3d 20 38 29 20 7b (pin_len >= 8) { c950: 0a 09 09 6d 65 6d 63 70 79 28 63 61 63 5f 70 69 ...memcpy(cac_pi c960: 6e 2c 20 70 69 6e 2c 20 38 29 3b 0a 09 7d 20 65 n, pin, 8);..} e c970: 6c 73 65 20 7b 0a 09 09 6d 65 6d 63 70 79 28 63 lse {...memcpy(c c980: 61 63 5f 70 69 6e 2c 20 70 69 6e 2c 20 70 69 6e ac_pin, pin, pin c990: 5f 6c 65 6e 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 49 _len);..}.../* I c9a0: 73 73 75 65 20 50 49 4e 20 56 65 72 69 66 79 20 ssue PIN Verify c9b0: 2a 2f 0a 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 */..send_ret = c c9c0: 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 ackey_send_apdu( c9d0: 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 4c 41 53 slot, GSCIS_CLAS c9e0: 53 5f 49 53 4f 37 38 31 36 2c 20 47 53 43 49 53 S_ISO7816, GSCIS c9f0: 5f 49 4e 53 54 52 5f 56 45 52 49 46 59 2c 20 30 _INSTR_VERIFY, 0 ca00: 78 30 30 2c 20 30 78 30 30 2c 20 73 69 7a 65 6f x00, 0x00, sizeo ca10: 66 28 63 61 63 5f 70 69 6e 29 2c 20 63 61 63 5f f(cac_pin), cac_ ca20: 70 69 6e 2c 20 30 78 30 30 2c 20 26 72 65 73 70 pin, 0x00, &resp ca30: 6f 6e 73 65 5f 63 6f 64 65 2c 20 4e 55 4c 4c 2c onse_code, NULL, ca40: 20 4e 55 4c 4c 29 3b 0a 09 69 66 20 28 73 65 6e NULL);..if (sen ca50: 64 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f d_ret != CACKEY_ ca60: 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 69 PCSC_S_OK) {...i ca70: 66 20 28 28 72 65 73 70 6f 6e 73 65 5f 63 6f 64 f ((response_cod ca80: 65 20 26 20 30 78 36 33 43 30 29 20 3d 3d 20 30 e & 0x63C0) == 0 ca90: 78 36 33 43 30 29 20 7b 0a 09 09 09 74 72 69 65 x63C0) {....trie caa0: 73 5f 72 65 6d 61 69 6e 69 6e 67 20 3d 20 28 72 s_remaining = (r cab0: 65 73 70 6f 6e 73 65 5f 63 6f 64 65 20 26 20 30 esponse_code & 0 cac0: 78 46 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f xF);.....CACKEY_ cad0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 50 49 DEBUG_PRINTF("PI cae0: 4e 20 56 65 72 69 66 69 63 61 74 69 6f 6e 20 66 N Verification f caf0: 61 69 6c 65 64 2c 20 25 69 20 74 72 69 65 73 20 ailed, %i tries cb00: 72 65 6d 61 69 6e 69 6e 67 22 2c 20 74 72 69 65 remaining", trie cb10: 73 5f 72 65 6d 61 69 6e 69 6e 67 29 3b 0a 0a 09 s_remaining);... cb20: 09 09 69 66 20 28 74 72 69 65 73 5f 72 65 6d 61 ..if (tries_rema cb30: 69 6e 69 6e 67 5f 70 29 20 7b 0a 09 09 09 09 2a ining_p) {.....* cb40: 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 5f tries_remaining_ cb50: 70 20 3d 20 74 72 69 65 73 5f 72 65 6d 61 69 6e p = tries_remain cb60: 69 6e 67 3b 0a 09 09 09 7d 0a 0a 09 09 09 72 65 ing;....}.....re cb70: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC cb80: 5f 45 5f 42 41 44 50 49 4e 29 3b 0a 09 09 7d 0a _E_BADPIN);...}. cb90: 0a 09 09 69 66 20 28 72 65 73 70 6f 6e 73 65 5f ...if (response_ cba0: 63 6f 64 65 20 3d 3d 20 30 78 36 39 38 33 29 20 code == 0x6983) cbb0: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU cbc0: 47 5f 50 52 49 4e 54 46 28 22 50 49 4e 20 56 65 G_PRINTF("PIN Ve cbd0: 72 69 66 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 rification faile cbe0: 64 2c 20 64 65 76 69 63 65 20 69 73 20 6c 6f 63 d, device is loc cbf0: 6b 65 64 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 ked");.....retur cc00: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f n(CACKEY_PCSC_E_ cc10: 4c 4f 43 4b 45 44 29 3b 0a 09 09 7d 0a 0a 09 09 LOCKED);...}.... cc20: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC cc30: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. cc40: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG cc50: 5f 50 52 49 4e 54 46 28 22 50 49 4e 20 56 65 72 _PRINTF("PIN Ver cc60: 69 66 69 63 61 74 69 6f 6e 20 73 75 63 63 65 65 ification succee cc70: 64 65 64 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 ded");...return( cc80: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK cc90: 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 );.}../*. * SYNP cca0: 4f 53 49 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a OSIS. * .... ccb0: 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a *. * ARGUMENTS. ccc0: 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a * .... *. * ccd0: 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a RETURN VALUE. * cce0: 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 4e .... *. * N ccf0: 4f 54 45 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a OTES. * .... cd00: 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63 61 *. */.static ca cd10: 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f ckey_ret cackey_ cd20: 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 28 73 74 token_present(st cd30: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ruct cackey_slot cd40: 20 2a 73 6c 6f 74 29 20 7b 0a 09 75 6e 73 69 67 *slot) {..unsig cd50: 6e 65 64 20 63 68 61 72 20 63 63 63 5f 61 69 64 ned char ccc_aid cd60: 5b 5d 20 3d 20 7b 47 53 43 49 53 5f 41 49 44 5f [] = {GSCIS_AID_ cd70: 43 43 43 7d 3b 0a 09 69 6e 74 20 73 65 6e 64 5f CCC};..int send_ cd80: 72 65 74 3b 0a 0a 09 2f 2a 20 53 65 6c 65 63 74 ret;.../* Select cd90: 20 74 68 65 20 43 43 43 20 41 70 70 6c 65 74 20 the CCC Applet cda0: 2a 2f 0a 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 */..send_ret = c cdb0: 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 70 ackey_select_app cdc0: 6c 65 74 28 73 6c 6f 74 2c 20 63 63 63 5f 61 69 let(slot, ccc_ai cdd0: 64 2c 20 73 69 7a 65 6f 66 28 63 63 63 5f 61 69 d, sizeof(ccc_ai cde0: 64 29 29 3b 0a 09 69 66 20 28 73 65 6e 64 5f 72 d));..if (send_r cdf0: 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 et != CACKEY_PCS ce00: 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 72 65 74 75 C_S_OK) {...retu ce10: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 rn(CACKEY_PCSC_S ce20: 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 29 3b 0a 09 _TOKENABSENT);.. ce30: 7d 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b 45 }...return(CACKE ce40: 59 5f 50 43 53 43 5f 53 5f 54 4f 4b 45 4e 50 52 Y_PCSC_S_TOKENPR ce50: 45 53 45 4e 54 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a ESENT);.}../*. * ce60: 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 SYNPOSIS. * ce70: 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 55 4d .... *. * ARGUM ce80: 45 4e 54 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a ENTS. * .... ce90: 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c *. * RETURN VAL cea0: 55 45 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a UE. * .... * ceb0: 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 . * NOTES. * cec0: 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 .... *. */.stat ced0: 69 63 20 73 73 69 7a 65 5f 74 20 63 61 63 6b 65 ic ssize_t cacke cee0: 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 5f y_pcsc_identity_ cef0: 74 6f 5f 6c 61 62 65 6c 28 73 74 72 75 63 74 20 to_label(struct cf00: 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e cackey_pcsc_iden cf10: 74 69 74 79 20 2a 69 64 65 6e 74 69 74 79 2c 20 tity *identity, cf20: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 6c unsigned char *l cf30: 61 62 65 6c 5f 62 75 66 2c 20 75 6e 73 69 67 6e abel_buf, unsign cf40: 65 64 20 6c 6f 6e 67 20 6c 61 62 65 6c 5f 62 75 ed long label_bu cf50: 66 5f 6c 65 6e 29 20 7b 0a 09 75 6e 73 69 67 6e f_len) {..unsign cf60: 65 64 20 6c 6f 6e 67 20 63 65 72 74 69 66 69 63 ed long certific cf70: 61 74 65 5f 6c 65 6e 3b 0a 09 63 68 61 72 20 2a ate_len;..char * cf80: 6c 61 62 65 6c 5f 61 73 6e 31 3b 0a 09 76 6f 69 label_asn1;..voi cf90: 64 20 2a 63 65 72 74 69 66 69 63 61 74 65 3b 0a d *certificate;. cfa0: 09 69 6e 74 20 78 35 30 39 5f 72 65 61 64 5f 72 .int x509_read_r cfb0: 65 74 3b 0a 0a 09 63 65 72 74 69 66 69 63 61 74 et;...certificat cfc0: 65 20 3d 20 69 64 65 6e 74 69 74 79 2d 3e 63 65 e = identity->ce cfd0: 72 74 69 66 69 63 61 74 65 3b 0a 09 63 65 72 74 rtificate;..cert cfe0: 69 66 69 63 61 74 65 5f 6c 65 6e 20 3d 20 69 64 ificate_len = id cff0: 65 6e 74 69 74 79 2d 3e 63 65 72 74 69 66 69 63 entity->certific d000: 61 74 65 5f 6c 65 6e 3b 0a 0a 09 69 66 20 28 63 ate_len;...if (c d010: 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3c ertificate_len < d020: 20 30 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 2d 0) {...return(- d030: 31 29 3b 0a 09 7d 0a 0a 09 78 35 30 39 5f 72 65 1);..}...x509_re d040: 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f 74 6f ad_ret = x509_to d050: 5f 73 75 62 6a 65 63 74 28 63 65 72 74 69 66 69 _subject(certifi d060: 63 61 74 65 2c 20 63 65 72 74 69 66 69 63 61 74 cate, certificat d070: 65 5f 6c 65 6e 2c 20 28 76 6f 69 64 20 2a 2a 29 e_len, (void **) d080: 20 26 6c 61 62 65 6c 5f 61 73 6e 31 29 3b 0a 09 &label_asn1);.. d090: 69 66 20 28 78 35 30 39 5f 72 65 61 64 5f 72 65 if (x509_read_re d0a0: 74 20 3c 20 30 29 20 7b 0a 09 09 72 65 74 75 72 t < 0) {...retur d0b0: 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 78 35 30 39 n(-1);..}...x509 d0c0: 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 30 39 _read_ret = x509 d0d0: 5f 64 6e 5f 74 6f 5f 73 74 72 69 6e 67 28 6c 61 _dn_to_string(la d0e0: 62 65 6c 5f 61 73 6e 31 2c 20 78 35 30 39 5f 72 bel_asn1, x509_r d0f0: 65 61 64 5f 72 65 74 2c 20 28 63 68 61 72 20 2a ead_ret, (char * d100: 29 20 6c 61 62 65 6c 5f 62 75 66 2c 20 6c 61 62 ) label_buf, lab d110: 65 6c 5f 62 75 66 5f 6c 65 6e 2c 20 22 43 4e 22 el_buf_len, "CN" d120: 29 3b 0a 09 69 66 20 28 78 35 30 39 5f 72 65 61 );..if (x509_rea d130: 64 5f 72 65 74 20 3c 3d 20 30 29 20 7b 0a 09 09 d_ret <= 0) {... d140: 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 x509_read_ret = d150: 78 35 30 39 5f 64 6e 5f 74 6f 5f 73 74 72 69 6e x509_dn_to_strin d160: 67 28 6c 61 62 65 6c 5f 61 73 6e 31 2c 20 78 35 g(label_asn1, x5 d170: 30 39 5f 72 65 61 64 5f 72 65 74 2c 20 28 63 68 09_read_ret, (ch d180: 61 72 20 2a 29 20 6c 61 62 65 6c 5f 62 75 66 2c ar *) label_buf, d190: 20 6c 61 62 65 6c 5f 62 75 66 5f 6c 65 6e 2c 20 label_buf_len, d1a0: 4e 55 4c 4c 29 3b 0a 0a 09 09 69 66 20 28 78 35 NULL);....if (x5 d1b0: 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 3d 20 30 09_read_ret <= 0 d1c0: 29 20 7b 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 ) {....return(-1 d1d0: 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 23 69 66 64 65 );...}..}..#ifde d1e0: 66 20 43 41 43 4b 45 59 5f 50 41 52 41 4e 4f 49 f CACKEY_PARANOI d1f0: 44 0a 23 20 20 69 66 64 65 66 20 5f 50 4f 53 49 D.# ifdef _POSI d200: 58 5f 53 53 49 5a 45 5f 4d 41 58 0a 09 69 66 20 X_SSIZE_MAX..if d210: 28 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3e (x509_read_ret > d220: 20 5f 50 4f 53 49 58 5f 53 53 49 5a 45 5f 4d 41 _POSIX_SSIZE_MA d230: 58 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 X) {...CACKEY_DE d240: 42 55 47 5f 50 52 49 4e 54 46 28 22 78 35 30 39 BUG_PRINTF("x509 d250: 5f 72 65 61 64 5f 72 65 74 20 65 78 63 65 65 64 _read_ret exceed d260: 73 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c s maximum value, d270: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 returning in fa d280: 69 6c 75 72 65 2e 20 28 6d 61 78 20 3d 20 25 6c ilure. (max = %l d290: 69 2c 20 78 35 30 39 5f 72 65 61 64 5f 72 65 74 i, x509_read_ret d2a0: 20 3d 20 25 6c 75 29 22 2c 20 28 6c 6f 6e 67 29 = %lu)", (long) d2b0: 20 5f 50 4f 53 49 58 5f 53 53 49 5a 45 5f 4d 41 _POSIX_SSIZE_MA d2c0: 58 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e X, (unsigned lon d2d0: 67 29 20 78 35 30 39 5f 72 65 61 64 5f 72 65 74 g) x509_read_ret d2e0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 );....return(-1) d2f0: 3b 0a 09 7d 0a 23 20 20 65 6e 64 69 66 0a 23 65 ;..}.# endif.#e d300: 6e 64 69 66 0a 0a 09 72 65 74 75 72 6e 28 78 35 ndif...return(x5 d310: 30 39 5f 72 65 61 64 5f 72 65 74 29 3b 0a 7d 0a 09_read_ret);.}. d320: 0a 2f 2a 20 52 65 74 75 72 6e 73 20 30 20 6f 6e ./* Returns 0 on d330: 20 73 75 63 63 65 73 73 20 2a 2f 0a 73 74 61 74 success */.stat d340: 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 6d 75 ic int cackey_mu d350: 74 65 78 5f 63 72 65 61 74 65 28 76 6f 69 64 20 tex_create(void d360: 2a 2a 6d 75 74 65 78 29 20 7b 0a 09 70 74 68 72 **mutex) {..pthr d370: 65 61 64 5f 6d 75 74 65 78 5f 74 20 2a 70 74 68 ead_mutex_t *pth d380: 72 65 61 64 5f 6d 75 74 65 78 3b 0a 09 69 6e 74 read_mutex;..int d390: 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c 3b pthread_retval; d3a0: 0a 09 43 4b 5f 52 56 20 63 75 73 74 6f 6d 5f 72 ..CK_RV custom_r d3b0: 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f etval;...CACKEY_ d3c0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca d3d0: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 28 lled.");...if (( d3e0: 63 61 63 6b 65 79 5f 61 72 67 73 2e 66 6c 61 67 cackey_args.flag d3f0: 73 20 26 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 s & CKF_OS_LOCKI d400: 4e 47 5f 4f 4b 29 20 3d 3d 20 43 4b 46 5f 4f 53 NG_OK) == CKF_OS d410: 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 7b 0a 09 _LOCKING_OK) {.. d420: 09 70 74 68 72 65 61 64 5f 6d 75 74 65 78 20 3d .pthread_mutex = d430: 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a malloc(sizeof(* d440: 70 74 68 72 65 61 64 5f 6d 75 74 65 78 29 29 3b pthread_mutex)); d450: 0a 09 09 69 66 20 28 21 70 74 68 72 65 61 64 5f ...if (!pthread_ d460: 6d 75 74 65 78 29 20 7b 0a 09 09 09 43 41 43 4b mutex) {....CACK d470: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( d480: 22 46 61 69 6c 65 64 20 74 6f 20 61 6c 6c 6f 63 "Failed to alloc d490: 61 74 65 20 6d 65 6d 6f 72 79 2e 22 29 3b 0a 0a ate memory.");.. d4a0: 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. d4b0: 09 7d 0a 0a 09 09 70 74 68 72 65 61 64 5f 72 65 .}....pthread_re d4c0: 74 76 61 6c 20 3d 20 70 74 68 72 65 61 64 5f 6d tval = pthread_m d4d0: 75 74 65 78 5f 69 6e 69 74 28 70 74 68 72 65 61 utex_init(pthrea d4e0: 64 5f 6d 75 74 65 78 2c 20 4e 55 4c 4c 29 3b 0a d_mutex, NULL);. d4f0: 09 09 69 66 20 28 70 74 68 72 65 61 64 5f 72 65 ..if (pthread_re d500: 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 09 tval != 0) {.... d510: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI d520: 4e 54 46 28 22 70 74 68 72 65 61 64 5f 6d 75 74 NTF("pthread_mut d530: 65 78 5f 69 6e 69 74 28 29 20 72 65 74 75 72 6e ex_init() return d540: 65 64 20 65 72 72 6f 72 20 28 25 69 29 2e 22 2c ed error (%i).", d550: 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c 29 pthread_retval) d560: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 ;.....return(-1) d570: 3b 0a 09 09 7d 0a 0a 09 09 2a 6d 75 74 65 78 20 ;...}....*mutex d580: 3d 20 70 74 68 72 65 61 64 5f 6d 75 74 65 78 3b = pthread_mutex; d590: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 ..} else {...if d5a0: 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 43 72 65 (cackey_args.Cre d5b0: 61 74 65 4d 75 74 65 78 29 20 7b 0a 09 09 09 63 ateMutex) {....c d5c0: 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 3d 20 63 ustom_retval = c d5d0: 61 63 6b 65 79 5f 61 72 67 73 2e 43 72 65 61 74 ackey_args.Creat d5e0: 65 4d 75 74 65 78 28 6d 75 74 65 78 29 3b 0a 0a eMutex(mutex);.. d5f0: 09 09 09 69 66 20 28 63 75 73 74 6f 6d 5f 72 65 ...if (custom_re d600: 74 76 61 6c 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 tval != CKR_OK) d610: 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {.....CACKEY_DEB d620: 55 47 5f 50 52 49 4e 54 46 28 22 63 61 63 6b 65 UG_PRINTF("cacke d630: 79 5f 61 72 67 73 2e 43 72 65 61 74 65 4d 75 74 y_args.CreateMut d640: 65 78 28 29 20 72 65 74 75 72 6e 65 64 20 65 72 ex() returned er d650: 72 6f 72 20 28 25 6c 69 29 2e 22 2c 20 28 6c 6f ror (%li).", (lo d660: 6e 67 29 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 ng) custom_retva d670: 6c 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 l);......return( d680: 2d 31 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d -1);....}...}..} d690: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ d6a0: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin d6b0: 67 20 73 75 63 65 73 73 66 75 6c 6c 79 20 28 30 g sucessfully (0 d6c0: 29 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 30 29 )");...return(0) d6d0: 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 73 20 ;.}../* Returns d6e0: 30 20 6f 6e 20 73 75 63 63 65 73 73 20 2a 2f 0a 0 on success */. d6f0: 73 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 static int cacke d700: 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 76 6f 69 y_mutex_lock(voi d710: 64 20 2a 6d 75 74 65 78 29 20 7b 0a 09 70 74 68 d *mutex) {..pth d720: 72 65 61 64 5f 6d 75 74 65 78 5f 74 20 2a 70 74 read_mutex_t *pt d730: 68 72 65 61 64 5f 6d 75 74 65 78 3b 0a 09 69 6e hread_mutex;..in d740: 74 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c t pthread_retval d750: 3b 0a 09 43 4b 5f 52 56 20 63 75 73 74 6f 6d 5f ;..CK_RV custom_ d760: 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 retval;...CACKEY d770: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C d780: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( d790: 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 66 6c 61 (cackey_args.fla d7a0: 67 73 20 26 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b gs & CKF_OS_LOCK d7b0: 49 4e 47 5f 4f 4b 29 20 3d 3d 20 43 4b 46 5f 4f ING_OK) == CKF_O d7c0: 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 7b 0a S_LOCKING_OK) {. d7d0: 09 09 70 74 68 72 65 61 64 5f 6d 75 74 65 78 20 ..pthread_mutex d7e0: 3d 20 6d 75 74 65 78 3b 0a 0a 09 09 70 74 68 72 = mutex;....pthr d7f0: 65 61 64 5f 72 65 74 76 61 6c 20 3d 20 70 74 68 ead_retval = pth d800: 72 65 61 64 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 read_mutex_lock( d810: 70 74 68 72 65 61 64 5f 6d 75 74 65 78 29 3b 0a pthread_mutex);. d820: 09 09 69 66 20 28 70 74 68 72 65 61 64 5f 72 65 ..if (pthread_re d830: 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 09 tval != 0) {.... d840: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI d850: 4e 54 46 28 22 70 74 68 72 65 61 64 5f 6d 75 74 NTF("pthread_mut d860: 65 78 5f 6c 6f 63 6b 28 29 20 72 65 74 75 72 6e ex_lock() return d870: 65 64 20 65 72 72 6f 72 20 28 25 69 29 2e 22 2c ed error (%i).", d880: 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c 29 pthread_retval) d890: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 ;.....return(-1) d8a0: 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a ;...}..} else {. d8b0: 09 09 69 66 20 28 63 61 63 6b 65 79 5f 61 72 67 ..if (cackey_arg d8c0: 73 2e 4c 6f 63 6b 4d 75 74 65 78 29 20 7b 0a 09 s.LockMutex) {.. d8d0: 09 09 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 ..custom_retval d8e0: 3d 20 63 61 63 6b 65 79 5f 61 72 67 73 2e 4c 6f = cackey_args.Lo d8f0: 63 6b 4d 75 74 65 78 28 6d 75 74 65 78 29 3b 0a ckMutex(mutex);. d900: 0a 09 09 09 69 66 20 28 63 75 73 74 6f 6d 5f 72 ....if (custom_r d910: 65 74 76 61 6c 20 21 3d 20 43 4b 52 5f 4f 4b 29 etval != CKR_OK) d920: 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {.....CACKEY_DE d930: 42 55 47 5f 50 52 49 4e 54 46 28 22 63 61 63 6b BUG_PRINTF("cack d940: 65 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 ey_args.LockMute d950: 78 28 29 20 72 65 74 75 72 6e 65 64 20 65 72 72 x() returned err d960: 6f 72 20 28 25 6c 69 29 2e 22 2c 20 28 6c 6f 6e or (%li).", (lon d970: 67 29 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c g) custom_retval d980: 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 2d );......return(- d990: 31 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 1);....}...}..}. d9a0: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P d9b0: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning d9c0: 20 73 75 63 65 73 73 66 75 6c 6c 79 20 28 30 29 sucessfully (0) d9d0: 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 30 29 3b ");...return(0); d9e0: 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 73 20 30 .}../* Returns 0 d9f0: 20 6f 6e 20 73 75 63 63 65 73 73 20 2a 2f 0a 73 on success */.s da00: 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 tatic int cackey da10: 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 76 6f _mutex_unlock(vo da20: 69 64 20 2a 6d 75 74 65 78 29 20 7b 0a 09 70 74 id *mutex) {..pt da30: 68 72 65 61 64 5f 6d 75 74 65 78 5f 74 20 2a 70 hread_mutex_t *p da40: 74 68 72 65 61 64 5f 6d 75 74 65 78 3b 0a 09 69 thread_mutex;..i da50: 6e 74 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 nt pthread_retva da60: 6c 3b 0a 09 43 4b 5f 52 56 20 63 75 73 74 6f 6d l;..CK_RV custom da70: 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 _retval;...CACKE da80: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" da90: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if daa0: 28 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 66 6c ((cackey_args.fl dab0: 61 67 73 20 26 20 43 4b 46 5f 4f 53 5f 4c 4f 43 ags & CKF_OS_LOC dac0: 4b 49 4e 47 5f 4f 4b 29 20 3d 3d 20 43 4b 46 5f KING_OK) == CKF_ dad0: 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 7b OS_LOCKING_OK) { dae0: 0a 09 09 70 74 68 72 65 61 64 5f 6d 75 74 65 78 ...pthread_mutex daf0: 20 3d 20 6d 75 74 65 78 3b 0a 0a 09 09 70 74 68 = mutex;....pth db00: 72 65 61 64 5f 72 65 74 76 61 6c 20 3d 20 70 74 read_retval = pt db10: 68 72 65 61 64 5f 6d 75 74 65 78 5f 75 6e 6c 6f hread_mutex_unlo db20: 63 6b 28 70 74 68 72 65 61 64 5f 6d 75 74 65 78 ck(pthread_mutex db30: 29 3b 0a 09 09 69 66 20 28 70 74 68 72 65 61 64 );...if (pthread db40: 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. db50: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ db60: 50 52 49 4e 54 46 28 22 70 74 68 72 65 61 64 5f PRINTF("pthread_ db70: 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 29 20 72 mutex_unlock() r db80: 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 28 25 eturned error (% db90: 69 29 2e 22 2c 20 70 74 68 72 65 61 64 5f 72 65 i).", pthread_re dba0: 74 76 61 6c 29 3b 0a 0a 09 09 09 72 65 74 75 72 tval);.....retur dbb0: 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09 7d 20 65 6c n(-1);...}..} el dbc0: 73 65 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 se {...if (cacke dbd0: 79 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 74 y_args.UnlockMut dbe0: 65 78 29 20 7b 0a 09 09 09 63 75 73 74 6f 6d 5f ex) {....custom_ dbf0: 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ dc00: 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 args.UnlockMutex dc10: 28 6d 75 74 65 78 29 3b 0a 0a 09 09 09 69 66 20 (mutex);.....if dc20: 28 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 21 (custom_retval ! dc30: 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 = CKR_OK) {..... dc40: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI dc50: 4e 54 46 28 22 63 61 63 6b 65 79 5f 61 72 67 73 NTF("cackey_args dc60: 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 28 29 20 72 .UnlockMutex() r dc70: 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 28 25 eturned error (% dc80: 6c 69 29 2e 22 2c 20 28 6c 6f 6e 67 29 20 63 75 li).", (long) cu dc90: 73 74 6f 6d 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 stom_retval);... dca0: 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. dcb0: 09 09 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41 43 ..}...}..}...CAC dcc0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF dcd0: 28 22 52 65 74 75 72 6e 69 6e 67 20 73 75 63 65 ("Returning suce dce0: 73 73 66 75 6c 6c 79 20 28 30 29 22 29 3b 0a 0a ssfully (0)");.. dcf0: 09 72 65 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 73 .return(0);.}..s dd00: 74 61 74 69 63 20 43 4b 5f 41 54 54 52 49 42 55 tatic CK_ATTRIBU dd10: 54 45 5f 50 54 52 20 63 61 63 6b 65 79 5f 67 65 TE_PTR cackey_ge dd20: 74 5f 61 74 74 72 69 62 75 74 65 73 28 43 4b 5f t_attributes(CK_ dd30: 4f 42 4a 45 43 54 5f 43 4c 41 53 53 20 6f 62 6a OBJECT_CLASS obj dd40: 65 63 74 63 6c 61 73 73 2c 20 73 74 72 75 63 74 ectclass, struct dd50: 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 cackey_pcsc_ide dd60: 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 74 79 2c ntity *identity, dd70: 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 unsigned long i dd80: 64 65 6e 74 69 74 79 5f 6e 75 6d 2c 20 43 4b 5f dentity_num, CK_ dd90: 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 43 6f 75 ULONG_PTR pulCou dda0: 6e 74 29 20 7b 0a 09 73 74 61 74 69 63 20 43 4b nt) {..static CK ddb0: 5f 42 42 4f 4f 4c 20 63 6b 5f 74 72 75 65 20 3d _BBOOL ck_true = ddc0: 20 31 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f 42 1;..static CK_B ddd0: 42 4f 4f 4c 20 63 6b 5f 66 61 6c 73 65 20 3d 20 BOOL ck_false = dde0: 30 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 6e 75 6d 0;..CK_ULONG num ddf0: 61 74 74 72 73 20 3d 20 30 2c 20 72 65 74 76 61 attrs = 0, retva de00: 6c 5f 63 6f 75 6e 74 3b 0a 09 43 4b 5f 41 54 54 l_count;..CK_ATT de10: 52 49 42 55 54 45 5f 54 59 50 45 20 63 75 72 72 RIBUTE_TYPE curr de20: 5f 61 74 74 72 5f 74 79 70 65 3b 0a 09 43 4b 5f _attr_type;..CK_ de30: 41 54 54 52 49 42 55 54 45 20 63 75 72 72 5f 61 ATTRIBUTE curr_a de40: 74 74 72 2c 20 2a 72 65 74 76 61 6c 3b 0a 09 43 ttr, *retval;..C de50: 4b 5f 56 4f 49 44 5f 50 54 52 20 70 56 61 6c 75 K_VOID_PTR pValu de60: 65 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 75 6c 56 e;..CK_ULONG ulV de70: 61 6c 75 65 4c 65 6e 3b 0a 09 43 4b 5f 4f 42 4a alueLen;..CK_OBJ de80: 45 43 54 5f 43 4c 41 53 53 20 63 6b 5f 6f 62 6a ECT_CLASS ck_obj de90: 65 63 74 5f 63 6c 61 73 73 3b 0a 09 43 4b 5f 43 ect_class;..CK_C dea0: 45 52 54 49 46 49 43 41 54 45 5f 54 59 50 45 20 ERTIFICATE_TYPE deb0: 63 6b 5f 63 65 72 74 69 66 69 63 61 74 65 5f 74 ck_certificate_t dec0: 79 70 65 3b 0a 09 43 4b 5f 4b 45 59 5f 54 59 50 ype;..CK_KEY_TYP ded0: 45 20 63 6b 5f 6b 65 79 5f 74 79 70 65 3b 0a 09 E ck_key_type;.. dee0: 43 4b 5f 55 54 46 38 43 48 41 52 20 75 63 54 6d CK_UTF8CHAR ucTm def0: 70 42 75 66 5b 31 30 32 34 5d 3b 0a 09 75 6e 73 pBuf[1024];..uns df00: 69 67 6e 65 64 20 63 68 61 72 20 2a 63 65 72 74 igned char *cert df10: 69 66 69 63 61 74 65 3b 0a 09 73 73 69 7a 65 5f ificate;..ssize_ df20: 74 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 t certificate_le df30: 6e 20 3d 20 2d 31 2c 20 78 35 30 39 5f 72 65 61 n = -1, x509_rea df40: 64 5f 72 65 74 3b 0a 09 69 6e 74 20 70 56 61 6c d_ret;..int pVal df50: 75 65 5f 66 72 65 65 3b 0a 0a 09 43 41 43 4b 45 ue_free;...CACKE df60: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" df70: 43 61 6c 6c 65 64 20 28 6f 62 6a 65 63 74 43 6c Called (objectCl df80: 61 73 73 20 3d 20 25 6c 75 2c 20 69 64 65 6e 74 ass = %lu, ident df90: 69 74 79 5f 6e 75 6d 20 3d 20 25 6c 75 29 2e 22 ity_num = %lu)." dfa0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long dfb0: 29 20 6f 62 6a 65 63 74 63 6c 61 73 73 2c 20 69 ) objectclass, i dfc0: 64 65 6e 74 69 74 79 5f 6e 75 6d 29 3b 0a 0a 09 dentity_num);... dfd0: 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 if (objectclass dfe0: 21 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 != CKO_CERTIFICA dff0: 54 45 20 26 26 20 6f 62 6a 65 63 74 63 6c 61 73 TE && objectclas e000: 73 20 21 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 5f s != CKO_PUBLIC_ e010: 4b 45 59 20 26 26 20 6f 62 6a 65 63 74 63 6c 61 KEY && objectcla e020: 73 73 20 21 3d 20 43 4b 4f 5f 50 52 49 56 41 54 ss != CKO_PRIVAT e030: 45 5f 4b 45 59 29 20 7b 0a 09 09 43 41 43 4b 45 E_KEY) {...CACKE e040: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" e050: 52 65 74 75 72 6e 69 6e 67 20 30 20 6f 62 6a 65 Returning 0 obje e060: 63 74 73 20 28 4e 55 4c 4c 29 2c 20 69 6e 76 61 cts (NULL), inva e070: 6c 69 64 20 6f 62 6a 65 63 74 20 63 6c 61 73 73 lid object class e080: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 ");....return(NU e090: 4c 4c 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 47 65 74 LL);..}.../* Get e0a0: 20 43 65 72 74 20 2a 2f 0a 09 69 66 20 28 69 64 Cert */..if (id e0b0: 65 6e 74 69 74 79 20 3d 3d 20 4e 55 4c 4c 29 20 entity == NULL) e0c0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG e0d0: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni e0e0: 6e 67 20 30 20 6f 62 6a 65 63 74 73 20 28 4e 55 ng 0 objects (NU e0f0: 4c 4c 29 2c 20 69 6e 76 61 6c 69 64 20 69 64 65 LL), invalid ide e100: 6e 74 69 79 20 70 72 6f 76 69 64 65 64 22 29 3b ntiy provided"); e110: 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 ....return(NULL) e120: 3b 0a 09 7d 0a 0a 09 63 65 72 74 69 66 69 63 61 ;..}...certifica e130: 74 65 20 3d 20 69 64 65 6e 74 69 74 79 2d 3e 63 te = identity->c e140: 65 72 74 69 66 69 63 61 74 65 3b 0a 09 63 65 72 ertificate;..cer e150: 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3d 20 69 tificate_len = i e160: 64 65 6e 74 69 74 79 2d 3e 63 65 72 74 69 66 69 dentity->certifi e170: 63 61 74 65 5f 6c 65 6e 3b 0a 0a 09 69 66 20 28 cate_len;...if ( e180: 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 certificate_len e190: 3d 3d 20 2d 31 20 7c 7c 20 63 65 72 74 69 66 69 == -1 || certifi e1a0: 63 61 74 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a cate == NULL) {. e1b0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P e1c0: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning e1d0: 20 30 20 6f 62 6a 65 63 74 73 20 28 4e 55 4c 4c 0 objects (NULL e1e0: 29 2c 20 74 68 69 73 20 69 64 65 6e 74 69 74 79 ), this identity e1f0: 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 does not have a e200: 6e 20 58 2e 35 30 39 20 63 65 72 74 69 66 69 63 n X.509 certific e210: 61 74 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 ate associated w e220: 69 74 68 20 69 74 20 61 6e 64 20 77 69 6c 6c 20 ith it and will e230: 6e 6f 74 20 77 6f 72 6b 22 29 3b 0a 0a 09 09 72 not work");....r e240: 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a eturn(NULL);..}. e250: 0a 09 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 ../* Verify that e260: 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 20 certificate is e270: 41 53 4e 2e 31 20 65 6e 63 6f 64 65 64 20 58 2e ASN.1 encoded X. e280: 35 30 39 20 63 65 72 74 69 66 69 63 61 74 65 20 509 certificate e290: 2a 2f 0a 09 69 66 20 28 78 35 30 39 5f 74 6f 5f */..if (x509_to_ e2a0: 73 65 72 69 61 6c 28 63 65 72 74 69 66 69 63 61 serial(certifica e2b0: 74 65 2c 20 63 65 72 74 69 66 69 63 61 74 65 5f te, certificate_ e2c0: 6c 65 6e 2c 20 4e 55 4c 4c 29 20 3c 20 30 29 20 len, NULL) < 0) e2d0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG e2e0: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni e2f0: 6e 67 20 30 20 6f 62 6a 65 63 74 73 20 28 4e 55 ng 0 objects (NU e300: 4c 4c 29 2c 20 74 68 65 20 58 2e 35 30 39 20 63 LL), the X.509 c e310: 65 72 74 69 66 69 63 61 74 65 20 61 73 73 6f 63 ertificate assoc e320: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 iated with this e330: 69 64 65 6e 74 69 74 79 20 69 73 20 6e 6f 74 20 identity is not e340: 76 61 6c 69 64 22 29 3b 0a 0a 09 09 72 65 74 75 valid");....retu e350: 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 72 rn(NULL);..}...r e360: 65 74 76 61 6c 5f 63 6f 75 6e 74 20 3d 20 31 36 etval_count = 16 e370: 3b 0a 09 72 65 74 76 61 6c 20 3d 20 6d 61 6c 6c ;..retval = mall e380: 6f 63 28 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 oc(retval_count e390: 2a 20 73 69 7a 65 6f 66 28 2a 72 65 74 76 61 6c * sizeof(*retval e3a0: 29 29 3b 0a 0a 09 66 6f 72 20 28 63 75 72 72 5f ));...for (curr_ e3b0: 61 74 74 72 5f 74 79 70 65 20 3d 20 30 3b 20 63 attr_type = 0; c e3c0: 75 72 72 5f 61 74 74 72 5f 74 79 70 65 20 3c 20 urr_attr_type < e3d0: 30 78 63 65 35 33 36 33 35 66 3b 20 63 75 72 72 0xce53635f; curr e3e0: 5f 61 74 74 72 5f 74 79 70 65 2b 2b 29 20 7b 0a _attr_type++) {. e3f0: 09 09 69 66 20 28 63 75 72 72 5f 61 74 74 72 5f ..if (curr_attr_ e400: 74 79 70 65 20 3d 3d 20 30 78 38 30 30 29 20 7b type == 0x800) { e410: 0a 09 09 09 63 75 72 72 5f 61 74 74 72 5f 74 79 ....curr_attr_ty e420: 70 65 20 3d 20 30 78 63 65 35 33 36 33 30 30 3b pe = 0xce536300; e430: 0a 09 09 7d 0a 0a 09 09 70 56 61 6c 75 65 5f 66 ...}....pValue_f e440: 72 65 65 20 3d 20 30 3b 0a 09 09 70 56 61 6c 75 ree = 0;...pValu e450: 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 75 6c 56 61 e = NULL;...ulVa e460: 6c 75 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e lueLen = (CK_LON e470: 47 29 20 2d 31 3b 0a 0a 09 09 73 77 69 74 63 68 G) -1;....switch e480: 20 28 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 (curr_attr_type e490: 29 20 7b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f ) {....case CKA_ e4a0: 43 4c 41 53 53 3a 0a 09 09 09 09 43 41 43 4b 45 CLASS:.....CACKE e4b0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" e4c0: 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri e4d0: 62 75 74 65 20 43 4b 41 5f 43 4c 41 53 53 20 28 bute CKA_CLASS ( e4e0: 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 0x%08lx) ...", ( e4f0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 unsigned long) c e500: 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a urr_attr_type);. e510: 0a 09 09 09 09 63 6b 5f 6f 62 6a 65 63 74 5f 63 .....ck_object_c e520: 6c 61 73 73 20 3d 20 6f 62 6a 65 63 74 63 6c 61 lass = objectcla e530: 73 73 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 ss;......pValue e540: 3d 20 26 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c 61 = &ck_object_cla e550: 73 73 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c ss;.....ulValueL e560: 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 6f en = sizeof(ck_o e570: 62 6a 65 63 74 5f 63 6c 61 73 73 29 3b 0a 0a 09 bject_class);... e580: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ e590: 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 PRINTF(" ... ret e5a0: 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 urning %lu (%p/% e5b0: 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 lu)", (unsigned e5c0: 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 4f 42 4a 45 long) *((CK_OBJE e5d0: 43 54 5f 43 4c 41 53 53 20 2a 29 20 70 56 61 6c CT_CLASS *) pVal e5e0: 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e ue), pValue, (un e5f0: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV e600: 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b e610: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK e620: 41 5f 54 4f 4b 45 4e 3a 0a 09 09 09 09 43 41 43 A_TOKEN:.....CAC e630: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF e640: 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 ("Requesting att e650: 72 69 62 75 74 65 20 43 4b 41 5f 54 4f 4b 45 4e ribute CKA_TOKEN e660: 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", e670: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) e680: 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) e690: 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 ;......pValue = e6a0: 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 75 6c &ck_true;.....ul e6b0: 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f ValueLen = sizeo e6c0: 66 28 63 6b 5f 74 72 75 65 29 3b 0a 0a 09 09 09 f(ck_true);..... e6d0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR e6e0: 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 INTF(" ... retur e6f0: 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 ning %lu (%p/%lu e700: 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f )", (unsigned lo e710: 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 ng) *((CK_BBOOL e720: 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c *) pValue), pVal e730: 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f ue, (unsigned lo e740: 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b ng) ulValueLen); e750: 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... e760: 63 61 73 65 20 43 4b 41 5f 4d 4f 44 49 46 49 41 case CKA_MODIFIA e770: 42 4c 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f BLE:.....CACKEY_ e780: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re e790: 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 questing attribu e7a0: 74 65 20 43 4b 41 5f 4d 4f 44 49 46 49 41 42 4c te CKA_MODIFIABL e7b0: 45 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 E (0x%08lx) ..." e7c0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long e7d0: 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 ) curr_attr_type e7e0: 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d );......pValue = e7f0: 20 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 09 &ck_false;..... e800: 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a ulValueLen = siz e810: 65 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 0a eof(ck_false);.. e820: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG e830: 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 _PRINTF(" ... re e840: 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f turning %lu (%p/ e850: 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 %lu)", (unsigned e860: 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f long) *((CK_BBO e870: 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 OL *) pValue), p e880: 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 Value, (unsigned e890: 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 long) ulValueLe e8a0: 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a n);......break;. e8b0: 09 09 09 63 61 73 65 20 43 4b 41 5f 4c 41 42 45 ...case CKA_LABE e8c0: 4c 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 L:.....CACKEY_DE e8d0: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 BUG_PRINTF("Requ e8e0: 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 esting attribute e8f0: 20 43 4b 41 5f 4c 41 42 45 4c 20 28 30 78 25 30 CKA_LABEL (0x%0 e900: 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 8lx) ...", (unsi e910: 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f gned long) curr_ e920: 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 attr_type);..... e930: 09 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 6e 61 ./* Determine na e940: 6d 65 20 2a 2f 0a 09 09 09 09 78 35 30 39 5f 72 me */.....x509_r e950: 65 61 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 ead_ret = cackey e960: 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 5f 74 _pcsc_identity_t e970: 6f 5f 6c 61 62 65 6c 28 69 64 65 6e 74 69 74 79 o_label(identity e980: 2c 20 75 63 54 6d 70 42 75 66 2c 20 73 69 7a 65 , ucTmpBuf, size e990: 6f 66 28 75 63 54 6d 70 42 75 66 29 29 3b 0a 09 of(ucTmpBuf));.. e9a0: 09 09 09 69 66 20 28 78 35 30 39 5f 72 65 61 64 ...if (x509_read e9b0: 5f 72 65 74 20 3e 20 30 29 20 7b 0a 09 09 09 09 _ret > 0) {..... e9c0: 09 70 56 61 6c 75 65 20 3d 20 75 63 54 6d 70 42 .pValue = ucTmpB e9d0: 75 66 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75 65 uf;......ulValue e9e0: 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 64 5f Len = x509_read_ e9f0: 72 65 74 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 ret;.....}...... ea00: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI ea10: 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e NTF(" ... return ea20: 69 6e 67 20 28 25 70 2f 25 6c 75 29 22 2c 20 70 ing (%p/%lu)", p ea30: 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 Value, (unsigned ea40: 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 long) ulValueLe ea50: 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a n);......break;. ea60: 09 09 09 63 61 73 65 20 43 4b 41 5f 56 41 4c 55 ...case CKA_VALU ea70: 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 E:.....CACKEY_DE ea80: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 BUG_PRINTF("Requ ea90: 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 esting attribute eaa0: 20 43 4b 41 5f 56 41 4c 55 45 20 28 30 78 25 30 CKA_VALUE (0x%0 eab0: 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 8lx) ...", (unsi eac0: 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f gned long) curr_ ead0: 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 attr_type);..... eae0: 09 73 77 69 74 63 68 20 28 6f 62 6a 65 63 74 63 .switch (objectc eaf0: 6c 61 73 73 29 20 7b 0a 09 09 09 09 09 63 61 73 lass) {......cas eb00: 65 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 e CKO_PRIVATE_KE eb10: 59 3a 0a 09 09 09 09 09 09 43 41 43 4b 45 59 5f Y:.......CACKEY_ eb20: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . eb30: 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 .. but not getti eb40: 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 ng it because we eb50: 20 61 72 65 20 61 20 70 72 69 76 61 74 65 20 6b are a private k eb60: 65 79 2e 22 29 3b 0a 0a 09 09 09 09 09 09 62 72 ey.");........br eb70: 65 61 6b 3b 0a 09 09 09 09 09 63 61 73 65 20 43 eak;......case C eb80: 4b 4f 5f 50 55 42 4c 49 43 5f 4b 45 59 3a 0a 09 KO_PUBLIC_KEY:.. eb90: 09 09 09 09 09 2f 2a 20 58 58 58 3a 20 54 4f 44 ...../* XXX: TOD eba0: 4f 20 2a 2f 0a 0a 09 09 09 09 09 09 62 72 65 61 O */........brea ebb0: 6b 3b 0a 09 09 09 09 09 63 61 73 65 20 43 4b 4f k;......case CKO ebc0: 5f 43 45 52 54 49 46 49 43 41 54 45 3a 0a 09 09 _CERTIFICATE:... ebd0: 09 09 09 09 70 56 61 6c 75 65 20 3d 20 63 65 72 ....pValue = cer ebe0: 74 69 66 69 63 61 74 65 3b 0a 09 09 09 09 09 09 tificate;....... ebf0: 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 63 65 72 ulValueLen = cer ec00: 74 69 66 69 63 61 74 65 5f 6c 65 6e 3b 0a 0a 09 tificate_len;... ec10: 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 .....break;..... ec20: 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 }......CACKEY_DE ec30: 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... ec40: 20 72 65 74 75 72 6e 69 6e 67 20 25 70 2f 25 6c returning %p/%l ec50: 75 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 u", pValue, (uns ec60: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 igned long) ulVa ec70: 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 lueLen);......br ec80: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 eak;....case CKA ec90: 5f 49 53 53 55 45 52 3a 0a 09 09 09 09 43 41 43 _ISSUER:.....CAC eca0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF ecb0: 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 ("Requesting att ecc0: 72 69 62 75 74 65 20 43 4b 41 5f 49 53 53 55 45 ribute CKA_ISSUE ecd0: 52 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 R (0x%08lx) ..." ece0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long ecf0: 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 ) curr_attr_type ed00: 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 );......if (obje ed10: 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43 ctclass != CKO_C ed20: 45 52 54 49 46 49 43 41 54 45 29 20 7b 0a 09 09 ERTIFICATE) {... ed30: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ ed40: 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 PRINTF(" ... but ed50: 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 not getting it ed60: 62 65 63 61 75 73 65 20 77 65 20 61 72 65 20 6e because we are n ed70: 6f 74 20 61 20 63 65 72 74 69 66 69 63 61 74 65 ot a certificate ed80: 2e 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b .");.......break ed90: 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 ;.....}......if eda0: 28 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e (certificate_len edb0: 20 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 78 35 >= 0) {......x5 edc0: 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 09_read_ret = x5 edd0: 30 39 5f 74 6f 5f 69 73 73 75 65 72 28 63 65 72 09_to_issuer(cer ede0: 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 66 tificate, certif edf0: 69 63 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c icate_len, &pVal ee00: 75 65 29 3b 0a 09 09 09 09 09 69 66 20 28 78 35 ue);......if (x5 ee10: 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 29 09_read_ret < 0) ee20: 20 7b 0a 09 09 09 09 09 09 70 56 61 6c 75 65 20 {.......pValue ee30: 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 = NULL;......} e ee40: 6c 73 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 lse {.......ulVa ee50: 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 lueLen = x509_re ee60: 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 ad_ret;......}.. ee70: 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 ...}......CACKEY ee80: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" ee90: 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 70 ... returning %p eea0: 2f 25 6c 75 22 2c 20 70 56 61 6c 75 65 2c 20 28 /%lu", pValue, ( eeb0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 unsigned long) u eec0: 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 lValueLen);..... eed0: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 .break;....case eee0: 43 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 CKA_SERIAL_NUMBE eef0: 52 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 R:.....CACKEY_DE ef00: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 BUG_PRINTF("Requ ef10: 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 esting attribute ef20: 20 43 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 CKA_SERIAL_NUMB ef30: 45 52 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e ER (0x%08lx) ... ef40: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon ef50: 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 g) curr_attr_typ ef60: 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a e);......if (obj ef70: 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f ectclass != CKO_ ef80: 43 45 52 54 49 46 49 43 41 54 45 29 20 7b 0a 09 CERTIFICATE) {.. ef90: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG efa0: 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 _PRINTF(" ... bu efb0: 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 t not getting it efc0: 20 62 65 63 61 75 73 65 20 77 65 20 61 72 65 20 because we are efd0: 6e 6f 74 20 61 20 63 65 72 74 69 66 69 63 61 74 not a certificat efe0: 65 2e 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 e.");.......brea eff0: 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 k;.....}......if f000: 20 28 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 (certificate_le f010: 6e 20 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 78 n >= 0) {......x f020: 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 509_read_ret = x f030: 35 30 39 5f 74 6f 5f 73 65 72 69 61 6c 28 63 65 509_to_serial(ce f040: 72 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 rtificate, certi f050: 66 69 63 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 ficate_len, &pVa f060: 6c 75 65 29 3b 0a 09 09 09 09 09 69 66 20 28 78 lue);......if (x f070: 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 509_read_ret < 0 f080: 29 20 7b 0a 09 09 09 09 09 09 70 56 61 6c 75 65 ) {.......pValue f090: 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 = NULL;......} f0a0: 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 else {.......ulV f0b0: 61 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 alueLen = x509_r f0c0: 65 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a ead_ret;......}. f0d0: 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 ....}......CACKE f0e0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" f0f0: 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 28 ... returning ( f100: 25 70 2f 25 6c 75 29 22 2c 20 70 56 61 6c 75 65 %p/%lu)", pValue f110: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long f120: 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. f130: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca f140: 73 65 20 43 4b 41 5f 53 55 42 4a 45 43 54 3a 0a se CKA_SUBJECT:. f150: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG f160: 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 _PRINTF("Request f170: 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b ing attribute CK f180: 41 5f 53 55 42 4a 45 43 54 20 28 30 78 25 30 38 A_SUBJECT (0x%08 f190: 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig f1a0: 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a f1b0: 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... f1c0: 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 if (objectclass f1d0: 21 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 != CKO_CERTIFICA f1e0: 54 45 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 TE) {......CACKE f1f0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" f200: 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 ... but not get f210: 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 ting it because f220: 77 65 20 61 72 65 20 6e 6f 74 20 61 20 63 65 72 we are not a cer f230: 74 69 66 69 63 61 74 65 2e 22 29 3b 0a 0a 09 09 tificate.");.... f240: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a ...break;.....}. f250: 0a 09 09 09 09 69 66 20 28 63 65 72 74 69 66 69 .....if (certifi f260: 63 61 74 65 5f 6c 65 6e 20 3e 3d 20 30 29 20 7b cate_len >= 0) { f270: 0a 09 09 09 09 09 78 35 30 39 5f 72 65 61 64 5f ......x509_read_ f280: 72 65 74 20 3d 20 78 35 30 39 5f 74 6f 5f 73 75 ret = x509_to_su f290: 62 6a 65 63 74 28 63 65 72 74 69 66 69 63 61 74 bject(certificat f2a0: 65 2c 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c e, certificate_l f2b0: 65 6e 2c 20 26 70 56 61 6c 75 65 29 3b 0a 09 09 en, &pValue);... f2c0: 09 09 09 69 66 20 28 78 35 30 39 5f 72 65 61 64 ...if (x509_read f2d0: 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 09 09 _ret < 0) {..... f2e0: 09 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b ..pValue = NULL; f2f0: 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 ......} else {.. f300: 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 .....ulValueLen f310: 3d 20 78 35 30 39 5f 72 65 61 64 5f 72 65 74 3b = x509_read_ret; f320: 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 ......}.....}... f330: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ f340: 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 PRINTF(" ... ret f350: 75 72 6e 69 6e 67 20 25 70 2f 25 6c 75 22 2c 20 urning %p/%lu", f360: 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 pValue, (unsigne f370: 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c d long) ulValueL f380: 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b en);......break; f390: 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 49 44 3a ....case CKA_ID: f3a0: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU f3b0: 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 G_PRINTF("Reques f3c0: 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 ting attribute C f3d0: 4b 41 5f 49 44 20 28 30 78 25 30 38 6c 78 29 20 KA_ID (0x%08lx) f3e0: 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 ...", (unsigned f3f0: 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f long) curr_attr_ f400: 74 79 70 65 29 3b 0a 0a 09 09 09 09 75 63 54 6d type);......ucTm f410: 70 42 75 66 5b 30 5d 20 3d 20 28 28 69 64 65 6e pBuf[0] = ((iden f420: 74 69 74 79 5f 6e 75 6d 20 2b 20 31 29 20 3e 3e tity_num + 1) >> f430: 20 38 29 20 26 20 30 78 66 66 3b 0a 09 09 09 09 8) & 0xff;..... f440: 75 63 54 6d 70 42 75 66 5b 31 5d 20 3d 20 20 28 ucTmpBuf[1] = ( f450: 69 64 65 6e 74 69 74 79 5f 6e 75 6d 20 2b 20 31 identity_num + 1 f460: 29 20 26 20 30 78 66 66 3b 0a 0a 09 09 09 09 70 ) & 0xff;......p f470: 56 61 6c 75 65 20 3d 20 26 75 63 54 6d 70 42 75 Value = &ucTmpBu f480: 66 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 f;.....ulValueLe f490: 6e 20 3d 20 32 3b 0a 0a 09 09 09 09 43 41 43 4b n = 2;......CACK f4a0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( f4b0: 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning f4c0: 25 70 2f 25 6c 75 22 2c 20 70 56 61 6c 75 65 2c %p/%lu", pValue, f4d0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) f4e0: 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... f4f0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas f500: 65 20 43 4b 41 5f 43 45 52 54 49 46 49 43 41 54 e CKA_CERTIFICAT f510: 45 5f 54 59 50 45 3a 0a 09 09 09 09 43 41 43 4b E_TYPE:.....CACK f520: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( f530: 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 "Requesting attr f540: 69 62 75 74 65 20 43 4b 41 5f 43 45 52 54 49 46 ibute CKA_CERTIF f550: 49 43 41 54 45 5f 54 59 50 45 20 28 30 78 25 30 ICATE_TYPE (0x%0 f560: 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 8lx) ...", (unsi f570: 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f gned long) curr_ f580: 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 attr_type);..... f590: 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 .if (objectclass f5a0: 20 21 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 != CKO_CERTIFIC f5b0: 41 54 45 29 20 7b 0a 09 09 09 09 09 43 41 43 4b ATE) {......CACK f5c0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( f5d0: 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 " ... but not ge f5e0: 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 tting it because f5f0: 20 77 65 20 61 72 65 20 6e 6f 74 20 61 20 63 65 we are not a ce f600: 72 74 69 66 69 63 61 74 65 2e 22 29 3b 0a 0a 09 rtificate.");... f610: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d ....break;.....} f620: 0a 0a 09 09 09 09 2f 2a 20 57 65 20 6f 6e 6c 79 ....../* We only f630: 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 63 65 72 support one cer f640: 74 69 66 69 63 61 74 65 20 74 79 70 65 20 2a 2f tificate type */ f650: 0a 09 09 09 09 63 6b 5f 63 65 72 74 69 66 69 63 .....ck_certific f660: 61 74 65 5f 74 79 70 65 20 3d 20 43 4b 43 5f 58 ate_type = CKC_X f670: 5f 35 30 39 3b 0a 0a 09 09 09 09 70 56 61 6c 75 _509;......pValu f680: 65 20 3d 20 26 63 6b 5f 63 65 72 74 69 66 69 63 e = &ck_certific f690: 61 74 65 5f 74 79 70 65 3b 0a 09 09 09 09 75 6c ate_type;.....ul f6a0: 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f ValueLen = sizeo f6b0: 66 28 63 6b 5f 63 65 72 74 69 66 69 63 61 74 65 f(ck_certificate f6c0: 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 43 41 43 _type);......CAC f6d0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF f6e0: 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 (" ... returning f6f0: 20 43 4b 43 5f 58 5f 35 30 39 20 28 25 6c 75 29 CKC_X_509 (%lu) f700: 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 (%p/%lu)", (uns f710: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 igned long) *((C f720: 4b 5f 43 45 52 54 49 46 49 43 41 54 45 5f 54 59 K_CERTIFICATE_TY f730: 50 45 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 PE *) pValue), p f740: 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 Value, (unsigned f750: 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 long) ulValueLe f760: 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a n);......break;. f770: 09 09 09 63 61 73 65 20 43 4b 41 5f 4b 45 59 5f ...case CKA_KEY_ f780: 54 59 50 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 TYPE:.....CACKEY f790: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R f7a0: 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 equesting attrib f7b0: 75 74 65 20 43 4b 41 5f 4b 45 59 5f 54 59 50 45 ute CKA_KEY_TYPE f7c0: 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", f7d0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) f7e0: 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) f7f0: 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 ;......if (objec f800: 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 50 52 tclass != CKO_PR f810: 49 56 41 54 45 5f 4b 45 59 20 26 26 20 6f 62 6a IVATE_KEY && obj f820: 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f ectclass != CKO_ f830: 50 55 42 4c 49 43 5f 4b 45 59 29 20 7b 0a 09 09 PUBLIC_KEY) {... f840: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ f850: 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 PRINTF(" ... but f860: 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 not getting it f870: 62 65 63 61 75 73 65 20 77 65 20 61 72 65 20 6e because we are n f880: 6f 74 20 61 20 6b 65 79 2e 22 29 3b 0a 0a 09 09 ot a key.");.... f890: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a ...break;.....}. f8a0: 0a 09 09 09 09 2f 2a 20 57 65 20 6f 6e 6c 79 20 ...../* We only f8b0: 73 75 70 70 6f 72 74 20 6f 6e 65 20 6b 65 79 20 support one key f8c0: 74 79 70 65 20 2a 2f 0a 09 09 09 09 63 6b 5f 6b type */.....ck_k f8d0: 65 79 5f 74 79 70 65 20 3d 20 43 4b 4b 5f 52 53 ey_type = CKK_RS f8e0: 41 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d A;......pValue = f8f0: 20 26 63 6b 5f 6b 65 79 5f 74 79 70 65 3b 0a 09 &ck_key_type;.. f900: 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 ...ulValueLen = f910: 73 69 7a 65 6f 66 28 63 6b 5f 6b 65 79 5f 74 79 sizeof(ck_key_ty f920: 70 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 pe);......CACKEY f930: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" f940: 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 43 4b ... returning CK f950: 4b 5f 52 53 41 20 28 25 6c 75 29 20 28 25 70 2f K_RSA (%lu) (%p/ f960: 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 %lu)", (unsigned f970: 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 43 45 52 long) *((CK_CER f980: 54 49 46 49 43 41 54 45 5f 54 59 50 45 20 2a 29 TIFICATE_TYPE *) f990: 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 pValue), pValue f9a0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long f9b0: 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. f9c0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca f9d0: 73 65 20 43 4b 41 5f 53 49 47 4e 3a 0a 09 09 09 se CKA_SIGN:.... f9e0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR f9f0: 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting fa00: 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 53 attribute CKA_S fa10: 49 47 4e 20 28 30 78 25 30 38 6c 78 29 20 2e 2e IGN (0x%08lx) .. fa20: 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f .", (unsigned lo fa30: 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 ng) curr_attr_ty fa40: 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 pe);......if (ob fa50: 6a 65 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b 4f jectclass == CKO fa60: 5f 50 52 49 56 41 54 45 5f 4b 45 59 29 20 7b 0a _PRIVATE_KEY) {. fa70: 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 .....pValue = &c fa80: 6b 5f 74 72 75 65 3b 0a 09 09 09 09 09 75 6c 56 k_true;......ulV fa90: 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 alueLen = sizeof faa0: 28 63 6b 5f 74 72 75 65 29 3b 0a 09 09 09 09 7d (ck_true);.....} fab0: 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 70 56 61 else {......pVa fac0: 6c 75 65 20 3d 20 26 63 6b 5f 66 61 6c 73 65 3b lue = &ck_false; fad0: 0a 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e ......ulValueLen fae0: 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 66 61 6c = sizeof(ck_fal faf0: 73 65 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 se);.....}...... fb00: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI fb10: 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e NTF(" ... return fb20: 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 ing %lu (%p/%lu) fb30: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon fb40: 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a g) *((CK_BBOOL * fb50: 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 ) pValue), pValu fb60: 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e e, (unsigned lon fb70: 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a g) ulValueLen);. fb80: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c fb90: 61 73 65 20 43 4b 41 5f 44 45 43 52 59 50 54 3a ase CKA_DECRYPT: fba0: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU fbb0: 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 G_PRINTF("Reques fbc0: 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 ting attribute C fbd0: 4b 41 5f 44 45 43 52 59 50 54 20 28 30 78 25 30 KA_DECRYPT (0x%0 fbe0: 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 8lx) ...", (unsi fbf0: 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f gned long) curr_ fc00: 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 attr_type);..... fc10: 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 .if (objectclass fc20: 20 3d 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f == CKO_PRIVATE_ fc30: 4b 45 59 20 7c 7c 20 6f 62 6a 65 63 74 63 6c 61 KEY || objectcla fc40: 73 73 20 3d 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 ss == CKO_PUBLIC fc50: 5f 4b 45 59 29 20 7b 0a 09 09 09 09 09 70 56 61 _KEY) {......pVa fc60: 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a lue = &ck_true;. fc70: 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 .....ulValueLen fc80: 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 = sizeof(ck_true fc90: 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a );.....} else {. fca0: 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 .....pValue = &c fcb0: 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 09 09 75 6c k_false;......ul fcc0: 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f ValueLen = sizeo fcd0: 66 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 09 09 09 f(ck_false);.... fce0: 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 .}......CACKEY_D fcf0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e EBUG_PRINTF(" .. fd00: 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 . returning %lu fd10: 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 (%p/%lu)", (unsi fd20: 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b gned long) *((CK fd30: 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 _BBOOL *) pValue fd40: 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 ), pValue, (unsi fd50: 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c gned long) ulVal fd60: 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 ueLen);......bre fd70: 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f ak;....case CKA_ fd80: 54 52 55 53 54 5f 53 45 52 56 45 52 5f 41 55 54 TRUST_SERVER_AUT fd90: 48 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 H:.....CACKEY_DE fda0: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 BUG_PRINTF("Requ fdb0: 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 esting attribute fdc0: 20 43 4b 41 5f 54 52 55 53 54 5f 53 45 52 56 45 CKA_TRUST_SERVE fdd0: 52 5f 41 55 54 48 20 28 30 78 25 30 38 6c 78 29 R_AUTH (0x%08lx) fde0: 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned fdf0: 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr fe00: 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 _type);......pVa fe10: 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a lue = &ck_true;. fe20: 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = fe30: 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 sizeof(ck_true) fe40: 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 ;......CACKEY_DE fe50: 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... fe60: 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 returning %lu ( fe70: 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 %p/%lu)", (unsig fe80: 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f ned long) *((CK_ fe90: 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 BBOOL *) pValue) fea0: 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 , pValue, (unsig feb0: 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 ned long) ulValu fec0: 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 eLen);......brea fed0: 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 k;....case CKA_T fee0: 52 55 53 54 5f 43 4c 49 45 4e 54 5f 41 55 54 48 RUST_CLIENT_AUTH fef0: 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB ff00: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque ff10: 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute ff20: 43 4b 41 5f 54 52 55 53 54 5f 43 4c 49 45 4e 54 CKA_TRUST_CLIENT ff30: 5f 41 55 54 48 20 28 30 78 25 30 38 6c 78 29 20 _AUTH (0x%08lx) ff40: 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 ...", (unsigned ff50: 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f long) curr_attr_ ff60: 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c type);......pVal ff70: 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 ue = &ck_true;.. ff80: 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 ...ulValueLen = ff90: 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b sizeof(ck_true); ffa0: 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB ffb0: 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... ffc0: 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 returning %lu (% ffd0: 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e p/%lu)", (unsign ffe0: 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 ed long) *((CK_B fff0: 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c BOOL *) pValue), 10000 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e pValue, (unsign 10010 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 ed long) ulValue 10020 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b Len);......break 10030 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 ;....case CKA_TR 10040 55 53 54 5f 43 4f 44 45 5f 53 49 47 4e 49 4e 47 UST_CODE_SIGNING 10050 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB 10060 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque 10070 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute 10080 43 4b 41 5f 54 52 55 53 54 5f 43 4f 44 45 5f 53 CKA_TRUST_CODE_S 10090 49 47 4e 49 4e 47 20 28 30 78 25 30 38 6c 78 29 IGNING (0x%08lx) 100a0 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned 100b0 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr 100c0 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 _type);......pVa 100d0 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a lue = &ck_true;. 100e0 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = 100f0 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 sizeof(ck_true) 10100 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 ;......CACKEY_DE 10110 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... 10120 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 returning %lu ( 10130 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 %p/%lu)", (unsig 10140 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f ned long) *((CK_ 10150 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 BBOOL *) pValue) 10160 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 , pValue, (unsig 10170 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 ned long) ulValu 10180 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 eLen);......brea 10190 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 k;....case CKA_T 101a0 52 55 53 54 5f 45 4d 41 49 4c 5f 50 52 4f 54 45 RUST_EMAIL_PROTE 101b0 43 54 49 4f 4e 3a 0a 09 09 09 09 43 41 43 4b 45 CTION:.....CACKE 101c0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 101d0 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri 101e0 62 75 74 65 20 43 4b 41 5f 54 52 55 53 54 5f 45 bute CKA_TRUST_E 101f0 4d 41 49 4c 5f 50 52 4f 54 45 43 54 49 4f 4e 20 MAIL_PROTECTION 10200 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 (0x%08lx) ...", 10210 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 10220 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b curr_attr_type); 10230 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 ......pValue = & 10240 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 75 6c 56 ck_true;.....ulV 10250 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 alueLen = sizeof 10260 28 63 6b 5f 74 72 75 65 29 3b 0a 0a 09 09 09 09 (ck_true);...... 10270 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 10280 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e NTF(" ... return 10290 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 ing %lu (%p/%lu) 102a0 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 102b0 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a g) *((CK_BBOOL * 102c0 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 ) pValue), pValu 102d0 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e e, (unsigned lon 102e0 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a g) ulValueLen);. 102f0 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 64 .....break;....d 10300 65 66 61 75 6c 74 3a 0a 09 09 09 09 70 56 61 6c efault:.....pVal 10310 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 75 ue = NULL;.....u 10320 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 28 43 4b 5f lValueLen = (CK_ 10330 4c 4f 4e 47 29 20 2d 31 3b 0a 09 09 09 09 62 72 LONG) -1;.....br 10340 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 eak;...}....if ( 10350 28 28 43 4b 5f 4c 4f 4e 47 29 20 75 6c 56 61 6c ((CK_LONG) ulVal 10360 75 65 4c 65 6e 29 20 21 3d 20 28 28 43 4b 5f 4c ueLen) != ((CK_L 10370 4f 4e 47 29 20 2d 31 29 29 20 7b 0a 09 09 09 2f ONG) -1)) {..../ 10380 2a 20 50 75 73 68 20 63 75 72 72 5f 61 74 74 72 * Push curr_attr 10390 20 6f 6e 74 6f 20 74 68 65 20 73 74 61 63 6b 20 onto the stack 103a0 2a 2f 0a 09 09 09 63 75 72 72 5f 61 74 74 72 2e */....curr_attr. 103b0 74 79 70 65 20 3d 20 63 75 72 72 5f 61 74 74 72 type = curr_attr 103c0 5f 74 79 70 65 3b 0a 09 09 09 63 75 72 72 5f 61 _type;....curr_a 103d0 74 74 72 2e 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ttr.ulValueLen = 103e0 20 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a 0a 09 09 ulValueLen;.... 103f0 09 63 75 72 72 5f 61 74 74 72 2e 70 56 61 6c 75 .curr_attr.pValu 10400 65 20 3d 20 6d 61 6c 6c 6f 63 28 63 75 72 72 5f e = malloc(curr_ 10410 61 74 74 72 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 attr.ulValueLen) 10420 3b 0a 09 09 09 6d 65 6d 63 70 79 28 63 75 72 72 ;....memcpy(curr 10430 5f 61 74 74 72 2e 70 56 61 6c 75 65 2c 20 70 56 _attr.pValue, pV 10440 61 6c 75 65 2c 20 63 75 72 72 5f 61 74 74 72 2e alue, curr_attr. 10450 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 ulValueLen);.... 10460 09 69 66 20 28 70 56 61 6c 75 65 5f 66 72 65 65 .if (pValue_free 10470 20 26 26 20 70 56 61 6c 75 65 29 20 7b 0a 09 09 && pValue) {... 10480 09 09 66 72 65 65 28 70 56 61 6c 75 65 29 3b 0a ..free(pValue);. 10490 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 6e 75 6d ...}.....if (num 104a0 61 74 74 72 73 20 3e 3d 20 72 65 74 76 61 6c 5f attrs >= retval_ 104b0 63 6f 75 6e 74 29 20 7b 0a 09 09 09 09 72 65 74 count) {.....ret 104c0 76 61 6c 5f 63 6f 75 6e 74 20 2a 3d 20 32 3b 0a val_count *= 2;. 104d0 09 09 09 09 72 65 74 76 61 6c 20 3d 20 72 65 61 ....retval = rea 104e0 6c 6c 6f 63 28 72 65 74 76 61 6c 2c 20 72 65 74 lloc(retval, ret 104f0 76 61 6c 5f 63 6f 75 6e 74 20 2a 20 73 69 7a 65 val_count * size 10500 6f 66 28 2a 72 65 74 76 61 6c 29 29 3b 0a 09 09 of(*retval));... 10510 09 7d 0a 0a 09 09 09 6d 65 6d 63 70 79 28 26 72 .}.....memcpy(&r 10520 65 74 76 61 6c 5b 6e 75 6d 61 74 74 72 73 5d 2c etval[numattrs], 10530 20 26 63 75 72 72 5f 61 74 74 72 2c 20 73 69 7a &curr_attr, siz 10540 65 6f 66 28 63 75 72 72 5f 61 74 74 72 29 29 3b eof(curr_attr)); 10550 0a 09 09 09 6e 75 6d 61 74 74 72 73 2b 2b 3b 0a ....numattrs++;. 10560 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 6e 75 6d ..}..}...if (num 10570 61 74 74 72 73 20 21 3d 20 30 29 20 7b 0a 09 09 attrs != 0) {... 10580 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 3d 20 6e retval_count = n 10590 75 6d 61 74 74 72 73 3b 0a 09 09 72 65 74 76 61 umattrs;...retva 105a0 6c 20 3d 20 72 65 61 6c 6c 6f 63 28 72 65 74 76 l = realloc(retv 105b0 61 6c 2c 20 72 65 74 76 61 6c 5f 63 6f 75 6e 74 al, retval_count 105c0 20 2a 20 73 69 7a 65 6f 66 28 2a 72 65 74 76 61 * sizeof(*retva 105d0 6c 29 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 l));..} else {.. 105e0 09 66 72 65 65 28 72 65 74 76 61 6c 29 3b 0a 0a .free(retval);.. 105f0 09 09 72 65 74 76 61 6c 20 3d 20 4e 55 4c 4c 3b ..retval = NULL; 10600 0a 09 7d 0a 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 ..}...*pulCount 10610 3d 20 6e 75 6d 61 74 74 72 73 3b 0a 0a 09 43 41 = numattrs;...CA 10620 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 10630 46 28 22 52 65 74 75 72 6e 69 6e 67 20 25 6c 75 F("Returning %lu 10640 20 6f 62 6a 65 63 74 73 20 28 25 70 29 2e 22 2c objects (%p).", 10650 20 6e 75 6d 61 74 74 72 73 2c 20 72 65 74 76 61 numattrs, retva 10660 6c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 l);...return(ret 10670 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 val);.}..static 10680 76 6f 69 64 20 63 61 63 6b 65 79 5f 66 72 65 65 void cackey_free 10690 5f 69 64 65 6e 74 69 74 69 65 73 28 73 74 72 75 _identities(stru 106a0 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 ct cackey_identi 106b0 74 79 20 2a 69 64 65 6e 74 69 74 69 65 73 2c 20 ty *identities, 106c0 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 unsigned long id 106d0 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 20 entities_count) 106e0 7b 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 20 {..CK_ATTRIBUTE 106f0 2a 63 75 72 72 5f 61 74 74 72 3b 0a 09 75 6e 73 *curr_attr;..uns 10700 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 5f 69 64 igned long id_id 10710 78 2c 20 61 74 74 72 5f 69 64 78 3b 0a 0a 09 69 x, attr_idx;...i 10720 66 20 28 69 64 65 6e 74 69 74 69 65 73 20 3d 3d f (identities == 10730 20 4e 55 4c 4c 20 7c 7c 20 69 64 65 6e 74 69 74 NULL || identit 10740 69 65 73 5f 63 6f 75 6e 74 20 3d 3d 20 30 29 20 ies_count == 0) 10750 7b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a {...return;..}.. 10760 09 66 6f 72 20 28 69 64 5f 69 64 78 20 3d 20 30 .for (id_idx = 0 10770 3b 20 69 64 5f 69 64 78 20 3c 20 69 64 65 6e 74 ; id_idx < ident 10780 69 74 69 65 73 5f 63 6f 75 6e 74 3b 20 69 64 5f ities_count; id_ 10790 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 69 idx++) {...if (i 107a0 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 dentities[id_idx 107b0 5d 2e 61 74 74 72 69 62 75 74 65 73 29 20 7b 0a ].attributes) {. 107c0 09 09 09 66 6f 72 20 28 61 74 74 72 5f 69 64 78 ...for (attr_idx 107d0 20 3d 20 30 3b 20 61 74 74 72 5f 69 64 78 20 3c = 0; attr_idx < 107e0 20 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 identities[id_i 107f0 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 5f 63 dx].attributes_c 10800 6f 75 6e 74 3b 20 61 74 74 72 5f 69 64 78 2b 2b ount; attr_idx++ 10810 29 20 7b 0a 09 09 09 09 63 75 72 72 5f 61 74 74 ) {.....curr_att 10820 72 20 3d 20 26 69 64 65 6e 74 69 74 69 65 73 5b r = &identities[ 10830 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 id_idx].attribut 10840 65 73 5b 61 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 es[attr_idx];... 10850 09 09 09 69 66 20 28 63 75 72 72 5f 61 74 74 72 ...if (curr_attr 10860 2d 3e 70 56 61 6c 75 65 29 20 7b 0a 09 09 09 09 ->pValue) {..... 10870 09 66 72 65 65 28 63 75 72 72 5f 61 74 74 72 2d .free(curr_attr- 10880 3e 70 56 61 6c 75 65 29 3b 0a 09 09 09 09 7d 0a >pValue);.....}. 10890 09 09 09 7d 0a 0a 09 09 09 66 72 65 65 28 69 64 ...}.....free(id 108a0 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d entities[id_idx] 108b0 2e 61 74 74 72 69 62 75 74 65 73 29 3b 0a 09 09 .attributes);... 108c0 7d 0a 09 7d 0a 0a 09 66 72 65 65 28 69 64 65 6e }..}...free(iden 108d0 74 69 74 69 65 73 29 3b 0a 7d 0a 0a 73 74 61 74 tities);.}..stat 108e0 69 63 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 ic struct cackey 108f0 5f 69 64 65 6e 74 69 74 79 20 2a 63 61 63 6b 65 _identity *cacke 10900 79 5f 72 65 61 64 5f 69 64 65 6e 74 69 74 69 65 y_read_identitie 10910 73 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f s(struct cackey_ 10920 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 slot *slot, unsi 10930 67 6e 65 64 20 6c 6f 6e 67 20 2a 69 64 73 5f 66 gned long *ids_f 10940 6f 75 6e 64 29 20 7b 0a 09 73 74 72 75 63 74 20 ound) {..struct 10950 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e cackey_pcsc_iden 10960 74 69 74 79 20 2a 70 63 73 63 5f 69 64 65 6e 74 tity *pcsc_ident 10970 69 74 69 65 73 3b 0a 09 73 74 72 75 63 74 20 63 ities;..struct c 10980 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 2a ackey_identity * 10990 69 64 65 6e 74 69 74 69 65 73 3b 0a 09 75 6e 73 identities;..uns 109a0 69 67 6e 65 64 20 6c 6f 6e 67 20 6e 75 6d 5f 69 igned long num_i 109b0 64 73 2c 20 69 64 5f 69 64 78 2c 20 63 75 72 72 ds, id_idx, curr 109c0 5f 69 64 5f 74 79 70 65 3b 0a 09 75 6e 73 69 67 _id_type;..unsig 109d0 6e 65 64 20 6c 6f 6e 67 20 6e 75 6d 5f 63 65 72 ned long num_cer 109e0 74 73 2c 20 63 65 72 74 5f 69 64 78 3b 0a 0a 09 ts, cert_idx;... 109f0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 10a00 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 10a10 0a 09 69 66 20 28 69 64 73 5f 66 6f 75 6e 64 20 ..if (ids_found 10a20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 10a30 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 10a40 28 22 45 72 72 6f 72 2e 20 20 69 64 73 5f 66 6f ("Error. ids_fo 10a50 75 6e 64 20 69 73 20 4e 55 4c 4c 22 29 3b 0a 0a und is NULL");.. 10a60 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a ..return(NULL);. 10a70 09 7d 0a 0a 09 70 63 73 63 5f 69 64 65 6e 74 69 .}...pcsc_identi 10a80 74 69 65 73 20 3d 20 63 61 63 6b 65 79 5f 72 65 ties = cackey_re 10a90 61 64 5f 63 65 72 74 73 28 73 6c 6f 74 2c 20 4e ad_certs(slot, N 10aa0 55 4c 4c 2c 20 26 6e 75 6d 5f 63 65 72 74 73 29 ULL, &num_certs) 10ab0 3b 0a 09 69 66 20 28 70 63 73 63 5f 69 64 65 6e ;..if (pcsc_iden 10ac0 74 69 74 69 65 73 20 21 3d 20 4e 55 4c 4c 29 20 tities != NULL) 10ad0 7b 0a 09 09 2f 2a 20 43 6f 6e 76 65 72 74 20 6e {.../* Convert n 10ae0 75 6d 62 65 72 20 6f 66 20 43 65 72 74 73 20 74 umber of Certs t 10af0 6f 20 6e 75 6d 62 65 72 20 6f 66 20 6f 62 6a 65 o number of obje 10b00 63 74 73 20 2a 2f 0a 09 09 6e 75 6d 5f 69 64 73 cts */...num_ids 10b10 20 3d 20 28 43 4b 4f 5f 50 52 49 56 41 54 45 5f = (CKO_PRIVATE_ 10b20 4b 45 59 20 2d 20 43 4b 4f 5f 43 45 52 54 49 46 KEY - CKO_CERTIF 10b30 49 43 41 54 45 20 2b 20 31 29 20 2a 20 6e 75 6d ICATE + 1) * num 10b40 5f 63 65 72 74 73 3b 0a 0a 09 09 69 64 65 6e 74 _certs;....ident 10b50 69 74 69 65 73 20 3d 20 6d 61 6c 6c 6f 63 28 6e ities = malloc(n 10b60 75 6d 5f 69 64 73 20 2a 20 73 69 7a 65 6f 66 28 um_ids * sizeof( 10b70 2a 69 64 65 6e 74 69 74 69 65 73 29 29 3b 0a 0a *identities));.. 10b80 09 09 69 64 5f 69 64 78 20 3d 20 30 3b 0a 09 09 ..id_idx = 0;... 10b90 66 6f 72 20 28 63 65 72 74 5f 69 64 78 20 3d 20 for (cert_idx = 10ba0 30 3b 20 63 65 72 74 5f 69 64 78 20 3c 20 6e 75 0; cert_idx < nu 10bb0 6d 5f 63 65 72 74 73 3b 20 63 65 72 74 5f 69 64 m_certs; cert_id 10bc0 78 2b 2b 29 20 7b 0a 09 09 09 66 6f 72 20 28 63 x++) {....for (c 10bd0 75 72 72 5f 69 64 5f 74 79 70 65 20 3d 20 43 4b urr_id_type = CK 10be0 4f 5f 43 45 52 54 49 46 49 43 41 54 45 3b 20 63 O_CERTIFICATE; c 10bf0 75 72 72 5f 69 64 5f 74 79 70 65 20 3c 3d 20 43 urr_id_type <= C 10c00 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 3b 20 KO_PRIVATE_KEY; 10c10 63 75 72 72 5f 69 64 5f 74 79 70 65 2b 2b 29 20 curr_id_type++) 10c20 7b 0a 09 09 09 09 69 64 65 6e 74 69 74 69 65 73 {.....identities 10c30 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 [id_idx].attribu 10c40 74 65 73 20 3d 20 63 61 63 6b 65 79 5f 67 65 74 tes = cackey_get 10c50 5f 61 74 74 72 69 62 75 74 65 73 28 63 75 72 72 _attributes(curr 10c60 5f 69 64 5f 74 79 70 65 2c 20 26 70 63 73 63 5f _id_type, &pcsc_ 10c70 69 64 65 6e 74 69 74 69 65 73 5b 63 65 72 74 5f identities[cert_ 10c80 69 64 78 5d 2c 20 63 65 72 74 5f 69 64 78 2c 20 idx], cert_idx, 10c90 26 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 &identities[id_i 10ca0 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 5f 63 dx].attributes_c 10cb0 6f 75 6e 74 29 3b 0a 0a 09 09 09 09 69 66 20 28 ount);......if ( 10cc0 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 identities[id_id 10cd0 78 5d 2e 61 74 74 72 69 62 75 74 65 73 20 3d 3d x].attributes == 10ce0 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 09 69 64 NULL) {......id 10cf0 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d entities[id_idx] 10d00 2e 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e .attributes_coun 10d10 74 20 3d 20 30 3b 0a 09 09 09 09 7d 0a 0a 09 09 t = 0;.....}.... 10d20 09 09 69 64 5f 69 64 78 2b 2b 3b 0a 09 09 09 7d ..id_idx++;....} 10d30 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 66 ...}....cackey_f 10d40 72 65 65 5f 63 65 72 74 73 28 70 63 73 63 5f 69 ree_certs(pcsc_i 10d50 64 65 6e 74 69 74 69 65 73 2c 20 6e 75 6d 5f 63 dentities, num_c 10d60 65 72 74 73 2c 20 31 29 3b 0a 0a 09 09 2a 69 64 erts, 1);....*id 10d70 73 5f 66 6f 75 6e 64 20 3d 20 6e 75 6d 5f 69 64 s_found = num_id 10d80 73 3b 0a 09 09 72 65 74 75 72 6e 28 69 64 65 6e s;...return(iden 10d90 74 69 74 69 65 73 29 3b 0a 09 7d 0a 0a 09 2a 69 tities);..}...*i 10da0 64 73 5f 66 6f 75 6e 64 20 3d 20 30 3b 0a 09 72 ds_found = 0;..r 10db0 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 7d 0a 0a eturn(NULL);.}.. 10dc0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 10dd0 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 49 6e 69 74 ON(CK_RV, C_Init 10de0 69 61 6c 69 7a 65 29 28 43 4b 5f 56 4f 49 44 5f ialize)(CK_VOID_ 10df0 50 54 52 20 70 49 6e 69 74 41 72 67 73 29 20 7b PTR pInitArgs) { 10e00 0a 09 43 4b 5f 43 5f 49 4e 49 54 49 41 4c 49 5a ..CK_C_INITIALIZ 10e10 45 5f 41 52 47 53 20 43 4b 5f 50 54 52 20 61 72 E_ARGS CK_PTR ar 10e20 67 73 3b 0a 09 75 69 6e 74 33 32 5f 74 20 69 64 gs;..uint32_t id 10e30 78 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 69 6e x;..int mutex_in 10e40 69 74 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 it_ret;...CACKEY 10e50 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 10e60 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 10e70 70 49 6e 69 74 41 72 67 73 20 21 3d 20 4e 55 4c pInitArgs != NUL 10e80 4c 29 20 7b 0a 09 09 61 72 67 73 20 3d 20 70 49 L) {...args = pI 10e90 6e 69 74 41 72 67 73 3b 0a 09 09 6d 65 6d 63 70 nitArgs;...memcp 10ea0 79 28 26 63 61 63 6b 65 79 5f 61 72 67 73 2c 20 y(&cackey_args, 10eb0 61 72 67 73 2c 20 73 69 7a 65 6f 66 28 63 61 63 args, sizeof(cac 10ec0 6b 65 79 5f 61 72 67 73 29 29 3b 0a 0a 09 09 69 key_args));....i 10ed0 66 20 28 61 72 67 73 2d 3e 43 72 65 61 74 65 4d f (args->CreateM 10ee0 75 74 65 78 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 utex == NULL || 10ef0 61 72 67 73 2d 3e 44 65 73 74 72 6f 79 4d 75 74 args->DestroyMut 10f00 65 78 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 ex == NULL || ar 10f10 67 73 2d 3e 4c 6f 63 6b 4d 75 74 65 78 20 3d 3d gs->LockMutex == 10f20 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 55 NULL || args->U 10f30 6e 6c 6f 63 6b 4d 75 74 65 78 20 3d 3d 20 4e 55 nlockMutex == NU 10f40 4c 4c 29 20 7b 0a 09 09 09 69 66 20 28 61 72 67 LL) {....if (arg 10f50 73 2d 3e 43 72 65 61 74 65 4d 75 74 65 78 20 21 s->CreateMutex ! 10f60 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e = NULL || args-> 10f70 44 65 73 74 72 6f 79 4d 75 74 65 78 20 21 3d 20 DestroyMutex != 10f80 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 4c 6f NULL || args->Lo 10f90 63 6b 4d 75 74 65 78 20 21 3d 20 4e 55 4c 4c 20 ckMutex != NULL 10fa0 7c 7c 20 61 72 67 73 2d 3e 55 6e 6c 6f 63 6b 4d || args->UnlockM 10fb0 75 74 65 78 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a utex != NULL) {. 10fc0 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 10fd0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 10fe0 53 6f 6d 65 2c 20 62 75 74 20 6e 6f 74 20 41 6c Some, but not Al 10ff0 6c 20 74 68 72 65 61 64 69 6e 67 20 70 72 69 6d l threading prim 11000 69 74 69 76 65 73 20 70 72 6f 76 69 64 65 64 2e itives provided. 11010 22 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 ");......return( 11020 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA 11030 44 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 D);....}...}.... 11040 69 66 20 28 61 72 67 73 2d 3e 70 52 65 73 65 72 if (args->pReser 11050 76 65 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 ved != NULL) {.. 11060 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11070 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 52 RINTF("Error. pR 11080 65 73 65 72 76 65 64 20 69 73 20 6e 6f 74 20 4e eserved is not N 11090 55 4c 4c 2e 22 29 3b 0a 0a 09 09 09 72 65 74 75 ULL.");.....retu 110a0 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 rn(CKR_ARGUMENTS 110b0 5f 42 41 44 29 3b 0a 09 09 7d 0a 09 7d 20 65 6c _BAD);...}..} el 110c0 73 65 20 7b 0a 09 09 63 61 63 6b 65 79 5f 61 72 se {...cackey_ar 110d0 67 73 2e 43 72 65 61 74 65 4d 75 74 65 78 20 3d gs.CreateMutex = 110e0 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 6b 65 79 5f NULL;...cackey_ 110f0 61 72 67 73 2e 44 65 73 74 72 6f 79 4d 75 74 65 args.DestroyMute 11100 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 6b x = NULL;...cack 11110 65 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 ey_args.LockMute 11120 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 6b x = NULL;...cack 11130 65 79 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 ey_args.UnlockMu 11140 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 tex = NULL;...ca 11150 63 6b 65 79 5f 61 72 67 73 2e 66 6c 61 67 73 20 ckey_args.flags 11160 3d 20 30 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 = 0;..}...if (ca 11170 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 11180 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 11190 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 111a0 2e 20 20 41 6c 72 65 61 64 79 20 69 6e 69 74 69 . Already initi 111b0 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 111c0 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 111d0 49 5f 41 4c 52 45 41 44 59 5f 49 4e 49 54 49 41 I_ALREADY_INITIA 111e0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 66 6f 72 LIZED);..}...for 111f0 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c (idx = 0; idx < 11200 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 11210 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 11220 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 11230 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 ns[0])); idx++) 11240 7b 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 {...cackey_sessi 11250 6f 6e 73 5b 69 64 78 5d 2e 61 63 74 69 76 65 20 ons[idx].active 11260 3d 20 30 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 = 0;..}...for (i 11270 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 28 73 dx = 0; idx < (s 11280 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f izeof(cackey_slo 11290 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ts) / sizeof(cac 112a0 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 3b 20 key_slots[0])); 112b0 69 64 78 2b 2b 29 20 7b 0a 09 09 63 61 63 6b 65 idx++) {...cacke 112c0 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 61 63 74 y_slots[idx].act 112d0 69 76 65 20 3d 20 30 3b 0a 09 09 63 61 63 6b 65 ive = 0;...cacke 112e0 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 73 y_slots[idx].pcs 112f0 63 5f 72 65 61 64 65 72 20 3d 20 4e 55 4c 4c 3b c_reader = NULL; 11300 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ...cackey_slots[ 11310 69 64 78 5d 2e 74 72 61 6e 73 61 63 74 69 6f 6e idx].transaction 11320 5f 64 65 70 74 68 20 3d 20 30 3b 0a 09 09 63 61 _depth = 0;...ca 11330 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e ckey_slots[idx]. 11340 73 6c 6f 74 5f 72 65 73 65 74 20 3d 20 30 3b 0a slot_reset = 0;. 11350 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 69 6e 69 74 .}...cackey_init 11360 69 61 6c 69 7a 65 64 20 3d 20 31 3b 0a 0a 09 69 ialized = 1;...i 11370 66 20 28 21 63 61 63 6b 65 79 5f 62 69 67 6c 6f f (!cackey_biglo 11380 63 6b 5f 69 6e 69 74 29 20 7b 0a 09 09 6d 75 74 ck_init) {...mut 11390 65 78 5f 69 6e 69 74 5f 72 65 74 20 3d 20 63 61 ex_init_ret = ca 113a0 63 6b 65 79 5f 6d 75 74 65 78 5f 63 72 65 61 74 ckey_mutex_creat 113b0 65 28 26 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 e(&cackey_bigloc 113c0 6b 29 3b 0a 0a 09 09 69 66 20 28 6d 75 74 65 78 k);....if (mutex 113d0 5f 69 6e 69 74 5f 72 65 74 20 21 3d 20 30 29 20 _init_ret != 0) 113e0 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU 113f0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 11400 20 20 4d 75 74 65 78 20 69 6e 69 74 69 61 6c 69 Mutex initiali 11410 7a 61 74 69 6f 6e 20 66 61 69 6c 65 64 2e 22 29 zation failed.") 11420 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 4b 52 ;.....return(CKR 11430 5f 43 41 4e 54 5f 4c 4f 43 4b 29 3b 0a 09 09 7d _CANT_LOCK);...} 11440 0a 0a 09 09 63 61 63 6b 65 79 5f 62 69 67 6c 6f ....cackey_biglo 11450 63 6b 5f 69 6e 69 74 20 3d 20 31 3b 0a 09 7d 0a ck_init = 1;..}. 11460 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11470 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 11480 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C 11490 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return 114a0 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f (CKR_OK);.}..CK_ 114b0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 114c0 43 4b 5f 52 56 2c 20 43 5f 46 69 6e 61 6c 69 7a CK_RV, C_Finaliz 114d0 65 29 28 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 e)(CK_VOID_PTR p 114e0 52 65 73 65 72 76 65 64 29 20 7b 0a 09 75 69 6e Reserved) {..uin 114f0 74 33 32 5f 74 20 69 64 78 3b 0a 0a 09 43 41 43 t32_t idx;...CAC 11500 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 11510 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 11520 66 20 28 70 52 65 73 65 72 76 65 64 20 21 3d 20 f (pReserved != 11530 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY 11540 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 11550 72 72 6f 72 2e 20 70 52 65 73 65 72 76 65 64 20 rror. pReserved 11560 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a is not NULL.");. 11570 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 11580 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} 11590 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 115a0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 115b0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 115c0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 115d0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 115e0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 115f0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 11600 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 66 IALIZED);..}...f 11610 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 or (idx = 0; idx 11620 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 < (sizeof(cacke 11630 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 y_sessions) / si 11640 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 11650 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b ions[0])); idx++ 11660 29 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 ) {...if (cackey 11670 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 _sessions[idx].a 11680 63 74 69 76 65 29 20 7b 0a 09 09 09 43 5f 43 6c ctive) {....C_Cl 11690 6f 73 65 53 65 73 73 69 6f 6e 28 69 64 78 29 3b oseSession(idx); 116a0 0a 09 09 7d 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 ...}..}...cackey 116b0 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 63 _slots_disconnec 116c0 74 5f 61 6c 6c 28 29 3b 0a 0a 09 66 6f 72 20 28 t_all();...for ( 116d0 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 28 idx = 0; idx < ( 116e0 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c sizeof(cackey_sl 116f0 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 ots) / sizeof(ca 11700 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 3b ckey_slots[0])); 11710 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 idx++) {...if ( 11720 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx 11730 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 29 20 7b ].pcsc_reader) { 11740 0a 09 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f ....free(cackey_ 11750 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f slots[idx].pcsc_ 11760 72 65 61 64 65 72 29 3b 0a 09 09 7d 0a 09 7d 0a reader);...}..}. 11770 0a 09 63 61 63 6b 65 79 5f 70 63 73 63 5f 64 69 ..cackey_pcsc_di 11780 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 0a 09 63 61 sconnect();...ca 11790 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 117a0 20 3d 20 30 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 = 0;...CACKEY_D 117b0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 117c0 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 urning CKR_OK (% 117d0 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 i)", CKR_OK);... 117e0 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a return(CKR_OK);. 117f0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 11800 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 CTION(CK_RV, C_G 11810 65 74 49 6e 66 6f 29 28 43 4b 5f 49 4e 46 4f 5f etInfo)(CK_INFO_ 11820 50 54 52 20 70 49 6e 66 6f 29 20 7b 0a 09 73 74 PTR pInfo) {..st 11830 61 74 69 63 20 43 4b 5f 55 54 46 38 43 48 41 52 atic CK_UTF8CHAR 11840 20 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 5b manufacturerID[ 11850 5d 20 3d 20 22 55 2e 53 2e 20 47 6f 76 65 72 6e ] = "U.S. Govern 11860 6d 65 6e 74 22 3b 0a 09 73 74 61 74 69 63 20 43 ment";..static C 11870 4b 5f 55 54 46 38 43 48 41 52 20 6c 69 62 72 61 K_UTF8CHAR libra 11880 72 79 44 65 73 63 72 69 70 74 69 6f 6e 5b 5d 20 ryDescription[] 11890 3d 20 22 43 41 43 4b 65 79 22 3b 0a 0a 09 43 41 = "CACKey";...CA 118a0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 118b0 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 118c0 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c if (pInfo == NUL 118d0 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 L) {...CACKEY_DE 118e0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 118f0 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c r. pInfo is NULL 11900 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 11910 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD 11920 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 11930 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 11940 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 11950 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 11960 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 11970 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 11980 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 11990 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 119a0 7d 0a 0a 09 70 49 6e 66 6f 2d 3e 63 72 79 70 74 }...pInfo->crypt 119b0 6f 6b 69 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 okiVersion.major 119c0 20 3d 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 = ((CACKEY_CRYP 119d0 54 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 TOKI_VERSION_COD 119e0 45 29 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 E) >> 16) & 0xff 119f0 3b 0a 09 70 49 6e 66 6f 2d 3e 63 72 79 70 74 6f ;..pInfo->crypto 11a00 6b 69 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 kiVersion.minor 11a10 3d 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54 = ((CACKEY_CRYPT 11a20 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 OKI_VERSION_CODE 11a30 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a ) >> 8) & 0xff;. 11a40 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e ..memset(pInfo-> 11a50 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 manufacturerID, 11a60 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 ' ', sizeof(pInf 11a70 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 o->manufacturerI 11a80 44 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e D));..memcpy(pIn 11a90 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 fo->manufacturer 11aa0 49 44 2c 20 6d 61 6e 75 66 61 63 74 75 72 65 72 ID, manufacturer 11ab0 49 44 2c 20 73 69 7a 65 6f 66 28 6d 61 6e 75 66 ID, sizeof(manuf 11ac0 61 63 74 75 72 65 72 49 44 29 20 2d 20 31 29 3b acturerID) - 1); 11ad0 0a 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 ...pInfo->flags 11ae0 3d 20 30 78 30 30 3b 0a 0a 09 6d 65 6d 73 65 74 = 0x00;...memset 11af0 28 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 44 (pInfo->libraryD 11b00 65 73 63 72 69 70 74 69 6f 6e 2c 20 27 20 27 2c escription, ' ', 11b10 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6c sizeof(pInfo->l 11b20 69 62 72 61 72 79 44 65 73 63 72 69 70 74 69 6f ibraryDescriptio 11b30 6e 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e n));..memcpy(pIn 11b40 66 6f 2d 3e 6c 69 62 72 61 72 79 44 65 73 63 72 fo->libraryDescr 11b50 69 70 74 69 6f 6e 2c 20 6c 69 62 72 61 72 79 44 iption, libraryD 11b60 65 73 63 72 69 70 74 69 6f 6e 2c 20 73 69 7a 65 escription, size 11b70 6f 66 28 6c 69 62 72 61 72 79 44 65 73 63 72 69 of(libraryDescri 11b80 70 74 69 6f 6e 29 20 2d 20 31 29 3b 0a 0a 09 70 ption) - 1);...p 11b90 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 56 65 72 Info->libraryVer 11ba0 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 61 sion.major = (ca 11bb0 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 ckey_getversion( 11bc0 29 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b ) >> 16) & 0xff; 11bd0 0a 09 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 ..pInfo->library 11be0 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 Version.minor = 11bf0 28 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 (cackey_getversi 11c00 6f 6e 28 29 20 3e 3e 20 38 29 20 26 20 30 78 66 on() >> 8) & 0xf 11c10 66 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 f;...CACKEY_DEBU 11c20 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 11c30 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 11c40 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret 11c50 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}.. 11c60 2f 2a 0a 20 2a 20 50 72 6f 63 65 73 73 20 6c 69 /*. * Process li 11c70 73 74 20 6f 66 20 72 65 61 64 65 72 73 2c 20 61 st of readers, a 11c80 6e 64 20 63 72 65 61 74 65 20 6d 61 70 70 69 6e nd create mappin 11c90 67 20 62 65 74 77 65 65 6e 20 72 65 61 64 65 72 g between reader 11ca0 20 6e 61 6d 65 20 61 6e 64 20 73 6c 6f 74 20 49 name and slot I 11cb0 44 0a 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f D. */.CK_DEFINE_ 11cc0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 11cd0 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 29 28 43 C_GetSlotList)(C 11ce0 4b 5f 42 42 4f 4f 4c 20 74 6f 6b 65 6e 50 72 65 K_BBOOL tokenPre 11cf0 73 65 6e 74 2c 20 43 4b 5f 53 4c 4f 54 5f 49 44 sent, CK_SLOT_ID 11d00 5f 50 54 52 20 70 53 6c 6f 74 4c 69 73 74 2c 20 _PTR pSlotList, 11d10 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 11d20 43 6f 75 6e 74 29 20 7b 0a 09 69 6e 74 20 6d 75 Count) {..int mu 11d30 74 65 78 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 tex_retval;..int 11d40 20 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 pcsc_connect_re 11d50 74 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 63 6f 75 t;..CK_ULONG cou 11d60 6e 74 2c 20 73 6c 6f 74 5f 63 6f 75 6e 74 20 3d nt, slot_count = 11d70 20 30 2c 20 63 75 72 72 73 6c 6f 74 3b 0a 09 63 0, currslot;..c 11d80 68 61 72 20 2a 70 63 73 63 5f 72 65 61 64 65 72 har *pcsc_reader 11d90 73 2c 20 2a 70 63 73 63 5f 72 65 61 64 65 72 73 s, *pcsc_readers 11da0 5f 73 2c 20 2a 70 63 73 63 5f 72 65 61 64 65 72 _s, *pcsc_reader 11db0 73 5f 65 3b 0a 09 44 57 4f 52 44 20 70 63 73 63 s_e;..DWORD pcsc 11dc0 5f 72 65 61 64 65 72 73 5f 6c 65 6e 3b 0a 09 4c _readers_len;..L 11dd0 4f 4e 47 20 73 63 61 72 64 5f 6c 69 73 74 72 65 ONG scard_listre 11de0 61 64 65 72 73 5f 72 65 74 3b 0a 09 73 69 7a 65 aders_ret;..size 11df0 5f 74 20 63 75 72 72 5f 72 65 61 64 65 72 5f 6c _t curr_reader_l 11e00 65 6e 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 en;...CACKEY_DEB 11e10 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 11e20 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 75 6c 43 d.");...if (pulC 11e30 6f 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a ount == NULL) {. 11e40 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11e50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 75 RINTF("Error. pu 11e60 6c 43 6f 75 6e 74 20 69 73 20 4e 55 4c 4c 2e 22 lCount is NULL." 11e70 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 11e80 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b _ARGUMENTS_BAD); 11e90 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ..}...if (!cacke 11ea0 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 11eb0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 11ec0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 11ed0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 11ee0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 11ef0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 11f00 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 11f10 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 11f20 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f cackey_mutex_lo 11f30 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 11f40 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 11f50 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 11f60 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 11f70 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 NTF("Error. Loc 11f80 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 11f90 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 11fa0 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 11fb0 0a 0a 09 2f 2a 20 43 6c 65 61 72 20 6c 69 73 74 .../* Clear list 11fc0 20 6f 66 20 73 6c 6f 74 73 20 2a 2f 0a 09 69 66 of slots */..if 11fd0 20 28 70 53 6c 6f 74 4c 69 73 74 29 20 7b 0a 09 (pSlotList) {.. 11fe0 09 2f 2a 20 4f 6e 6c 79 20 75 70 64 61 74 65 20 ./* Only update 11ff0 74 68 65 20 6c 69 73 74 20 6f 66 20 73 6c 6f 74 the list of slot 12000 73 20 69 66 20 77 65 20 61 72 65 20 61 63 74 75 s if we are actu 12010 61 6c 6c 79 20 62 65 69 6e 67 20 73 75 70 70 6c ally being suppl 12020 79 20 74 68 65 20 73 6c 6f 74 20 69 6e 66 6f 72 y the slot infor 12030 6d 61 74 69 6f 6e 20 2a 2f 0a 09 09 63 61 63 6b mation */...cack 12040 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e ey_slots_disconn 12050 65 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 66 6f ect_all();....fo 12060 72 20 28 63 75 72 72 73 6c 6f 74 20 3d 20 30 3b r (currslot = 0; 12070 20 63 75 72 72 73 6c 6f 74 20 3c 20 28 73 69 7a currslot < (siz 12080 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 eof(cackey_slots 12090 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke 120a0 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 3b 20 63 75 y_slots[0])); cu 120b0 72 72 73 6c 6f 74 2b 2b 29 20 7b 0a 09 09 09 69 rrslot++) {....i 120c0 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b f (cackey_slots[ 120d0 63 75 72 72 73 6c 6f 74 5d 2e 70 63 73 63 5f 72 currslot].pcsc_r 120e0 65 61 64 65 72 29 20 7b 0a 09 09 09 09 66 72 65 eader) {.....fre 120f0 65 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 e(cackey_slots[c 12100 75 72 72 73 6c 6f 74 5d 2e 70 63 73 63 5f 72 65 urrslot].pcsc_re 12110 61 64 65 72 29 3b 0a 0a 09 09 09 09 63 61 63 6b ader);......cack 12120 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f ey_slots[currslo 12130 74 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 20 3d t].pcsc_reader = 12140 20 4e 55 4c 4c 3b 0a 09 09 09 7d 0a 0a 09 09 09 NULL;....}..... 12150 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 cackey_slots[cur 12160 72 73 6c 6f 74 5d 2e 61 63 74 69 76 65 20 3d 20 rslot].active = 12170 30 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 2f 2a 20 44 0;...}..}.../* D 12180 65 74 65 72 6d 69 6e 65 20 6c 69 73 74 20 6f 66 etermine list of 12190 20 72 65 61 64 65 72 73 20 2a 2f 0a 09 70 63 73 readers */..pcs 121a0 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 3d 20 c_connect_ret = 121b0 63 61 63 6b 65 79 5f 70 63 73 63 5f 63 6f 6e 6e cackey_pcsc_conn 121c0 65 63 74 28 29 3b 0a 09 69 66 20 28 70 63 73 63 ect();..if (pcsc 121d0 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 21 3d 20 _connect_ret != 121e0 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK 121f0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 12200 55 47 5f 50 52 49 4e 54 46 28 22 43 6f 6e 6e 65 UG_PRINTF("Conne 12210 63 74 69 6f 6e 20 74 6f 20 50 43 2f 53 43 20 66 ction to PC/SC f 12220 61 69 6c 65 64 2c 20 61 73 73 75 6d 69 6e 67 20 ailed, assuming 12230 6e 6f 20 73 6c 6f 74 73 22 29 3b 0a 0a 09 09 73 no slots");....s 12240 6c 6f 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 lot_count = 0;.. 12250 7d 20 65 6c 73 65 20 7b 0a 09 09 70 63 73 63 5f } else {...pcsc_ 12260 72 65 61 64 65 72 73 5f 6c 65 6e 20 3d 20 30 3b readers_len = 0; 12270 0a 0a 09 09 73 63 61 72 64 5f 6c 69 73 74 72 65 ....scard_listre 12280 61 64 65 72 73 5f 72 65 74 20 3d 20 53 43 61 72 aders_ret = SCar 12290 64 4c 69 73 74 52 65 61 64 65 72 73 28 2a 63 61 dListReaders(*ca 122a0 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 ckey_pcsc_handle 122b0 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 26 70 , NULL, NULL, &p 122c0 63 73 63 5f 72 65 61 64 65 72 73 5f 6c 65 6e 29 csc_readers_len) 122d0 3b 0a 09 09 69 66 20 28 73 63 61 72 64 5f 6c 69 ;...if (scard_li 122e0 73 74 72 65 61 64 65 72 73 5f 72 65 74 20 3d 3d streaders_ret == 122f0 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 SCARD_S_SUCCESS 12300 20 26 26 20 70 63 73 63 5f 72 65 61 64 65 72 73 && pcsc_readers 12310 5f 6c 65 6e 20 21 3d 20 30 29 20 7b 0a 09 09 09 _len != 0) {.... 12320 70 63 73 63 5f 72 65 61 64 65 72 73 20 3d 20 6d pcsc_readers = m 12330 61 6c 6c 6f 63 28 70 63 73 63 5f 72 65 61 64 65 alloc(pcsc_reade 12340 72 73 5f 6c 65 6e 29 3b 0a 09 09 09 70 63 73 63 rs_len);....pcsc 12350 5f 72 65 61 64 65 72 73 5f 73 20 3d 20 70 63 73 _readers_s = pcs 12360 63 5f 72 65 61 64 65 72 73 3b 0a 0a 09 09 09 73 c_readers;.....s 12370 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 card_listreaders 12380 5f 72 65 74 20 3d 20 53 43 61 72 64 4c 69 73 74 _ret = SCardList 12390 52 65 61 64 65 72 73 28 2a 63 61 63 6b 65 79 5f Readers(*cackey_ 123a0 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 4e 55 4c pcsc_handle, NUL 123b0 4c 2c 20 70 63 73 63 5f 72 65 61 64 65 72 73 2c L, pcsc_readers, 123c0 20 26 70 63 73 63 5f 72 65 61 64 65 72 73 5f 6c &pcsc_readers_l 123d0 65 6e 29 3b 0a 09 09 09 69 66 20 28 73 63 61 72 en);....if (scar 123e0 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 d_listreaders_re 123f0 74 20 3d 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 t == SCARD_S_SUC 12400 43 45 53 53 29 20 7b 0a 09 09 09 09 70 63 73 63 CESS) {.....pcsc 12410 5f 72 65 61 64 65 72 73 5f 65 20 3d 20 70 63 73 _readers_e = pcs 12420 63 5f 72 65 61 64 65 72 73 20 2b 20 70 63 73 63 c_readers + pcsc 12430 5f 72 65 61 64 65 72 73 5f 6c 65 6e 3b 0a 0a 09 _readers_len;... 12440 09 09 09 63 75 72 72 73 6c 6f 74 20 3d 20 30 3b ...currslot = 0; 12450 0a 09 09 09 09 77 68 69 6c 65 20 28 70 63 73 63 .....while (pcsc 12460 5f 72 65 61 64 65 72 73 20 3c 20 70 63 73 63 5f _readers < pcsc_ 12470 72 65 61 64 65 72 73 5f 65 29 20 7b 0a 09 09 09 readers_e) {.... 12480 09 09 63 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 ..curr_reader_le 12490 6e 20 3d 20 73 74 72 6c 65 6e 28 70 63 73 63 5f n = strlen(pcsc_ 124a0 72 65 61 64 65 72 73 29 3b 0a 0a 09 09 09 09 09 readers);....... 124b0 69 66 20 28 28 70 63 73 63 5f 72 65 61 64 65 72 if ((pcsc_reader 124c0 73 20 2b 20 63 75 72 72 5f 72 65 61 64 65 72 5f s + curr_reader_ 124d0 6c 65 6e 29 20 3e 20 70 63 73 63 5f 72 65 61 64 len) > pcsc_read 124e0 65 72 73 5f 65 29 20 7b 0a 09 09 09 09 09 09 62 ers_e) {.......b 124f0 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 reak;......}.... 12500 09 09 09 69 66 20 28 63 75 72 72 5f 72 65 61 64 ...if (curr_read 12510 65 72 5f 6c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 er_len == 0) {.. 12520 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 .....break;..... 12530 09 7d 0a 0a 09 09 09 09 09 69 66 20 28 63 75 72 .}.......if (cur 12540 72 73 6c 6f 74 20 3e 3d 20 28 73 69 7a 65 6f 66 rslot >= (sizeof 12550 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f (cackey_slots) / 12560 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s 12570 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 09 lots[0]))) {.... 12580 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 12590 50 52 49 4e 54 46 28 22 46 6f 75 6e 64 20 6d 6f PRINTF("Found mo 125a0 72 65 20 72 65 61 64 65 72 73 20 74 68 61 6e 20 re readers than 125b0 73 6c 6f 74 73 20 61 72 65 20 61 76 61 69 6c 61 slots are availa 125c0 62 6c 65 21 22 29 3b 0a 0a 09 09 09 09 09 09 62 ble!");........b 125d0 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 reak;......}.... 125e0 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 125f0 50 52 49 4e 54 46 28 22 46 6f 75 6e 64 20 72 65 PRINTF("Found re 12600 61 64 65 72 3a 20 25 73 22 2c 20 70 63 73 63 5f ader: %s", pcsc_ 12610 72 65 61 64 65 72 73 29 3b 0a 0a 09 09 09 09 09 readers);....... 12620 2f 2a 20 4f 6e 6c 79 20 75 70 64 61 74 65 20 74 /* Only update t 12630 68 65 20 6c 69 73 74 20 6f 66 20 73 6c 6f 74 73 he list of slots 12640 20 69 66 20 77 65 20 61 72 65 20 61 63 74 75 61 if we are actua 12650 6c 6c 79 20 62 65 69 6e 67 20 73 75 70 70 6c 79 lly being supply 12660 20 74 68 65 20 73 6c 6f 74 20 69 6e 66 6f 72 6d the slot inform 12670 61 74 69 6f 6e 20 2a 2f 0a 09 09 09 09 09 69 66 ation */......if 12680 20 28 70 53 6c 6f 74 4c 69 73 74 29 20 7b 0a 09 (pSlotList) {.. 12690 09 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 .....cackey_slot 126a0 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 61 63 74 69 s[currslot].acti 126b0 76 65 20 3d 20 31 3b 0a 09 09 09 09 09 09 63 61 ve = 1;.......ca 126c0 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 ckey_slots[currs 126d0 6c 6f 74 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 lot].pcsc_reader 126e0 20 3d 20 73 74 72 64 75 70 28 70 63 73 63 5f 72 = strdup(pcsc_r 126f0 65 61 64 65 72 73 29 3b 0a 09 09 09 09 09 09 63 eaders);.......c 12700 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 ackey_slots[curr 12710 73 6c 6f 74 5d 2e 70 63 73 63 5f 63 61 72 64 5f slot].pcsc_card_ 12720 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a 09 connected = 0;.. 12730 09 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 .....cackey_slot 12740 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 74 72 61 6e s[currslot].tran 12750 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3d 20 saction_depth = 12760 30 3b 0a 09 09 09 09 09 09 63 61 63 6b 65 79 5f 0;.......cackey_ 12770 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e slots[currslot]. 12780 73 6c 6f 74 5f 72 65 73 65 74 20 3d 20 31 3b 0a slot_reset = 1;. 12790 09 09 09 09 09 7d 0a 09 09 09 09 09 63 75 72 72 .....}......curr 127a0 73 6c 6f 74 2b 2b 3b 0a 0a 09 09 09 09 09 70 63 slot++;.......pc 127b0 73 63 5f 72 65 61 64 65 72 73 20 2b 3d 20 63 75 sc_readers += cu 127c0 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e 20 2b 20 rr_reader_len + 127d0 31 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 1;.....}......if 127e0 20 28 63 75 72 72 73 6c 6f 74 20 3e 20 30 29 20 (currslot > 0) 127f0 7b 0a 09 09 09 09 09 73 6c 6f 74 5f 63 6f 75 6e {......slot_coun 12800 74 20 3d 20 63 75 72 72 73 6c 6f 74 3b 0a 09 09 t = currslot;... 12810 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a ..}....} else {. 12820 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 12830 5f 50 52 49 4e 54 46 28 22 53 65 63 6f 6e 64 20 _PRINTF("Second 12840 63 61 6c 6c 20 74 6f 20 53 43 61 72 64 4c 69 73 call to SCardLis 12850 74 52 65 61 64 65 72 73 20 66 61 69 6c 65 64 2c tReaders failed, 12860 20 72 65 74 75 72 6e 20 25 73 2f 25 6c 69 22 2c return %s/%li", 12870 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 CACKEY_DEBUG_FU 12880 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 NC_SCARDERR_TO_S 12890 54 52 28 73 63 61 72 64 5f 6c 69 73 74 72 65 61 TR(scard_listrea 128a0 64 65 72 73 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 ders_ret), (long 128b0 29 20 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 ) scard_listread 128c0 65 72 73 5f 72 65 74 29 3b 0a 09 09 09 7d 0a 0a ers_ret);....}.. 128d0 09 09 09 66 72 65 65 28 70 63 73 63 5f 72 65 61 ...free(pcsc_rea 128e0 64 65 72 73 5f 73 29 3b 0a 09 09 7d 20 65 6c 73 ders_s);...} els 128f0 65 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 e {....CACKEY_DE 12900 42 55 47 5f 50 52 49 4e 54 46 28 22 46 69 72 73 BUG_PRINTF("Firs 12910 74 20 63 61 6c 6c 20 74 6f 20 53 43 61 72 64 4c t call to SCardL 12920 69 73 74 52 65 61 64 65 72 73 20 66 61 69 6c 65 istReaders faile 12930 64 2c 20 72 65 74 75 72 6e 20 25 73 2f 25 6c 69 d, return %s/%li 12940 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ", CACKEY_DEBUG_ 12950 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f FUNC_SCARDERR_TO 12960 5f 53 54 52 28 73 63 61 72 64 5f 6c 69 73 74 72 _STR(scard_listr 12970 65 61 64 65 72 73 5f 72 65 74 29 2c 20 28 6c 6f eaders_ret), (lo 12980 6e 67 29 20 73 63 61 72 64 5f 6c 69 73 74 72 65 ng) scard_listre 12990 61 64 65 72 73 5f 72 65 74 29 3b 0a 09 09 7d 0a aders_ret);...}. 129a0 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 .}...mutex_retva 129b0 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 129c0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 129d0 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 129e0 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 129f0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 12a00 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 12a10 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c Unlocking fail 12a20 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 12a30 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 12a40 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 53 OR);..}...if (pS 12a50 6c 6f 74 4c 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 lotList == NULL) 12a60 20 7b 0a 09 09 2a 70 75 6c 43 6f 75 6e 74 20 3d {...*pulCount = 12a70 20 73 6c 6f 74 5f 63 6f 75 6e 74 3b 0a 0a 09 09 slot_count;.... 12a80 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 12a90 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 12aa0 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR 12ab0 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 _OK);....return( 12ac0 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 63 6f CKR_OK);..}...co 12ad0 75 6e 74 20 3d 20 2a 70 75 6c 43 6f 75 6e 74 3b unt = *pulCount; 12ae0 0a 09 69 66 20 28 63 6f 75 6e 74 20 3c 20 73 6c ..if (count < sl 12af0 6f 74 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 43 41 ot_count) {...CA 12b00 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 12b10 46 28 22 45 72 72 6f 72 2e 20 55 73 65 72 20 61 F("Error. User a 12b20 6c 6c 6f 63 61 74 65 64 20 25 6c 75 20 65 6e 74 llocated %lu ent 12b30 72 69 65 73 2c 20 62 75 74 20 77 65 20 68 61 76 ries, but we hav 12b40 65 20 25 6c 75 20 65 6e 74 72 69 65 73 2e 22 2c e %lu entries.", 12b50 20 63 6f 75 6e 74 2c 20 73 6c 6f 74 5f 63 6f 75 count, slot_cou 12b60 6e 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 nt);....return(C 12b70 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d KR_BUFFER_TOO_SM 12b80 41 4c 4c 29 3b 09 0a 09 7d 0a 0a 09 66 6f 72 20 ALL);...}...for 12b90 28 63 75 72 72 73 6c 6f 74 20 3d 20 30 3b 20 63 (currslot = 0; c 12ba0 75 72 72 73 6c 6f 74 20 3c 20 73 6c 6f 74 5f 63 urrslot < slot_c 12bb0 6f 75 6e 74 3b 20 63 75 72 72 73 6c 6f 74 2b 2b ount; currslot++ 12bc0 29 20 7b 0a 09 09 70 53 6c 6f 74 4c 69 73 74 5b ) {...pSlotList[ 12bd0 63 75 72 72 73 6c 6f 74 5d 20 3d 20 63 75 72 72 currslot] = curr 12be0 73 6c 6f 74 3b 0a 09 7d 0a 0a 09 2a 70 75 6c 43 slot;..}...*pulC 12bf0 6f 75 6e 74 20 3d 20 73 6c 6f 74 5f 63 6f 75 6e ount = slot_coun 12c00 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 t;...CACKEY_DEBU 12c10 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 12c20 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 2e ing CKR_OK (%i). 12c30 20 20 46 6f 75 6e 64 20 25 6c 75 20 72 65 61 64 Found %lu read 12c40 65 72 73 2e 22 2c 20 43 4b 52 5f 4f 4b 2c 20 28 ers.", CKR_OK, ( 12c50 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 unsigned long) s 12c60 6c 6f 74 5f 63 6f 75 6e 74 29 3b 0a 0a 09 72 65 lot_count);...re 12c70 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 turn(CKR_OK);... 12c80 74 6f 6b 65 6e 50 72 65 73 65 6e 74 20 3d 20 74 tokenPresent = t 12c90 6f 6b 65 6e 50 72 65 73 65 6e 74 3b 20 2f 2a 20 okenPresent; /* 12ca0 53 75 70 72 65 73 73 20 75 6e 75 73 65 64 20 76 Supress unused v 12cb0 61 72 69 61 62 6c 65 20 77 61 72 6e 69 6e 67 20 ariable warning 12cc0 2a 2f 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f */.}..CK_DEFINE_ 12cd0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 12ce0 43 5f 47 65 74 53 6c 6f 74 49 6e 66 6f 29 28 43 C_GetSlotInfo)(C 12cf0 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 K_SLOT_ID slotID 12d00 2c 20 43 4b 5f 53 4c 4f 54 5f 49 4e 46 4f 5f 50 , CK_SLOT_INFO_P 12d10 54 52 20 70 49 6e 66 6f 29 20 7b 0a 09 73 74 61 TR pInfo) {..sta 12d20 74 69 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20 tic CK_UTF8CHAR 12d30 73 6c 6f 74 44 65 73 63 72 69 70 74 69 6f 6e 5b slotDescription[ 12d40 5d 20 3d 20 22 43 41 43 4b 65 79 20 53 6c 6f 74 ] = "CACKey Slot 12d50 22 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 ";..int mutex_re 12d60 74 76 61 6c 3b 0a 09 69 6e 74 20 62 79 74 65 73 tval;..int bytes 12d70 5f 74 6f 5f 63 6f 70 79 3b 0a 0a 09 43 41 43 4b _to_copy;...CACK 12d80 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 12d90 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 12da0 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 (pInfo == NULL) 12db0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 12dc0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 12dd0 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 pInfo is NULL." 12de0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 12df0 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b _ARGUMENTS_BAD); 12e00 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ..}...if (!cacke 12e10 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 12e20 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 12e30 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 12e40 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 12e50 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 12e60 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 12e70 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 12e80 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 3c 20 30 ..if (slotID < 0 12e90 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 28 73 || slotID >= (s 12ea0 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f izeof(cackey_slo 12eb0 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ts) / sizeof(cac 12ec0 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 20 key_slots[0]))) 12ed0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 12ee0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 12ef0 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 Invalid slot req 12f00 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 6f 75 uested (%lu), ou 12f10 74 73 69 64 65 20 6f 66 20 76 61 6c 69 64 20 72 tside of valid r 12f20 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a ange", slotID);. 12f30 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c ...return(CKR_SL 12f40 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a OT_ID_INVALID);. 12f50 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 .}...mutex_retva 12f60 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 12f70 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 _lock(cackey_big 12f80 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 12f90 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 12fa0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 12fb0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 12fc0 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 Locking failed." 12fd0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 12fe0 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 12ff0 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 ..}...if (cackey 13000 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 _slots[slotID].a 13010 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09 09 ctive == 0) {... 13020 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 13030 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 NTF("Error. Inva 13040 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 lid slot request 13050 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 6e ed (%lu), slot n 13060 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 ot currently act 13070 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a ive", slotID);.. 13080 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 13090 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 130a0 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72 6e lock);....return 130b0 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 (CKR_SLOT_ID_INV 130c0 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 ALID);..}...mute 130d0 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 130e0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 130f0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 13100 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 13110 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 13120 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 13130 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 "Error. Unlocki 13140 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 13150 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 13160 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 13170 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 73 .memset(pInfo->s 13180 6c 6f 74 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 lotDescription, 13190 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 ' ', sizeof(pInf 131a0 6f 2d 3e 73 6c 6f 74 44 65 73 63 72 69 70 74 69 o->slotDescripti 131b0 6f 6e 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 on));..memcpy(pI 131c0 6e 66 6f 2d 3e 73 6c 6f 74 44 65 73 63 72 69 70 nfo->slotDescrip 131d0 74 69 6f 6e 2c 20 73 6c 6f 74 44 65 73 63 72 69 tion, slotDescri 131e0 70 74 69 6f 6e 2c 20 73 69 7a 65 6f 66 28 73 6c ption, sizeof(sl 131f0 6f 74 44 65 73 63 72 69 70 74 69 6f 6e 29 20 2d otDescription) - 13200 20 31 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 1);...memset(pI 13210 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 nfo->manufacture 13220 72 49 44 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 rID, ' ', sizeof 13230 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 (pInfo->manufact 13240 75 72 65 72 49 44 29 29 3b 0a 0a 09 62 79 74 65 urerID));...byte 13250 73 5f 74 6f 5f 63 6f 70 79 20 3d 20 73 74 72 6c s_to_copy = strl 13260 65 6e 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b en(cackey_slots[ 13270 73 6c 6f 74 49 44 5d 2e 70 63 73 63 5f 72 65 61 slotID].pcsc_rea 13280 64 65 72 29 3b 0a 09 69 66 20 28 73 69 7a 65 6f der);..if (sizeo 13290 66 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 f(pInfo->manufac 132a0 74 75 72 65 72 49 44 29 20 3c 20 62 79 74 65 73 turerID) < bytes 132b0 5f 74 6f 5f 63 6f 70 79 29 20 7b 0a 09 09 62 79 _to_copy) {...by 132c0 74 65 73 5f 74 6f 5f 63 6f 70 79 20 3d 20 73 69 tes_to_copy = si 132d0 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 zeof(pInfo->manu 132e0 66 61 63 74 75 72 65 72 49 44 29 3b 0a 09 7d 0a facturerID);..}. 132f0 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6d .memcpy(pInfo->m 13300 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 63 anufacturerID, c 13310 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 ackey_slots[slot 13320 49 44 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 2c ID].pcsc_reader, 13330 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 3b bytes_to_copy); 13340 0a 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 ...pInfo->flags 13350 3d 20 30 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 = 0;...if (cacke 13360 79 5f 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 28 y_token_present( 13370 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c &cackey_slots[sl 13380 6f 74 49 44 5d 29 20 3d 3d 20 43 41 43 4b 45 59 otID]) == CACKEY 13390 5f 50 43 53 43 5f 53 5f 54 4f 4b 45 4e 50 52 45 _PCSC_S_TOKENPRE 133a0 53 45 4e 54 29 20 7b 0a 09 09 70 49 6e 66 6f 2d SENT) {...pInfo- 133b0 3e 66 6c 61 67 73 20 7c 3d 20 43 4b 46 5f 54 4f >flags |= CKF_TO 133c0 4b 45 4e 5f 50 52 45 53 45 4e 54 3b 0a 09 7d 0a KEN_PRESENT;..}. 133d0 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 ..pInfo->hardwar 133e0 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d eVersion.major = 133f0 20 28 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 (cackey_getvers 13400 69 6f 6e 28 29 20 3e 3e 20 31 36 29 20 26 20 30 ion() >> 16) & 0 13410 78 66 66 3b 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 xff;..pInfo->har 13420 64 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e dwareVersion.min 13430 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 65 74 or = (cackey_get 13440 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 38 29 20 version() >> 8) 13450 26 20 30 78 66 66 3b 0a 0a 09 70 49 6e 66 6f 2d & 0xff;...pInfo- 13460 3e 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f 6e >firmwareVersion 13470 2e 6d 61 6a 6f 72 20 3d 20 30 78 30 30 3b 0a 09 .major = 0x00;.. 13480 70 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 72 65 56 pInfo->firmwareV 13490 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 30 ersion.minor = 0 134a0 78 30 30 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 x00;...CACKEY_DE 134b0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 134c0 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 134d0 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 )", CKR_OK);...r 134e0 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 134f0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 13500 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 TION(CK_RV, C_Ge 13510 74 54 6f 6b 65 6e 49 6e 66 6f 29 28 43 4b 5f 53 tTokenInfo)(CK_S 13520 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 43 LOT_ID slotID, C 13530 4b 5f 54 4f 4b 45 4e 5f 49 4e 46 4f 5f 50 54 52 K_TOKEN_INFO_PTR 13540 20 70 49 6e 66 6f 29 20 7b 0a 09 73 74 61 74 69 pInfo) {..stati 13550 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20 6d 61 c CK_UTF8CHAR ma 13560 6e 75 66 61 63 74 75 72 65 72 49 44 5b 5d 20 3d nufacturerID[] = 13570 20 22 55 2e 53 2e 20 47 6f 76 65 72 6e 6d 65 6e "U.S. Governmen 13580 74 22 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 t";..static CK_U 13590 54 46 38 43 48 41 52 20 64 65 66 61 75 6c 74 4c TF8CHAR defaultL 135a0 61 62 65 6c 5b 5d 20 3d 20 22 55 6e 6b 6e 6f 77 abel[] = "Unknow 135b0 6e 20 54 6f 6b 65 6e 22 3b 0a 09 73 74 61 74 69 n Token";..stati 135c0 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20 6d 6f c CK_UTF8CHAR mo 135d0 64 65 6c 5b 5d 20 3d 20 22 43 41 43 20 54 6f 6b del[] = "CAC Tok 135e0 65 6e 22 3b 0a 09 73 74 72 75 63 74 20 63 61 63 en";..struct cac 135f0 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 key_pcsc_identit 13600 79 20 2a 70 63 73 63 5f 69 64 65 6e 74 69 74 69 y *pcsc_identiti 13610 65 73 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f es;..unsigned lo 13620 6e 67 20 6e 75 6d 5f 63 65 72 74 73 3b 0a 09 73 ng num_certs;..s 13630 73 69 7a 65 5f 74 20 6c 61 62 65 6c 5f 72 65 74 size_t label_ret 13640 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 ;..int mutex_ret 13650 76 61 6c 3b 0a 09 69 6e 74 20 75 73 65 5f 64 65 val;..int use_de 13660 66 61 75 6c 74 5f 6c 61 62 65 6c 3b 0a 0a 09 43 fault_label;...C 13670 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 13680 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 13690 09 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 .if (pInfo == NU 136a0 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 136b0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 136c0 6f 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c or. pInfo is NUL 136d0 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 L.");....return( 136e0 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA 136f0 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 D);..}...if (!ca 13700 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 13710 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 13720 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 13730 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 13740 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 13750 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 13760 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 13770 09 7d 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 .}...if (slotID 13780 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d < 0 || slotID >= 13790 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 137a0 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 slots) / sizeof( 137b0 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 cackey_slots[0]) 137c0 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE 137d0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 137e0 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 r. Invalid slot 137f0 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c requested (%lu), 13800 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 outside of vali 13810 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 d range", slotID 13820 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 13830 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 _SLOT_ID_INVALID 13840 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 );..}...mutex_re 13850 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 13860 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 13870 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 13880 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 13890 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 138a0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 138b0 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 138c0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 138d0 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 138e0 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 R);..}...if (cac 138f0 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 key_slots[slotID 13900 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b ].active == 0) { 13910 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 13920 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 PRINTF("Error. I 13930 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 nvalid slot requ 13940 65 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f ested (%lu), slo 13950 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 t not currently 13960 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 active", slotID) 13970 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 ;....cackey_mute 13980 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 13990 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 biglock);....ret 139a0 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f urn(CKR_SLOT_ID_ 139b0 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 139c0 66 20 28 63 61 63 6b 65 79 5f 74 6f 6b 65 6e 5f f (cackey_token_ 139d0 70 72 65 73 65 6e 74 28 26 63 61 63 6b 65 79 5f present(&cackey_ 139e0 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 29 20 21 slots[slotID]) ! 139f0 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f = CACKEY_PCSC_S_ 13a00 54 4f 4b 45 4e 50 52 45 53 45 4e 54 29 20 7b 0a TOKENPRESENT) {. 13a10 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 13a20 52 49 4e 54 46 28 22 4e 6f 20 74 6f 6b 65 6e 20 RINTF("No token 13a30 69 73 20 70 72 65 73 65 6e 74 20 69 6e 20 73 6c is present in sl 13a40 6f 74 49 44 20 3d 20 25 6c 75 22 2c 20 73 6c 6f otID = %lu", slo 13a50 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f tID);....cackey_ 13a60 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 13a70 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 13a80 09 72 65 74 75 72 6e 28 43 4b 52 5f 54 4f 4b 45 .return(CKR_TOKE 13a90 4e 5f 4e 4f 54 5f 50 52 45 53 45 4e 54 29 3b 0a N_NOT_PRESENT);. 13aa0 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 .}...mutex_retva 13ab0 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 13ac0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 13ad0 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 13ae0 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 13af0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 13b00 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 13b10 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c Unlocking fail 13b20 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 13b30 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 13b40 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 44 65 74 OR);..}.../* Det 13b50 65 72 6d 69 6e 65 20 74 6f 6b 65 6e 20 6c 61 62 ermine token lab 13b60 65 6c 20 66 72 6f 6d 20 63 65 72 74 69 66 69 63 el from certific 13b70 61 74 65 73 20 2a 2f 0a 09 6d 65 6d 73 65 74 28 ates */..memset( 13b80 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20 27 20 pInfo->label, ' 13b90 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d ', sizeof(pInfo- 13ba0 3e 6c 61 62 65 6c 29 29 3b 0a 09 75 73 65 5f 64 >label));..use_d 13bb0 65 66 61 75 6c 74 5f 6c 61 62 65 6c 20 3d 20 31 efault_label = 1 13bc0 3b 0a 0a 09 70 63 73 63 5f 69 64 65 6e 74 69 74 ;...pcsc_identit 13bd0 69 65 73 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 ies = cackey_rea 13be0 64 5f 63 65 72 74 73 28 26 63 61 63 6b 65 79 5f d_certs(&cackey_ 13bf0 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2c 20 4e slots[slotID], N 13c00 55 4c 4c 2c 20 26 6e 75 6d 5f 63 65 72 74 73 29 ULL, &num_certs) 13c10 3b 0a 09 69 66 20 28 70 63 73 63 5f 69 64 65 6e ;..if (pcsc_iden 13c20 74 69 74 69 65 73 20 21 3d 20 4e 55 4c 4c 29 20 tities != NULL) 13c30 7b 0a 09 09 69 66 20 28 6e 75 6d 5f 63 65 72 74 {...if (num_cert 13c40 73 20 3e 20 30 29 20 7b 0a 09 09 09 6c 61 62 65 s > 0) {....labe 13c50 6c 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 70 l_ret = cackey_p 13c60 63 73 63 5f 69 64 65 6e 74 69 74 79 5f 74 6f 5f csc_identity_to_ 13c70 6c 61 62 65 6c 28 70 63 73 63 5f 69 64 65 6e 74 label(pcsc_ident 13c80 69 74 69 65 73 2c 20 70 49 6e 66 6f 2d 3e 6c 61 ities, pInfo->la 13c90 62 65 6c 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 bel, sizeof(pInf 13ca0 6f 2d 3e 6c 61 62 65 6c 29 29 3b 0a 09 09 09 69 o->label));....i 13cb0 66 20 28 6c 61 62 65 6c 5f 72 65 74 20 3e 20 30 f (label_ret > 0 13cc0 29 20 7b 0a 09 09 09 09 75 73 65 5f 64 65 66 61 ) {.....use_defa 13cd0 75 6c 74 5f 6c 61 62 65 6c 20 3d 20 30 3b 0a 09 ult_label = 0;.. 13ce0 09 09 7d 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 ..}...}....cacke 13cf0 79 5f 66 72 65 65 5f 63 65 72 74 73 28 70 63 73 y_free_certs(pcs 13d00 63 5f 69 64 65 6e 74 69 74 69 65 73 2c 20 6e 75 c_identities, nu 13d10 6d 5f 63 65 72 74 73 2c 20 31 29 3b 0a 09 7d 0a m_certs, 1);..}. 13d20 0a 09 69 66 20 28 75 73 65 5f 64 65 66 61 75 6c ..if (use_defaul 13d30 74 5f 6c 61 62 65 6c 29 20 7b 0a 09 09 6d 65 6d t_label) {...mem 13d40 63 70 79 28 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c cpy(pInfo->label 13d50 2c 20 64 65 66 61 75 6c 74 4c 61 62 65 6c 2c 20 , defaultLabel, 13d60 73 69 7a 65 6f 66 28 64 65 66 61 75 6c 74 4c 61 sizeof(defaultLa 13d70 62 65 6c 29 20 2d 20 31 29 3b 0a 09 7d 0a 0a 09 bel) - 1);..}... 13d80 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d 61 memset(pInfo->ma 13d90 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 27 20 nufacturerID, ' 13da0 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d ', sizeof(pInfo- 13db0 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 >manufacturerID) 13dc0 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f );..memcpy(pInfo 13dd0 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 ->manufacturerID 13de0 2c 20 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 , manufacturerID 13df0 2c 20 73 69 7a 65 6f 66 28 6d 61 6e 75 66 61 63 , sizeof(manufac 13e00 74 75 72 65 72 49 44 29 20 2d 20 31 29 3b 0a 0a turerID) - 1);.. 13e10 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d .memset(pInfo->m 13e20 6f 64 65 6c 2c 20 27 20 27 2c 20 73 69 7a 65 6f odel, ' ', sizeo 13e30 66 28 70 49 6e 66 6f 2d 3e 6d 6f 64 65 6c 29 29 f(pInfo->model)) 13e40 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d ;..memcpy(pInfo- 13e50 3e 6d 6f 64 65 6c 2c 20 6d 6f 64 65 6c 2c 20 73 >model, model, s 13e60 69 7a 65 6f 66 28 6d 6f 64 65 6c 29 20 2d 20 31 izeof(model) - 1 13e70 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 );...memset(pInf 13e80 6f 2d 3e 73 65 72 69 61 6c 4e 75 6d 62 65 72 2c o->serialNumber, 13e90 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e ' ', sizeof(pIn 13ea0 66 6f 2d 3e 73 65 72 69 61 6c 4e 75 6d 62 65 72 fo->serialNumber 13eb0 29 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e ));...memset(pIn 13ec0 66 6f 2d 3e 75 74 63 54 69 6d 65 2c 20 27 20 27 fo->utcTime, ' ' 13ed0 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e , sizeof(pInfo-> 13ee0 75 74 63 54 69 6d 65 29 29 3b 0a 0a 09 70 49 6e utcTime));...pIn 13ef0 66 6f 2d 3e 68 61 72 64 77 61 72 65 56 65 72 73 fo->hardwareVers 13f00 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 61 63 ion.major = (cac 13f10 6b 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 key_getversion() 13f20 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a >> 16) & 0xff;. 13f30 09 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 65 .pInfo->hardware 13f40 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 Version.minor = 13f50 28 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 (cackey_getversi 13f60 6f 6e 28 29 20 3e 3e 20 38 29 20 26 20 30 78 66 on() >> 8) & 0xf 13f70 66 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66 69 72 6d f;...pInfo->firm 13f80 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f wareVersion.majo 13f90 72 20 3d 20 30 78 30 30 3b 0a 09 70 49 6e 66 6f r = 0x00;..pInfo 13fa0 2d 3e 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f ->firmwareVersio 13fb0 6e 2e 6d 69 6e 6f 72 20 3d 20 30 78 30 30 3b 0a n.minor = 0x00;. 13fc0 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d ..pInfo->flags = 13fd0 20 43 4b 46 5f 57 52 49 54 45 5f 50 52 4f 54 45 CKF_WRITE_PROTE 13fe0 43 54 45 44 20 7c 20 43 4b 46 5f 55 53 45 52 5f CTED | CKF_USER_ 13ff0 50 49 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 44 20 PIN_INITIALIZED 14000 7c 20 43 4b 46 5f 54 4f 4b 45 4e 5f 49 4e 49 54 | CKF_TOKEN_INIT 14010 49 41 4c 49 5a 45 44 20 7c 20 43 4b 46 5f 4c 4f IALIZED | CKF_LO 14020 47 49 4e 5f 52 45 51 55 49 52 45 44 3b 0a 0a 09 GIN_REQUIRED;... 14030 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 53 65 73 73 pInfo->ulMaxSess 14040 69 6f 6e 43 6f 75 6e 74 20 3d 20 28 73 69 7a 65 ionCount = (size 14050 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 14060 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ns) / sizeof(cac 14070 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 key_sessions[0]) 14080 29 20 2d 20 31 3b 0a 09 70 49 6e 66 6f 2d 3e 75 ) - 1;..pInfo->u 14090 6c 53 65 73 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 lSessionCount = 140a0 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 CK_UNAVAILABLE_I 140b0 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e NFORMATION;..pIn 140c0 66 6f 2d 3e 75 6c 4d 61 78 52 77 53 65 73 73 69 fo->ulMaxRwSessi 140d0 6f 6e 43 6f 75 6e 74 20 3d 20 30 3b 0a 09 70 49 onCount = 0;..pI 140e0 6e 66 6f 2d 3e 75 6c 52 77 53 65 73 73 69 6f 6e nfo->ulRwSession 140f0 43 6f 75 6e 74 20 3d 20 43 4b 5f 55 4e 41 56 41 Count = CK_UNAVA 14100 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 ILABLE_INFORMATI 14110 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 ON;..pInfo->ulMa 14120 78 50 69 6e 4c 65 6e 20 3d 20 31 32 38 3b 0a 09 xPinLen = 128;.. 14130 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 50 69 6e 4c pInfo->ulMinPinL 14140 65 6e 20 3d 20 30 3b 0a 09 70 49 6e 66 6f 2d 3e en = 0;..pInfo-> 14150 75 6c 54 6f 74 61 6c 50 75 62 6c 69 63 4d 65 6d ulTotalPublicMem 14160 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c ory = CK_UNAVAIL 14170 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e ABLE_INFORMATION 14180 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 46 72 65 65 ;..pInfo->ulFree 14190 50 75 62 6c 69 63 4d 65 6d 6f 72 79 20 3d 20 43 PublicMemory = C 141a0 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e K_UNAVAILABLE_IN 141b0 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 FORMATION;..pInf 141c0 6f 2d 3e 75 6c 54 6f 74 61 6c 50 72 69 76 61 74 o->ulTotalPrivat 141d0 65 4d 65 6d 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 eMemory = CK_UNA 141e0 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 VAILABLE_INFORMA 141f0 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c TION;..pInfo->ul 14200 46 72 65 65 50 72 69 76 61 74 65 4d 65 6d 6f 72 FreePrivateMemor 14210 79 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 y = CK_UNAVAILAB 14220 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a LE_INFORMATION;. 14230 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 14240 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 14250 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C 14260 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return 14270 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f (CKR_OK);.}..CK_ 14280 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 14290 43 4b 5f 52 56 2c 20 43 5f 57 61 69 74 46 6f 72 CK_RV, C_WaitFor 142a0 53 6c 6f 74 45 76 65 6e 74 29 28 43 4b 5f 46 4c SlotEvent)(CK_FL 142b0 41 47 53 20 66 6c 61 67 73 2c 20 43 4b 5f 53 4c AGS flags, CK_SL 142c0 4f 54 5f 49 44 5f 50 54 52 20 70 53 6c 6f 74 49 OT_ID_PTR pSlotI 142d0 44 2c 20 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 D, CK_VOID_PTR p 142e0 52 65 73 65 72 76 65 64 29 20 7b 0a 09 43 41 43 Reserved) {..CAC 142f0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 14300 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 14310 66 20 28 70 52 65 73 65 72 76 65 64 20 21 3d 20 f (pReserved != 14320 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY 14330 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 14340 72 72 6f 72 2e 20 70 52 65 73 65 72 76 65 64 20 rror. pReserved 14350 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a is not NULL.");. 14360 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 14370 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} 14380 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 14390 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 143a0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 143b0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 143c0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 143d0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 143e0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 143f0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 14400 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 14410 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 14420 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 14430 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 14440 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 14450 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 14460 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 14470 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 14480 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 14490 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 144a0 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 6d 4c 69 C_GetMechanismLi 144b0 73 74 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 st)(CK_SLOT_ID s 144c0 6c 6f 74 49 44 2c 20 43 4b 5f 4d 45 43 48 41 4e lotID, CK_MECHAN 144d0 49 53 4d 5f 54 59 50 45 5f 50 54 52 20 70 4d 65 ISM_TYPE_PTR pMe 144e0 63 68 61 6e 69 73 6d 4c 69 73 74 2c 20 43 4b 5f chanismList, CK_ 144f0 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 43 6f 75 ULONG_PTR pulCou 14500 6e 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 nt) {..CACKEY_DE 14510 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 14520 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 14530 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 14540 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 14550 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 14560 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 14570 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 14580 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 14590 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 145a0 09 7d 0a 0a 09 69 66 20 28 70 75 6c 43 6f 75 6e .}...if (pulCoun 145b0 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 t == NULL) {...C 145c0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 145d0 54 46 28 22 45 72 72 6f 72 2e 20 20 70 75 6c 43 TF("Error. pulC 145e0 6f 75 6e 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b ount is NULL."); 145f0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 ....return(CKR_A 14600 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 RGUMENTS_BAD);.. 14610 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 6e 69 }...if (pMechani 14620 73 6d 4c 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 20 smList == NULL) 14630 7b 0a 09 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 {...*pulCount = 14640 33 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 3;....CACKEY_DEB 14650 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 14660 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 14670 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 ", CKR_OK);....r 14680 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 eturn(CKR_OK);.. 14690 7d 0a 0a 09 69 66 20 28 2a 70 75 6c 43 6f 75 6e }...if (*pulCoun 146a0 74 20 3c 20 33 29 20 7b 0a 09 09 43 41 43 4b 45 t < 3) {...CACKE 146b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 146c0 45 72 72 6f 72 2e 20 20 42 75 66 66 65 72 20 74 Error. Buffer t 146d0 6f 6f 20 73 6d 61 6c 6c 2e 22 29 3b 0a 0a 09 09 oo small.");.... 146e0 72 65 74 75 72 6e 28 43 4b 52 5f 42 55 46 46 45 return(CKR_BUFFE 146f0 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 3b 0a 09 7d R_TOO_SMALL);..} 14700 0a 0a 09 70 4d 65 63 68 61 6e 69 73 6d 4c 69 73 ...pMechanismLis 14710 74 5b 30 5d 20 3d 20 43 4b 4d 5f 52 53 41 5f 50 t[0] = CKM_RSA_P 14720 4b 43 53 3b 0a 09 70 4d 65 63 68 61 6e 69 73 6d KCS;..pMechanism 14730 4c 69 73 74 5b 31 5d 20 3d 20 43 4b 4d 5f 53 48 List[1] = CKM_SH 14740 41 31 5f 52 53 41 5f 50 4b 43 53 3b 0a 09 2a 70 A1_RSA_PKCS;..*p 14750 75 6c 43 6f 75 6e 74 20 3d 20 32 3b 0a 0a 09 43 ulCount = 2;...C 14760 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 14770 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 14780 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ 14790 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b OK);...return(CK 147a0 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 R_OK);.}..CK_DEF 147b0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 147c0 52 56 2c 20 43 5f 47 65 74 4d 65 63 68 61 6e 69 RV, C_GetMechani 147d0 73 6d 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f smInfo)(CK_SLOT_ 147e0 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 4d 45 ID slotID, CK_ME 147f0 43 48 41 4e 49 53 4d 5f 54 59 50 45 20 74 79 70 CHANISM_TYPE typ 14800 65 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f e, CK_MECHANISM_ 14810 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 INFO_PTR pInfo) 14820 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 {..int mutex_ret 14830 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 val;...CACKEY_DE 14840 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 14850 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 49 6e ed.");...if (pIn 14860 66 6f 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 fo == NULL) {... 14870 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 14880 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 49 6e 66 NTF("Error. pInf 14890 6f 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 o is NULL.");... 148a0 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 148b0 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 148c0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 148d0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 148e0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 148f0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 14900 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 14910 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 14920 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 14930 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 LIZED);..}...if 14940 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 (slotID < 0 || s 14950 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 lotID >= (sizeof 14960 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f (cackey_slots) / 14970 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s 14980 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 lots[0]))) {...C 14990 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 149a0 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c TF("Error. Inval 149b0 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 id slot requeste 149c0 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 d (%lu), outside 149d0 20 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 of valid range" 149e0 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 , slotID);....re 149f0 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 turn(CKR_SLOT_ID 14a00 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 14a10 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 14a20 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b ackey_mutex_lock 14a30 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 14a40 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 14a50 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 14a60 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 14a70 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 F("Error. Locki 14a80 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 14a90 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 14aa0 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 14ab0 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 .if (cackey_slot 14ac0 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 s[slotID].active 14ad0 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 == 0) {...CACKE 14ae0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 14af0 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 Error. Invalid s 14b00 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 lot requested (% 14b10 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 lu), slot not cu 14b20 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c rrently active", 14b30 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 slotID);....cac 14b40 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 14b50 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 14b60 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 14b70 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 SLOT_ID_INVALID) 14b80 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 14b90 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 14ba0 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 14bb0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 14bc0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 14bd0 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 14be0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 14bf0 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 14c00 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 14c10 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 14c20 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 58 RROR);..}.../* X 14c30 58 58 3a 20 54 68 69 73 20 69 73 20 75 6e 74 65 XX: This is unte 14c40 73 74 65 64 2c 20 61 6e 64 20 66 75 72 74 68 65 sted, and furthe 14c50 72 20 49 27 6d 20 6e 6f 74 20 72 65 61 6c 6c 79 r I'm not really 14c60 20 73 75 72 65 20 69 66 20 74 68 69 73 20 69 73 sure if this is 14c70 20 63 6f 72 72 65 63 74 2e 20 2a 2f 0a 09 73 77 correct. */..sw 14c80 69 74 63 68 20 28 74 79 70 65 29 20 7b 0a 09 09 itch (type) {... 14c90 63 61 73 65 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 case CKM_RSA_PKC 14ca0 53 3a 0a 09 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d S:....pInfo->ulM 14cb0 69 6e 4b 65 79 53 69 7a 65 20 3d 20 35 31 32 3b inKeySize = 512; 14cc0 0a 09 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 ....pInfo->ulMax 14cd0 4b 65 79 53 69 7a 65 20 3d 20 38 31 39 32 3b 0a KeySize = 8192;. 14ce0 09 09 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 ...pInfo->flags 14cf0 3d 20 43 4b 46 5f 48 57 20 7c 20 43 4b 46 5f 45 = CKF_HW | CKF_E 14d00 4e 43 52 59 50 54 20 7c 20 43 4b 46 5f 44 45 43 NCRYPT | CKF_DEC 14d10 52 59 50 54 20 7c 20 43 4b 46 5f 53 49 47 4e 20 RYPT | CKF_SIGN 14d20 7c 20 43 4b 46 5f 56 45 52 49 46 59 3b 0a 09 09 | CKF_VERIFY;... 14d30 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 43 .break;...case C 14d40 4b 4d 5f 52 53 41 5f 58 5f 35 30 39 3a 0a 09 09 KM_RSA_X_509:... 14d50 09 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 .pInfo->ulMinKey 14d60 53 69 7a 65 20 3d 20 35 31 32 3b 0a 09 09 09 70 Size = 512;....p 14d70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 4b 65 79 53 69 Info->ulMaxKeySi 14d80 7a 65 20 3d 20 38 31 39 32 3b 0a 09 09 09 70 49 ze = 8192;....pI 14d90 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 43 4b 46 nfo->flags = CKF 14da0 5f 48 57 20 7c 20 43 4b 46 5f 45 4e 43 52 59 50 _HW | CKF_ENCRYP 14db0 54 20 7c 20 43 4b 46 5f 44 45 43 52 59 50 54 20 T | CKF_DECRYPT 14dc0 7c 20 43 4b 46 5f 53 49 47 4e 20 7c 20 43 4b 46 | CKF_SIGN | CKF 14dd0 5f 56 45 52 49 46 59 3b 0a 09 09 09 62 72 65 61 _VERIFY;....brea 14de0 6b 3b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 53 48 k;...case CKM_SH 14df0 41 31 5f 52 53 41 5f 50 4b 43 53 3a 0a 09 09 09 A1_RSA_PKCS:.... 14e00 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 53 pInfo->ulMinKeyS 14e10 69 7a 65 20 3d 20 35 31 32 3b 0a 09 09 09 70 49 ize = 512;....pI 14e20 6e 66 6f 2d 3e 75 6c 4d 61 78 4b 65 79 53 69 7a nfo->ulMaxKeySiz 14e30 65 20 3d 20 38 31 39 32 3b 0a 09 09 09 70 49 6e e = 8192;....pIn 14e40 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 43 4b 46 5f fo->flags = CKF_ 14e50 48 57 20 7c 20 43 4b 46 5f 53 49 47 4e 20 7c 20 HW | CKF_SIGN | 14e60 43 4b 46 5f 56 45 52 49 46 59 3b 0a 09 09 09 62 CKF_VERIFY;....b 14e70 72 65 61 6b 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 reak;..}...CACKE 14e80 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 14e90 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 14ea0 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b (%i)", CKR_OK); 14eb0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 14ec0 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 64 6f 6e 27 );.}../* We don' 14ed0 74 20 73 75 70 70 6f 72 74 20 74 68 69 73 20 6d t support this m 14ee0 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b 5f 44 45 46 ethod. */.CK_DEF 14ef0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 14f00 52 56 2c 20 43 5f 49 6e 69 74 54 6f 6b 65 6e 29 RV, C_InitToken) 14f10 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 (CK_SLOT_ID slot 14f20 49 44 2c 20 43 4b 5f 55 54 46 38 43 48 41 52 5f ID, CK_UTF8CHAR_ 14f30 50 54 52 20 70 50 69 6e 2c 20 43 4b 5f 55 4c 4f PTR pPin, CK_ULO 14f40 4e 47 20 75 6c 50 69 6e 4c 65 6e 2c 20 43 4b 5f NG ulPinLen, CK_ 14f50 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 4c 61 UTF8CHAR_PTR pLa 14f60 62 65 6c 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 bel) {..CACKEY_D 14f70 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 14f80 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 14f90 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 14fa0 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 14fb0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 14fc0 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 14fd0 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 14fe0 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 14ff0 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 15000 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 15010 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 15020 6e 69 6e 67 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 ning CKR_TOKEN_W 15030 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 20 28 RITE_PROTECTED ( 15040 25 69 29 22 2c 20 43 4b 52 5f 54 4f 4b 45 4e 5f %i)", CKR_TOKEN_ 15050 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 29 WRITE_PROTECTED) 15060 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 54 ;...return(CKR_T 15070 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 OKEN_WRITE_PROTE 15080 43 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 CTED);.}../* We 15090 64 6f 6e 27 74 20 73 75 70 70 6f 72 74 20 74 68 don't support th 150a0 69 73 20 6d 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b is method. */.CK 150b0 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 150c0 28 43 4b 5f 52 56 2c 20 43 5f 49 6e 69 74 50 49 (CK_RV, C_InitPI 150d0 4e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 N)(CK_SESSION_HA 150e0 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 150f0 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 K_UTF8CHAR_PTR p 15100 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c Pin, CK_ULONG ul 15110 50 69 6e 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 PinLen) {..CACKE 15120 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15130 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 15140 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 15150 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 15160 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 15170 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 15180 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 15190 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 151a0 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 151b0 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ 151c0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 151d0 74 75 72 6e 69 6e 67 20 43 4b 52 5f 54 4f 4b 45 turning CKR_TOKE 151e0 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 N_WRITE_PROTECTE 151f0 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 54 4f 4b D (%i)", CKR_TOK 15200 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 EN_WRITE_PROTECT 15210 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK 15220 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 R_TOKEN_WRITE_PR 15230 4f 54 45 43 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 OTECTED);.}../* 15240 57 65 20 64 6f 6e 27 74 20 73 75 70 70 6f 72 74 We don't support 15250 20 74 68 69 73 20 6d 65 74 68 6f 64 2e 20 2a 2f this method. */ 15260 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 15270 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 74 ION(CK_RV, C_Set 15280 50 49 4e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f PIN)(CK_SESSION_ 15290 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 152a0 20 43 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52 CK_UTF8CHAR_PTR 152b0 20 70 4f 6c 64 50 69 6e 2c 20 43 4b 5f 55 4c 4f pOldPin, CK_ULO 152c0 4e 47 20 75 6c 4f 6c 64 50 69 6e 4c 65 6e 2c 20 NG ulOldPinLen, 152d0 43 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 CK_UTF8CHAR_PTR 152e0 70 4e 65 77 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e pNewPin, CK_ULON 152f0 47 20 75 6c 4e 65 77 50 69 6e 4c 65 6e 29 20 7b G ulNewPinLen) { 15300 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 15310 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 15320 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 15330 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 15340 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 15350 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 15360 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 15370 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 15380 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 15390 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 153a0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 153b0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 153c0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 153d0 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 153e0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 153f0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 15400 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 15410 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 15420 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 15430 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 15440 20 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 29 28 C_OpenSession)( 15450 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 CK_SLOT_ID slotI 15460 44 2c 20 43 4b 5f 46 4c 41 47 53 20 66 6c 61 67 D, CK_FLAGS flag 15470 73 2c 20 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 s, CK_VOID_PTR p 15480 41 70 70 6c 69 63 61 74 69 6f 6e 2c 20 43 4b 5f Application, CK_ 15490 4e 4f 54 49 46 59 20 6e 6f 74 69 66 79 2c 20 43 NOTIFY notify, C 154a0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 154b0 5f 50 54 52 20 70 68 53 65 73 73 69 6f 6e 29 20 _PTR phSession) 154c0 7b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 {..unsigned long 154d0 20 69 64 78 3b 0a 09 69 6e 74 20 6d 75 74 65 78 idx;..int mutex 154e0 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 66 6f _retval;..int fo 154f0 75 6e 64 5f 73 65 73 73 69 6f 6e 20 3d 20 30 3b und_session = 0; 15500 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 15510 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 15520 29 3b 0a 0a 09 69 66 20 28 28 66 6c 61 67 73 20 );...if ((flags 15530 26 20 43 4b 46 5f 53 45 52 49 41 4c 5f 53 45 53 & CKF_SERIAL_SES 15540 53 49 4f 4e 29 20 21 3d 20 43 4b 46 5f 53 45 52 SION) != CKF_SER 15550 49 41 4c 5f 53 45 53 53 49 4f 4e 29 20 7b 0a 09 IAL_SESSION) {.. 15560 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 15570 49 4f 4e 5f 50 41 52 41 4c 4c 45 4c 5f 4e 4f 54 ION_PARALLEL_NOT 15580 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 09 7d 0a _SUPPORTED);..}. 15590 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 155a0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 155b0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 155c0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 155d0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 155e0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 155f0 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 15600 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 15610 20 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 (slotID < 0 || 15620 73 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f slotID >= (sizeo 15630 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 f(cackey_slots) 15640 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ 15650 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 slots[0]))) {... 15660 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 15670 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 NTF("Error. Inva 15680 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 lid slot request 15690 65 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 ed (%lu), outsid 156a0 65 20 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 e of valid range 156b0 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 ", slotID);....r 156c0 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 eturn(CKR_SLOT_I 156d0 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a D_INVALID);..}.. 156e0 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 156f0 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 cackey_mutex_loc 15700 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 15710 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 15720 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 15730 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 15740 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b TF("Error. Lock 15750 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 15760 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 15770 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 15780 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f ..if (cackey_slo 15790 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 ts[slotID].activ 157a0 65 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b e == 0) {...CACK 157b0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 157c0 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 "Error. Invalid 157d0 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 slot requested ( 157e0 25 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 %lu), slot not c 157f0 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 urrently active" 15800 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 , slotID);....ca 15810 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 15820 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 15830 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 15840 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 _SLOT_ID_INVALID 15850 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 56 65 72 69 66 );..}.../* Verif 15860 79 20 74 68 61 74 20 74 68 65 20 63 61 72 64 20 y that the card 15870 69 73 20 61 63 74 75 61 6c 6c 79 20 69 6e 20 74 is actually in t 15880 68 65 20 73 6c 6f 74 2e 20 2a 2f 0a 09 2f 2a 20 he slot. */../* 15890 58 58 58 3a 20 43 68 65 63 6b 20 74 6f 20 6d 61 XXX: Check to ma 158a0 6b 65 20 73 75 72 65 20 74 68 69 73 20 69 73 20 ke sure this is 158b0 69 6e 20 74 68 65 20 50 4b 43 53 23 31 31 20 73 in the PKCS#11 s 158c0 70 65 63 69 66 69 63 61 74 69 6f 6e 20 2a 2f 0a pecification */. 158d0 09 69 66 20 28 63 61 63 6b 65 79 5f 74 6f 6b 65 .if (cackey_toke 158e0 6e 5f 70 72 65 73 65 6e 74 28 26 63 61 63 6b 65 n_present(&cacke 158f0 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 29 y_slots[slotID]) 15900 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f != CACKEY_PCSC_ 15910 53 5f 54 4f 4b 45 4e 50 52 45 53 45 4e 54 29 20 S_TOKENPRESENT) 15920 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 15930 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 15940 20 43 61 72 64 20 6e 6f 74 20 70 72 65 73 65 6e Card not presen 15950 74 2e 20 20 52 65 74 75 72 6e 69 6e 67 20 43 4b t. Returning CK 15960 52 5f 44 45 56 49 43 45 5f 52 45 4d 4f 56 45 44 R_DEVICE_REMOVED 15970 22 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 ");....cackey_mu 15980 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 15990 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 y_biglock);....r 159a0 65 74 75 72 6e 28 43 4b 52 5f 44 45 56 49 43 45 eturn(CKR_DEVICE 159b0 5f 52 45 4d 4f 56 45 44 29 3b 0a 09 7d 0a 0a 09 _REMOVED);..}... 159c0 66 6f 72 20 28 69 64 78 20 3d 20 31 3b 20 69 64 for (idx = 1; id 159d0 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b x < (sizeof(cack 159e0 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 159f0 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 15a00 73 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b sions[0])); idx+ 15a10 2b 29 20 7b 0a 09 09 69 66 20 28 21 63 61 63 6b +) {...if (!cack 15a20 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d ey_sessions[idx] 15a30 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 09 66 6f .active) {....fo 15a40 75 6e 64 5f 73 65 73 73 69 6f 6e 20 3d 20 31 3b und_session = 1; 15a50 0a 0a 09 09 09 2a 70 68 53 65 73 73 69 6f 6e 20 .....*phSession 15a60 3d 20 69 64 78 3b 0a 0a 09 09 09 63 61 63 6b 65 = idx;.....cacke 15a70 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. 15a80 61 63 74 69 76 65 20 3d 20 31 3b 0a 09 09 09 63 active = 1;....c 15a90 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 ackey_sessions[i 15aa0 64 78 5d 2e 73 6c 6f 74 49 44 20 3d 20 73 6c 6f dx].slotID = slo 15ab0 74 49 44 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 tID;....cackey_s 15ac0 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 74 61 essions[idx].sta 15ad0 74 65 20 3d 20 43 4b 53 5f 52 4f 5f 50 55 42 4c te = CKS_RO_PUBL 15ae0 49 43 5f 53 45 53 53 49 4f 4e 3b 0a 09 09 09 63 IC_SESSION;....c 15af0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 ackey_sessions[i 15b00 64 78 5d 2e 66 6c 61 67 73 20 3d 20 66 6c 61 67 dx].flags = flag 15b10 73 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 s;....cackey_ses 15b20 73 69 6f 6e 73 5b 69 64 78 5d 2e 75 6c 44 65 76 sions[idx].ulDev 15b30 69 63 65 45 72 72 6f 72 20 3d 20 30 3b 0a 09 09 iceError = 0;... 15b40 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 15b50 5b 69 64 78 5d 2e 70 41 70 70 6c 69 63 61 74 69 [idx].pApplicati 15b60 6f 6e 20 3d 20 70 41 70 70 6c 69 63 61 74 69 6f on = pApplicatio 15b70 6e 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 n;....cackey_ses 15b80 73 69 6f 6e 73 5b 69 64 78 5d 2e 4e 6f 74 69 66 sions[idx].Notif 15b90 79 20 3d 20 6e 6f 74 69 66 79 3b 0a 0a 09 09 09 y = notify;..... 15ba0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 15bb0 69 64 78 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 idx].identities 15bc0 3d 20 4e 55 4c 4c 3b 0a 09 09 09 63 61 63 6b 65 = NULL;....cacke 15bd0 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. 15be0 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 identities_count 15bf0 20 3d 20 30 3b 0a 0a 09 09 09 63 61 63 6b 65 79 = 0;.....cackey 15c00 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 _sessions[idx].s 15c10 65 61 72 63 68 5f 61 63 74 69 76 65 20 3d 20 30 earch_active = 0 15c20 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 ;.....cackey_ses 15c30 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 69 67 6e 5f sions[idx].sign_ 15c40 61 63 74 69 76 65 20 3d 20 30 3b 0a 0a 09 09 09 active = 0;..... 15c50 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 15c60 69 64 78 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 idx].decrypt_act 15c70 69 76 65 20 3d 20 30 3b 0a 0a 09 09 09 63 61 63 ive = 0;.....cac 15c80 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 key_sessions[idx 15c90 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 3d 20 63 ].identities = c 15ca0 61 63 6b 65 79 5f 72 65 61 64 5f 69 64 65 6e 74 ackey_read_ident 15cb0 69 74 69 65 73 28 26 63 61 63 6b 65 79 5f 73 6c ities(&cackey_sl 15cc0 6f 74 73 5b 73 6c 6f 74 49 44 5d 2c 20 26 63 61 ots[slotID], &ca 15cd0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 ckey_sessions[id 15ce0 78 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f x].identities_co 15cf0 75 6e 74 29 3b 0a 0a 0a 09 09 09 62 72 65 61 6b unt);......break 15d00 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 6d 75 74 65 78 ;...}..}...mutex 15d10 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 15d20 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 15d30 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 15d40 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 15d50 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 15d60 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15d70 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e Error. Unlockin 15d80 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 15d90 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 15da0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 15db0 69 66 20 28 21 66 6f 75 6e 64 5f 73 65 73 73 69 if (!found_sessi 15dc0 6f 6e 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 on) {...CACKEY_D 15dd0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 15de0 75 72 6e 69 6e 67 20 43 4b 52 5f 53 45 53 53 49 urning CKR_SESSI 15df0 4f 4e 5f 43 4f 55 4e 54 20 28 25 69 29 22 2c 20 ON_COUNT (%i)", 15e00 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 43 4f 55 4e CKR_SESSION_COUN 15e10 54 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b T);....return(CK 15e20 52 5f 53 45 53 53 49 4f 4e 5f 43 4f 55 4e 54 29 R_SESSION_COUNT) 15e30 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 15e40 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 15e50 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 15e60 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 )", CKR_OK);...r 15e70 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 15e80 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 15e90 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 6c TION(CK_RV, C_Cl 15ea0 6f 73 65 53 65 73 73 69 6f 6e 29 28 43 4b 5f 53 oseSession)(CK_S 15eb0 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 15ec0 65 73 73 69 6f 6e 29 20 7b 0a 09 69 6e 74 20 6d ession) {..int m 15ed0 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 utex_retval;...C 15ee0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 15ef0 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 15f00 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 15f10 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 15f20 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 15f30 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 15f40 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 15f50 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 15f60 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 15f70 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 LIZED);..}...if 15f80 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c (hSession == 0 | 15f90 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 | hSession >= (s 15fa0 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 15fb0 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 sions) / sizeof( 15fc0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 15fd0 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 0]))) {...CACKEY 15fe0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 15ff0 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f rror. Session o 16000 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a ut of range.");. 16010 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 16020 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 16030 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 NVALID);..}...mu 16040 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 16050 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 key_mutex_lock(c 16060 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 16070 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 16080 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 16090 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 160a0 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 "Error. Locking 160b0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 160c0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 160d0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i 160e0 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 160f0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 ons[hSession].ac 16100 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 tive) {...cackey 16110 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 16120 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 16130 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 16140 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 16150 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 ession not activ 16160 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 16170 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 16180 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 16190 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 }...cackey_sessi 161a0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 ons[hSession].ac 161b0 74 69 76 65 20 3d 20 30 3b 0a 09 63 61 63 6b 65 tive = 0;..cacke 161c0 79 5f 66 72 65 65 5f 69 64 65 6e 74 69 74 69 65 y_free_identitie 161d0 73 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e s(cackey_session 161e0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 161f0 74 69 74 69 65 73 2c 20 63 61 63 6b 65 79 5f 73 tities, cackey_s 16200 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 16210 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 ].identities_cou 16220 6e 74 29 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 nt);...mutex_ret 16230 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 16240 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 16250 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 16260 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 16270 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 16280 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 16290 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 162a0 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 162b0 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 162c0 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b RROR);..}...CACK 162d0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 162e0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 162f0 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) 16300 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O 16310 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 K);.}..CK_DEFINE 16320 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 16330 20 43 5f 43 6c 6f 73 65 41 6c 6c 53 65 73 73 69 C_CloseAllSessi 16340 6f 6e 73 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 ons)(CK_SLOT_ID 16350 73 6c 6f 74 49 44 29 20 7b 0a 09 75 69 6e 74 33 slotID) {..uint3 16360 32 5f 74 20 69 64 78 3b 0a 09 69 6e 74 20 6d 75 2_t idx;..int mu 16370 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 tex_retval;...CA 16380 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 16390 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 163a0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 163b0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 163c0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 163d0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 163e0 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 163f0 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 16400 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 16410 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 IZED);..}...if ( 16420 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c slotID < 0 || sl 16430 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 otID >= (sizeof( 16440 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 cackey_slots) / 16450 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c sizeof(cackey_sl 16460 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 ots[0]))) {...CA 16470 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 16480 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 F("Error. Invali 16490 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 d slot requested 164a0 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 (%lu), outside 164b0 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c of valid range", 164c0 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 slotID);....ret 164d0 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f urn(CKR_SLOT_ID_ 164e0 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d INVALID);..}...m 164f0 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 16500 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( 16510 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 16520 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 16530 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 16540 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 16550 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e ("Error. Lockin 16560 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 16570 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 16580 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 16590 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 if (cackey_slots 165a0 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 [slotID].active 165b0 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 == 0) {...CACKEY 165c0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 165d0 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c rror. Invalid sl 165e0 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c ot requested (%l 165f0 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 u), slot not cur 16600 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20 rently active", 16610 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b slotID);....cack 16620 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 16630 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 16640 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 16650 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b LOT_ID_INVALID); 16660 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d ..}...for (idx = 16670 20 30 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 0; idx < (sizeo 16680 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 16690 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 166a0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 ey_sessions[0])) 166b0 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 ; idx++) {...if 166c0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 166d0 5b 69 64 78 5d 2e 61 63 74 69 76 65 29 20 7b 0a [idx].active) {. 166e0 09 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 ...if (cackey_se 166f0 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 6c 6f 74 ssions[idx].slot 16700 49 44 20 21 3d 20 73 6c 6f 74 49 44 29 20 7b 0a ID != slotID) {. 16710 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 ....continue;... 16720 09 7d 0a 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 .}.....cackey_mu 16730 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 16740 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 09 09 43 y_biglock);....C 16750 5f 43 6c 6f 73 65 53 65 73 73 69 6f 6e 28 69 64 _CloseSession(id 16760 78 29 3b 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 x);....cackey_mu 16770 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 16780 62 69 67 6c 6f 63 6b 29 3b 0a 09 09 7d 0a 09 7d biglock);...}..} 16790 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 167a0 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 = cackey_mutex_u 167b0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 167c0 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 167d0 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 167e0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 167f0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 16800 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Unlocking failed 16810 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 16820 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 16830 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 16840 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 16850 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 urning CKR_OK (% 16860 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 i)", CKR_OK);... 16870 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a return(CKR_OK);. 16880 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 16890 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 CTION(CK_RV, C_G 168a0 65 74 53 65 73 73 69 6f 6e 49 6e 66 6f 29 28 43 etSessionInfo)(C 168b0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 168c0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 53 45 hSession, CK_SE 168d0 53 53 49 4f 4e 5f 49 4e 46 4f 5f 50 54 52 20 70 SSION_INFO_PTR p 168e0 49 6e 66 6f 29 20 7b 0a 09 69 6e 74 20 6d 75 74 Info) {..int mut 168f0 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 ex_retval;...CAC 16900 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 16910 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 16920 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c f (pInfo == NULL 16930 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 16940 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 16950 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e . pInfo is NULL. 16960 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 16970 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 R_ARGUMENTS_BAD) 16980 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack 16990 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 169a0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 169b0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 169c0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 169d0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 169e0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 169f0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 16a00 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 ...if (hSession 16a10 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e == 0 || hSession 16a20 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b >= (sizeof(cack 16a30 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 16a40 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 16a50 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 sions[0]))) {... 16a60 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 16a70 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 NTF("Error. Ses 16a80 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 sion out of rang 16a90 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 16aa0 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 16ab0 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 16ac0 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 16ad0 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 16ae0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 16af0 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 16b00 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 16b10 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 16b20 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 16b30 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 16b40 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 16b50 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 16b60 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 16b70 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 16b80 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 on].active) {... 16b90 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 16ba0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 16bb0 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 16bc0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 16bd0 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 or. Session not 16be0 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 active.");..... 16bf0 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 16c00 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 16c10 49 44 29 3b 0a 09 7d 0a 0a 09 70 49 6e 66 6f 2d ID);..}...pInfo- 16c20 3e 73 6c 6f 74 49 44 20 3d 20 63 61 63 6b 65 79 >slotID = cackey 16c30 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 16c40 6f 6e 5d 2e 73 6c 6f 74 49 44 3b 0a 09 70 49 6e on].slotID;..pIn 16c50 66 6f 2d 3e 73 74 61 74 65 20 3d 20 63 61 63 6b fo->state = cack 16c60 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 16c70 73 69 6f 6e 5d 2e 73 74 61 74 65 3b 0a 09 70 49 sion].state;..pI 16c80 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 63 61 63 nfo->flags = cac 16c90 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 16ca0 73 73 69 6f 6e 5d 2e 66 6c 61 67 73 3b 0a 09 70 ssion].flags;..p 16cb0 49 6e 66 6f 2d 3e 75 6c 44 65 76 69 63 65 45 72 Info->ulDeviceEr 16cc0 72 6f 72 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 ror = cackey_ses 16cd0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 16ce0 75 6c 44 65 76 69 63 65 45 72 72 6f 72 3b 0a 0a ulDeviceError;.. 16cf0 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 16d00 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 16d10 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 16d20 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 16d30 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 16d40 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 16d50 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e INTF("Error. Un 16d60 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 locking failed." 16d70 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 16d80 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 16d90 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 16da0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 16db0 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 16dc0 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 16dd0 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 16de0 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 16df0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 ION(CK_RV, C_Get 16e00 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 29 28 OperationState)( 16e10 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 16e20 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 16e30 59 54 45 5f 50 54 52 20 70 4f 70 65 72 61 74 69 YTE_PTR pOperati 16e40 6f 6e 53 74 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e onState, CK_ULON 16e50 47 5f 50 54 52 20 70 75 6c 4f 70 65 72 61 74 69 G_PTR pulOperati 16e60 6f 6e 53 74 61 74 65 4c 65 6e 29 20 7b 0a 09 43 onStateLen) {..C 16e70 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 16e80 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 16e90 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 16ea0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 16eb0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 16ec0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 16ed0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 16ee0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 16ef0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 16f00 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 16f10 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 16f20 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 16f30 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 16f40 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 16f50 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 16f60 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 16f70 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 16f80 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 16f90 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 16fa0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 16fb0 53 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 SetOperationStat 16fc0 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 e)(CK_SESSION_HA 16fd0 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 16fe0 4b 5f 42 59 54 45 5f 50 54 52 20 70 4f 70 65 72 K_BYTE_PTR pOper 16ff0 61 74 69 6f 6e 53 74 61 74 65 2c 20 43 4b 5f 55 ationState, CK_U 17000 4c 4f 4e 47 20 75 6c 4f 70 65 72 61 74 69 6f 6e LONG ulOperation 17010 53 74 61 74 65 4c 65 6e 2c 20 43 4b 5f 4f 42 4a StateLen, CK_OBJ 17020 45 43 54 5f 48 41 4e 44 4c 45 20 68 45 6e 63 72 ECT_HANDLE hEncr 17030 79 70 74 69 6f 6e 4b 65 79 2c 20 43 4b 5f 4f 42 yptionKey, CK_OB 17040 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 41 75 74 JECT_HANDLE hAut 17050 68 65 6e 74 69 63 61 74 69 6f 6e 4b 65 79 29 20 henticationKey) 17060 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 17070 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 17080 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 17090 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 170a0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 170b0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 170c0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 170d0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 170e0 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 170f0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 17100 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 17110 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 17120 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 17130 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 17140 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 17150 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 17160 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 17170 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 17180 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN 17190 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 171a0 2c 20 43 5f 4c 6f 67 69 6e 29 28 43 4b 5f 53 45 , C_Login)(CK_SE 171b0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 171c0 73 73 69 6f 6e 2c 20 43 4b 5f 55 53 45 52 5f 54 ssion, CK_USER_T 171d0 59 50 45 20 75 73 65 72 54 79 70 65 2c 20 43 4b YPE userType, CK 171e0 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 50 _UTF8CHAR_PTR pP 171f0 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 in, CK_ULONG ulP 17200 69 6e 4c 65 6e 29 20 7b 0a 09 69 6e 74 20 6d 75 inLen) {..int mu 17210 74 65 78 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 tex_retval;..int 17220 20 6c 6f 67 69 6e 5f 72 65 74 3b 0a 0a 09 43 41 login_ret;...CA 17230 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 17240 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 17250 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 17260 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 17270 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 17280 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 17290 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 172a0 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 172b0 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 172c0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 IZED);..}...if ( 172d0 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c hSession == 0 || 172e0 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 hSession >= (si 172f0 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 17300 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 ions) / sizeof(c 17310 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 ackey_sessions[0 17320 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ]))) {...CACKEY_ 17330 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 17340 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 ror. Session ou 17350 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 t of range.");.. 17360 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 17370 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 17380 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 VALID);..}...if 17390 28 75 73 65 72 54 79 70 65 20 21 3d 20 43 4b 55 (userType != CKU 173a0 5f 55 53 45 52 29 20 7b 0a 09 09 43 41 43 4b 45 _USER) {...CACKE 173b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 173c0 45 72 72 6f 72 2e 20 20 57 65 20 6f 6e 6c 79 20 Error. We only 173d0 73 75 70 70 6f 72 74 20 55 53 45 52 20 6d 6f 64 support USER mod 173e0 65 2c 20 61 73 6b 65 64 20 66 6f 72 20 25 6c 75 e, asked for %lu 173f0 20 6d 6f 64 65 2e 22 2c 20 28 75 6e 73 69 67 6e mode.", (unsign 17400 65 64 20 6c 6f 6e 67 29 20 75 73 65 72 54 79 70 ed long) userTyp 17410 65 29 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 e)....return(CKR 17420 5f 55 53 45 52 5f 54 59 50 45 5f 49 4e 56 41 4c _USER_TYPE_INVAL 17430 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f ID);..}...mutex_ 17440 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 17450 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 mutex_lock(cacke 17460 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 17470 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 17480 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 17490 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 174a0 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 or. Locking fai 174b0 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 174c0 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 174d0 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 ROR);..}...if (! 174e0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 174f0 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 hSession].active 17500 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 17510 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 17520 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 17530 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 17540 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 17550 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 on not active.") 17560 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 17570 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 17580 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 17590 6c 6f 67 69 6e 5f 72 65 74 20 3d 20 63 61 63 6b login_ret = cack 175a0 65 79 5f 6c 6f 67 69 6e 28 26 63 61 63 6b 65 79 ey_login(&cackey 175b0 5f 73 6c 6f 74 73 5b 63 61 63 6b 65 79 5f 73 65 _slots[cackey_se 175c0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 175d0 2e 73 6c 6f 74 49 44 5d 2c 20 70 50 69 6e 2c 20 .slotID], pPin, 175e0 75 6c 50 69 6e 4c 65 6e 2c 20 4e 55 4c 4c 29 3b ulPinLen, NULL); 175f0 0a 09 69 66 20 28 6c 6f 67 69 6e 5f 72 65 74 20 ..if (login_ret 17600 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 != CACKEY_PCSC_S 17610 5f 4f 4b 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f _OK) {...cackey_ 17620 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 17630 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 17640 09 69 66 20 28 6c 6f 67 69 6e 5f 72 65 74 20 3d .if (login_ret = 17650 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f = CACKEY_PCSC_E_ 17660 4c 4f 43 4b 45 44 29 20 7b 0a 09 09 09 43 41 43 LOCKED) {....CAC 17670 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 17680 28 22 45 72 72 6f 72 2e 20 20 54 6f 6b 65 6e 20 ("Error. Token 17690 69 73 20 6c 6f 63 6b 65 64 2e 22 29 3b 0a 0a 09 is locked.");... 176a0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 50 49 4e ..return(CKR_PIN 176b0 5f 4c 4f 43 4b 45 44 29 3b 0a 09 09 7d 20 65 6c _LOCKED);...} el 176c0 73 65 20 69 66 20 28 6c 6f 67 69 6e 5f 72 65 74 se if (login_ret 176d0 20 3d 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f == CACKEY_PCSC_ 176e0 45 5f 42 41 44 50 49 4e 29 20 7b 0a 09 09 09 43 E_BADPIN) {....C 176f0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 17700 54 46 28 22 45 72 72 6f 72 2e 20 20 49 6e 76 61 TF("Error. Inva 17710 6c 69 64 20 50 49 4e 2e 22 29 3b 0a 0a 09 09 09 lid PIN.");..... 17720 72 65 74 75 72 6e 28 43 4b 52 5f 50 49 4e 5f 49 return(CKR_PIN_I 17730 4e 43 4f 52 52 45 43 54 29 3b 0a 09 09 7d 0a 0a NCORRECT);...}.. 17740 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 17750 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 RINTF("Error. U 17760 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72 20 72 65 74 nknown error ret 17770 75 72 6e 65 64 20 66 72 6f 6d 20 63 61 63 6b 65 urned from cacke 17780 79 5f 6c 6f 67 69 6e 28 29 20 28 25 69 29 22 2c y_login() (%i)", 17790 20 6c 6f 67 69 6e 5f 72 65 74 29 3b 0a 0a 09 09 login_ret);.... 177a0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 177b0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 177c0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 177d0 68 53 65 73 73 69 6f 6e 5d 2e 73 74 61 74 65 20 hSession].state 177e0 3d 20 43 4b 53 5f 52 4f 5f 55 53 45 52 5f 46 55 = CKS_RO_USER_FU 177f0 4e 43 54 49 4f 4e 53 3b 0a 0a 09 6d 75 74 65 78 NCTIONS;...mutex 17800 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 17810 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 17820 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 17830 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 17840 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 17850 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 17860 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e Error. Unlockin 17870 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 17880 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 17890 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 178a0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 178b0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 178c0 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR 178d0 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C 178e0 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 KR_OK);.}..CK_DE 178f0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 17900 5f 52 56 2c 20 43 5f 4c 6f 67 6f 75 74 29 28 43 _RV, C_Logout)(C 17910 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 17920 20 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 69 6e hSession) {..in 17930 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a t mutex_retval;. 17940 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 17950 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 17960 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 17970 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 17980 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 17990 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 179a0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 179b0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 179c0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 179d0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 179e0 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 if (hSession == 179f0 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 0 || hSession >= 17a00 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 17a10 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 17a20 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 17a30 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 ns[0]))) {...CAC 17a40 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 17a50 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 17a60 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 n out of range." 17a70 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 17a80 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 17a90 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 17aa0 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 17ab0 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 cackey_mutex_loc 17ac0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 17ad0 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 17ae0 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 17af0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 17b00 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b TF("Error. Lock 17b10 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 17b20 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 17b30 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 17b40 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 ..if (!cackey_se 17b50 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 17b60 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 .active) {...cac 17b70 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 17b80 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 17b90 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 17ba0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 17bb0 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 Session not ac 17bc0 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 17bd0 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 17be0 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 17bf0 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 ;..}...cackey_se 17c00 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 17c10 2e 73 74 61 74 65 20 3d 20 43 4b 53 5f 52 4f 5f .state = CKS_RO_ 17c20 50 55 42 4c 49 43 5f 53 45 53 53 49 4f 4e 3b 0a PUBLIC_SESSION;. 17c30 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 17c40 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e cackey_mutex_un 17c50 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 17c60 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 17c70 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 17c80 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 17c90 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 RINTF("Error. U 17ca0 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e nlocking failed. 17cb0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 17cc0 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 17cd0 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 17ce0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 17cf0 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 17d00 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 )", CKR_OK);...r 17d10 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 17d20 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 17d30 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 72 TION(CK_RV, C_Cr 17d40 65 61 74 65 4f 62 6a 65 63 74 29 28 43 4b 5f 53 eateObject)(CK_S 17d50 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 17d60 65 73 73 69 6f 6e 2c 20 43 4b 5f 41 54 54 52 49 ession, CK_ATTRI 17d70 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 BUTE_PTR pTempla 17d80 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 te, CK_ULONG ulC 17d90 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f ount, CK_OBJECT_ 17da0 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4f 62 6a HANDLE_PTR phObj 17db0 65 63 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 ect) {..CACKEY_D 17dc0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 17dd0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 17de0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 17df0 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 17e00 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 17e10 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 17e20 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 17e30 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 17e40 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 17e50 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 17e60 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 17e70 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 17e80 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 17e90 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 17ea0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 17eb0 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 17ec0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 17ed0 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 17ee0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 17ef0 43 4b 5f 52 56 2c 20 43 5f 43 6f 70 79 4f 62 6a CK_RV, C_CopyObj 17f00 65 63 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f ect)(CK_SESSION_ 17f10 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 17f20 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL 17f30 45 20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 41 54 E hObject, CK_AT 17f40 54 52 49 42 55 54 45 5f 50 54 52 20 70 54 65 6d TRIBUTE_PTR pTem 17f50 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 plate, CK_ULONG 17f60 75 6c 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 ulCount, CK_OBJE 17f70 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 CT_HANDLE_PTR ph 17f80 4e 65 77 4f 62 6a 65 63 74 29 20 7b 0a 09 43 41 NewObject) {..CA 17f90 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 17fa0 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 17fb0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 17fc0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 17fd0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 17fe0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 17ff0 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 18000 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 18010 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 18020 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 18030 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 18040 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 18050 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 18060 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 18070 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 18080 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 18090 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 180a0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 180b0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 180c0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 CTION(CK_RV, C_D 180d0 65 73 74 72 6f 79 4f 62 6a 65 63 74 29 28 43 4b estroyObject)(CK 180e0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 180f0 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a hSession, CK_OBJ 18100 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 ECT_HANDLE hObje 18110 63 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 ct) {..CACKEY_DE 18120 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 18130 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 18140 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 18150 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 18160 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 18170 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 18180 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 18190 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 181a0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 181b0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 181c0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 181d0 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 181e0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 181f0 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 18200 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 18210 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 18220 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 18230 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 18240 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 18250 4b 5f 52 56 2c 20 43 5f 47 65 74 4f 62 6a 65 63 K_RV, C_GetObjec 18260 74 53 69 7a 65 29 28 43 4b 5f 53 45 53 53 49 4f tSize)(CK_SESSIO 18270 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 18280 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e n, CK_OBJECT_HAN 18290 44 4c 45 20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f DLE hObject, CK_ 182a0 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 7a ULONG_PTR pulSiz 182b0 65 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 e) {..CACKEY_DEB 182c0 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 182d0 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 182e0 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 182f0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 18300 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 18310 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 18320 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 18330 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 18340 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 18350 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 18360 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 18370 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 18380 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 18390 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 183a0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 183b0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 183c0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 183d0 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 183e0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 183f0 5f 52 56 2c 20 43 5f 47 65 74 41 74 74 72 69 62 _RV, C_GetAttrib 18400 75 74 65 56 61 6c 75 65 29 28 43 4b 5f 53 45 53 uteValue)(CK_SES 18410 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 18420 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f sion, CK_OBJECT_ 18430 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 74 2c 20 HANDLE hObject, 18440 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 CK_ATTRIBUTE_PTR 18450 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 pTemplate, CK_U 18460 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 29 20 7b 0a LONG ulCount) {. 18470 09 43 4b 5f 41 54 54 52 49 42 55 54 45 20 2a 63 .CK_ATTRIBUTE *c 18480 75 72 72 5f 61 74 74 72 3b 0a 09 73 74 72 75 63 urr_attr;..struc 18490 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 t cackey_identit 184a0 79 20 2a 69 64 65 6e 74 69 74 79 3b 0a 09 75 6e y *identity;..un 184b0 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 65 6e signed long iden 184c0 74 69 74 79 5f 69 64 78 2c 20 61 74 74 72 5f 69 tity_idx, attr_i 184d0 64 78 2c 20 73 65 73 73 5f 61 74 74 72 5f 69 64 dx, sess_attr_id 184e0 78 2c 20 6e 75 6d 5f 69 64 73 3b 0a 09 69 6e 74 x, num_ids;..int 184f0 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 09 mutex_retval;.. 18500 43 4b 5f 52 56 20 72 65 74 76 61 6c 20 3d 20 43 CK_RV retval = C 18510 4b 52 5f 4f 4b 3b 0a 09 43 4b 5f 56 4f 49 44 5f KR_OK;..CK_VOID_ 18520 50 54 52 20 70 56 61 6c 75 65 3b 0a 09 43 4b 5f PTR pValue;..CK_ 18530 55 4c 4f 4e 47 20 75 6c 56 61 6c 75 65 4c 65 6e ULONG ulValueLen 18540 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 18550 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 18560 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 18570 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 18580 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 18590 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 185a0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 185b0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 185c0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 185d0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 185e0 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d ..if (hSession = 185f0 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 = 0 || hSession 18600 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 >= (sizeof(cacke 18610 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 y_sessions) / si 18620 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 18630 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 ions[0]))) {...C 18640 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 18650 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 18660 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 ion out of range 18670 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 18680 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 18690 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 186a0 0a 0a 09 69 66 20 28 68 4f 62 6a 65 63 74 20 3d ...if (hObject = 186b0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 186c0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 186d0 72 6f 72 2e 20 20 4f 62 6a 65 63 74 20 68 61 6e ror. Object han 186e0 64 6c 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 dle out of range 186f0 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 18700 28 43 4b 52 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 (CKR_OBJECT_HAND 18710 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 18720 0a 09 69 66 20 28 75 6c 43 6f 75 6e 74 20 3d 3d ..if (ulCount == 18730 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 74 0) {.../* Short 18740 20 63 69 72 63 75 69 74 2c 20 69 66 20 7a 65 72 circuit, if zer 18750 6f 20 6f 62 6a 65 63 74 73 20 77 65 72 65 20 73 o objects were s 18760 70 65 63 69 66 69 65 64 20 72 65 74 75 72 6e 20 pecified return 18770 7a 65 72 6f 20 69 74 65 6d 73 20 69 6d 6d 65 64 zero items immed 18780 69 61 74 65 6c 79 20 2a 2f 0a 09 09 43 41 43 4b iately */...CACK 18790 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 187a0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 187b0 4b 20 28 25 69 29 20 28 73 68 6f 72 74 20 63 69 K (%i) (short ci 187c0 72 63 75 69 74 29 22 2c 20 43 4b 52 5f 4f 4b 29 rcuit)", CKR_OK) 187d0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 187e0 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 54 OK);..}...if (pT 187f0 65 6d 70 6c 61 74 65 20 3d 3d 20 4e 55 4c 4c 29 emplate == NULL) 18800 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 18810 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 18820 20 20 70 54 65 6d 70 6c 61 74 65 20 69 73 20 4e pTemplate is N 18830 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 ULL.");....retur 18840 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f n(CKR_ARGUMENTS_ 18850 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 64 65 6e 74 BAD);..}...ident 18860 69 74 79 5f 69 64 78 20 3d 20 68 4f 62 6a 65 63 ity_idx = hObjec 18870 74 20 2d 20 31 3b 0a 0a 09 6d 75 74 65 78 5f 72 t - 1;...mutex_r 18880 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 18890 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 utex_lock(cackey 188a0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 188b0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 188c0 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 188d0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 188e0 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c r. Locking fail 188f0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 18900 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 18910 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 OR);..}...if (!c 18920 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 18930 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 Session].active) 18940 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 18950 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 18960 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 18970 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 18980 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 18990 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b n not active."); 189a0 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 189b0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 189c0 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6e INVALID);..}...n 189d0 75 6d 5f 69 64 73 20 3d 20 63 61 63 6b 65 79 5f um_ids = cackey_ 189e0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 189f0 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f n].identities_co 18a00 75 6e 74 3b 0a 0a 09 69 66 20 28 69 64 65 6e 74 unt;...if (ident 18a10 69 74 79 5f 69 64 78 20 3e 3d 20 6e 75 6d 5f 69 ity_idx >= num_i 18a20 64 73 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d ds) {...cackey_m 18a30 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 18a40 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 18a50 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 18a60 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4f 62 6a NTF("Error. Obj 18a70 65 63 74 20 68 61 6e 64 6c 65 20 6f 75 74 20 6f ect handle out o 18a80 66 20 72 61 6e 67 65 2e 20 20 69 64 65 6e 74 69 f range. identi 18a90 74 79 5f 69 64 78 20 3d 20 25 6c 75 2c 20 6e 75 ty_idx = %lu, nu 18aa0 6d 5f 69 64 73 20 3d 20 25 6c 75 2e 22 2c 20 28 m_ids = %lu.", ( 18ab0 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 69 unsigned long) i 18ac0 64 65 6e 74 69 74 79 5f 69 64 78 2c 20 28 75 6e dentity_idx, (un 18ad0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6e 75 6d signed long) num 18ae0 5f 69 64 73 29 3b 0a 0a 09 09 72 65 74 75 72 6e _ids);....return 18af0 28 43 4b 52 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 (CKR_OBJECT_HAND 18b00 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 18b10 0a 09 69 64 65 6e 74 69 74 79 20 3d 20 26 63 61 ..identity = &ca 18b20 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 18b30 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 ession].identiti 18b40 65 73 5b 69 64 65 6e 74 69 74 79 5f 69 64 78 5d es[identity_idx] 18b50 3b 0a 0a 09 66 6f 72 20 28 61 74 74 72 5f 69 64 ;...for (attr_id 18b60 78 20 3d 20 30 3b 20 61 74 74 72 5f 69 64 78 20 x = 0; attr_idx 18b70 3c 20 75 6c 43 6f 75 6e 74 3b 20 61 74 74 72 5f < ulCount; attr_ 18b80 69 64 78 2b 2b 29 20 7b 0a 09 09 63 75 72 72 5f idx++) {...curr_ 18b90 61 74 74 72 20 3d 20 26 70 54 65 6d 70 6c 61 74 attr = &pTemplat 18ba0 65 5b 61 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 e[attr_idx];.... 18bb0 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 pValue = NULL;.. 18bc0 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 28 43 .ulValueLen = (C 18bd0 4b 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 0a 09 09 43 K_LONG) -1;....C 18be0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 18bf0 54 46 28 22 4c 6f 6f 6b 69 6e 67 20 66 6f 72 20 TF("Looking for 18c00 61 74 74 72 69 62 75 74 65 20 30 78 25 30 38 6c attribute 0x%08l 18c10 78 20 28 69 64 65 6e 74 69 74 79 3a 25 6c 75 29 x (identity:%lu) 18c20 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned 18c30 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr 18c40 2d 3e 74 79 70 65 2c 20 28 75 6e 73 69 67 6e 65 ->type, (unsigne 18c50 64 20 6c 6f 6e 67 29 20 69 64 65 6e 74 69 74 79 d long) identity 18c60 5f 69 64 78 29 3b 0a 0a 09 09 66 6f 72 20 28 73 _idx);....for (s 18c70 65 73 73 5f 61 74 74 72 5f 69 64 78 20 3d 20 30 ess_attr_idx = 0 18c80 3b 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 20 ; sess_attr_idx 18c90 3c 20 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 < identity->attr 18ca0 69 62 75 74 65 73 5f 63 6f 75 6e 74 3b 20 73 65 ibutes_count; se 18cb0 73 73 5f 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b ss_attr_idx++) { 18cc0 0a 09 09 09 69 66 20 28 69 64 65 6e 74 69 74 79 ....if (identity 18cd0 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 ->attributes[ses 18ce0 73 5f 61 74 74 72 5f 69 64 78 5d 2e 74 79 70 65 s_attr_idx].type 18cf0 20 3d 3d 20 63 75 72 72 5f 61 74 74 72 2d 3e 74 == curr_attr->t 18d00 79 70 65 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 ype) {.....CACKE 18d10 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 18d20 20 2e 2e 2e 20 66 6f 75 6e 64 20 69 74 2c 20 70 ... found it, p 18d30 56 61 6c 75 65 20 3d 20 25 70 2c 20 75 6c 56 61 Value = %p, ulVa 18d40 6c 75 65 4c 65 6e 20 3d 20 25 6c 75 22 2c 20 69 lueLen = %lu", i 18d50 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 75 dentity->attribu 18d60 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 tes[sess_attr_id 18d70 78 5d 2e 70 56 61 6c 75 65 2c 20 69 64 65 6e 74 x].pValue, ident 18d80 69 74 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5b ity->attributes[ 18d90 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 sess_attr_idx].u 18da0 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 09 09 lValueLen);..... 18db0 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 69 64 .....pValue = id 18dc0 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 75 74 entity->attribut 18dd0 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 es[sess_attr_idx 18de0 5d 2e 70 56 61 6c 75 65 3b 0a 09 09 09 09 75 6c ].pValue;.....ul 18df0 56 61 6c 75 65 4c 65 6e 20 3d 20 69 64 65 6e 74 ValueLen = ident 18e00 69 74 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5b ity->attributes[ 18e10 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 sess_attr_idx].u 18e20 6c 56 61 6c 75 65 4c 65 6e 3b 0a 09 09 09 7d 0a lValueLen;....}. 18e30 09 09 7d 0a 0a 09 09 69 66 20 28 63 75 72 72 5f ..}....if (curr_ 18e40 61 74 74 72 2d 3e 70 56 61 6c 75 65 20 26 26 20 attr->pValue && 18e50 70 56 61 6c 75 65 29 20 7b 0a 09 09 09 69 66 20 pValue) {....if 18e60 28 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 (curr_attr->ulVa 18e70 6c 75 65 4c 65 6e 20 3e 3d 20 75 6c 56 61 6c 75 lueLen >= ulValu 18e80 65 4c 65 6e 29 20 7b 0a 09 09 09 09 6d 65 6d 63 eLen) {.....memc 18e90 70 79 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 py(curr_attr->pV 18ea0 61 6c 75 65 2c 20 70 56 61 6c 75 65 2c 20 75 6c alue, pValue, ul 18eb0 56 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 09 7d 20 ValueLen);....} 18ec0 65 6c 73 65 20 7b 0a 09 09 09 09 75 6c 56 61 6c else {.....ulVal 18ed0 75 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47 ueLen = (CK_LONG 18ee0 29 20 2d 31 3b 0a 0a 09 09 09 09 72 65 74 76 61 ) -1;......retva 18ef0 6c 20 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 l = CKR_BUFFER_T 18f00 4f 4f 5f 53 4d 41 4c 4c 3b 0a 09 09 09 7d 0a 09 OO_SMALL;....}.. 18f10 09 7d 0a 0a 09 09 63 75 72 72 5f 61 74 74 72 2d .}....curr_attr- 18f20 3e 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 75 6c >ulValueLen = ul 18f30 56 61 6c 75 65 4c 65 6e 3b 0a 09 7d 0a 0a 09 6d ValueLen;..}...m 18f40 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 18f50 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 18f60 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 18f70 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 18f80 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 18f90 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 18fa0 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f TF("Error. Unlo 18fb0 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 18fc0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 18fd0 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 18fe0 7d 0a 0a 09 69 66 20 28 72 65 74 76 61 6c 20 3d }...if (retval = 18ff0 3d 20 43 4b 52 5f 41 54 54 52 49 42 55 54 45 5f = CKR_ATTRIBUTE_ 19000 54 59 50 45 5f 49 4e 56 41 4c 49 44 29 20 7b 0a TYPE_INVALID) {. 19010 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 19020 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 19030 20 43 4b 52 5f 41 54 54 52 49 42 55 54 45 5f 54 CKR_ATTRIBUTE_T 19040 59 50 45 5f 49 4e 56 41 4c 49 44 20 28 25 69 29 YPE_INVALID (%i) 19050 22 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c 29 ", (int) retval) 19060 3b 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 72 65 ;..} else if (re 19070 74 76 61 6c 20 3d 3d 20 43 4b 52 5f 42 55 46 46 tval == CKR_BUFF 19080 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a ER_TOO_SMALL) {. 19090 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 190a0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 190b0 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f CKR_BUFFER_TOO_ 190c0 53 4d 41 4c 4c 20 28 25 69 29 22 2c 20 28 69 6e SMALL (%i)", (in 190d0 74 29 20 72 65 74 76 61 6c 29 3b 0a 09 7d 20 65 t) retval);..} e 190e0 6c 73 65 20 69 66 20 28 72 65 74 76 61 6c 20 3d lse if (retval = 190f0 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 = CKR_OK) {...CA 19100 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 19110 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 19120 5f 4f 4b 20 28 25 69 29 22 2c 20 28 69 6e 74 29 _OK (%i)", (int) 19130 20 72 65 74 76 61 6c 29 3b 0a 09 7d 20 65 6c 73 retval);..} els 19140 65 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 e {...CACKEY_DEB 19150 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 19160 6e 69 6e 67 20 25 69 22 2c 20 28 69 6e 74 29 20 ning %i", (int) 19170 72 65 74 76 61 6c 29 3b 0a 09 7d 0a 0a 09 72 65 retval);..}...re 19180 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a turn(retval);.}. 19190 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 191a0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 74 ION(CK_RV, C_Set 191b0 41 74 74 72 69 62 75 74 65 56 61 6c 75 65 29 28 AttributeValue)( 191c0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 191d0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f E hSession, CK_O 191e0 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 BJECT_HANDLE hOb 191f0 6a 65 63 74 2c 20 43 4b 5f 41 54 54 52 49 42 55 ject, CK_ATTRIBU 19200 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 TE_PTR pTemplate 19210 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 , CK_ULONG ulCou 19220 6e 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 nt) {..CACKEY_DE 19230 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 19240 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 19250 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 19260 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 19270 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 19280 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 19290 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 192a0 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 192b0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 192c0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 192d0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 192e0 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 192f0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 19300 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 19310 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 19320 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 19330 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 19340 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 19350 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 19360 4b 5f 52 56 2c 20 43 5f 46 69 6e 64 4f 62 6a 65 K_RV, C_FindObje 19370 63 74 73 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 ctsInit)(CK_SESS 19380 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 19390 69 6f 6e 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 ion, CK_ATTRIBUT 193a0 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c E_PTR pTemplate, 193b0 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e CK_ULONG ulCoun 193c0 74 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f t) {..int mutex_ 193d0 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 retval;...CACKEY 193e0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 193f0 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 19400 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 19410 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 19420 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 19430 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 19440 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 19450 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 19460 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 19470 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 );..}...if (hSes 19480 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 sion == 0 || hSe 19490 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 ssion >= (sizeof 194a0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 194b0 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke 194c0 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 y_sessions[0]))) 194d0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 194e0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 194f0 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 Session out of 19500 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 range.");...... 19510 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 19520 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 19530 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 D);..}...mutex_r 19540 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 19550 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 utex_lock(cackey 19560 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 19570 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 19580 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 19590 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 195a0 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c r. Locking fail 195b0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 195c0 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 195d0 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 OR);..}...if (!c 195e0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 195f0 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 Session].active) 19600 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 19610 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 19620 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 19630 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 19640 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 19650 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b n not active."); 19660 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 19670 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 19680 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 19690 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f f (cackey_sessio 196a0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 ns[hSession].sea 196b0 72 63 68 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 rch_active) {... 196c0 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 196d0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 196e0 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 196f0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 19700 6f 72 2e 20 20 53 65 61 72 63 68 20 61 6c 72 65 or. Search alre 19710 61 64 79 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 ady active.");.. 19720 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ....return(CKR_O 19730 50 45 52 41 54 49 4f 4e 5f 41 43 54 49 56 45 29 PERATION_ACTIVE) 19740 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 ;..}...if (cacke 19750 79 5f 73 6c 6f 74 73 5b 63 61 63 6b 65 79 5f 73 y_slots[cackey_s 19760 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 19770 5d 2e 73 6c 6f 74 49 44 5d 2e 73 6c 6f 74 5f 72 ].slotID].slot_r 19780 65 73 65 74 29 20 7b 0a 09 09 43 41 43 4b 45 59 eset) {...CACKEY 19790 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 54 _DEBUG_PRINTF("T 197a0 68 65 20 73 6c 6f 74 20 68 61 73 20 62 65 65 6e he slot has been 197b0 20 72 65 73 65 74 20 73 69 6e 63 65 20 77 65 20 reset since we 197c0 6c 61 73 74 20 6c 6f 6f 6b 65 64 20 66 6f 72 20 last looked for 197d0 69 64 65 6e 74 69 74 69 65 73 20 2d 2d 20 72 65 identities -- re 197e0 73 63 61 6e 6e 69 6e 67 22 29 3b 0a 0a 09 09 69 scanning");....i 197f0 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f f (cackey_sessio 19800 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 ns[hSession].ide 19810 6e 74 69 74 69 65 73 20 21 3d 20 4e 55 4c 4c 29 ntities != NULL) 19820 20 7b 0a 09 09 09 63 61 63 6b 65 79 5f 66 72 65 {....cackey_fre 19830 65 5f 69 64 65 6e 74 69 74 69 65 73 28 63 61 63 e_identities(cac 19840 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 19850 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 ssion].identitie 19860 73 2c 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f s, cackey_sessio 19870 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 ns[hSession].ide 19880 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 3b 0a ntities_count);. 19890 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 ....cackey_sessi 198a0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 ons[hSession].id 198b0 65 6e 74 69 74 69 65 73 20 3d 20 4e 55 4c 4c 3b entities = NULL; 198c0 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 ....cackey_sessi 198d0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 ons[hSession].id 198e0 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 20 3d entities_count = 198f0 20 30 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 0;...}....cacke 19900 79 5f 73 6c 6f 74 73 5b 63 61 63 6b 65 79 5f 73 y_slots[cackey_s 19910 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 19920 5d 2e 73 6c 6f 74 49 44 5d 2e 73 6c 6f 74 5f 72 ].slotID].slot_r 19930 65 73 65 74 20 3d 20 30 3b 0a 09 7d 0a 0a 09 69 eset = 0;..}...i 19940 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f f (cackey_sessio 19950 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 ns[hSession].ide 19960 6e 74 69 74 69 65 73 20 3d 3d 20 4e 55 4c 4c 29 ntities == NULL) 19970 20 7b 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 73 {...cackey_sess 19980 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 ions[hSession].i 19990 64 65 6e 74 69 74 69 65 73 20 3d 20 63 61 63 6b dentities = cack 199a0 65 79 5f 72 65 61 64 5f 69 64 65 6e 74 69 74 69 ey_read_identiti 199b0 65 73 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 es(&cackey_slots 199c0 5b 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 [cackey_sessions 199d0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f 74 49 [hSession].slotI 199e0 44 5d 2c 20 26 63 61 63 6b 65 79 5f 73 65 73 73 D], &cackey_sess 199f0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 ions[hSession].i 19a00 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 dentities_count) 19a10 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 54 65 6d 70 ;..}...if (pTemp 19a20 6c 61 74 65 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a late != NULL) {. 19a30 09 09 69 66 20 28 75 6c 43 6f 75 6e 74 20 21 3d ..if (ulCount != 19a40 20 30 29 20 7b 0a 09 09 09 63 61 63 6b 65 79 5f 0) {....cackey_ 19a50 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 19a60 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5f n].search_query_ 19a70 63 6f 75 6e 74 20 3d 20 75 6c 43 6f 75 6e 74 3b count = ulCount; 19a80 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 ....cackey_sessi 19a90 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 ons[hSession].se 19aa0 61 72 63 68 5f 71 75 65 72 79 20 3d 20 6d 61 6c arch_query = mal 19ab0 6c 6f 63 28 75 6c 43 6f 75 6e 74 20 2a 20 73 69 loc(ulCount * si 19ac0 7a 65 6f 66 28 2a 70 54 65 6d 70 6c 61 74 65 29 zeof(*pTemplate) 19ad0 29 3b 0a 0a 09 09 09 6d 65 6d 63 70 79 28 63 61 );.....memcpy(ca 19ae0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 19af0 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 ession].search_q 19b00 75 65 72 79 2c 20 70 54 65 6d 70 6c 61 74 65 2c uery, pTemplate, 19b10 20 75 6c 43 6f 75 6e 74 20 2a 20 73 69 7a 65 6f ulCount * sizeo 19b20 66 28 2a 70 54 65 6d 70 6c 61 74 65 29 29 3b 0a f(*pTemplate));. 19b30 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 63 61 ..} else {....ca 19b40 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 19b50 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 ession].search_q 19b60 75 65 72 79 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a uery_count = 0;. 19b70 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio 19b80 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 ns[hSession].sea 19b90 72 63 68 5f 71 75 65 72 79 20 3d 20 4e 55 4c 4c rch_query = NULL 19ba0 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a ;...}..} else {. 19bb0 09 09 69 66 20 28 75 6c 43 6f 75 6e 74 20 21 3d ..if (ulCount != 19bc0 20 30 29 20 7b 0a 09 09 09 63 61 63 6b 65 79 5f 0) {....cackey_ 19bd0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 19be0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 19bf0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 19c00 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 19c10 65 61 72 63 68 20 71 75 65 72 79 20 73 70 65 63 earch query spec 19c20 69 66 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 62 ified as NULL, b 19c30 75 74 20 6e 75 6d 62 65 72 20 6f 66 20 71 75 65 ut number of que 19c40 72 79 20 74 65 72 6d 73 20 6e 6f 74 20 73 70 65 ry terms not spe 19c50 63 69 66 69 65 64 20 61 73 20 30 2e 22 29 3b 0a cified as 0.");. 19c60 0a 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 ....return(CKR_A 19c70 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 RGUMENTS_BAD);.. 19c80 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 .}....cackey_ses 19c90 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 19ca0 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 search_query_cou 19cb0 6e 74 20 3d 20 30 3b 0a 09 09 63 61 63 6b 65 79 nt = 0;...cackey 19cc0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 19cd0 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 on].search_query 19ce0 20 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a 09 63 61 = NULL;..}...ca 19cf0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 19d00 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 ession].search_a 19d10 63 74 69 76 65 20 3d 20 31 3b 0a 09 63 61 63 6b ctive = 1;..cack 19d20 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 19d30 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 63 75 72 sion].search_cur 19d40 72 5f 69 64 20 3d 20 30 3b 0a 0a 09 6d 75 74 65 r_id = 0;...mute 19d50 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 19d60 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 19d70 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 19d80 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 19d90 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 19da0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 19db0 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 "Error. Unlocki 19dc0 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 19dd0 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 19de0 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 19df0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 19e00 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 19e10 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK 19e20 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 R_OK);...return( 19e30 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 CKR_OK);.}..CK_D 19e40 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 19e50 4b 5f 52 56 2c 20 43 5f 46 69 6e 64 4f 62 6a 65 K_RV, C_FindObje 19e60 63 74 73 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f cts)(CK_SESSION_ 19e70 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 19e80 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL 19e90 45 5f 50 54 52 20 70 68 4f 62 6a 65 63 74 2c 20 E_PTR phObject, 19ea0 43 4b 5f 55 4c 4f 4e 47 20 75 6c 4d 61 78 4f 62 CK_ULONG ulMaxOb 19eb0 6a 65 63 74 43 6f 75 6e 74 2c 20 43 4b 5f 55 4c jectCount, CK_UL 19ec0 4f 4e 47 5f 50 54 52 20 70 75 6c 4f 62 6a 65 63 ONG_PTR pulObjec 19ed0 74 43 6f 75 6e 74 29 20 7b 0a 09 73 74 72 75 63 tCount) {..struc 19ee0 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 t cackey_identit 19ef0 79 20 2a 63 75 72 72 5f 69 64 3b 0a 09 43 4b 5f y *curr_id;..CK_ 19f00 41 54 54 52 49 42 55 54 45 20 2a 63 75 72 72 5f ATTRIBUTE *curr_ 19f10 61 74 74 72 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 attr;..CK_ULONG 19f20 63 75 72 72 5f 69 64 5f 69 64 78 2c 20 63 75 72 curr_id_idx, cur 19f30 72 5f 6f 75 74 5f 69 64 5f 69 64 78 2c 20 63 75 r_out_id_idx, cu 19f40 72 72 5f 61 74 74 72 5f 69 64 78 2c 20 73 65 73 rr_attr_idx, ses 19f50 73 5f 61 74 74 72 5f 69 64 78 3b 0a 09 43 4b 5f s_attr_idx;..CK_ 19f60 55 4c 4f 4e 47 20 6d 61 74 63 68 65 64 5f 63 6f ULONG matched_co 19f70 75 6e 74 2c 20 70 72 65 76 5f 6d 61 74 63 68 65 unt, prev_matche 19f80 64 5f 63 6f 75 6e 74 3b 0a 09 69 6e 74 20 6d 75 d_count;..int mu 19f90 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 tex_retval;...CA 19fa0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 19fb0 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 19fc0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 19fd0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 19fe0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 19ff0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 1a000 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 1a010 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 1a020 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 1a030 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 IZED);..}...if ( 1a040 70 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d pulObjectCount = 1a050 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK 1a060 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1a070 22 45 72 72 6f 72 2e 20 20 70 75 6c 4f 62 6a 65 "Error. pulObje 1a080 63 74 43 6f 75 6e 74 20 69 73 20 4e 55 4c 4c 2e ctCount is NULL. 1a090 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1a0a0 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 R_ARGUMENTS_BAD) 1a0b0 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 68 4f 62 6a ;..}...if (phObj 1a0c0 65 63 74 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 ect == NULL && u 1a0d0 6c 4d 61 78 4f 62 6a 65 63 74 43 6f 75 6e 74 20 lMaxObjectCount 1a0e0 3d 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f == 0) {.../* Sho 1a0f0 72 74 20 63 69 72 63 75 69 74 2c 20 69 66 20 7a rt circuit, if z 1a100 65 72 6f 20 6f 62 6a 65 63 74 73 20 77 65 72 65 ero objects were 1a110 20 73 70 65 63 69 66 69 65 64 20 72 65 74 75 72 specified retur 1a120 6e 20 7a 65 72 6f 20 69 74 65 6d 73 20 69 6d 6d n zero items imm 1a130 65 64 69 61 74 65 6c 79 20 2a 2f 0a 09 09 2a 70 ediately */...*p 1a140 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 20 ulObjectCount = 1a150 30 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 0;....CACKEY_DEB 1a160 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1a170 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 1a180 20 28 73 68 6f 72 74 20 63 69 72 63 75 69 74 29 (short circuit) 1a190 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 ", CKR_OK);....r 1a1a0 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 eturn(CKR_OK);.. 1a1b0 7d 0a 0a 09 69 66 20 28 70 68 4f 62 6a 65 63 74 }...if (phObject 1a1c0 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 == NULL) {...CA 1a1d0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1a1e0 46 28 22 45 72 72 6f 72 2e 20 20 70 68 4f 62 6a F("Error. phObj 1a1f0 65 63 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a ect is NULL.");. 1a200 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 1a210 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} 1a220 0a 0a 09 69 66 20 28 75 6c 4d 61 78 4f 62 6a 65 ...if (ulMaxObje 1a230 63 74 43 6f 75 6e 74 20 3d 3d 20 30 29 20 7b 0a ctCount == 0) {. 1a240 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1a250 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4d RINTF("Error. M 1a260 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 aximum number of 1a270 20 6f 62 6a 65 63 74 73 20 73 70 65 63 69 66 69 objects specifi 1a280 65 64 20 61 73 20 7a 65 72 6f 2e 22 29 3b 0a 0a ed as zero.");.. 1a290 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG 1a2a0 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a UMENTS_BAD);..}. 1a2b0 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d ..if (hSession = 1a2c0 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 = 0 || hSession 1a2d0 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 >= (sizeof(cacke 1a2e0 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 y_sessions) / si 1a2f0 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 1a300 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 ions[0]))) {...C 1a310 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1a320 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 1a330 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 ion out of range 1a340 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 1a350 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 1a360 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 1a370 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 1a380 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c = cackey_mutex_l 1a390 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1a3a0 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 1a3b0 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 1a3c0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1a3d0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f INTF("Error. Lo 1a3e0 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 1a3f0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 1a400 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 1a410 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f }...if (!cackey_ 1a420 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1a430 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 n].active) {...c 1a440 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 1a450 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 1a460 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 1a470 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1a480 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 r. Session not 1a490 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 active.");...... 1a4a0 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 1a4b0 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 1a4c0 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 D);..}...if (!ca 1a4d0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1a4e0 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 ession].search_a 1a4f0 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 ctive) {...cacke 1a500 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 1a510 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 1a520 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1a530 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1a540 53 65 61 72 63 68 20 6e 6f 74 20 61 63 74 69 76 Search not activ 1a550 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 1a560 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f n(CKR_OPERATION_ 1a570 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 1a580 3b 0a 09 7d 0a 0a 09 63 75 72 72 5f 6f 75 74 5f ;..}...curr_out_ 1a590 69 64 5f 69 64 78 20 3d 20 30 3b 0a 09 66 6f 72 id_idx = 0;..for 1a5a0 20 28 63 75 72 72 5f 69 64 5f 69 64 78 20 3d 20 (curr_id_idx = 1a5b0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1a5c0 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 hSession].search 1a5d0 5f 63 75 72 72 5f 69 64 3b 20 63 75 72 72 5f 69 _curr_id; curr_i 1a5e0 64 5f 69 64 78 20 3c 20 63 61 63 6b 65 79 5f 73 d_idx < cackey_s 1a5f0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1a600 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 ].identities_cou 1a610 6e 74 20 26 26 20 75 6c 4d 61 78 4f 62 6a 65 63 nt && ulMaxObjec 1a620 74 43 6f 75 6e 74 3b 20 63 75 72 72 5f 69 64 5f tCount; curr_id_ 1a630 69 64 78 2b 2b 29 20 7b 0a 09 09 63 75 72 72 5f idx++) {...curr_ 1a640 69 64 20 3d 20 26 63 61 63 6b 65 79 5f 73 65 73 id = &cackey_ses 1a650 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1a660 69 64 65 6e 74 69 74 69 65 73 5b 63 75 72 72 5f identities[curr_ 1a670 69 64 5f 69 64 78 5d 3b 0a 0a 09 09 43 41 43 4b id_idx];....CACK 1a680 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1a690 22 50 72 6f 63 65 73 73 69 6e 67 20 69 64 65 6e "Processing iden 1a6a0 74 69 74 79 3a 25 6c 75 22 2c 20 28 75 6e 73 69 tity:%lu", (unsi 1a6b0 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f gned long) curr_ 1a6c0 69 64 5f 69 64 78 29 3b 0a 0a 09 09 6d 61 74 63 id_idx);....matc 1a6d0 68 65 64 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 0a hed_count = 0;.. 1a6e0 09 09 66 6f 72 20 28 63 75 72 72 5f 61 74 74 72 ..for (curr_attr 1a6f0 5f 69 64 78 20 3d 20 30 3b 20 63 75 72 72 5f 61 _idx = 0; curr_a 1a700 74 74 72 5f 69 64 78 20 3c 20 63 61 63 6b 65 79 ttr_idx < cackey 1a710 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1a720 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 on].search_query 1a730 5f 63 6f 75 6e 74 3b 20 63 75 72 72 5f 61 74 74 _count; curr_att 1a740 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 70 72 r_idx++) {....pr 1a750 65 76 5f 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 ev_matched_count 1a760 20 3d 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 = matched_count 1a770 3b 0a 0a 09 09 09 63 75 72 72 5f 61 74 74 72 20 ;.....curr_attr 1a780 3d 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f = &cackey_sessio 1a790 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 ns[hSession].sea 1a7a0 72 63 68 5f 71 75 65 72 79 5b 63 75 72 72 5f 61 rch_query[curr_a 1a7b0 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 09 43 41 ttr_idx];.....CA 1a7c0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1a7d0 46 28 22 20 20 43 68 65 63 6b 69 6e 67 20 66 6f F(" Checking fo 1a7e0 72 20 61 74 74 72 69 62 75 74 65 20 30 78 25 30 r attribute 0x%0 1a7f0 38 6c 78 20 69 6e 20 69 64 65 6e 74 69 74 79 3a 8lx in identity: 1a800 25 69 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 %i...", (unsigne 1a810 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 d long) curr_att 1a820 72 2d 3e 74 79 70 65 2c 20 28 69 6e 74 29 20 63 r->type, (int) c 1a830 75 72 72 5f 69 64 5f 69 64 78 29 3b 0a 09 09 09 urr_id_idx);.... 1a840 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1a850 4e 54 42 55 46 28 22 20 20 20 20 56 61 6c 75 65 NTBUF(" Value 1a860 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 3a 22 2c 20 looking for:", 1a870 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 curr_attr->pValu 1a880 65 2c 20 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c e, curr_attr->ul 1a890 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 66 ValueLen);.....f 1a8a0 6f 72 20 28 73 65 73 73 5f 61 74 74 72 5f 69 64 or (sess_attr_id 1a8b0 78 20 3d 20 30 3b 20 73 65 73 73 5f 61 74 74 72 x = 0; sess_attr 1a8c0 5f 69 64 78 20 3c 20 63 75 72 72 5f 69 64 2d 3e _idx < curr_id-> 1a8d0 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 attributes_count 1a8e0 3b 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 2b ; sess_attr_idx+ 1a8f0 2b 29 20 7b 0a 09 09 09 09 69 66 20 28 63 75 72 +) {.....if (cur 1a900 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 74 65 73 r_id->attributes 1a910 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e [sess_attr_idx]. 1a920 74 79 70 65 20 3d 3d 20 63 75 72 72 5f 61 74 74 type == curr_att 1a930 72 2d 3e 74 79 70 65 29 20 7b 0a 09 09 09 09 09 r->type) {...... 1a940 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1a950 4e 54 46 28 22 20 20 20 20 2e 2e 2e 20 66 6f 75 NTF(" ... fou 1a960 6e 64 20 6d 61 74 63 68 69 6e 67 20 74 79 70 65 nd matching type 1a970 20 2e 2e 2e 22 29 3b 0a 09 09 09 09 09 43 41 43 ...");......CAC 1a980 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 KEY_DEBUG_PRINTB 1a990 55 46 28 22 20 20 20 20 2e 2e 2e 20 6f 75 72 20 UF(" ... our 1a9a0 76 61 6c 75 65 3a 22 2c 20 63 75 72 72 5f 69 64 value:", curr_id 1a9b0 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 ->attributes[ses 1a9c0 73 5f 61 74 74 72 5f 69 64 78 5d 2e 70 56 61 6c s_attr_idx].pVal 1a9d0 75 65 2c 20 63 75 72 72 5f 69 64 2d 3e 61 74 74 ue, curr_id->att 1a9e0 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 ributes[sess_att 1a9f0 72 5f 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 r_idx].ulValueLe 1aa00 6e 29 3b 0a 0a 09 09 09 09 09 69 66 20 28 63 75 n);.......if (cu 1aa10 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 20 rr_attr->pValue 1aa20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 09 == NULL) {...... 1aa30 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1aa40 49 4e 54 46 28 22 20 20 20 20 20 20 20 2e 2e 2e INTF(" ... 1aa50 20 66 6f 75 6e 64 20 77 69 6c 64 63 61 72 64 20 found wildcard 1aa60 6d 61 74 63 68 22 29 3b 0a 0a 09 09 09 09 09 09 match");........ 1aa70 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 2b 2b 3b matched_count++; 1aa80 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 ........break;.. 1aa90 09 09 09 09 7d 0a 0a 20 09 09 09 09 09 69 66 20 ....}.. .....if 1aaa0 28 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 (curr_attr->ulVa 1aab0 6c 75 65 4c 65 6e 20 3d 3d 20 63 75 72 72 5f 69 lueLen == curr_i 1aac0 64 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 d->attributes[se 1aad0 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c 56 ss_attr_idx].ulV 1aae0 61 6c 75 65 4c 65 6e 20 26 26 20 6d 65 6d 63 6d alueLen && memcm 1aaf0 70 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 p(curr_attr->pVa 1ab00 6c 75 65 2c 20 63 75 72 72 5f 69 64 2d 3e 61 74 lue, curr_id->at 1ab10 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 tributes[sess_at 1ab20 74 72 5f 69 64 78 5d 2e 70 56 61 6c 75 65 2c 20 tr_idx].pValue, 1ab30 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 curr_id->attribu 1ab40 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 tes[sess_attr_id 1ab50 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 20 3d x].ulValueLen) = 1ab60 3d 20 30 29 20 7b 0a 09 09 09 09 09 09 43 41 43 = 0) {.......CAC 1ab70 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1ab80 28 22 20 20 20 20 20 20 20 2e 2e 2e 20 66 6f 75 (" ... fou 1ab90 6e 64 20 65 78 61 63 74 20 6d 61 74 63 68 22 29 nd exact match") 1aba0 3b 0a 0a 09 09 09 09 09 09 6d 61 74 63 68 65 64 ;........matched 1abb0 5f 63 6f 75 6e 74 2b 2b 3b 0a 0a 09 09 09 09 09 _count++;....... 1abc0 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 09 .break;......}.. 1abd0 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 2f 2a ...}....}...../* 1abe0 20 49 66 20 74 68 65 20 61 74 74 72 69 62 75 74 If the attribut 1abf0 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 6d e could not be m 1ac00 61 74 63 68 65 64 2c 20 64 6f 20 6e 6f 74 20 74 atched, do not t 1ac10 72 79 20 74 6f 20 6d 61 74 63 68 20 61 64 64 69 ry to match addi 1ac20 74 69 6f 6e 61 6c 20 61 74 74 72 69 62 75 74 65 tional attribute 1ac30 73 20 2a 2f 0a 09 09 09 69 66 20 28 70 72 65 76 s */....if (prev 1ac40 5f 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 20 3d _matched_count = 1ac50 3d 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 29 = matched_count) 1ac60 20 7b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 {.....break;... 1ac70 09 7d 0a 09 09 7d 0a 0a 09 09 69 66 20 28 6d 61 .}...}....if (ma 1ac80 74 63 68 65 64 5f 63 6f 75 6e 74 20 3d 3d 20 63 tched_count == c 1ac90 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1aca0 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 1acb0 71 75 65 72 79 5f 63 6f 75 6e 74 29 20 7b 0a 09 query_count) {.. 1acc0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1acd0 52 49 4e 54 46 28 22 20 20 2e 2e 2e 20 41 6c 6c RINTF(" ... All 1ace0 20 25 69 20 61 74 74 72 69 62 75 74 65 73 20 63 %i attributes c 1acf0 68 65 63 6b 65 64 20 66 6f 72 20 66 6f 75 6e 64 hecked for found 1ad00 2c 20 61 64 64 69 6e 67 20 69 64 65 6e 74 69 74 , adding identit 1ad10 79 3a 25 69 20 74 6f 20 72 65 74 75 72 6e 65 64 y:%i to returned 1ad20 20 6c 69 73 74 22 2c 20 28 69 6e 74 29 20 63 61 list", (int) ca 1ad30 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1ad40 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 ession].search_q 1ad50 75 65 72 79 5f 63 6f 75 6e 74 2c 20 28 69 6e 74 uery_count, (int 1ad60 29 20 63 75 72 72 5f 69 64 5f 69 64 78 29 3b 0a ) curr_id_idx);. 1ad70 0a 09 09 09 70 68 4f 62 6a 65 63 74 5b 63 75 72 ....phObject[cur 1ad80 72 5f 6f 75 74 5f 69 64 5f 69 64 78 5d 20 3d 20 r_out_id_idx] = 1ad90 63 75 72 72 5f 69 64 5f 69 64 78 20 2b 20 31 3b curr_id_idx + 1; 1ada0 0a 0a 09 09 09 75 6c 4d 61 78 4f 62 6a 65 63 74 .....ulMaxObject 1adb0 43 6f 75 6e 74 2d 2d 3b 0a 0a 09 09 09 63 75 72 Count--;.....cur 1adc0 72 5f 6f 75 74 5f 69 64 5f 69 64 78 2b 2b 3b 0a r_out_id_idx++;. 1add0 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 43 41 ..} else {....CA 1ade0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1adf0 46 28 22 20 20 2e 2e 2e 20 4e 6f 74 20 61 6c 6c F(" ... Not all 1ae00 20 25 69 20 28 6f 6e 6c 79 20 66 6f 75 6e 64 20 %i (only found 1ae10 25 69 29 20 61 74 74 72 69 62 75 74 65 73 20 63 %i) attributes c 1ae20 68 65 63 6b 65 64 20 66 6f 72 20 66 6f 75 6e 64 hecked for found 1ae30 2c 20 6e 6f 74 20 61 64 64 69 6e 67 20 69 64 65 , not adding ide 1ae40 6e 74 69 74 79 3a 25 69 22 2c 20 28 69 6e 74 29 ntity:%i", (int) 1ae50 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 1ae60 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 1ae70 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 2c 20 28 h_query_count, ( 1ae80 69 6e 74 29 20 6d 61 74 63 68 65 64 5f 63 6f 75 int) matched_cou 1ae90 6e 74 2c 20 28 69 6e 74 29 20 63 75 72 72 5f 69 nt, (int) curr_i 1aea0 64 5f 69 64 78 29 3b 0a 09 09 7d 0a 09 7d 0a 09 d_idx);...}..}.. 1aeb0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1aec0 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 hSession].search 1aed0 5f 63 75 72 72 5f 69 64 20 3d 20 63 75 72 72 5f _curr_id = curr_ 1aee0 69 64 5f 69 64 78 3b 0a 09 2a 70 75 6c 4f 62 6a id_idx;..*pulObj 1aef0 65 63 74 43 6f 75 6e 74 20 3d 20 63 75 72 72 5f ectCount = curr_ 1af00 6f 75 74 5f 69 64 5f 69 64 78 3b 0a 0a 09 6d 75 out_id_idx;...mu 1af10 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 1af20 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1af30 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1af40 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 1af50 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 1af60 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1af70 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 1af80 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 1af90 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 1afa0 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 1afb0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1afc0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1afd0 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 2c 20 6e g CKR_OK (%i), n 1afe0 75 6d 20 6f 62 6a 65 63 74 73 20 3d 20 25 6c 75 um objects = %lu 1aff0 22 2c 20 43 4b 52 5f 4f 4b 2c 20 2a 70 75 6c 4f ", CKR_OK, *pulO 1b000 62 6a 65 63 74 43 6f 75 6e 74 29 3b 0a 0a 09 72 bjectCount);...r 1b010 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 1b020 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 1b030 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 46 69 TION(CK_RV, C_Fi 1b040 6e 64 4f 62 6a 65 63 74 73 46 69 6e 61 6c 29 28 ndObjectsFinal)( 1b050 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 1b060 45 20 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 69 E hSession) {..i 1b070 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b nt mutex_retval; 1b080 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1b090 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 1b0a0 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 1b0b0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 1b0c0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1b0d0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 1b0e0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 1b0f0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1b100 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 1b110 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 1b120 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d .if (hSession == 1b130 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 0 || hSession > 1b140 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 = (sizeof(cackey 1b150 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a _sessions) / siz 1b160 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi 1b170 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 ons[0]))) {...CA 1b180 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1b190 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 1b1a0 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e on out of range. 1b1b0 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 1b1c0 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 CKR_SESSION_HAND 1b1d0 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 1b1e0 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 1b1f0 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f cackey_mutex_lo 1b200 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 1b210 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 1b220 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 1b230 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1b240 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 NTF("Error. Loc 1b250 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 1b260 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 1b270 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 1b280 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 ...if (!cackey_s 1b290 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1b2a0 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 ].active) {...ca 1b2b0 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 1b2c0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1b2d0 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 1b2e0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1b2f0 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 . Session not a 1b300 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 ctive.");......r 1b310 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 1b320 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 1b330 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 1b340 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1b350 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 ssion].search_ac 1b360 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 tive) {...cackey 1b370 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 1b380 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 1b390 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1b3a0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 1b3b0 65 61 72 63 68 20 6e 6f 74 20 61 63 74 69 76 65 earch not active 1b3c0 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 1b3d0 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e (CKR_OPERATION_N 1b3e0 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1b3f0 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 ..}...cackey_ses 1b400 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1b410 73 65 61 72 63 68 5f 61 63 74 69 76 65 20 3d 20 search_active = 1b420 30 3b 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 0;..if (cackey_s 1b430 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1b440 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 29 20 ].search_query) 1b450 7b 0a 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f {...free(cackey_ 1b460 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1b470 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 29 n].search_query) 1b480 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 1b490 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 1b4a0 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 1b4b0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 1b4c0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 1b4d0 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 1b4e0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1b4f0 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 1b500 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 1b510 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 1b520 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b RROR);..}...CACK 1b530 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1b540 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 1b550 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) 1b560 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O 1b570 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 K);.}..CK_DEFINE 1b580 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 1b590 20 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 29 28 C_EncryptInit)( 1b5a0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 1b5b0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d E hSession, CK_M 1b5c0 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 ECHANISM_PTR pMe 1b5d0 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 chanism, CK_OBJE 1b5e0 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 CT_HANDLE hKey) 1b5f0 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 1b600 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 1b610 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 1b620 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 1b630 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1b640 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 1b650 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 1b660 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1b670 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 1b680 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 1b690 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1b6a0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 1b6b0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1b6c0 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 1b6d0 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 1b6e0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 1b6f0 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 1b700 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1b710 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN 1b720 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 1b730 2c 20 43 5f 45 6e 63 72 79 70 74 29 28 43 4b 5f , C_Encrypt)(CK_ 1b740 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 1b750 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 1b760 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 _PTR pData, CK_U 1b770 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c 20 LONG ulDataLen, 1b780 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 CK_BYTE_PTR pEnc 1b790 72 79 70 74 65 64 44 61 74 61 2c 20 43 4b 5f 55 ryptedData, CK_U 1b7a0 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 45 6e 63 72 LONG_PTR pulEncr 1b7b0 79 70 74 65 64 44 61 74 61 4c 65 6e 29 20 7b 0a yptedDataLen) {. 1b7c0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1b7d0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1b7e0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1b7f0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1b800 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1b810 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1b820 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1b830 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1b840 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1b850 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 1b860 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1b870 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1b880 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1b890 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 1b8a0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1b8b0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 1b8c0 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 1b8d0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1b8e0 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1b8f0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1b900 43 5f 45 6e 63 72 79 70 74 55 70 64 61 74 65 29 C_EncryptUpdate) 1b910 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 1b920 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 1b930 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 BYTE_PTR pPart, 1b940 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c CK_ULONG ulPartL 1b950 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 en, CK_BYTE_PTR 1b960 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 pEncryptedPart, 1b970 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 1b980 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e EncryptedPartLen 1b990 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 1b9a0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 1b9b0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 1b9c0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1b9d0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1b9e0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1b9f0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1ba00 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1ba10 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1ba20 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1ba30 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1ba40 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1ba50 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 1ba60 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 1ba70 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 1ba80 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1ba90 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 1baa0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1bab0 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 1bac0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1bad0 52 56 2c 20 43 5f 45 6e 63 72 79 70 74 46 69 6e RV, C_EncryptFin 1bae0 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 al)(CK_SESSION_H 1baf0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 1bb00 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 4c 61 73 CK_BYTE_PTR pLas 1bb10 74 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 tEncryptedPart, 1bb20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 1bb30 4c 61 73 74 45 6e 63 72 79 70 74 65 64 50 61 72 LastEncryptedPar 1bb40 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f tLen) {..CACKEY_ 1bb50 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 1bb60 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 1bb70 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 1bb80 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 1bb90 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1bba0 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 1bbb0 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 1bbc0 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 1bbd0 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 1bbe0 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 1bbf0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 1bc00 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 rning CKR_FUNCTI 1bc10 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1bc20 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 (%i)", CKR_FUNC 1bc30 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1bc40 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK 1bc50 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1bc60 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b UPPORTED);.}..CK 1bc70 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 1bc80 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 (CK_RV, C_Decryp 1bc90 74 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f tInit)(CK_SESSIO 1bca0 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 1bcb0 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f n, CK_MECHANISM_ 1bcc0 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 PTR pMechanism, 1bcd0 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 1bce0 20 68 4b 65 79 29 20 7b 0a 09 69 6e 74 20 6d 75 hKey) {..int mu 1bcf0 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 68 4b tex_retval;...hK 1bd00 65 79 2d 2d 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 ey--;...CACKEY_D 1bd10 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 1bd20 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 1bd30 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 1bd40 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 1bd50 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1bd60 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 1bd70 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 1bd80 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 1bd90 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1bda0 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 ..}...if (pMecha 1bdb0 6e 69 73 6d 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a nism == NULL) {. 1bdc0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1bdd0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 4d RINTF("Error. pM 1bde0 65 63 68 61 6e 69 73 6d 20 69 73 20 4e 55 4c 4c echanism is NULL 1bdf0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1be00 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD 1be10 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63 );..}...if (pMec 1be20 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 hanism->mechanis 1be30 6d 20 21 3d 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 m != CKM_RSA_PKC 1be40 53 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 S) {...CACKEY_DE 1be50 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1be60 72 2e 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d r. pMechanism->m 1be70 65 63 68 61 6e 69 73 6d 20 6e 6f 74 20 73 70 65 echanism not spe 1be80 63 69 66 69 65 64 20 61 73 20 43 4b 4d 5f 52 53 cified as CKM_RS 1be90 41 5f 50 4b 43 53 22 29 3b 0a 0a 09 09 72 65 74 A_PKCS");....ret 1bea0 75 72 6e 28 43 4b 52 5f 4d 45 43 48 41 4e 49 53 urn(CKR_MECHANIS 1beb0 4d 5f 50 41 52 41 4d 5f 49 4e 56 41 4c 49 44 29 M_PARAM_INVALID) 1bec0 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 ;..}...if (hSess 1bed0 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 ion == 0 || hSes 1bee0 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 sion >= (sizeof( 1bef0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 1bf00 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 1bf10 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 _sessions[0]))) 1bf20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1bf30 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1bf40 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 Session out of 1bf50 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 range.");......r 1bf60 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 1bf70 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 1bf80 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 );..}...mutex_re 1bf90 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 1bfa0 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 1bfb0 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 1bfc0 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 1bfd0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1bfe0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1bff0 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 1c000 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1c010 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 1c020 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 R);..}...if (!ca 1c030 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1c040 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 ession].active) 1c050 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 1c060 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 1c070 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 1c080 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1c090 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 1c0a0 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 1c0b0 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 1c0c0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 1c0d0 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 NVALID);..}...if 1c0e0 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (cackey_session 1c0f0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 s[hSession].decr 1c100 79 70 74 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 ypt_active) {... 1c110 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 1c120 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1c130 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 1c140 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1c150 6f 72 2e 20 20 44 65 63 72 79 70 74 20 61 6c 72 or. Decrypt alr 1c160 65 61 64 79 20 69 6e 20 70 72 6f 67 72 65 73 73 eady in progress 1c170 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 1c180 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 41 (CKR_OPERATION_A 1c190 43 54 49 56 45 29 3b 0a 09 7d 0a 0a 09 69 66 20 CTIVE);..}...if 1c1a0 28 68 4b 65 79 20 3e 3d 20 63 61 63 6b 65 79 5f (hKey >= cackey_ 1c1b0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1c1c0 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f n].identities_co 1c1d0 75 6e 74 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f unt) {...cackey_ 1c1e0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 1c1f0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 1c200 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1c210 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4b 65 INTF("Error. Ke 1c220 79 20 68 61 6e 64 6c 65 20 6f 75 74 20 6f 66 20 y handle out of 1c230 72 61 6e 67 65 20 28 72 65 71 75 65 73 74 65 64 range (requested 1c240 20 6b 65 79 20 25 6c 75 2c 20 6f 6e 6c 79 20 25 key %lu, only % 1c250 6c 75 20 69 64 65 6e 74 69 74 69 65 73 20 61 76 lu identities av 1c260 61 69 6c 61 62 6c 65 29 2e 22 2c 20 28 75 6e 73 ailable).", (uns 1c270 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 4b 65 79 igned long) hKey 1c280 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 1c290 29 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ) cackey_session 1c2a0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 1c2b0 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 3b 0a 0a tities_count);.. 1c2c0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4b 45 59 ..return(CKR_KEY 1c2d0 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 1c2e0 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 ;..}...cackey_se 1c2f0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 1c300 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 20 .decrypt_active 1c310 3d 20 31 3b 0a 0a 09 63 61 63 6b 65 79 5f 73 65 = 1;...cackey_se 1c320 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 1c330 2e 64 65 63 72 79 70 74 5f 6d 65 63 68 61 6e 69 .decrypt_mechani 1c340 73 6d 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d 2d sm = pMechanism- 1c350 3e 6d 65 63 68 61 6e 69 73 6d 3b 0a 09 63 61 63 >mechanism;..cac 1c360 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1c370 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 6d ssion].decrypt_m 1c380 65 63 68 5f 70 61 72 6d 20 3d 20 70 4d 65 63 68 ech_parm = pMech 1c390 61 6e 69 73 6d 2d 3e 70 50 61 72 61 6d 65 74 65 anism->pParamete 1c3a0 72 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 r;..cackey_sessi 1c3b0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 ons[hSession].de 1c3c0 63 72 79 70 74 5f 6d 65 63 68 5f 70 61 72 6d 6c crypt_mech_parml 1c3d0 65 6e 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d 2d en = pMechanism- 1c3e0 3e 75 6c 50 61 72 61 6d 65 74 65 72 4c 65 6e 3b >ulParameterLen; 1c3f0 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 1c400 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 s[hSession].decr 1c410 79 70 74 5f 69 64 65 6e 74 69 74 79 20 3d 20 26 ypt_identity = & 1c420 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1c430 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 hSession].identi 1c440 74 69 65 73 5b 68 4b 65 79 5d 3b 0a 0a 09 6d 75 ties[hKey];...mu 1c450 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 1c460 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1c470 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1c480 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 1c490 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 1c4a0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1c4b0 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 1c4c0 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 1c4d0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 1c4e0 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 1c4f0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1c500 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1c510 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", 1c520 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 CKR_OK);...retur 1c530 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b n(CKR_OK);.}..CK 1c540 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 1c550 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 (CK_RV, C_Decryp 1c560 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 t)(CK_SESSION_HA 1c570 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 1c580 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 K_BYTE_PTR pEncr 1c590 79 70 74 65 64 44 61 74 61 2c 20 43 4b 5f 55 4c yptedData, CK_UL 1c5a0 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64 44 ONG ulEncryptedD 1c5b0 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f ataLen, CK_BYTE_ 1c5c0 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c PTR pData, CK_UL 1c5d0 4f 4e 47 5f 50 54 52 20 70 75 6c 44 61 74 61 4c ONG_PTR pulDataL 1c5e0 65 6e 29 20 7b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 en) {..CK_ULONG 1c5f0 64 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 2c 20 datalen_update, 1c600 64 61 74 61 6c 65 6e 5f 66 69 6e 61 6c 3b 0a 09 datalen_final;.. 1c610 43 4b 5f 52 56 20 64 65 63 72 79 70 74 5f 72 65 CK_RV decrypt_re 1c620 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 t;...CACKEY_DEBU 1c630 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 1c640 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 1c650 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1c660 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1c670 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1c680 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1c690 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1c6a0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1c6b0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1c6c0 0a 0a 09 69 66 20 28 70 75 6c 44 61 74 61 4c 65 ...if (pulDataLe 1c6d0 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 n == NULL) {...C 1c6e0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1c6f0 54 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 44 61 TF("Error. pulDa 1c700 74 61 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 taLen is NULL.") 1c710 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1c720 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 1c730 09 7d 0a 0a 09 64 61 74 61 6c 65 6e 5f 75 70 64 .}...datalen_upd 1c740 61 74 65 20 3d 20 2a 70 75 6c 44 61 74 61 4c 65 ate = *pulDataLe 1c750 6e 3b 0a 0a 09 64 65 63 72 79 70 74 5f 72 65 74 n;...decrypt_ret 1c760 20 3d 20 43 5f 44 65 63 72 79 70 74 55 70 64 61 = C_DecryptUpda 1c770 74 65 28 68 53 65 73 73 69 6f 6e 2c 20 70 45 6e te(hSession, pEn 1c780 63 72 79 70 74 65 64 44 61 74 61 2c 20 75 6c 45 cryptedData, ulE 1c790 6e 63 72 79 70 74 65 64 44 61 74 61 4c 65 6e 2c ncryptedDataLen, 1c7a0 20 70 44 61 74 61 2c 20 26 64 61 74 61 6c 65 6e pData, &datalen 1c7b0 5f 75 70 64 61 74 65 29 3b 0a 09 69 66 20 28 64 _update);..if (d 1c7c0 65 63 72 79 70 74 5f 72 65 74 20 21 3d 20 43 4b ecrypt_ret != CK 1c7d0 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 R_OK) {...CACKEY 1c7e0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1c7f0 72 72 6f 72 2e 20 20 44 65 63 72 79 70 74 55 70 rror. DecryptUp 1c800 64 61 74 65 28 29 20 72 65 74 75 72 6e 65 64 20 date() returned 1c810 66 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 6c failure (rv = %l 1c820 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 u).", (unsigned 1c830 6c 6f 6e 67 29 20 64 65 63 72 79 70 74 5f 72 65 long) decrypt_re 1c840 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 64 65 t);....return(de 1c850 63 72 79 70 74 5f 72 65 74 29 3b 0a 09 7d 0a 0a crypt_ret);..}.. 1c860 09 69 66 20 28 70 44 61 74 61 29 20 7b 0a 09 09 .if (pData) {... 1c870 70 44 61 74 61 20 2b 3d 20 64 61 74 61 6c 65 6e pData += datalen 1c880 5f 75 70 64 61 74 65 3b 0a 09 7d 0a 09 64 61 74 _update;..}..dat 1c890 61 6c 65 6e 5f 66 69 6e 61 6c 20 3d 20 2a 70 75 alen_final = *pu 1c8a0 6c 44 61 74 61 4c 65 6e 20 2d 20 64 61 74 61 6c lDataLen - datal 1c8b0 65 6e 5f 75 70 64 61 74 65 3b 0a 0a 09 64 65 63 en_update;...dec 1c8c0 72 79 70 74 5f 72 65 74 20 3d 20 43 5f 44 65 63 rypt_ret = C_Dec 1c8d0 72 79 70 74 46 69 6e 61 6c 28 68 53 65 73 73 69 ryptFinal(hSessi 1c8e0 6f 6e 2c 20 70 44 61 74 61 2c 20 26 64 61 74 61 on, pData, &data 1c8f0 6c 65 6e 5f 66 69 6e 61 6c 29 3b 0a 09 69 66 20 len_final);..if 1c900 28 64 65 63 72 79 70 74 5f 72 65 74 20 21 3d 20 (decrypt_ret != 1c910 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b CKR_OK) {...CACK 1c920 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1c930 22 45 72 72 6f 72 2e 20 20 44 65 63 72 79 70 74 "Error. Decrypt 1c940 46 69 6e 61 6c 28 29 20 72 65 74 75 72 6e 65 64 Final() returned 1c950 20 66 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 failure (rv = % 1c960 6c 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 lu).", (unsigned 1c970 20 6c 6f 6e 67 29 20 64 65 63 72 79 70 74 5f 72 long) decrypt_r 1c980 65 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 64 et);....return(d 1c990 65 63 72 79 70 74 5f 72 65 74 29 3b 0a 09 7d 0a ecrypt_ret);..}. 1c9a0 0a 09 2a 70 75 6c 44 61 74 61 4c 65 6e 20 3d 20 ..*pulDataLen = 1c9b0 64 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 20 2b datalen_update + 1c9c0 20 64 61 74 61 6c 65 6e 5f 66 69 6e 61 6c 3b 0a datalen_final;. 1c9d0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1c9e0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 1c9f0 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C 1ca00 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return 1ca10 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f (CKR_OK);.}..CK_ 1ca20 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 1ca30 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 74 CK_RV, C_Decrypt 1ca40 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 Update)(CK_SESSI 1ca50 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 1ca60 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 1ca70 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 pEncryptedPart, 1ca80 43 4b 5f 55 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 CK_ULONG ulEncry 1ca90 70 74 65 64 50 61 72 74 4c 65 6e 2c 20 43 4b 5f ptedPartLen, CK_ 1caa0 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 BYTE_PTR pPart, 1cab0 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 1cac0 50 61 72 74 4c 65 6e 29 20 7b 0a 09 73 74 61 74 PartLen) {..stat 1cad0 69 63 20 43 4b 5f 42 59 54 45 20 62 75 66 5b 31 ic CK_BYTE buf[1 1cae0 36 33 38 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 20 6384];..ssize_t 1caf0 62 75 66 6c 65 6e 3b 0a 09 43 4b 5f 52 56 20 72 buflen;..CK_RV r 1cb00 65 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e 45 etval = CKR_GENE 1cb10 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 69 6e 74 20 RAL_ERROR;..int 1cb20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 mutex_retval;... 1cb30 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1cb40 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 1cb50 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 1cb60 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 1cb70 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1cb80 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 1cb90 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 1cba0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 1cbb0 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 1cbc0 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 1cbd0 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 (hSession == 0 1cbe0 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 || hSession >= ( 1cbf0 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 1cc00 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 1cc10 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 1cc20 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE 1cc30 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1cc40 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 1cc50 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b out of range."); 1cc60 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 1cc70 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 1cc80 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 1cc90 66 20 28 70 45 6e 63 72 79 70 74 65 64 50 61 72 f (pEncryptedPar 1cca0 74 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c 45 t == NULL && ulE 1ccb0 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 ncryptedPartLen 1ccc0 3d 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f == 0) {.../* Sho 1ccd0 72 74 20 63 69 72 63 75 69 74 20 69 66 20 77 65 rt circuit if we 1cce0 20 61 72 65 20 61 73 6b 65 64 20 74 6f 20 64 65 are asked to de 1ccf0 63 72 79 70 74 20 6e 6f 74 68 69 6e 67 2e 2e 2e crypt nothing... 1cd00 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 */...CACKEY_DEB 1cd10 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1cd20 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 1cd30 20 28 73 68 6f 72 74 20 63 69 72 63 75 69 74 29 (short circuit) 1cd40 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 ", CKR_OK);....r 1cd50 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 eturn(CKR_OK);.. 1cd60 7d 0a 0a 09 69 66 20 28 70 45 6e 63 72 79 70 74 }...if (pEncrypt 1cd70 65 64 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 20 edPart == NULL) 1cd80 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1cd90 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1cda0 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 20 69 pEncryptedPart i 1cdb0 73 20 4e 55 4c 4c 2c 20 62 75 74 20 75 6c 45 6e s NULL, but ulEn 1cdc0 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 69 cryptedPartLen i 1cdd0 73 20 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 09 72 s not 0.");....r 1cde0 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 eturn(CKR_ARGUME 1cdf0 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 NTS_BAD);..}...i 1ce00 66 20 28 75 6c 45 6e 63 72 79 70 74 65 64 50 61 f (ulEncryptedPa 1ce10 72 74 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 rtLen == 0) {... 1ce20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1ce30 4e 54 46 28 22 45 72 72 6f 72 2e 20 75 6c 45 6e NTF("Error. ulEn 1ce40 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 69 cryptedPartLen i 1ce50 73 20 30 2c 20 62 75 74 20 70 50 61 72 74 20 69 s 0, but pPart i 1ce60 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a s not NULL.");.. 1ce70 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG 1ce80 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a UMENTS_BAD);..}. 1ce90 0a 09 69 66 20 28 70 75 6c 50 61 72 74 4c 65 6e ..if (pulPartLen 1cea0 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 == NULL) {...CA 1ceb0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1cec0 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 50 61 72 F("Error. pulPar 1ced0 74 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 3b tLen is NULL."); 1cee0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 ....return(CKR_A 1cef0 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 RGUMENTS_BAD);.. 1cf00 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 1cf10 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 1cf20 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 1cf30 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 1cf40 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 1cf50 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1cf60 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 1cf70 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 1cf80 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1cf90 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 1cfa0 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 1cfb0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1cfc0 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 on].active) {... 1cfd0 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 1cfe0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1cff0 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 1d000 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1d010 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 or. Session not 1d020 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 active.");..... 1d030 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 1d040 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 1d050 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 ID);..}...if (!c 1d060 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1d070 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 Session].decrypt 1d080 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 _active) {...cac 1d090 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1d0a0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1d0b0 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 1d0c0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1d0d0 20 20 44 65 63 72 79 70 74 20 6e 6f 74 20 61 63 Decrypt not ac 1d0e0 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 1d0f0 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 turn(CKR_OPERATI 1d100 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a ON_NOT_INITIALIZ 1d110 45 44 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 68 ED);..}...switch 1d120 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (cackey_session 1d130 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 s[hSession].decr 1d140 79 70 74 5f 6d 65 63 68 61 6e 69 73 6d 29 20 7b ypt_mechanism) { 1d150 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 53 41 5f ...case CKM_RSA_ 1d160 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 73 6b 20 PKCS:..../* Ask 1d170 63 61 72 64 20 74 6f 20 64 65 63 72 79 70 74 20 card to decrypt 1d180 2a 2f 0a 09 09 09 62 75 66 6c 65 6e 20 3d 20 63 */....buflen = c 1d190 61 63 6b 65 79 5f 73 69 67 6e 64 65 63 72 79 70 ackey_signdecryp 1d1a0 74 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b t(&cackey_slots[ 1d1b0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1d1c0 68 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f 74 49 44 hSession].slotID 1d1d0 5d 2c 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ], cackey_sessio 1d1e0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 ns[hSession].dec 1d1f0 72 79 70 74 5f 69 64 65 6e 74 69 74 79 2c 20 70 rypt_identity, p 1d200 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 75 EncryptedPart, u 1d210 6c 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 lEncryptedPartLe 1d220 6e 2c 20 62 75 66 2c 20 73 69 7a 65 6f 66 28 62 n, buf, sizeof(b 1d230 75 66 29 29 3b 0a 0a 09 09 09 69 66 20 28 62 75 uf));.....if (bu 1d240 66 6c 65 6e 20 3c 20 30 29 20 7b 0a 09 09 09 09 flen < 0) {..... 1d250 2f 2a 20 44 65 63 72 79 70 74 69 6f 6e 20 66 61 /* Decryption fa 1d260 69 6c 65 64 2e 20 2a 2f 0a 09 09 09 09 72 65 74 iled. */.....ret 1d270 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e 45 52 41 val = CKR_GENERA 1d280 4c 5f 45 52 52 4f 52 3b 0a 09 09 09 7d 20 65 6c L_ERROR;....} el 1d290 73 65 20 69 66 20 28 28 28 75 6e 73 69 67 6e 65 se if (((unsigne 1d2a0 64 20 6c 6f 6e 67 29 20 62 75 66 6c 65 6e 29 20 d long) buflen) 1d2b0 3e 20 2a 70 75 6c 50 61 72 74 4c 65 6e 20 26 26 > *pulPartLen && 1d2c0 20 70 50 61 72 74 29 20 7b 0a 09 09 09 09 2f 2a pPart) {...../* 1d2d0 20 44 65 63 72 79 70 74 65 64 20 64 61 74 61 20 Decrypted data 1d2e0 74 6f 6f 20 6c 61 72 67 65 20 2a 2f 0a 09 09 09 too large */.... 1d2f0 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 42 55 .retval = CKR_BU 1d300 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b 0a FFER_TOO_SMALL;. 1d310 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 ...} else {..... 1d320 69 66 20 28 70 50 61 72 74 29 20 7b 0a 09 09 09 if (pPart) {.... 1d330 09 09 6d 65 6d 63 70 79 28 70 50 61 72 74 2c 20 ..memcpy(pPart, 1d340 62 75 66 2c 20 62 75 66 6c 65 6e 29 3b 0a 09 09 buf, buflen);... 1d350 09 09 7d 0a 0a 09 09 09 09 2a 70 75 6c 50 61 72 ..}......*pulPar 1d360 74 4c 65 6e 20 3d 20 62 75 66 6c 65 6e 3b 0a 0a tLen = buflen;.. 1d370 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 ....retval = CKR 1d380 5f 4f 4b 3b 0a 09 09 09 7d 0a 0a 09 09 09 62 72 _OK;....}.....br 1d390 65 61 6b 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f eak;..}...mutex_ 1d3a0 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 1d3b0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 1d3c0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 1d3d0 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 1d3e0 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 1d3f0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1d400 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 1d410 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 1d420 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 1d430 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 L_ERROR);..}...C 1d440 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1d450 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 25 69 TF("Returning %i 1d460 22 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c 29 ", (int) retval) 1d470 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 ;...return(retva 1d480 6c 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 l);.}..CK_DEFINE 1d490 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 1d4a0 20 43 5f 44 65 63 72 79 70 74 46 69 6e 61 6c 29 C_DecryptFinal) 1d4b0 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 1d4c0 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 1d4d0 42 59 54 45 5f 50 54 52 20 70 4c 61 73 74 50 61 BYTE_PTR pLastPa 1d4e0 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 rt, CK_ULONG_PTR 1d4f0 20 70 75 6c 4c 61 73 74 50 61 72 74 4c 65 6e 29 pulLastPartLen) 1d500 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 {..int mutex_re 1d510 74 76 61 6c 3b 0a 09 69 6e 74 20 74 65 72 6d 69 tval;..int termi 1d520 6e 61 74 65 5f 64 65 63 72 79 70 74 20 3d 20 31 nate_decrypt = 1 1d530 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 1d540 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 1d550 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 1d560 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 1d570 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1d580 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1d590 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 1d5a0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1d5b0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 1d5c0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 1d5d0 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d ..if (hSession = 1d5e0 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 = 0 || hSession 1d5f0 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 >= (sizeof(cacke 1d600 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 y_sessions) / si 1d610 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 1d620 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 ions[0]))) {...C 1d630 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1d640 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 1d650 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 ion out of range 1d660 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 1d670 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 1d680 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 1d690 0a 0a 09 69 66 20 28 70 75 6c 4c 61 73 74 50 61 ...if (pulLastPa 1d6a0 72 74 4c 65 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b rtLen == NULL) { 1d6b0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1d6c0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 PRINTF("Error. p 1d6d0 75 6c 4c 61 73 74 50 61 72 74 4c 65 6e 20 69 73 ulLastPartLen is 1d6e0 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 NULL.");....ret 1d6f0 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 urn(CKR_ARGUMENT 1d700 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 S_BAD);..}...mut 1d710 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 1d720 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 ey_mutex_lock(ca 1d730 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 1d740 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 1d750 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 1d760 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1d770 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 Error. Locking 1d780 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 1d790 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 1d7a0 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 _ERROR);..}...if 1d7b0 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f (!cackey_sessio 1d7c0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 ns[hSession].act 1d7d0 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ive) {...cackey_ 1d7e0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 1d7f0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 1d800 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1d810 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 1d820 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 ssion not active 1d830 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 1d840 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 1d850 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 1d860 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 ...if (!cackey_s 1d870 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1d880 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 ].decrypt_active 1d890 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 1d8a0 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 1d8b0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 1d8c0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1d8d0 46 28 22 45 72 72 6f 72 2e 20 20 44 65 63 72 79 F("Error. Decry 1d8e0 70 74 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 pt not active.") 1d8f0 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 1d900 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f R_OPERATION_NOT_ 1d910 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1d920 0a 0a 09 2a 70 75 6c 4c 61 73 74 50 61 72 74 4c ...*pulLastPartL 1d930 65 6e 20 3d 20 30 3b 0a 0a 09 69 66 20 28 70 4c en = 0;...if (pL 1d940 61 73 74 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 astPart == NULL) 1d950 20 7b 0a 09 09 74 65 72 6d 69 6e 61 74 65 5f 64 {...terminate_d 1d960 65 63 72 79 70 74 20 3d 20 30 3b 0a 09 7d 0a 0a ecrypt = 0;..}.. 1d970 09 69 66 20 28 74 65 72 6d 69 6e 61 74 65 5f 64 .if (terminate_d 1d980 65 63 72 79 70 74 29 20 7b 0a 09 09 63 61 63 6b ecrypt) {...cack 1d990 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1d9a0 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 61 63 sion].decrypt_ac 1d9b0 74 69 76 65 20 3d 20 30 3b 0a 09 7d 0a 0a 09 6d tive = 0;..}...m 1d9c0 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 1d9d0 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 1d9e0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1d9f0 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 1da00 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 1da10 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1da20 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f TF("Error. Unlo 1da30 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 1da40 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 1da50 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 1da60 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 1da70 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1da80 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c ng CKR_OK (%i)", 1da90 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 CKR_OK);...retu 1daa0 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 rn(CKR_OK);.}..C 1dab0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 1dac0 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 N(CK_RV, C_Diges 1dad0 74 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f tInit)(CK_SESSIO 1dae0 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 1daf0 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f n, CK_MECHANISM_ 1db00 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 29 20 PTR pMechanism) 1db10 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 1db20 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 1db30 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 1db40 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 1db50 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1db60 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 1db70 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 1db80 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1db90 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 1dba0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 1dbb0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1dbc0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 1dbd0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1dbe0 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 1dbf0 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 1dc00 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 1dc10 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 1dc20 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1dc30 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN 1dc40 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 1dc50 2c 20 43 5f 44 69 67 65 73 74 29 28 43 4b 5f 53 , C_Digest)(CK_S 1dc60 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 1dc70 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f ession, CK_BYTE_ 1dc80 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c PTR pData, CK_UL 1dc90 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43 ONG ulDataLen, C 1dca0 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 69 67 65 K_BYTE_PTR pDige 1dcb0 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 st, CK_ULONG_PTR 1dcc0 20 70 75 6c 44 69 67 65 73 74 4c 65 6e 29 20 7b pulDigestLen) { 1dcd0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1dce0 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 1dcf0 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 1dd00 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 1dd10 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1dd20 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 1dd30 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 1dd40 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1dd50 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 1dd60 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 1dd70 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1dd80 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 1dd90 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 1dda0 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 1ddb0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 1ddc0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 1ddd0 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 1dde0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1ddf0 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 1de00 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 1de10 20 43 5f 44 69 67 65 73 74 55 70 64 61 74 65 29 C_DigestUpdate) 1de20 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 1de30 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 1de40 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 BYTE_PTR pPart, 1de50 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c CK_ULONG ulPartL 1de60 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 en) {..CACKEY_DE 1de70 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 1de80 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 1de90 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 1dea0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1deb0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1dec0 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 1ded0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1dee0 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 1def0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 1df00 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 1df10 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 1df20 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 1df30 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 1df40 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 1df50 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1df60 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 1df70 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1df80 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 1df90 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 1dfa0 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 4b 65 K_RV, C_DigestKe 1dfb0 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 y)(CK_SESSION_HA 1dfc0 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 1dfd0 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 K_OBJECT_HANDLE 1dfe0 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f hKey) {..CACKEY_ 1dff0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 1e000 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 1e010 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 1e020 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 1e030 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1e040 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 1e050 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 1e060 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 1e070 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 1e080 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 1e090 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 1e0a0 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 rning CKR_FUNCTI 1e0b0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1e0c0 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 (%i)", CKR_FUNC 1e0d0 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1e0e0 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK 1e0f0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1e100 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b UPPORTED);.}..CK 1e110 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 1e120 28 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 (CK_RV, C_Digest 1e130 46 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f Final)(CK_SESSIO 1e140 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 1e150 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 1e160 44 69 67 65 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 Digest, CK_ULONG 1e170 5f 50 54 52 20 70 75 6c 44 69 67 65 73 74 4c 65 _PTR pulDigestLe 1e180 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 n) {..CACKEY_DEB 1e190 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 1e1a0 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 1e1b0 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 1e1c0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1e1d0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1e1e0 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 1e1f0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1e200 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 1e210 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 1e220 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 1e230 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1e240 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 1e250 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 1e260 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 1e270 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 1e280 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 1e290 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1e2a0 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 1e2b0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 1e2c0 5f 52 56 2c 20 43 5f 53 69 67 6e 49 6e 69 74 29 _RV, C_SignInit) 1e2d0 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 1e2e0 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 1e2f0 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d MECHANISM_PTR pM 1e300 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a echanism, CK_OBJ 1e310 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 ECT_HANDLE hKey) 1e320 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 {..int mutex_re 1e330 74 76 61 6c 3b 0a 0a 09 68 4b 65 79 2d 2d 3b 0a tval;...hKey--;. 1e340 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1e350 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 1e360 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 1e370 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 1e380 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1e390 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 1e3a0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 1e3b0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1e3c0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 1e3d0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 1e3e0 69 66 20 28 70 4d 65 63 68 61 6e 69 73 6d 20 3d if (pMechanism = 1e3f0 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK 1e400 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1e410 22 45 72 72 6f 72 2e 20 70 4d 65 63 68 61 6e 69 "Error. pMechani 1e420 73 6d 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a sm is NULL.");.. 1e430 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG 1e440 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a UMENTS_BAD);..}. 1e450 0a 09 69 66 20 28 70 4d 65 63 68 61 6e 69 73 6d ..if (pMechanism 1e460 2d 3e 6d 65 63 68 61 6e 69 73 6d 20 21 3d 20 43 ->mechanism != C 1e470 4b 4d 5f 52 53 41 5f 50 4b 43 53 20 26 26 20 70 KM_RSA_PKCS && p 1e480 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 Mechanism->mecha 1e490 6e 69 73 6d 20 21 3d 20 43 4b 4d 5f 53 48 41 31 nism != CKM_SHA1 1e4a0 5f 52 53 41 5f 50 4b 43 53 29 20 7b 0a 09 09 43 _RSA_PKCS) {...C 1e4b0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1e4c0 54 46 28 22 45 72 72 6f 72 2e 20 70 4d 65 63 68 TF("Error. pMech 1e4d0 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d anism->mechanism 1e4e0 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 61 not specified a 1e4f0 73 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 20 6f s CKM_RSA_PKCS o 1e500 72 20 43 4b 4d 5f 53 48 41 31 5f 52 53 41 5f 50 r CKM_SHA1_RSA_P 1e510 4b 43 53 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e KCS");....return 1e520 28 43 4b 52 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 (CKR_MECHANISM_P 1e530 41 52 41 4d 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 ARAM_INVALID);.. 1e540 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e }...if (hSession 1e550 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f == 0 || hSessio 1e560 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 n >= (sizeof(cac 1e570 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 key_sessions) / 1e580 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 1e590 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 ssions[0]))) {.. 1e5a0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1e5b0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 1e5c0 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e ssion out of ran 1e5d0 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 ge.");......retu 1e5e0 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 rn(CKR_SESSION_H 1e5f0 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a ANDLE_INVALID);. 1e600 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 .}...mutex_retva 1e610 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 1e620 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 _lock(cackey_big 1e630 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 1e640 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 1e650 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1e660 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1e670 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 Locking failed." 1e680 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1e690 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 1e6a0 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ..}...if (!cacke 1e6b0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 1e6c0 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 ion].active) {.. 1e6d0 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e .cackey_mutex_un 1e6e0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 1e6f0 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f ock);....CACKEY_ 1e700 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1e710 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f ror. Session no 1e720 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a t active.");.... 1e730 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES 1e740 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 SION_HANDLE_INVA 1e750 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 LID);..}...if (c 1e760 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1e770 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 Session].sign_ac 1e780 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 tive) {...cackey 1e790 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 1e7a0 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 1e7b0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1e7c0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 1e7d0 69 67 6e 20 61 6c 72 65 61 64 79 20 69 6e 20 70 ign already in p 1e7e0 72 6f 67 72 65 73 73 2e 22 29 3b 0a 09 09 0a 09 rogress.");..... 1e7f0 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 .return(CKR_OPER 1e800 41 54 49 4f 4e 5f 41 43 54 49 56 45 29 3b 0a 09 ATION_ACTIVE);.. 1e810 7d 0a 0a 09 69 66 20 28 68 4b 65 79 20 3e 3d 20 }...if (hKey >= 1e820 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1e830 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 hSession].identi 1e840 74 69 65 73 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 ties_count) {... 1e850 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 1e860 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1e870 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 1e880 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1e890 6f 72 2e 20 20 4b 65 79 20 68 61 6e 64 6c 65 20 or. Key handle 1e8a0 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 28 72 65 out of range (re 1e8b0 71 75 65 73 74 65 64 20 6b 65 79 20 25 6c 75 2c quested key %lu, 1e8c0 20 6f 6e 6c 79 20 25 6c 75 20 69 64 65 6e 74 69 only %lu identi 1e8d0 74 69 65 73 20 61 76 61 69 6c 61 62 6c 65 29 2e ties available). 1e8e0 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 1e8f0 67 29 20 68 4b 65 79 2c 20 28 75 6e 73 69 67 6e g) hKey, (unsign 1e900 65 64 20 6c 6f 6e 67 29 20 63 61 63 6b 65 79 5f ed long) cackey_ 1e910 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1e920 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f n].identities_co 1e930 75 6e 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 unt);....return( 1e940 43 4b 52 5f 4b 45 59 5f 48 41 4e 44 4c 45 5f 49 CKR_KEY_HANDLE_I 1e950 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 NVALID);..}...ca 1e960 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1e970 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 ession].sign_act 1e980 69 76 65 20 3d 20 31 3b 0a 0a 09 63 61 63 6b 65 ive = 1;...cacke 1e990 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 1e9a0 69 6f 6e 5d 2e 73 69 67 6e 5f 6d 65 63 68 61 6e ion].sign_mechan 1e9b0 69 73 6d 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d ism = pMechanism 1e9c0 2d 3e 6d 65 63 68 61 6e 69 73 6d 3b 0a 0a 09 63 ->mechanism;...c 1e9d0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1e9e0 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 Session].sign_bu 1e9f0 66 6c 65 6e 20 3d 20 31 32 38 3b 0a 09 63 61 63 flen = 128;..cac 1ea00 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1ea10 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 ssion].sign_bufu 1ea20 73 65 64 20 3d 20 30 3b 0a 09 63 61 63 6b 65 79 sed = 0;..cackey 1ea30 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1ea40 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 20 3d 20 6d on].sign_buf = m 1ea50 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 61 alloc(sizeof(*ca 1ea60 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1ea70 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 ession].sign_buf 1ea80 29 20 2a 20 63 61 63 6b 65 79 5f 73 65 73 73 69 ) * cackey_sessi 1ea90 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 1eaa0 67 6e 5f 62 75 66 6c 65 6e 29 3b 0a 0a 09 43 41 gn_buflen);...CA 1eab0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1eac0 46 28 22 53 65 73 73 69 6f 6e 20 25 6c 75 20 73 F("Session %lu s 1ead0 69 67 6e 5f 69 64 65 6e 74 69 74 79 20 69 73 20 ign_identity is 1eae0 25 70 20 28 69 64 65 6e 74 69 74 69 65 20 23 25 %p (identitie #% 1eaf0 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 lu)", (unsigned 1eb00 6c 6f 6e 67 29 20 68 53 65 73 73 69 6f 6e 2c 20 long) hSession, 1eb10 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 &cackey_sessions 1eb20 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 [hSession].ident 1eb30 69 74 69 65 73 5b 68 4b 65 79 5d 2c 20 28 75 6e ities[hKey], (un 1eb40 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 4b 65 signed long) hKe 1eb50 79 29 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 y);..cackey_sess 1eb60 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 1eb70 69 67 6e 5f 69 64 65 6e 74 69 74 79 20 3d 20 26 ign_identity = & 1eb80 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1eb90 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 hSession].identi 1eba0 74 69 65 73 5b 68 4b 65 79 5d 3b 0a 0a 09 6d 75 ties[hKey];...mu 1ebb0 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 1ebc0 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1ebd0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1ebe0 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 1ebf0 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 1ec00 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1ec10 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 1ec20 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 1ec30 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 1ec40 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 1ec50 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1ec60 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1ec70 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", 1ec80 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 CKR_OK);...retur 1ec90 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b n(CKR_OK);.}..CK 1eca0 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 1ecb0 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 29 28 (CK_RV, C_Sign)( 1ecc0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 1ecd0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 1ece0 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 YTE_PTR pData, C 1ecf0 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 K_ULONG ulDataLe 1ed00 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 1ed10 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c Signature, CK_UL 1ed20 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 ONG_PTR pulSigna 1ed30 74 75 72 65 4c 65 6e 29 20 7b 0a 09 43 4b 5f 52 tureLen) {..CK_R 1ed40 56 20 73 69 67 6e 5f 72 65 74 3b 0a 0a 09 43 41 V sign_ret;...CA 1ed50 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1ed60 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 1ed70 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 1ed80 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 1ed90 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1eda0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 1edb0 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 1edc0 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 1edd0 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 1ede0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 73 69 67 6e IZED);..}...sign 1edf0 5f 72 65 74 20 3d 20 43 5f 53 69 67 6e 55 70 64 _ret = C_SignUpd 1ee00 61 74 65 28 68 53 65 73 73 69 6f 6e 2c 20 70 44 ate(hSession, pD 1ee10 61 74 61 2c 20 75 6c 44 61 74 61 4c 65 6e 29 3b ata, ulDataLen); 1ee20 0a 09 69 66 20 28 73 69 67 6e 5f 72 65 74 20 21 ..if (sign_ret ! 1ee30 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 = CKR_OK) {...CA 1ee40 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1ee50 46 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 55 F("Error. SignU 1ee60 70 64 61 74 65 28 29 20 72 65 74 75 72 6e 65 64 pdate() returned 1ee70 20 66 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 failure (rv = % 1ee80 6c 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 lu).", (unsigned 1ee90 20 6c 6f 6e 67 29 20 73 69 67 6e 5f 72 65 74 29 long) sign_ret) 1eea0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 73 69 67 6e ;....return(sign 1eeb0 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 73 69 67 6e _ret);..}...sign 1eec0 5f 72 65 74 20 3d 20 43 5f 53 69 67 6e 46 69 6e _ret = C_SignFin 1eed0 61 6c 28 68 53 65 73 73 69 6f 6e 2c 20 70 53 69 al(hSession, pSi 1eee0 67 6e 61 74 75 72 65 2c 20 70 75 6c 53 69 67 6e gnature, pulSign 1eef0 61 74 75 72 65 4c 65 6e 29 3b 0a 09 69 66 20 28 atureLen);..if ( 1ef00 73 69 67 6e 5f 72 65 74 20 21 3d 20 43 4b 52 5f sign_ret != CKR_ 1ef10 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 OK) {...CACKEY_D 1ef20 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1ef30 6f 72 2e 20 20 53 69 67 6e 46 69 6e 61 6c 28 29 or. SignFinal() 1ef40 20 72 65 74 75 72 6e 65 64 20 66 61 69 6c 75 72 returned failur 1ef50 65 20 28 72 76 20 3d 20 25 6c 75 29 2e 22 2c 20 e (rv = %lu).", 1ef60 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 1ef70 73 69 67 6e 5f 72 65 74 29 3b 0a 0a 09 09 72 65 sign_ret);....re 1ef80 74 75 72 6e 28 73 69 67 6e 5f 72 65 74 29 3b 0a turn(sign_ret);. 1ef90 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 1efa0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 1efb0 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 1efc0 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret 1efd0 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}.. 1efe0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 1eff0 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e ON(CK_RV, C_Sign 1f000 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 Update)(CK_SESSI 1f010 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 1f020 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 1f030 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 pPart, CK_ULONG 1f040 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a 09 69 6e ulPartLen) {..in 1f050 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a t mutex_retval;. 1f060 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1f070 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 1f080 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 1f090 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 1f0a0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1f0b0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 1f0c0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 1f0d0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1f0e0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 1f0f0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 1f100 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 if (hSession == 1f110 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 0 || hSession >= 1f120 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 1f130 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 1f140 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 1f150 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 ns[0]))) {...CAC 1f160 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1f170 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 1f180 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 n out of range." 1f190 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 1f1a0 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 1f1b0 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 1f1c0 09 69 66 20 28 70 50 61 72 74 20 3d 3d 20 4e 55 .if (pPart == NU 1f1d0 4c 4c 20 26 26 20 75 6c 50 61 72 74 4c 65 6e 20 LL && ulPartLen 1f1e0 3d 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f == 0) {.../* Sho 1f1f0 72 74 20 63 69 72 63 75 69 74 20 69 66 20 77 65 rt circuit if we 1f200 20 61 72 65 20 61 73 6b 65 64 20 74 6f 20 73 69 are asked to si 1f210 67 6e 20 6e 6f 74 68 69 6e 67 2e 2e 2e 20 2a 2f gn nothing... */ 1f220 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1f230 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1f240 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 20 28 73 g CKR_OK (%i) (s 1f250 68 6f 72 74 20 63 69 72 63 75 69 74 29 22 2c 20 hort circuit)", 1f260 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 CKR_OK);....retu 1f270 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a rn(CKR_OK);..}.. 1f280 09 69 66 20 28 70 50 61 72 74 20 3d 3d 20 4e 55 .if (pPart == NU 1f290 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 1f2a0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1f2b0 6f 72 2e 20 70 50 61 72 74 20 69 73 20 4e 55 4c or. pPart is NUL 1f2c0 4c 2c 20 62 75 74 20 75 6c 50 61 72 74 4c 65 6e L, but ulPartLen 1f2d0 20 69 73 20 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 is not 0.");... 1f2e0 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 1f2f0 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 1f300 09 69 66 20 28 75 6c 50 61 72 74 4c 65 6e 20 3d .if (ulPartLen = 1f310 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 1f320 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1f330 72 6f 72 2e 20 75 6c 50 61 72 74 4c 65 6e 20 69 ror. ulPartLen i 1f340 73 20 30 2c 20 62 75 74 20 70 50 61 72 74 20 69 s 0, but pPart i 1f350 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a s not NULL.");.. 1f360 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG 1f370 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a UMENTS_BAD);..}. 1f380 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 1f390 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f cackey_mutex_lo 1f3a0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 1f3b0 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 1f3c0 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 1f3d0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1f3e0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 NTF("Error. Loc 1f3f0 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 1f400 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 1f410 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 1f420 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 ...if (!cackey_s 1f430 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1f440 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 ].active) {...ca 1f450 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 1f460 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1f470 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 1f480 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1f490 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 . Session not a 1f4a0 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 ctive.");......r 1f4b0 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 1f4c0 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 1f4d0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 1f4e0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1f4f0 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 ssion].sign_acti 1f500 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d ve) {...cackey_m 1f510 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 1f520 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 1f530 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1f540 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 69 67 NTF("Error. Sig 1f550 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b n not active."); 1f560 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 1f570 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 _OPERATION_NOT_I 1f580 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 1f590 0a 09 73 77 69 74 63 68 20 28 63 61 63 6b 65 79 ..switch (cackey 1f5a0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1f5b0 6f 6e 5d 2e 73 69 67 6e 5f 6d 65 63 68 61 6e 69 on].sign_mechani 1f5c0 73 6d 29 20 7b 0a 09 09 63 61 73 65 20 43 4b 4d sm) {...case CKM 1f5d0 5f 52 53 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a _RSA_PKCS:..../* 1f5e0 20 41 63 63 75 6d 75 6c 61 74 65 20 64 69 72 65 Accumulate dire 1f5f0 63 74 6c 79 20 2a 2f 0a 09 09 09 69 66 20 28 28 ctly */....if (( 1f600 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1f610 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 hSession].sign_b 1f620 75 66 75 73 65 64 20 2b 20 75 6c 50 61 72 74 4c ufused + ulPartL 1f630 65 6e 29 20 3e 20 63 61 63 6b 65 79 5f 73 65 73 en) > cackey_ses 1f640 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1f650 73 69 67 6e 5f 62 75 66 6c 65 6e 29 20 7b 0a 09 sign_buflen) {.. 1f660 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio 1f670 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 1f680 6e 5f 62 75 66 6c 65 6e 20 2a 3d 20 32 3b 0a 0a n_buflen *= 2;.. 1f690 09 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 ....cackey_sessi 1f6a0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 1f6b0 67 6e 5f 62 75 66 20 3d 20 72 65 61 6c 6c 6f 63 gn_buf = realloc 1f6c0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 1f6d0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 1f6e0 62 75 66 2c 20 73 69 7a 65 6f 66 28 2a 63 61 63 buf, sizeof(*cac 1f6f0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1f700 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 ssion].sign_buf) 1f710 20 2a 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f * cackey_sessio 1f720 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 1f730 6e 5f 62 75 66 6c 65 6e 29 3b 0a 09 09 09 7d 0a n_buflen);....}. 1f740 0a 09 09 09 6d 65 6d 63 70 79 28 63 61 63 6b 65 ....memcpy(cacke 1f750 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 1f760 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 20 2b 20 ion].sign_buf + 1f770 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1f780 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 hSession].sign_b 1f790 75 66 75 73 65 64 2c 20 70 50 61 72 74 2c 20 75 ufused, pPart, u 1f7a0 6c 50 61 72 74 4c 65 6e 29 3b 0a 0a 09 09 09 63 lPartLen);.....c 1f7b0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1f7c0 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 Session].sign_bu 1f7d0 66 75 73 65 64 20 2b 3d 20 75 6c 50 61 72 74 4c fused += ulPartL 1f7e0 65 6e 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 en;.....break;.. 1f7f0 09 63 61 73 65 20 43 4b 4d 5f 53 48 41 31 5f 52 .case CKM_SHA1_R 1f800 53 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 SA_PKCS:..../* A 1f810 63 63 75 6d 75 6c 61 74 65 20 69 6e 74 6f 20 61 ccumulate into a 1f820 20 53 48 41 31 20 68 61 73 68 20 2a 2f 0a 09 09 SHA1 hash */... 1f830 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e .cackey_mutex_un 1f840 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 1f850 6f 63 6b 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 ock);.....CACKEY 1f860 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 1f870 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 1f880 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 1f890 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 1f8a0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1f8b0 4f 52 54 45 44 29 3b 0a 0a 09 09 09 72 65 74 75 ORTED);.....retu 1f8c0 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 1f8d0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 1f8e0 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 6d ...break;..}...m 1f8f0 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 1f900 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 1f910 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1f920 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 1f930 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 1f940 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1f950 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f TF("Error. Unlo 1f960 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 1f970 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 1f980 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 1f990 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 1f9a0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1f9b0 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c ng CKR_OK (%i)", 1f9c0 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 CKR_OK);...retu 1f9d0 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 rn(CKR_OK);.}..C 1f9e0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 1f9f0 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 46 N(CK_RV, C_SignF 1fa00 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e inal)(CK_SESSION 1fa10 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 1fa20 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 , CK_BYTE_PTR pS 1fa30 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f ignature, CK_ULO 1fa40 4e 47 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 74 NG_PTR pulSignat 1fa50 75 72 65 4c 65 6e 29 20 7b 0a 09 73 74 61 74 69 ureLen) {..stati 1fa60 63 20 43 4b 5f 42 59 54 45 20 73 69 67 62 75 66 c CK_BYTE sigbuf 1fa70 5b 31 30 32 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 [1024];..ssize_t 1fa80 20 73 69 67 62 75 66 6c 65 6e 3b 0a 09 43 4b 5f sigbuflen;..CK_ 1fa90 52 56 20 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f RV retval = CKR_ 1faa0 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 GENERAL_ERROR;.. 1fab0 69 6e 74 20 74 65 72 6d 69 6e 61 74 65 5f 73 69 int terminate_si 1fac0 67 6e 20 3d 20 31 3b 0a 09 69 6e 74 20 6d 75 74 gn = 1;..int mut 1fad0 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 ex_retval;...CAC 1fae0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1faf0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 1fb00 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 1fb10 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 1fb20 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1fb30 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 1fb40 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 1fb50 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 1fb60 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 1fb70 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 ZED);..}...if (p 1fb80 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 20 3d ulSignatureLen = 1fb90 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK 1fba0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1fbb0 22 45 72 72 6f 72 2e 20 70 75 6c 53 69 67 6e 61 "Error. pulSigna 1fbc0 74 75 72 65 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e tureLen is NULL. 1fbd0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1fbe0 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 R_ARGUMENTS_BAD) 1fbf0 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 ;..}...if (hSess 1fc00 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 ion == 0 || hSes 1fc10 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 sion >= (sizeof( 1fc20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 1fc30 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 1fc40 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 _sessions[0]))) 1fc50 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1fc60 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1fc70 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 Session out of 1fc80 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 range.");......r 1fc90 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 1fca0 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 1fcb0 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 );..}...mutex_re 1fcc0 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 1fcd0 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 1fce0 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 1fcf0 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 1fd00 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1fd10 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1fd20 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 1fd30 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1fd40 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 1fd50 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 R);..}...if (!ca 1fd60 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1fd70 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 ession].active) 1fd80 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 1fd90 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 1fda0 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 1fdb0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1fdc0 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 1fdd0 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 1fde0 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 1fdf0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 1fe00 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 NVALID);..}...if 1fe10 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f (!cackey_sessio 1fe20 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 1fe30 6e 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 n_active) {...ca 1fe40 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 1fe50 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1fe60 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 1fe70 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1fe80 2e 20 20 53 69 67 6e 20 6e 6f 74 20 61 63 74 69 . Sign not acti 1fe90 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 ve.");......retu 1fea0 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e rn(CKR_OPERATION 1feb0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 1fec0 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 68 20 28 );..}...switch ( 1fed0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1fee0 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 6d hSession].sign_m 1fef0 65 63 68 61 6e 69 73 6d 29 20 7b 0a 09 09 63 61 echanism) {...ca 1ff00 73 65 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 3a se CKM_RSA_PKCS: 1ff10 0a 09 09 09 2f 2a 20 41 73 6b 20 63 61 72 64 20 ..../* Ask card 1ff20 74 6f 20 73 69 67 6e 20 2a 2f 0a 09 09 09 43 41 to sign */....CA 1ff30 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1ff40 46 28 22 41 73 6b 69 6e 67 20 74 6f 20 64 65 63 F("Asking to dec 1ff50 72 79 70 74 20 66 72 6f 6d 20 69 64 65 6e 74 69 rypt from identi 1ff60 74 79 20 25 70 20 69 6e 20 73 65 73 73 69 6f 6e ty %p in session 1ff70 20 25 6c 75 22 2c 20 63 61 63 6b 65 79 5f 73 65 %lu", cackey_se 1ff80 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 1ff90 2e 73 69 67 6e 5f 69 64 65 6e 74 69 74 79 2c 20 .sign_identity, 1ffa0 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 1ffb0 68 53 65 73 73 69 6f 6e 29 3b 0a 09 09 09 73 69 hSession);....si 1ffc0 67 62 75 66 6c 65 6e 20 3d 20 63 61 63 6b 65 79 gbuflen = cackey 1ffd0 5f 73 69 67 6e 64 65 63 72 79 70 74 28 26 63 61 _signdecrypt(&ca 1ffe0 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 61 63 6b 65 ckey_slots[cacke 1fff0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 20000 69 6f 6e 5d 2e 73 6c 6f 74 49 44 5d 2c 20 63 61 ion].slotID], ca 20010 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 20020 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 69 64 65 ession].sign_ide 20030 6e 74 69 74 79 2c 20 63 61 63 6b 65 79 5f 73 65 ntity, cackey_se 20040 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 20050 2e 73 69 67 6e 5f 62 75 66 2c 20 63 61 63 6b 65 .sign_buf, cacke 20060 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 20070 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c 65 6e ion].sign_buflen 20080 2c 20 73 69 67 62 75 66 2c 20 73 69 7a 65 6f 66 , sigbuf, sizeof 20090 28 73 69 67 62 75 66 29 29 3b 0a 0a 09 09 09 69 (sigbuf));.....i 200a0 66 20 28 73 69 67 62 75 66 6c 65 6e 20 3c 20 30 f (sigbuflen < 0 200b0 29 20 7b 0a 09 09 09 09 2f 2a 20 53 69 67 6e 69 ) {...../* Signi 200c0 6e 67 20 66 61 69 6c 65 64 2e 20 2a 2f 0a 09 09 ng failed. */... 200d0 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 47 ..retval = CKR_G 200e0 45 4e 45 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 09 ENERAL_ERROR;... 200f0 09 7d 20 65 6c 73 65 20 69 66 20 28 28 28 75 6e .} else if (((un 20100 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 69 67 signed long) sig 20110 62 75 66 6c 65 6e 29 20 3e 20 2a 70 75 6c 53 69 buflen) > *pulSi 20120 67 6e 61 74 75 72 65 4c 65 6e 20 26 26 20 70 53 gnatureLen && pS 20130 69 67 6e 61 74 75 72 65 29 20 7b 0a 09 09 09 09 ignature) {..... 20140 2f 2a 20 53 69 67 6e 65 64 20 64 61 74 61 20 74 /* Signed data t 20150 6f 6f 20 6c 61 72 67 65 20 2a 2f 0a 09 09 09 09 oo large */..... 20160 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 42 55 46 retval = CKR_BUF 20170 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b 0a 0a FER_TOO_SMALL;.. 20180 09 09 09 09 74 65 72 6d 69 6e 61 74 65 5f 73 69 ....terminate_si 20190 67 6e 20 3d 20 30 3b 0a 09 09 09 7d 20 65 6c 73 gn = 0;....} els 201a0 65 20 7b 0a 09 09 09 09 74 65 72 6d 69 6e 61 74 e {.....terminat 201b0 65 5f 73 69 67 6e 20 3d 20 30 3b 0a 0a 09 09 09 e_sign = 0;..... 201c0 09 69 66 20 28 70 53 69 67 6e 61 74 75 72 65 29 .if (pSignature) 201d0 20 7b 0a 09 09 09 09 09 6d 65 6d 63 70 79 28 70 {......memcpy(p 201e0 53 69 67 6e 61 74 75 72 65 2c 20 73 69 67 62 75 Signature, sigbu 201f0 66 2c 20 73 69 67 62 75 66 6c 65 6e 29 3b 0a 0a f, sigbuflen);.. 20200 09 09 09 09 09 74 65 72 6d 69 6e 61 74 65 5f 73 .....terminate_s 20210 69 67 6e 20 3d 20 31 3b 0a 09 09 09 09 7d 0a 0a ign = 1;.....}.. 20220 09 09 09 09 2a 70 75 6c 53 69 67 6e 61 74 75 72 ....*pulSignatur 20230 65 4c 65 6e 20 3d 20 73 69 67 62 75 66 6c 65 6e eLen = sigbuflen 20240 3b 0a 0a 09 09 09 09 72 65 74 76 61 6c 20 3d 20 ;......retval = 20250 43 4b 52 5f 4f 4b 3b 0a 09 09 09 7d 0a 0a 09 09 CKR_OK;....}.... 20260 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 43 .break;...case C 20270 4b 4d 5f 53 48 41 31 5f 52 53 41 5f 50 4b 43 53 KM_SHA1_RSA_PKCS 20280 3a 0a 09 09 09 2f 2a 20 41 63 63 75 6d 75 6c 61 :..../* Accumula 20290 74 65 20 69 6e 74 6f 20 61 20 53 48 41 31 20 68 te into a SHA1 h 202a0 61 73 68 20 2a 2f 0a 09 09 09 63 61 63 6b 65 79 ash */....cackey 202b0 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 202c0 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 202d0 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 202e0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 202f0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 20300 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 20310 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 20320 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 20330 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 20340 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 20350 50 4f 52 54 45 44 29 3b 0a 09 09 09 62 72 65 61 PORTED);....brea 20360 6b 3b 0a 09 7d 0a 0a 09 69 66 20 28 74 65 72 6d k;..}...if (term 20370 69 6e 61 74 65 5f 73 69 67 6e 29 20 7b 0a 09 09 inate_sign) {... 20380 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 if (cackey_sessi 20390 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 203a0 67 6e 5f 62 75 66 29 20 7b 0a 09 09 09 66 72 65 gn_buf) {....fre 203b0 65 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e e(cackey_session 203c0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 203d0 5f 62 75 66 29 3b 0a 09 09 7d 0a 0a 09 09 63 61 _buf);...}....ca 203e0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 203f0 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 ession].sign_act 20400 69 76 65 20 3d 20 30 3b 0a 09 7d 0a 0a 09 6d 75 ive = 0;..}...mu 20410 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 20420 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 20430 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 20440 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 20450 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 20460 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 20470 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 20480 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 20490 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 204a0 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 204b0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 204c0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 204d0 67 20 25 69 22 2c 20 28 69 6e 74 29 20 72 65 74 g %i", (int) ret 204e0 76 61 6c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 val);...return(r 204f0 65 74 76 61 6c 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 etval);.}..CK_DE 20500 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 20510 5f 52 56 2c 20 43 5f 53 69 67 6e 52 65 63 6f 76 _RV, C_SignRecov 20520 65 72 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 erInit)(CK_SESSI 20530 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 20540 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d on, CK_MECHANISM 20550 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c _PTR pMechanism, 20560 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL 20570 45 20 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 E hKey) {..CACKE 20580 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 20590 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 205a0 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 205b0 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 205c0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 205d0 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 205e0 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 205f0 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 20600 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 20610 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ 20620 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 20630 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 turning CKR_FUNC 20640 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 20650 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 ED (%i)", CKR_FU 20660 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 20670 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 RTED);...return( 20680 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 20690 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a _SUPPORTED);.}.. 206a0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 206b0 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e ON(CK_RV, C_Sign 206c0 52 65 63 6f 76 65 72 29 28 43 4b 5f 53 45 53 53 Recover)(CK_SESS 206d0 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 206e0 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 206f0 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 pData, CK_ULONG 20700 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 ulDataLen, CK_B 20710 59 54 45 5f 50 54 52 20 70 53 69 67 6e 61 74 75 YTE_PTR pSignatu 20720 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 re, CK_ULONG_PTR 20730 20 70 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e pulSignatureLen 20740 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 20750 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 20760 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 20770 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 20780 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 20790 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 207a0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 207b0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 207c0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 207d0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 207e0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 207f0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 20800 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 20810 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 20820 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 20830 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 20840 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 20850 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 20860 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 20870 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 20880 52 56 2c 20 43 5f 56 65 72 69 66 79 49 6e 69 74 RV, C_VerifyInit 20890 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 208a0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 208b0 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 _MECHANISM_PTR p 208c0 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 Mechanism, CK_OB 208d0 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 JECT_HANDLE hKey 208e0 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 208f0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 20900 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 20910 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 20920 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 20930 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 20940 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 20950 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 20960 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 20970 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 20980 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 20990 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 209a0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 209b0 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 209c0 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 209d0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 209e0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 209f0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 20a00 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 20a10 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 20a20 52 56 2c 20 43 5f 56 65 72 69 66 79 29 28 43 4b RV, C_Verify)(CK 20a30 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 20a40 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 hSession, CK_BYT 20a50 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f E_PTR pData, CK_ 20a60 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c ULONG ulDataLen, 20a70 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 CK_BYTE_PTR pSi 20a80 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e gnature, CK_ULON 20a90 47 20 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e G ulSignatureLen 20aa0 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 20ab0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 20ac0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 20ad0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 20ae0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 20af0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 20b00 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 20b10 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 20b20 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 20b30 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 20b40 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 20b50 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 20b60 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 20b70 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 20b80 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 20b90 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 20ba0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 20bb0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 20bc0 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 20bd0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 20be0 52 56 2c 20 43 5f 56 65 72 69 66 79 55 70 64 61 RV, C_VerifyUpda 20bf0 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 te)(CK_SESSION_H 20c00 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 20c10 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 CK_BYTE_PTR pPar 20c20 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 t, CK_ULONG ulPa 20c30 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 rtLen) {..CACKEY 20c40 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 20c50 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 20c60 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 20c70 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 20c80 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 20c90 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 20ca0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 20cb0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 20cc0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 20cd0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 20ce0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 20cf0 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 20d00 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 20d10 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 20d20 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 20d30 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 20d40 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 20d50 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 20d60 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 20d70 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66 N(CK_RV, C_Verif 20d80 79 46 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 yFinal)(CK_SESSI 20d90 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 20da0 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 20db0 70 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 pSignature, CK_U 20dc0 4c 4f 4e 47 20 75 6c 53 69 67 6e 61 74 75 72 65 LONG ulSignature 20dd0 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Len) {..CACKEY_D 20de0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 20df0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 20e00 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 20e10 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 20e20 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 20e30 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 20e40 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 20e50 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 20e60 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 20e70 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 20e80 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 20e90 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 20ea0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 20eb0 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 20ec0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 20ed0 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 20ee0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 20ef0 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 20f00 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 20f10 43 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66 79 52 CK_RV, C_VerifyR 20f20 65 63 6f 76 65 72 49 6e 69 74 29 28 43 4b 5f 53 ecoverInit)(CK_S 20f30 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 20f40 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 ession, CK_MECHA 20f50 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e NISM_PTR pMechan 20f60 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 ism, CK_OBJECT_H 20f70 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 ANDLE hKey) {..C 20f80 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 20f90 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 20fa0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 20fb0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 20fc0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 20fd0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 20fe0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 20ff0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 21000 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 21010 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 21020 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 21030 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 21040 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 21050 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 21060 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 21070 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 21080 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 21090 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 210a0 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 210b0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 210c0 56 65 72 69 66 79 52 65 63 6f 76 65 72 29 28 43 VerifyRecover)(C 210d0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 210e0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 210f0 54 45 5f 50 54 52 20 70 53 69 67 6e 61 74 75 72 TE_PTR pSignatur 21100 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 69 e, CK_ULONG ulSi 21110 67 6e 61 74 75 72 65 4c 65 6e 2c 20 43 4b 5f 42 gnatureLen, CK_B 21120 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 YTE_PTR pData, C 21130 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 44 K_ULONG_PTR pulD 21140 61 74 61 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 ataLen) {..CACKE 21150 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 21160 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 21170 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 21180 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 21190 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 211a0 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 211b0 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 211c0 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 211d0 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 211e0 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ 211f0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 21200 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 turning CKR_FUNC 21210 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 21220 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 ED (%i)", CKR_FU 21230 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 21240 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 RTED);...return( 21250 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 21260 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a _SUPPORTED);.}.. 21270 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 21280 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 ON(CK_RV, C_Dige 21290 73 74 45 6e 63 72 79 70 74 55 70 64 61 74 65 29 stEncryptUpdate) 212a0 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 212b0 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 212c0 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 BYTE_PTR pPart, 212d0 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c CK_ULONG ulPartL 212e0 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 en, CK_BYTE_PTR 212f0 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 pEncryptedPart, 21300 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 21310 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e EncryptedPartLen 21320 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 21330 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 21340 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 21350 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 21360 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 21370 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 21380 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 21390 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 213a0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 213b0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 213c0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 213d0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 213e0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 213f0 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 21400 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 21410 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 21420 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 21430 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 21440 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 21450 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 21460 52 56 2c 20 43 5f 44 65 63 72 79 70 74 44 69 67 RV, C_DecryptDig 21470 65 73 74 55 70 64 61 74 65 29 28 43 4b 5f 53 45 estUpdate)(CK_SE 21480 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 21490 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 ssion, CK_BYTE_P 214a0 54 52 20 70 45 6e 63 72 79 70 74 65 64 50 61 72 TR pEncryptedPar 214b0 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 45 6e t, CK_ULONG ulEn 214c0 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 2c 20 cryptedPartLen, 214d0 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 CK_BYTE_PTR pPar 214e0 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 t, CK_ULONG_PTR 214f0 70 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 pulPartLen) {..C 21500 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 21510 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 21520 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 21530 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 21540 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 21550 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 21560 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 21570 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 21580 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 21590 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 215a0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 215b0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 215c0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 215d0 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 215e0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 215f0 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 21600 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 21610 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 21620 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 21630 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 21640 53 69 67 6e 45 6e 63 72 79 70 74 55 70 64 61 74 SignEncryptUpdat 21650 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 e)(CK_SESSION_HA 21660 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 21670 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 K_BYTE_PTR pPart 21680 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 , CK_ULONG ulPar 21690 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 tLen, CK_BYTE_PT 216a0 52 20 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 R pEncryptedPart 216b0 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 , CK_ULONG_PTR p 216c0 75 6c 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c ulEncryptedPartL 216d0 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 en) {..CACKEY_DE 216e0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 216f0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 21700 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 21710 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 21720 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 21730 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 21740 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 21750 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 21760 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 21770 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 21780 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 21790 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 217a0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 217b0 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 217c0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 217d0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 217e0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 217f0 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 21800 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 21810 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 74 56 K_RV, C_DecryptV 21820 65 72 69 66 79 55 70 64 61 74 65 29 28 43 4b 5f erifyUpdate)(CK_ 21830 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 21840 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 21850 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 64 50 _PTR pEncryptedP 21860 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c art, CK_ULONG ul 21870 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e EncryptedPartLen 21880 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 , CK_BYTE_PTR pP 21890 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 art, CK_ULONG_PT 218a0 52 20 70 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a R pulPartLen) {. 218b0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 218c0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 218d0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 218e0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 218f0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 21900 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 21910 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 21920 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 21930 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 21940 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 21950 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 21960 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 21970 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 21980 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 21990 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 219a0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 219b0 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 219c0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 219d0 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 219e0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 219f0 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 29 28 43 C_GenerateKey)(C 21a00 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 21a10 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 hSession, CK_ME 21a20 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 CHANISM_PTR pMec 21a30 68 61 6e 69 73 6d 2c 20 43 4b 5f 41 54 54 52 49 hanism, CK_ATTRI 21a40 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 BUTE_PTR pTempla 21a50 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 te, CK_ULONG ulC 21a60 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f ount, CK_OBJECT_ 21a70 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4b 65 79 HANDLE_PTR phKey 21a80 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 21a90 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 21aa0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 21ab0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 21ac0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 21ad0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 21ae0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 21af0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 21b00 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 21b10 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 21b20 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 21b30 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 21b40 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 21b50 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 21b60 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 21b70 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 21b80 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 21b90 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 21ba0 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 21bb0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 21bc0 52 56 2c 20 43 5f 47 65 6e 65 72 61 74 65 4b 65 RV, C_GenerateKe 21bd0 79 50 61 69 72 29 28 43 4b 5f 53 45 53 53 49 4f yPair)(CK_SESSIO 21be0 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 21bf0 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f n, CK_MECHANISM_ 21c00 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 PTR pMechanism, 21c10 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 CK_ATTRIBUTE_PTR 21c20 20 70 50 75 62 6c 69 63 4b 65 79 54 65 6d 70 6c pPublicKeyTempl 21c30 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c ate, CK_ULONG ul 21c40 50 75 62 6c 69 63 4b 65 79 41 74 74 72 69 62 75 PublicKeyAttribu 21c50 74 65 43 6f 75 6e 74 2c 20 43 4b 5f 41 54 54 52 teCount, CK_ATTR 21c60 49 42 55 54 45 5f 50 54 52 20 70 50 72 69 76 61 IBUTE_PTR pPriva 21c70 74 65 4b 65 79 54 65 6d 70 6c 61 74 65 2c 20 43 teKeyTemplate, C 21c80 4b 5f 55 4c 4f 4e 47 20 75 6c 50 72 69 76 61 74 K_ULONG ulPrivat 21c90 65 4b 65 79 41 74 74 72 69 62 75 74 65 43 6f 75 eKeyAttributeCou 21ca0 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 nt, CK_OBJECT_HA 21cb0 4e 44 4c 45 5f 50 54 52 20 70 68 50 75 62 6c 69 NDLE_PTR phPubli 21cc0 63 4b 65 79 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f cKey, CK_OBJECT_ 21cd0 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 50 72 69 HANDLE_PTR phPri 21ce0 76 61 74 65 4b 65 79 29 20 7b 0a 09 43 41 43 4b vateKey) {..CACK 21cf0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 21d00 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 21d10 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 21d20 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 21d30 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 21d40 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 21d50 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 21d60 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 21d70 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 21d80 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 21d90 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 21da0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 21db0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 21dc0 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 21dd0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 21de0 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 21df0 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 21e00 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 21e10 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 21e20 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 57 72 61 ION(CK_RV, C_Wra 21e30 70 4b 65 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e pKey)(CK_SESSION 21e40 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 21e50 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 , CK_MECHANISM_P 21e60 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 TR pMechanism, C 21e70 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 K_OBJECT_HANDLE 21e80 68 57 72 61 70 70 69 6e 67 4b 65 79 2c 20 43 4b hWrappingKey, CK 21e90 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 _OBJECT_HANDLE h 21ea0 4b 65 79 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 Key, CK_BYTE_PTR 21eb0 20 70 57 72 61 70 70 65 64 4b 65 79 2c 20 43 4b pWrappedKey, CK 21ec0 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 57 72 _ULONG_PTR pulWr 21ed0 61 70 70 65 64 4b 65 79 4c 65 6e 29 20 7b 0a 09 appedKeyLen) {.. 21ee0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 21ef0 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 21f00 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 21f10 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 21f20 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 21f30 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 21f40 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 21f50 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 21f60 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 21f70 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 21f80 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 21f90 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 21fa0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 21fb0 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C 21fc0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 21fd0 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re 21fe0 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO 21ff0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 22000 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 22010 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 22020 5f 55 6e 77 72 61 70 4b 65 79 29 28 43 4b 5f 53 _UnwrapKey)(CK_S 22030 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 22040 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 ession, CK_MECHA 22050 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e NISM_PTR pMechan 22060 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 ism, CK_OBJECT_H 22070 41 4e 44 4c 45 20 68 55 6e 77 72 61 70 70 69 6e ANDLE hUnwrappin 22080 67 4b 65 79 2c 20 43 4b 5f 42 59 54 45 5f 50 54 gKey, CK_BYTE_PT 22090 52 20 70 57 72 61 70 70 65 64 4b 65 79 2c 20 43 R pWrappedKey, C 220a0 4b 5f 55 4c 4f 4e 47 20 75 6c 57 72 61 70 70 65 K_ULONG ulWrappe 220b0 64 4b 65 79 4c 65 6e 2c 20 43 4b 5f 41 54 54 52 dKeyLen, CK_ATTR 220c0 49 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c IBUTE_PTR pTempl 220d0 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c ate, CK_ULONG ul 220e0 41 74 74 72 69 62 75 74 65 43 6f 75 6e 74 2c 20 AttributeCount, 220f0 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 22100 5f 50 54 52 20 70 68 4b 65 79 29 20 7b 0a 09 43 _PTR phKey) {..C 22110 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 22120 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 22130 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 22140 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 22150 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 22160 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 22170 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 22180 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 22190 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 221a0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 221b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 221c0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 221d0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 221e0 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 221f0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 22200 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 22210 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 22220 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 22230 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 22240 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 22250 44 65 72 69 76 65 4b 65 79 29 28 43 4b 5f 53 45 DeriveKey)(CK_SE 22260 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 22270 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e ssion, CK_MECHAN 22280 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 ISM_PTR pMechani 22290 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 sm, CK_OBJECT_HA 222a0 4e 44 4c 45 20 68 42 61 73 65 4b 65 79 2c 20 43 NDLE hBaseKey, C 222b0 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 K_ATTRIBUTE_PTR 222c0 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c pTemplate, CK_UL 222d0 4f 4e 47 20 75 6c 41 74 74 72 69 62 75 74 65 43 ONG ulAttributeC 222e0 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f ount, CK_OBJECT_ 222f0 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4b 65 79 HANDLE_PTR phKey 22300 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 22310 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 22320 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 22330 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 22340 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 22350 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 22360 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 22370 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 22380 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 22390 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 223a0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 223b0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 223c0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 223d0 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 223e0 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 223f0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 22400 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 22410 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 22420 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 22430 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 22440 52 56 2c 20 43 5f 53 65 65 64 52 61 6e 64 6f 6d RV, C_SeedRandom 22450 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 22460 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 22470 5f 42 59 54 45 5f 50 54 52 20 70 53 65 65 64 2c _BYTE_PTR pSeed, 22480 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 65 65 64 CK_ULONG ulSeed 22490 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Len) {..CACKEY_D 224a0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 224b0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 224c0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 224d0 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 224e0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 224f0 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 22500 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 22510 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 22520 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 22530 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 22540 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 22550 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 22560 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 22570 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 22580 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 22590 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 225a0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 225b0 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 225c0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 225d0 43 4b 5f 52 56 2c 20 43 5f 47 65 6e 65 72 61 74 CK_RV, C_Generat 225e0 65 52 61 6e 64 6f 6d 29 28 43 4b 5f 53 45 53 53 eRandom)(CK_SESS 225f0 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 22600 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 22610 20 70 52 61 6e 64 6f 6d 44 61 74 61 2c 20 43 4b pRandomData, CK 22620 5f 55 4c 4f 4e 47 20 75 6c 52 61 6e 64 6f 6d 4c _ULONG ulRandomL 22630 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 en) {..CACKEY_DE 22640 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 22650 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 22660 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 22670 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 22680 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 22690 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 226a0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 226b0 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 226c0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 226d0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 226e0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 226f0 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 22700 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 22710 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 22720 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 22730 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 22740 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 22750 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 44 PORTED);.}../* D 22760 65 70 72 65 63 61 74 65 64 20 46 75 6e 63 74 69 eprecated Functi 22770 6f 6e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f on */.CK_DEFINE_ 22780 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 22790 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 53 74 61 C_GetFunctionSta 227a0 74 75 73 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f tus)(CK_SESSION_ 227b0 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 HANDLE hSession) 227c0 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 227d0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 227e0 22 29 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ");...CACKEY_DEB 227f0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 22800 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 22810 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 20 28 N_NOT_PARALLEL ( 22820 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 22830 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 ON_NOT_PARALLEL) 22840 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 22850 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 UNCTION_NOT_PARA 22860 4c 4c 45 4c 29 3b 0a 0a 09 68 53 65 73 73 69 6f LLEL);...hSessio 22870 6e 20 3d 20 68 53 65 73 73 69 6f 6e 3b 20 2f 2a n = hSession; /* 22880 20 53 75 70 72 65 73 73 20 75 6e 75 73 65 64 20 Supress unused 22890 76 61 72 69 61 62 6c 65 20 77 61 72 6e 69 6e 67 variable warning 228a0 20 2a 2f 0a 7d 0a 0a 2f 2a 20 44 65 70 72 65 63 */.}../* Deprec 228b0 61 74 65 64 20 46 75 6e 63 74 69 6f 6e 20 2a 2f ated Function */ 228c0 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 228d0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 61 6e ION(CK_RV, C_Can 228e0 63 65 6c 46 75 6e 63 74 69 6f 6e 29 28 43 4b 5f celFunction)(CK_ 228f0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 22900 53 65 73 73 69 6f 6e 29 20 7b 0a 09 43 41 43 4b Session) {..CACK 22910 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 22920 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 43 41 "Called.");...CA 22930 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 22940 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 22950 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 _FUNCTION_NOT_PA 22960 52 41 4c 4c 45 4c 20 28 25 69 29 22 2c 20 43 4b RALLEL (%i)", CK 22970 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 R_FUNCTION_NOT_P 22980 41 52 41 4c 4c 45 4c 29 3b 0a 0a 09 72 65 74 75 ARALLEL);...retu 22990 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 229a0 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a NOT_PARALLEL);.. 229b0 09 68 53 65 73 73 69 6f 6e 20 3d 20 68 53 65 73 .hSession = hSes 229c0 73 69 6f 6e 3b 20 2f 2a 20 53 75 70 72 65 73 73 sion; /* Supress 229d0 20 75 6e 75 73 65 64 20 76 61 72 69 61 62 6c 65 unused variable 229e0 20 77 61 72 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 43 warning */.}..C 229f0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 22a00 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 46 75 N(CK_RV, C_GetFu 22a10 6e 63 74 69 6f 6e 4c 69 73 74 29 28 43 4b 5f 46 nctionList)(CK_F 22a20 55 4e 43 54 49 4f 4e 5f 4c 49 53 54 5f 50 54 52 UNCTION_LIST_PTR 22a30 5f 50 54 52 20 70 70 46 75 6e 63 74 69 6f 6e 4c _PTR ppFunctionL 22a40 69 73 74 29 20 7b 0a 09 43 4b 5f 46 55 4e 43 54 ist) {..CK_FUNCT 22a50 49 4f 4e 5f 4c 49 53 54 5f 50 54 52 20 70 46 75 ION_LIST_PTR pFu 22a60 6e 63 74 69 6f 6e 4c 69 73 74 3b 0a 0a 09 43 41 nctionList;...CA 22a70 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 22a80 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 22a90 69 66 20 28 70 70 46 75 6e 63 74 69 6f 6e 4c 69 if (ppFunctionLi 22aa0 73 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 st == NULL) {... 22ab0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 22ac0 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 70 46 75 NTF("Error. ppFu 22ad0 6e 63 74 69 6f 6e 4c 69 73 74 20 69 73 20 4e 55 nctionList is NU 22ae0 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 22af0 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 22b00 41 44 29 3b 0a 09 7d 0a 0a 09 70 46 75 6e 63 74 AD);..}...pFunct 22b10 69 6f 6e 4c 69 73 74 20 3d 20 6d 61 6c 6c 6f 63 ionList = malloc 22b20 28 73 69 7a 65 6f 66 28 2a 70 46 75 6e 63 74 69 (sizeof(*pFuncti 22b30 6f 6e 4c 69 73 74 29 29 3b 0a 0a 09 70 46 75 6e onList));...pFun 22b40 63 74 69 6f 6e 4c 69 73 74 2d 3e 76 65 72 73 69 ctionList->versi 22b50 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 28 43 41 43 on.major = ((CAC 22b60 4b 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 KEY_CRYPTOKI_VER 22b70 53 49 4f 4e 5f 43 4f 44 45 29 20 3e 3e 20 31 36 SION_CODE) >> 16 22b80 29 20 26 20 30 78 66 66 3b 0a 09 70 46 75 6e 63 ) & 0xff;..pFunc 22b90 74 69 6f 6e 4c 69 73 74 2d 3e 76 65 72 73 69 6f tionList->versio 22ba0 6e 2e 6d 69 6e 6f 72 20 3d 20 28 28 43 41 43 4b n.minor = ((CACK 22bb0 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 53 EY_CRYPTOKI_VERS 22bc0 49 4f 4e 5f 43 4f 44 45 29 20 3e 3e 20 38 29 20 ION_CODE) >> 8) 22bd0 26 20 30 78 66 66 3b 0a 0a 09 70 46 75 6e 63 74 & 0xff;...pFunct 22be0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 49 6e 69 74 69 ionList->C_Initi 22bf0 61 6c 69 7a 65 20 3d 20 43 5f 49 6e 69 74 69 61 alize = C_Initia 22c00 6c 69 7a 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e lize;..pFunction 22c10 4c 69 73 74 2d 3e 43 5f 46 69 6e 61 6c 69 7a 65 List->C_Finalize 22c20 20 3d 20 43 5f 46 69 6e 61 6c 69 7a 65 3b 0a 09 = C_Finalize;.. 22c30 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 22c40 5f 47 65 74 49 6e 66 6f 20 3d 20 43 5f 47 65 74 _GetInfo = C_Get 22c50 49 6e 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e Info;..pFunction 22c60 4c 69 73 74 2d 3e 43 5f 47 65 74 53 6c 6f 74 4c List->C_GetSlotL 22c70 69 73 74 20 3d 20 43 5f 47 65 74 53 6c 6f 74 4c ist = C_GetSlotL 22c80 69 73 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ist;..pFunctionL 22c90 69 73 74 2d 3e 43 5f 47 65 74 53 6c 6f 74 49 6e ist->C_GetSlotIn 22ca0 66 6f 20 3d 20 43 5f 47 65 74 53 6c 6f 74 49 6e fo = C_GetSlotIn 22cb0 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 fo;..pFunctionLi 22cc0 73 74 2d 3e 43 5f 47 65 74 54 6f 6b 65 6e 49 6e st->C_GetTokenIn 22cd0 66 6f 20 3d 20 43 5f 47 65 74 54 6f 6b 65 6e 49 fo = C_GetTokenI 22ce0 6e 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c nfo;..pFunctionL 22cf0 69 73 74 2d 3e 43 5f 57 61 69 74 46 6f 72 53 6c ist->C_WaitForSl 22d00 6f 74 45 76 65 6e 74 20 3d 20 43 5f 57 61 69 74 otEvent = C_Wait 22d10 46 6f 72 53 6c 6f 74 45 76 65 6e 74 3b 0a 09 70 ForSlotEvent;..p 22d20 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 22d30 47 65 74 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 GetMechanismList 22d40 20 3d 20 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 = C_GetMechanis 22d50 6d 4c 69 73 74 3b 0a 09 70 46 75 6e 63 74 69 6f mList;..pFunctio 22d60 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 4d 65 63 68 nList->C_GetMech 22d70 61 6e 69 73 6d 49 6e 66 6f 20 3d 20 43 5f 47 65 anismInfo = C_Ge 22d80 74 4d 65 63 68 61 6e 69 73 6d 49 6e 66 6f 3b 0a tMechanismInfo;. 22d90 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 22da0 43 5f 49 6e 69 74 54 6f 6b 65 6e 20 3d 20 43 5f C_InitToken = C_ 22db0 49 6e 69 74 54 6f 6b 65 6e 3b 0a 09 70 46 75 6e InitToken;..pFun 22dc0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 49 6e 69 ctionList->C_Ini 22dd0 74 50 49 4e 20 3d 20 43 5f 49 6e 69 74 50 49 4e tPIN = C_InitPIN 22de0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 22df0 2d 3e 43 5f 53 65 74 50 49 4e 20 3d 20 43 5f 53 ->C_SetPIN = C_S 22e00 65 74 50 49 4e 3b 0a 09 70 46 75 6e 63 74 69 6f etPIN;..pFunctio 22e10 6e 4c 69 73 74 2d 3e 43 5f 4f 70 65 6e 53 65 73 nList->C_OpenSes 22e20 73 69 6f 6e 20 3d 20 43 5f 4f 70 65 6e 53 65 73 sion = C_OpenSes 22e30 73 69 6f 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e sion;..pFunction 22e40 4c 69 73 74 2d 3e 43 5f 43 6c 6f 73 65 53 65 73 List->C_CloseSes 22e50 73 69 6f 6e 20 3d 20 43 5f 43 6c 6f 73 65 53 65 sion = C_CloseSe 22e60 73 73 69 6f 6e 3b 0a 09 70 46 75 6e 63 74 69 6f ssion;..pFunctio 22e70 6e 4c 69 73 74 2d 3e 43 5f 43 6c 6f 73 65 41 6c nList->C_CloseAl 22e80 6c 53 65 73 73 69 6f 6e 73 20 3d 20 43 5f 43 6c lSessions = C_Cl 22e90 6f 73 65 41 6c 6c 53 65 73 73 69 6f 6e 73 3b 0a oseAllSessions;. 22ea0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 22eb0 43 5f 47 65 74 53 65 73 73 69 6f 6e 49 6e 66 6f C_GetSessionInfo 22ec0 20 3d 20 43 5f 47 65 74 53 65 73 73 69 6f 6e 49 = C_GetSessionI 22ed0 6e 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c nfo;..pFunctionL 22ee0 69 73 74 2d 3e 43 5f 47 65 74 4f 70 65 72 61 74 ist->C_GetOperat 22ef0 69 6f 6e 53 74 61 74 65 20 3d 20 43 5f 47 65 74 ionState = C_Get 22f00 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 3b 0a OperationState;. 22f10 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 22f20 43 5f 53 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 C_SetOperationSt 22f30 61 74 65 20 3d 20 43 5f 53 65 74 4f 70 65 72 61 ate = C_SetOpera 22f40 74 69 6f 6e 53 74 61 74 65 3b 0a 09 70 46 75 6e tionState;..pFun 22f50 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 4c 6f 67 ctionList->C_Log 22f60 69 6e 20 3d 20 43 5f 4c 6f 67 69 6e 3b 0a 09 70 in = C_Login;..p 22f70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 22f80 4c 6f 67 6f 75 74 20 3d 20 43 5f 4c 6f 67 6f 75 Logout = C_Logou 22f90 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t;..pFunctionLis 22fa0 74 2d 3e 43 5f 43 72 65 61 74 65 4f 62 6a 65 63 t->C_CreateObjec 22fb0 74 20 3d 20 43 5f 43 72 65 61 74 65 4f 62 6a 65 t = C_CreateObje 22fc0 63 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 ct;..pFunctionLi 22fd0 73 74 2d 3e 43 5f 43 6f 70 79 4f 62 6a 65 63 74 st->C_CopyObject 22fe0 20 3d 20 43 5f 43 6f 70 79 4f 62 6a 65 63 74 3b = C_CopyObject; 22ff0 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 23000 3e 43 5f 44 65 73 74 72 6f 79 4f 62 6a 65 63 74 >C_DestroyObject 23010 20 3d 20 43 5f 44 65 73 74 72 6f 79 4f 62 6a 65 = C_DestroyObje 23020 63 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 ct;..pFunctionLi 23030 73 74 2d 3e 43 5f 47 65 74 4f 62 6a 65 63 74 53 st->C_GetObjectS 23040 69 7a 65 20 3d 20 43 5f 47 65 74 4f 62 6a 65 63 ize = C_GetObjec 23050 74 53 69 7a 65 3b 0a 09 70 46 75 6e 63 74 69 6f tSize;..pFunctio 23060 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 41 74 74 72 nList->C_GetAttr 23070 69 62 75 74 65 56 61 6c 75 65 20 3d 20 43 5f 47 ibuteValue = C_G 23080 65 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 65 etAttributeValue 23090 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 230a0 2d 3e 43 5f 53 65 74 41 74 74 72 69 62 75 74 65 ->C_SetAttribute 230b0 56 61 6c 75 65 20 3d 20 43 5f 53 65 74 41 74 74 Value = C_SetAtt 230c0 72 69 62 75 74 65 56 61 6c 75 65 3b 0a 09 70 46 ributeValue;..pF 230d0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 unctionList->C_F 230e0 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 20 3d indObjectsInit = 230f0 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e C_FindObjectsIn 23100 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 it;..pFunctionLi 23110 73 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 st->C_FindObject 23120 73 20 3d 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 s = C_FindObject 23130 73 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 s;..pFunctionLis 23140 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 t->C_FindObjects 23150 46 69 6e 61 6c 20 3d 20 43 5f 46 69 6e 64 4f 62 Final = C_FindOb 23160 6a 65 63 74 73 46 69 6e 61 6c 3b 0a 09 70 46 75 jectsFinal;..pFu 23170 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e nctionList->C_En 23180 63 72 79 70 74 49 6e 69 74 20 3d 20 43 5f 45 6e cryptInit = C_En 23190 63 72 79 70 74 49 6e 69 74 3b 0a 09 70 46 75 6e cryptInit;..pFun 231a0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 ctionList->C_Enc 231b0 72 79 70 74 20 3d 20 43 5f 45 6e 63 72 79 70 74 rypt = C_Encrypt 231c0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 231d0 2d 3e 43 5f 45 6e 63 72 79 70 74 55 70 64 61 74 ->C_EncryptUpdat 231e0 65 20 3d 20 43 5f 45 6e 63 72 79 70 74 55 70 64 e = C_EncryptUpd 231f0 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ate;..pFunctionL 23200 69 73 74 2d 3e 43 5f 45 6e 63 72 79 70 74 46 69 ist->C_EncryptFi 23210 6e 61 6c 20 3d 20 43 5f 45 6e 63 72 79 70 74 46 nal = C_EncryptF 23220 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e inal;..pFunction 23230 4c 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 49 List->C_DecryptI 23240 6e 69 74 20 3d 20 43 5f 44 65 63 72 79 70 74 49 nit = C_DecryptI 23250 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c nit;..pFunctionL 23260 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 20 3d ist->C_Decrypt = 23270 20 43 5f 44 65 63 72 79 70 74 3b 0a 09 70 46 75 C_Decrypt;..pFu 23280 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 nctionList->C_De 23290 63 72 79 70 74 55 70 64 61 74 65 20 3d 20 43 5f cryptUpdate = C_ 232a0 44 65 63 72 79 70 74 55 70 64 61 74 65 3b 0a 09 DecryptUpdate;.. 232b0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 232c0 5f 44 65 63 72 79 70 74 46 69 6e 61 6c 20 3d 20 _DecryptFinal = 232d0 43 5f 44 65 63 72 79 70 74 46 69 6e 61 6c 3b 0a C_DecryptFinal;. 232e0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 232f0 43 5f 44 69 67 65 73 74 49 6e 69 74 20 3d 20 43 C_DigestInit = C 23300 5f 44 69 67 65 73 74 49 6e 69 74 3b 0a 09 70 46 _DigestInit;..pF 23310 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 unctionList->C_D 23320 69 67 65 73 74 20 3d 20 43 5f 44 69 67 65 73 74 igest = C_Digest 23330 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 23340 2d 3e 43 5f 44 69 67 65 73 74 55 70 64 61 74 65 ->C_DigestUpdate 23350 20 3d 20 43 5f 44 69 67 65 73 74 55 70 64 61 74 = C_DigestUpdat 23360 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 e;..pFunctionLis 23370 74 2d 3e 43 5f 44 69 67 65 73 74 4b 65 79 20 3d t->C_DigestKey = 23380 20 43 5f 44 69 67 65 73 74 4b 65 79 3b 0a 09 70 C_DigestKey;..p 23390 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 233a0 44 69 67 65 73 74 46 69 6e 61 6c 20 3d 20 43 5f DigestFinal = C_ 233b0 44 69 67 65 73 74 46 69 6e 61 6c 3b 0a 09 70 46 DigestFinal;..pF 233c0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 unctionList->C_S 233d0 69 67 6e 49 6e 69 74 20 3d 20 43 5f 53 69 67 6e ignInit = C_Sign 233e0 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e Init;..pFunction 233f0 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 20 3d 20 43 List->C_Sign = C 23400 5f 53 69 67 6e 3b 0a 09 70 46 75 6e 63 74 69 6f _Sign;..pFunctio 23410 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 55 70 64 nList->C_SignUpd 23420 61 74 65 20 3d 20 43 5f 53 69 67 6e 55 70 64 61 ate = C_SignUpda 23430 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 te;..pFunctionLi 23440 73 74 2d 3e 43 5f 53 69 67 6e 46 69 6e 61 6c 20 st->C_SignFinal 23450 3d 20 43 5f 53 69 67 6e 46 69 6e 61 6c 3b 0a 09 = C_SignFinal;.. 23460 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 23470 5f 53 69 67 6e 52 65 63 6f 76 65 72 49 6e 69 74 _SignRecoverInit 23480 20 3d 20 43 5f 53 69 67 6e 52 65 63 6f 76 65 72 = C_SignRecover 23490 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e Init;..pFunction 234a0 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 52 65 63 6f List->C_SignReco 234b0 76 65 72 20 3d 20 43 5f 53 69 67 6e 52 65 63 6f ver = C_SignReco 234c0 76 65 72 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ver;..pFunctionL 234d0 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 49 6e 69 ist->C_VerifyIni 234e0 74 20 3d 20 43 5f 56 65 72 69 66 79 49 6e 69 74 t = C_VerifyInit 234f0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 23500 2d 3e 43 5f 56 65 72 69 66 79 20 3d 20 43 5f 56 ->C_Verify = C_V 23510 65 72 69 66 79 3b 0a 09 70 46 75 6e 63 74 69 6f erify;..pFunctio 23520 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 55 nList->C_VerifyU 23530 70 64 61 74 65 20 3d 20 43 5f 56 65 72 69 66 79 pdate = C_Verify 23540 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 Update;..pFuncti 23550 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 onList->C_Verify 23560 46 69 6e 61 6c 20 3d 20 43 5f 56 65 72 69 66 79 Final = C_Verify 23570 46 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f Final;..pFunctio 23580 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 52 nList->C_VerifyR 23590 65 63 6f 76 65 72 49 6e 69 74 20 3d 20 43 5f 56 ecoverInit = C_V 235a0 65 72 69 66 79 52 65 63 6f 76 65 72 49 6e 69 74 erifyRecoverInit 235b0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 235c0 2d 3e 43 5f 56 65 72 69 66 79 52 65 63 6f 76 65 ->C_VerifyRecove 235d0 72 20 3d 20 43 5f 56 65 72 69 66 79 52 65 63 6f r = C_VerifyReco 235e0 76 65 72 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ver;..pFunctionL 235f0 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 45 6e 63 ist->C_DigestEnc 23600 72 79 70 74 55 70 64 61 74 65 20 3d 20 43 5f 44 ryptUpdate = C_D 23610 69 67 65 73 74 45 6e 63 72 79 70 74 55 70 64 61 igestEncryptUpda 23620 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 te;..pFunctionLi 23630 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 44 69 67 st->C_DecryptDig 23640 65 73 74 55 70 64 61 74 65 20 3d 20 43 5f 44 65 estUpdate = C_De 23650 63 72 79 70 74 44 69 67 65 73 74 55 70 64 61 74 cryptDigestUpdat 23660 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 e;..pFunctionLis 23670 74 2d 3e 43 5f 53 69 67 6e 45 6e 63 72 79 70 74 t->C_SignEncrypt 23680 55 70 64 61 74 65 20 3d 20 43 5f 53 69 67 6e 45 Update = C_SignE 23690 6e 63 72 79 70 74 55 70 64 61 74 65 3b 0a 09 70 ncryptUpdate;..p 236a0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 236b0 44 65 63 72 79 70 74 56 65 72 69 66 79 55 70 64 DecryptVerifyUpd 236c0 61 74 65 20 3d 20 43 5f 44 65 63 72 79 70 74 56 ate = C_DecryptV 236d0 65 72 69 66 79 55 70 64 61 74 65 3b 0a 09 70 46 erifyUpdate;..pF 236e0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 unctionList->C_G 236f0 65 6e 65 72 61 74 65 4b 65 79 20 3d 20 43 5f 47 enerateKey = C_G 23700 65 6e 65 72 61 74 65 4b 65 79 3b 0a 09 70 46 75 enerateKey;..pFu 23710 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge 23720 6e 65 72 61 74 65 4b 65 79 50 61 69 72 20 3d 20 nerateKeyPair = 23730 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 50 61 69 C_GenerateKeyPai 23740 72 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 r;..pFunctionLis 23750 74 2d 3e 43 5f 57 72 61 70 4b 65 79 20 3d 20 43 t->C_WrapKey = C 23760 5f 57 72 61 70 4b 65 79 3b 0a 09 70 46 75 6e 63 _WrapKey;..pFunc 23770 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 55 6e 77 72 tionList->C_Unwr 23780 61 70 4b 65 79 20 3d 20 43 5f 55 6e 77 72 61 70 apKey = C_Unwrap 23790 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c Key;..pFunctionL 237a0 69 73 74 2d 3e 43 5f 44 65 72 69 76 65 4b 65 79 ist->C_DeriveKey 237b0 20 3d 20 43 5f 44 65 72 69 76 65 4b 65 79 3b 0a = C_DeriveKey;. 237c0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 237d0 43 5f 53 65 65 64 52 61 6e 64 6f 6d 20 3d 20 43 C_SeedRandom = C 237e0 5f 53 65 65 64 52 61 6e 64 6f 6d 3b 0a 09 70 46 _SeedRandom;..pF 237f0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 unctionList->C_G 23800 65 6e 65 72 61 74 65 52 61 6e 64 6f 6d 20 3d 20 enerateRandom = 23810 43 5f 47 65 6e 65 72 61 74 65 52 61 6e 64 6f 6d C_GenerateRandom 23820 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 23830 2d 3e 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 53 ->C_GetFunctionS 23840 74 61 74 75 73 20 3d 20 43 5f 47 65 74 46 75 6e tatus = C_GetFun 23850 63 74 69 6f 6e 53 74 61 74 75 73 3b 0a 09 70 46 ctionStatus;..pF 23860 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 unctionList->C_C 23870 61 6e 63 65 6c 46 75 6e 63 74 69 6f 6e 20 3d 20 ancelFunction = 23880 43 5f 43 61 6e 63 65 6c 46 75 6e 63 74 69 6f 6e C_CancelFunction 23890 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 238a0 2d 3e 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 4c ->C_GetFunctionL 238b0 69 73 74 20 3d 20 43 5f 47 65 74 46 75 6e 63 74 ist = C_GetFunct 238c0 69 6f 6e 4c 69 73 74 3b 0a 0a 09 2a 70 70 46 75 ionList;...*ppFu 238d0 6e 63 74 69 6f 6e 4c 69 73 74 20 3d 20 70 46 75 nctionList = pFu 238e0 6e 63 74 69 6f 6e 4c 69 73 74 3b 0a 0a 09 43 41 nctionList;...CA 238f0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 23900 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 23910 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f _OK (%i)", CKR_O 23920 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 K);...return(CKR 23930 5f 4f 4b 29 3b 0a 7d 0a 0a _OK);.}..