Artifact 4cc11579bde03ba574f14ce9865271035ec7c72e:
- File
cackey.c
— part of check-in
[eaa9f36a2b]
at
2010-05-17 00:20:06
on branch trunk
— Fixed issues with signdecrypt buffer sizes
Centralized reading of identities
Added debugging to determine why wrong applet ID is being stored in identity (user: rkeene, size: 144712) [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 5a 4c 49 42 5f ifdef HAVE_ZLIB_ 01e0: 48 0a 23 20 20 69 66 64 65 66 20 48 41 56 45 5f H.# ifdef HAVE_ 01f0: 4c 49 42 5a 0a 23 20 20 20 20 69 6e 63 6c 75 64 LIBZ.# includ 0200: 65 20 3c 7a 6c 69 62 2e 68 3e 0a 23 20 20 65 6e e <zlib.h>.# en 0210: 64 69 66 0a 23 65 6c 73 65 0a 23 20 20 69 66 64 dif.#else.# ifd 0220: 65 66 20 48 41 56 45 5f 4c 49 42 5a 0a 23 20 20 ef HAVE_LIBZ.# 0230: 20 20 75 6e 64 65 66 20 48 41 56 45 5f 4c 49 42 undef HAVE_LIB 0240: 5a 0a 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 Z.# endif.#endi 0250: 66 0a 0a 23 64 65 66 69 6e 65 20 43 4b 5f 50 54 f..#define CK_PT 0260: 52 20 2a 0a 23 64 65 66 69 6e 65 20 43 4b 5f 44 R *.#define CK_D 0270: 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 72 EFINE_FUNCTION(r 0280: 65 74 75 72 6e 54 79 70 65 2c 20 6e 61 6d 65 29 eturnType, name) 0290: 20 72 65 74 75 72 6e 54 79 70 65 20 6e 61 6d 65 returnType name 02a0: 0a 23 64 65 66 69 6e 65 20 43 4b 5f 44 45 43 4c .#define CK_DECL 02b0: 41 52 45 5f 46 55 4e 43 54 49 4f 4e 28 72 65 74 ARE_FUNCTION(ret 02c0: 75 72 6e 54 79 70 65 2c 20 6e 61 6d 65 29 20 72 urnType, name) r 02d0: 65 74 75 72 6e 54 79 70 65 20 6e 61 6d 65 0a 23 eturnType name.# 02e0: 64 65 66 69 6e 65 20 43 4b 5f 44 45 43 4c 41 52 define CK_DECLAR 02f0: 45 5f 46 55 4e 43 54 49 4f 4e 5f 50 4f 49 4e 54 E_FUNCTION_POINT 0300: 45 52 28 72 65 74 75 72 6e 54 79 70 65 2c 20 6e ER(returnType, n 0310: 61 6d 65 29 20 72 65 74 75 72 6e 54 79 70 65 20 ame) returnType 0320: 28 2a 20 6e 61 6d 65 29 0a 23 64 65 66 69 6e 65 (* name).#define 0330: 20 43 4b 5f 43 41 4c 4c 42 41 43 4b 5f 46 55 4e CK_CALLBACK_FUN 0340: 43 54 49 4f 4e 28 72 65 74 75 72 6e 54 79 70 65 CTION(returnType 0350: 2c 20 6e 61 6d 65 29 20 72 65 74 75 72 6e 54 79 , name) returnTy 0360: 70 65 20 28 2a 20 6e 61 6d 65 29 0a 23 69 66 6e pe (* name).#ifn 0370: 64 65 66 20 4e 55 4c 4c 5f 50 54 52 0a 23 20 20 def NULL_PTR.# 0380: 64 65 66 69 6e 65 20 4e 55 4c 4c 5f 50 54 52 20 define NULL_PTR 0390: 30 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 0.#endif..#inclu 03a0: 64 65 20 22 70 6b 63 73 31 31 2e 68 22 0a 23 69 de "pkcs11.h".#i 03b0: 6e 63 6c 75 64 65 20 22 61 73 6e 31 2d 78 35 30 nclude "asn1-x50 03c0: 39 2e 68 22 0a 0a 23 69 66 6e 64 65 66 20 43 41 9.h"..#ifndef CA 03d0: 43 4b 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 CKEY_CRYPTOKI_VE 03e0: 52 53 49 4f 4e 5f 43 4f 44 45 0a 23 20 20 64 65 RSION_CODE.# de 03f0: 66 69 6e 65 20 43 41 43 4b 45 59 5f 43 52 59 50 fine CACKEY_CRYP 0400: 54 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 TOKI_VERSION_COD 0410: 45 20 30 78 30 32 31 65 30 30 0a 23 65 6e 64 69 E 0x021e00.#endi 0420: 66 0a 0a 23 69 66 6e 64 65 66 20 43 4b 41 5f 54 f..#ifndef CKA_T 0430: 52 55 53 54 5f 53 45 52 56 45 52 5f 41 55 54 48 RUST_SERVER_AUTH 0440: 0a 23 20 20 64 65 66 69 6e 65 20 43 4b 41 5f 54 .# define CKA_T 0450: 52 55 53 54 5f 53 45 52 56 45 52 5f 41 55 54 48 RUST_SERVER_AUTH 0460: 20 30 78 63 65 35 33 36 33 35 38 0a 23 65 6e 64 0xce536358.#end 0470: 69 66 0a 23 69 66 6e 64 65 66 20 43 4b 41 5f 54 if.#ifndef CKA_T 0480: 52 55 53 54 5f 43 4c 49 45 4e 54 5f 41 55 54 48 RUST_CLIENT_AUTH 0490: 0a 23 20 20 64 65 66 69 6e 65 20 43 4b 41 5f 54 .# define CKA_T 04a0: 52 55 53 54 5f 43 4c 49 45 4e 54 5f 41 55 54 48 RUST_CLIENT_AUTH 04b0: 20 30 78 63 65 35 33 36 33 35 39 0a 23 65 6e 64 0xce536359.#end 04c0: 69 66 0a 23 69 66 6e 64 65 66 20 43 4b 41 5f 54 if.#ifndef CKA_T 04d0: 52 55 53 54 5f 43 4f 44 45 5f 53 49 47 4e 49 4e RUST_CODE_SIGNIN 04e0: 47 0a 23 20 20 64 65 66 69 6e 65 20 43 4b 41 5f G.# define CKA_ 04f0: 54 52 55 53 54 5f 43 4f 44 45 5f 53 49 47 4e 49 TRUST_CODE_SIGNI 0500: 4e 47 20 30 78 63 65 35 33 36 33 35 61 0a 23 65 NG 0xce53635a.#e 0510: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 43 4b 41 ndif.#ifndef CKA 0520: 5f 54 52 55 53 54 5f 45 4d 41 49 4c 5f 50 52 4f _TRUST_EMAIL_PRO 0530: 54 45 43 54 49 4f 4e 0a 23 20 20 64 65 66 69 6e TECTION.# defin 0540: 65 20 43 4b 41 5f 54 52 55 53 54 5f 45 4d 41 49 e CKA_TRUST_EMAI 0550: 4c 5f 50 52 4f 54 45 43 54 49 4f 4e 20 30 78 63 L_PROTECTION 0xc 0560: 65 35 33 36 33 35 62 0a 23 65 6e 64 69 66 0a 0a e53635b.#endif.. 0570: 2f 2a 20 47 53 43 2d 49 53 20 76 32 2e 31 20 44 /* GSC-IS v2.1 D 0580: 65 66 69 6e 69 74 69 6f 6e 73 20 2a 2f 0a 2f 2a efinitions */./* 0590: 2a 20 43 6c 61 73 73 65 73 20 2a 2a 2f 0a 23 64 * Classes **/.#d 05a0: 65 66 69 6e 65 20 47 53 43 49 53 5f 43 4c 41 53 efine GSCIS_CLAS 05b0: 53 5f 49 53 4f 37 38 31 36 20 20 20 20 20 20 20 S_ISO7816 05c0: 20 20 20 20 30 78 30 30 0a 23 64 65 66 69 6e 65 0x00.#define 05d0: 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 47 4c 4f GSCIS_CLASS_GLO 05e0: 42 41 4c 5f 50 4c 41 54 46 4f 52 4d 20 20 20 30 BAL_PLATFORM 0 05f0: 78 38 30 0a 0a 2f 2a 2a 20 49 6e 73 74 72 75 63 x80../** Instruc 0600: 74 69 6f 6e 73 20 2a 2a 2f 0a 23 64 65 66 69 6e tions **/.#defin 0610: 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 47 45 e GSCIS_INSTR_GE 0620: 54 5f 52 45 53 50 4f 4e 53 45 20 20 20 20 20 20 T_RESPONSE 0630: 30 78 43 30 0a 23 64 65 66 69 6e 65 20 47 53 43 0xC0.#define GSC 0640: 49 53 5f 49 4e 53 54 52 5f 52 45 41 44 5f 42 49 IS_INSTR_READ_BI 0650: 4e 41 52 59 20 20 20 20 20 20 20 30 78 42 30 0a NARY 0xB0. 0660: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e #define GSCIS_IN 0670: 53 54 52 5f 55 50 44 41 54 45 5f 42 49 4e 41 52 STR_UPDATE_BINAR 0680: 59 20 20 20 20 20 30 78 44 36 0a 23 64 65 66 69 Y 0xD6.#defi 0690: 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 ne GSCIS_INSTR_S 06a0: 45 4c 45 43 54 20 20 20 20 20 20 20 20 20 20 20 ELECT 06b0: 20 30 78 41 34 0a 23 64 65 66 69 6e 65 20 47 53 0xA4.#define GS 06c0: 43 49 53 5f 49 4e 53 54 52 5f 45 58 54 45 52 4e CIS_INSTR_EXTERN 06d0: 41 4c 5f 41 55 54 48 20 20 20 20 20 30 78 38 32 AL_AUTH 0x82 06e0: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 .#define GSCIS_I 06f0: 4e 53 54 52 5f 47 45 54 5f 43 48 41 4c 4c 45 4e NSTR_GET_CHALLEN 0700: 47 45 20 20 20 20 20 30 78 38 34 0a 23 64 65 66 GE 0x84.#def 0710: 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f ine GSCIS_INSTR_ 0720: 49 4e 54 45 52 4e 41 4c 5f 41 55 54 48 20 20 20 INTERNAL_AUTH 0730: 20 20 30 78 38 38 0a 23 64 65 66 69 6e 65 20 47 0x88.#define G 0740: 53 43 49 53 5f 49 4e 53 54 52 5f 56 45 52 49 46 SCIS_INSTR_VERIF 0750: 59 20 20 20 20 20 20 20 20 20 20 20 20 30 78 32 Y 0x2 0760: 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 0.#define GSCIS_ 0770: 49 4e 53 54 52 5f 53 49 47 4e 20 20 20 20 20 20 INSTR_SIGN 0780: 20 20 20 20 20 20 20 20 30 78 32 41 0a 23 64 65 0x2A.#de 0790: 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 fine GSCIS_INSTR 07a0: 5f 47 45 54 5f 50 52 4f 50 20 20 20 20 20 20 20 _GET_PROP 07b0: 20 20 20 30 78 35 36 0a 23 64 65 66 69 6e 65 20 0x56.#define 07c0: 47 53 43 49 53 5f 49 4e 53 54 52 5f 47 45 54 5f GSCIS_INSTR_GET_ 07d0: 41 43 52 20 20 20 20 20 20 20 20 20 20 20 30 78 ACR 0x 07e0: 34 43 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 4C.#define GSCIS 07f0: 5f 49 4e 53 54 52 5f 52 45 41 44 5f 42 55 46 46 _INSTR_READ_BUFF 0800: 45 52 20 20 20 20 20 20 20 30 78 35 32 0a 23 64 ER 0x52.#d 0810: 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 efine GSCIS_INST 0820: 52 5f 53 49 47 4e 44 45 43 52 59 50 54 20 20 20 R_SIGNDECRYPT 0830: 20 20 20 20 30 78 34 32 0a 0a 23 64 65 66 69 6e 0x42..#defin 0840: 65 20 47 53 43 49 53 5f 50 41 52 41 4d 5f 53 45 e GSCIS_PARAM_SE 0850: 4c 45 43 54 5f 41 50 50 4c 45 54 20 20 20 20 20 LECT_APPLET 0860: 30 78 30 34 0a 0a 2f 2a 2a 20 54 61 67 73 20 2a 0x04../** Tags * 0870: 2a 2f 0a 2f 2a 2a 2a 20 43 43 43 20 54 61 67 73 */./*** CCC Tags 0880: 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 ***/.#define GS 0890: 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44 20 20 CIS_TAG_CARDID 08a0: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 46 30 0xF0 08b0: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 08c0: 41 47 5f 43 43 43 5f 56 45 52 20 20 20 20 20 20 AG_CCC_VER 08d0: 20 20 20 20 20 20 20 30 78 46 31 0a 23 64 65 66 0xF1.#def 08e0: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 43 ine GSCIS_TAG_CC 08f0: 47 5f 56 45 52 20 20 20 20 20 20 20 20 20 20 20 G_VER 0900: 20 20 30 78 46 32 0a 23 64 65 66 69 6e 65 20 47 0xF2.#define G 0910: 53 43 49 53 5f 54 41 47 5f 43 41 52 44 55 52 4c SCIS_TAG_CARDURL 0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 46 0xF 0930: 33 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 3.#define GSCIS_ 0940: 54 41 47 5f 50 4b 43 53 31 35 20 20 20 20 20 20 TAG_PKCS15 0950: 20 20 20 20 20 20 20 20 30 78 46 34 0a 23 64 65 0xF4.#de 0960: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 52 fine GSCIS_TAG_R 0970: 45 47 5f 44 41 54 41 5f 4d 4f 44 45 4c 20 20 20 EG_DATA_MODEL 0980: 20 20 20 30 78 46 35 0a 23 64 65 66 69 6e 65 20 0xF5.#define 0990: 47 53 43 49 53 5f 54 41 47 5f 41 43 52 5f 54 41 GSCIS_TAG_ACR_TA 09a0: 42 4c 45 20 20 20 20 20 20 20 20 20 20 20 30 78 BLE 0x 09b0: 46 36 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 F6.#define GSCIS 09c0: 5f 54 41 47 5f 43 41 52 44 5f 41 50 44 55 20 20 _TAG_CARD_APDU 09d0: 20 20 20 20 20 20 20 20 20 30 78 46 37 0a 23 64 0xF7.#d 09e0: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 09f0: 52 45 44 49 52 45 43 54 49 4f 4e 20 20 20 20 20 REDIRECTION 0a00: 20 20 20 20 30 78 46 41 0a 23 64 65 66 69 6e 65 0xFA.#define 0a10: 20 47 53 43 49 53 5f 54 41 47 5f 43 54 20 20 20 GSCIS_TAG_CT 0a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0 0a30: 78 46 42 0a 23 64 65 66 69 6e 65 20 47 53 43 49 xFB.#define GSCI 0a40: 53 5f 54 41 47 5f 53 54 20 20 20 20 20 20 20 20 S_TAG_ST 0a50: 20 20 20 20 20 20 20 20 20 20 30 78 46 43 0a 23 0xFC.# 0a60: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0a70: 5f 4e 45 58 54 43 43 43 20 20 20 20 20 20 20 20 _NEXTCCC 0a80: 20 20 20 20 20 30 78 46 44 0a 0a 2f 2a 2a 2a 20 0xFD../*** 0a90: 47 65 6e 65 72 61 6c 20 2d 20 45 46 20 32 32 30 General - EF 220 0aa0: 30 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 0 ***/.#define G 0ab0: 53 43 49 53 5f 54 41 47 5f 46 4e 41 4d 45 20 20 SCIS_TAG_FNAME 0ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30 0x0 0ad0: 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 1.#define GSCIS_ 0ae0: 54 41 47 5f 4d 4e 41 4d 45 20 20 20 20 20 20 20 TAG_MNAME 0af0: 20 20 20 20 20 20 20 20 30 78 30 32 0a 23 64 65 0x02.#de 0b00: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4c fine GSCIS_TAG_L 0b10: 4e 41 4d 45 20 20 20 20 20 20 20 20 20 20 20 20 NAME 0b20: 20 20 20 30 78 30 33 0a 23 64 65 66 69 6e 65 20 0x03.#define 0b30: 47 53 43 49 53 5f 54 41 47 5f 53 55 46 46 49 58 GSCIS_TAG_SUFFIX 0b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 0x 0b50: 30 34 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 04.#define GSCIS 0b60: 5f 54 41 47 5f 47 4f 56 54 5f 41 47 45 4e 43 59 _TAG_GOVT_AGENCY 0b70: 20 20 20 20 20 20 20 20 20 30 78 30 35 0a 23 64 0x05.#d 0b80: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0b90: 42 55 52 45 41 55 20 20 20 20 20 20 20 20 20 20 BUREAU 0ba0: 20 20 20 20 30 78 30 36 0a 23 64 65 66 69 6e 65 0x06.#define 0bb0: 20 47 53 43 49 53 5f 54 41 47 5f 42 55 52 45 41 GSCIS_TAG_BUREA 0bc0: 55 5f 43 4f 44 45 20 20 20 20 20 20 20 20 20 30 U_CODE 0 0bd0: 78 30 37 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x07.#define GSCI 0be0: 53 5f 54 41 47 5f 44 45 50 54 5f 43 4f 44 45 20 S_TAG_DEPT_CODE 0bf0: 20 20 20 20 20 20 20 20 20 20 30 78 30 38 0a 23 0x08.# 0c00: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0c10: 5f 54 49 54 4c 45 20 20 20 20 20 20 20 20 20 20 _TITLE 0c20: 20 20 20 20 20 30 78 30 39 0a 23 64 65 66 69 6e 0x09.#defin 0c30: 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 49 4c e GSCIS_TAG_BUIL 0c40: 44 49 4e 47 20 20 20 20 20 20 20 20 20 20 20 20 DING 0c50: 30 78 31 30 0a 23 64 65 66 69 6e 65 20 47 53 43 0x10.#define GSC 0c60: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 IS_TAG_OFFICE_AD 0c70: 44 52 31 20 20 20 20 20 20 20 20 30 78 31 31 0a DR1 0x11. 0c80: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0c90: 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 32 20 20 G_OFFICE_ADDR2 0ca0: 20 20 20 20 20 20 30 78 31 32 0a 23 64 65 66 69 0x12.#defi 0cb0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 ne GSCIS_TAG_OFF 0cc0: 49 43 45 5f 43 49 54 59 20 20 20 20 20 20 20 20 ICE_CITY 0cd0: 20 30 78 31 33 0a 23 64 65 66 69 6e 65 20 47 53 0x13.#define GS 0ce0: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 53 CIS_TAG_OFFICE_S 0cf0: 54 41 54 45 20 20 20 20 20 20 20 20 30 78 31 34 TATE 0x14 0d00: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0d10: 41 47 5f 4f 46 46 49 43 45 5f 5a 49 50 20 20 20 AG_OFFICE_ZIP 0d20: 20 20 20 20 20 20 20 30 78 31 35 0a 23 64 65 66 0x15.#def 0d30: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 ine GSCIS_TAG_OF 0d40: 46 49 43 45 5f 43 4f 55 4e 54 52 59 20 20 20 20 FICE_COUNTRY 0d50: 20 20 30 78 31 36 0a 23 64 65 66 69 6e 65 20 47 0x16.#define G 0d60: 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f SCIS_TAG_OFFICE_ 0d70: 50 48 4f 4e 45 20 20 20 20 20 20 20 20 30 78 31 PHONE 0x1 0d80: 37 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 7.#define GSCIS_ 0d90: 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 4f 4e 45 TAG_OFFICE_PHONE 0da0: 5f 45 58 54 20 20 20 20 30 78 31 38 0a 23 64 65 _EXT 0x18.#de 0db0: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4f fine GSCIS_TAG_O 0dc0: 46 46 49 43 45 5f 46 41 58 20 20 20 20 20 20 20 FFICE_FAX 0dd0: 20 20 20 30 78 31 39 0a 23 64 65 66 69 6e 65 20 0x19.#define 0de0: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 0df0: 5f 45 4d 41 49 4c 20 20 20 20 20 20 20 20 30 78 _EMAIL 0x 0e00: 31 41 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 1A.#define GSCIS 0e10: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 52 4f 4f 4d _TAG_OFFICE_ROOM 0e20: 20 20 20 20 20 20 20 20 20 30 78 31 42 0a 23 64 0x1B.#d 0e30: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0e40: 4e 4f 4e 47 4f 56 5f 41 47 45 4e 43 59 20 20 20 NONGOV_AGENCY 0e50: 20 20 20 20 30 78 31 43 0a 23 64 65 66 69 6e 65 0x1C.#define 0e60: 20 47 53 43 49 53 5f 54 41 47 5f 53 53 4e 5f 44 GSCIS_TAG_SSN_D 0e70: 45 53 49 47 4e 41 54 4f 52 20 20 20 20 20 20 30 ESIGNATOR 0 0e80: 78 31 44 0a 0a 2f 2a 2a 2a 20 50 49 49 20 2d 20 x1D../*** PII - 0e90: 45 46 20 32 31 30 30 20 2a 2a 2a 2f 0a 23 64 65 EF 2100 ***/.#de 0ea0: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 53 fine GSCIS_TAG_S 0eb0: 53 4e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 SN 0ec0: 20 20 20 30 78 32 30 0a 23 64 65 66 69 6e 65 20 0x20.#define 0ed0: 47 53 43 49 53 5f 54 41 47 5f 44 4f 42 20 20 20 GSCIS_TAG_DOB 0ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 0x 0ef0: 32 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 21.#define GSCIS 0f00: 5f 54 41 47 5f 47 45 4e 44 45 52 20 20 20 20 20 _TAG_GENDER 0f10: 20 20 20 20 20 20 20 20 20 30 78 32 32 0a 0a 2f 0x22../ 0f20: 2a 2a 2a 20 4c 6f 67 69 6e 20 49 6e 66 6f 72 6d *** Login Inform 0f30: 61 74 69 6f 6e 20 2d 20 45 46 20 34 30 30 30 20 ation - EF 4000 0f40: 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 43 ***/.#define GSC 0f50: 49 53 5f 54 41 47 5f 55 53 45 52 49 44 20 20 20 IS_TAG_USERID 0f60: 20 20 20 20 20 20 20 20 20 20 20 30 78 34 30 0a 0x40. 0f70: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0f80: 47 5f 44 4f 4d 41 49 4e 20 20 20 20 20 20 20 20 G_DOMAIN 0f90: 20 20 20 20 20 20 30 78 34 31 0a 23 64 65 66 69 0x41.#defi 0fa0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 50 41 53 ne GSCIS_TAG_PAS 0fb0: 53 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 SWORD 0fc0: 20 30 78 34 32 0a 0a 2f 2a 2a 2a 20 43 61 72 64 0x42../*** Card 0fd0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 2d 20 45 Information - E 0fe0: 46 20 35 30 30 30 20 2a 2a 2a 2f 0a 23 64 65 66 F 5000 ***/.#def 0ff0: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 49 53 ine GSCIS_TAG_IS 1000: 53 55 45 52 49 44 20 20 20 20 20 20 20 20 20 20 SUERID 1010: 20 20 30 78 35 30 0a 23 64 65 66 69 6e 65 20 47 0x50.#define G 1020: 53 43 49 53 5f 54 41 47 5f 53 45 52 4e 4f 20 20 SCIS_TAG_SERNO 1030: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 35 0x5 1040: 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 1.#define GSCIS_ 1050: 54 41 47 5f 49 53 53 55 45 5f 44 41 54 45 20 20 TAG_ISSUE_DATE 1060: 20 20 20 20 20 20 20 20 30 78 35 32 0a 23 64 65 0x52.#de 1070: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 45 fine GSCIS_TAG_E 1080: 58 50 49 52 45 5f 44 41 54 45 20 20 20 20 20 20 XPIRE_DATE 1090: 20 20 20 30 78 35 33 0a 23 64 65 66 69 6e 65 20 0x53.#define 10a0: 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 5f 54 GSCIS_TAG_CARD_T 10b0: 59 50 45 20 20 20 20 20 20 20 20 20 20 20 30 78 YPE 0x 10c0: 35 34 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 54.#define GSCIS 10d0: 5f 54 41 47 5f 53 45 43 55 52 49 54 59 5f 43 4f _TAG_SECURITY_CO 10e0: 44 45 20 20 20 20 20 20 20 30 78 35 37 0a 23 64 DE 0x57.#d 10f0: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 1100: 43 41 52 44 49 44 5f 41 49 44 20 20 20 20 20 20 CARDID_AID 1110: 20 20 20 20 30 78 35 38 0a 0a 2f 2a 2a 2a 20 50 0x58../*** P 1120: 4b 49 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 2d KI Information - 1130: 20 45 46 20 37 30 30 30 20 2a 2a 2a 2f 0a 23 64 EF 7000 ***/.#d 1140: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 1150: 43 45 52 54 49 46 49 43 41 54 45 20 20 20 20 20 CERTIFICATE 1160: 20 20 20 20 30 78 37 30 0a 23 64 65 66 69 6e 65 0x70.#define 1170: 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 5f GSCIS_TAG_CERT_ 1180: 49 53 53 55 45 5f 44 41 54 45 20 20 20 20 20 30 ISSUE_DATE 0 1190: 78 37 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x71.#define GSCI 11a0: 53 5f 54 41 47 5f 43 45 52 54 5f 45 58 50 49 52 S_TAG_CERT_EXPIR 11b0: 45 5f 44 41 54 45 20 20 20 20 30 78 37 32 0a 0a E_DATE 0x72.. 11c0: 2f 2a 2a 20 41 70 70 6c 65 74 20 49 44 73 20 2a /** Applet IDs * 11d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 */.#define GSCIS 11e0: 5f 41 49 44 5f 43 43 43 20 20 20 20 20 20 20 20 _AID_CCC 11f0: 20 20 20 20 20 20 20 20 20 30 78 41 30 2c 20 30 0xA0, 0 1200: 78 30 30 2c 20 30 78 30 30 2c 20 30 78 30 31 2c x00, 0x00, 0x01, 1210: 20 30 78 31 36 2c 20 30 78 44 42 2c 20 30 78 30 0x16, 0xDB, 0x0 1220: 30 0a 0a 23 69 66 64 65 66 20 43 41 43 4b 45 59 0..#ifdef CACKEY 1230: 5f 44 45 42 55 47 0a 23 20 20 69 66 64 65 66 20 _DEBUG.# ifdef 1240: 48 41 56 45 5f 53 54 44 49 4f 5f 48 0a 23 20 20 HAVE_STDIO_H.# 1250: 20 20 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f include <stdio 1260: 2e 68 3e 0a 23 20 20 65 6e 64 69 66 0a 0a 23 20 .h>.# endif..# 1270: 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 define CACKEY_D 1280: 45 42 55 47 5f 50 52 49 4e 54 46 28 78 2e 2e 2e EBUG_PRINTF(x... 1290: 29 20 7b 20 66 70 72 69 6e 74 66 28 73 74 64 65 ) { fprintf(stde 12a0: 72 72 2c 20 22 25 73 28 29 3a 25 69 3a 20 22 2c rr, "%s():%i: ", 12b0: 20 5f 5f 66 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 4e __func__, __LIN 12c0: 45 5f 5f 29 3b 20 66 70 72 69 6e 74 66 28 73 74 E__); fprintf(st 12d0: 64 65 72 72 2c 20 78 29 3b 20 66 70 72 69 6e 74 derr, x); fprint 12e0: 66 28 73 74 64 65 72 72 2c 20 22 5c 6e 22 29 3b f(stderr, "\n"); 12f0: 20 7d 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 }.# define CAC 1300: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 KEY_DEBUG_PRINTB 1310: 55 46 28 66 2c 20 78 2c 20 79 29 20 7b 20 75 6e UF(f, x, y) { un 1320: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 54 4d 50 signed char *TMP 1330: 42 55 46 3b 20 75 6e 73 69 67 6e 65 64 20 6c 6f BUF; unsigned lo 1340: 6e 67 20 69 64 78 3b 20 54 4d 50 42 55 46 20 3d ng idx; TMPBUF = 1350: 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 (unsigned char 1360: 2a 29 20 28 78 29 3b 20 66 70 72 69 6e 74 66 28 *) (x); fprintf( 1370: 73 74 64 65 72 72 2c 20 22 25 73 28 29 3a 25 69 stderr, "%s():%i 1380: 3a 20 25 73 20 20 28 25 73 2f 25 6c 75 20 3d 20 : %s (%s/%lu = 1390: 7b 25 30 32 78 22 2c 20 5f 5f 66 75 6e 63 5f 5f {%02x", __func__ 13a0: 2c 20 5f 5f 4c 49 4e 45 5f 5f 2c 20 66 2c 20 23 , __LINE__, f, # 13b0: 78 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e x, (unsigned lon 13c0: 67 29 20 28 79 29 2c 20 54 4d 50 42 55 46 5b 30 g) (y), TMPBUF[0 13d0: 5d 29 3b 20 66 6f 72 20 28 69 64 78 20 3d 20 31 ]); for (idx = 1 13e0: 3b 20 69 64 78 20 3c 20 28 79 29 3b 20 69 64 78 ; idx < (y); idx 13f0: 2b 2b 29 20 7b 20 66 70 72 69 6e 74 66 28 73 74 ++) { fprintf(st 1400: 64 65 72 72 2c 20 22 2c 20 25 30 32 78 22 2c 20 derr, ", %02x", 1410: 54 4d 50 42 55 46 5b 69 64 78 5d 29 3b 20 7d 3b TMPBUF[idx]); }; 1420: 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c fprintf(stderr, 1430: 20 22 7d 29 5c 6e 22 29 3b 20 7d 0a 23 20 20 64 "})\n"); }.# d 1440: 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 efine CACKEY_DEB 1450: 55 47 5f 50 45 52 52 4f 52 28 78 29 20 7b 20 66 UG_PERROR(x) { f 1460: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 printf(stderr, " 1470: 25 73 28 29 3a 25 69 3a 20 22 2c 20 5f 5f 66 75 %s():%i: ", __fu 1480: 6e 63 5f 5f 2c 20 5f 5f 4c 49 4e 45 5f 5f 29 3b nc__, __LINE__); 1490: 20 70 65 72 72 6f 72 28 78 29 3b 20 7d 0a 23 20 perror(x); }.# 14a0: 20 64 65 66 69 6e 65 20 66 72 65 65 28 78 29 20 define free(x) 14b0: 7b 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 { CACKEY_DEBUG_P 14c0: 52 49 4e 54 46 28 22 46 52 45 45 28 25 70 29 20 RINTF("FREE(%p) 14d0: 28 25 73 29 22 2c 20 78 2c 20 23 78 29 3b 20 66 (%s)", x, #x); f 14e0: 72 65 65 28 78 29 3b 20 7d 0a 0a 73 74 61 74 69 ree(x); }..stati 14f0: 63 20 76 6f 69 64 20 2a 43 41 43 4b 45 59 5f 44 c void *CACKEY_D 1500: 45 42 55 47 5f 46 55 4e 43 5f 4d 41 4c 4c 4f 43 EBUG_FUNC_MALLOC 1510: 28 73 69 7a 65 5f 74 20 73 69 7a 65 2c 20 63 6f (size_t size, co 1520: 6e 73 74 20 63 68 61 72 20 2a 66 75 6e 63 2c 20 nst char *func, 1530: 69 6e 74 20 6c 69 6e 65 29 20 7b 0a 09 76 6f 69 int line) {..voi 1540: 64 20 2a 72 65 74 76 61 6c 3b 0a 0a 09 72 65 74 d *retval;...ret 1550: 76 61 6c 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a val = malloc(siz 1560: 65 29 3b 0a 0a 09 66 70 72 69 6e 74 66 28 73 74 e);...fprintf(st 1570: 64 65 72 72 2c 20 22 25 73 28 29 3a 25 69 3a 20 derr, "%s():%i: 1580: 22 2c 20 66 75 6e 63 2c 20 6c 69 6e 65 29 3b 0a ", func, line);. 1590: 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c .fprintf(stderr, 15a0: 20 22 4d 41 4c 4c 4f 43 28 29 20 3d 20 25 70 22 "MALLOC() = %p" 15b0: 2c 20 72 65 74 76 61 6c 29 3b 0a 09 66 70 72 69 , retval);..fpri 15c0: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 5c 6e 22 ntf(stderr, "\n" 15d0: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 );...return(retv 15e0: 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 al);.}..static v 15f0: 6f 69 64 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 oid *CACKEY_DEBU 1600: 47 5f 46 55 4e 43 5f 52 45 41 4c 4c 4f 43 28 76 G_FUNC_REALLOC(v 1610: 6f 69 64 20 2a 70 74 72 2c 20 73 69 7a 65 5f 74 oid *ptr, size_t 1620: 20 73 69 7a 65 2c 20 63 6f 6e 73 74 20 63 68 61 size, const cha 1630: 72 20 2a 66 75 6e 63 2c 20 69 6e 74 20 6c 69 6e r *func, int lin 1640: 65 29 20 7b 0a 09 76 6f 69 64 20 2a 72 65 74 76 e) {..void *retv 1650: 61 6c 3b 0a 0a 09 72 65 74 76 61 6c 20 3d 20 72 al;...retval = r 1660: 65 61 6c 6c 6f 63 28 70 74 72 2c 20 73 69 7a 65 ealloc(ptr, size 1670: 29 3b 0a 0a 09 69 66 20 28 72 65 74 76 61 6c 20 );...if (retval 1680: 21 3d 20 70 74 72 29 20 7b 0a 09 09 66 70 72 69 != ptr) {...fpri 1690: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 28 ntf(stderr, "%s( 16a0: 29 3a 25 69 3a 20 22 2c 20 66 75 6e 63 2c 20 6c ):%i: ", func, l 16b0: 69 6e 65 29 3b 0a 09 09 66 70 72 69 6e 74 66 28 ine);...fprintf( 16c0: 73 74 64 65 72 72 2c 20 22 52 45 41 4c 4c 4f 43 stderr, "REALLOC 16d0: 28 25 70 29 20 3d 20 25 70 22 2c 20 70 74 72 2c (%p) = %p", ptr, 16e0: 20 72 65 74 76 61 6c 29 3b 0a 09 09 66 70 72 69 retval);...fpri 16f0: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 5c 6e 22 ntf(stderr, "\n" 1700: 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 72 );..}...return(r 1710: 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 etval);.}..stati 1720: 63 20 63 68 61 72 20 2a 43 41 43 4b 45 59 5f 44 c char *CACKEY_D 1730: 45 42 55 47 5f 46 55 4e 43 5f 53 54 52 44 55 50 EBUG_FUNC_STRDUP 1740: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 74 72 (const char *ptr 1750: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 75 , const char *fu 1760: 6e 63 2c 20 69 6e 74 20 6c 69 6e 65 29 20 7b 0a nc, int line) {. 1770: 09 63 68 61 72 20 2a 72 65 74 76 61 6c 3b 0a 0a .char *retval;.. 1780: 09 72 65 74 76 61 6c 20 3d 20 73 74 72 64 75 70 .retval = strdup 1790: 28 70 74 72 29 3b 0a 0a 09 66 70 72 69 6e 74 66 (ptr);...fprintf 17a0: 28 73 74 64 65 72 72 2c 20 22 25 73 28 29 3a 25 (stderr, "%s():% 17b0: 69 3a 20 22 2c 20 66 75 6e 63 2c 20 6c 69 6e 65 i: ", func, line 17c0: 29 3b 0a 09 66 70 72 69 6e 74 66 28 73 74 64 65 );..fprintf(stde 17d0: 72 72 2c 20 22 53 54 52 44 55 50 5f 4d 41 4c 4c rr, "STRDUP_MALL 17e0: 4f 43 28 29 20 3d 20 25 70 22 2c 20 72 65 74 76 OC() = %p", retv 17f0: 61 6c 29 3b 0a 09 66 70 72 69 6e 74 66 28 73 74 al);..fprintf(st 1800: 64 65 72 72 2c 20 22 5c 6e 22 29 3b 0a 0a 09 72 derr, "\n");...r 1810: 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d eturn(retval);.} 1820: 0a 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 ..static const c 1830: 68 61 72 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 har *CACKEY_DEBU 1840: 47 5f 46 55 4e 43 5f 54 41 47 5f 54 4f 5f 53 54 G_FUNC_TAG_TO_ST 1850: 52 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 R(unsigned char 1860: 74 61 67 29 20 7b 0a 09 73 77 69 74 63 68 20 28 tag) {..switch ( 1870: 74 61 67 29 20 7b 0a 09 09 63 61 73 65 20 47 53 tag) {...case GS 1880: 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44 3a 0a CIS_TAG_CARDID:. 1890: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 18a0: 5f 54 41 47 5f 43 41 52 44 49 44 22 29 3b 0a 09 _TAG_CARDID");.. 18b0: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 18c0: 43 43 43 5f 56 45 52 3a 0a 09 09 09 72 65 74 75 CCC_VER:....retu 18d0: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 43 43 rn("GSCIS_TAG_CC 18e0: 43 5f 56 45 52 22 29 3b 0a 09 09 63 61 73 65 20 C_VER");...case 18f0: 47 53 43 49 53 5f 54 41 47 5f 43 43 47 5f 56 45 GSCIS_TAG_CCG_VE 1900: 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 R:....return("GS 1910: 43 49 53 5f 54 41 47 5f 43 43 47 5f 56 45 52 22 CIS_TAG_CCG_VER" 1920: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 1930: 54 41 47 5f 43 41 52 44 55 52 4c 3a 0a 09 09 09 TAG_CARDURL:.... 1940: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1950: 47 5f 43 41 52 44 55 52 4c 22 29 3b 0a 09 09 63 G_CARDURL");...c 1960: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 50 4b ase GSCIS_TAG_PK 1970: 43 53 31 35 3a 0a 09 09 09 72 65 74 75 72 6e 28 CS15:....return( 1980: 22 47 53 43 49 53 5f 54 41 47 5f 50 4b 43 53 31 "GSCIS_TAG_PKCS1 1990: 35 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 5");...case GSCI 19a0: 53 5f 54 41 47 5f 52 45 47 5f 44 41 54 41 5f 4d S_TAG_REG_DATA_M 19b0: 4f 44 45 4c 3a 0a 09 09 09 72 65 74 75 72 6e 28 ODEL:....return( 19c0: 22 47 53 43 49 53 5f 54 41 47 5f 52 45 47 5f 44 "GSCIS_TAG_REG_D 19d0: 41 54 41 5f 4d 4f 44 45 4c 22 29 3b 0a 09 09 63 ATA_MODEL");...c 19e0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 41 43 ase GSCIS_TAG_AC 19f0: 52 5f 54 41 42 4c 45 3a 0a 09 09 09 72 65 74 75 R_TABLE:....retu 1a00: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 41 43 rn("GSCIS_TAG_AC 1a10: 52 5f 54 41 42 4c 45 22 29 3b 0a 09 09 63 61 73 R_TABLE");...cas 1a20: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 e GSCIS_TAG_CARD 1a30: 5f 41 50 44 55 3a 0a 09 09 09 72 65 74 75 72 6e _APDU:....return 1a40: 28 22 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 ("GSCIS_TAG_CARD 1a50: 5f 41 50 44 55 22 29 3b 0a 09 09 63 61 73 65 20 _APDU");...case 1a60: 47 53 43 49 53 5f 54 41 47 5f 52 45 44 49 52 45 GSCIS_TAG_REDIRE 1a70: 43 54 49 4f 4e 3a 0a 09 09 09 72 65 74 75 72 6e CTION:....return 1a80: 28 22 47 53 43 49 53 5f 54 41 47 5f 52 45 44 49 ("GSCIS_TAG_REDI 1a90: 52 45 43 54 49 4f 4e 22 29 3b 0a 09 09 63 61 73 RECTION");...cas 1aa0: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 54 3a 0a e GSCIS_TAG_CT:. 1ab0: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 1ac0: 5f 54 41 47 5f 43 54 22 29 3b 0a 09 09 63 61 73 _TAG_CT");...cas 1ad0: 65 20 47 53 43 49 53 5f 54 41 47 5f 53 54 3a 0a e GSCIS_TAG_ST:. 1ae0: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 1af0: 5f 54 41 47 5f 53 54 22 29 3b 0a 09 09 63 61 73 _TAG_ST");...cas 1b00: 65 20 47 53 43 49 53 5f 54 41 47 5f 4e 45 58 54 e GSCIS_TAG_NEXT 1b10: 43 43 43 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 CCC:....return(" 1b20: 47 53 43 49 53 5f 54 41 47 5f 4e 45 58 54 43 43 GSCIS_TAG_NEXTCC 1b30: 43 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 C");...case GSCI 1b40: 53 5f 54 41 47 5f 46 4e 41 4d 45 3a 0a 09 09 09 S_TAG_FNAME:.... 1b50: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1b60: 47 5f 46 4e 41 4d 45 22 29 3b 0a 09 09 63 61 73 G_FNAME");...cas 1b70: 65 20 47 53 43 49 53 5f 54 41 47 5f 4d 4e 41 4d e GSCIS_TAG_MNAM 1b80: 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 E:....return("GS 1b90: 43 49 53 5f 54 41 47 5f 4d 4e 41 4d 45 22 29 3b CIS_TAG_MNAME"); 1ba0: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 1bb0: 47 5f 4c 4e 41 4d 45 3a 0a 09 09 09 72 65 74 75 G_LNAME:....retu 1bc0: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4c 4e rn("GSCIS_TAG_LN 1bd0: 41 4d 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 AME");...case GS 1be0: 43 49 53 5f 54 41 47 5f 53 55 46 46 49 58 3a 0a CIS_TAG_SUFFIX:. 1bf0: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 1c00: 5f 54 41 47 5f 53 55 46 46 49 58 22 29 3b 0a 09 _TAG_SUFFIX");.. 1c10: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 1c20: 47 4f 56 54 5f 41 47 45 4e 43 59 3a 0a 09 09 09 GOVT_AGENCY:.... 1c30: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1c40: 47 5f 47 4f 56 54 5f 41 47 45 4e 43 59 22 29 3b G_GOVT_AGENCY"); 1c50: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 1c60: 47 5f 42 55 52 45 41 55 3a 0a 09 09 09 72 65 74 G_BUREAU:....ret 1c70: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 42 urn("GSCIS_TAG_B 1c80: 55 52 45 41 55 22 29 3b 0a 09 09 63 61 73 65 20 UREAU");...case 1c90: 47 53 43 49 53 5f 54 41 47 5f 42 55 52 45 41 55 GSCIS_TAG_BUREAU 1ca0: 5f 43 4f 44 45 3a 0a 09 09 09 72 65 74 75 72 6e _CODE:....return 1cb0: 28 22 47 53 43 49 53 5f 54 41 47 5f 42 55 52 45 ("GSCIS_TAG_BURE 1cc0: 41 55 5f 43 4f 44 45 22 29 3b 0a 09 09 63 61 73 AU_CODE");...cas 1cd0: 65 20 47 53 43 49 53 5f 54 41 47 5f 44 45 50 54 e GSCIS_TAG_DEPT 1ce0: 5f 43 4f 44 45 3a 0a 09 09 09 72 65 74 75 72 6e _CODE:....return 1cf0: 28 22 47 53 43 49 53 5f 54 41 47 5f 44 45 50 54 ("GSCIS_TAG_DEPT 1d00: 5f 43 4f 44 45 22 29 3b 0a 09 09 63 61 73 65 20 _CODE");...case 1d10: 47 53 43 49 53 5f 54 41 47 5f 54 49 54 4c 45 3a GSCIS_TAG_TITLE: 1d20: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 1d30: 53 5f 54 41 47 5f 54 49 54 4c 45 22 29 3b 0a 09 S_TAG_TITLE");.. 1d40: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 1d50: 42 55 49 4c 44 49 4e 47 3a 0a 09 09 09 72 65 74 BUILDING:....ret 1d60: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 42 urn("GSCIS_TAG_B 1d70: 55 49 4c 44 49 4e 47 22 29 3b 0a 09 09 63 61 73 UILDING");...cas 1d80: 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 e GSCIS_TAG_OFFI 1d90: 43 45 5f 41 44 44 52 31 3a 0a 09 09 09 72 65 74 CE_ADDR1:....ret 1da0: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f urn("GSCIS_TAG_O 1db0: 46 46 49 43 45 5f 41 44 44 52 31 22 29 3b 0a 09 FFICE_ADDR1");.. 1dc0: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 1dd0: 4f 46 46 49 43 45 5f 41 44 44 52 32 3a 0a 09 09 OFFICE_ADDR2:... 1de0: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 1df0: 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 32 22 AG_OFFICE_ADDR2" 1e00: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 1e10: 54 41 47 5f 4f 46 46 49 43 45 5f 43 49 54 59 3a TAG_OFFICE_CITY: 1e20: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 1e30: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 43 49 54 S_TAG_OFFICE_CIT 1e40: 59 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 Y");...case GSCI 1e50: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 53 54 41 S_TAG_OFFICE_STA 1e60: 54 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 TE:....return("G 1e70: 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f SCIS_TAG_OFFICE_ 1e80: 53 54 41 54 45 22 29 3b 0a 09 09 63 61 73 65 20 STATE");...case 1e90: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 1ea0: 5f 5a 49 50 3a 0a 09 09 09 72 65 74 75 72 6e 28 _ZIP:....return( 1eb0: 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 "GSCIS_TAG_OFFIC 1ec0: 45 5f 5a 49 50 22 29 3b 0a 09 09 63 61 73 65 20 E_ZIP");...case 1ed0: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 1ee0: 5f 43 4f 55 4e 54 52 59 3a 0a 09 09 09 72 65 74 _COUNTRY:....ret 1ef0: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f urn("GSCIS_TAG_O 1f00: 46 46 49 43 45 5f 43 4f 55 4e 54 52 59 22 29 3b FFICE_COUNTRY"); 1f10: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 1f20: 47 5f 4f 46 46 49 43 45 5f 50 48 4f 4e 45 3a 0a G_OFFICE_PHONE:. 1f30: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 1f40: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 4f 4e _TAG_OFFICE_PHON 1f50: 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 E");...case GSCI 1f60: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 4f S_TAG_OFFICE_PHO 1f70: 4e 45 5f 45 58 54 3a 0a 09 09 09 72 65 74 75 72 NE_EXT:....retur 1f80: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 n("GSCIS_TAG_OFF 1f90: 49 43 45 5f 50 48 4f 4e 45 5f 45 58 54 22 29 3b ICE_PHONE_EXT"); 1fa0: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 1fb0: 47 5f 4f 46 46 49 43 45 5f 46 41 58 3a 0a 09 09 G_OFFICE_FAX:... 1fc0: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 1fd0: 41 47 5f 4f 46 46 49 43 45 5f 46 41 58 22 29 3b AG_OFFICE_FAX"); 1fe0: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 1ff0: 47 5f 4f 46 46 49 43 45 5f 45 4d 41 49 4c 3a 0a G_OFFICE_EMAIL:. 2000: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 2010: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 45 4d 41 49 _TAG_OFFICE_EMAI 2020: 4c 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 L");...case GSCI 2030: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 52 4f 4f S_TAG_OFFICE_ROO 2040: 4d 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 M:....return("GS 2050: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 52 CIS_TAG_OFFICE_R 2060: 4f 4f 4d 22 29 3b 0a 09 09 63 61 73 65 20 47 53 OOM");...case GS 2070: 43 49 53 5f 54 41 47 5f 4e 4f 4e 47 4f 56 5f 41 CIS_TAG_NONGOV_A 2080: 47 45 4e 43 59 3a 0a 09 09 09 72 65 74 75 72 6e GENCY:....return 2090: 28 22 47 53 43 49 53 5f 54 41 47 5f 4e 4f 4e 47 ("GSCIS_TAG_NONG 20a0: 4f 56 5f 41 47 45 4e 43 59 22 29 3b 0a 09 09 63 OV_AGENCY");...c 20b0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 53 53 ase GSCIS_TAG_SS 20c0: 4e 5f 44 45 53 49 47 4e 41 54 4f 52 3a 0a 09 09 N_DESIGNATOR:... 20d0: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 20e0: 41 47 5f 53 53 4e 5f 44 45 53 49 47 4e 41 54 4f AG_SSN_DESIGNATO 20f0: 52 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 R");...case GSCI 2100: 53 5f 54 41 47 5f 53 53 4e 3a 0a 09 09 09 72 65 S_TAG_SSN:....re 2110: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 2120: 53 53 4e 22 29 3b 0a 09 09 63 61 73 65 20 47 53 SSN");...case GS 2130: 43 49 53 5f 54 41 47 5f 44 4f 42 3a 0a 09 09 09 CIS_TAG_DOB:.... 2140: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 2150: 47 5f 44 4f 42 22 29 3b 0a 09 09 63 61 73 65 20 G_DOB");...case 2160: 47 53 43 49 53 5f 54 41 47 5f 47 45 4e 44 45 52 GSCIS_TAG_GENDER 2170: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 2180: 49 53 5f 54 41 47 5f 47 45 4e 44 45 52 22 29 3b IS_TAG_GENDER"); 2190: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 21a0: 47 5f 55 53 45 52 49 44 3a 0a 09 09 09 72 65 74 G_USERID:....ret 21b0: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 55 urn("GSCIS_TAG_U 21c0: 53 45 52 49 44 22 29 3b 0a 09 09 63 61 73 65 20 SERID");...case 21d0: 47 53 43 49 53 5f 54 41 47 5f 44 4f 4d 41 49 4e GSCIS_TAG_DOMAIN 21e0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 21f0: 49 53 5f 54 41 47 5f 44 4f 4d 41 49 4e 22 29 3b IS_TAG_DOMAIN"); 2200: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 2210: 47 5f 50 41 53 53 57 4f 52 44 3a 0a 09 09 09 72 G_PASSWORD:....r 2220: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 2230: 5f 50 41 53 53 57 4f 52 44 22 29 3b 0a 09 09 63 _PASSWORD");...c 2240: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 49 53 ase GSCIS_TAG_IS 2250: 53 55 45 52 49 44 3a 0a 09 09 09 72 65 74 75 72 SUERID:....retur 2260: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 49 53 53 n("GSCIS_TAG_ISS 2270: 55 45 52 49 44 22 29 3b 0a 09 09 63 61 73 65 20 UERID");...case 2280: 47 53 43 49 53 5f 54 41 47 5f 53 45 52 4e 4f 3a GSCIS_TAG_SERNO: 2290: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 22a0: 53 5f 54 41 47 5f 53 45 52 4e 4f 22 29 3b 0a 09 S_TAG_SERNO");.. 22b0: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 22c0: 49 53 53 55 45 5f 44 41 54 45 3a 0a 09 09 09 72 ISSUE_DATE:....r 22d0: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 22e0: 5f 49 53 53 55 45 5f 44 41 54 45 22 29 3b 0a 09 _ISSUE_DATE");.. 22f0: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 2300: 45 58 50 49 52 45 5f 44 41 54 45 3a 0a 09 09 09 EXPIRE_DATE:.... 2310: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 2320: 47 5f 45 58 50 49 52 45 5f 44 41 54 45 22 29 3b G_EXPIRE_DATE"); 2330: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 2340: 47 5f 43 41 52 44 5f 54 59 50 45 3a 0a 09 09 09 G_CARD_TYPE:.... 2350: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 2360: 47 5f 43 41 52 44 5f 54 59 50 45 22 29 3b 0a 09 G_CARD_TYPE");.. 2370: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 2380: 53 45 43 55 52 49 54 59 5f 43 4f 44 45 3a 0a 09 SECURITY_CODE:.. 2390: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 23a0: 54 41 47 5f 53 45 43 55 52 49 54 59 5f 43 4f 44 TAG_SECURITY_COD 23b0: 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 E");...case GSCI 23c0: 53 5f 54 41 47 5f 43 41 52 44 49 44 5f 41 49 44 S_TAG_CARDID_AID 23d0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 23e0: 49 53 5f 54 41 47 5f 43 41 52 44 49 44 5f 41 49 IS_TAG_CARDID_AI 23f0: 44 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 D");...case GSCI 2400: 53 5f 54 41 47 5f 43 45 52 54 49 46 49 43 41 54 S_TAG_CERTIFICAT 2410: 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 E:....return("GS 2420: 43 49 53 5f 54 41 47 5f 43 45 52 54 49 46 49 43 CIS_TAG_CERTIFIC 2430: 41 54 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 ATE");...case GS 2440: 43 49 53 5f 54 41 47 5f 43 45 52 54 5f 49 53 53 CIS_TAG_CERT_ISS 2450: 55 45 5f 44 41 54 45 3a 0a 09 09 09 72 65 74 75 UE_DATE:....retu 2460: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 43 45 rn("GSCIS_TAG_CE 2470: 52 54 5f 49 53 53 55 45 5f 44 41 54 45 22 29 3b RT_ISSUE_DATE"); 2480: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 2490: 47 5f 43 45 52 54 5f 45 58 50 49 52 45 5f 44 41 G_CERT_EXPIRE_DA 24a0: 54 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 TE:....return("G 24b0: 53 43 49 53 5f 54 41 47 5f 43 45 52 54 5f 45 58 SCIS_TAG_CERT_EX 24c0: 50 49 52 45 5f 44 41 54 45 22 29 3b 0a 09 7d 0a PIRE_DATE");..}. 24d0: 0a 09 72 65 74 75 72 6e 28 22 55 4e 4b 4e 4f 57 ..return("UNKNOW 24e0: 4e 22 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63 N");.}..static c 24f0: 6f 6e 73 74 20 63 68 61 72 20 2a 43 41 43 4b 45 onst char *CACKE 2500: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 Y_DEBUG_FUNC_SCA 2510: 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 4c 4f 4e RDERR_TO_STR(LON 2520: 47 20 72 65 74 63 6f 64 65 29 20 7b 0a 09 73 77 G retcode) {..sw 2530: 69 74 63 68 20 28 72 65 74 63 6f 64 65 29 20 7b itch (retcode) { 2540: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 53 5f ...case SCARD_S_ 2550: 53 55 43 43 45 53 53 3a 0a 09 09 09 72 65 74 75 SUCCESS:....retu 2560: 72 6e 28 22 53 43 41 52 44 5f 53 5f 53 55 43 43 rn("SCARD_S_SUCC 2570: 45 53 53 22 29 3b 0a 09 09 63 61 73 65 20 53 43 ESS");...case SC 2580: 41 52 44 5f 45 5f 43 41 4e 43 45 4c 4c 45 44 3a ARD_E_CANCELLED: 2590: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 25a0: 44 5f 45 5f 43 41 4e 43 45 4c 4c 45 44 22 29 3b D_E_CANCELLED"); 25b0: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 25c0: 43 41 4e 54 5f 44 49 53 50 4f 53 45 3a 0a 09 09 CANT_DISPOSE:... 25d0: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 25e0: 5f 43 41 4e 54 5f 44 49 53 50 4f 53 45 22 29 3b _CANT_DISPOSE"); 25f0: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 2600: 49 4e 53 55 46 46 49 43 49 45 4e 54 5f 42 55 46 INSUFFICIENT_BUF 2610: 46 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 FER:....return(" 2620: 53 43 41 52 44 5f 45 5f 49 4e 53 55 46 46 49 43 SCARD_E_INSUFFIC 2630: 49 45 4e 54 5f 42 55 46 46 45 52 22 29 3b 0a 09 IENT_BUFFER");.. 2640: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 49 4e .case SCARD_E_IN 2650: 56 41 4c 49 44 5f 41 54 52 3a 0a 09 09 09 72 65 VALID_ATR:....re 2660: 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 49 4e turn("SCARD_E_IN 2670: 56 41 4c 49 44 5f 41 54 52 22 29 3b 0a 09 09 63 VALID_ATR");...c 2680: 61 73 65 20 53 43 41 52 44 5f 45 5f 49 4e 56 41 ase SCARD_E_INVA 2690: 4c 49 44 5f 48 41 4e 44 4c 45 3a 0a 09 09 09 72 LID_HANDLE:....r 26a0: 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 49 eturn("SCARD_E_I 26b0: 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 22 29 3b NVALID_HANDLE"); 26c0: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 26d0: 49 4e 56 41 4c 49 44 5f 50 41 52 41 4d 45 54 45 INVALID_PARAMETE 26e0: 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 R:....return("SC 26f0: 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 50 41 ARD_E_INVALID_PA 2700: 52 41 4d 45 54 45 52 22 29 3b 0a 09 09 63 61 73 RAMETER");...cas 2710: 65 20 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 e SCARD_E_INVALI 2720: 44 5f 54 41 52 47 45 54 3a 0a 09 09 09 72 65 74 D_TARGET:....ret 2730: 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 49 4e 56 urn("SCARD_E_INV 2740: 41 4c 49 44 5f 54 41 52 47 45 54 22 29 3b 0a 09 ALID_TARGET");.. 2750: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 49 4e .case SCARD_E_IN 2760: 56 41 4c 49 44 5f 56 41 4c 55 45 3a 0a 09 09 09 VALID_VALUE:.... 2770: 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f return("SCARD_E_ 2780: 49 4e 56 41 4c 49 44 5f 56 41 4c 55 45 22 29 3b INVALID_VALUE"); 2790: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 27a0: 4e 4f 5f 4d 45 4d 4f 52 59 3a 0a 09 09 09 72 65 NO_MEMORY:....re 27b0: 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 4e 4f turn("SCARD_E_NO 27c0: 5f 4d 45 4d 4f 52 59 22 29 3b 0a 09 09 63 61 73 _MEMORY");...cas 27d0: 65 20 53 43 41 52 44 5f 45 5f 55 4e 4b 4e 4f 57 e SCARD_E_UNKNOW 27e0: 4e 5f 52 45 41 44 45 52 3a 0a 09 09 09 72 65 74 N_READER:....ret 27f0: 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 55 4e 4b urn("SCARD_E_UNK 2800: 4e 4f 57 4e 5f 52 45 41 44 45 52 22 29 3b 0a 09 NOWN_READER");.. 2810: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 54 49 .case SCARD_E_TI 2820: 4d 45 4f 55 54 3a 0a 09 09 09 72 65 74 75 72 6e MEOUT:....return 2830: 28 22 53 43 41 52 44 5f 45 5f 54 49 4d 45 4f 55 ("SCARD_E_TIMEOU 2840: 54 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 T");...case SCAR 2850: 44 5f 45 5f 53 48 41 52 49 4e 47 5f 56 49 4f 4c D_E_SHARING_VIOL 2860: 41 54 49 4f 4e 3a 0a 09 09 09 72 65 74 75 72 6e ATION:....return 2870: 28 22 53 43 41 52 44 5f 45 5f 53 48 41 52 49 4e ("SCARD_E_SHARIN 2880: 47 5f 56 49 4f 4c 41 54 49 4f 4e 22 29 3b 0a 09 G_VIOLATION");.. 2890: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 4e 4f .case SCARD_E_NO 28a0: 5f 53 4d 41 52 54 43 41 52 44 3a 0a 09 09 09 72 _SMARTCARD:....r 28b0: 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 4e eturn("SCARD_E_N 28c0: 4f 5f 53 4d 41 52 54 43 41 52 44 22 29 3b 0a 09 O_SMARTCARD");.. 28d0: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 55 4e .case SCARD_E_UN 28e0: 4b 4e 4f 57 4e 5f 43 41 52 44 3a 0a 09 09 09 72 KNOWN_CARD:....r 28f0: 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 55 eturn("SCARD_E_U 2900: 4e 4b 4e 4f 57 4e 5f 43 41 52 44 22 29 3b 0a 09 NKNOWN_CARD");.. 2910: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 50 52 .case SCARD_E_PR 2920: 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 3a 0a 09 09 OTO_MISMATCH:... 2930: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 2940: 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 22 _PROTO_MISMATCH" 2950: 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f );...case SCARD_ 2960: 45 5f 4e 4f 54 5f 52 45 41 44 59 3a 0a 09 09 09 E_NOT_READY:.... 2970: 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f return("SCARD_E_ 2980: 4e 4f 54 5f 52 45 41 44 59 22 29 3b 0a 09 09 63 NOT_READY");...c 2990: 61 73 65 20 53 43 41 52 44 5f 45 5f 53 59 53 54 ase SCARD_E_SYST 29a0: 45 4d 5f 43 41 4e 43 45 4c 4c 45 44 3a 0a 09 09 EM_CANCELLED:... 29b0: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 29c0: 5f 53 59 53 54 45 4d 5f 43 41 4e 43 45 4c 4c 45 _SYSTEM_CANCELLE 29d0: 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 D");...case SCAR 29e0: 44 5f 45 5f 4e 4f 54 5f 54 52 41 4e 53 41 43 54 D_E_NOT_TRANSACT 29f0: 45 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 ED:....return("S 2a00: 43 41 52 44 5f 45 5f 4e 4f 54 5f 54 52 41 4e 53 CARD_E_NOT_TRANS 2a10: 41 43 54 45 44 22 29 3b 0a 09 09 63 61 73 65 20 ACTED");...case 2a20: 53 43 41 52 44 5f 45 5f 52 45 41 44 45 52 5f 55 SCARD_E_READER_U 2a30: 4e 41 56 41 49 4c 41 42 4c 45 3a 0a 09 09 09 72 NAVAILABLE:....r 2a40: 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 52 eturn("SCARD_E_R 2a50: 45 41 44 45 52 5f 55 4e 41 56 41 49 4c 41 42 4c EADER_UNAVAILABL 2a60: 45 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 E");...case SCAR 2a70: 44 5f 57 5f 55 4e 53 55 50 50 4f 52 54 45 44 5f D_W_UNSUPPORTED_ 2a80: 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 CARD:....return( 2a90: 22 53 43 41 52 44 5f 57 5f 55 4e 53 55 50 50 4f "SCARD_W_UNSUPPO 2aa0: 52 54 45 44 5f 43 41 52 44 22 29 3b 0a 09 09 63 RTED_CARD");...c 2ab0: 61 73 65 20 53 43 41 52 44 5f 57 5f 55 4e 52 45 ase SCARD_W_UNRE 2ac0: 53 50 4f 4e 53 49 56 45 5f 43 41 52 44 3a 0a 09 SPONSIVE_CARD:.. 2ad0: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 2ae0: 57 5f 55 4e 52 45 53 50 4f 4e 53 49 56 45 5f 43 W_UNRESPONSIVE_C 2af0: 41 52 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 ARD");...case SC 2b00: 41 52 44 5f 57 5f 55 4e 50 4f 57 45 52 45 44 5f ARD_W_UNPOWERED_ 2b10: 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 CARD:....return( 2b20: 22 53 43 41 52 44 5f 57 5f 55 4e 50 4f 57 45 52 "SCARD_W_UNPOWER 2b30: 45 44 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 ED_CARD");...cas 2b40: 65 20 53 43 41 52 44 5f 57 5f 52 45 53 45 54 5f e SCARD_W_RESET_ 2b50: 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 CARD:....return( 2b60: 22 53 43 41 52 44 5f 57 5f 52 45 53 45 54 5f 43 "SCARD_W_RESET_C 2b70: 41 52 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 ARD");...case SC 2b80: 41 52 44 5f 57 5f 52 45 4d 4f 56 45 44 5f 43 41 ARD_W_REMOVED_CA 2b90: 52 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 RD:....return("S 2ba0: 43 41 52 44 5f 57 5f 52 45 4d 4f 56 45 44 5f 43 CARD_W_REMOVED_C 2bb0: 41 52 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 ARD");...case SC 2bc0: 41 52 44 5f 45 5f 50 43 49 5f 54 4f 4f 5f 53 4d ARD_E_PCI_TOO_SM 2bd0: 41 4c 4c 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 ALL:....return(" 2be0: 53 43 41 52 44 5f 45 5f 50 43 49 5f 54 4f 4f 5f SCARD_E_PCI_TOO_ 2bf0: 53 4d 41 4c 4c 22 29 3b 0a 09 09 63 61 73 65 20 SMALL");...case 2c00: 53 43 41 52 44 5f 45 5f 52 45 41 44 45 52 5f 55 SCARD_E_READER_U 2c10: 4e 53 55 50 50 4f 52 54 45 44 3a 0a 09 09 09 72 NSUPPORTED:....r 2c20: 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 52 eturn("SCARD_E_R 2c30: 45 41 44 45 52 5f 55 4e 53 55 50 50 4f 52 54 45 EADER_UNSUPPORTE 2c40: 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 D");...case SCAR 2c50: 44 5f 45 5f 44 55 50 4c 49 43 41 54 45 5f 52 45 D_E_DUPLICATE_RE 2c60: 41 44 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 ADER:....return( 2c70: 22 53 43 41 52 44 5f 45 5f 44 55 50 4c 49 43 41 "SCARD_E_DUPLICA 2c80: 54 45 5f 52 45 41 44 45 52 22 29 3b 0a 09 09 63 TE_READER");...c 2c90: 61 73 65 20 53 43 41 52 44 5f 45 5f 43 41 52 44 ase SCARD_E_CARD 2ca0: 5f 55 4e 53 55 50 50 4f 52 54 45 44 3a 0a 09 09 _UNSUPPORTED:... 2cb0: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 2cc0: 5f 43 41 52 44 5f 55 4e 53 55 50 50 4f 52 54 45 _CARD_UNSUPPORTE 2cd0: 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 D");...case SCAR 2ce0: 44 5f 45 5f 4e 4f 5f 53 45 52 56 49 43 45 3a 0a D_E_NO_SERVICE:. 2cf0: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2d00: 5f 45 5f 4e 4f 5f 53 45 52 56 49 43 45 22 29 3b _E_NO_SERVICE"); 2d10: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 2d20: 53 45 52 56 49 43 45 5f 53 54 4f 50 50 45 44 3a SERVICE_STOPPED: 2d30: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 2d40: 44 5f 45 5f 53 45 52 56 49 43 45 5f 53 54 4f 50 D_E_SERVICE_STOP 2d50: 50 45 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 PED");...case SC 2d60: 41 52 44 5f 57 5f 49 4e 53 45 52 54 45 44 5f 43 ARD_W_INSERTED_C 2d70: 41 52 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 ARD:....return(" 2d80: 53 43 41 52 44 5f 57 5f 49 4e 53 45 52 54 45 44 SCARD_W_INSERTED 2d90: 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 20 _CARD");...case 2da0: 53 43 41 52 44 5f 45 5f 55 4e 53 55 50 50 4f 52 SCARD_E_UNSUPPOR 2db0: 54 45 44 5f 46 45 41 54 55 52 45 3a 0a 09 09 09 TED_FEATURE:.... 2dc0: 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f return("SCARD_E_ 2dd0: 55 4e 53 55 50 50 4f 52 54 45 44 5f 46 45 41 54 UNSUPPORTED_FEAT 2de0: 55 52 45 22 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 URE");..}...retu 2df0: 72 6e 28 22 55 4e 4b 4e 4f 57 4e 22 29 3b 0a 7d rn("UNKNOWN");.} 2e00: 0a 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 ..static const c 2e10: 68 61 72 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 har *CACKEY_DEBU 2e20: 47 5f 46 55 4e 43 5f 4f 42 4a 49 44 5f 54 4f 5f G_FUNC_OBJID_TO_ 2e30: 53 54 52 28 75 69 6e 74 31 36 5f 74 20 6f 62 6a STR(uint16_t obj 2e40: 69 64 29 20 7b 0a 09 73 77 69 74 63 68 20 28 6f id) {..switch (o 2e50: 62 6a 69 64 29 20 7b 0a 09 09 63 61 73 65 20 30 bjid) {...case 0 2e60: 78 32 30 30 30 3a 0a 09 09 09 72 65 74 75 72 6e x2000:....return 2e70: 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a ("CACKEY_TLV_OBJ 2e80: 49 44 5f 47 45 4e 45 52 41 4c 49 4e 46 4f 22 29 ID_GENERALINFO") 2e90: 3b 0a 09 09 63 61 73 65 20 30 78 32 31 30 30 3a ;...case 0x2100: 2ea0: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b ....return("CACK 2eb0: 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 50 52 4f EY_TLV_OBJID_PRO 2ec0: 50 45 52 53 4f 4e 41 4c 49 4e 46 4f 22 29 3b 0a PERSONALINFO");. 2ed0: 09 09 63 61 73 65 20 30 78 33 30 30 30 3a 0a 09 ..case 0x3000:.. 2ee0: 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 ..return("CACKEY 2ef0: 5f 54 4c 56 5f 4f 42 4a 49 44 5f 41 43 43 45 53 _TLV_OBJID_ACCES 2f00: 53 43 4f 4e 54 52 4f 4c 22 29 3b 0a 09 09 63 61 SCONTROL");...ca 2f10: 73 65 20 30 78 34 30 30 30 3a 0a 09 09 09 72 65 se 0x4000:....re 2f20: 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 turn("CACKEY_TLV 2f30: 5f 4f 42 4a 49 44 5f 4c 4f 47 49 4e 22 29 3b 0a _OBJID_LOGIN");. 2f40: 09 09 63 61 73 65 20 30 78 35 30 30 30 3a 0a 09 ..case 0x5000:.. 2f50: 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 ..return("CACKEY 2f60: 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 52 44 49 _TLV_OBJID_CARDI 2f70: 4e 46 4f 22 29 3b 0a 09 09 63 61 73 65 20 30 78 NFO");...case 0x 2f80: 36 30 30 30 3a 0a 09 09 09 72 65 74 75 72 6e 28 6000:....return( 2f90: 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 "CACKEY_TLV_OBJI 2fa0: 44 5f 42 49 4f 4d 45 54 52 49 43 53 22 29 3b 0a D_BIOMETRICS");. 2fb0: 09 09 63 61 73 65 20 30 78 37 30 30 30 3a 0a 09 ..case 0x7000:.. 2fc0: 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 ..return("CACKEY 2fd0: 5f 54 4c 56 5f 4f 42 4a 49 44 5f 44 49 47 49 54 _TLV_OBJID_DIGIT 2fe0: 41 4c 53 49 47 43 45 52 54 22 29 3b 0a 09 09 63 ALSIGCERT");...c 2ff0: 61 73 65 20 30 78 30 32 30 30 3a 0a 09 09 09 72 ase 0x0200:....r 3000: 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c eturn("CACKEY_TL 3010: 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 45 52 53 V_OBJID_CAC_PERS 3020: 4f 4e 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 ON");...case 0x0 3030: 32 30 32 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 202:....return(" 3040: 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 CACKEY_TLV_OBJID 3050: 5f 43 41 43 5f 42 45 4e 45 46 49 54 53 22 29 3b _CAC_BENEFITS"); 3060: 0a 09 09 63 61 73 65 20 30 78 30 32 30 33 3a 0a ...case 0x0203:. 3070: 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 ...return("CACKE 3080: 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f Y_TLV_OBJID_CAC_ 3090: 4f 54 48 45 52 42 45 4e 45 46 49 54 53 22 29 3b OTHERBENEFITS"); 30a0: 0a 09 09 63 61 73 65 20 30 78 30 32 30 31 3a 0a ...case 0x0201:. 30b0: 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 ...return("CACKE 30c0: 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f Y_TLV_OBJID_CAC_ 30d0: 50 45 52 53 4f 4e 4e 45 4c 22 29 3b 0a 09 09 63 PERSONNEL");...c 30e0: 61 73 65 20 30 78 30 32 46 45 3a 0a 09 09 09 72 ase 0x02FE:....r 30f0: 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c eturn("CACKEY_TL 3100: 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 4b 49 43 V_OBJID_CAC_PKIC 3110: 45 52 54 22 29 3b 0a 09 7d 0a 09 0a 09 72 65 74 ERT");..}....ret 3120: 75 72 6e 28 22 55 4e 4b 4e 4f 57 4e 22 29 3b 0a urn("UNKNOWN");. 3130: 7d 0a 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 }..static const 3140: 63 68 61 72 20 2a 43 41 43 4b 45 59 5f 44 45 42 char *CACKEY_DEB 3150: 55 47 5f 46 55 4e 43 5f 41 50 50 54 59 50 45 5f UG_FUNC_APPTYPE_ 3160: 54 4f 5f 53 54 52 28 75 69 6e 74 38 5f 74 20 61 TO_STR(uint8_t a 3170: 70 70 74 79 70 65 29 20 7b 0a 09 73 77 69 74 63 pptype) {..switc 3180: 68 20 28 61 70 70 74 79 70 65 29 20 7b 0a 09 09 h (apptype) {... 3190: 63 61 73 65 20 30 78 30 30 3a 0a 09 09 09 72 65 case 0x00:....re 31a0: 74 75 72 6e 28 22 4e 4f 4e 45 22 29 3b 0a 09 09 turn("NONE");... 31b0: 63 61 73 65 20 30 78 30 31 3a 0a 09 09 09 72 65 case 0x01:....re 31c0: 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 turn("CACKEY_TLV 31d0: 5f 41 50 50 5f 47 45 4e 45 52 49 43 22 29 3b 0a _APP_GENERIC");. 31e0: 09 09 63 61 73 65 20 30 78 30 32 3a 0a 09 09 09 ..case 0x02:.... 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 53 4b 49 22 29 3b 0a 09 09 LV_APP_SKI");... 3210: 63 61 73 65 20 30 78 30 33 3a 0a 09 09 09 72 65 case 0x03:....re 3220: 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 turn("CACKEY_TLV 3230: 5f 41 50 50 5f 47 45 4e 45 52 49 43 20 7c 20 43 _APP_GENERIC | C 3240: 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 53 4b ACKEY_TLV_APP_SK 3250: 49 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 34 I");...case 0x04 3260: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 :....return("CAC 3270: 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 22 KEY_TLV_APP_PKI" 3280: 29 3b 0a 09 09 63 61 73 65 20 30 78 30 35 3a 0a );...case 0x05:. 3290: 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 ...return("CACKE 32a0: 59 5f 54 4c 56 5f 41 50 50 5f 47 45 4e 45 52 49 Y_TLV_APP_GENERI 32b0: 43 20 7c 20 43 41 43 4b 45 59 5f 54 4c 56 5f 41 C | CACKEY_TLV_A 32c0: 50 50 5f 50 4b 49 22 29 3b 0a 09 09 63 61 73 65 PP_PKI");...case 32d0: 20 30 78 30 36 3a 0a 09 09 09 72 65 74 75 72 6e 0x06:....return 32e0: 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 ("CACKEY_TLV_APP 32f0: 5f 53 4b 49 20 7c 20 43 41 43 4b 45 59 5f 54 4c _SKI | CACKEY_TL 3300: 56 5f 41 50 50 5f 50 4b 49 22 29 3b 0a 09 09 63 V_APP_PKI");...c 3310: 61 73 65 20 30 78 30 37 3a 0a 09 09 09 72 65 74 ase 0x07:....ret 3320: 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f urn("CACKEY_TLV_ 3330: 41 50 50 5f 47 45 4e 45 52 49 43 20 7c 20 43 41 APP_GENERIC | CA 3340: 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 53 4b 49 CKEY_TLV_APP_SKI 3350: 20 7c 20 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 | CACKEY_TLV_AP 3360: 50 5f 50 4b 49 22 29 3b 0a 09 7d 0a 0a 09 72 65 P_PKI");..}...re 3370: 74 75 72 6e 28 22 49 4e 56 41 4c 49 44 22 29 3b turn("INVALID"); 3380: 0a 7d 0a 0a 23 20 20 64 65 66 69 6e 65 20 6d 61 .}..# define ma 3390: 6c 6c 6f 63 28 78 29 20 43 41 43 4b 45 59 5f 44 lloc(x) CACKEY_D 33a0: 45 42 55 47 5f 46 55 4e 43 5f 4d 41 4c 4c 4f 43 EBUG_FUNC_MALLOC 33b0: 28 78 2c 20 5f 5f 66 75 6e 63 5f 5f 2c 20 5f 5f (x, __func__, __ 33c0: 4c 49 4e 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e LINE__).# defin 33d0: 65 20 72 65 61 6c 6c 6f 63 28 78 2c 20 79 29 20 e realloc(x, y) 33e0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN 33f0: 43 5f 52 45 41 4c 4c 4f 43 28 78 2c 20 79 2c 20 C_REALLOC(x, y, 3400: 5f 5f 66 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 4e 45 __func__, __LINE 3410: 5f 5f 29 0a 23 20 20 69 66 64 65 66 20 73 74 72 __).# ifdef str 3420: 64 75 70 0a 23 20 20 20 20 75 6e 64 65 66 20 73 dup.# undef s 3430: 74 72 64 75 70 0a 23 20 20 65 6e 64 69 66 0a 23 trdup.# endif.# 3440: 20 20 64 65 66 69 6e 65 20 73 74 72 64 75 70 28 define strdup( 3450: 78 29 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f x) CACKEY_DEBUG_ 3460: 46 55 4e 43 5f 53 54 52 44 55 50 28 78 2c 20 5f FUNC_STRDUP(x, _ 3470: 5f 66 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 4e 45 5f _func__, __LINE_ 3480: 5f 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 _).#else.# defi 3490: 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ne CACKEY_DEBUG_ 34a0: 50 52 49 4e 54 46 28 78 2e 2e 2e 29 20 2f 2a 2a PRINTF(x...) /** 34b0: 2f 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b /.# define CACK 34c0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 EY_DEBUG_PRINTBU 34d0: 46 28 66 2c 20 78 2c 20 79 29 20 2f 2a 2a 2f 0a F(f, x, y) /**/. 34e0: 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 # define CACKEY 34f0: 5f 44 45 42 55 47 5f 50 45 52 52 4f 52 28 78 29 _DEBUG_PERROR(x) 3500: 20 2f 2a 2a 2f 0a 23 20 20 64 65 66 69 6e 65 20 /**/.# define 3510: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN 3520: 43 5f 54 41 47 5f 54 4f 5f 53 54 52 28 78 29 20 C_TAG_TO_STR(x) 3530: 22 44 45 42 55 47 5f 44 49 53 41 42 4c 45 44 22 "DEBUG_DISABLED" 3540: 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 .# define CACKE 3550: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 Y_DEBUG_FUNC_SCA 3560: 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 78 29 20 RDERR_TO_STR(x) 3570: 22 44 45 42 55 47 5f 44 49 53 41 42 4c 45 44 22 "DEBUG_DISABLED" 3580: 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 .# define CACKE 3590: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 4f 42 4a Y_DEBUG_FUNC_OBJ 35a0: 49 44 5f 54 4f 5f 53 54 52 28 78 29 20 22 44 45 ID_TO_STR(x) "DE 35b0: 42 55 47 5f 44 49 53 41 42 4c 45 44 22 0a 23 20 BUG_DISABLED".# 35c0: 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 define CACKEY_D 35d0: 45 42 55 47 5f 46 55 4e 43 5f 41 50 50 54 59 50 EBUG_FUNC_APPTYP 35e0: 45 5f 54 4f 5f 53 54 52 28 78 29 20 22 44 45 42 E_TO_STR(x) "DEB 35f0: 55 47 5f 44 49 53 41 42 4c 45 44 22 0a 23 65 6e UG_DISABLED".#en 3600: 64 69 66 0a 0a 73 74 72 75 63 74 20 63 61 63 6b dif..struct cack 3610: 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 ey_pcsc_identity 3620: 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 {..unsigned cha 3630: 72 20 61 70 70 6c 65 74 5b 37 5d 3b 0a 09 75 69 r applet[7];..ui 3640: 6e 74 31 36 5f 74 20 66 69 6c 65 3b 0a 0a 09 75 nt16_t file;...u 3650: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 6c 61 nsigned char *la 3660: 62 65 6c 3b 0a 0a 09 73 69 7a 65 5f 74 20 63 65 bel;...size_t ce 3670: 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 3b 0a 09 rtificate_len;.. 3680: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 63 unsigned char *c 3690: 65 72 74 69 66 69 63 61 74 65 3b 0a 7d 3b 0a 0a ertificate;.};.. 36a0: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 69 64 struct cackey_id 36b0: 65 6e 74 69 74 79 20 7b 0a 09 73 74 72 75 63 74 entity {..struct 36c0: 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 cackey_pcsc_ide 36d0: 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 74 79 3b ntity *identity; 36e0: 0a 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 20 ...CK_ATTRIBUTE 36f0: 2a 61 74 74 72 69 62 75 74 65 73 3b 0a 09 43 4b *attributes;..CK 3700: 5f 55 4c 4f 4e 47 20 61 74 74 72 69 62 75 74 65 _ULONG attribute 3710: 73 5f 63 6f 75 6e 74 3b 0a 7d 3b 0a 0a 73 74 72 s_count;.};..str 3720: 75 63 74 20 63 61 63 6b 65 79 5f 73 65 73 73 69 uct cackey_sessi 3730: 6f 6e 20 7b 0a 09 69 6e 74 20 61 63 74 69 76 65 on {..int active 3740: 3b 0a 0a 09 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 ;...CK_SLOT_ID s 3750: 6c 6f 74 49 44 3b 0a 0a 09 43 4b 5f 53 54 41 54 lotID;...CK_STAT 3760: 45 20 73 74 61 74 65 3b 0a 09 43 4b 5f 46 4c 41 E state;..CK_FLA 3770: 47 53 20 66 6c 61 67 73 3b 0a 09 43 4b 5f 55 4c GS flags;..CK_UL 3780: 4f 4e 47 20 75 6c 44 65 76 69 63 65 45 72 72 6f ONG ulDeviceErro 3790: 72 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 54 52 20 r;..CK_VOID_PTR 37a0: 70 41 70 70 6c 69 63 61 74 69 6f 6e 3b 0a 09 43 pApplication;..C 37b0: 4b 5f 4e 4f 54 49 46 59 20 4e 6f 74 69 66 79 3b K_NOTIFY Notify; 37c0: 0a 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 ...struct cackey 37d0: 5f 69 64 65 6e 74 69 74 79 20 2a 69 64 65 6e 74 _identity *ident 37e0: 69 74 69 65 73 3b 0a 09 75 6e 73 69 67 6e 65 64 ities;..unsigned 37f0: 20 6c 6f 6e 67 20 69 64 65 6e 74 69 74 69 65 73 long identities 3800: 5f 63 6f 75 6e 74 3b 0a 0a 09 69 6e 74 20 73 65 _count;...int se 3810: 61 72 63 68 5f 61 63 74 69 76 65 3b 0a 09 43 4b arch_active;..CK 3820: 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 73 _ATTRIBUTE_PTR s 3830: 65 61 72 63 68 5f 71 75 65 72 79 3b 0a 09 43 4b earch_query;..CK 3840: 5f 55 4c 4f 4e 47 20 73 65 61 72 63 68 5f 71 75 _ULONG search_qu 3850: 65 72 79 5f 63 6f 75 6e 74 3b 0a 09 75 6e 73 69 ery_count;..unsi 3860: 67 6e 65 64 20 6c 6f 6e 67 20 73 65 61 72 63 68 gned long search 3870: 5f 63 75 72 72 5f 69 64 3b 0a 0a 09 69 6e 74 20 _curr_id;...int 3880: 73 69 67 6e 5f 61 63 74 69 76 65 3b 0a 09 43 4b sign_active;..CK 3890: 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 59 50 45 20 _MECHANISM_TYPE 38a0: 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 6d 3b 0a sign_mechanism;. 38b0: 09 43 4b 5f 42 59 54 45 5f 50 54 52 20 73 69 67 .CK_BYTE_PTR sig 38c0: 6e 5f 62 75 66 3b 0a 09 75 6e 73 69 67 6e 65 64 n_buf;..unsigned 38d0: 20 6c 6f 6e 67 20 73 69 67 6e 5f 62 75 66 6c 65 long sign_bufle 38e0: 6e 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e n;..unsigned lon 38f0: 67 20 73 69 67 6e 5f 62 75 66 75 73 65 64 3b 0a g sign_bufused;. 3900: 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 69 .struct cackey_i 3910: 64 65 6e 74 69 74 79 20 2a 73 69 67 6e 5f 69 64 dentity *sign_id 3920: 65 6e 74 69 74 79 3b 0a 0a 09 69 6e 74 20 64 65 entity;...int de 3930: 63 72 79 70 74 5f 61 63 74 69 76 65 3b 0a 09 43 crypt_active;..C 3940: 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 59 50 45 K_MECHANISM_TYPE 3950: 20 64 65 63 72 79 70 74 5f 6d 65 63 68 61 6e 69 decrypt_mechani 3960: 73 6d 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 54 52 sm;..CK_VOID_PTR 3970: 20 64 65 63 72 79 70 74 5f 6d 65 63 68 5f 70 61 decrypt_mech_pa 3980: 72 6d 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 64 65 rm;..CK_ULONG de 3990: 63 72 79 70 74 5f 6d 65 63 68 5f 70 61 72 6d 6c crypt_mech_parml 39a0: 65 6e 3b 0a 09 73 74 72 75 63 74 20 63 61 63 6b en;..struct cack 39b0: 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 64 65 63 ey_identity *dec 39c0: 72 79 70 74 5f 69 64 65 6e 74 69 74 79 3b 0a 7d rypt_identity;.} 39d0: 3b 0a 0a 73 74 72 75 63 74 20 63 61 63 6b 65 79 ;..struct cackey 39e0: 5f 73 6c 6f 74 20 7b 0a 09 69 6e 74 20 61 63 74 _slot {..int act 39f0: 69 76 65 3b 0a 0a 09 63 68 61 72 20 2a 70 63 73 ive;...char *pcs 3a00: 63 5f 72 65 61 64 65 72 3b 0a 0a 09 69 6e 74 20 c_reader;...int 3a10: 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 pcsc_card_connec 3a20: 74 65 64 3b 0a 09 53 43 41 52 44 48 41 4e 44 4c ted;..SCARDHANDL 3a30: 45 20 70 63 73 63 5f 63 61 72 64 3b 0a 0a 09 69 E pcsc_card;...i 3a40: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 nt transaction_d 3a50: 65 70 74 68 3b 0a 0a 09 69 6e 74 20 73 6c 6f 74 epth;...int slot 3a60: 5f 72 65 73 65 74 3b 0a 7d 3b 0a 0a 74 79 70 65 _reset;.};..type 3a70: 64 65 66 20 65 6e 75 6d 20 7b 0a 09 43 41 43 4b def enum {..CACK 3a80: 45 59 5f 54 4c 56 5f 41 50 50 5f 47 45 4e 45 52 EY_TLV_APP_GENER 3a90: 49 43 20 3d 20 30 78 30 31 2c 0a 09 43 41 43 4b IC = 0x01,..CACK 3aa0: 45 59 5f 54 4c 56 5f 41 50 50 5f 53 4b 49 20 20 EY_TLV_APP_SKI 3ab0: 20 20 20 3d 20 30 78 30 32 2c 0a 09 43 41 43 4b = 0x02,..CACK 3ac0: 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 20 20 EY_TLV_APP_PKI 3ad0: 20 20 20 3d 20 30 78 30 34 0a 7d 20 63 61 63 6b = 0x04.} cack 3ae0: 65 79 5f 74 6c 76 5f 61 70 70 74 79 70 65 3b 0a ey_tlv_apptype;. 3af0: 0a 74 79 70 65 64 65 66 20 65 6e 75 6d 20 7b 0a .typedef enum {. 3b00: 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 .CACKEY_TLV_OBJI 3b10: 44 5f 47 45 4e 45 52 41 4c 49 4e 46 4f 20 20 20 D_GENERALINFO 3b20: 20 20 20 20 3d 20 30 78 32 30 30 30 2c 0a 09 43 = 0x2000,..C 3b30: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 3b40: 50 52 4f 50 45 52 53 4f 4e 41 4c 49 4e 46 4f 20 PROPERSONALINFO 3b50: 20 20 3d 20 30 78 32 31 30 30 2c 0a 09 43 41 43 = 0x2100,..CAC 3b60: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 41 43 KEY_TLV_OBJID_AC 3b70: 43 45 53 53 43 4f 4e 54 52 4f 4c 20 20 20 20 20 CESSCONTROL 3b80: 3d 20 30 78 33 30 30 30 2c 0a 09 43 41 43 4b 45 = 0x3000,..CACKE 3b90: 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 4c 4f 47 49 Y_TLV_OBJID_LOGI 3ba0: 4e 20 20 20 20 20 20 20 20 20 20 20 20 20 3d 20 N = 3bb0: 30 78 34 30 30 30 2c 0a 09 43 41 43 4b 45 59 5f 0x4000,..CACKEY_ 3bc0: 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 52 44 49 4e TLV_OBJID_CARDIN 3bd0: 46 4f 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 FO = 0x 3be0: 35 30 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 5000,..CACKEY_TL 3bf0: 56 5f 4f 42 4a 49 44 5f 42 49 4f 4d 45 54 52 49 V_OBJID_BIOMETRI 3c00: 43 53 20 20 20 20 20 20 20 20 3d 20 30 78 36 30 CS = 0x60 3c10: 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 00,..CACKEY_TLV_ 3c20: 4f 42 4a 49 44 5f 44 49 47 49 54 41 4c 53 49 47 OBJID_DIGITALSIG 3c30: 43 45 52 54 20 20 20 20 3d 20 30 78 37 30 30 30 CERT = 0x7000 3c40: 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 ,..CACKEY_TLV_OB 3c50: 4a 49 44 5f 43 41 43 5f 50 45 52 53 4f 4e 20 20 JID_CAC_PERSON 3c60: 20 20 20 20 20 20 3d 20 30 78 30 32 30 30 2c 0a = 0x0200,. 3c70: 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 .CACKEY_TLV_OBJI 3c80: 44 5f 43 41 43 5f 42 45 4e 45 46 49 54 53 20 20 D_CAC_BENEFITS 3c90: 20 20 20 20 3d 20 30 78 30 32 30 32 2c 0a 09 43 = 0x0202,..C 3ca0: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 3cb0: 43 41 43 5f 4f 54 48 45 52 42 45 4e 45 46 49 54 CAC_OTHERBENEFIT 3cc0: 53 20 3d 20 30 78 30 32 30 33 2c 0a 09 43 41 43 S = 0x0203,..CAC 3cd0: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 KEY_TLV_OBJID_CA 3ce0: 43 5f 50 45 52 53 4f 4e 4e 45 4c 20 20 20 20 20 C_PERSONNEL 3cf0: 3d 20 30 78 30 32 30 31 2c 0a 09 43 41 43 4b 45 = 0x0201,..CACKE 3d00: 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f Y_TLV_OBJID_CAC_ 3d10: 50 4b 49 43 45 52 54 20 20 20 20 20 20 20 3d 20 PKICERT = 3d20: 30 78 30 32 46 45 0a 7d 20 63 61 63 6b 65 79 5f 0x02FE.} cackey_ 3d30: 74 6c 76 5f 6f 62 6a 65 63 74 69 64 3b 0a 0a 74 tlv_objectid;..t 3d40: 79 70 65 64 65 66 20 65 6e 75 6d 20 7b 0a 09 43 ypedef enum {..C 3d50: 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 54 4f 4b ACKEY_PCSC_S_TOK 3d60: 45 4e 50 52 45 53 45 4e 54 20 20 20 20 3d 20 32 ENPRESENT = 2 3d70: 2c 0a 09 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 ,..CACKEY_PCSC_S 3d80: 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 20 20 20 20 _TOKENABSENT 3d90: 20 3d 20 31 2c 0a 09 43 41 43 4b 45 59 5f 50 43 = 1,..CACKEY_PC 3da0: 53 43 5f 53 5f 4f 4b 20 20 20 20 20 20 20 20 20 SC_S_OK 3db0: 20 20 20 20 20 3d 20 30 2c 0a 09 43 41 43 4b 45 = 0,..CACKE 3dc0: 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 Y_PCSC_E_GENERIC 3dd0: 20 20 20 20 20 20 20 20 20 3d 20 2d 31 2c 0a 09 = -1,.. 3de0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 42 41 CACKEY_PCSC_E_BA 3df0: 44 50 49 4e 20 20 20 20 20 20 20 20 20 20 3d 20 DPIN = 3e00: 2d 32 2c 0a 09 43 41 43 4b 45 59 5f 50 43 53 43 -2,..CACKEY_PCSC 3e10: 5f 45 5f 4c 4f 43 4b 45 44 20 20 20 20 20 20 20 _E_LOCKED 3e20: 20 20 20 3d 20 2d 33 2c 0a 7d 20 63 61 63 6b 65 = -3,.} cacke 3e30: 79 5f 72 65 74 3b 0a 0a 73 74 72 75 63 74 20 63 y_ret;..struct c 3e40: 61 63 6b 65 79 5f 74 6c 76 5f 63 61 72 64 75 72 ackey_tlv_cardur 3e50: 6c 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 l {..unsigned ch 3e60: 61 72 20 20 20 20 20 20 20 20 72 69 64 5b 35 5d ar rid[5] 3e70: 3b 0a 09 63 61 63 6b 65 79 5f 74 6c 76 5f 61 70 ;..cackey_tlv_ap 3e80: 70 74 79 70 65 20 20 20 61 70 70 74 79 70 65 3b ptype apptype; 3e90: 0a 09 63 61 63 6b 65 79 5f 74 6c 76 5f 6f 62 6a ..cackey_tlv_obj 3ea0: 65 63 74 69 64 20 20 6f 62 6a 65 63 74 69 64 3b ectid objectid; 3eb0: 0a 09 63 61 63 6b 65 79 5f 74 6c 76 5f 6f 62 6a ..cackey_tlv_obj 3ec0: 65 63 74 69 64 20 20 61 70 70 69 64 3b 0a 09 75 ectid appid;..u 3ed0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 20 20 20 nsigned char 3ee0: 20 20 20 20 70 69 6e 69 64 3b 0a 7d 3b 0a 0a 73 pinid;.};..s 3ef0: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 truct cackey_tlv 3f00: 5f 65 6e 74 69 74 79 3b 0a 73 74 72 75 63 74 20 _entity;.struct 3f10: 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 cackey_tlv_entit 3f20: 79 20 7b 0a 09 75 69 6e 74 38 5f 74 20 74 61 67 y {..uint8_t tag 3f30: 3b 0a 09 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 ;..size_t length 3f40: 3b 0a 0a 09 75 6e 69 6f 6e 20 7b 0a 09 09 76 6f ;...union {...vo 3f50: 69 64 20 2a 76 61 6c 75 65 3b 0a 09 09 73 74 72 id *value;...str 3f60: 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 63 uct cackey_tlv_c 3f70: 61 72 64 75 72 6c 20 2a 76 61 6c 75 65 5f 63 61 ardurl *value_ca 3f80: 72 64 75 72 6c 3b 0a 09 09 75 69 6e 74 38 5f 74 rdurl;...uint8_t 3f90: 20 76 61 6c 75 65 5f 62 79 74 65 3b 0a 09 7d 3b value_byte;..}; 3fa0: 0a 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 ...struct cackey 3fb0: 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a 5f 6e 65 _tlv_entity *_ne 3fc0: 78 74 3b 0a 7d 3b 0a 0a 2f 2a 20 43 41 43 4b 45 xt;.};../* CACKE 3fd0: 59 20 47 6c 6f 62 61 6c 20 48 61 6e 64 6c 65 73 Y Global Handles 3fe0: 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 */.static void 3ff0: 2a 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 20 *cackey_biglock 4000: 3d 20 4e 55 4c 4c 3b 0a 73 74 61 74 69 63 20 73 = NULL;.static s 4010: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 65 73 truct cackey_ses 4020: 73 69 6f 6e 20 63 61 63 6b 65 79 5f 73 65 73 73 sion cackey_sess 4030: 69 6f 6e 73 5b 31 32 38 5d 3b 0a 73 74 61 74 69 ions[128];.stati 4040: 63 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f c struct cackey_ 4050: 73 6c 6f 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 slot cackey_slot 4060: 73 5b 31 32 38 5d 3b 0a 73 74 61 74 69 63 20 69 s[128];.static i 4070: 6e 74 20 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 nt cackey_initia 4080: 6c 69 7a 65 64 20 3d 20 30 3b 0a 73 74 61 74 69 lized = 0;.stati 4090: 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 62 69 67 c int cackey_big 40a0: 6c 6f 63 6b 5f 69 6e 69 74 20 3d 20 30 3b 0a 43 lock_init = 0;.C 40b0: 4b 5f 43 5f 49 4e 49 54 49 41 4c 49 5a 45 5f 41 K_C_INITIALIZE_A 40c0: 52 47 53 20 63 61 63 6b 65 79 5f 61 72 67 73 3b RGS cackey_args; 40d0: 0a 0a 2f 2a 20 50 43 53 43 20 47 6c 6f 62 61 6c ../* PCSC Global 40e0: 20 48 61 6e 64 6c 65 73 20 2a 2f 0a 73 74 61 74 Handles */.stat 40f0: 69 63 20 4c 50 53 43 41 52 44 43 4f 4e 54 45 58 ic LPSCARDCONTEX 4100: 54 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 T cackey_pcsc_ha 4110: 6e 64 6c 65 20 3d 20 4e 55 4c 4c 3b 0a 0a 73 74 ndle = NULL;..st 4120: 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 6c 6f atic unsigned lo 4130: 6e 67 20 63 61 63 6b 65 79 5f 67 65 74 76 65 72 ng cackey_getver 4140: 73 69 6f 6e 28 76 6f 69 64 29 20 7b 0a 09 73 74 sion(void) {..st 4150: 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 6c 6f atic unsigned lo 4160: 6e 67 20 72 65 74 76 61 6c 20 3d 20 32 35 35 3b ng retval = 255; 4170: 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 ..unsigned long 4180: 6d 61 6a 6f 72 20 3d 20 30 3b 0a 09 75 6e 73 69 major = 0;..unsi 4190: 67 6e 65 64 20 6c 6f 6e 67 20 6d 69 6e 6f 72 20 gned long minor 41a0: 3d 20 30 3b 0a 09 63 68 61 72 20 2a 6d 61 6a 6f = 0;..char *majo 41b0: 72 5f 73 74 72 20 3d 20 4e 55 4c 4c 3b 0a 09 63 r_str = NULL;..c 41c0: 68 61 72 20 2a 6d 69 6e 6f 72 5f 73 74 72 20 3d har *minor_str = 41d0: 20 4e 55 4c 4c 3b 0a 0a 09 43 41 43 4b 45 59 5f NULL;...CACKEY_ 41e0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 41f0: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 72 lled.");...if (r 4200: 65 74 76 61 6c 20 21 3d 20 32 35 35 29 20 7b 0a etval != 255) {. 4210: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 4220: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 4230: 20 30 78 25 6c 78 20 28 63 61 63 68 65 64 29 2e 0x%lx (cached). 4240: 22 2c 20 72 65 74 76 61 6c 29 3b 0a 0a 09 09 72 ", retval);....r 4250: 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 09 eturn(retval);.. 4260: 7d 0a 0a 09 72 65 74 76 61 6c 20 3d 20 30 3b 0a }...retval = 0;. 4270: 0a 23 69 66 64 65 66 20 50 41 43 4b 41 47 45 5f .#ifdef PACKAGE_ 4280: 56 45 52 53 49 4f 4e 0a 20 20 20 20 20 20 20 20 VERSION. 4290: 6d 61 6a 6f 72 5f 73 74 72 20 3d 20 50 41 43 4b major_str = PACK 42a0: 41 47 45 5f 56 45 52 53 49 4f 4e 3b 0a 09 69 66 AGE_VERSION;..if 42b0: 20 28 6d 61 6a 6f 72 5f 73 74 72 29 20 7b 0a 09 (major_str) {.. 42c0: 20 20 20 20 20 20 20 20 6d 61 6a 6f 72 20 3d 20 major = 42d0: 73 74 72 74 6f 75 6c 28 6d 61 6a 6f 72 5f 73 74 strtoul(major_st 42e0: 72 2c 20 26 6d 69 6e 6f 72 5f 73 74 72 2c 20 31 r, &minor_str, 1 42f0: 30 29 3b 0a 0a 09 09 69 66 20 28 6d 69 6e 6f 72 0);....if (minor 4300: 5f 73 74 72 29 20 7b 0a 09 09 09 6d 69 6e 6f 72 _str) {....minor 4310: 20 3d 20 73 74 72 74 6f 75 6c 28 6d 69 6e 6f 72 = strtoul(minor 4320: 5f 73 74 72 20 2b 20 31 2c 20 4e 55 4c 4c 2c 20 _str + 1, NULL, 4330: 31 30 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 72 65 10);...}..}...re 4340: 74 76 61 6c 20 3d 20 28 6d 61 6a 6f 72 20 3c 3c tval = (major << 4350: 20 31 36 29 20 7c 20 28 6d 69 6e 6f 72 20 3c 3c 16) | (minor << 4360: 20 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 09 43 41 8);.#endif...CA 4370: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 4380: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 30 78 25 F("Returning 0x% 4390: 6c 78 22 2c 20 72 65 74 76 61 6c 29 3b 0a 0a 09 lx", retval);... 43a0: 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a return(retval);. 43b0: 7d 0a 0a 2f 2a 20 50 43 2f 53 43 20 52 65 6c 61 }../* PC/SC Rela 43c0: 74 65 64 20 46 75 6e 63 74 69 6f 6e 73 20 2a 2f ted Functions */ 43d0: 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a ./*. * SYNPOSIS. 43e0: 20 2a 20 20 20 20 20 76 6f 69 64 20 63 61 63 6b * void cack 43f0: 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e ey_slots_disconn 4400: 65 63 74 5f 61 6c 6c 28 76 6f 69 64 29 3b 0a 20 ect_all(void);. 4410: 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 *. * ARGUMENTS. 4420: 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a * None. *. * 4430: 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a RETURN VALUE. * 4440: 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a 20 None. *. * 4450: 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 54 68 69 NOTES. * Thi 4460: 73 20 66 75 6e 63 74 69 6f 6e 20 64 69 73 63 6f s function disco 4470: 6e 6e 65 63 74 73 20 66 72 6f 6d 20 61 6c 6c 20 nnects from all 4480: 63 61 72 64 73 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 cards.. *. */.st 4490: 61 74 69 63 20 76 6f 69 64 20 63 61 63 6b 65 79 atic void cackey 44a0: 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 63 _slots_disconnec 44b0: 74 5f 61 6c 6c 28 76 6f 69 64 29 20 7b 0a 09 75 t_all(void) {..u 44c0: 69 6e 74 33 32 5f 74 20 69 64 78 3b 0a 0a 09 43 int32_t idx;...C 44d0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 44e0: 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 44f0: 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 .for (idx = 0; i 4500: 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 dx < (sizeof(cac 4510: 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a key_slots) / siz 4520: 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 eof(cackey_slots 4530: 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b 0a [0])); idx++) {. 4540: 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f ..if (cackey_slo 4550: 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 63 61 72 ts[idx].pcsc_car 4560: 64 5f 63 6f 6e 6e 65 63 74 65 64 29 20 7b 0a 09 d_connected) {.. 4570: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 4580: 52 49 4e 54 46 28 22 53 43 61 72 64 44 69 73 63 RINTF("SCardDisc 4590: 6f 6e 6e 65 63 74 28 25 6c 75 29 20 63 61 6c 6c onnect(%lu) call 45a0: 65 64 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ed", (unsigned l 45b0: 6f 6e 67 29 20 69 64 78 29 3b 0a 0a 09 09 09 53 ong) idx);.....S 45c0: 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 63 CardDisconnect(c 45d0: 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d ackey_slots[idx] 45e0: 2e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 52 .pcsc_card, SCAR 45f0: 44 5f 4c 45 41 56 45 5f 43 41 52 44 29 3b 0a 09 D_LEAVE_CARD);.. 4600: 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f .}....cackey_slo 4610: 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 63 61 72 ts[idx].pcsc_car 4620: 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 3b d_connected = 0; 4630: 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ...cackey_slots[ 4640: 69 64 78 5d 2e 74 72 61 6e 73 61 63 74 69 6f 6e idx].transaction 4650: 5f 64 65 70 74 68 20 3d 20 30 3b 0a 0a 09 09 69 _depth = 0;....i 4660: 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b f (cackey_slots[ 4670: 69 64 78 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 idx].active) {.. 4680: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 4690: 52 49 4e 54 46 28 22 4d 61 72 6b 69 6e 67 20 61 RINTF("Marking a 46a0: 63 74 69 76 65 20 73 6c 6f 74 20 25 6c 75 20 61 ctive slot %lu a 46b0: 73 20 62 65 69 6e 67 20 72 65 73 65 74 22 2c 20 s being reset", 46c0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 46d0: 69 64 78 29 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 idx);...}....cac 46e0: 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 73 key_slots[idx].s 46f0: 6c 6f 74 5f 72 65 73 65 74 20 3d 20 31 3b 0a 09 lot_reset = 1;.. 4700: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 4710: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 4720: 6e 67 22 29 3b 0a 0a 09 72 65 74 75 72 6e 3b 0a ng");...return;. 4730: 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 }../*. * SYNPOSI 4740: 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 79 5f S. * cackey_ 4750: 72 65 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f ret cackey_pcsc_ 4760: 63 6f 6e 6e 65 63 74 28 76 6f 69 64 29 3b 0a 20 connect(void);. 4770: 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 *. * ARGUMENTS. 4780: 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a * None. *. * 4790: 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a RETURN VALUE. * 47a0: 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 CACKEY_PCSC 47b0: 5f 53 5f 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e _S_OK On 47c0: 20 73 75 63 63 65 73 73 0a 20 2a 20 20 20 20 20 success. * 47d0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 CACKEY_PCSC_E_GE 47e0: 4e 45 52 49 43 20 20 20 20 4f 6e 20 65 72 72 6f NERIC On erro 47f0: 72 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a r. *. * NOTES. * 4800: 20 20 20 20 20 54 68 69 73 20 66 75 6e 63 74 69 This functi 4810: 6f 6e 20 63 6f 6e 6e 65 63 74 73 20 74 6f 20 74 on connects to t 4820: 68 65 20 50 43 2f 53 43 20 43 6f 6e 6e 65 63 74 he PC/SC Connect 4830: 69 6f 6e 20 4d 61 6e 61 67 65 72 20 61 6e 64 20 ion Manager and 4840: 75 70 64 61 74 65 73 20 74 68 65 0a 20 2a 20 20 updates the. * 4850: 20 20 20 67 6c 6f 62 61 6c 20 68 61 6e 64 6c 65 global handle 4860: 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 .. *. */.static 4870: 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 cackey_ret cacke 4880: 79 5f 70 63 73 63 5f 63 6f 6e 6e 65 63 74 28 76 y_pcsc_connect(v 4890: 6f 69 64 29 20 7b 0a 09 4c 4f 4e 47 20 73 63 61 oid) {..LONG sca 48a0: 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 rd_est_context_r 48b0: 65 74 3b 0a 23 69 66 64 65 66 20 48 41 56 45 5f et;.#ifdef HAVE_ 48c0: 53 43 41 52 44 49 53 56 41 4c 49 44 43 4f 4e 54 SCARDISVALIDCONT 48d0: 45 58 54 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f EXT..LONG scard_ 48e0: 69 73 76 61 6c 69 64 5f 72 65 74 3b 0a 23 65 6e isvalid_ret;.#en 48f0: 64 69 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 dif...CACKEY_DEB 4900: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 4910: 64 2e 22 29 3b 0a 0a 09 69 66 20 28 63 61 63 6b d.");...if (cack 4920: 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d ey_pcsc_handle = 4930: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 63 61 63 6b = NULL) {...cack 4940: 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d ey_pcsc_handle = 4950: 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a malloc(sizeof(* 4960: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 4970: 6c 65 29 29 3b 0a 09 09 69 66 20 28 63 61 63 6b le));...if (cack 4980: 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d ey_pcsc_handle = 4990: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 43 41 43 = NULL) {....CAC 49a0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 49b0: 28 22 43 61 6c 6c 20 74 6f 20 6d 61 6c 6c 6f 63 ("Call to malloc 49c0: 28 29 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 () failed, retur 49d0: 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 ning in failure" 49e0: 29 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 6c );.....cackey_sl 49f0: 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f 61 ots_disconnect_a 4a00: 6c 6c 28 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e ll();.....return 4a10: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 (CACKEY_PCSC_E_G 4a20: 45 4e 45 52 49 43 29 3b 0a 09 09 7d 0a 0a 09 09 ENERIC);...}.... 4a30: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 4a40: 4e 54 46 28 22 53 43 61 72 64 45 73 74 61 62 6c NTF("SCardEstabl 4a50: 69 73 68 43 6f 6e 74 65 78 74 28 29 20 63 61 6c ishContext() cal 4a60: 6c 65 64 22 29 3b 0a 09 09 73 63 61 72 64 5f 65 led");...scard_e 4a70: 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20 3d st_context_ret = 4a80: 20 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 43 SCardEstablishC 4a90: 6f 6e 74 65 78 74 28 53 43 41 52 44 5f 53 43 4f ontext(SCARD_SCO 4aa0: 50 45 5f 53 59 53 54 45 4d 2c 20 4e 55 4c 4c 2c PE_SYSTEM, NULL, 4ab0: 20 4e 55 4c 4c 2c 20 63 61 63 6b 65 79 5f 70 63 NULL, cackey_pc 4ac0: 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 09 69 66 sc_handle);...if 4ad0: 20 28 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 (scard_est_cont 4ae0: 65 78 74 5f 72 65 74 20 21 3d 20 53 43 41 52 44 ext_ret != SCARD 4af0: 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 _S_SUCCESS) {... 4b00: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 4b10: 49 4e 54 46 28 22 43 61 6c 6c 20 74 6f 20 53 43 INTF("Call to SC 4b20: 61 72 64 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 ardEstablishCont 4b30: 65 78 74 20 66 61 69 6c 65 64 20 28 72 65 74 75 ext failed (retu 4b40: 72 6e 65 64 20 25 73 2f 25 6c 69 29 2c 20 72 65 rned %s/%li), re 4b50: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu 4b60: 72 65 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 re", CACKEY_DEBU 4b70: 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f G_FUNC_SCARDERR_ 4b80: 54 4f 5f 53 54 52 28 73 63 61 72 64 5f 65 73 74 TO_STR(scard_est 4b90: 5f 63 6f 6e 74 65 78 74 5f 72 65 74 29 2c 20 28 _context_ret), ( 4ba0: 6c 6f 6e 67 29 20 73 63 61 72 64 5f 65 73 74 5f long) scard_est_ 4bb0: 63 6f 6e 74 65 78 74 5f 72 65 74 29 3b 0a 0a 09 context_ret);... 4bc0: 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f 70 63 ..free(cackey_pc 4bd0: 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 0a 09 09 09 sc_handle);..... 4be0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 cackey_slots_dis 4bf0: 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 29 3b 0a 0a connect_all();.. 4c00: 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 4c10: 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 _PCSC_E_GENERIC) 4c20: 3b 0a 09 09 7d 0a 09 7d 0a 0a 23 69 66 64 65 66 ;...}..}..#ifdef 4c30: 20 48 41 56 45 5f 53 43 41 52 44 49 53 56 41 4c HAVE_SCARDISVAL 4c40: 49 44 43 4f 4e 54 45 58 54 0a 09 43 41 43 4b 45 IDCONTEXT..CACKE 4c50: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 4c60: 53 43 61 72 64 49 73 56 61 6c 69 64 43 6f 6e 74 SCardIsValidCont 4c70: 65 78 74 28 29 20 63 61 6c 6c 65 64 22 29 3b 0a ext() called");. 4c80: 09 73 63 61 72 64 5f 69 73 76 61 6c 69 64 5f 72 .scard_isvalid_r 4c90: 65 74 20 3d 20 53 43 61 72 64 49 73 56 61 6c 69 et = SCardIsVali 4ca0: 64 43 6f 6e 74 65 78 74 28 2a 63 61 63 6b 65 79 dContext(*cackey 4cb0: 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 _pcsc_handle);.. 4cc0: 69 66 20 28 73 63 61 72 64 5f 69 73 76 61 6c 69 if (scard_isvali 4cd0: 64 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f 53 d_ret != SCARD_S 4ce0: 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 43 41 _SUCCESS) {...CA 4cf0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 4d00: 46 28 22 48 61 6e 64 6c 65 20 68 61 73 20 62 65 F("Handle has be 4d10: 63 6f 6d 65 20 69 6e 76 61 6c 69 64 20 28 53 43 come invalid (SC 4d20: 61 72 64 49 73 56 61 6c 69 64 43 6f 6e 74 65 78 ardIsValidContex 4d30: 74 20 3d 20 25 73 2f 25 6c 69 29 2c 20 74 72 79 t = %s/%li), try 4d40: 69 6e 67 20 74 6f 20 72 65 2d 65 73 74 61 62 6c ing to re-establ 4d50: 69 73 68 2e 2e 2e 22 2c 20 43 41 43 4b 45 59 5f ish...", CACKEY_ 4d60: 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 DEBUG_FUNC_SCARD 4d70: 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 ERR_TO_STR(scard 4d80: 5f 69 73 76 61 6c 69 64 5f 72 65 74 29 2c 20 28 _isvalid_ret), ( 4d90: 6c 6f 6e 67 29 20 73 63 61 72 64 5f 69 73 76 61 long) scard_isva 4da0: 6c 69 64 5f 72 65 74 29 3b 0a 0a 09 09 43 41 43 lid_ret);....CAC 4db0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 4dc0: 28 22 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 ("SCardEstablish 4dd0: 43 6f 6e 74 65 78 74 28 29 20 63 61 6c 6c 65 64 Context() called 4de0: 22 29 3b 0a 09 09 73 63 61 72 64 5f 65 73 74 5f ");...scard_est_ 4df0: 63 6f 6e 74 65 78 74 5f 72 65 74 20 3d 20 53 43 context_ret = SC 4e00: 61 72 64 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 ardEstablishCont 4e10: 65 78 74 28 53 43 41 52 44 5f 53 43 4f 50 45 5f ext(SCARD_SCOPE_ 4e20: 53 59 53 54 45 4d 2c 20 4e 55 4c 4c 2c 20 4e 55 SYSTEM, NULL, NU 4e30: 4c 4c 2c 20 63 61 63 6b 65 79 5f 70 63 73 63 5f LL, cackey_pcsc_ 4e40: 68 61 6e 64 6c 65 29 3b 0a 09 09 69 66 20 28 73 handle);...if (s 4e50: 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 card_est_context 4e60: 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f _ret != SCARD_S_ 4e70: 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 43 41 SUCCESS) {....CA 4e80: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 4e90: 46 28 22 43 61 6c 6c 20 74 6f 20 53 43 61 72 64 F("Call to SCard 4ea0: 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 EstablishContext 4eb0: 20 66 61 69 6c 65 64 20 28 72 65 74 75 72 6e 65 failed (returne 4ec0: 64 20 25 73 2f 25 6c 69 29 2c 20 72 65 74 75 72 d %s/%li), retur 4ed0: 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 ning in failure" 4ee0: 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F 4ef0: 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f UNC_SCARDERR_TO_ 4f00: 53 54 52 28 73 63 61 72 64 5f 65 73 74 5f 63 6f STR(scard_est_co 4f10: 6e 74 65 78 74 5f 72 65 74 29 2c 20 28 6c 6f 6e ntext_ret), (lon 4f20: 67 29 20 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e g) scard_est_con 4f30: 74 65 78 74 5f 72 65 74 29 3b 0a 0a 09 09 09 66 text_ret);.....f 4f40: 72 65 65 28 63 61 63 6b 65 79 5f 70 63 73 63 5f ree(cackey_pcsc_ 4f50: 68 61 6e 64 6c 65 29 3b 0a 0a 09 09 09 63 61 63 handle);.....cac 4f60: 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e key_slots_discon 4f70: 6e 65 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 09 nect_all();..... 4f80: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 4f90: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 4fa0: 09 7d 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 .}....CACKEY_DEB 4fb0: 55 47 5f 50 52 49 4e 54 46 28 22 48 61 6e 64 6c UG_PRINTF("Handl 4fc0: 65 20 68 61 73 20 62 65 65 6e 20 72 65 2d 65 73 e has been re-es 4fd0: 74 61 62 6c 69 73 68 65 64 22 29 3b 0a 09 7d 0a tablished");..}. 4fe0: 23 65 6e 64 69 66 0a 0a 09 43 41 43 4b 45 59 5f #endif...CACKEY_ 4ff0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 DEBUG_PRINTF("Su 5000: 63 65 73 73 66 75 6c 6c 79 20 63 6f 6e 6e 65 63 cessfully connec 5010: 74 65 64 20 74 6f 20 50 43 2f 53 43 2c 20 72 65 ted to PC/SC, re 5020: 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 turning in succe 5030: 73 73 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 ss");...return(C 5040: 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 ACKEY_PCSC_S_OK) 5050: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f ;.}../*. * SYNPO 5060: 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 SIS. * cacke 5070: 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 70 63 73 y_ret cackey_pcs 5080: 63 5f 64 69 73 63 6f 6e 6e 65 63 74 28 76 6f 69 c_disconnect(voi 5090: 64 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 d);. *. * ARGUME 50a0: 4e 54 53 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a NTS. * None. 50b0: 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c *. * RETURN VAL 50c0: 55 45 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 UE. * CACKEY 50d0: 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 20 20 20 20 _PCSC_S_OK 50e0: 20 20 20 4f 6e 20 73 75 63 63 65 73 73 0a 20 2a On success. * 50f0: 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 CACKEY_PCSC 5100: 5f 45 5f 47 45 4e 45 52 49 43 20 20 20 20 4f 6e _E_GENERIC On 5110: 20 65 72 72 6f 72 0a 20 2a 0a 20 2a 20 4e 4f 54 error. *. * NOT 5120: 45 53 0a 20 2a 20 20 20 20 20 54 68 69 73 20 66 ES. * This f 5130: 75 6e 63 74 69 6f 6e 20 64 69 73 63 6f 6e 6e 65 unction disconne 5140: 63 74 73 20 66 72 6f 6d 20 74 68 65 20 50 43 2f cts from the PC/ 5150: 53 43 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 SC Connection ma 5160: 6e 61 67 65 72 20 61 6e 64 20 75 70 64 61 74 65 nager and update 5170: 73 0a 20 2a 20 20 20 20 20 74 68 65 20 67 6c 6f s. * the glo 5180: 62 61 6c 20 68 61 6e 64 6c 65 2e 0a 20 2a 0a 20 bal handle.. *. 5190: 2a 2f 0a 73 74 61 74 69 63 20 63 61 63 6b 65 79 */.static cackey 51a0: 5f 72 65 74 20 63 61 63 6b 65 79 5f 70 63 73 63 _ret cackey_pcsc 51b0: 5f 64 69 73 63 6f 6e 6e 65 63 74 28 76 6f 69 64 _disconnect(void 51c0: 29 20 7b 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f ) {..LONG scard_ 51d0: 72 65 6c 5f 63 6f 6e 74 65 78 74 5f 72 65 74 3b rel_context_ret; 51e0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 51f0: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 5200: 29 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f );...if (cackey_ 5210: 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 3d 20 4e pcsc_handle == N 5220: 55 4c 4c 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 ULL) {...return( 5230: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK 5240: 29 3b 0a 09 7d 0a 0a 09 73 63 61 72 64 5f 72 65 );..}...scard_re 5250: 6c 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20 3d 20 l_context_ret = 5260: 53 43 61 72 64 52 65 6c 65 61 73 65 43 6f 6e 74 SCardReleaseCont 5270: 65 78 74 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 ext(*cackey_pcsc 5280: 5f 68 61 6e 64 6c 65 29 3b 0a 0a 09 66 72 65 65 _handle);...free 5290: 28 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e (cackey_pcsc_han 52a0: 64 6c 65 29 3b 0a 09 63 61 63 6b 65 79 5f 70 63 dle);..cackey_pc 52b0: 73 63 5f 68 61 6e 64 6c 65 20 3d 20 4e 55 4c 4c sc_handle = NULL 52c0: 3b 0a 0a 09 69 66 20 28 73 63 61 72 64 5f 72 65 ;...if (scard_re 52d0: 6c 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20 21 3d l_context_ret != 52e0: 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 SCARD_S_SUCCESS 52f0: 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 43 41 43 ) {...return(CAC 5300: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 5310: 49 43 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e IC);..}...return 5320: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f (CACKEY_PCSC_S_O 5330: 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e K);.}../*. * SYN 5340: 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 POSIS. * cac 5350: 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 63 key_ret cackey_c 5360: 6f 6e 6e 65 63 74 5f 63 61 72 64 28 73 74 72 75 onnect_card(stru 5370: 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a ct cackey_slot * 5380: 73 6c 6f 74 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 slot);. *. * ARG 5390: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 63 61 UMENTS. * ca 53a0: 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a ckey_slot *slot. 53b0: 20 2a 20 20 20 20 20 20 20 20 20 53 6c 6f 74 20 * Slot 53c0: 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 to send commands 53d0: 20 74 6f 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e to. *. * RETURN 53e0: 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 43 41 VALUE. * CA 53f0: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 CKEY_PCSC_S_OK 5400: 20 20 20 20 20 20 20 4f 6e 20 73 75 63 63 65 73 On succes 5410: 73 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 5f s. * CACKEY_ 5420: 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 20 20 PCSC_E_GENERIC 5430: 20 20 4f 6e 20 65 72 72 6f 72 0a 20 2a 0a 20 2a On error. *. * 5440: 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 4e 6f NOTES. * No 5450: 6e 65 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 ne. *. */.static 5460: 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b cackey_ret cack 5470: 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 72 64 28 ey_connect_card( 5480: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl 5490: 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a 09 63 61 63 ot *slot) {..cac 54a0: 6b 65 79 5f 72 65 74 20 70 63 73 63 5f 63 6f 6e key_ret pcsc_con 54b0: 6e 65 63 74 5f 72 65 74 3b 0a 09 44 57 4f 52 44 nect_ret;..DWORD 54c0: 20 70 72 6f 74 6f 63 6f 6c 3b 0a 09 4c 4f 4e 47 protocol;..LONG 54d0: 20 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 3b scard_conn_ret; 54e0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 54f0: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 5500: 29 3b 0a 0a 09 69 66 20 28 21 73 6c 6f 74 29 20 );...if (!slot) 5510: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 5520: 5f 50 52 49 4e 54 46 28 22 49 6e 76 61 6c 69 64 _PRINTF("Invalid 5530: 20 73 6c 6f 74 20 73 70 65 63 69 66 69 65 64 2c slot specified, 5540: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 returning in fa 5550: 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 ilure");....retu 5560: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 5570: 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 _GENERIC);..}... 5580: 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 pcsc_connect_ret 5590: 20 3d 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 63 = cackey_pcsc_c 55a0: 6f 6e 6e 65 63 74 28 29 3b 0a 09 69 66 20 28 70 onnect();..if (p 55b0: 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 csc_connect_ret 55c0: 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 != CACKEY_PCSC_S 55d0: 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f _OK) {...CACKEY_ 55e0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 6f DEBUG_PRINTF("Co 55f0: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 50 43 2f 53 nnection to PC/S 5600: 43 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e C failed, return 5610: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 5620: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b ;....return(CACK 5630: 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 EY_PCSC_E_GENERI 5640: 43 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 43 6f 6e 6e C);..}.../* Conn 5650: 65 63 74 20 74 6f 20 72 65 61 64 65 72 2c 20 69 ect to reader, i 5660: 66 20 6e 65 65 64 65 64 20 2a 2f 0a 09 69 66 20 f needed */..if 5670: 28 21 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 (!slot->pcsc_car 5680: 64 5f 63 6f 6e 6e 65 63 74 65 64 29 20 7b 0a 09 d_connected) {.. 5690: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 56a0: 49 4e 54 46 28 22 53 43 61 72 64 43 6f 6e 6e 65 INTF("SCardConne 56b0: 63 74 28 25 73 29 20 63 61 6c 6c 65 64 22 2c 20 ct(%s) called", 56c0: 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 slot->pcsc_reade 56d0: 72 29 3b 0a 09 09 73 63 61 72 64 5f 63 6f 6e 6e r);...scard_conn 56e0: 5f 72 65 74 20 3d 20 53 43 61 72 64 43 6f 6e 6e _ret = SCardConn 56f0: 65 63 74 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 ect(*cackey_pcsc 5700: 5f 68 61 6e 64 6c 65 2c 20 73 6c 6f 74 2d 3e 70 _handle, slot->p 5710: 63 73 63 5f 72 65 61 64 65 72 2c 20 53 43 41 52 csc_reader, SCAR 5720: 44 5f 53 48 41 52 45 5f 53 48 41 52 45 44 2c 20 D_SHARE_SHARED, 5730: 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 SCARD_PROTOCOL_T 5740: 30 2c 20 26 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 0, &slot->pcsc_c 5750: 61 72 64 2c 20 26 70 72 6f 74 6f 63 6f 6c 29 3b ard, &protocol); 5760: 0a 0a 09 09 69 66 20 28 73 63 61 72 64 5f 63 6f ....if (scard_co 5770: 6e 6e 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f nn_ret != SCARD_ 5780: 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 S_SUCCESS) {.... 5790: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 57a0: 4e 54 46 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 NTF("Connection 57b0: 74 6f 20 63 61 72 64 20 66 61 69 6c 65 64 2c 20 to card failed, 57c0: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai 57d0: 6c 75 72 65 20 28 53 43 61 72 64 43 6f 6e 6e 65 lure (SCardConne 57e0: 63 74 28 29 20 3d 20 25 73 2f 25 6c 69 29 22 2c ct() = %s/%li)", 57f0: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 CACKEY_DEBUG_FU 5800: 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 NC_SCARDERR_TO_S 5810: 54 52 28 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 TR(scard_conn_re 5820: 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 t), (long) scard 5830: 5f 63 6f 6e 6e 5f 72 65 74 29 3b 0a 0a 09 09 09 _conn_ret);..... 5840: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 5850: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 5860: 09 7d 0a 0a 09 09 73 6c 6f 74 2d 3e 70 63 73 63 .}....slot->pcsc 5870: 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 _card_connected 5880: 3d 20 31 3b 0a 09 09 73 6c 6f 74 2d 3e 74 72 61 = 1;...slot->tra 5890: 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3d nsaction_depth = 58a0: 20 30 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 0;..}...return( 58b0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK 58c0: 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 );.}../*. * SYNP 58d0: 4f 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b OSIS. * cack 58e0: 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 62 65 ey_ret cackey_be 58f0: 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 gin_transaction( 5900: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl 5910: 6f 74 20 2a 73 6c 6f 74 29 3b 0a 20 2a 0a 20 2a ot *slot);. *. * 5920: 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 ARGUMENTS. * 5930: 20 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 cackey_slot *s 5940: 6c 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 53 lot. * S 5950: 6c 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d 6d lot to send comm 5960: 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 52 45 ands to. *. * RE 5970: 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 TURN VALUE. * 5980: 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f CACKEY_PCSC_S_ 5990: 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e 20 73 75 OK On su 59a0: 63 63 65 73 73 0a 20 2a 20 20 20 20 20 43 41 43 ccess. * CAC 59b0: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 59c0: 49 43 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 IC On error. 59d0: 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 *. * NOTES. * 59e0: 20 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f The transactio 59f0: 6e 20 73 68 6f 75 6c 64 20 62 65 20 74 65 72 6d n should be term 5a00: 69 6e 61 74 65 64 20 75 73 69 6e 67 20 22 63 61 inated using "ca 5a10: 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 ckey_end_transac 5a20: 74 69 6f 6e 22 0a 20 2a 0a 20 2a 2f 0a 73 74 61 tion". *. */.sta 5a30: 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 63 tic cackey_ret c 5a40: 61 63 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e ackey_begin_tran 5a50: 73 61 63 74 69 6f 6e 28 73 74 72 75 63 74 20 63 saction(struct c 5a60: 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 ackey_slot *slot 5a70: 29 20 7b 0a 09 63 61 63 6b 65 79 5f 72 65 74 20 ) {..cackey_ret 5a80: 63 61 63 6b 65 79 5f 63 6f 6e 6e 5f 72 65 74 3b cackey_conn_ret; 5a90: 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f 74 72 61 ..LONG scard_tra 5aa0: 6e 73 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 ns_ret;...CACKEY 5ab0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 5ac0: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 63 61 63 6b alled.");...cack 5ad0: 65 79 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 63 61 ey_conn_ret = ca 5ae0: 63 6b 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 72 ckey_connect_car 5af0: 64 28 73 6c 6f 74 29 3b 0a 09 69 66 20 28 63 61 d(slot);..if (ca 5b00: 63 6b 65 79 5f 63 6f 6e 6e 5f 72 65 74 20 21 3d ckey_conn_ret != 5b10: 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f CACKEY_PCSC_S_O 5b20: 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 K) {...CACKEY_DE 5b30: 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 BUG_PRINTF("Unab 5b40: 6c 65 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 6f le to connect to 5b50: 20 63 61 72 64 2c 20 72 65 74 75 72 6e 69 6e 67 card, returning 5b60: 20 69 6e 20 65 72 72 6f 72 22 29 3b 0a 0a 09 09 in error");.... 5b70: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 5b80: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 5b90: 7d 0a 0a 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 }...slot->transa 5ba0: 63 74 69 6f 6e 5f 64 65 70 74 68 2b 2b 3b 0a 0a ction_depth++;.. 5bb0: 09 69 66 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 .if (slot->trans 5bc0: 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3e 20 31 action_depth > 1 5bd0: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 5be0: 55 47 5f 50 52 49 4e 54 46 28 22 41 6c 72 65 61 UG_PRINTF("Alrea 5bf0: 64 79 20 69 6e 20 61 20 74 72 61 6e 73 61 63 74 dy in a transact 5c00: 69 6f 6e 2c 20 70 65 72 66 6f 72 6d 69 6e 67 20 ion, performing 5c10: 6e 6f 20 61 63 74 69 6f 6e 20 28 6e 65 77 20 64 no action (new d 5c20: 65 70 74 68 20 3d 20 25 69 29 22 2c 20 73 6c 6f epth = %i)", slo 5c30: 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 t->transaction_d 5c40: 65 70 74 68 29 3b 0a 0a 09 09 72 65 74 75 72 6e epth);....return 5c50: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f (CACKEY_PCSC_S_O 5c60: 4b 29 3b 0a 09 7d 0a 0a 09 73 63 61 72 64 5f 74 K);..}...scard_t 5c70: 72 61 6e 73 5f 72 65 74 20 3d 20 53 43 61 72 64 rans_ret = SCard 5c80: 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e BeginTransaction 5c90: 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 (slot->pcsc_card 5ca0: 29 3b 0a 09 69 66 20 28 73 63 61 72 64 5f 74 72 );..if (scard_tr 5cb0: 61 6e 73 5f 72 65 74 20 21 3d 20 53 43 41 52 44 ans_ret != SCARD 5cc0: 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 _S_SUCCESS) {... 5cd0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 5ce0: 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 62 NTF("Unable to b 5cf0: 65 67 69 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e egin transaction 5d00: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 65 , returning in e 5d10: 72 72 6f 72 22 29 3b 0a 0a 09 09 72 65 74 75 72 rror");....retur 5d20: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f n(CACKEY_PCSC_E_ 5d30: 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 43 GENERIC);..}...C 5d40: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 5d50: 54 46 28 22 53 75 63 65 73 73 66 75 6c 6c 79 20 TF("Sucessfully 5d60: 62 65 67 61 6e 20 74 72 61 6e 73 61 63 74 69 6f began transactio 5d70: 6e 20 6f 6e 20 73 6c 6f 74 20 28 25 73 29 22 2c n on slot (%s)", 5d80: 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 64 slot->pcsc_read 5d90: 65 72 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 41 er);...return(CA 5da0: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b CKEY_PCSC_S_OK); 5db0: 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 .}../*. * SYNPOS 5dc0: 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 79 IS. * cackey 5dd0: 5f 72 65 74 20 63 61 63 6b 65 79 5f 65 6e 64 5f _ret cackey_end_ 5de0: 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 74 72 75 transaction(stru 5df0: 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a ct cackey_slot * 5e00: 73 6c 6f 74 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 slot);. *. * ARG 5e10: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 63 61 UMENTS. * ca 5e20: 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a ckey_slot *slot. 5e30: 20 2a 20 20 20 20 20 20 20 20 20 53 6c 6f 74 20 * Slot 5e40: 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 to send commands 5e50: 20 74 6f 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e to. *. * RETURN 5e60: 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 43 41 VALUE. * CA 5e70: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 CKEY_PCSC_S_OK 5e80: 20 20 20 20 20 20 20 4f 6e 20 73 75 63 63 65 73 On succes 5e90: 73 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 5f s. * CACKEY_ 5ea0: 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 20 20 PCSC_E_GENERIC 5eb0: 20 20 4f 6e 20 65 72 72 6f 72 0a 20 2a 0a 20 2a On error. *. * 5ec0: 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 54 68 NOTES. * Th 5ed0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 71 75 is function requ 5ee0: 69 72 65 73 20 22 63 61 63 6b 65 79 5f 62 65 67 ires "cackey_beg 5ef0: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 22 20 in_transaction" 5f00: 74 6f 20 62 65 20 63 61 6c 6c 65 64 20 66 69 72 to be called fir 5f10: 73 74 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 st. *. */.static 5f20: 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b cackey_ret cack 5f30: 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 ey_end_transacti 5f40: 6f 6e 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 on(struct cackey 5f50: 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a 09 _slot *slot) {.. 5f60: 4c 4f 4e 47 20 73 63 61 72 64 5f 74 72 61 6e 73 LONG scard_trans 5f70: 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 _ret;...CACKEY_D 5f80: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 5f90: 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 73 led.");...if (!s 5fa0: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f 63 lot->pcsc_card_c 5fb0: 6f 6e 6e 65 63 74 65 64 29 20 7b 0a 09 09 43 41 onnected) {...CA 5fc0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 5fd0: 46 28 22 43 61 72 64 20 69 73 20 6e 6f 74 20 63 F("Card is not c 5fe0: 6f 6e 6e 65 63 74 65 64 2c 20 75 6e 61 62 6c 65 onnected, unable 5ff0: 20 74 6f 20 65 6e 64 20 74 72 61 6e 73 61 63 74 to end transact 6000: 69 6f 6e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ion");....return 6010: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 (CACKEY_PCSC_E_G 6020: 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 69 66 ENERIC);..}...if 6030: 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 (slot->transact 6040: 69 6f 6e 5f 64 65 70 74 68 20 3d 3d 20 30 29 20 ion_depth == 0) 6050: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 6060: 5f 50 52 49 4e 54 46 28 22 54 65 72 6d 69 6e 61 _PRINTF("Termina 6070: 74 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69 ting a transacti 6080: 6f 6e 20 74 68 61 74 20 68 61 73 20 6e 6f 74 20 on that has not 6090: 62 65 67 75 6e 21 22 29 3b 0a 0a 09 09 72 65 74 begun!");....ret 60a0: 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f urn(CACKEY_PCSC_ 60b0: 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a E_GENERIC);..}.. 60c0: 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 .slot->transacti 60d0: 6f 6e 5f 64 65 70 74 68 2d 2d 3b 0a 0a 09 69 66 on_depth--;...if 60e0: 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 (slot->transact 60f0: 69 6f 6e 5f 64 65 70 74 68 20 3e 20 30 29 20 7b ion_depth > 0) { 6100: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 6110: 50 52 49 4e 54 46 28 22 54 72 61 6e 73 61 63 74 PRINTF("Transact 6120: 69 6f 6e 73 20 73 74 69 6c 6c 20 69 6e 20 70 72 ions still in pr 6130: 6f 67 72 65 73 73 2c 20 6e 6f 74 20 74 65 72 6d ogress, not term 6140: 69 6e 61 74 69 6e 67 20 6f 6e 2d 63 61 72 64 20 inating on-card 6150: 54 72 61 6e 73 61 63 74 69 6f 6e 20 28 63 75 72 Transaction (cur 6160: 72 65 6e 74 20 64 65 70 74 68 20 3d 20 25 69 29 rent depth = %i) 6170: 22 2c 20 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 ", slot->transac 6180: 74 69 6f 6e 5f 64 65 70 74 68 29 3b 0a 0a 09 09 tion_depth);.... 6190: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 61a0: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 61b0: 7d 0a 0a 09 73 63 61 72 64 5f 74 72 61 6e 73 5f }...scard_trans_ 61c0: 72 65 74 20 3d 20 53 43 61 72 64 45 6e 64 54 72 ret = SCardEndTr 61d0: 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 2d 3e ansaction(slot-> 61e0: 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 pcsc_card, SCARD 61f0: 5f 4c 45 41 56 45 5f 43 41 52 44 29 3b 0a 09 69 _LEAVE_CARD);..i 6200: 66 20 28 73 63 61 72 64 5f 74 72 61 6e 73 5f 72 f (scard_trans_r 6210: 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 et != SCARD_S_SU 6220: 43 43 45 53 53 29 20 7b 0a 09 09 43 41 43 4b 45 CCESS) {...CACKE 6230: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 6240: 55 6e 61 62 6c 65 20 74 6f 20 65 6e 64 20 74 72 Unable to end tr 6250: 61 6e 73 61 63 74 69 6f 6e 2c 20 72 65 74 75 72 ansaction, retur 6260: 6e 69 6e 67 20 69 6e 20 65 72 72 6f 72 22 29 3b ning in error"); 6270: 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 ....return(CACKE 6280: 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 Y_PCSC_E_GENERIC 6290: 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 62a0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 63 EBUG_PRINTF("Suc 62b0: 65 73 73 66 75 6c 6c 79 20 74 65 72 6d 69 6e 61 essfully termina 62c0: 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 ted transaction 62d0: 6f 6e 20 73 6c 6f 74 20 28 25 73 29 22 2c 20 73 on slot (%s)", s 62e0: 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 72 lot->pcsc_reader 62f0: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b );...return(CACK 6300: 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 7d EY_PCSC_S_OK);.} 6310: 0a 0a 2f 2a 20 41 50 44 55 20 52 65 6c 61 74 65 ../* APDU Relate 6320: 64 20 46 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 2f d Functions */./ 6330: 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a *. * SYNPOSIS. * 6340: 20 20 20 20 20 63 61 63 6b 65 79 5f 72 65 74 20 cackey_ret 6350: 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 cackey_send_apdu 6360: 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 (struct cackey_s 6370: 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 lot *slot, unsig 6380: 6e 65 64 20 63 68 61 72 20 63 6c 61 73 73 2c 20 ned char class, 6390: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 69 6e unsigned char in 63a0: 73 74 72 75 63 74 69 6f 6e 2c 20 75 6e 73 69 67 struction, unsig 63b0: 6e 65 64 20 63 68 61 72 20 70 31 2c 20 75 6e 73 ned char p1, uns 63c0: 69 67 6e 65 64 20 63 68 61 72 20 70 32 2c 20 75 igned char p2, u 63d0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c 63 2c nsigned char lc, 63e0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a unsigned char * 63f0: 64 61 74 61 2c 20 75 6e 73 69 67 6e 65 64 20 63 data, unsigned c 6400: 68 61 72 20 6c 65 2c 20 75 69 6e 74 31 36 5f 74 har le, uint16_t 6410: 20 2a 72 65 73 70 63 6f 64 65 2c 20 75 6e 73 69 *respcode, unsi 6420: 67 6e 65 64 20 63 68 61 72 20 2a 72 65 73 70 64 gned char *respd 6430: 61 74 61 2c 20 73 69 7a 65 5f 74 20 2a 72 65 73 ata, size_t *res 6440: 70 64 61 74 61 5f 6c 65 6e 29 3b 0a 20 2a 0a 20 pdata_len);. *. 6450: 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 * ARGUMENTS. * 6460: 20 20 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a cackey_slot * 6470: 73 6c 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 slot. * 6480: 53 6c 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d Slot to send com 6490: 6d 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 20 mands to. *. * 64a0: 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 unsigned char 64b0: 20 63 6c 61 73 73 0a 20 2a 20 20 20 20 20 20 20 class. * 64c0: 20 20 41 50 44 55 20 43 6c 61 73 73 20 28 47 53 APDU Class (GS 64d0: 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 31 CIS_CLASS_ISO781 64e0: 36 20 6f 72 20 47 53 43 49 53 5f 43 4c 41 53 53 6 or GSCIS_CLASS 64f0: 5f 47 4c 4f 42 41 4c 5f 50 4c 41 54 46 4f 52 4d _GLOBAL_PLATFORM 6500: 0a 20 2a 20 20 20 20 20 20 20 20 20 75 73 75 61 . * usua 6510: 6c 6c 79 29 2c 20 28 43 4c 41 29 0a 20 2a 0a 20 lly), (CLA). *. 6520: 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 * unsigned c 6530: 68 61 72 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a har instruction. 6540: 20 2a 20 20 20 20 20 20 20 20 20 41 50 44 55 20 * APDU 6550: 49 6e 73 74 72 75 63 74 69 6f 6e 20 28 49 4e 53 Instruction (INS 6560: 29 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e 73 69 ). *. * unsi 6570: 67 6e 65 64 20 63 68 61 72 20 70 31 0a 20 2a 20 gned char p1. * 6580: 20 20 20 20 20 20 20 20 41 50 44 55 20 50 61 72 APDU Par 6590: 61 6d 65 74 65 72 20 31 20 28 50 31 29 0a 20 2a ameter 1 (P1). * 65a0: 0a 20 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 64 . * unsigned 65b0: 20 63 68 61 72 20 70 32 0a 20 2a 20 20 20 20 20 char p2. * 65c0: 20 20 20 20 41 50 44 55 20 50 61 72 61 6d 65 74 APDU Paramet 65d0: 65 72 20 32 20 28 50 32 29 0a 20 2a 0a 20 2a 20 er 2 (P2). *. * 65e0: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 unsigned cha 65f0: 72 20 6c 63 0a 20 2a 20 20 20 20 20 20 20 20 20 r lc. * 6600: 41 50 44 55 20 4c 65 6e 67 74 68 20 6f 66 20 43 APDU Length of C 6610: 6f 6e 74 65 6e 74 20 28 4c 63 29 20 2d 2d 20 74 ontent (Lc) -- t 6620: 68 69 73 20 69 73 20 74 68 65 20 6c 65 6e 67 74 his is the lengt 6630: 68 20 6f 66 20 22 64 61 74 61 22 0a 20 2a 20 20 h of "data". * 6640: 20 20 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 parameter 6650: 2e 20 20 49 66 20 22 64 61 74 61 22 20 69 73 20 . If "data" is 6660: 73 70 65 63 69 66 69 65 64 20 61 73 20 4e 55 4c specified as NUL 6670: 4c 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 L, this paramete 6680: 72 20 77 69 6c 6c 0a 20 2a 20 20 20 20 20 20 20 r will. * 6690: 20 20 62 65 20 69 67 6e 6f 72 65 64 2e 0a 20 2a be ignored.. * 66a0: 0a 20 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 64 . * unsigned 66b0: 20 63 68 61 72 20 2a 64 61 74 61 0a 20 2a 20 20 char *data. * 66c0: 20 20 20 20 20 20 20 50 6f 69 6e 74 65 72 20 74 Pointer t 66d0: 6f 20 62 75 66 66 65 72 20 74 6f 20 73 65 6e 64 o buffer to send 66e0: 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 62 65 20 . It should be 66f0: 22 4c 63 22 20 62 79 74 65 73 20 6c 6f 6e 67 2e "Lc" bytes long. 6700: 20 20 49 66 0a 20 2a 20 20 20 20 20 20 20 20 20 If. * 6710: 73 70 65 63 69 66 69 65 64 20 61 73 20 4e 55 4c specified as NUL 6720: 4c 2c 20 22 4c 63 22 20 77 69 6c 6c 20 6e 6f 74 L, "Lc" will not 6730: 20 62 65 20 73 65 6e 74 2c 20 61 6e 64 20 74 68 be sent, and th 6740: 69 73 20 62 75 66 66 65 72 20 77 69 6c 6c 20 62 is buffer will b 6750: 65 0a 20 2a 20 20 20 20 20 20 20 20 20 69 67 6e e. * ign 6760: 6f 72 65 64 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 ored.. *. * 6770: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c 65 unsigned char le 6780: 0a 20 2a 20 20 20 20 20 20 20 20 20 41 50 44 55 . * APDU 6790: 20 4c 65 6e 67 74 68 20 6f 66 20 45 78 70 65 63 Length of Expec 67a0: 74 61 74 69 6f 6e 20 28 4c 65 29 20 2d 2d 20 74 tation (Le) -- t 67b0: 68 69 73 20 69 73 20 74 68 65 20 6c 65 6e 67 74 his is the lengt 67c0: 68 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 20 h of the. * 67d0: 20 20 20 20 65 78 70 65 63 74 65 64 20 72 65 70 expected rep 67e0: 6c 79 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 ly. If this is 67f0: 73 70 65 63 69 66 69 65 64 20 61 73 20 30 20 74 specified as 0 t 6800: 68 65 6e 20 69 74 20 77 69 6c 6c 20 6e 6f 74 0a hen it will not. 6810: 20 2a 20 20 20 20 20 20 20 20 20 62 65 20 73 65 * be se 6820: 6e 74 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 75 69 nt.. *. * ui 6830: 6e 74 31 36 5f 74 20 2a 72 65 73 70 63 6f 64 65 nt16_t *respcode 6840: 0a 20 2a 20 20 20 20 20 20 20 20 20 5b 4f 55 54 . * [OUT 6850: 5d 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 74 6f ] Pointer to sto 6860: 72 61 67 65 20 6f 66 20 41 50 44 55 20 72 65 73 rage of APDU res 6870: 70 6f 6e 73 65 20 63 6f 64 65 2e 20 20 49 66 20 ponse code. If 6880: 74 68 69 73 20 69 73 0a 20 2a 20 20 20 20 20 20 this is. * 6890: 20 20 20 73 70 65 63 69 66 69 65 64 20 61 73 20 specified as 68a0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 70 6f 6e NULL, the respon 68b0: 73 65 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 se code will be 68c0: 64 69 73 63 61 72 64 65 64 2e 0a 20 2a 0a 20 2a discarded.. *. * 68d0: 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 unsigned ch 68e0: 61 72 20 2a 72 65 73 70 64 61 74 61 0a 20 2a 20 ar *respdata. * 68f0: 20 20 20 20 20 20 20 20 5b 4f 55 54 5d 20 50 6f [OUT] Po 6900: 69 6e 74 65 72 20 74 6f 20 73 74 6f 72 61 67 65 inter to storage 6910: 20 6f 66 20 41 50 44 55 20 72 65 73 70 6f 6e 73 of APDU respons 6920: 65 20 64 61 74 61 2e 20 20 49 66 20 74 68 69 73 e data. If this 6930: 20 69 73 0a 20 2a 20 20 20 20 20 20 20 20 20 73 is. * s 6940: 70 65 63 69 66 69 65 64 20 61 73 20 4e 55 4c 4c pecified as NULL 6950: 2c 20 74 68 65 20 72 65 73 70 6f 6e 73 65 20 64 , the response d 6960: 61 74 61 20 77 69 6c 6c 20 62 65 20 64 69 73 63 ata will be disc 6970: 61 72 64 65 64 2e 20 20 49 66 0a 20 2a 20 20 20 arded. If. * 6980: 20 20 20 20 20 20 74 68 65 20 22 72 65 73 70 64 the "respd 6990: 61 74 61 5f 6c 65 6e 22 20 70 61 72 61 6d 65 74 ata_len" paramet 69a0: 65 72 20 69 73 20 73 70 65 63 69 66 69 65 64 20 er is specified 69b0: 61 73 20 4e 55 4c 4c 2c 20 74 68 69 73 20 62 75 as NULL, this bu 69c0: 66 66 65 72 0a 20 2a 20 20 20 20 20 20 20 20 20 ffer. * 69d0: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 75 70 64 61 will not be upda 69e0: 74 65 64 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 73 ted.. *. * s 69f0: 69 7a 65 5f 74 20 2a 72 65 73 70 64 61 74 61 5f ize_t *respdata_ 6a00: 6c 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 5b len. * [ 6a10: 49 4e 2c 20 4f 55 54 5d 20 50 6f 69 6e 74 65 72 IN, OUT] Pointer 6a20: 20 69 6e 69 74 69 61 6c 69 6e 67 20 63 6f 6e 74 initialing cont 6a30: 61 69 6e 69 6e 67 20 74 68 65 20 73 69 7a 65 20 aining the size 6a40: 6f 66 20 74 68 65 20 22 72 65 73 70 64 61 74 61 of the "respdata 6a50: 22 0a 20 2a 20 20 20 20 20 20 20 20 20 62 75 66 ". * buf 6a60: 66 65 72 2e 20 20 42 65 66 6f 72 65 20 72 65 74 fer. Before ret 6a70: 75 72 6e 69 6e 67 2c 20 74 68 65 20 70 6f 69 6e urning, the poin 6a80: 74 65 64 20 74 6f 20 76 61 6c 75 65 20 69 73 20 ted to value is 6a90: 75 70 64 61 74 65 64 20 74 6f 20 74 68 65 0a 20 updated to the. 6aa0: 2a 20 20 20 20 20 20 20 20 20 6e 75 6d 62 65 72 * number 6ab0: 20 6f 66 20 62 79 74 65 73 20 77 72 69 74 74 65 of bytes writte 6ac0: 6e 20 74 6f 20 74 68 65 20 62 75 66 66 65 72 2e n to the buffer. 6ad0: 20 20 49 66 20 74 68 69 73 20 69 73 20 73 70 65 If this is spe 6ae0: 63 69 66 69 65 64 20 61 73 0a 20 2a 20 20 20 20 cified as. * 6af0: 20 20 20 20 20 4e 55 4c 4c 2c 20 69 74 20 77 69 NULL, it wi 6b00: 6c 6c 20 6e 6f 74 20 62 65 20 75 70 64 61 74 65 ll not be update 6b10: 64 2c 20 61 6e 64 20 22 72 65 73 70 64 61 74 61 d, and "respdata 6b20: 22 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 " will be ignore 6b30: 64 20 63 61 75 73 69 6e 67 0a 20 2a 20 20 20 20 d causing. * 6b40: 20 20 20 20 20 74 68 65 20 72 65 73 70 6f 6e 73 the respons 6b50: 65 20 64 61 74 61 20 74 6f 20 62 65 20 64 69 73 e data to be dis 6b60: 63 61 72 64 65 64 2e 0a 20 2a 0a 20 2a 20 52 45 carded.. *. * RE 6b70: 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 TURN VALUE. * 6b80: 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f CACKEY_PCSC_S_ 6b90: 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e 20 73 75 OK On su 6ba0: 63 63 65 73 73 0a 20 2a 20 20 20 20 20 43 41 43 ccess. * CAC 6bb0: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 6bc0: 49 43 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 IC On error. 6bd0: 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 *. * NOTES. * 6be0: 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 This function 6bf0: 77 69 6c 6c 20 63 6f 6e 6e 65 63 74 20 74 6f 20 will connect to 6c00: 74 68 65 20 50 43 2f 53 43 20 43 6f 6e 6e 65 63 the PC/SC Connec 6c10: 74 69 6f 6e 20 4d 61 6e 61 67 65 72 20 76 69 61 tion Manager via 6c20: 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 70 . * cackey_p 6c30: 63 73 63 5f 63 6f 6e 6e 65 63 74 28 29 20 69 66 csc_connect() if 6c40: 20 6e 65 65 64 65 64 2e 0a 20 2a 0a 20 2a 20 20 needed.. *. * 6c50: 20 20 20 49 74 20 77 69 6c 6c 20 63 6f 6e 6e 65 It will conne 6c60: 63 74 20 74 6f 20 74 68 65 20 63 61 72 64 20 69 ct to the card i 6c70: 6e 20 74 68 65 20 72 65 61 64 65 72 20 61 74 74 n the reader att 6c80: 61 63 68 65 64 20 74 6f 20 74 68 65 20 73 6c 6f ached to the slo 6c90: 74 0a 20 2a 20 20 20 20 20 73 70 65 63 69 66 69 t. * specifi 6ca0: 65 64 2e 20 20 49 74 20 77 69 6c 6c 20 72 65 63 ed. It will rec 6cb0: 6f 6e 6e 65 63 74 20 74 6f 20 74 68 65 20 63 61 onnect to the ca 6cc0: 72 64 20 69 66 20 74 68 65 20 63 6f 6e 6e 65 63 rd if the connec 6cd0: 74 69 6f 6e 0a 20 2a 20 20 20 20 20 67 6f 65 73 tion. * goes 6ce0: 20 61 77 61 79 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 away.. *. */.st 6cf0: 61 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 atic cackey_ret 6d00: 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 cackey_send_apdu 6d10: 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 (struct cackey_s 6d20: 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 lot *slot, unsig 6d30: 6e 65 64 20 63 68 61 72 20 63 6c 61 73 73 2c 20 ned char class, 6d40: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 69 6e unsigned char in 6d50: 73 74 72 75 63 74 69 6f 6e 2c 20 75 6e 73 69 67 struction, unsig 6d60: 6e 65 64 20 63 68 61 72 20 70 31 2c 20 75 6e 73 ned char p1, uns 6d70: 69 67 6e 65 64 20 63 68 61 72 20 70 32 2c 20 75 igned char p2, u 6d80: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c 63 2c nsigned char lc, 6d90: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a unsigned char * 6da0: 64 61 74 61 2c 20 75 6e 73 69 67 6e 65 64 20 63 data, unsigned c 6db0: 68 61 72 20 6c 65 2c 20 75 69 6e 74 31 36 5f 74 har le, uint16_t 6dc0: 20 2a 72 65 73 70 63 6f 64 65 2c 20 75 6e 73 69 *respcode, unsi 6dd0: 67 6e 65 64 20 63 68 61 72 20 2a 72 65 73 70 64 gned char *respd 6de0: 61 74 61 2c 20 73 69 7a 65 5f 74 20 2a 72 65 73 ata, size_t *res 6df0: 70 64 61 74 61 5f 6c 65 6e 29 20 7b 0a 09 75 69 pdata_len) {..ui 6e00: 6e 74 38 5f 74 20 6d 61 6a 6f 72 5f 72 63 2c 20 nt8_t major_rc, 6e10: 6d 69 6e 6f 72 5f 72 63 3b 0a 09 73 69 7a 65 5f minor_rc;..size_ 6e20: 74 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 2c t bytes_to_copy, 6e30: 20 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 tmp_respdata_le 6e40: 6e 3b 0a 09 44 57 4f 52 44 20 70 72 6f 74 6f 63 n;..DWORD protoc 6e50: 6f 6c 3b 0a 09 44 57 4f 52 44 20 78 6d 69 74 5f ol;..DWORD xmit_ 6e60: 6c 65 6e 2c 20 72 65 63 76 5f 6c 65 6e 3b 0a 09 len, recv_len;.. 6e70: 4c 4f 4e 47 20 73 63 61 72 64 5f 78 6d 69 74 5f LONG scard_xmit_ 6e80: 72 65 74 2c 20 73 63 61 72 64 5f 72 65 63 6f 6e ret, scard_recon 6e90: 6e 5f 72 65 74 3b 0a 09 42 59 54 45 20 78 6d 69 n_ret;..BYTE xmi 6ea0: 74 5f 62 75 66 5b 31 30 32 34 5d 2c 20 72 65 63 t_buf[1024], rec 6eb0: 76 5f 62 75 66 5b 31 30 32 34 5d 3b 0a 09 69 6e v_buf[1024];..in 6ec0: 74 20 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 t pcsc_connect_r 6ed0: 65 74 2c 20 70 63 73 63 5f 67 65 74 72 65 73 70 et, pcsc_getresp 6ee0: 5f 72 65 74 3b 0a 09 69 6e 74 20 69 64 78 3b 0a _ret;..int idx;. 6ef0: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 6f00: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 6f10: 3b 0a 0a 09 69 66 20 28 21 73 6c 6f 74 29 20 7b ;...if (!slot) { 6f20: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 6f30: 50 52 49 4e 54 46 28 22 49 6e 76 61 6c 69 64 20 PRINTF("Invalid 6f40: 73 6c 6f 74 20 73 70 65 63 69 66 69 65 64 2e 22 slot specified." 6f50: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 );....return(CAC 6f60: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 6f70: 49 43 29 3b 0a 09 7d 0a 0a 09 70 63 73 63 5f 63 IC);..}...pcsc_c 6f80: 6f 6e 6e 65 63 74 5f 72 65 74 20 3d 20 63 61 63 onnect_ret = cac 6f90: 6b 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 72 64 key_connect_card 6fa0: 28 73 6c 6f 74 29 3b 0a 09 69 66 20 28 70 63 73 (slot);..if (pcs 6fb0: 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 21 3d c_connect_ret != 6fc0: 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f CACKEY_PCSC_S_O 6fd0: 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 K) {...CACKEY_DE 6fe0: 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 BUG_PRINTF("Unab 6ff0: 6c 65 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 6f le to connect to 7000: 20 63 61 72 64 2c 20 72 65 74 75 72 6e 69 6e 67 card, returning 7010: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. 7020: 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f ..return(CACKEY_ 7030: 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b PCSC_E_GENERIC); 7040: 0a 09 7d 0a 0a 09 2f 2a 20 54 72 61 6e 73 6d 69 ..}.../* Transmi 7050: 74 20 2a 2f 0a 09 78 6d 69 74 5f 6c 65 6e 20 3d t */..xmit_len = 7060: 20 30 3b 0a 09 78 6d 69 74 5f 62 75 66 5b 78 6d 0;..xmit_buf[xm 7070: 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 63 6c 61 73 it_len++] = clas 7080: 73 3b 0a 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 s;..xmit_buf[xmi 7090: 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 69 6e 73 74 72 t_len++] = instr 70a0: 75 63 74 69 6f 6e 3b 0a 09 78 6d 69 74 5f 62 75 uction;..xmit_bu 70b0: 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 f[xmit_len++] = 70c0: 70 31 3b 0a 09 78 6d 69 74 5f 62 75 66 5b 78 6d p1;..xmit_buf[xm 70d0: 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 70 32 3b 0a it_len++] = p2;. 70e0: 09 69 66 20 28 64 61 74 61 29 20 7b 0a 09 09 78 .if (data) {...x 70f0: 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e mit_buf[xmit_len 7100: 2b 2b 5d 20 3d 20 6c 63 3b 0a 09 09 66 6f 72 20 ++] = lc;...for 7110: 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 (idx = 0; idx < 7120: 6c 63 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 09 lc; idx++) {.... 7130: 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 xmit_buf[xmit_le 7140: 6e 2b 2b 5d 20 3d 20 64 61 74 61 5b 69 64 78 5d n++] = data[idx] 7150: 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 6c ;...}..}...if (l 7160: 65 20 21 3d 20 30 78 30 30 29 20 7b 0a 09 09 78 e != 0x00) {...x 7170: 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e mit_buf[xmit_len 7180: 2b 2b 5d 20 3d 20 6c 65 3b 0a 09 7d 0a 0a 09 2f ++] = le;..}.../ 7190: 2a 20 42 65 67 69 6e 20 53 6d 61 72 74 63 61 72 * Begin Smartcar 71a0: 64 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f d Transaction */ 71b0: 0a 09 63 61 63 6b 65 79 5f 62 65 67 69 6e 5f 74 ..cackey_begin_t 71c0: 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 ransaction(slot) 71d0: 3b 0a 0a 09 69 66 20 28 63 6c 61 73 73 20 3d 3d ;...if (class == 71e0: 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f GSCIS_CLASS_ISO 71f0: 37 38 31 36 20 26 26 20 69 6e 73 74 72 75 63 74 7816 && instruct 7200: 69 6f 6e 20 3d 3d 20 47 53 43 49 53 5f 49 4e 53 ion == GSCIS_INS 7210: 54 52 5f 56 45 52 49 46 59 20 26 26 20 70 31 20 TR_VERIFY && p1 7220: 3d 3d 20 30 78 30 30 20 26 26 20 70 32 20 3d 3d == 0x00 && p2 == 7230: 20 30 78 30 30 29 20 7b 0a 09 09 43 41 43 4b 45 0x00) {...CACKE 7240: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 7250: 53 65 6e 64 69 6e 67 20 41 50 44 55 3a 20 3c 3c Sending APDU: << 7260: 63 65 6e 73 6f 72 65 64 3e 3e 22 29 3b 0a 09 7d censored>>");..} 7270: 20 65 6c 73 65 20 7b 0a 09 09 43 41 43 4b 45 59 else {...CACKEY 7280: 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 _DEBUG_PRINTBUF( 7290: 22 53 65 6e 64 69 6e 67 20 41 50 44 55 3a 22 2c "Sending APDU:", 72a0: 20 78 6d 69 74 5f 62 75 66 2c 20 78 6d 69 74 5f xmit_buf, xmit_ 72b0: 6c 65 6e 29 3b 0a 09 7d 0a 0a 09 72 65 63 76 5f len);..}...recv_ 72c0: 6c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 72 65 63 len = sizeof(rec 72d0: 76 5f 62 75 66 29 3b 0a 09 73 63 61 72 64 5f 78 v_buf);..scard_x 72e0: 6d 69 74 5f 72 65 74 20 3d 20 53 43 61 72 64 54 mit_ret = SCardT 72f0: 72 61 6e 73 6d 69 74 28 73 6c 6f 74 2d 3e 70 63 ransmit(slot->pc 7300: 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 50 sc_card, SCARD_P 7310: 43 49 5f 54 30 2c 20 78 6d 69 74 5f 62 75 66 2c CI_T0, xmit_buf, 7320: 20 78 6d 69 74 5f 6c 65 6e 2c 20 53 43 41 52 44 xmit_len, SCARD 7330: 5f 50 43 49 5f 54 31 2c 20 72 65 63 76 5f 62 75 _PCI_T1, recv_bu 7340: 66 2c 20 26 72 65 63 76 5f 6c 65 6e 29 3b 0a 09 f, &recv_len);.. 7350: 69 66 20 28 73 63 61 72 64 5f 78 6d 69 74 5f 72 if (scard_xmit_r 7360: 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 et != SCARD_S_SU 7370: 43 43 45 53 53 29 20 7b 0a 09 09 43 41 43 4b 45 CCESS) {...CACKE 7380: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 7390: 46 61 69 6c 65 64 20 74 6f 20 73 65 6e 64 20 41 Failed to send A 73a0: 50 44 55 20 74 6f 20 63 61 72 64 20 28 53 43 61 PDU to card (SCa 73b0: 72 64 54 72 61 6e 73 6d 69 74 28 29 20 3d 20 25 rdTransmit() = % 73c0: 73 2f 25 6c 78 29 22 2c 20 43 41 43 4b 45 59 5f s/%lx)", CACKEY_ 73d0: 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 DEBUG_FUNC_SCARD 73e0: 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 ERR_TO_STR(scard 73f0: 5f 78 6d 69 74 5f 72 65 74 29 2c 20 28 75 6e 73 _xmit_ret), (uns 7400: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 63 61 72 igned long) scar 7410: 64 5f 78 6d 69 74 5f 72 65 74 29 3b 0a 09 09 43 d_xmit_ret);...C 7420: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 7430: 54 46 28 22 4d 61 72 6b 69 6e 67 20 73 6c 6f 74 TF("Marking slot 7440: 20 61 73 20 68 61 76 69 6e 67 20 62 65 65 6e 20 as having been 7450: 72 65 73 65 74 22 29 3b 0a 0a 09 09 73 6c 6f 74 reset");....slot 7460: 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 ->transaction_de 7470: 70 74 68 20 3d 20 30 3b 0a 09 09 73 6c 6f 74 2d pth = 0;...slot- 7480: 3e 73 6c 6f 74 5f 72 65 73 65 74 20 3d 20 31 3b >slot_reset = 1; 7490: 0a 0a 09 09 69 66 20 28 73 63 61 72 64 5f 78 6d ....if (scard_xm 74a0: 69 74 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f it_ret == SCARD_ 74b0: 57 5f 52 45 53 45 54 5f 43 41 52 44 29 20 7b 0a W_RESET_CARD) {. 74c0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 74d0: 50 52 49 4e 54 46 28 22 52 65 73 65 74 20 72 65 PRINTF("Reset re 74e0: 71 75 69 72 65 64 2c 20 70 6c 65 61 73 65 20 68 quired, please h 74f0: 6f 6c 64 2e 2e 2e 22 29 3b 0a 0a 09 09 09 73 63 old...");.....sc 7500: 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 20 3d ard_reconn_ret = 7510: 20 53 43 61 72 64 52 65 63 6f 6e 6e 65 63 74 28 SCardReconnect( 7520: 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c slot->pcsc_card, 7530: 20 53 43 41 52 44 5f 53 48 41 52 45 5f 53 48 41 SCARD_SHARE_SHA 7540: 52 45 44 2c 20 53 43 41 52 44 5f 50 52 4f 54 4f RED, SCARD_PROTO 7550: 43 4f 4c 5f 54 30 2c 20 53 43 41 52 44 5f 52 45 COL_T0, SCARD_RE 7560: 53 45 54 5f 43 41 52 44 2c 20 26 70 72 6f 74 6f SET_CARD, &proto 7570: 63 6f 6c 29 3b 0a 09 09 09 69 66 20 28 73 63 61 col);....if (sca 7580: 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 20 3d 3d rd_reconn_ret == 7590: 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 SCARD_S_SUCCESS 75a0: 29 20 7b 0a 09 09 09 09 2f 2a 20 52 65 2d 65 73 ) {...../* Re-es 75b0: 74 61 62 6c 69 73 68 20 74 72 61 6e 73 61 63 74 tablish transact 75c0: 69 6f 6e 2c 20 69 66 20 69 74 20 77 61 73 20 70 ion, if it was p 75d0: 72 65 73 65 6e 74 20 2a 2f 0a 09 09 09 09 69 66 resent */.....if 75e0: 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 (slot->transact 75f0: 69 6f 6e 5f 64 65 70 74 68 20 3e 20 30 29 20 7b ion_depth > 0) { 7600: 0a 09 09 09 09 09 73 6c 6f 74 2d 3e 74 72 61 6e ......slot->tran 7610: 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 2d 2d 3b saction_depth--; 7620: 0a 09 09 09 09 09 63 61 63 6b 65 79 5f 62 65 67 ......cackey_beg 7630: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 in_transaction(s 7640: 6c 6f 74 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 lot);.....}..... 7650: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 7660: 49 4e 54 46 28 22 52 65 73 65 74 20 73 75 63 63 INTF("Reset succ 7670: 65 73 73 66 75 6c 2c 20 72 65 74 72 61 6e 73 6d essful, retransm 7680: 69 74 74 69 6e 67 22 29 3b 0a 09 09 09 09 73 63 itting");.....sc 7690: 61 72 64 5f 78 6d 69 74 5f 72 65 74 20 3d 20 53 ard_xmit_ret = S 76a0: 43 61 72 64 54 72 61 6e 73 6d 69 74 28 73 6c 6f CardTransmit(slo 76b0: 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 t->pcsc_card, SC 76c0: 41 52 44 5f 50 43 49 5f 54 30 2c 20 78 6d 69 74 ARD_PCI_T0, xmit 76d0: 5f 62 75 66 2c 20 78 6d 69 74 5f 6c 65 6e 2c 20 _buf, xmit_len, 76e0: 53 43 41 52 44 5f 50 43 49 5f 54 30 2c 20 72 65 SCARD_PCI_T0, re 76f0: 63 76 5f 62 75 66 2c 20 26 72 65 63 76 5f 6c 65 cv_buf, &recv_le 7700: 6e 29 3b 0a 0a 09 09 09 09 69 66 20 28 73 63 61 n);......if (sca 7710: 72 64 5f 78 6d 69 74 5f 72 65 74 20 21 3d 20 53 rd_xmit_ret != S 7720: 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 CARD_S_SUCCESS) 7730: 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {......CACKEY_DE 7740: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 72 BUG_PRINTF("Retr 7750: 61 6e 73 6d 69 74 20 66 61 69 6c 65 64 2c 20 72 ansmit failed, r 7760: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail 7770: 75 72 65 20 61 66 74 65 72 20 64 69 73 63 6f 6e ure after discon 7780: 6e 65 63 74 69 6e 67 20 74 68 65 20 63 61 72 64 necting the card 7790: 20 28 53 43 61 72 64 54 72 61 6e 73 6d 69 74 20 (SCardTransmit 77a0: 3d 20 25 73 2f 25 6c 69 29 22 2c 20 43 41 43 4b = %s/%li)", CACK 77b0: 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 EY_DEBUG_FUNC_SC 77c0: 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 ARDERR_TO_STR(sc 77d0: 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 2c 20 28 ard_xmit_ret), ( 77e0: 6c 6f 6e 67 29 20 73 63 61 72 64 5f 78 6d 69 74 long) scard_xmit 77f0: 5f 72 65 74 29 3b 0a 0a 09 09 09 09 09 53 43 61 _ret);.......SCa 7800: 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 73 6c 6f rdDisconnect(slo 7810: 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 t->pcsc_card, SC 7820: 41 52 44 5f 52 45 53 45 54 5f 43 41 52 44 29 3b ARD_RESET_CARD); 7830: 0a 09 09 09 09 09 73 6c 6f 74 2d 3e 70 63 73 63 ......slot->pcsc 7840: 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 _card_connected 7850: 3d 20 30 3b 0a 0a 09 09 09 09 09 2f 2a 20 45 6e = 0;......./* En 7860: 64 20 53 6d 61 72 74 63 61 72 64 20 54 72 61 6e d Smartcard Tran 7870: 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 09 09 09 saction */...... 7880: 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f slot->transactio 7890: 6e 5f 64 65 70 74 68 20 3d 20 31 3b 0a 09 09 09 n_depth = 1;.... 78a0: 09 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 ..cackey_end_tra 78b0: 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a nsaction(slot);. 78c0: 0a 09 09 09 09 09 72 65 74 75 72 6e 28 43 41 43 ......return(CAC 78d0: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 78e0: 49 43 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 20 IC);.....}....} 78f0: 65 6c 73 65 20 7b 0a 09 09 09 09 43 41 43 4b 45 else {.....CACKE 7900: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 7910: 44 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 63 61 Disconnecting ca 7920: 72 64 22 29 3b 0a 0a 09 09 09 09 53 43 61 72 64 rd");......SCard 7930: 44 69 73 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d Disconnect(slot- 7940: 3e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 52 >pcsc_card, SCAR 7950: 44 5f 52 45 53 45 54 5f 43 41 52 44 29 3b 0a 09 D_RESET_CARD);.. 7960: 09 09 09 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 ...slot->pcsc_ca 7970: 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 rd_connected = 0 7980: 3b 0a 0a 09 09 09 09 2f 2a 20 45 6e 64 20 53 6d ;....../* End Sm 7990: 61 72 74 63 61 72 64 20 54 72 61 6e 73 61 63 74 artcard Transact 79a0: 69 6f 6e 20 2a 2f 0a 09 09 09 09 73 6c 6f 74 2d ion */.....slot- 79b0: 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 70 >transaction_dep 79c0: 74 68 20 3d 20 31 3b 0a 09 09 09 09 63 61 63 6b th = 1;.....cack 79d0: 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 ey_end_transacti 79e0: 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 09 09 43 on(slot);......C 79f0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 7a00: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 6e TF("Returning in 7a10: 20 66 61 69 6c 75 72 65 22 29 3b 0a 09 09 09 09 failure");..... 7a20: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 7a30: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 7a40: 09 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 ..}...} else {.. 7a50: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 7a60: 52 49 4e 54 46 28 22 44 69 73 63 6f 6e 6e 65 63 RINTF("Disconnec 7a70: 74 69 6e 67 20 63 61 72 64 22 29 3b 0a 0a 09 09 ting card");.... 7a80: 09 53 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 .SCardDisconnect 7a90: 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 (slot->pcsc_card 7aa0: 2c 20 53 43 41 52 44 5f 52 45 53 45 54 5f 43 41 , SCARD_RESET_CA 7ab0: 52 44 29 3b 0a 09 09 09 73 6c 6f 74 2d 3e 70 63 RD);....slot->pc 7ac0: 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 sc_card_connecte 7ad0: 64 20 3d 20 30 3b 0a 0a 09 09 09 2f 2a 20 45 6e d = 0;...../* En 7ae0: 64 20 53 6d 61 72 74 63 61 72 64 20 54 72 61 6e d Smartcard Tran 7af0: 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 09 73 6c saction */....sl 7b00: 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f ot->transaction_ 7b10: 64 65 70 74 68 20 3d 20 31 3b 0a 09 09 09 63 61 depth = 1;....ca 7b20: 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 ckey_end_transac 7b30: 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 09 tion(slot);..... 7b40: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 7b50: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 NTF("Returning i 7b60: 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 09 09 09 n failure");.... 7b70: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 7b80: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 7b90: 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 .}..}...CACKEY_D 7ba0: 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 52 EBUG_PRINTBUF("R 7bb0: 65 74 75 72 6e 65 64 20 56 61 6c 75 65 3a 22 2c eturned Value:", 7bc0: 20 72 65 63 76 5f 62 75 66 2c 20 72 65 63 76 5f recv_buf, recv_ 7bd0: 6c 65 6e 29 3b 0a 0a 09 69 66 20 28 72 65 63 76 len);...if (recv 7be0: 5f 6c 65 6e 20 3c 20 32 29 20 7b 0a 09 09 2f 2a _len < 2) {.../* 7bf0: 20 4d 69 6e 69 6d 61 6c 20 72 65 73 70 6f 6e 73 Minimal respons 7c00: 65 20 6c 65 6e 67 74 68 20 69 73 20 32 20 62 79 e length is 2 by 7c10: 74 65 73 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 tes, returning i 7c20: 6e 20 66 61 69 6c 75 72 65 20 2a 2f 0a 09 09 43 n failure */...C 7c30: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 7c40: 54 46 28 22 52 65 73 70 6f 6e 73 65 20 74 6f 6f TF("Response too 7c50: 20 73 6d 61 6c 6c 2c 20 72 65 74 75 72 6e 69 6e small, returnin 7c60: 67 20 69 6e 20 66 61 69 6c 75 72 65 20 28 72 65 g in failure (re 7c70: 63 76 5f 6c 65 6e 20 3d 20 25 6c 75 29 22 2c 20 cv_len = %lu)", 7c80: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 7c90: 72 65 63 76 5f 6c 65 6e 29 3b 0a 0a 09 09 2f 2a recv_len);..../* 7ca0: 20 45 6e 64 20 53 6d 61 72 74 63 61 72 64 20 54 End Smartcard T 7cb0: 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 ransaction */... 7cc0: 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 cackey_end_trans 7cd0: 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 action(slot);... 7ce0: 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 .return(CACKEY_P 7cf0: 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a CSC_E_GENERIC);. 7d00: 09 7d 0a 0a 09 2f 2a 20 44 65 74 65 72 6d 69 6e .}.../* Determin 7d10: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 2a 2f e result code */ 7d20: 0a 09 6d 61 6a 6f 72 5f 72 63 20 3d 20 72 65 63 ..major_rc = rec 7d30: 76 5f 62 75 66 5b 72 65 63 76 5f 6c 65 6e 20 2d v_buf[recv_len - 7d40: 20 32 5d 3b 0a 09 6d 69 6e 6f 72 5f 72 63 20 3d 2];..minor_rc = 7d50: 20 72 65 63 76 5f 62 75 66 5b 72 65 63 76 5f 6c recv_buf[recv_l 7d60: 65 6e 20 2d 20 31 5d 3b 0a 09 69 66 20 28 72 65 en - 1];..if (re 7d70: 73 70 63 6f 64 65 29 20 7b 0a 09 09 2a 72 65 73 spcode) {...*res 7d80: 70 63 6f 64 65 20 3d 20 28 6d 61 6a 6f 72 5f 72 pcode = (major_r 7d90: 63 20 3c 3c 20 38 29 20 7c 20 6d 69 6e 6f 72 5f c << 8) | minor_ 7da0: 72 63 3b 0a 09 7d 0a 0a 09 2f 2a 20 41 64 6a 75 rc;..}.../* Adju 7db0: 73 74 20 6d 65 73 73 61 67 65 20 62 75 66 66 65 st message buffe 7dc0: 72 20 2a 2f 0a 09 72 65 63 76 5f 6c 65 6e 20 2d r */..recv_len - 7dd0: 3d 20 32 3b 0a 0a 09 2f 2a 20 41 64 64 20 62 79 = 2;.../* Add by 7de0: 74 65 73 20 74 6f 20 72 65 74 75 72 6e 20 76 61 tes to return va 7df0: 6c 75 65 20 2a 2f 0a 09 74 6d 70 5f 72 65 73 70 lue */..tmp_resp 7e00: 64 61 74 61 5f 6c 65 6e 20 3d 20 30 3b 0a 09 69 data_len = 0;..i 7e10: 66 20 28 72 65 73 70 64 61 74 61 20 26 26 20 72 f (respdata && r 7e20: 65 73 70 64 61 74 61 5f 6c 65 6e 29 20 7b 0a 09 espdata_len) {.. 7e30: 09 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 .tmp_respdata_le 7e40: 6e 20 3d 20 2a 72 65 73 70 64 61 74 61 5f 6c 65 n = *respdata_le 7e50: 6e 3b 0a 0a 09 09 62 79 74 65 73 5f 74 6f 5f 63 n;....bytes_to_c 7e60: 6f 70 79 20 3d 20 2a 72 65 73 70 64 61 74 61 5f opy = *respdata_ 7e70: 6c 65 6e 3b 0a 0a 09 09 69 66 20 28 72 65 63 76 len;....if (recv 7e80: 5f 6c 65 6e 20 3c 20 62 79 74 65 73 5f 74 6f 5f _len < bytes_to_ 7e90: 63 6f 70 79 29 20 7b 0a 09 09 09 62 79 74 65 73 copy) {....bytes 7ea0: 5f 74 6f 5f 63 6f 70 79 20 3d 20 72 65 63 76 5f _to_copy = recv_ 7eb0: 6c 65 6e 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b len;...}....CACK 7ec0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 7ed0: 22 43 6f 70 79 69 6e 67 20 25 6c 75 20 62 79 74 "Copying %lu byt 7ee0: 65 73 20 74 6f 20 74 68 65 20 62 75 66 66 65 72 es to the buffer 7ef0: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 7f00: 67 29 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 g) bytes_to_copy 7f10: 29 3b 0a 0a 09 09 6d 65 6d 63 70 79 28 72 65 73 );....memcpy(res 7f20: 70 64 61 74 61 2c 20 72 65 63 76 5f 62 75 66 2c pdata, recv_buf, 7f30: 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 3b bytes_to_copy); 7f40: 0a 09 09 72 65 73 70 64 61 74 61 20 2b 3d 20 62 ...respdata += b 7f50: 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a 0a 09 ytes_to_copy;... 7f60: 09 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e 20 3d .*respdata_len = 7f70: 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a bytes_to_copy;. 7f80: 09 09 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c ..tmp_respdata_l 7f90: 65 6e 20 2d 3d 20 62 79 74 65 73 5f 74 6f 5f 63 en -= bytes_to_c 7fa0: 6f 70 79 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 opy;..} else {.. 7fb0: 09 69 66 20 28 72 65 63 76 5f 6c 65 6e 20 21 3d .if (recv_len != 7fc0: 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 0) {....CACKEY_ 7fd0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 54 68 DEBUG_PRINTF("Th 7fe0: 72 6f 77 69 6e 67 20 61 77 61 79 20 25 6c 75 20 rowing away %lu 7ff0: 62 79 74 65 73 2c 20 6e 6f 77 68 65 72 65 20 74 bytes, nowhere t 8000: 6f 20 70 75 74 20 74 68 65 6d 21 22 2c 20 28 75 o put them!", (u 8010: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 72 65 nsigned long) re 8020: 63 76 5f 6c 65 6e 29 3b 0a 09 09 7d 0a 09 7d 0a cv_len);...}..}. 8030: 0a 09 69 66 20 28 6d 61 6a 6f 72 5f 72 63 20 3d ..if (major_rc = 8040: 3d 20 30 78 36 31 29 20 7b 0a 09 09 2f 2a 20 57 = 0x61) {.../* W 8050: 65 20 6e 65 65 64 20 74 6f 20 52 45 41 44 20 2a e need to READ * 8060: 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 /...CACKEY_DEBUG 8070: 5f 50 52 49 4e 54 46 28 22 42 75 66 66 65 72 20 _PRINTF("Buffer 8080: 72 65 61 64 20 72 65 71 75 69 72 65 64 22 29 3b read required"); 8090: 0a 0a 09 09 70 63 73 63 5f 67 65 74 72 65 73 70 ....pcsc_getresp 80a0: 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 _ret = cackey_se 80b0: 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 nd_apdu(slot, GS 80c0: 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 31 CIS_CLASS_ISO781 80d0: 36 2c 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 47 6, GSCIS_INSTR_G 80e0: 45 54 5f 52 45 53 50 4f 4e 53 45 2c 20 30 78 30 ET_RESPONSE, 0x0 80f0: 30 2c 20 30 78 30 30 2c 20 30 2c 20 4e 55 4c 4c 0, 0x00, 0, NULL 8100: 2c 20 6d 69 6e 6f 72 5f 72 63 2c 20 72 65 73 70 , minor_rc, resp 8110: 63 6f 64 65 2c 20 72 65 73 70 64 61 74 61 2c 20 code, respdata, 8120: 26 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 &tmp_respdata_le 8130: 6e 29 3b 0a 09 09 69 66 20 28 70 63 73 63 5f 67 n);...if (pcsc_g 8140: 65 74 72 65 73 70 5f 72 65 74 20 21 3d 20 43 41 etresp_ret != CA 8150: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 CKEY_PCSC_S_OK) 8160: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU 8170: 47 5f 50 52 49 4e 54 46 28 22 42 75 66 66 65 72 G_PRINTF("Buffer 8180: 20 72 65 61 64 20 66 61 69 6c 65 64 21 20 20 52 read failed! R 8190: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail 81a0: 75 72 65 22 29 3b 0a 0a 09 09 09 2f 2a 20 45 6e ure");...../* En 81b0: 64 20 53 6d 61 72 74 63 61 72 64 20 54 72 61 6e d Smartcard Tran 81c0: 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 09 63 61 saction */....ca 81d0: 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 ckey_end_transac 81e0: 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 09 tion(slot);..... 81f0: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 8200: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 8210: 09 7d 0a 0a 09 09 69 66 20 28 72 65 73 70 64 61 .}....if (respda 8220: 74 61 5f 6c 65 6e 29 20 7b 0a 09 09 09 2a 72 65 ta_len) {....*re 8230: 73 70 64 61 74 61 5f 6c 65 6e 20 2b 3d 20 74 6d spdata_len += tm 8240: 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 6e 3b 0a p_respdata_len;. 8250: 09 09 7d 0a 0a 09 09 2f 2a 20 45 6e 64 20 53 6d ..}..../* End Sm 8260: 61 72 74 63 61 72 64 20 54 72 61 6e 73 61 63 74 artcard Transact 8270: 69 6f 6e 20 2a 2f 0a 09 09 63 61 63 6b 65 79 5f ion */...cackey_ 8280: 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 end_transaction( 8290: 73 6c 6f 74 29 3b 0a 0a 09 09 43 41 43 4b 45 59 slot);....CACKEY 82a0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 82b0: 65 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 eturning in succ 82c0: 65 73 73 20 28 62 75 66 66 65 72 20 72 65 61 64 ess (buffer read 82d0: 20 63 6f 6d 70 6c 65 74 65 29 22 29 3b 0a 09 09 complete)");... 82e0: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 82f0: 53 43 5f 53 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 2f SC_S_OK);..}.../ 8300: 2a 20 45 6e 64 20 53 6d 61 72 74 63 61 72 64 20 * End Smartcard 8310: 54 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 Transaction */.. 8320: 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 cackey_end_trans 8330: 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 action(slot);... 8340: 69 66 20 28 6d 61 6a 6f 72 5f 72 63 20 3d 3d 20 if (major_rc == 8350: 30 78 39 30 29 20 7b 0a 09 09 2f 2a 20 53 75 63 0x90) {.../* Suc 8360: 63 65 73 73 20 2a 2f 0a 09 09 43 41 43 4b 45 59 cess */...CACKEY 8370: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 8380: 65 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 eturning in succ 8390: 65 73 73 20 28 6d 61 6a 6f 72 5f 72 63 20 3d 20 ess (major_rc = 83a0: 30 78 39 30 29 22 29 3b 0a 0a 09 09 72 65 74 75 0x90)");....retu 83b0: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 rn(CACKEY_PCSC_S 83c0: 5f 4f 4b 29 3b 0a 09 7d 0a 0a 0a 09 43 41 43 4b _OK);..}....CACK 83d0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 83e0: 22 41 50 44 55 20 52 65 74 75 72 6e 65 64 20 61 "APDU Returned a 83f0: 6e 20 65 72 72 6f 72 2c 20 72 65 74 75 72 6e 69 n error, returni 8400: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b ng in failure"); 8410: 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 8420: 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 _PCSC_E_GENERIC) 8430: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f ;.}../*. * SYNPO 8440: 53 49 53 0a 20 2a 20 20 20 20 20 73 73 69 7a 65 SIS. * ssize 8450: 5f 74 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 _t cackey_read_b 8460: 75 66 66 65 72 28 73 74 72 75 63 74 20 63 61 63 uffer(struct cac 8470: 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 key_slot *slot, 8480: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 unsigned char *b 8490: 75 66 66 65 72 2c 20 73 69 7a 65 5f 74 20 63 6f uffer, size_t co 84a0: 75 6e 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 unt, unsigned ch 84b0: 61 72 20 74 5f 6f 72 5f 76 2c 20 73 69 7a 65 5f ar t_or_v, size_ 84c0: 74 20 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 t initial_offset 84d0: 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e );. *. * ARGUMEN 84e0: 54 53 0a 20 2a 20 20 20 20 20 73 74 72 75 63 74 TS. * struct 84f0: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c cackey_slot *sl 8500: 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 53 6c ot. * Sl 8510: 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 ot to send comma 8520: 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 20 20 20 nds to. *. * 8530: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a unsigned char * 8540: 62 75 66 66 65 72 0a 20 2a 20 20 20 20 20 20 20 buffer. * 8550: 20 20 5b 4f 55 54 5d 20 42 75 66 66 65 72 0a 20 [OUT] Buffer. 8560: 2a 0a 20 2a 20 20 20 20 20 73 69 7a 65 5f 74 20 *. * size_t 8570: 63 6f 75 6e 74 0a 20 2a 20 20 20 20 20 20 20 20 count. * 8580: 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 Number of bytes 8590: 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 72 to attempt to r 85a0: 65 61 64 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e ead. *. * un 85b0: 73 69 67 6e 65 64 20 63 68 61 72 20 74 5f 6f 72 signed char t_or 85c0: 5f 76 0a 20 2a 20 20 20 20 20 20 20 20 20 53 65 _v. * Se 85d0: 6c 65 63 74 20 74 68 65 20 54 2d 62 75 66 66 65 lect the T-buffe 85e0: 72 20 28 30 31 29 20 6f 72 20 56 2d 62 75 66 66 r (01) or V-buff 85f0: 65 72 20 28 30 32 29 20 74 6f 20 72 65 61 64 20 er (02) to read 8600: 66 72 6f 6d 2e 20 20 0a 20 2a 0a 20 2a 20 20 20 from. . *. * 8610: 20 20 73 69 7a 65 5f 74 20 69 6e 69 74 69 61 6c size_t initial 8620: 5f 6f 66 66 73 65 74 0a 20 2a 20 20 20 20 20 20 _offset. * 8630: 20 20 20 53 70 65 63 69 66 79 20 74 68 65 20 6f Specify the o 8640: 66 66 73 65 74 20 74 6f 20 62 65 67 69 6e 20 74 ffset to begin t 8650: 68 65 20 72 65 61 64 20 66 72 6f 6d 0a 20 2a 0a he read from. *. 8660: 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c *. * RETURN VAL 8670: 55 45 0a 20 2a 20 20 20 20 20 54 68 69 73 20 66 UE. * This f 8680: 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 unction returns 8690: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 the number of by 86a0: 74 65 73 20 61 63 74 75 61 6c 6c 79 20 72 65 61 tes actually rea 86b0: 64 2c 20 6f 72 20 2d 31 20 6f 6e 20 65 72 72 6f d, or -1 on erro 86c0: 72 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 r.. *. * NOTES. 86d0: 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a * None. *. * 86e0: 2f 0a 73 74 61 74 69 63 20 73 73 69 7a 65 5f 74 /.static ssize_t 86f0: 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 cackey_read_buf 8700: 66 65 72 28 73 74 72 75 63 74 20 63 61 63 6b 65 fer(struct cacke 8710: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e y_slot *slot, un 8720: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 75 66 signed char *buf 8730: 66 65 72 2c 20 73 69 7a 65 5f 74 20 63 6f 75 6e fer, size_t coun 8740: 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 t, unsigned char 8750: 20 74 5f 6f 72 5f 76 2c 20 73 69 7a 65 5f 74 20 t_or_v, size_t 8760: 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 29 20 initial_offset) 8770: 7b 0a 09 73 69 7a 65 5f 74 20 6f 66 66 73 65 74 {..size_t offset 8780: 20 3d 20 30 2c 20 6d 61 78 5f 6f 66 66 73 65 74 = 0, max_offset 8790: 2c 20 6d 61 78 5f 63 6f 75 6e 74 3b 0a 09 75 6e , max_count;..un 87a0: 73 69 67 6e 65 64 20 63 68 61 72 20 63 6d 64 5b signed char cmd[ 87b0: 32 5d 3b 0a 09 75 69 6e 74 31 36 5f 74 20 72 65 2];..uint16_t re 87c0: 73 70 63 6f 64 65 3b 0a 09 69 6e 74 20 73 65 6e spcode;..int sen 87d0: 64 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f d_ret;...CACKEY_ 87e0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 87f0: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 6d 61 78 5f 6f lled.");...max_o 8800: 66 66 73 65 74 20 3d 20 63 6f 75 6e 74 3b 0a 09 ffset = count;.. 8810: 6d 61 78 5f 63 6f 75 6e 74 20 3d 20 32 35 32 3b max_count = 252; 8820: 0a 0a 09 69 66 20 28 74 5f 6f 72 5f 76 20 21 3d ...if (t_or_v != 8830: 20 31 20 26 26 20 74 5f 6f 72 5f 76 20 21 3d 20 1 && t_or_v != 8840: 32 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 2) {...CACKEY_DE 8850: 42 55 47 5f 50 52 49 4e 54 46 28 22 49 6e 76 61 BUG_PRINTF("Inva 8860: 6c 69 64 20 54 20 6f 72 20 56 20 70 61 72 61 6d lid T or V param 8870: 65 74 65 72 20 73 70 65 63 69 66 69 65 64 2c 20 eter specified, 8880: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai 8890: 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 lure");....retur 88a0: 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 63 6d 64 5b n(-1);..}...cmd[ 88b0: 30 5d 20 3d 20 74 5f 6f 72 5f 76 3b 0a 0a 09 77 0] = t_or_v;...w 88c0: 68 69 6c 65 20 28 31 29 20 7b 0a 09 09 69 66 20 hile (1) {...if 88d0: 28 6f 66 66 73 65 74 20 3e 3d 20 6d 61 78 5f 6f (offset >= max_o 88e0: 66 66 73 65 74 29 20 7b 0a 09 09 09 43 41 43 4b ffset) {....CACK 88f0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 8900: 22 42 75 66 66 65 72 20 74 6f 6f 20 73 6d 61 6c "Buffer too smal 8910: 6c 2c 20 72 65 74 75 72 6e 69 6e 67 20 77 68 61 l, returning wha 8920: 74 20 77 65 20 67 6f 74 2e 2e 2e 22 29 3b 0a 0a t we got...");.. 8930: 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 ...break;...}... 8940: 09 63 6f 75 6e 74 20 3d 20 6d 61 78 5f 6f 66 66 .count = max_off 8950: 73 65 74 20 2d 20 6f 66 66 73 65 74 3b 0a 09 09 set - offset;... 8960: 69 66 20 28 63 6f 75 6e 74 20 3e 20 6d 61 78 5f if (count > max_ 8970: 63 6f 75 6e 74 29 20 7b 0a 09 09 09 63 6f 75 6e count) {....coun 8980: 74 20 3d 20 6d 61 78 5f 63 6f 75 6e 74 3b 0a 09 t = max_count;.. 8990: 09 7d 0a 0a 09 09 63 6d 64 5b 31 5d 20 3d 20 63 .}....cmd[1] = c 89a0: 6f 75 6e 74 3b 0a 0a 09 09 73 65 6e 64 5f 72 65 ount;....send_re 89b0: 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f t = cackey_send_ 89c0: 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 apdu(slot, GSCIS 89d0: 5f 43 4c 41 53 53 5f 47 4c 4f 42 41 4c 5f 50 4c _CLASS_GLOBAL_PL 89e0: 41 54 46 4f 52 4d 2c 20 47 53 43 49 53 5f 49 4e ATFORM, GSCIS_IN 89f0: 53 54 52 5f 52 45 41 44 5f 42 55 46 46 45 52 2c STR_READ_BUFFER, 8a00: 20 28 28 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 ((initial_offse 8a10: 74 20 2b 20 6f 66 66 73 65 74 29 20 3e 3e 20 38 t + offset) >> 8 8a20: 29 20 26 20 30 78 66 66 2c 20 28 69 6e 69 74 69 ) & 0xff, (initi 8a30: 61 6c 5f 6f 66 66 73 65 74 20 2b 20 6f 66 66 73 al_offset + offs 8a40: 65 74 29 20 26 20 30 78 66 66 2c 20 73 69 7a 65 et) & 0xff, size 8a50: 6f 66 28 63 6d 64 29 2c 20 63 6d 64 2c 20 30 78 of(cmd), cmd, 0x 8a60: 30 30 2c 20 26 72 65 73 70 63 6f 64 65 2c 20 62 00, &respcode, b 8a70: 75 66 66 65 72 20 2b 20 6f 66 66 73 65 74 2c 20 uffer + offset, 8a80: 26 63 6f 75 6e 74 29 3b 0a 09 09 69 66 20 28 73 &count);...if (s 8a90: 65 6e 64 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 end_ret != CACKE 8aa0: 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 Y_PCSC_S_OK) {.. 8ab0: 09 09 69 66 20 28 72 65 73 70 63 6f 64 65 20 3d ..if (respcode = 8ac0: 3d 20 30 78 36 41 38 36 29 20 7b 0a 09 09 09 09 = 0x6A86) {..... 8ad0: 69 66 20 28 6d 61 78 5f 63 6f 75 6e 74 20 3d 3d if (max_count == 8ae0: 20 31 29 20 7b 0a 09 09 09 09 09 62 72 65 61 6b 1) {......break 8af0: 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 6d 61 78 ;.....}......max 8b00: 5f 63 6f 75 6e 74 20 3d 20 6d 61 78 5f 63 6f 75 _count = max_cou 8b10: 6e 74 20 2f 20 32 3b 0a 0a 09 09 09 09 63 6f 6e nt / 2;......con 8b20: 74 69 6e 75 65 3b 0a 09 09 09 7d 0a 0a 09 09 09 tinue;....}..... 8b30: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 8b40: 4e 54 46 28 22 63 61 63 6b 65 79 5f 73 65 6e 64 NTF("cackey_send 8b50: 5f 61 70 64 75 28 29 20 66 61 69 6c 65 64 2c 20 _apdu() failed, 8b60: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai 8b70: 6c 75 72 65 22 29 3b 0a 0a 09 09 09 72 65 74 75 lure");.....retu 8b80: 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 6f rn(-1);...}....o 8b90: 66 66 73 65 74 20 2b 3d 20 63 6f 75 6e 74 3b 0a ffset += count;. 8ba0: 0a 09 09 69 66 20 28 63 6f 75 6e 74 20 3c 20 6d ...if (count < m 8bb0: 61 78 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09 43 ax_count) {....C 8bc0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 8bd0: 54 46 28 22 53 68 6f 72 74 20 72 65 61 64 20 2d TF("Short read - 8be0: 2d 20 63 6f 75 6e 74 20 3d 20 25 69 2c 20 63 6d - count = %i, cm 8bf0: 64 5b 31 5d 20 3d 20 25 69 22 2c 20 63 6f 75 6e d[1] = %i", coun 8c00: 74 2c 20 63 6d 64 5b 31 5d 29 3b 0a 0a 09 09 09 t, cmd[1]);..... 8c10: 62 72 65 61 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 break;...}..}... 8c20: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 8c30: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 NTF("Returning i 8c40: 6e 20 73 75 63 63 65 73 73 2c 20 72 65 61 64 20 n success, read 8c50: 25 6c 75 20 62 79 74 65 73 22 2c 20 28 75 6e 73 %lu bytes", (uns 8c60: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6f 66 66 73 igned long) offs 8c70: 65 74 29 3b 0a 0a 09 72 65 74 75 72 6e 28 6f 66 et);...return(of 8c80: 66 73 65 74 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 fset);.}../*. * 8c90: 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 SYNPOSIS. * 8ca0: 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 cackey_ret cacke 8cb0: 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c 65 74 28 y_select_applet( 8cc0: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl 8cd0: 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 6e ot *slot, unsign 8ce0: 65 64 20 63 68 61 72 20 2a 61 69 64 2c 20 73 69 ed char *aid, si 8cf0: 7a 65 5f 74 20 61 69 64 5f 6c 65 6e 29 3b 0a 20 ze_t aid_len);. 8d00: 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 *. * ARGUMENTS. 8d10: 2a 20 20 20 20 20 73 74 72 75 63 74 20 63 61 63 * struct cac 8d20: 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a 20 key_slot *slot. 8d30: 2a 20 20 20 20 20 20 20 20 20 53 6c 6f 74 20 74 * Slot t 8d40: 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 20 o send commands 8d50: 74 6f 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e 73 to. *. * uns 8d60: 69 67 6e 65 64 20 63 68 61 72 20 2a 61 69 64 0a igned char *aid. 8d70: 20 2a 20 20 20 20 20 20 20 20 20 42 75 66 66 65 * Buffe 8d80: 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 41 70 70 r containing App 8d90: 6c 65 74 20 49 44 20 74 6f 20 73 65 6c 65 63 74 let ID to select 8da0: 0a 20 2a 0a 20 2a 20 20 20 20 20 73 69 7a 65 5f . *. * size_ 8db0: 74 20 61 69 64 5f 6c 65 6e 0a 20 2a 20 20 20 20 t aid_len. * 8dc0: 20 20 20 20 20 4e 75 6d 62 65 72 20 6f 66 20 62 Number of b 8dd0: 79 74 65 73 20 69 6e 20 74 68 65 20 22 61 69 64 ytes in the "aid 8de0: 22 20 28 41 70 70 6c 65 74 20 49 44 29 20 70 61 " (Applet ID) pa 8df0: 72 61 6d 65 74 65 72 0a 20 2a 0a 20 2a 20 52 45 rameter. *. * RE 8e00: 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 TURN VALUE. * 8e10: 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f CACKEY_PCSC_S_ 8e20: 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e 20 73 75 OK On su 8e30: 63 63 65 73 73 0a 20 2a 20 20 20 20 20 43 41 43 ccess. * CAC 8e40: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 8e50: 49 43 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 IC On error. 8e60: 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 *. * NOTES. * 8e70: 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a 2f 0a 73 74 None. *. */.st 8e80: 61 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 atic cackey_ret 8e90: 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 cackey_select_ap 8ea0: 70 6c 65 74 28 73 74 72 75 63 74 20 63 61 63 6b plet(struct cack 8eb0: 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 ey_slot *slot, u 8ec0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 69 nsigned char *ai 8ed0: 64 2c 20 73 69 7a 65 5f 74 20 61 69 64 5f 6c 65 d, size_t aid_le 8ee0: 6e 29 20 7b 0a 09 69 6e 74 20 73 65 6e 64 5f 72 n) {..int send_r 8ef0: 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 et;...CACKEY_DEB 8f00: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 8f10: 64 2e 22 29 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 d.");...CACKEY_D 8f20: 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 53 EBUG_PRINTBUF("S 8f30: 65 6c 65 63 74 69 6e 67 20 61 70 70 6c 65 74 3a electing applet: 8f40: 22 2c 20 61 69 64 2c 20 61 69 64 5f 6c 65 6e 29 ", aid, aid_len) 8f50: 3b 0a 0a 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 ;...send_ret = c 8f60: 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 ackey_send_apdu( 8f70: 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 4c 41 53 slot, GSCIS_CLAS 8f80: 53 5f 49 53 4f 37 38 31 36 2c 20 47 53 43 49 53 S_ISO7816, GSCIS 8f90: 5f 49 4e 53 54 52 5f 53 45 4c 45 43 54 2c 20 47 _INSTR_SELECT, G 8fa0: 53 43 49 53 5f 50 41 52 41 4d 5f 53 45 4c 45 43 SCIS_PARAM_SELEC 8fb0: 54 5f 41 50 50 4c 45 54 2c 20 30 78 30 43 2c 20 T_APPLET, 0x0C, 8fc0: 61 69 64 5f 6c 65 6e 2c 20 61 69 64 2c 20 30 78 aid_len, aid, 0x 8fd0: 30 30 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 00, NULL, NULL, 8fe0: 4e 55 4c 4c 29 3b 0a 09 69 66 20 28 73 65 6e 64 NULL);..if (send 8ff0: 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 _ret != CACKEY_P 9000: 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 41 CSC_S_OK) {...CA 9010: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 9020: 46 28 22 46 61 69 6c 65 64 20 74 6f 20 6f 70 65 F("Failed to ope 9030: 6e 20 61 70 70 6c 65 74 2c 20 72 65 74 75 72 6e n applet, return 9040: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 9050: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b ;....return(CACK 9060: 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 EY_PCSC_E_GENERI 9070: 43 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f C);..}...CACKEY_ 9080: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 DEBUG_PRINTF("Su 9090: 63 63 65 73 73 66 75 6c 6c 79 20 73 65 6c 65 63 ccessfully selec 90a0: 74 65 64 20 66 69 6c 65 22 29 3b 0a 0a 09 72 65 ted file");...re 90b0: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC 90c0: 5f 53 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a _S_OK);.}../*. * 90d0: 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 SYNPOSIS. * 90e0: 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b cackey_ret cack 90f0: 65 79 5f 73 65 6c 65 63 74 5f 66 69 6c 65 28 73 ey_select_file(s 9100: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f truct cackey_slo 9110: 74 20 2a 73 6c 6f 74 2c 20 75 69 6e 74 31 36 5f t *slot, uint16_ 9120: 74 20 65 66 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 t ef);. *. * ARG 9130: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 73 74 UMENTS. * st 9140: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ruct cackey_slot 9150: 20 2a 73 6c 6f 74 0a 20 2a 20 20 20 20 20 20 20 *slot. * 9160: 20 20 53 6c 6f 74 20 74 6f 20 73 65 6e 64 20 63 Slot to send c 9170: 6f 6d 6d 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a ommands to. *. * 9180: 20 20 20 20 20 75 69 6e 74 31 36 5f 74 20 65 66 uint16_t ef 9190: 0a 20 2a 20 20 20 20 20 20 20 20 20 45 6c 65 6d . * Elem 91a0: 65 6e 74 61 6c 20 46 69 6c 65 20 74 6f 20 73 65 ental File to se 91b0: 6c 65 63 74 0a 20 2a 0a 20 2a 20 52 45 54 55 52 lect. *. * RETUR 91c0: 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 43 N VALUE. * C 91d0: 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 20 ACKEY_PCSC_S_OK 91e0: 20 20 20 20 20 20 20 20 4f 6e 20 73 75 63 63 65 On succe 91f0: 73 73 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 ss. * CACKEY 9200: 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 20 _PCSC_E_GENERIC 9210: 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 2a 0a 20 On error. *. 9220: 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 54 * NOTES. * T 9230: 68 69 73 20 73 65 6c 65 63 74 73 20 61 6e 20 45 his selects an E 9240: 6c 65 6d 65 6e 74 61 72 79 20 46 69 6c 65 20 28 lementary File ( 9250: 45 46 29 20 75 6e 64 65 72 20 74 68 65 20 63 75 EF) under the cu 9260: 72 72 65 6e 74 6c 79 20 73 65 6c 65 63 74 65 64 rrently selected 9270: 0a 20 2a 20 20 20 20 20 44 65 64 69 63 61 74 65 . * Dedicate 9280: 64 20 46 69 6c 65 20 28 44 46 29 0a 20 2a 0a 20 d File (DF). *. 9290: 2a 20 20 20 20 20 54 79 70 69 63 61 6c 6c 79 20 * Typically 92a0: 74 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 this is called a 92b0: 66 74 65 72 20 73 65 6c 65 63 74 69 6e 67 20 74 fter selecting t 92c0: 68 65 20 63 6f 72 72 65 63 74 20 41 70 70 6c 65 he correct Apple 92d0: 74 20 28 75 73 69 6e 67 0a 20 2a 20 20 20 20 20 t (using. * 92e0: 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 cackey_select_ap 92f0: 70 6c 65 74 29 20 66 6f 72 20 56 4d 20 63 61 72 plet) for VM car 9300: 64 73 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 ds. *. */.static 9310: 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b cackey_ret cack 9320: 65 79 5f 73 65 6c 65 63 74 5f 66 69 6c 65 28 73 ey_select_file(s 9330: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f truct cackey_slo 9340: 74 20 2a 73 6c 6f 74 2c 20 75 69 6e 74 31 36 5f t *slot, uint16_ 9350: 74 20 65 66 29 20 7b 0a 09 75 6e 73 69 67 6e 65 t ef) {..unsigne 9360: 64 20 63 68 61 72 20 66 69 64 5f 62 75 66 5b 32 d char fid_buf[2 9370: 5d 3b 0a 09 69 6e 74 20 73 65 6e 64 5f 72 65 74 ];..int send_ret 9380: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 9390: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 93a0: 22 29 3b 0a 0a 09 2f 2a 20 4f 70 65 6e 20 74 68 ");.../* Open th 93b0: 65 20 65 6c 65 6d 65 6e 74 61 72 79 20 66 69 6c e elementary fil 93c0: 65 20 2a 2f 0a 09 66 69 64 5f 62 75 66 5b 30 5d e */..fid_buf[0] 93d0: 20 3d 20 28 65 66 20 3e 3e 20 38 29 20 26 20 30 = (ef >> 8) & 0 93e0: 78 66 66 3b 0a 09 66 69 64 5f 62 75 66 5b 31 5d xff;..fid_buf[1] 93f0: 20 3d 20 65 66 20 26 20 30 78 66 66 3b 0a 0a 09 = ef & 0xff;... 9400: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 9410: 4e 54 46 28 22 53 65 6c 65 63 74 69 6e 67 20 66 NTF("Selecting f 9420: 69 6c 65 3a 20 25 30 34 6c 78 22 2c 20 28 75 6e ile: %04lx", (un 9430: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 65 66 29 signed long) ef) 9440: 3b 0a 0a 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 ;...send_ret = c 9450: 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 ackey_send_apdu( 9460: 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 4c 41 53 slot, GSCIS_CLAS 9470: 53 5f 49 53 4f 37 38 31 36 2c 20 47 53 43 49 53 S_ISO7816, GSCIS 9480: 5f 49 4e 53 54 52 5f 53 45 4c 45 43 54 2c 20 30 _INSTR_SELECT, 0 9490: 78 30 32 2c 20 30 78 30 43 2c 20 73 69 7a 65 6f x02, 0x0C, sizeo 94a0: 66 28 66 69 64 5f 62 75 66 29 2c 20 66 69 64 5f f(fid_buf), fid_ 94b0: 62 75 66 2c 20 30 78 30 30 2c 20 4e 55 4c 4c 2c buf, 0x00, NULL, 94c0: 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 69 NULL, NULL);..i 94d0: 66 20 28 73 65 6e 64 5f 72 65 74 20 21 3d 20 43 f (send_ret != C 94e0: 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 ACKEY_PCSC_S_OK) 94f0: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 9500: 47 5f 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 G_PRINTF("Failed 9510: 20 74 6f 20 6f 70 65 6e 20 66 69 6c 65 2c 20 72 to open file, r 9520: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail 9530: 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ure");....return 9540: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 (CACKEY_PCSC_E_G 9550: 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 43 41 ENERIC);..}...CA 9560: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 9570: 46 28 22 53 75 63 63 65 73 73 66 75 6c 6c 79 20 F("Successfully 9580: 73 65 6c 65 63 74 65 64 20 66 69 6c 65 22 29 3b selected file"); 9590: 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 95a0: 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a 0a _PCSC_S_OK);.}.. 95b0: 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 /*. * SYNPOSIS. 95c0: 2a 20 20 20 20 20 76 6f 69 64 20 63 61 63 6b 65 * void cacke 95d0: 79 5f 66 72 65 65 5f 74 6c 76 28 73 74 72 75 63 y_free_tlv(struc 95e0: 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 t cackey_tlv_ent 95f0: 69 74 79 20 2a 72 6f 6f 74 29 3b 0a 20 2a 0a 20 ity *root);. *. 9600: 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 * ARGUMENTS. * 9610: 20 20 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 struct cackey 9620: 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a 72 6f 6f _tlv_entity *roo 9630: 74 0a 20 2a 20 20 20 20 20 20 20 20 20 52 6f 6f t. * Roo 9640: 74 20 6f 66 20 74 68 65 20 54 4c 56 20 6c 69 73 t of the TLV lis 9650: 74 20 74 6f 20 73 74 61 72 74 20 66 72 65 65 69 t to start freei 9660: 6e 67 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 ng. *. * RETURN 9670: 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 4e 6f 6e VALUE. * Non 9680: 65 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a e. *. * NOTES. * 9690: 20 20 20 20 20 54 68 69 73 20 66 75 6e 63 74 69 This functi 96a0: 6f 6e 20 66 72 65 65 73 20 74 68 65 20 54 4c 56 on frees the TLV 96b0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 65 64 20 72 linked listed r 96c0: 65 74 75 72 6e 65 64 20 66 72 6f 6d 0a 20 2a 20 eturned from. * 96d0: 20 20 20 20 22 63 61 63 6b 65 79 5f 72 65 61 64 "cackey_read 96e0: 5f 74 6c 76 22 0a 20 2a 0a 20 2a 2f 0a 73 74 61 _tlv". *. */.sta 96f0: 74 69 63 20 76 6f 69 64 20 63 61 63 6b 65 79 5f tic void cackey_ 9700: 66 72 65 65 5f 74 6c 76 28 73 74 72 75 63 74 20 free_tlv(struct 9710: 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 cackey_tlv_entit 9720: 79 20 2a 72 6f 6f 74 29 20 7b 0a 09 73 74 72 75 y *root) {..stru 9730: 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e ct cackey_tlv_en 9740: 74 69 74 79 20 2a 63 75 72 72 2c 20 2a 6e 65 78 tity *curr, *nex 9750: 74 3b 0a 0a 09 69 66 20 28 72 6f 6f 74 20 3d 3d t;...if (root == 9760: 20 4e 55 4c 4c 29 20 7b 0a 09 09 72 65 74 75 72 NULL) {...retur 9770: 6e 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 63 75 72 n;..}...for (cur 9780: 72 20 3d 20 72 6f 6f 74 3b 20 63 75 72 72 3b 20 r = root; curr; 9790: 63 75 72 72 20 3d 20 6e 65 78 74 29 20 7b 0a 09 curr = next) {.. 97a0: 09 6e 65 78 74 20 3d 20 63 75 72 72 2d 3e 5f 6e .next = curr->_n 97b0: 65 78 74 3b 0a 0a 09 09 73 77 69 74 63 68 20 28 ext;....switch ( 97c0: 63 75 72 72 2d 3e 74 61 67 29 20 7b 0a 09 09 09 curr->tag) {.... 97d0: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 41 case GSCIS_TAG_A 97e0: 43 52 5f 54 41 42 4c 45 3a 0a 09 09 09 63 61 73 CR_TABLE:....cas 97f0: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 e GSCIS_TAG_CERT 9800: 49 46 49 43 41 54 45 3a 0a 09 09 09 09 69 66 20 IFICATE:.....if 9810: 28 63 75 72 72 2d 3e 76 61 6c 75 65 29 20 7b 0a (curr->value) {. 9820: 09 09 09 09 09 66 72 65 65 28 63 75 72 72 2d 3e .....free(curr-> 9830: 76 61 6c 75 65 29 3b 0a 09 09 09 09 7d 0a 09 09 value);.....}... 9840: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 ..break;....case 9850: 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 55 GSCIS_TAG_CARDU 9860: 52 4c 3a 0a 09 09 09 09 69 66 20 28 63 75 72 72 RL:.....if (curr 9870: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 29 ->value_cardurl) 9880: 20 7b 0a 09 09 09 09 09 66 72 65 65 28 63 75 72 {......free(cur 9890: 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c r->value_cardurl 98a0: 29 3b 0a 09 09 09 09 7d 0a 09 09 09 09 62 72 65 );.....}.....bre 98b0: 61 6b 3b 0a 09 09 7d 0a 0a 09 09 66 72 65 65 28 ak;...}....free( 98c0: 63 75 72 72 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 curr);..}...retu 98d0: 72 6e 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e rn;.}../*. * SYN 98e0: 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 2e 2e 2e POSIS. * ... 98f0: 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 . *. * ARGUMENTS 9900: 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 . * .... *. 9910: 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 * RETURN VALUE. 9920: 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 * .... *. * 9930: 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 2e 2e 2e NOTES. * ... 9940: 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 73 . *. */.static s 9950: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 truct cackey_tlv 9960: 5f 65 6e 74 69 74 79 20 2a 63 61 63 6b 65 79 5f _entity *cackey_ 9970: 72 65 61 64 5f 74 6c 76 28 73 74 72 75 63 74 20 read_tlv(struct 9980: 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f cackey_slot *slo 9990: 74 29 20 7b 0a 09 73 74 72 75 63 74 20 63 61 63 t) {..struct cac 99a0: 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a key_tlv_entity * 99b0: 63 75 72 72 5f 65 6e 74 69 74 79 2c 20 2a 72 6f curr_entity, *ro 99c0: 6f 74 20 3d 20 4e 55 4c 4c 2c 20 2a 6c 61 73 74 ot = NULL, *last 99d0: 20 3d 20 4e 55 4c 4c 3b 0a 09 75 6e 73 69 67 6e = NULL;..unsign 99e0: 65 64 20 63 68 61 72 20 74 6c 65 6e 5f 62 75 66 ed char tlen_buf 99f0: 5b 32 5d 2c 20 74 76 61 6c 5f 62 75 66 5b 31 30 [2], tval_buf[10 9a00: 32 34 5d 2c 20 2a 74 76 61 6c 3b 0a 09 75 6e 73 24], *tval;..uns 9a10: 69 67 6e 65 64 20 63 68 61 72 20 76 6c 65 6e 5f igned char vlen_ 9a20: 62 75 66 5b 32 5d 2c 20 76 76 61 6c 5f 62 75 66 buf[2], vval_buf 9a30: 5b 38 31 39 32 5d 2c 20 2a 76 76 61 6c 3b 0a 09 [8192], *vval;.. 9a40: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 74 unsigned char *t 9a50: 6d 70 62 75 66 3b 0a 09 73 73 69 7a 65 5f 74 20 mpbuf;..ssize_t 9a60: 74 6c 65 6e 2c 20 76 6c 65 6e 3b 0a 09 73 73 69 tlen, vlen;..ssi 9a70: 7a 65 5f 74 20 72 65 61 64 5f 72 65 74 3b 0a 09 ze_t read_ret;.. 9a80: 73 69 7a 65 5f 74 20 6f 66 66 73 65 74 5f 74 20 size_t offset_t 9a90: 3d 20 30 2c 20 6f 66 66 73 65 74 5f 76 20 3d 20 = 0, offset_v = 9aa0: 30 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 0;..unsigned cha 9ab0: 72 20 74 61 67 3b 0a 09 73 69 7a 65 5f 74 20 6c r tag;..size_t l 9ac0: 65 6e 67 74 68 3b 0a 23 69 66 64 65 66 20 48 41 ength;.#ifdef HA 9ad0: 56 45 5f 4c 49 42 5a 0a 09 75 4c 6f 6e 67 66 20 VE_LIBZ..uLongf 9ae0: 74 6d 70 62 75 66 6c 65 6e 3b 0a 09 69 6e 74 20 tmpbuflen;..int 9af0: 75 6e 63 6f 6d 70 72 65 73 73 5f 72 65 74 3b 0a uncompress_ret;. 9b00: 23 65 6e 64 69 66 0a 0a 09 43 41 43 4b 45 59 5f #endif...CACKEY_ 9b10: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 9b20: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 72 65 61 64 5f lled.");...read_ 9b30: 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 ret = cackey_rea 9b40: 64 5f 62 75 66 66 65 72 28 73 6c 6f 74 2c 20 74 d_buffer(slot, t 9b50: 6c 65 6e 5f 62 75 66 2c 20 73 69 7a 65 6f 66 28 len_buf, sizeof( 9b60: 74 6c 65 6e 5f 62 75 66 29 2c 20 31 2c 20 6f 66 tlen_buf), 1, of 9b70: 66 73 65 74 5f 74 29 3b 0a 09 69 66 20 28 72 65 fset_t);..if (re 9b80: 61 64 5f 72 65 74 20 21 3d 20 73 69 7a 65 6f 66 ad_ret != sizeof 9b90: 28 74 6c 65 6e 5f 62 75 66 29 29 20 7b 0a 09 09 (tlen_buf)) {... 9ba0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 9bb0: 4e 54 46 28 22 52 65 61 64 20 66 61 69 6c 65 64 NTF("Read failed 9bc0: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f 9bd0: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 ailure");....ret 9be0: 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 urn(NULL);..}... 9bf0: 74 6c 65 6e 20 3d 20 28 74 6c 65 6e 5f 62 75 66 tlen = (tlen_buf 9c00: 5b 31 5d 20 3c 3c 20 38 29 20 7c 20 74 6c 65 6e [1] << 8) | tlen 9c10: 5f 62 75 66 5b 30 5d 3b 0a 0a 09 72 65 61 64 5f _buf[0];...read_ 9c20: 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 ret = cackey_rea 9c30: 64 5f 62 75 66 66 65 72 28 73 6c 6f 74 2c 20 76 d_buffer(slot, v 9c40: 6c 65 6e 5f 62 75 66 2c 20 73 69 7a 65 6f 66 28 len_buf, sizeof( 9c50: 76 6c 65 6e 5f 62 75 66 29 2c 20 32 2c 20 6f 66 vlen_buf), 2, of 9c60: 66 73 65 74 5f 76 29 3b 0a 09 69 66 20 28 72 65 fset_v);..if (re 9c70: 61 64 5f 72 65 74 20 21 3d 20 73 69 7a 65 6f 66 ad_ret != sizeof 9c80: 28 76 6c 65 6e 5f 62 75 66 29 29 20 7b 0a 09 09 (vlen_buf)) {... 9c90: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 9ca0: 4e 54 46 28 22 52 65 61 64 20 66 61 69 6c 65 64 NTF("Read failed 9cb0: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f 9cc0: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 ailure");....ret 9cd0: 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 urn(NULL);..}... 9ce0: 76 6c 65 6e 20 3d 20 28 76 6c 65 6e 5f 62 75 66 vlen = (vlen_buf 9cf0: 5b 31 5d 20 3c 3c 20 38 29 20 7c 20 76 6c 65 6e [1] << 8) | vlen 9d00: 5f 62 75 66 5b 30 5d 3b 0a 0a 09 43 41 43 4b 45 _buf[0];...CACKE 9d10: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 9d20: 54 61 67 20 4c 65 6e 67 74 68 20 3d 20 25 69 2c Tag Length = %i, 9d30: 20 56 61 6c 75 65 20 4c 65 6e 67 74 68 20 3d 20 Value Length = 9d40: 25 69 22 2c 20 74 6c 65 6e 2c 20 76 6c 65 6e 29 %i", tlen, vlen) 9d50: 3b 0a 0a 09 6f 66 66 73 65 74 5f 74 20 2b 3d 20 ;...offset_t += 9d60: 32 3b 0a 09 6f 66 66 73 65 74 5f 76 20 2b 3d 20 2;..offset_v += 9d70: 32 3b 0a 0a 09 69 66 20 28 74 6c 65 6e 20 3e 20 2;...if (tlen > 9d80: 73 69 7a 65 6f 66 28 74 76 61 6c 5f 62 75 66 29 sizeof(tval_buf) 9d90: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 9da0: 55 47 5f 50 52 49 4e 54 46 28 22 54 61 67 20 6c UG_PRINTF("Tag l 9db0: 65 6e 67 74 68 20 69 73 20 74 6f 6f 20 6c 61 72 ength is too lar 9dc0: 67 65 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e ge, returning in 9dd0: 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 failure");....r 9de0: 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a eturn(NULL);..}. 9df0: 0a 09 69 66 20 28 76 6c 65 6e 20 3e 20 73 69 7a ..if (vlen > siz 9e00: 65 6f 66 28 76 76 61 6c 5f 62 75 66 29 29 20 7b eof(vval_buf)) { 9e10: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 9e20: 50 52 49 4e 54 46 28 22 56 61 6c 75 65 20 6c 65 PRINTF("Value le 9e30: 6e 67 74 68 20 69 73 20 74 6f 6f 20 6c 61 72 67 ngth is too larg 9e40: 65 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 e, returning in 9e50: 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 failure");....re 9e60: 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a turn(NULL);..}.. 9e70: 09 72 65 61 64 5f 72 65 74 20 3d 20 63 61 63 6b .read_ret = cack 9e80: 65 79 5f 72 65 61 64 5f 62 75 66 66 65 72 28 73 ey_read_buffer(s 9e90: 6c 6f 74 2c 20 74 76 61 6c 5f 62 75 66 2c 20 74 lot, tval_buf, t 9ea0: 6c 65 6e 2c 20 31 2c 20 6f 66 66 73 65 74 5f 74 len, 1, offset_t 9eb0: 29 3b 0a 09 69 66 20 28 72 65 61 64 5f 72 65 74 );..if (read_ret 9ec0: 20 21 3d 20 74 6c 65 6e 29 20 7b 0a 09 09 43 41 != tlen) {...CA 9ed0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 9ee0: 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 72 65 61 F("Unable to rea 9ef0: 64 20 65 6e 74 69 72 65 20 54 2d 62 75 66 66 65 d entire T-buffe 9f00: 72 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 r, returning in 9f10: 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 failure");....re 9f20: 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a turn(NULL);..}.. 9f30: 09 72 65 61 64 5f 72 65 74 20 3d 20 63 61 63 6b .read_ret = cack 9f40: 65 79 5f 72 65 61 64 5f 62 75 66 66 65 72 28 73 ey_read_buffer(s 9f50: 6c 6f 74 2c 20 76 76 61 6c 5f 62 75 66 2c 20 76 lot, vval_buf, v 9f60: 6c 65 6e 2c 20 32 2c 20 6f 66 66 73 65 74 5f 76 len, 2, offset_v 9f70: 29 3b 0a 09 69 66 20 28 72 65 61 64 5f 72 65 74 );..if (read_ret 9f80: 20 21 3d 20 76 6c 65 6e 29 20 7b 0a 09 09 43 41 != vlen) {...CA 9f90: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 9fa0: 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 72 65 61 F("Unable to rea 9fb0: 64 20 65 6e 74 69 72 65 20 56 2d 62 75 66 66 65 d entire V-buffe 9fc0: 72 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 r, returning in 9fd0: 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 failure");....re 9fe0: 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a turn(NULL);..}.. 9ff0: 09 74 76 61 6c 20 3d 20 74 76 61 6c 5f 62 75 66 .tval = tval_buf a000: 3b 0a 09 76 76 61 6c 20 3d 20 76 76 61 6c 5f 62 ;..vval = vval_b a010: 75 66 3b 0a 09 77 68 69 6c 65 20 28 74 6c 65 6e uf;..while (tlen a020: 20 3e 20 30 20 26 26 20 76 6c 65 6e 20 3e 20 30 > 0 && vlen > 0 a030: 29 20 7b 0a 09 09 74 61 67 20 3d 20 2a 74 76 61 ) {...tag = *tva a040: 6c 3b 0a 09 09 74 76 61 6c 2b 2b 3b 0a 09 09 74 l;...tval++;...t a050: 6c 65 6e 2d 2d 3b 0a 0a 09 09 69 66 20 28 2a 74 len--;....if (*t a060: 76 61 6c 20 3d 3d 20 30 78 66 66 29 20 7b 0a 09 val == 0xff) {.. a070: 09 09 6c 65 6e 67 74 68 20 3d 20 28 74 76 61 6c ..length = (tval a080: 5b 32 5d 20 3c 3c 20 38 29 20 7c 20 74 76 61 6c [2] << 8) | tval a090: 5b 31 5d 3b 0a 09 09 09 74 76 61 6c 20 2b 3d 20 [1];....tval += a0a0: 33 3b 0a 09 09 09 74 6c 65 6e 20 2d 3d 20 33 3b 3;....tlen -= 3; a0b0: 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 6c ...} else {....l a0c0: 65 6e 67 74 68 20 3d 20 2a 74 76 61 6c 3b 0a 09 ength = *tval;.. a0d0: 09 09 74 76 61 6c 2b 2b 3b 0a 09 09 09 74 6c 65 ..tval++;....tle a0e0: 6e 2d 2d 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b n--;...}....CACK a0f0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( a100: 22 54 61 67 3a 20 25 73 20 28 25 30 32 78 29 22 "Tag: %s (%02x)" a110: 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F a120: 55 4e 43 5f 54 41 47 5f 54 4f 5f 53 54 52 28 74 UNC_TAG_TO_STR(t a130: 61 67 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 69 ag), (unsigned i a140: 6e 74 29 20 74 61 67 29 3b 0a 09 09 43 41 43 4b nt) tag);...CACK a150: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 EY_DEBUG_PRINTBU a160: 46 28 22 56 61 6c 75 65 3a 22 2c 20 76 76 61 6c F("Value:", vval a170: 2c 20 6c 65 6e 67 74 68 29 3b 0a 0a 09 09 63 75 , length);....cu a180: 72 72 5f 65 6e 74 69 74 79 20 3d 20 4e 55 4c 4c rr_entity = NULL a190: 3b 0a 09 09 73 77 69 74 63 68 20 28 74 61 67 29 ;...switch (tag) a1a0: 20 7b 0a 09 09 09 63 61 73 65 20 47 53 43 49 53 {....case GSCIS a1b0: 5f 54 41 47 5f 43 41 52 44 55 52 4c 3a 0a 09 09 _TAG_CARDURL:... a1c0: 09 09 63 75 72 72 5f 65 6e 74 69 74 79 20 3d 20 ..curr_entity = a1d0: 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 malloc(sizeof(*c a1e0: 75 72 72 5f 65 6e 74 69 74 79 29 29 3b 0a 09 09 urr_entity));... a1f0: 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 ..curr_entity->v a200: 61 6c 75 65 5f 63 61 72 64 75 72 6c 20 3d 20 6d alue_cardurl = m a210: 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 75 alloc(sizeof(*cu a220: 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 rr_entity->value a230: 5f 63 61 72 64 75 72 6c 29 29 3b 0a 0a 09 09 09 _cardurl));..... a240: 09 6d 65 6d 63 70 79 28 63 75 72 72 5f 65 6e 74 .memcpy(curr_ent a250: 69 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 ity->value_cardu a260: 72 6c 2d 3e 72 69 64 2c 20 76 76 61 6c 2c 20 35 rl->rid, vval, 5 a270: 29 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 );.....curr_enti a280: 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 ty->value_cardur a290: 6c 2d 3e 61 70 70 74 79 70 65 20 3d 20 76 76 61 l->apptype = vva a2a0: 6c 5b 35 5d 3b 0a 09 09 09 09 63 75 72 72 5f 65 l[5];.....curr_e a2b0: 6e 74 69 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 ntity->value_car a2c0: 64 75 72 6c 2d 3e 6f 62 6a 65 63 74 69 64 20 3d durl->objectid = a2d0: 20 28 76 76 61 6c 5b 36 5d 20 3c 3c 20 38 29 20 (vval[6] << 8) a2e0: 7c 20 76 76 61 6c 5b 37 5d 3b 0a 09 09 09 09 63 | vval[7];.....c a2f0: 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 urr_entity->valu a300: 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 69 64 e_cardurl->appid a310: 20 3d 20 28 76 76 61 6c 5b 38 5d 20 3c 3c 20 38 = (vval[8] << 8 a320: 29 20 7c 20 76 76 61 6c 5b 39 5d 3b 0a 0a 09 09 ) | vval[9];.... a330: 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 74 ..curr_entity->t a340: 61 67 20 3d 20 74 61 67 3b 0a 09 09 09 09 63 75 ag = tag;.....cu a350: 72 72 5f 65 6e 74 69 74 79 2d 3e 5f 6e 65 78 74 rr_entity->_next a360: 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 09 62 72 = NULL;......br a370: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 47 53 43 eak;....case GSC a380: 49 53 5f 54 41 47 5f 41 43 52 5f 54 41 42 4c 45 IS_TAG_ACR_TABLE a390: 3a 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 :.....curr_entit a3a0: 79 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f y = malloc(sizeo a3b0: 66 28 2a 63 75 72 72 5f 65 6e 74 69 74 79 29 29 f(*curr_entity)) a3c0: 3b 0a 09 09 09 09 74 6d 70 62 75 66 20 3d 20 6d ;.....tmpbuf = m a3d0: 61 6c 6c 6f 63 28 6c 65 6e 67 74 68 29 3b 0a 0a alloc(length);.. a3e0: 09 09 09 09 6d 65 6d 63 70 79 28 74 6d 70 62 75 ....memcpy(tmpbu a3f0: 66 2c 20 76 76 61 6c 2c 20 6c 65 6e 67 74 68 29 f, vval, length) a400: 3b 0a 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 ;......curr_enti a410: 74 79 2d 3e 74 61 67 20 3d 20 74 61 67 3b 0a 09 ty->tag = tag;.. a420: 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e ...curr_entity-> a430: 6c 65 6e 67 74 68 20 3d 20 6c 65 6e 67 74 68 3b length = length; a440: 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 .....curr_entity a450: 2d 3e 76 61 6c 75 65 20 3d 20 74 6d 70 62 75 66 ->value = tmpbuf a460: 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 ;.....curr_entit a470: 79 2d 3e 5f 6e 65 78 74 20 3d 20 4e 55 4c 4c 3b y->_next = NULL; a480: 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... a490: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 case GSCIS_TAG_C a4a0: 45 52 54 49 46 49 43 41 54 45 3a 0a 09 09 09 09 ERTIFICATE:..... a4b0: 63 75 72 72 5f 65 6e 74 69 74 79 20 3d 20 6d 61 curr_entity = ma a4c0: 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 75 72 lloc(sizeof(*cur a4d0: 72 5f 65 6e 74 69 74 79 29 29 3b 0a 0a 09 09 09 r_entity));..... a4e0: 09 74 6d 70 62 75 66 6c 65 6e 20 3d 20 6c 65 6e .tmpbuflen = len a4f0: 67 74 68 20 2a 20 32 3b 0a 09 09 09 09 74 6d 70 gth * 2;.....tmp a500: 62 75 66 20 3d 20 6d 61 6c 6c 6f 63 28 74 6d 70 buf = malloc(tmp a510: 62 75 66 6c 65 6e 29 3b 0a 0a 23 69 66 64 65 66 buflen);..#ifdef a520: 20 48 41 56 45 5f 4c 49 42 5a 0a 09 09 09 09 75 HAVE_LIBZ.....u a530: 6e 63 6f 6d 70 72 65 73 73 5f 72 65 74 20 3d 20 ncompress_ret = a540: 75 6e 63 6f 6d 70 72 65 73 73 28 74 6d 70 62 75 uncompress(tmpbu a550: 66 2c 20 26 74 6d 70 62 75 66 6c 65 6e 2c 20 76 f, &tmpbuflen, v a560: 76 61 6c 2c 20 6c 65 6e 67 74 68 29 3b 0a 09 09 val, length);... a570: 09 09 69 66 20 28 75 6e 63 6f 6d 70 72 65 73 73 ..if (uncompress a580: 5f 72 65 74 20 21 3d 20 5a 5f 4f 4b 29 20 7b 0a _ret != Z_OK) {. a590: 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU a5a0: 47 5f 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 G_PRINTF("Failed a5b0: 20 74 6f 20 64 65 63 6f 6d 70 72 65 73 73 2c 20 to decompress, a5c0: 75 6e 63 6f 6d 70 72 65 73 73 28 29 20 72 65 74 uncompress() ret a5d0: 75 72 6e 65 64 20 25 69 20 2d 2d 20 72 65 73 6f urned %i -- reso a5e0: 72 74 69 6e 67 20 74 6f 20 64 69 72 65 63 74 20 rting to direct a5f0: 63 6f 70 79 22 2c 20 75 6e 63 6f 6d 70 72 65 73 copy", uncompres a600: 73 5f 72 65 74 29 3b 0a 0a 09 09 09 09 09 74 6d s_ret);.......tm a610: 70 62 75 66 6c 65 6e 20 3d 20 6c 65 6e 67 74 68 pbuflen = length a620: 3b 0a 09 09 09 09 09 6d 65 6d 63 70 79 28 74 6d ;......memcpy(tm a630: 70 62 75 66 2c 20 76 76 61 6c 2c 20 6c 65 6e 67 pbuf, vval, leng a640: 74 68 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 th);.....}...... a650: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI a660: 4e 54 42 55 46 28 22 44 65 63 6f 6d 70 72 65 73 NTBUF("Decompres a670: 73 65 64 20 74 6f 3a 22 2c 20 74 6d 70 62 75 66 sed to:", tmpbuf a680: 2c 20 74 6d 70 62 75 66 6c 65 6e 29 3b 0a 23 65 , tmpbuflen);.#e a690: 6c 73 65 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 lse.....CACKEY_D a6a0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 4d 69 73 EBUG_PRINTF("Mis a6b0: 73 69 6e 67 20 5a 4c 49 42 20 53 75 70 70 6f 72 sing ZLIB Suppor a6c0: 74 2c 20 74 68 69 73 20 63 65 72 74 69 66 69 63 t, this certific a6d0: 61 74 65 20 69 73 20 6c 69 6b 65 6c 79 20 75 73 ate is likely us a6e0: 65 6c 65 73 73 2e 2e 2e 22 29 3b 0a 0a 09 09 09 eless...");..... a6f0: 09 74 6d 70 62 75 66 6c 65 6e 20 3d 20 6c 65 6e .tmpbuflen = len a700: 67 74 68 3b 0a 09 09 09 09 6d 65 6d 63 70 79 28 gth;.....memcpy( a710: 74 6d 70 62 75 66 2c 20 76 76 61 6c 2c 20 6c 65 tmpbuf, vval, le a720: 6e 67 74 68 29 3b 0a 23 65 6e 64 69 66 0a 0a 09 ngth);.#endif... a730: 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e ...curr_entity-> a740: 74 61 67 20 3d 20 74 61 67 3b 0a 09 09 09 09 63 tag = tag;.....c a750: 75 72 72 5f 65 6e 74 69 74 79 2d 3e 6c 65 6e 67 urr_entity->leng a760: 74 68 20 3d 20 74 6d 70 62 75 66 6c 65 6e 3b 0a th = tmpbuflen;. a770: 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d ....curr_entity- a780: 3e 76 61 6c 75 65 20 3d 20 74 6d 70 62 75 66 3b >value = tmpbuf; a790: 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 .....curr_entity a7a0: 2d 3e 5f 6e 65 78 74 20 3d 20 4e 55 4c 4c 3b 0a ->_next = NULL;. a7b0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c a7c0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 50 4b ase GSCIS_TAG_PK a7d0: 43 53 31 35 3a 0a 09 09 09 09 63 75 72 72 5f 65 CS15:.....curr_e a7e0: 6e 74 69 74 79 20 3d 20 6d 61 6c 6c 6f 63 28 73 ntity = malloc(s a7f0: 69 7a 65 6f 66 28 2a 63 75 72 72 5f 65 6e 74 69 izeof(*curr_enti a800: 74 79 29 29 3b 0a 0a 09 09 09 09 63 75 72 72 5f ty));......curr_ a810: 65 6e 74 69 74 79 2d 3e 74 61 67 20 3d 20 74 61 entity->tag = ta a820: 67 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 g;.....curr_enti a830: 74 79 2d 3e 76 61 6c 75 65 5f 62 79 74 65 20 3d ty->value_byte = a840: 20 76 76 61 6c 5b 30 5d 3b 0a 09 09 09 09 63 75 vval[0];.....cu a850: 72 72 5f 65 6e 74 69 74 79 2d 3e 5f 6e 65 78 74 rr_entity->_next a860: 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 09 62 72 = NULL;......br a870: 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09 76 76 61 6c eak;...}....vval a880: 20 2b 3d 20 6c 65 6e 67 74 68 3b 0a 09 09 76 6c += length;...vl a890: 65 6e 20 2d 3d 20 6c 65 6e 67 74 68 3b 0a 0a 09 en -= length;... a8a0: 09 69 66 20 28 63 75 72 72 5f 65 6e 74 69 74 79 .if (curr_entity a8b0: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 69 != NULL) {....i a8c0: 66 20 28 72 6f 6f 74 20 3d 3d 20 4e 55 4c 4c 29 f (root == NULL) a8d0: 20 7b 0a 09 09 09 09 72 6f 6f 74 20 3d 20 63 75 {.....root = cu a8e0: 72 72 5f 65 6e 74 69 74 79 3b 0a 09 09 09 7d 0a rr_entity;....}. a8f0: 0a 09 09 09 69 66 20 28 6c 61 73 74 20 21 3d 20 ....if (last != a900: 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 6c 61 73 74 NULL) {.....last a910: 2d 3e 5f 6e 65 78 74 20 3d 20 63 75 72 72 5f 65 ->_next = curr_e a920: 6e 74 69 74 79 3b 0a 09 09 09 7d 0a 0a 09 09 09 ntity;....}..... a930: 6c 61 73 74 20 3d 20 63 75 72 72 5f 65 6e 74 69 last = curr_enti a940: 74 79 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 72 65 74 ty;...}..}...ret a950: 75 72 6e 28 72 6f 6f 74 29 3b 0a 7d 0a 0a 2f 2a urn(root);.}../* a960: 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 . * SYNPOSIS. * a970: 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 .... *. * AR a980: 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 2e GUMENTS. * . a990: 2e 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 ... *. * RETURN a9a0: 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 2e 2e 2e VALUE. * ... a9b0: 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 . *. * NOTES. * a9c0: 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 .... *. */.s a9d0: 74 61 74 69 63 20 76 6f 69 64 20 63 61 63 6b 65 tatic void cacke a9e0: 79 5f 66 72 65 65 5f 63 65 72 74 73 28 73 74 72 y_free_certs(str a9f0: 75 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f uct cackey_pcsc_ aa00: 69 64 65 6e 74 69 74 79 20 2a 73 74 61 72 74 2c identity *start, aa10: 20 73 69 7a 65 5f 74 20 63 6f 75 6e 74 2c 20 69 size_t count, i aa20: 6e 74 20 66 72 65 65 5f 73 74 61 72 74 29 20 7b nt free_start) { aa30: 0a 09 73 69 7a 65 5f 74 20 69 64 78 3b 0a 0a 09 ..size_t idx;... aa40: 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 for (idx = 0; id aa50: 78 20 3c 20 63 6f 75 6e 74 3b 20 69 64 78 2b 2b x < count; idx++ aa60: 29 20 7b 0a 09 09 69 66 20 28 73 74 61 72 74 5b ) {...if (start[ aa70: 69 64 78 5d 2e 63 65 72 74 69 66 69 63 61 74 65 idx].certificate aa80: 29 20 7b 0a 09 09 09 66 72 65 65 28 73 74 61 72 ) {....free(star aa90: 74 5b 69 64 78 5d 2e 63 65 72 74 69 66 69 63 61 t[idx].certifica aaa0: 74 65 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 te);...}..}...if aab0: 20 28 66 72 65 65 5f 73 74 61 72 74 29 20 7b 0a (free_start) {. aac0: 09 09 66 72 65 65 28 73 74 61 72 74 29 3b 0a 09 ..free(start);.. aad0: 7d 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f }...return;.}../ aae0: 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a *. * SYNPOSIS. * aaf0: 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 .... *. * A ab00: 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 RGUMENTS. * ab10: 2e 2e 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e .... *. * RETURN ab20: 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 2e 2e VALUE. * .. ab30: 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a .. *. * NOTES. * ab40: 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a .... *. */. ab50: 73 74 61 74 69 63 20 73 74 72 75 63 74 20 63 61 static struct ca ab60: 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 ckey_pcsc_identi ab70: 74 79 20 2a 63 61 63 6b 65 79 5f 72 65 61 64 5f ty *cackey_read_ ab80: 63 65 72 74 73 28 73 74 72 75 63 74 20 63 61 63 certs(struct cac ab90: 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 key_slot *slot, aba0: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 70 63 struct cackey_pc abb0: 73 63 5f 69 64 65 6e 74 69 74 79 20 2a 63 65 72 sc_identity *cer abc0: 74 73 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ts, unsigned lon abd0: 67 20 2a 63 6f 75 6e 74 29 20 7b 0a 09 73 74 72 g *count) {..str abe0: 75 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f uct cackey_pcsc_ abf0: 69 64 65 6e 74 69 74 79 20 2a 63 75 72 72 5f 69 identity *curr_i ac00: 64 3b 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 d;..struct cacke ac10: 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a 63 63 y_tlv_entity *cc ac20: 63 5f 74 6c 76 2c 20 2a 63 63 63 5f 63 75 72 72 c_tlv, *ccc_curr ac30: 2c 20 2a 61 70 70 5f 74 6c 76 2c 20 2a 61 70 70 , *app_tlv, *app ac40: 5f 63 75 72 72 3b 0a 09 75 6e 73 69 67 6e 65 64 _curr;..unsigned ac50: 20 63 68 61 72 20 63 63 63 5f 61 69 64 5b 5d 20 char ccc_aid[] ac60: 3d 20 7b 47 53 43 49 53 5f 41 49 44 5f 43 43 43 = {GSCIS_AID_CCC ac70: 7d 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 };..unsigned cha ac80: 72 20 63 75 72 72 5f 61 69 64 5b 37 5d 3b 0a 09 r curr_aid[7];.. ac90: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6f 75 unsigned long ou aca0: 74 69 64 78 20 3d 20 30 3b 0a 09 63 61 63 6b 65 tidx = 0;..cacke acb0: 79 5f 72 65 74 20 74 72 61 6e 73 61 63 74 69 6f y_ret transactio acc0: 6e 5f 72 65 74 3b 0a 09 69 6e 74 20 63 65 72 74 n_ret;..int cert acd0: 73 5f 72 65 73 69 7a 61 62 6c 65 3b 0a 09 69 6e s_resizable;..in ace0: 74 20 73 65 6e 64 5f 72 65 74 2c 20 73 65 6c 65 t send_ret, sele acf0: 63 74 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 ct_ret;...CACKEY ad00: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C ad10: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( ad20: 63 6f 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b count == NULL) { ad30: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ ad40: 50 52 49 4e 54 46 28 22 63 6f 75 6e 74 20 69 73 PRINTF("count is ad50: 20 4e 55 4c 4c 2c 20 72 65 74 75 72 6e 69 6e 67 NULL, returning ad60: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. ad70: 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a ..return(NULL);. ad80: 09 7d 0a 0a 09 69 66 20 28 63 65 72 74 73 20 21 .}...if (certs ! ad90: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 69 66 20 28 = NULL) {...if ( ada0: 2a 63 6f 75 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 *count == 0) {.. adb0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P adc0: 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 65 64 RINTF("Requested add0: 20 77 65 20 72 65 74 75 72 6e 20 30 20 6f 62 6a we return 0 obj ade0: 65 63 74 73 2c 20 73 68 6f 72 74 2d 63 69 72 63 ects, short-circ adf0: 75 69 74 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 uit");.....retur ae00: 6e 28 63 65 72 74 73 29 3b 0a 09 09 7d 0a 09 7d n(certs);...}..} ae10: 0a 0a 09 2f 2a 20 42 65 67 69 6e 20 61 20 53 6d .../* Begin a Sm ae20: 61 72 74 43 61 72 64 20 74 72 61 6e 73 61 63 74 artCard transact ae30: 69 6f 6e 20 2a 2f 0a 09 74 72 61 6e 73 61 63 74 ion */..transact ae40: 69 6f 6e 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 ion_ret = cackey ae50: 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 _begin_transacti ae60: 6f 6e 28 73 6c 6f 74 29 3b 0a 09 69 66 20 28 74 on(slot);..if (t ae70: 72 61 6e 73 61 63 74 69 6f 6e 5f 72 65 74 20 21 ransaction_ret ! ae80: 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f = CACKEY_PCSC_S_ ae90: 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 OK) {...CACKEY_D aea0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 EBUG_PRINTF("Una aeb0: 62 6c 65 20 62 65 67 69 6e 20 74 72 61 6e 73 61 ble begin transa aec0: 63 74 69 6f 6e 2c 20 72 65 74 75 72 6e 69 6e 67 ction, returning aed0: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. aee0: 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a ..return(NULL);. aef0: 09 7d 0a 0a 09 69 66 20 28 63 65 72 74 73 20 3d .}...if (certs = af00: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 63 65 72 74 = NULL) {...cert af10: 73 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f s = malloc(sizeo af20: 66 28 2a 63 65 72 74 73 29 20 2a 20 35 29 3b 0a f(*certs) * 5);. af30: 09 09 2a 63 6f 75 6e 74 20 3d 20 35 3b 0a 09 09 ..*count = 5;... af40: 63 65 72 74 73 5f 72 65 73 69 7a 61 62 6c 65 20 certs_resizable af50: 3d 20 31 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 = 1;..} else {.. af60: 09 63 65 72 74 73 5f 72 65 73 69 7a 61 62 6c 65 .certs_resizable af70: 20 3d 20 30 3b 0a 09 7d 0a 0a 09 2f 2a 20 53 65 = 0;..}.../* Se af80: 6c 65 63 74 20 74 68 65 20 43 43 43 20 41 70 70 lect the CCC App af90: 6c 65 74 20 2a 2f 0a 09 73 65 6e 64 5f 72 65 74 let */..send_ret afa0: 20 3d 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 = cackey_select afb0: 5f 61 70 70 6c 65 74 28 73 6c 6f 74 2c 20 63 63 _applet(slot, cc afc0: 63 5f 61 69 64 2c 20 73 69 7a 65 6f 66 28 63 63 c_aid, sizeof(cc afd0: 63 5f 61 69 64 29 29 3b 0a 09 69 66 20 28 73 65 c_aid));..if (se afe0: 6e 64 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 nd_ret != CACKEY aff0: 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 _PCSC_S_OK) {... b000: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI b010: 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 73 NTF("Unable to s b020: 65 6c 65 63 74 20 43 43 43 20 41 70 70 6c 65 74 elect CCC Applet b030: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f b040: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 2f 2a 20 ailure");..../* b050: 54 65 72 6d 69 6e 61 74 65 20 53 6d 61 72 74 43 Terminate SmartC b060: 61 72 64 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 ard Transaction b070: 2a 2f 0a 09 09 63 61 63 6b 65 79 5f 65 6e 64 5f */...cackey_end_ b080: 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 transaction(slot b090: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c );....return(NUL b0a0: 4c 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 52 65 61 64 L);..}.../* Read b0b0: 20 61 6c 6c 20 74 68 65 20 61 70 70 6c 65 74 73 all the applets b0c0: 20 66 72 6f 6d 20 74 68 65 20 43 43 43 27 73 20 from the CCC's b0d0: 54 4c 56 20 2a 2f 0a 09 63 63 63 5f 74 6c 76 20 TLV */..ccc_tlv b0e0: 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 74 6c = cackey_read_tl b0f0: 76 28 73 6c 6f 74 29 3b 0a 0a 09 2f 2a 20 4c 6f v(slot);.../* Lo b100: 6f 6b 20 66 6f 72 20 43 41 52 44 55 52 4c 73 20 ok for CARDURLs b110: 74 68 61 74 20 63 6f 6f 72 65 73 70 6f 6e 64 20 that coorespond b120: 74 6f 20 50 4b 49 20 61 70 70 6c 65 74 73 20 2a to PKI applets * b130: 2f 0a 09 66 6f 72 20 28 63 63 63 5f 63 75 72 72 /..for (ccc_curr b140: 20 3d 20 63 63 63 5f 74 6c 76 3b 20 63 63 63 5f = ccc_tlv; ccc_ b150: 63 75 72 72 3b 20 63 63 63 5f 63 75 72 72 20 3d curr; ccc_curr = b160: 20 63 63 63 5f 63 75 72 72 2d 3e 5f 6e 65 78 74 ccc_curr->_next b170: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB b180: 55 47 5f 50 52 49 4e 54 46 28 22 46 6f 75 6e 64 UG_PRINTF("Found b190: 20 74 61 67 3a 20 25 73 20 2e 2e 2e 20 22 2c 20 tag: %s ... ", b1a0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN b1b0: 43 5f 54 41 47 5f 54 4f 5f 53 54 52 28 63 63 63 C_TAG_TO_STR(ccc b1c0: 5f 63 75 72 72 2d 3e 74 61 67 29 29 3b 0a 0a 09 _curr->tag));... b1d0: 09 69 66 20 28 63 63 63 5f 63 75 72 72 2d 3e 74 .if (ccc_curr->t b1e0: 61 67 20 21 3d 20 47 53 43 49 53 5f 54 41 47 5f ag != GSCIS_TAG_ b1f0: 43 41 52 44 55 52 4c 29 20 7b 0a 09 09 09 43 41 CARDURL) {....CA b200: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT b210: 46 28 22 20 20 2e 2e 2e 20 73 6b 69 70 70 69 6e F(" ... skippin b220: 67 20 69 74 20 28 77 65 20 6f 6e 6c 79 20 63 61 g it (we only ca b230: 72 65 20 61 62 6f 75 74 20 43 41 52 44 55 52 4c re about CARDURL b240: 73 29 22 29 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e s)");.....contin b250: 75 65 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 28 ue;...}....if (( b260: 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f ccc_curr->value_ b270: 63 61 72 64 75 72 6c 2d 3e 61 70 70 74 79 70 65 cardurl->apptype b280: 20 26 20 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 & CACKEY_TLV_AP b290: 50 5f 50 4b 49 29 20 21 3d 20 43 41 43 4b 45 59 P_PKI) != CACKEY b2a0: 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 29 20 7b 0a _TLV_APP_PKI) {. b2b0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ b2c0: 50 52 49 4e 54 46 28 22 20 20 2e 2e 2e 20 73 6b PRINTF(" ... sk b2d0: 69 70 70 69 6e 67 20 69 74 20 28 77 65 20 6f 6e ipping it (we on b2e0: 6c 79 20 63 61 72 65 20 61 62 6f 75 74 20 50 4b ly care about PK b2f0: 49 20 61 70 70 6c 65 74 73 2c 20 74 68 69 73 20 I applets, this b300: 61 70 70 6c 65 74 20 73 75 70 70 6f 72 74 73 3a applet supports: b310: 20 25 73 2f 25 30 32 78 29 22 2c 20 43 41 43 4b %s/%02x)", CACK b320: 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 41 50 EY_DEBUG_FUNC_AP b330: 50 54 59 50 45 5f 54 4f 5f 53 54 52 28 63 63 63 PTYPE_TO_STR(ccc b340: 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 _curr->value_car b350: 64 75 72 6c 2d 3e 61 70 70 74 79 70 65 29 2c 20 durl->apptype), b360: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 63 (unsigned int) c b370: 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 cc_curr->value_c b380: 61 72 64 75 72 6c 2d 3e 61 70 70 74 79 70 65 29 ardurl->apptype) b390: 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a ;.....continue;. b3a0: 09 09 7d 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 ..}....CACKEY_DE b3b0: 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 52 49 BUG_PRINTBUF("RI b3c0: 44 3a 22 2c 20 63 63 63 5f 63 75 72 72 2d 3e 76 D:", ccc_curr->v b3d0: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 72 69 alue_cardurl->ri b3e0: 64 2c 20 73 69 7a 65 6f 66 28 63 63 63 5f 63 75 d, sizeof(ccc_cu b3f0: 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 rr->value_cardur b400: 6c 2d 3e 72 69 64 29 29 3b 0a 09 09 43 41 43 4b l->rid));...CACK b410: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( b420: 22 41 70 70 49 44 20 3d 20 25 73 2f 25 30 34 6c "AppID = %s/%04l b430: 78 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 x", CACKEY_DEBUG b440: 5f 46 55 4e 43 5f 4f 42 4a 49 44 5f 54 4f 5f 53 _FUNC_OBJID_TO_S b450: 54 52 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c TR(ccc_curr->val b460: 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 69 ue_cardurl->appi b470: 64 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f d), (unsigned lo b480: 6e 67 29 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 ng) ccc_curr->va b490: 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 lue_cardurl->app b4a0: 69 64 29 3b 0a 09 09 43 41 43 4b 45 59 5f 44 45 id);...CACKEY_DE b4b0: 42 55 47 5f 50 52 49 4e 54 46 28 22 4f 62 6a 65 BUG_PRINTF("Obje b4c0: 63 74 49 44 20 3d 20 25 73 2f 25 30 34 6c 78 22 ctID = %s/%04lx" b4d0: 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F b4e0: 55 4e 43 5f 4f 42 4a 49 44 5f 54 4f 5f 53 54 52 UNC_OBJID_TO_STR b4f0: 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 (ccc_curr->value b500: 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 6a 65 63 74 _cardurl->object b510: 69 64 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c id), (unsigned l b520: 6f 6e 67 29 20 63 63 63 5f 63 75 72 72 2d 3e 76 ong) ccc_curr->v b530: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 alue_cardurl->ob b540: 6a 65 63 74 69 64 29 3b 0a 0a 09 09 6d 65 6d 63 jectid);....memc b550: 70 79 28 63 75 72 72 5f 61 69 64 2c 20 63 63 63 py(curr_aid, ccc b560: 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 _curr->value_car b570: 64 75 72 6c 2d 3e 72 69 64 2c 20 73 69 7a 65 6f durl->rid, sizeo b580: 66 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 f(ccc_curr->valu b590: 65 5f 63 61 72 64 75 72 6c 2d 3e 72 69 64 29 29 e_cardurl->rid)) b5a0: 3b 0a 09 09 63 75 72 72 5f 61 69 64 5b 73 69 7a ;...curr_aid[siz b5b0: 65 6f 66 28 63 75 72 72 5f 61 69 64 29 20 2d 20 eof(curr_aid) - b5c0: 32 5d 20 3d 20 28 63 63 63 5f 63 75 72 72 2d 3e 2] = (ccc_curr-> b5d0: 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 value_cardurl->a b5e0: 70 70 69 64 20 3e 3e 20 38 29 20 26 20 30 78 66 ppid >> 8) & 0xf b5f0: 66 3b 0a 09 09 63 75 72 72 5f 61 69 64 5b 73 69 f;...curr_aid[si b600: 7a 65 6f 66 28 63 75 72 72 5f 61 69 64 29 20 2d zeof(curr_aid) - b610: 20 31 5d 20 3d 20 63 63 63 5f 63 75 72 72 2d 3e 1] = ccc_curr-> b620: 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 value_cardurl->a b630: 70 70 69 64 20 26 20 30 78 66 66 3b 0a 0a 09 09 ppid & 0xff;.... b640: 2f 2a 20 53 65 6c 65 63 74 20 66 6f 75 6e 64 20 /* Select found b650: 61 70 70 6c 65 74 20 2e 2e 2e 20 2a 2f 0a 09 09 applet ... */... b660: 73 65 6c 65 63 74 5f 72 65 74 20 3d 20 63 61 63 select_ret = cac b670: 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c 65 key_select_apple b680: 74 28 73 6c 6f 74 2c 20 63 75 72 72 5f 61 69 64 t(slot, curr_aid b690: 2c 20 73 69 7a 65 6f 66 28 63 75 72 72 5f 61 69 , sizeof(curr_ai b6a0: 64 29 29 3b 0a 09 09 69 66 20 28 73 65 6c 65 63 d));...if (selec b6b0: 74 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f t_ret != CACKEY_ b6c0: 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 09 PCSC_S_OK) {.... b6d0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI b6e0: 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 73 NTF("Failed to s b6f0: 65 6c 65 63 74 20 61 70 70 6c 65 74 2c 20 73 6b elect applet, sk b700: 69 70 70 69 6e 67 20 70 72 6f 63 65 73 73 69 6e ipping processin b710: 67 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 g of this object b720: 22 29 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 65 ");.....continue b730: 3b 0a 09 09 7d 0a 0a 09 09 2f 2a 20 2e 2e 2e 20 ;...}..../* ... b740: 61 6e 64 20 6f 62 6a 65 63 74 20 28 66 69 6c 65 and object (file b750: 29 20 2a 2f 0a 09 09 73 65 6c 65 63 74 5f 72 65 ) */...select_re b760: 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 t = cackey_selec b770: 74 5f 66 69 6c 65 28 73 6c 6f 74 2c 20 63 63 63 t_file(slot, ccc b780: 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 _curr->value_car b790: 64 75 72 6c 2d 3e 6f 62 6a 65 63 74 69 64 29 3b durl->objectid); b7a0: 0a 09 09 69 66 20 28 73 65 6c 65 63 74 5f 72 65 ...if (select_re b7b0: 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 t != CACKEY_PCSC b7c0: 5f 53 5f 4f 4b 29 20 7b 0a 09 09 09 43 41 43 4b _S_OK) {....CACK b7d0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( b7e0: 22 46 61 69 6c 65 64 20 74 6f 20 73 65 6c 65 63 "Failed to selec b7f0: 74 20 66 69 6c 65 2c 20 73 6b 69 70 70 69 6e 67 t file, skipping b800: 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 74 processing of t b810: 68 69 73 20 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 his object");... b820: 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a ..continue;...}. b830: 0a 09 09 2f 2a 20 50 72 6f 63 65 73 73 20 74 68 .../* Process th b840: 69 73 20 66 69 6c 65 27 73 20 54 4c 56 20 6c 6f is file's TLV lo b850: 6f 6b 69 6e 67 20 66 6f 72 20 63 65 72 74 69 66 oking for certif b860: 69 63 61 74 65 73 20 2a 2f 0a 09 09 61 70 70 5f icates */...app_ b870: 74 6c 76 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 tlv = cackey_rea b880: 64 5f 74 6c 76 28 73 6c 6f 74 29 3b 0a 0a 09 09 d_tlv(slot);.... b890: 66 6f 72 20 28 61 70 70 5f 63 75 72 72 20 3d 20 for (app_curr = b8a0: 61 70 70 5f 74 6c 76 3b 20 61 70 70 5f 63 75 72 app_tlv; app_cur b8b0: 72 3b 20 61 70 70 5f 63 75 72 72 20 3d 20 61 70 r; app_curr = ap b8c0: 70 5f 63 75 72 72 2d 3e 5f 6e 65 78 74 29 20 7b p_curr->_next) { b8d0: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG b8e0: 5f 50 52 49 4e 54 46 28 22 46 6f 75 6e 64 20 74 _PRINTF("Found t b8f0: 61 67 3a 20 25 73 22 2c 20 43 41 43 4b 45 59 5f ag: %s", CACKEY_ b900: 44 45 42 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54 DEBUG_FUNC_TAG_T b910: 4f 5f 53 54 52 28 61 70 70 5f 63 75 72 72 2d 3e O_STR(app_curr-> b920: 74 61 67 29 29 3b 0a 09 09 09 69 66 20 28 61 70 tag));....if (ap b930: 70 5f 63 75 72 72 2d 3e 74 61 67 20 21 3d 20 47 p_curr->tag != G b940: 53 43 49 53 5f 54 41 47 5f 43 45 52 54 49 46 49 SCIS_TAG_CERTIFI b950: 43 41 54 45 29 20 7b 0a 09 09 09 09 43 41 43 4b CATE) {.....CACK b960: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( b970: 22 20 20 2e 2e 2e 20 73 6b 69 70 70 69 6e 67 20 " ... skipping b980: 69 74 20 28 77 65 20 6f 6e 6c 79 20 63 61 72 65 it (we only care b990: 20 61 62 6f 75 74 20 43 45 52 54 49 46 49 43 41 about CERTIFICA b9a0: 54 45 73 29 22 29 3b 0a 0a 09 09 09 09 63 6f 6e TEs)");......con b9b0: 74 69 6e 75 65 3b 0a 09 09 09 7d 0a 0a 09 09 09 tinue;....}..... b9c0: 63 75 72 72 5f 69 64 20 3d 20 26 63 65 72 74 73 curr_id = &certs b9d0: 5b 6f 75 74 69 64 78 5d 3b 0a 09 09 09 6f 75 74 [outidx];....out b9e0: 69 64 78 2b 2b 3b 0a 0a 09 09 09 6d 65 6d 63 70 idx++;.....memcp b9f0: 79 28 63 75 72 72 5f 69 64 2d 3e 61 70 70 6c 65 y(curr_id->apple ba00: 74 2c 20 63 75 72 72 5f 61 69 64 2c 20 73 69 7a t, curr_aid, siz ba10: 65 6f 66 28 63 75 72 72 5f 69 64 2d 3e 61 70 70 eof(curr_id->app ba20: 6c 65 74 29 29 3b 0a 09 09 09 63 75 72 72 5f 69 let));....curr_i ba30: 64 2d 3e 66 69 6c 65 20 3d 20 63 63 63 5f 63 75 d->file = ccc_cu ba40: 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 rr->value_cardur ba50: 6c 2d 3e 6f 62 6a 65 63 74 69 64 3b 0a 09 09 09 l->objectid;.... ba60: 63 75 72 72 5f 69 64 2d 3e 6c 61 62 65 6c 20 3d curr_id->label = ba70: 20 4e 55 4c 4c 3b 0a 0a 09 09 09 43 41 43 4b 45 NULL;.....CACKE ba80: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" ba90: 46 69 6c 6c 69 6e 67 20 63 75 72 72 5f 69 64 2d Filling curr_id- baa0: 3e 61 70 70 6c 65 74 20 28 25 70 29 20 77 69 74 >applet (%p) wit bab0: 68 20 25 6c 75 20 62 79 74 65 73 3a 22 2c 20 63 h %lu bytes:", c bac0: 75 72 72 5f 69 64 2d 3e 61 70 70 6c 65 74 2c 20 urr_id->applet, bad0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) bae0: 73 69 7a 65 6f 66 28 63 75 72 72 5f 69 64 2d 3e sizeof(curr_id-> baf0: 61 70 70 6c 65 74 29 29 3b 0a 09 09 09 43 41 43 applet));....CAC bb00: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 KEY_DEBUG_PRINTB bb10: 55 46 28 22 56 41 4c 3a 22 2c 20 63 75 72 72 5f UF("VAL:", curr_ bb20: 69 64 2d 3e 61 70 70 6c 65 74 2c 20 73 69 7a 65 id->applet, size bb30: 6f 66 28 63 75 72 72 5f 69 64 2d 3e 61 70 70 6c of(curr_id->appl bb40: 65 74 29 29 3b 0a 0a 09 09 09 63 75 72 72 5f 69 et));.....curr_i bb50: 64 2d 3e 63 65 72 74 69 66 69 63 61 74 65 5f 6c d->certificate_l bb60: 65 6e 20 3d 20 61 70 70 5f 63 75 72 72 2d 3e 6c en = app_curr->l bb70: 65 6e 67 74 68 3b 0a 0a 09 09 09 63 75 72 72 5f ength;.....curr_ bb80: 69 64 2d 3e 63 65 72 74 69 66 69 63 61 74 65 20 id->certificate bb90: 3d 20 6d 61 6c 6c 6f 63 28 63 75 72 72 5f 69 64 = malloc(curr_id bba0: 2d 3e 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 ->certificate_le bbb0: 6e 29 3b 0a 09 09 09 6d 65 6d 63 70 79 28 63 75 n);....memcpy(cu bbc0: 72 72 5f 69 64 2d 3e 63 65 72 74 69 66 69 63 61 rr_id->certifica bbd0: 74 65 2c 20 61 70 70 5f 63 75 72 72 2d 3e 76 61 te, app_curr->va bbe0: 6c 75 65 2c 20 63 75 72 72 5f 69 64 2d 3e 63 65 lue, curr_id->ce bbf0: 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 29 3b 0a rtificate_len);. bc00: 0a 09 09 09 69 66 20 28 6f 75 74 69 64 78 20 3e ....if (outidx > bc10: 3d 20 2a 63 6f 75 6e 74 29 20 7b 0a 09 09 09 09 = *count) {..... bc20: 69 66 20 28 63 65 72 74 73 5f 72 65 73 69 7a 61 if (certs_resiza bc30: 62 6c 65 29 20 7b 0a 09 09 09 09 09 2a 63 6f 75 ble) {......*cou bc40: 6e 74 20 2a 3d 20 32 3b 0a 09 09 09 09 09 63 65 nt *= 2;......ce bc50: 72 74 73 20 3d 20 72 65 61 6c 6c 6f 63 28 63 65 rts = realloc(ce bc60: 72 74 73 2c 20 73 69 7a 65 6f 66 28 2a 63 65 72 rts, sizeof(*cer bc70: 74 73 29 20 2a 20 28 2a 63 6f 75 6e 74 29 29 3b ts) * (*count)); bc80: 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 .....} else {... bc90: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a ...break;.....}. bca0: 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 63 61 63 6b ...}...}....cack bcb0: 65 79 5f 66 72 65 65 5f 74 6c 76 28 61 70 70 5f ey_free_tlv(app_ bcc0: 74 6c 76 29 3b 0a 0a 09 09 69 66 20 28 6f 75 74 tlv);....if (out bcd0: 69 64 78 20 3e 3d 20 2a 63 6f 75 6e 74 29 20 7b idx >= *count) { bce0: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 09 ....break;...}.. bcf0: 7d 0a 0a 09 63 61 63 6b 65 79 5f 66 72 65 65 5f }...cackey_free_ bd00: 74 6c 76 28 63 63 63 5f 74 6c 76 29 3b 0a 0a 09 tlv(ccc_tlv);... bd10: 2a 63 6f 75 6e 74 20 3d 20 6f 75 74 69 64 78 3b *count = outidx; bd20: 0a 0a 09 69 66 20 28 63 65 72 74 73 5f 72 65 73 ...if (certs_res bd30: 69 7a 61 62 6c 65 29 20 7b 0a 09 09 63 65 72 74 izable) {...cert bd40: 73 20 3d 20 72 65 61 6c 6c 6f 63 28 63 65 72 74 s = realloc(cert bd50: 73 2c 20 73 69 7a 65 6f 66 28 2a 63 65 72 74 73 s, sizeof(*certs bd60: 29 20 2a 20 28 2a 63 6f 75 6e 74 29 29 3b 0a 09 ) * (*count));.. bd70: 7d 0a 0a 09 2f 2a 20 54 65 72 6d 69 6e 61 74 65 }.../* Terminate bd80: 20 53 6d 61 72 74 43 61 72 64 20 54 72 61 6e 73 SmartCard Trans bd90: 61 63 74 69 6f 6e 20 2a 2f 0a 09 63 61 63 6b 65 action */..cacke bda0: 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f y_end_transactio bdb0: 6e 28 73 6c 6f 74 29 3b 0a 0a 09 72 65 74 75 72 n(slot);...retur bdc0: 6e 28 63 65 72 74 73 29 3b 0a 7d 0a 0a 2f 2a 0a n(certs);.}../*. bdd0: 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 * SYNPOSIS. * bde0: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 .... *. * ARG bdf0: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 2e 2e UMENTS. * .. be00: 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 .. *. * RETURN V be10: 41 4c 55 45 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a ALUE. * .... be20: 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 *. * NOTES. * be30: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 .... *. */.st be40: 61 74 69 63 20 73 73 69 7a 65 5f 74 20 63 61 63 atic ssize_t cac be50: 6b 65 79 5f 73 69 67 6e 64 65 63 72 79 70 74 28 key_signdecrypt( be60: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl be70: 6f 74 20 2a 73 6c 6f 74 2c 20 73 74 72 75 63 74 ot *slot, struct be80: 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 cackey_identity be90: 20 2a 69 64 65 6e 74 69 74 79 2c 20 75 6e 73 69 *identity, unsi bea0: 67 6e 65 64 20 63 68 61 72 20 2a 62 75 66 2c 20 gned char *buf, beb0: 73 69 7a 65 5f 74 20 62 75 66 6c 65 6e 2c 20 75 size_t buflen, u bec0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 6f 75 nsigned char *ou bed0: 74 62 75 66 2c 20 73 69 7a 65 5f 74 20 6f 75 74 tbuf, size_t out bee0: 62 75 66 6c 65 6e 29 20 7b 0a 09 63 61 63 6b 65 buflen) {..cacke bef0: 79 5f 72 65 74 20 73 65 6e 64 5f 72 65 74 3b 0a y_ret send_ret;. bf00: 09 69 6e 74 20 6c 65 3b 0a 0a 09 43 41 43 4b 45 .int le;...CACKE bf10: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" bf20: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if bf30: 28 62 75 66 6c 65 6e 20 3e 20 32 35 35 29 20 7b (buflen > 255) { bf40: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ bf50: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. bf60: 62 75 66 6c 65 6e 20 69 73 20 67 72 65 61 74 65 buflen is greate bf70: 72 20 74 68 61 6e 20 32 35 35 20 28 62 75 66 6c r than 255 (bufl bf80: 65 6e 20 3d 20 25 6c 75 29 22 2c 20 28 75 6e 73 en = %lu)", (uns bf90: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 62 75 66 6c igned long) bufl bfa0: 65 6e 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d en);....return(- bfb0: 31 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 6f 75 74 1);..}...if (out bfc0: 62 75 66 6c 65 6e 20 3e 20 32 35 33 29 20 7b 0a buflen > 253) {. bfd0: 09 09 6c 65 20 3d 20 32 35 33 3b 0a 09 7d 20 65 ..le = 253;..} e bfe0: 6c 73 65 20 7b 0a 09 09 6c 65 20 3d 20 6f 75 74 lse {...le = out bff0: 62 75 66 6c 65 6e 3b 0a 09 7d 0a 0a 09 69 66 20 buflen;..}...if c000: 28 73 6c 6f 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b (slot == NULL) { c010: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ c020: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. c030: 73 6c 6f 74 20 69 73 20 4e 55 4c 4c 22 29 3b 0a slot is NULL");. c040: 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. c050: 7d 0a 0a 09 69 66 20 28 62 75 66 20 3d 3d 20 4e }...if (buf == N c060: 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ULL) {...CACKEY_ c070: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er c080: 72 6f 72 2e 20 20 62 75 66 20 69 73 20 4e 55 4c ror. buf is NUL c090: 4c 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d L");....return(- c0a0: 31 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 6f 75 74 1);..}...if (out c0b0: 62 75 66 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 buf == NULL) {.. c0c0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR c0d0: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 6f 75 INTF("Error. ou c0e0: 74 62 75 66 20 69 73 20 4e 55 4c 4c 22 29 3b 0a tbuf is NULL");. c0f0: 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. c100: 7d 0a 0a 09 2f 2a 20 42 65 67 69 6e 20 74 72 61 }.../* Begin tra c110: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 63 61 63 nsaction */..cac c120: 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 key_begin_transa c130: 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 2f ction(slot);.../ c140: 2a 20 53 65 6c 65 63 74 20 63 6f 72 72 65 63 74 * Select correct c150: 20 61 70 70 6c 65 74 20 2a 2f 0a 09 43 41 43 4b applet */..CACK c160: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( c170: 22 53 65 6c 65 63 74 69 6e 67 20 61 70 70 6c 65 "Selecting apple c180: 74 20 66 6f 75 6e 64 20 61 74 20 25 70 20 2e 2e t found at %p .. c190: 2e 22 2c 20 69 64 65 6e 74 69 74 79 2d 3e 69 64 .", identity->id c1a0: 65 6e 74 69 74 79 2d 3e 61 70 70 6c 65 74 29 3b entity->applet); c1b0: 0a 09 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f ..cackey_select_ c1c0: 61 70 70 6c 65 74 28 73 6c 6f 74 2c 20 69 64 65 applet(slot, ide c1d0: 6e 74 69 74 79 2d 3e 69 64 65 6e 74 69 74 79 2d ntity->identity- c1e0: 3e 61 70 70 6c 65 74 2c 20 73 69 7a 65 6f 66 28 >applet, sizeof( c1f0: 69 64 65 6e 74 69 74 79 2d 3e 69 64 65 6e 74 69 identity->identi c200: 74 79 2d 3e 61 70 70 6c 65 74 29 29 3b 0a 0a 09 ty->applet));... c210: 2f 2a 20 53 65 6c 65 63 74 20 63 6f 72 72 65 63 /* Select correc c220: 74 20 66 69 6c 65 20 2a 2f 0a 09 63 61 63 6b 65 t file */..cacke c230: 79 5f 73 65 6c 65 63 74 5f 66 69 6c 65 28 73 6c y_select_file(sl c240: 6f 74 2c 20 69 64 65 6e 74 69 74 79 2d 3e 69 64 ot, identity->id c250: 65 6e 74 69 74 79 2d 3e 66 69 6c 65 29 3b 0a 0a entity->file);.. c260: 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 61 63 6b .send_ret = cack c270: 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 73 6c 6f ey_send_apdu(slo c280: 74 2c 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 47 t, GSCIS_CLASS_G c290: 4c 4f 42 41 4c 5f 50 4c 41 54 46 4f 52 4d 2c 20 LOBAL_PLATFORM, c2a0: 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 49 47 4e GSCIS_INSTR_SIGN c2b0: 44 45 43 52 59 50 54 2c 20 30 78 30 30 2c 20 30 DECRYPT, 0x00, 0 c2c0: 78 30 30 2c 20 62 75 66 6c 65 6e 2c 20 62 75 66 x00, buflen, buf c2d0: 2c 20 6c 65 2c 20 4e 55 4c 4c 2c 20 6f 75 74 62 , le, NULL, outb c2e0: 75 66 2c 20 26 6f 75 74 62 75 66 6c 65 6e 29 3b uf, &outbuflen); c2f0: 0a 09 69 66 20 28 73 65 6e 64 5f 72 65 74 20 21 ..if (send_ret ! c300: 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f = CACKEY_PCSC_S_ c310: 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 OK) {...CACKEY_D c320: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 41 44 50 EBUG_PRINTF("ADP c330: 55 20 53 65 6e 64 69 6e 67 20 46 61 69 6c 65 64 U Sending Failed c340: 20 2d 2d 20 72 65 74 75 72 6e 69 6e 67 20 69 6e -- returning in c350: 20 65 72 72 6f 72 2e 22 29 3b 0a 0a 09 09 2f 2a error.");..../* c360: 20 45 6e 64 20 74 72 61 6e 73 61 63 74 69 6f 6e End transaction c370: 20 2a 2f 0a 09 09 63 61 63 6b 65 79 5f 65 6e 64 */...cackey_end c380: 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f _transaction(slo c390: 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 t);....return(-1 c3a0: 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 45 6e 64 20 74 );..}.../* End t c3b0: 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 63 ransaction */..c c3c0: 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 ackey_end_transa c3d0: 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 43 ction(slot);...C c3e0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN c3f0: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 6e TF("Returning in c400: 20 73 75 63 63 65 73 73 2e 22 29 3b 0a 0a 09 72 success.");...r c410: 65 74 75 72 6e 28 6f 75 74 62 75 66 6c 65 6e 29 eturn(outbuflen) c420: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f ;.}../*. * SYNPO c430: 53 49 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 SIS. * .... c440: 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 *. * ARGUMENTS. c450: 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 * .... *. * c460: 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 RETURN VALUE. * c470: 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 4e 4f .... *. * NO c480: 54 45 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 TES. * .... c490: 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63 61 63 *. */.static cac c4a0: 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 6c key_ret cackey_l c4b0: 6f 67 69 6e 28 73 74 72 75 63 74 20 63 61 63 6b ogin(struct cack c4c0: 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 ey_slot *slot, u c4d0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 69 nsigned char *pi c4e0: 6e 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 n, unsigned long c4f0: 20 70 69 6e 5f 6c 65 6e 2c 20 69 6e 74 20 2a 74 pin_len, int *t c500: 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 5f 70 ries_remaining_p c510: 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 ) {..unsigned ch c520: 61 72 20 63 61 63 5f 70 69 6e 5b 38 5d 20 3d 20 ar cac_pin[8] = c530: 7b 30 78 46 46 2c 20 30 78 46 46 2c 20 30 78 46 {0xFF, 0xFF, 0xF c540: 46 2c 20 30 78 46 46 2c 20 30 78 46 46 2c 20 30 F, 0xFF, 0xFF, 0 c550: 78 46 46 2c 20 30 78 46 46 2c 20 30 78 46 46 7d xFF, 0xFF, 0xFF} c560: 3b 0a 09 75 69 6e 74 31 36 5f 74 20 72 65 73 70 ;..uint16_t resp c570: 6f 6e 73 65 5f 63 6f 64 65 3b 0a 09 69 6e 74 20 onse_code;..int c580: 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 3b tries_remaining; c590: 0a 09 69 6e 74 20 73 65 6e 64 5f 72 65 74 3b 0a ..int send_ret;. c5a0: 0a 09 2f 2a 20 49 6e 64 69 63 61 74 65 20 74 68 ../* Indicate th c5b0: 61 74 20 77 65 20 64 6f 20 6e 6f 74 20 6b 6e 6f at we do not kno c5c0: 77 20 61 62 6f 75 74 20 68 6f 77 20 6d 61 6e 79 w about how many c5d0: 20 74 72 69 65 73 20 61 72 65 20 72 65 6d 61 69 tries are remai c5e0: 6e 69 6e 67 20 2a 2f 0a 09 69 66 20 28 74 72 69 ning */..if (tri c5f0: 65 73 5f 72 65 6d 61 69 6e 69 6e 67 5f 70 29 20 es_remaining_p) c600: 7b 0a 09 09 2a 74 72 69 65 73 5f 72 65 6d 61 69 {...*tries_remai c610: 6e 69 6e 67 5f 70 20 3d 20 2d 31 3b 0a 09 7d 0a ning_p = -1;..}. c620: 0a 09 2f 2a 20 41 70 70 61 72 65 6e 74 6c 79 2c ../* Apparently, c630: 20 43 41 43 20 50 49 4e 73 20 61 72 65 20 2a 45 CAC PINs are *E c640: 58 41 43 54 4c 59 2a 20 38 20 62 79 74 65 73 20 XACTLY* 8 bytes c650: 6c 6f 6e 67 20 2d 2d 20 70 61 64 20 77 69 74 68 long -- pad with c660: 20 30 78 46 46 20 69 66 20 74 6f 6f 20 73 68 6f 0xFF if too sho c670: 72 74 20 2a 2f 0a 09 69 66 20 28 70 69 6e 5f 6c rt */..if (pin_l c680: 65 6e 20 3e 3d 20 38 29 20 7b 0a 09 09 6d 65 6d en >= 8) {...mem c690: 63 70 79 28 63 61 63 5f 70 69 6e 2c 20 70 69 6e cpy(cac_pin, pin c6a0: 2c 20 38 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a , 8);..} else {. c6b0: 09 09 6d 65 6d 63 70 79 28 63 61 63 5f 70 69 6e ..memcpy(cac_pin c6c0: 2c 20 70 69 6e 2c 20 70 69 6e 5f 6c 65 6e 29 3b , pin, pin_len); c6d0: 0a 09 7d 0a 0a 09 2f 2a 20 49 73 73 75 65 20 50 ..}.../* Issue P c6e0: 49 4e 20 56 65 72 69 66 79 20 2a 2f 0a 09 73 65 IN Verify */..se c6f0: 6e 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f nd_ret = cackey_ c700: 73 65 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c 20 send_apdu(slot, c710: 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f 37 GSCIS_CLASS_ISO7 c720: 38 31 36 2c 20 47 53 43 49 53 5f 49 4e 53 54 52 816, GSCIS_INSTR c730: 5f 56 45 52 49 46 59 2c 20 30 78 30 30 2c 20 30 _VERIFY, 0x00, 0 c740: 78 30 30 2c 20 73 69 7a 65 6f 66 28 63 61 63 5f x00, sizeof(cac_ c750: 70 69 6e 29 2c 20 63 61 63 5f 70 69 6e 2c 20 30 pin), cac_pin, 0 c760: 78 30 30 2c 20 26 72 65 73 70 6f 6e 73 65 5f 63 x00, &response_c c770: 6f 64 65 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 ode, NULL, NULL) c780: 3b 0a 09 69 66 20 28 73 65 6e 64 5f 72 65 74 20 ;..if (send_ret c790: 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 != CACKEY_PCSC_S c7a0: 5f 4f 4b 29 20 7b 0a 09 09 69 66 20 28 28 72 65 _OK) {...if ((re c7b0: 73 70 6f 6e 73 65 5f 63 6f 64 65 20 26 20 30 78 sponse_code & 0x c7c0: 36 33 43 30 29 20 3d 3d 20 30 78 36 33 43 30 29 63C0) == 0x63C0) c7d0: 20 7b 0a 09 09 09 74 72 69 65 73 5f 72 65 6d 61 {....tries_rema c7e0: 69 6e 69 6e 67 20 3d 20 28 72 65 73 70 6f 6e 73 ining = (respons c7f0: 65 5f 63 6f 64 65 20 26 20 30 78 46 29 3b 0a 0a e_code & 0xF);.. c800: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ c810: 50 52 49 4e 54 46 28 22 50 49 4e 20 56 65 72 69 PRINTF("PIN Veri c820: 66 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 2c fication failed, c830: 20 25 69 20 74 72 69 65 73 20 72 65 6d 61 69 6e %i tries remain c840: 69 6e 67 22 2c 20 74 72 69 65 73 5f 72 65 6d 61 ing", tries_rema c850: 69 6e 69 6e 67 29 3b 0a 0a 09 09 09 69 66 20 28 ining);.....if ( c860: 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 5f tries_remaining_ c870: 70 29 20 7b 0a 09 09 09 09 2a 74 72 69 65 73 5f p) {.....*tries_ c880: 72 65 6d 61 69 6e 69 6e 67 5f 70 20 3d 20 74 72 remaining_p = tr c890: 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 3b 0a 09 ies_remaining;.. c8a0: 09 09 7d 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 ..}.....return(C c8b0: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 42 41 44 ACKEY_PCSC_E_BAD c8c0: 50 49 4e 29 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 PIN);...}....if c8d0: 28 72 65 73 70 6f 6e 73 65 5f 63 6f 64 65 20 3d (response_code = c8e0: 3d 20 30 78 36 39 38 33 29 20 7b 0a 09 09 09 43 = 0x6983) {....C c8f0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN c900: 54 46 28 22 50 49 4e 20 56 65 72 69 66 69 63 61 TF("PIN Verifica c910: 74 69 6f 6e 20 66 61 69 6c 65 64 2c 20 64 65 76 tion failed, dev c920: 69 63 65 20 69 73 20 6c 6f 63 6b 65 64 22 29 3b ice is locked"); c930: 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b .....return(CACK c940: 45 59 5f 50 43 53 43 5f 45 5f 4c 4f 43 4b 45 44 EY_PCSC_E_LOCKED c950: 29 3b 0a 09 09 7d 0a 0a 09 09 72 65 74 75 72 6e );...}....return c960: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 (CACKEY_PCSC_E_G c970: 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 43 41 ENERIC);..}...CA c980: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT c990: 46 28 22 50 49 4e 20 56 65 72 69 66 69 63 61 74 F("PIN Verificat c9a0: 69 6f 6e 20 73 75 63 63 65 65 64 65 64 22 29 3b ion succeeded"); c9b0: 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY c9c0: 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a 0a _PCSC_S_OK);.}.. c9d0: 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 /*. * SYNPOSIS. c9e0: 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 * .... *. * c9f0: 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 ARGUMENTS. * ca00: 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 .... *. * RETUR ca10: 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 2e N VALUE. * . ca20: 2e 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 ... *. * NOTES. ca30: 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f * .... *. */ ca40: 0a 73 74 61 74 69 63 20 63 61 63 6b 65 79 5f 72 .static cackey_r ca50: 65 74 20 63 61 63 6b 65 79 5f 74 6f 6b 65 6e 5f et cackey_token_ ca60: 70 72 65 73 65 6e 74 28 73 74 72 75 63 74 20 63 present(struct c ca70: 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 ackey_slot *slot ca80: 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 ) {..unsigned ch ca90: 61 72 20 63 63 63 5f 61 69 64 5b 5d 20 3d 20 7b ar ccc_aid[] = { caa0: 47 53 43 49 53 5f 41 49 44 5f 43 43 43 7d 3b 0a GSCIS_AID_CCC};. cab0: 09 69 6e 74 20 73 65 6e 64 5f 72 65 74 3b 0a 0a .int send_ret;.. cac0: 09 2f 2a 20 53 65 6c 65 63 74 20 74 68 65 20 43 ./* Select the C cad0: 43 43 20 41 70 70 6c 65 74 20 2a 2f 0a 09 73 65 CC Applet */..se cae0: 6e 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f nd_ret = cackey_ caf0: 73 65 6c 65 63 74 5f 61 70 70 6c 65 74 28 73 6c select_applet(sl cb00: 6f 74 2c 20 63 63 63 5f 61 69 64 2c 20 73 69 7a ot, ccc_aid, siz cb10: 65 6f 66 28 63 63 63 5f 61 69 64 29 29 3b 0a 09 eof(ccc_aid));.. cb20: 69 66 20 28 73 65 6e 64 5f 72 65 74 20 21 3d 20 if (send_ret != cb30: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK cb40: 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 43 41 43 ) {...return(CAC cb50: 4b 45 59 5f 50 43 53 43 5f 53 5f 54 4f 4b 45 4e KEY_PCSC_S_TOKEN cb60: 41 42 53 45 4e 54 29 3b 0a 09 7d 0a 0a 09 72 65 ABSENT);..}...re cb70: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC cb80: 5f 53 5f 54 4f 4b 45 4e 50 52 45 53 45 4e 54 29 _S_TOKENPRESENT) cb90: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f ;.}../*. * SYNPO cba0: 53 49 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 SIS. * .... cbb0: 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 *. * ARGUMENTS. cbc0: 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 * .... *. * cbd0: 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 RETURN VALUE. * cbe0: 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 4e 4f .... *. * NO cbf0: 54 45 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 TES. * .... cc00: 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 73 73 69 *. */.static ssi cc10: 7a 65 5f 74 20 63 61 63 6b 65 79 5f 70 63 73 63 ze_t cackey_pcsc cc20: 5f 69 64 65 6e 74 69 74 79 5f 74 6f 5f 6c 61 62 _identity_to_lab cc30: 65 6c 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 el(struct cackey cc40: 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 2a _pcsc_identity * cc50: 69 64 65 6e 74 69 74 79 2c 20 75 6e 73 69 67 6e identity, unsign cc60: 65 64 20 63 68 61 72 20 2a 6c 61 62 65 6c 5f 62 ed char *label_b cc70: 75 66 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e uf, unsigned lon cc80: 67 20 6c 61 62 65 6c 5f 62 75 66 5f 6c 65 6e 29 g label_buf_len) cc90: 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e {..unsigned lon cca0: 67 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 g certificate_le ccb0: 6e 3b 0a 09 63 68 61 72 20 2a 6c 61 62 65 6c 5f n;..char *label_ ccc0: 61 73 6e 31 3b 0a 09 76 6f 69 64 20 2a 63 65 72 asn1;..void *cer ccd0: 74 69 66 69 63 61 74 65 3b 0a 09 69 6e 74 20 78 tificate;..int x cce0: 35 30 39 5f 72 65 61 64 5f 72 65 74 3b 0a 0a 09 509_read_ret;... ccf0: 63 65 72 74 69 66 69 63 61 74 65 20 3d 20 69 64 certificate = id cd00: 65 6e 74 69 74 79 2d 3e 63 65 72 74 69 66 69 63 entity->certific cd10: 61 74 65 3b 0a 09 63 65 72 74 69 66 69 63 61 74 ate;..certificat cd20: 65 5f 6c 65 6e 20 3d 20 69 64 65 6e 74 69 74 79 e_len = identity cd30: 2d 3e 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 ->certificate_le cd40: 6e 3b 0a 0a 09 69 66 20 28 63 65 72 74 69 66 69 n;...if (certifi cd50: 63 61 74 65 5f 6c 65 6e 20 3c 20 30 29 20 7b 0a cate_len < 0) {. cd60: 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d ..return(-1);..} cd70: 0a 0a 09 78 35 30 39 5f 72 65 61 64 5f 72 65 74 ...x509_read_ret cd80: 20 3d 20 78 35 30 39 5f 74 6f 5f 73 75 62 6a 65 = x509_to_subje cd90: 63 74 28 63 65 72 74 69 66 69 63 61 74 65 2c 20 ct(certificate, cda0: 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 2c certificate_len, cdb0: 20 28 76 6f 69 64 20 2a 2a 29 20 26 6c 61 62 65 (void **) &labe cdc0: 6c 5f 61 73 6e 31 29 3b 0a 09 69 66 20 28 78 35 l_asn1);..if (x5 cdd0: 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 29 09_read_ret < 0) cde0: 20 7b 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b {...return(-1); cdf0: 0a 09 7d 0a 0a 09 78 35 30 39 5f 72 65 61 64 5f ..}...x509_read_ ce00: 72 65 74 20 3d 20 78 35 30 39 5f 64 6e 5f 74 6f ret = x509_dn_to ce10: 5f 73 74 72 69 6e 67 28 6c 61 62 65 6c 5f 61 73 _string(label_as ce20: 6e 31 2c 20 78 35 30 39 5f 72 65 61 64 5f 72 65 n1, x509_read_re ce30: 74 2c 20 28 63 68 61 72 20 2a 29 20 6c 61 62 65 t, (char *) labe ce40: 6c 5f 62 75 66 2c 20 6c 61 62 65 6c 5f 62 75 66 l_buf, label_buf ce50: 5f 6c 65 6e 2c 20 22 43 4e 22 29 3b 0a 09 69 66 _len, "CN");..if ce60: 20 28 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 (x509_read_ret ce70: 3c 3d 20 30 29 20 7b 0a 09 09 78 35 30 39 5f 72 <= 0) {...x509_r ce80: 65 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f 64 ead_ret = x509_d ce90: 6e 5f 74 6f 5f 73 74 72 69 6e 67 28 6c 61 62 65 n_to_string(labe cea0: 6c 5f 61 73 6e 31 2c 20 78 35 30 39 5f 72 65 61 l_asn1, x509_rea ceb0: 64 5f 72 65 74 2c 20 28 63 68 61 72 20 2a 29 20 d_ret, (char *) cec0: 6c 61 62 65 6c 5f 62 75 66 2c 20 6c 61 62 65 6c label_buf, label ced0: 5f 62 75 66 5f 6c 65 6e 2c 20 4e 55 4c 4c 29 3b _buf_len, NULL); cee0: 0a 0a 09 09 69 66 20 28 78 35 30 39 5f 72 65 61 ....if (x509_rea cef0: 64 5f 72 65 74 20 3c 3d 20 30 29 20 7b 0a 09 09 d_ret <= 0) {... cf00: 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d .return(-1);...} cf10: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 78 35 30 ..}...return(x50 cf20: 39 5f 72 65 61 64 5f 72 65 74 29 3b 0a 7d 0a 0a 9_read_ret);.}.. cf30: 2f 2a 20 52 65 74 75 72 6e 73 20 30 20 6f 6e 20 /* Returns 0 on cf40: 73 75 63 63 65 73 73 20 2a 2f 0a 73 74 61 74 69 success */.stati cf50: 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 6d 75 74 c int cackey_mut cf60: 65 78 5f 63 72 65 61 74 65 28 76 6f 69 64 20 2a ex_create(void * cf70: 2a 6d 75 74 65 78 29 20 7b 0a 09 70 74 68 72 65 *mutex) {..pthre cf80: 61 64 5f 6d 75 74 65 78 5f 74 20 2a 70 74 68 72 ad_mutex_t *pthr cf90: 65 61 64 5f 6d 75 74 65 78 3b 0a 09 69 6e 74 20 ead_mutex;..int cfa0: 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c 3b 0a pthread_retval;. cfb0: 09 43 4b 5f 52 56 20 63 75 73 74 6f 6d 5f 72 65 .CK_RV custom_re cfc0: 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 tval;...CACKEY_D cfd0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal cfe0: 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 28 63 led.");...if ((c cff0: 61 63 6b 65 79 5f 61 72 67 73 2e 66 6c 61 67 73 ackey_args.flags d000: 20 26 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e & CKF_OS_LOCKIN d010: 47 5f 4f 4b 29 20 3d 3d 20 43 4b 46 5f 4f 53 5f G_OK) == CKF_OS_ d020: 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 7b 0a 09 09 LOCKING_OK) {... d030: 70 74 68 72 65 61 64 5f 6d 75 74 65 78 20 3d 20 pthread_mutex = d040: 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 70 malloc(sizeof(*p d050: 74 68 72 65 61 64 5f 6d 75 74 65 78 29 29 3b 0a thread_mutex));. d060: 09 09 69 66 20 28 21 70 74 68 72 65 61 64 5f 6d ..if (!pthread_m d070: 75 74 65 78 29 20 7b 0a 09 09 09 43 41 43 4b 45 utex) {....CACKE d080: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" d090: 46 61 69 6c 65 64 20 74 6f 20 61 6c 6c 6f 63 61 Failed to alloca d0a0: 74 65 20 6d 65 6d 6f 72 79 2e 22 29 3b 0a 0a 09 te memory.");... d0b0: 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 ..return(-1);... d0c0: 7d 0a 0a 09 09 70 74 68 72 65 61 64 5f 72 65 74 }....pthread_ret d0d0: 76 61 6c 20 3d 20 70 74 68 72 65 61 64 5f 6d 75 val = pthread_mu d0e0: 74 65 78 5f 69 6e 69 74 28 70 74 68 72 65 61 64 tex_init(pthread d0f0: 5f 6d 75 74 65 78 2c 20 4e 55 4c 4c 29 3b 0a 09 _mutex, NULL);.. d100: 09 69 66 20 28 70 74 68 72 65 61 64 5f 72 65 74 .if (pthread_ret d110: 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 09 43 val != 0) {....C d120: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN d130: 54 46 28 22 70 74 68 72 65 61 64 5f 6d 75 74 65 TF("pthread_mute d140: 78 5f 69 6e 69 74 28 29 20 72 65 74 75 72 6e 65 x_init() returne d150: 64 20 65 72 72 6f 72 20 28 25 69 29 2e 22 2c 20 d error (%i).", d160: 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c 29 3b pthread_retval); d170: 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b .....return(-1); d180: 0a 09 09 7d 0a 0a 09 09 2a 6d 75 74 65 78 20 3d ...}....*mutex = d190: 20 70 74 68 72 65 61 64 5f 6d 75 74 65 78 3b 0a pthread_mutex;. d1a0: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 28 .} else {...if ( d1b0: 63 61 63 6b 65 79 5f 61 72 67 73 2e 43 72 65 61 cackey_args.Crea d1c0: 74 65 4d 75 74 65 78 29 20 7b 0a 09 09 09 63 75 teMutex) {....cu d1d0: 73 74 6f 6d 5f 72 65 74 76 61 6c 20 3d 20 63 61 stom_retval = ca d1e0: 63 6b 65 79 5f 61 72 67 73 2e 43 72 65 61 74 65 ckey_args.Create d1f0: 4d 75 74 65 78 28 6d 75 74 65 78 29 3b 0a 0a 09 Mutex(mutex);... d200: 09 09 69 66 20 28 63 75 73 74 6f 6d 5f 72 65 74 ..if (custom_ret d210: 76 61 6c 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b val != CKR_OK) { d220: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU d230: 47 5f 50 52 49 4e 54 46 28 22 63 61 63 6b 65 79 G_PRINTF("cackey d240: 5f 61 72 67 73 2e 43 72 65 61 74 65 4d 75 74 65 _args.CreateMute d250: 78 28 29 20 72 65 74 75 72 6e 65 64 20 65 72 72 x() returned err d260: 6f 72 20 28 25 6c 69 29 2e 22 2c 20 28 6c 6f 6e or (%li).", (lon d270: 67 29 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c g) custom_retval d280: 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 2d );......return(- d290: 31 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 1);....}...}..}. d2a0: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P d2b0: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning d2c0: 20 73 75 63 65 73 73 66 75 6c 6c 79 20 28 30 29 sucessfully (0) d2d0: 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 30 29 3b ");...return(0); d2e0: 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 73 20 30 .}../* Returns 0 d2f0: 20 6f 6e 20 73 75 63 63 65 73 73 20 2a 2f 0a 73 on success */.s d300: 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 tatic int cackey d310: 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 76 6f 69 64 _mutex_lock(void d320: 20 2a 6d 75 74 65 78 29 20 7b 0a 09 70 74 68 72 *mutex) {..pthr d330: 65 61 64 5f 6d 75 74 65 78 5f 74 20 2a 70 74 68 ead_mutex_t *pth d340: 72 65 61 64 5f 6d 75 74 65 78 3b 0a 09 69 6e 74 read_mutex;..int d350: 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c 3b pthread_retval; d360: 0a 09 43 4b 5f 52 56 20 63 75 73 74 6f 6d 5f 72 ..CK_RV custom_r d370: 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f etval;...CACKEY_ d380: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca d390: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 28 lled.");...if (( d3a0: 63 61 63 6b 65 79 5f 61 72 67 73 2e 66 6c 61 67 cackey_args.flag d3b0: 73 20 26 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 s & CKF_OS_LOCKI d3c0: 4e 47 5f 4f 4b 29 20 3d 3d 20 43 4b 46 5f 4f 53 NG_OK) == CKF_OS d3d0: 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 7b 0a 09 _LOCKING_OK) {.. d3e0: 09 70 74 68 72 65 61 64 5f 6d 75 74 65 78 20 3d .pthread_mutex = d3f0: 20 6d 75 74 65 78 3b 0a 0a 09 09 70 74 68 72 65 mutex;....pthre d400: 61 64 5f 72 65 74 76 61 6c 20 3d 20 70 74 68 72 ad_retval = pthr d410: 65 61 64 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 70 ead_mutex_lock(p d420: 74 68 72 65 61 64 5f 6d 75 74 65 78 29 3b 0a 09 thread_mutex);.. d430: 09 69 66 20 28 70 74 68 72 65 61 64 5f 72 65 74 .if (pthread_ret d440: 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 09 43 val != 0) {....C d450: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN d460: 54 46 28 22 70 74 68 72 65 61 64 5f 6d 75 74 65 TF("pthread_mute d470: 78 5f 6c 6f 63 6b 28 29 20 72 65 74 75 72 6e 65 x_lock() returne d480: 64 20 65 72 72 6f 72 20 28 25 69 29 2e 22 2c 20 d error (%i).", d490: 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c 29 3b pthread_retval); d4a0: 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b .....return(-1); d4b0: 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 ...}..} else {.. d4c0: 09 69 66 20 28 63 61 63 6b 65 79 5f 61 72 67 73 .if (cackey_args d4d0: 2e 4c 6f 63 6b 4d 75 74 65 78 29 20 7b 0a 09 09 .LockMutex) {... d4e0: 09 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 3d .custom_retval = d4f0: 20 63 61 63 6b 65 79 5f 61 72 67 73 2e 4c 6f 63 cackey_args.Loc d500: 6b 4d 75 74 65 78 28 6d 75 74 65 78 29 3b 0a 0a kMutex(mutex);.. d510: 09 09 09 69 66 20 28 63 75 73 74 6f 6d 5f 72 65 ...if (custom_re d520: 74 76 61 6c 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 tval != CKR_OK) d530: 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {.....CACKEY_DEB d540: 55 47 5f 50 52 49 4e 54 46 28 22 63 61 63 6b 65 UG_PRINTF("cacke d550: 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 y_args.LockMutex d560: 28 29 20 72 65 74 75 72 6e 65 64 20 65 72 72 6f () returned erro d570: 72 20 28 25 6c 69 29 2e 22 2c 20 28 6c 6f 6e 67 r (%li).", (long d580: 29 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 29 ) custom_retval) d590: 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 2d 31 ;......return(-1 d5a0: 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 0a );....}...}..}.. d5b0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR d5c0: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning d5d0: 73 75 63 65 73 73 66 75 6c 6c 79 20 28 30 29 22 sucessfully (0)" d5e0: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 30 29 3b 0a );...return(0);. d5f0: 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 73 20 30 20 }../* Returns 0 d600: 6f 6e 20 73 75 63 63 65 73 73 20 2a 2f 0a 73 74 on success */.st d610: 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f atic int cackey_ d620: 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 76 6f 69 mutex_unlock(voi d630: 64 20 2a 6d 75 74 65 78 29 20 7b 0a 09 70 74 68 d *mutex) {..pth d640: 72 65 61 64 5f 6d 75 74 65 78 5f 74 20 2a 70 74 read_mutex_t *pt d650: 68 72 65 61 64 5f 6d 75 74 65 78 3b 0a 09 69 6e hread_mutex;..in d660: 74 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c t pthread_retval d670: 3b 0a 09 43 4b 5f 52 56 20 63 75 73 74 6f 6d 5f ;..CK_RV custom_ d680: 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 retval;...CACKEY d690: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C d6a0: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( d6b0: 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 66 6c 61 (cackey_args.fla d6c0: 67 73 20 26 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b gs & CKF_OS_LOCK d6d0: 49 4e 47 5f 4f 4b 29 20 3d 3d 20 43 4b 46 5f 4f ING_OK) == CKF_O d6e0: 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 7b 0a S_LOCKING_OK) {. d6f0: 09 09 70 74 68 72 65 61 64 5f 6d 75 74 65 78 20 ..pthread_mutex d700: 3d 20 6d 75 74 65 78 3b 0a 0a 09 09 70 74 68 72 = mutex;....pthr d710: 65 61 64 5f 72 65 74 76 61 6c 20 3d 20 70 74 68 ead_retval = pth d720: 72 65 61 64 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 read_mutex_unloc d730: 6b 28 70 74 68 72 65 61 64 5f 6d 75 74 65 78 29 k(pthread_mutex) d740: 3b 0a 09 09 69 66 20 28 70 74 68 72 65 61 64 5f ;...if (pthread_ d750: 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. d760: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P d770: 52 49 4e 54 46 28 22 70 74 68 72 65 61 64 5f 6d RINTF("pthread_m d780: 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 29 20 72 65 utex_unlock() re d790: 74 75 72 6e 65 64 20 65 72 72 6f 72 20 28 25 69 turned error (%i d7a0: 29 2e 22 2c 20 70 74 68 72 65 61 64 5f 72 65 74 ).", pthread_ret d7b0: 76 61 6c 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e val);.....return d7c0: 28 2d 31 29 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 (-1);...}..} els d7d0: 65 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 e {...if (cackey d7e0: 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65 _args.UnlockMute d7f0: 78 29 20 7b 0a 09 09 09 63 75 73 74 6f 6d 5f 72 x) {....custom_r d800: 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 61 etval = cackey_a d810: 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 28 rgs.UnlockMutex( d820: 6d 75 74 65 78 29 3b 0a 0a 09 09 09 69 66 20 28 mutex);.....if ( d830: 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 21 3d custom_retval != d840: 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 43 CKR_OK) {.....C d850: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN d860: 54 46 28 22 63 61 63 6b 65 79 5f 61 72 67 73 2e TF("cackey_args. d870: 55 6e 6c 6f 63 6b 4d 75 74 65 78 28 29 20 72 65 UnlockMutex() re d880: 74 75 72 6e 65 64 20 65 72 72 6f 72 20 28 25 6c turned error (%l d890: 69 29 2e 22 2c 20 28 6c 6f 6e 67 29 20 63 75 73 i).", (long) cus d8a0: 74 6f 6d 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 tom_retval);.... d8b0: 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 ..return(-1);... d8c0: 09 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b .}...}..}...CACK d8d0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( d8e0: 22 52 65 74 75 72 6e 69 6e 67 20 73 75 63 65 73 "Returning suces d8f0: 73 66 75 6c 6c 79 20 28 30 29 22 29 3b 0a 0a 09 sfully (0)");... d900: 72 65 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 73 74 return(0);.}..st d910: 61 74 69 63 20 43 4b 5f 41 54 54 52 49 42 55 54 atic CK_ATTRIBUT d920: 45 5f 50 54 52 20 63 61 63 6b 65 79 5f 67 65 74 E_PTR cackey_get d930: 5f 61 74 74 72 69 62 75 74 65 73 28 43 4b 5f 4f _attributes(CK_O d940: 42 4a 45 43 54 5f 43 4c 41 53 53 20 6f 62 6a 65 BJECT_CLASS obje d950: 63 74 63 6c 61 73 73 2c 20 73 74 72 75 63 74 20 ctclass, struct d960: 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e cackey_pcsc_iden d970: 74 69 74 79 20 2a 69 64 65 6e 74 69 74 79 2c 20 tity *identity, d980: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 unsigned long id d990: 65 6e 74 69 74 79 5f 6e 75 6d 2c 20 43 4b 5f 55 entity_num, CK_U d9a0: 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 43 6f 75 6e LONG_PTR pulCoun d9b0: 74 29 20 7b 0a 09 73 74 61 74 69 63 20 43 4b 5f t) {..static CK_ d9c0: 42 42 4f 4f 4c 20 63 6b 5f 74 72 75 65 20 3d 20 BBOOL ck_true = d9d0: 31 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f 42 42 1;..static CK_BB d9e0: 4f 4f 4c 20 63 6b 5f 66 61 6c 73 65 20 3d 20 30 OOL ck_false = 0 d9f0: 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 6e 75 6d 61 ;..CK_ULONG numa da00: 74 74 72 73 20 3d 20 30 2c 20 72 65 74 76 61 6c ttrs = 0, retval da10: 5f 63 6f 75 6e 74 3b 0a 09 43 4b 5f 41 54 54 52 _count;..CK_ATTR da20: 49 42 55 54 45 5f 54 59 50 45 20 63 75 72 72 5f IBUTE_TYPE curr_ da30: 61 74 74 72 5f 74 79 70 65 3b 0a 09 43 4b 5f 41 attr_type;..CK_A da40: 54 54 52 49 42 55 54 45 20 63 75 72 72 5f 61 74 TTRIBUTE curr_at da50: 74 72 2c 20 2a 72 65 74 76 61 6c 3b 0a 09 43 4b tr, *retval;..CK da60: 5f 56 4f 49 44 5f 50 54 52 20 70 56 61 6c 75 65 _VOID_PTR pValue da70: 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 75 6c 56 61 ;..CK_ULONG ulVa da80: 6c 75 65 4c 65 6e 3b 0a 09 43 4b 5f 4f 42 4a 45 lueLen;..CK_OBJE da90: 43 54 5f 43 4c 41 53 53 20 63 6b 5f 6f 62 6a 65 CT_CLASS ck_obje daa0: 63 74 5f 63 6c 61 73 73 3b 0a 09 43 4b 5f 43 45 ct_class;..CK_CE dab0: 52 54 49 46 49 43 41 54 45 5f 54 59 50 45 20 63 RTIFICATE_TYPE c dac0: 6b 5f 63 65 72 74 69 66 69 63 61 74 65 5f 74 79 k_certificate_ty dad0: 70 65 3b 0a 09 43 4b 5f 4b 45 59 5f 54 59 50 45 pe;..CK_KEY_TYPE dae0: 20 63 6b 5f 6b 65 79 5f 74 79 70 65 3b 0a 09 43 ck_key_type;..C daf0: 4b 5f 55 54 46 38 43 48 41 52 20 75 63 54 6d 70 K_UTF8CHAR ucTmp db00: 42 75 66 5b 31 30 32 34 5d 3b 0a 09 75 6e 73 69 Buf[1024];..unsi db10: 67 6e 65 64 20 63 68 61 72 20 2a 63 65 72 74 69 gned char *certi db20: 66 69 63 61 74 65 3b 0a 09 73 73 69 7a 65 5f 74 ficate;..ssize_t db30: 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e certificate_len db40: 20 3d 20 2d 31 2c 20 78 35 30 39 5f 72 65 61 64 = -1, x509_read db50: 5f 72 65 74 3b 0a 09 69 6e 74 20 70 56 61 6c 75 _ret;..int pValu db60: 65 5f 66 72 65 65 3b 0a 0a 09 43 41 43 4b 45 59 e_free;...CACKEY db70: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C db80: 61 6c 6c 65 64 20 28 6f 62 6a 65 63 74 43 6c 61 alled (objectCla db90: 73 73 20 3d 20 25 6c 75 2c 20 69 64 65 6e 74 69 ss = %lu, identi dba0: 74 79 5f 6e 75 6d 20 3d 20 25 6c 75 29 2e 22 2c ty_num = %lu).", dbb0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) dbc0: 20 6f 62 6a 65 63 74 63 6c 61 73 73 2c 20 69 64 objectclass, id dbd0: 65 6e 74 69 74 79 5f 6e 75 6d 29 3b 0a 0a 09 69 entity_num);...i dbe0: 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 f (objectclass ! dbf0: 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 = CKO_CERTIFICAT dc00: 45 20 26 26 20 6f 62 6a 65 63 74 63 6c 61 73 73 E && objectclass dc10: 20 21 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b != CKO_PUBLIC_K dc20: 45 59 20 26 26 20 6f 62 6a 65 63 74 63 6c 61 73 EY && objectclas dc30: 73 20 21 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 s != CKO_PRIVATE dc40: 5f 4b 45 59 29 20 7b 0a 09 09 43 41 43 4b 45 59 _KEY) {...CACKEY dc50: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R dc60: 65 74 75 72 6e 69 6e 67 20 30 20 6f 62 6a 65 63 eturning 0 objec dc70: 74 73 20 28 4e 55 4c 4c 29 2c 20 69 6e 76 61 6c ts (NULL), inval dc80: 69 64 20 6f 62 6a 65 63 74 20 63 6c 61 73 73 22 id object class" dc90: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c );....return(NUL dca0: 4c 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 47 65 74 20 L);..}.../* Get dcb0: 43 65 72 74 20 2a 2f 0a 09 69 66 20 28 69 64 65 Cert */..if (ide dcc0: 6e 74 69 74 79 20 3d 3d 20 4e 55 4c 4c 29 20 7b ntity == NULL) { dcd0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ dce0: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin dcf0: 67 20 30 20 6f 62 6a 65 63 74 73 20 28 4e 55 4c g 0 objects (NUL dd00: 4c 29 2c 20 69 6e 76 61 6c 69 64 20 69 64 65 6e L), invalid iden dd10: 74 69 79 20 70 72 6f 76 69 64 65 64 22 29 3b 0a tiy provided");. dd20: 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b ...return(NULL); dd30: 0a 09 7d 0a 0a 09 63 65 72 74 69 66 69 63 61 74 ..}...certificat dd40: 65 20 3d 20 69 64 65 6e 74 69 74 79 2d 3e 63 65 e = identity->ce dd50: 72 74 69 66 69 63 61 74 65 3b 0a 09 63 65 72 74 rtificate;..cert dd60: 69 66 69 63 61 74 65 5f 6c 65 6e 20 3d 20 69 64 ificate_len = id dd70: 65 6e 74 69 74 79 2d 3e 63 65 72 74 69 66 69 63 entity->certific dd80: 61 74 65 5f 6c 65 6e 3b 0a 0a 09 69 66 20 28 63 ate_len;...if (c dd90: 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3d ertificate_len = dda0: 3d 20 2d 31 20 7c 7c 20 63 65 72 74 69 66 69 63 = -1 || certific ddb0: 61 74 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 ate == NULL) {.. ddc0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR ddd0: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning dde0: 30 20 6f 62 6a 65 63 74 73 20 28 4e 55 4c 4c 29 0 objects (NULL) ddf0: 2c 20 74 68 69 73 20 69 64 65 6e 74 69 74 79 20 , this identity de00: 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 6e does not have an de10: 20 58 2e 35 30 39 20 63 65 72 74 69 66 69 63 61 X.509 certifica de20: 74 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 te associated wi de30: 74 68 20 69 74 20 61 6e 64 20 77 69 6c 6c 20 6e th it and will n de40: 6f 74 20 77 6f 72 6b 22 29 3b 0a 0a 09 09 72 65 ot work");....re de50: 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a turn(NULL);..}.. de60: 09 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 ./* Verify that de70: 63 65 72 74 69 66 69 63 61 74 65 20 69 73 20 41 certificate is A de80: 53 4e 2e 31 20 65 6e 63 6f 64 65 64 20 58 2e 35 SN.1 encoded X.5 de90: 30 39 20 63 65 72 74 69 66 69 63 61 74 65 20 2a 09 certificate * dea0: 2f 0a 09 69 66 20 28 78 35 30 39 5f 74 6f 5f 73 /..if (x509_to_s deb0: 65 72 69 61 6c 28 63 65 72 74 69 66 69 63 61 74 erial(certificat dec0: 65 2c 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c e, certificate_l ded0: 65 6e 2c 20 4e 55 4c 4c 29 20 3c 20 30 29 20 7b en, NULL) < 0) { dee0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ def0: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin df00: 67 20 30 20 6f 62 6a 65 63 74 73 20 28 4e 55 4c g 0 objects (NUL df10: 4c 29 2c 20 74 68 65 20 58 2e 35 30 39 20 63 65 L), the X.509 ce df20: 72 74 69 66 69 63 61 74 65 20 61 73 73 6f 63 69 rtificate associ df30: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 69 ated with this i df40: 64 65 6e 74 69 74 79 20 69 73 20 6e 6f 74 20 76 dentity is not v df50: 61 6c 69 64 22 29 3b 0a 0a 09 09 72 65 74 75 72 alid");....retur df60: 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 72 65 n(NULL);..}...re df70: 74 76 61 6c 5f 63 6f 75 6e 74 20 3d 20 31 36 3b tval_count = 16; df80: 0a 09 72 65 74 76 61 6c 20 3d 20 6d 61 6c 6c 6f ..retval = mallo df90: 63 28 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 2a c(retval_count * dfa0: 20 73 69 7a 65 6f 66 28 2a 72 65 74 76 61 6c 29 sizeof(*retval) dfb0: 29 3b 0a 0a 09 66 6f 72 20 28 63 75 72 72 5f 61 );...for (curr_a dfc0: 74 74 72 5f 74 79 70 65 20 3d 20 30 3b 20 63 75 ttr_type = 0; cu dfd0: 72 72 5f 61 74 74 72 5f 74 79 70 65 20 3c 20 30 rr_attr_type < 0 dfe0: 78 63 65 35 33 36 33 35 66 3b 20 63 75 72 72 5f xce53635f; curr_ dff0: 61 74 74 72 5f 74 79 70 65 2b 2b 29 20 7b 0a 09 attr_type++) {.. e000: 09 69 66 20 28 63 75 72 72 5f 61 74 74 72 5f 74 .if (curr_attr_t e010: 79 70 65 20 3d 3d 20 30 78 38 30 30 29 20 7b 0a ype == 0x800) {. e020: 09 09 09 63 75 72 72 5f 61 74 74 72 5f 74 79 70 ...curr_attr_typ e030: 65 20 3d 20 30 78 63 65 35 33 36 33 30 30 3b 0a e = 0xce536300;. e040: 09 09 7d 0a 0a 09 09 70 56 61 6c 75 65 5f 66 72 ..}....pValue_fr e050: 65 65 20 3d 20 30 3b 0a 09 09 70 56 61 6c 75 65 ee = 0;...pValue e060: 20 3d 20 4e 55 4c 4c 3b 0a 09 09 75 6c 56 61 6c = NULL;...ulVal e070: 75 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47 ueLen = (CK_LONG e080: 29 20 2d 31 3b 0a 0a 09 09 73 77 69 74 63 68 20 ) -1;....switch e090: 28 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 (curr_attr_type) e0a0: 20 7b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 43 {....case CKA_C e0b0: 4c 41 53 53 3a 0a 09 09 09 09 43 41 43 4b 45 59 LASS:.....CACKEY e0c0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R e0d0: 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 equesting attrib e0e0: 75 74 65 20 43 4b 41 5f 43 4c 41 53 53 20 28 30 ute CKA_CLASS (0 e0f0: 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 x%08lx) ...", (u e100: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 nsigned long) cu e110: 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a rr_attr_type);.. e120: 09 09 09 09 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c ....ck_object_cl e130: 61 73 73 20 3d 20 6f 62 6a 65 63 74 63 6c 61 73 ass = objectclas e140: 73 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d s;......pValue = e150: 20 26 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c 61 73 &ck_object_clas e160: 73 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 s;.....ulValueLe e170: 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 6f 62 n = sizeof(ck_ob e180: 6a 65 63 74 5f 63 6c 61 73 73 29 3b 0a 0a 09 09 ject_class);.... e190: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P e1a0: 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 RINTF(" ... retu e1b0: 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c rning %lu (%p/%l e1c0: 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c u)", (unsigned l e1d0: 6f 6e 67 29 20 2a 28 28 43 4b 5f 4f 42 4a 45 43 ong) *((CK_OBJEC e1e0: 54 5f 43 4c 41 53 53 20 2a 29 20 70 56 61 6c 75 T_CLASS *) pValu e1f0: 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 e), pValue, (uns e200: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 igned long) ulVa e210: 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 lueLen);......br e220: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 eak;....case CKA e230: 5f 54 4f 4b 45 4e 3a 0a 09 09 09 09 43 41 43 4b _TOKEN:.....CACK e240: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( e250: 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 "Requesting attr e260: 69 62 75 74 65 20 43 4b 41 5f 54 4f 4b 45 4e 20 ibute CKA_TOKEN e270: 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 (0x%08lx) ...", e280: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) e290: 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b curr_attr_type); e2a0: 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 ......pValue = & e2b0: 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 75 6c 56 ck_true;.....ulV e2c0: 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 alueLen = sizeof e2d0: 28 63 6b 5f 74 72 75 65 29 3b 0a 0a 09 09 09 09 (ck_true);...... e2e0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI e2f0: 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e NTF(" ... return e300: 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 ing %lu (%p/%lu) e310: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon e320: 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a g) *((CK_BBOOL * e330: 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 ) pValue), pValu e340: 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e e, (unsigned lon e350: 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a g) ulValueLen);. e360: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c e370: 61 73 65 20 43 4b 41 5f 4d 4f 44 49 46 49 41 42 ase CKA_MODIFIAB e380: 4c 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 LE:.....CACKEY_D e390: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 EBUG_PRINTF("Req e3a0: 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 uesting attribut e3b0: 65 20 43 4b 41 5f 4d 4f 44 49 46 49 41 42 4c 45 e CKA_MODIFIABLE e3c0: 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", e3d0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) e3e0: 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) e3f0: 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 ;......pValue = e400: 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 09 75 &ck_false;.....u e410: 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 lValueLen = size e420: 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 0a 09 of(ck_false);... e430: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ e440: 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 PRINTF(" ... ret e450: 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 urning %lu (%p/% e460: 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 lu)", (unsigned e470: 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f long) *((CK_BBOO e480: 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 L *) pValue), pV e490: 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 alue, (unsigned e4a0: 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e long) ulValueLen e4b0: 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 );......break;.. e4c0: 09 09 63 61 73 65 20 43 4b 41 5f 4c 41 42 45 4c ..case CKA_LABEL e4d0: 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB e4e0: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque e4f0: 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute e500: 43 4b 41 5f 4c 41 42 45 4c 20 28 30 78 25 30 38 CKA_LABEL (0x%08 e510: 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig e520: 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a e530: 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... e540: 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 6e 61 6d /* Determine nam e550: 65 20 2a 2f 0a 09 09 09 09 78 35 30 39 5f 72 65 e */.....x509_re e560: 61 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f ad_ret = cackey_ e570: 70 63 73 63 5f 69 64 65 6e 74 69 74 79 5f 74 6f pcsc_identity_to e580: 5f 6c 61 62 65 6c 28 69 64 65 6e 74 69 74 79 2c _label(identity, e590: 20 75 63 54 6d 70 42 75 66 2c 20 73 69 7a 65 6f ucTmpBuf, sizeo e5a0: 66 28 75 63 54 6d 70 42 75 66 29 29 3b 0a 09 09 f(ucTmpBuf));... e5b0: 09 09 69 66 20 28 78 35 30 39 5f 72 65 61 64 5f ..if (x509_read_ e5c0: 72 65 74 20 3e 20 30 29 20 7b 0a 09 09 09 09 09 ret > 0) {...... e5d0: 70 56 61 6c 75 65 20 3d 20 75 63 54 6d 70 42 75 pValue = ucTmpBu e5e0: 66 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75 65 4c f;......ulValueL e5f0: 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 64 5f 72 en = x509_read_r e600: 65 74 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 et;.....}......C e610: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN e620: 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 TF(" ... returni e630: 6e 67 20 28 25 70 2f 25 6c 75 29 22 2c 20 70 56 ng (%p/%lu)", pV e640: 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 alue, (unsigned e650: 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e long) ulValueLen e660: 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 );......break;.. e670: 09 09 63 61 73 65 20 43 4b 41 5f 56 41 4c 55 45 ..case CKA_VALUE e680: 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB e690: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque e6a0: 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute e6b0: 43 4b 41 5f 56 41 4c 55 45 20 28 30 78 25 30 38 CKA_VALUE (0x%08 e6c0: 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig e6d0: 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a e6e0: 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... e6f0: 73 77 69 74 63 68 20 28 6f 62 6a 65 63 74 63 6c switch (objectcl e700: 61 73 73 29 20 7b 0a 09 09 09 09 09 63 61 73 65 ass) {......case e710: 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 CKO_PRIVATE_KEY e720: 3a 0a 09 09 09 09 09 09 43 41 43 4b 45 59 5f 44 :.......CACKEY_D e730: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e EBUG_PRINTF(" .. e740: 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e . but not gettin e750: 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20 g it because we e760: 61 72 65 20 61 20 70 72 69 76 61 74 65 20 6b 65 are a private ke e770: 79 2e 22 29 3b 0a 0a 09 09 09 09 09 09 62 72 65 y.");........bre e780: 61 6b 3b 0a 09 09 09 09 09 63 61 73 65 20 43 4b ak;......case CK e790: 4f 5f 50 55 42 4c 49 43 5f 4b 45 59 3a 0a 09 09 O_PUBLIC_KEY:... e7a0: 09 09 09 09 2f 2a 20 58 58 58 3a 20 54 4f 44 4f ..../* XXX: TODO e7b0: 20 2a 2f 0a 0a 09 09 09 09 09 09 62 72 65 61 6b */........break e7c0: 3b 0a 09 09 09 09 09 63 61 73 65 20 43 4b 4f 5f ;......case CKO_ e7d0: 43 45 52 54 49 46 49 43 41 54 45 3a 0a 09 09 09 CERTIFICATE:.... e7e0: 09 09 09 70 56 61 6c 75 65 20 3d 20 63 65 72 74 ...pValue = cert e7f0: 69 66 69 63 61 74 65 3b 0a 09 09 09 09 09 09 75 ificate;.......u e800: 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 63 65 72 74 lValueLen = cert e810: 69 66 69 63 61 74 65 5f 6c 65 6e 3b 0a 0a 09 09 ificate_len;.... e820: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d ....break;.....} e830: 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB e840: 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... e850: 72 65 74 75 72 6e 69 6e 67 20 25 70 2f 25 6c 75 returning %p/%lu e860: 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 ", pValue, (unsi e870: 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c gned long) ulVal e880: 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 ueLen);......bre e890: 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f ak;....case CKA_ e8a0: 49 53 53 55 45 52 3a 0a 09 09 09 09 43 41 43 4b ISSUER:.....CACK e8b0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( e8c0: 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 "Requesting attr e8d0: 69 62 75 74 65 20 43 4b 41 5f 49 53 53 55 45 52 ibute CKA_ISSUER e8e0: 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", e8f0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) e900: 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) e910: 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 ;......if (objec e920: 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43 45 tclass != CKO_CE e930: 52 54 49 46 49 43 41 54 45 29 20 7b 0a 09 09 09 RTIFICATE) {.... e940: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P e950: 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 RINTF(" ... but e960: 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 not getting it b e970: 65 63 61 75 73 65 20 77 65 20 61 72 65 20 6e 6f ecause we are no e980: 74 20 61 20 63 65 72 74 69 66 69 63 61 74 65 2e t a certificate. e990: 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b ");.......break; e9a0: 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 .....}......if ( e9b0: 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 certificate_len e9c0: 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 78 35 30 >= 0) {......x50 e9d0: 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 30 9_read_ret = x50 e9e0: 39 5f 74 6f 5f 69 73 73 75 65 72 28 63 65 72 74 9_to_issuer(cert e9f0: 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 66 69 ificate, certifi ea00: 63 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 cate_len, &pValu ea10: 65 29 3b 0a 09 09 09 09 09 69 66 20 28 78 35 30 e);......if (x50 ea20: 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 29 20 9_read_ret < 0) ea30: 7b 0a 09 09 09 09 09 09 70 56 61 6c 75 65 20 3d {.......pValue = ea40: 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 6c NULL;......} el ea50: 73 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 6c se {.......ulVal ea60: 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 ueLen = x509_rea ea70: 64 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 09 d_ret;......}... ea80: 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f ..}......CACKEY_ ea90: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . eaa0: 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 70 2f .. returning %p/ eab0: 25 6c 75 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 %lu", pValue, (u eac0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c nsigned long) ul ead0: 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 ValueLen);...... eae0: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 break;....case C eaf0: 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52 KA_SERIAL_NUMBER eb00: 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB eb10: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque eb20: 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute eb30: 43 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 CKA_SERIAL_NUMBE eb40: 52 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 R (0x%08lx) ..." eb50: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long eb60: 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 ) curr_attr_type eb70: 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 );......if (obje eb80: 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43 ctclass != CKO_C eb90: 45 52 54 49 46 49 43 41 54 45 29 20 7b 0a 09 09 ERTIFICATE) {... eba0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ ebb0: 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 PRINTF(" ... but ebc0: 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 not getting it ebd0: 62 65 63 61 75 73 65 20 77 65 20 61 72 65 20 6e because we are n ebe0: 6f 74 20 61 20 63 65 72 74 69 66 69 63 61 74 65 ot a certificate ebf0: 2e 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b .");.......break ec00: 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 ;.....}......if ec10: 28 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e (certificate_len ec20: 20 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 78 35 >= 0) {......x5 ec30: 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 09_read_ret = x5 ec40: 30 39 5f 74 6f 5f 73 65 72 69 61 6c 28 63 65 72 09_to_serial(cer ec50: 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 66 tificate, certif ec60: 69 63 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c icate_len, &pVal ec70: 75 65 29 3b 0a 09 09 09 09 09 69 66 20 28 78 35 ue);......if (x5 ec80: 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 29 09_read_ret < 0) ec90: 20 7b 0a 09 09 09 09 09 09 70 56 61 6c 75 65 20 {.......pValue eca0: 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 = NULL;......} e ecb0: 6c 73 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 lse {.......ulVa ecc0: 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 lueLen = x509_re ecd0: 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 ad_ret;......}.. ece0: 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 ...}......CACKEY ecf0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" ed00: 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 28 25 ... returning (% ed10: 70 2f 25 6c 75 29 22 2c 20 70 56 61 6c 75 65 2c p/%lu)", pValue, ed20: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) ed30: 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... ed40: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas ed50: 65 20 43 4b 41 5f 53 55 42 4a 45 43 54 3a 0a 09 e CKA_SUBJECT:.. ed60: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ ed70: 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti ed80: 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA ed90: 5f 53 55 42 4a 45 43 54 20 28 30 78 25 30 38 6c _SUBJECT (0x%08l eda0: 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e x) ...", (unsign edb0: 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 ed long) curr_at edc0: 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 tr_type);......i edd0: 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 f (objectclass ! ede0: 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 = CKO_CERTIFICAT edf0: 45 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 E) {......CACKEY ee00: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" ee10: 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 ... but not gett ee20: 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 ing it because w ee30: 65 20 61 72 65 20 6e 6f 74 20 61 20 63 65 72 74 e are not a cert ee40: 69 66 69 63 61 74 65 2e 22 29 3b 0a 0a 09 09 09 ificate.");..... ee50: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a ..break;.....}.. ee60: 09 09 09 09 69 66 20 28 63 65 72 74 69 66 69 63 ....if (certific ee70: 61 74 65 5f 6c 65 6e 20 3e 3d 20 30 29 20 7b 0a ate_len >= 0) {. ee80: 09 09 09 09 09 78 35 30 39 5f 72 65 61 64 5f 72 .....x509_read_r ee90: 65 74 20 3d 20 78 35 30 39 5f 74 6f 5f 73 75 62 et = x509_to_sub eea0: 6a 65 63 74 28 63 65 72 74 69 66 69 63 61 74 65 ject(certificate eeb0: 2c 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 , certificate_le eec0: 6e 2c 20 26 70 56 61 6c 75 65 29 3b 0a 09 09 09 n, &pValue);.... eed0: 09 09 69 66 20 28 78 35 30 39 5f 72 65 61 64 5f ..if (x509_read_ eee0: 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 09 09 09 ret < 0) {...... eef0: 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a .pValue = NULL;. ef00: 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 .....} else {... ef10: 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = ef20: 20 78 35 30 39 5f 72 65 61 64 5f 72 65 74 3b 0a x509_read_ret;. ef30: 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 .....}.....}.... ef40: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P ef50: 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 RINTF(" ... retu ef60: 72 6e 69 6e 67 20 25 70 2f 25 6c 75 22 2c 20 70 rning %p/%lu", p ef70: 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 Value, (unsigned ef80: 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 long) ulValueLe ef90: 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a n);......break;. efa0: 09 09 09 63 61 73 65 20 43 4b 41 5f 49 44 3a 0a ...case CKA_ID:. efb0: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG efc0: 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 _PRINTF("Request efd0: 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b ing attribute CK efe0: 41 5f 49 44 20 28 30 78 25 30 38 6c 78 29 20 2e A_ID (0x%08lx) . eff0: 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l f000: 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t f010: 79 70 65 29 3b 0a 0a 09 09 09 09 75 63 54 6d 70 ype);......ucTmp f020: 42 75 66 5b 30 5d 20 3d 20 28 28 69 64 65 6e 74 Buf[0] = ((ident f030: 69 74 79 5f 6e 75 6d 20 2b 20 31 29 20 3e 3e 20 ity_num + 1) >> f040: 38 29 20 26 20 30 78 66 66 3b 0a 09 09 09 09 75 8) & 0xff;.....u f050: 63 54 6d 70 42 75 66 5b 31 5d 20 3d 20 20 28 69 cTmpBuf[1] = (i f060: 64 65 6e 74 69 74 79 5f 6e 75 6d 20 2b 20 31 29 dentity_num + 1) f070: 20 26 20 30 78 66 66 3b 0a 0a 09 09 09 09 70 56 & 0xff;......pV f080: 61 6c 75 65 20 3d 20 26 75 63 54 6d 70 42 75 66 alue = &ucTmpBuf f090: 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e ;.....ulValueLen f0a0: 20 3d 20 32 3b 0a 0a 09 09 09 09 43 41 43 4b 45 = 2;......CACKE f0b0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" f0c0: 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 ... returning % f0d0: 70 2f 25 6c 75 22 2c 20 70 56 61 6c 75 65 2c 20 p/%lu", pValue, f0e0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) f0f0: 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 ulValueLen);.... f100: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 ..break;....case f110: 20 43 4b 41 5f 43 45 52 54 49 46 49 43 41 54 45 CKA_CERTIFICATE f120: 5f 54 59 50 45 3a 0a 09 09 09 09 43 41 43 4b 45 _TYPE:.....CACKE f130: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" f140: 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri f150: 62 75 74 65 20 43 4b 41 5f 43 45 52 54 49 46 49 bute CKA_CERTIFI f160: 43 41 54 45 5f 54 59 50 45 20 28 30 78 25 30 38 CATE_TYPE (0x%08 f170: 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig f180: 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a f190: 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... f1a0: 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 if (objectclass f1b0: 21 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 != CKO_CERTIFICA f1c0: 54 45 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 TE) {......CACKE f1d0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" f1e0: 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 ... but not get f1f0: 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 ting it because f200: 77 65 20 61 72 65 20 6e 6f 74 20 61 20 63 65 72 we are not a cer f210: 74 69 66 69 63 61 74 65 2e 22 29 3b 0a 0a 09 09 tificate.");.... f220: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a ...break;.....}. f230: 0a 09 09 09 09 2f 2a 20 57 65 20 6f 6e 6c 79 20 ...../* We only f240: 73 75 70 70 6f 72 74 20 6f 6e 65 20 63 65 72 74 support one cert f250: 69 66 69 63 61 74 65 20 74 79 70 65 20 2a 2f 0a ificate type */. f260: 09 09 09 09 63 6b 5f 63 65 72 74 69 66 69 63 61 ....ck_certifica f270: 74 65 5f 74 79 70 65 20 3d 20 43 4b 43 5f 58 5f te_type = CKC_X_ f280: 35 30 39 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 509;......pValue f290: 20 3d 20 26 63 6b 5f 63 65 72 74 69 66 69 63 61 = &ck_certifica f2a0: 74 65 5f 74 79 70 65 3b 0a 09 09 09 09 75 6c 56 te_type;.....ulV f2b0: 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 alueLen = sizeof f2c0: 28 63 6b 5f 63 65 72 74 69 66 69 63 61 74 65 5f (ck_certificate_ f2d0: 74 79 70 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b type);......CACK f2e0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( f2f0: 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning f300: 43 4b 43 5f 58 5f 35 30 39 20 28 25 6c 75 29 20 CKC_X_509 (%lu) f310: 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 (%p/%lu)", (unsi f320: 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b gned long) *((CK f330: 5f 43 45 52 54 49 46 49 43 41 54 45 5f 54 59 50 _CERTIFICATE_TYP f340: 45 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 E *) pValue), pV f350: 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 alue, (unsigned f360: 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e long) ulValueLen f370: 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 );......break;.. f380: 09 09 63 61 73 65 20 43 4b 41 5f 4b 45 59 5f 54 ..case CKA_KEY_T f390: 59 50 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f YPE:.....CACKEY_ f3a0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re f3b0: 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 questing attribu f3c0: 74 65 20 43 4b 41 5f 4b 45 59 5f 54 59 50 45 20 te CKA_KEY_TYPE f3d0: 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 (0x%08lx) ...", f3e0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) f3f0: 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b curr_attr_type); f400: 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 ......if (object f410: 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 50 52 49 class != CKO_PRI f420: 56 41 54 45 5f 4b 45 59 20 26 26 20 6f 62 6a 65 VATE_KEY && obje f430: 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 50 ctclass != CKO_P f440: 55 42 4c 49 43 5f 4b 45 59 29 20 7b 0a 09 09 09 UBLIC_KEY) {.... f450: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P f460: 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 RINTF(" ... but f470: 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 not getting it b f480: 65 63 61 75 73 65 20 77 65 20 61 72 65 20 6e 6f ecause we are no f490: 74 20 61 20 6b 65 79 2e 22 29 3b 0a 0a 09 09 09 t a key.");..... f4a0: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a ..break;.....}.. f4b0: 09 09 09 09 2f 2a 20 57 65 20 6f 6e 6c 79 20 73 ..../* We only s f4c0: 75 70 70 6f 72 74 20 6f 6e 65 20 6b 65 79 20 74 upport one key t f4d0: 79 70 65 20 2a 2f 0a 09 09 09 09 63 6b 5f 6b 65 ype */.....ck_ke f4e0: 79 5f 74 79 70 65 20 3d 20 43 4b 4b 5f 52 53 41 y_type = CKK_RSA f4f0: 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 ;......pValue = f500: 26 63 6b 5f 6b 65 79 5f 74 79 70 65 3b 0a 09 09 &ck_key_type;... f510: 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 ..ulValueLen = s f520: 69 7a 65 6f 66 28 63 6b 5f 6b 65 79 5f 74 79 70 izeof(ck_key_typ f530: 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f e);......CACKEY_ f540: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . f550: 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 43 4b 4b .. returning CKK f560: 5f 52 53 41 20 28 25 6c 75 29 20 28 25 70 2f 25 _RSA (%lu) (%p/% f570: 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 lu)", (unsigned f580: 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 43 45 52 54 long) *((CK_CERT f590: 49 46 49 43 41 54 45 5f 54 59 50 45 20 2a 29 20 IFICATE_TYPE *) f5a0: 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c pValue), pValue, f5b0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) f5c0: 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... f5d0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas f5e0: 65 20 43 4b 41 5f 53 49 47 4e 3a 0a 09 09 09 09 e CKA_SIGN:..... f5f0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI f600: 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 NTF("Requesting f610: 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 53 49 attribute CKA_SI f620: 47 4e 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e GN (0x%08lx) ... f630: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon f640: 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 g) curr_attr_typ f650: 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a e);......if (obj f660: 65 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f ectclass == CKO_ f670: 50 52 49 56 41 54 45 5f 4b 45 59 29 20 7b 0a 09 PRIVATE_KEY) {.. f680: 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b ....pValue = &ck f690: 5f 74 72 75 65 3b 0a 09 09 09 09 09 75 6c 56 61 _true;......ulVa f6a0: 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 lueLen = sizeof( f6b0: 63 6b 5f 74 72 75 65 29 3b 0a 09 09 09 09 7d 20 ck_true);.....} f6c0: 65 6c 73 65 20 7b 0a 09 09 09 09 09 70 56 61 6c else {......pVal f6d0: 75 65 20 3d 20 26 63 6b 5f 66 61 6c 73 65 3b 0a ue = &ck_false;. f6e0: 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 .....ulValueLen f6f0: 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 = sizeof(ck_fals f700: 65 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 e);.....}......C f710: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN f720: 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 TF(" ... returni f730: 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 ng %lu (%p/%lu)" f740: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long f750: 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 ) *((CK_BBOOL *) f760: 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 pValue), pValue f770: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long f780: 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. f790: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca f7a0: 73 65 20 43 4b 41 5f 44 45 43 52 59 50 54 3a 0a se CKA_DECRYPT:. f7b0: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG f7c0: 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 _PRINTF("Request f7d0: 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b ing attribute CK f7e0: 41 5f 44 45 43 52 59 50 54 20 28 30 78 25 30 38 A_DECRYPT (0x%08 f7f0: 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig f800: 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a f810: 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... f820: 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 if (objectclass f830: 3d 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b == CKO_PRIVATE_K f840: 45 59 20 7c 7c 20 6f 62 6a 65 63 74 63 6c 61 73 EY || objectclas f850: 73 20 3d 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 5f s == CKO_PUBLIC_ f860: 4b 45 59 29 20 7b 0a 09 09 09 09 09 70 56 61 6c KEY) {......pVal f870: 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 ue = &ck_true;.. f880: 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = f890: 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 sizeof(ck_true) f8a0: 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 ;.....} else {.. f8b0: 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b ....pValue = &ck f8c0: 5f 66 61 6c 73 65 3b 0a 09 09 09 09 09 75 6c 56 _false;......ulV f8d0: 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 alueLen = sizeof f8e0: 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 09 09 09 09 (ck_false);..... f8f0: 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 }......CACKEY_DE f900: 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... f910: 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 returning %lu ( f920: 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 %p/%lu)", (unsig f930: 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f ned long) *((CK_ f940: 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 BBOOL *) pValue) f950: 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 , pValue, (unsig f960: 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 ned long) ulValu f970: 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 eLen);......brea f980: 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 k;....case CKA_T f990: 52 55 53 54 5f 53 45 52 56 45 52 5f 41 55 54 48 RUST_SERVER_AUTH f9a0: 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB f9b0: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque f9c0: 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute f9d0: 43 4b 41 5f 54 52 55 53 54 5f 53 45 52 56 45 52 CKA_TRUST_SERVER f9e0: 5f 41 55 54 48 20 28 30 78 25 30 38 6c 78 29 20 _AUTH (0x%08lx) f9f0: 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 ...", (unsigned fa00: 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f long) curr_attr_ fa10: 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c type);......pVal fa20: 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 ue = &ck_true;.. fa30: 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 ...ulValueLen = fa40: 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b sizeof(ck_true); fa50: 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB fa60: 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... fa70: 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 returning %lu (% fa80: 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e p/%lu)", (unsign fa90: 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 ed long) *((CK_B faa0: 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c BOOL *) pValue), fab0: 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e pValue, (unsign fac0: 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 ed long) ulValue fad0: 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b Len);......break fae0: 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 ;....case CKA_TR faf0: 55 53 54 5f 43 4c 49 45 4e 54 5f 41 55 54 48 3a UST_CLIENT_AUTH: fb00: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU fb10: 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 G_PRINTF("Reques fb20: 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 ting attribute C fb30: 4b 41 5f 54 52 55 53 54 5f 43 4c 49 45 4e 54 5f KA_TRUST_CLIENT_ fb40: 41 55 54 48 20 28 30 78 25 30 38 6c 78 29 20 2e AUTH (0x%08lx) . fb50: 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l fb60: 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t fb70: 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75 ype);......pValu fb80: 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 e = &ck_true;... fb90: 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 ..ulValueLen = s fba0: 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a izeof(ck_true);. fbb0: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU fbc0: 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 G_PRINTF(" ... r fbd0: 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 eturning %lu (%p fbe0: 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 /%lu)", (unsigne fbf0: 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 d long) *((CK_BB fc00: 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 OOL *) pValue), fc10: 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 pValue, (unsigne fc20: 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c d long) ulValueL fc30: 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b en);......break; fc40: 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 ....case CKA_TRU fc50: 53 54 5f 43 4f 44 45 5f 53 49 47 4e 49 4e 47 3a ST_CODE_SIGNING: fc60: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU fc70: 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 G_PRINTF("Reques fc80: 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 ting attribute C fc90: 4b 41 5f 54 52 55 53 54 5f 43 4f 44 45 5f 53 49 KA_TRUST_CODE_SI fca0: 47 4e 49 4e 47 20 28 30 78 25 30 38 6c 78 29 20 GNING (0x%08lx) fcb0: 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 ...", (unsigned fcc0: 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f long) curr_attr_ fcd0: 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c type);......pVal fce0: 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 ue = &ck_true;.. fcf0: 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 ...ulValueLen = fd00: 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b sizeof(ck_true); fd10: 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB fd20: 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... fd30: 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 returning %lu (% fd40: 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e p/%lu)", (unsign fd50: 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 ed long) *((CK_B fd60: 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c BOOL *) pValue), fd70: 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e pValue, (unsign fd80: 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 ed long) ulValue fd90: 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b Len);......break fda0: 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 ;....case CKA_TR fdb0: 55 53 54 5f 45 4d 41 49 4c 5f 50 52 4f 54 45 43 UST_EMAIL_PROTEC fdc0: 54 49 4f 4e 3a 0a 09 09 09 09 43 41 43 4b 45 59 TION:.....CACKEY fdd0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R fde0: 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 equesting attrib fdf0: 75 74 65 20 43 4b 41 5f 54 52 55 53 54 5f 45 4d ute CKA_TRUST_EM fe00: 41 49 4c 5f 50 52 4f 54 45 43 54 49 4f 4e 20 28 AIL_PROTECTION ( fe10: 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 0x%08lx) ...", ( fe20: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 unsigned long) c fe30: 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a urr_attr_type);. fe40: 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 .....pValue = &c fe50: 6b 5f 74 72 75 65 3b 0a 09 09 09 09 75 6c 56 61 k_true;.....ulVa fe60: 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 lueLen = sizeof( fe70: 63 6b 5f 74 72 75 65 29 3b 0a 0a 09 09 09 09 43 ck_true);......C fe80: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN fe90: 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 TF(" ... returni fea0: 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 ng %lu (%p/%lu)" feb0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long fec0: 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 ) *((CK_BBOOL *) fed0: 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 pValue), pValue fee0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long fef0: 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. ff00: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 64 65 ....break;....de ff10: 66 61 75 6c 74 3a 0a 09 09 09 09 70 56 61 6c 75 fault:.....pValu ff20: 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 75 6c e = NULL;.....ul ff30: 56 61 6c 75 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c ValueLen = (CK_L ff40: 4f 4e 47 29 20 2d 31 3b 0a 09 09 09 09 62 72 65 ONG) -1;.....bre ff50: 61 6b 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 28 ak;...}....if (( ff60: 28 43 4b 5f 4c 4f 4e 47 29 20 75 6c 56 61 6c 75 (CK_LONG) ulValu ff70: 65 4c 65 6e 29 20 21 3d 20 28 28 43 4b 5f 4c 4f eLen) != ((CK_LO ff80: 4e 47 29 20 2d 31 29 29 20 7b 0a 09 09 09 2f 2a NG) -1)) {..../* ff90: 20 50 75 73 68 20 63 75 72 72 5f 61 74 74 72 20 Push curr_attr ffa0: 6f 6e 74 6f 20 74 68 65 20 73 74 61 63 6b 20 2a onto the stack * ffb0: 2f 0a 09 09 09 63 75 72 72 5f 61 74 74 72 2e 74 /....curr_attr.t ffc0: 79 70 65 20 3d 20 63 75 72 72 5f 61 74 74 72 5f ype = curr_attr_ ffd0: 74 79 70 65 3b 0a 09 09 09 63 75 72 72 5f 61 74 type;....curr_at ffe0: 74 72 2e 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 tr.ulValueLen = fff0: 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a 0a 09 09 09 ulValueLen;..... 10000 63 75 72 72 5f 61 74 74 72 2e 70 56 61 6c 75 65 curr_attr.pValue 10010 20 3d 20 6d 61 6c 6c 6f 63 28 63 75 72 72 5f 61 = malloc(curr_a 10020 74 74 72 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 3b ttr.ulValueLen); 10030 0a 09 09 09 6d 65 6d 63 70 79 28 63 75 72 72 5f ....memcpy(curr_ 10040 61 74 74 72 2e 70 56 61 6c 75 65 2c 20 70 56 61 attr.pValue, pVa 10050 6c 75 65 2c 20 63 75 72 72 5f 61 74 74 72 2e 75 lue, curr_attr.u 10060 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 lValueLen);..... 10070 69 66 20 28 70 56 61 6c 75 65 5f 66 72 65 65 20 if (pValue_free 10080 26 26 20 70 56 61 6c 75 65 29 20 7b 0a 09 09 09 && pValue) {.... 10090 09 66 72 65 65 28 70 56 61 6c 75 65 29 3b 0a 09 .free(pValue);.. 100a0 09 09 7d 0a 0a 09 09 09 69 66 20 28 6e 75 6d 61 ..}.....if (numa 100b0 74 74 72 73 20 3e 3d 20 72 65 74 76 61 6c 5f 63 ttrs >= retval_c 100c0 6f 75 6e 74 29 20 7b 0a 09 09 09 09 72 65 74 76 ount) {.....retv 100d0 61 6c 5f 63 6f 75 6e 74 20 2a 3d 20 32 3b 0a 09 al_count *= 2;.. 100e0 09 09 09 72 65 74 76 61 6c 20 3d 20 72 65 61 6c ...retval = real 100f0 6c 6f 63 28 72 65 74 76 61 6c 2c 20 72 65 74 76 loc(retval, retv 10100 61 6c 5f 63 6f 75 6e 74 20 2a 20 73 69 7a 65 6f al_count * sizeo 10110 66 28 2a 72 65 74 76 61 6c 29 29 3b 0a 09 09 09 f(*retval));.... 10120 7d 0a 0a 09 09 09 6d 65 6d 63 70 79 28 26 72 65 }.....memcpy(&re 10130 74 76 61 6c 5b 6e 75 6d 61 74 74 72 73 5d 2c 20 tval[numattrs], 10140 26 63 75 72 72 5f 61 74 74 72 2c 20 73 69 7a 65 &curr_attr, size 10150 6f 66 28 63 75 72 72 5f 61 74 74 72 29 29 3b 0a of(curr_attr));. 10160 09 09 09 6e 75 6d 61 74 74 72 73 2b 2b 3b 0a 09 ...numattrs++;.. 10170 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 6e 75 6d 61 .}..}...if (numa 10180 74 74 72 73 20 21 3d 20 30 29 20 7b 0a 09 09 72 ttrs != 0) {...r 10190 65 74 76 61 6c 5f 63 6f 75 6e 74 20 3d 20 6e 75 etval_count = nu 101a0 6d 61 74 74 72 73 3b 0a 09 09 72 65 74 76 61 6c mattrs;...retval 101b0 20 3d 20 72 65 61 6c 6c 6f 63 28 72 65 74 76 61 = realloc(retva 101c0 6c 2c 20 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 l, retval_count 101d0 2a 20 73 69 7a 65 6f 66 28 2a 72 65 74 76 61 6c * sizeof(*retval 101e0 29 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 ));..} else {... 101f0 66 72 65 65 28 72 65 74 76 61 6c 29 3b 0a 0a 09 free(retval);... 10200 09 72 65 74 76 61 6c 20 3d 20 4e 55 4c 4c 3b 0a .retval = NULL;. 10210 09 7d 0a 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 3d .}...*pulCount = 10220 20 6e 75 6d 61 74 74 72 73 3b 0a 0a 09 43 41 43 numattrs;...CAC 10230 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 10240 28 22 52 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 ("Returning %lu 10250 6f 62 6a 65 63 74 73 20 28 25 70 29 2e 22 2c 20 objects (%p).", 10260 6e 75 6d 61 74 74 72 73 2c 20 72 65 74 76 61 6c numattrs, retval 10270 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 );...return(retv 10280 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 al);.}..static v 10290 6f 69 64 20 63 61 63 6b 65 79 5f 66 72 65 65 5f oid cackey_free_ 102a0 69 64 65 6e 74 69 74 69 65 73 28 73 74 72 75 63 identities(struc 102b0 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 t cackey_identit 102c0 79 20 2a 69 64 65 6e 74 69 74 69 65 73 2c 20 75 y *identities, u 102d0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 65 nsigned long ide 102e0 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 20 7b ntities_count) { 102f0 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 20 2a ..CK_ATTRIBUTE * 10300 63 75 72 72 5f 61 74 74 72 3b 0a 09 75 6e 73 69 curr_attr;..unsi 10310 67 6e 65 64 20 6c 6f 6e 67 20 69 64 5f 69 64 78 gned long id_idx 10320 2c 20 61 74 74 72 5f 69 64 78 3b 0a 0a 09 69 66 , attr_idx;...if 10330 20 28 69 64 65 6e 74 69 74 69 65 73 20 3d 3d 20 (identities == 10340 4e 55 4c 4c 20 7c 7c 20 69 64 65 6e 74 69 74 69 NULL || identiti 10350 65 73 5f 63 6f 75 6e 74 20 3d 3d 20 30 29 20 7b es_count == 0) { 10360 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 ...return;..}... 10370 66 6f 72 20 28 69 64 5f 69 64 78 20 3d 20 30 3b for (id_idx = 0; 10380 20 69 64 5f 69 64 78 20 3c 20 69 64 65 6e 74 69 id_idx < identi 10390 74 69 65 73 5f 63 6f 75 6e 74 3b 20 69 64 5f 69 ties_count; id_i 103a0 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 69 64 dx++) {...if (id 103b0 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d entities[id_idx] 103c0 2e 61 74 74 72 69 62 75 74 65 73 29 20 7b 0a 09 .attributes) {.. 103d0 09 09 66 6f 72 20 28 61 74 74 72 5f 69 64 78 20 ..for (attr_idx 103e0 3d 20 30 3b 20 61 74 74 72 5f 69 64 78 20 3c 20 = 0; attr_idx < 103f0 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 identities[id_id 10400 78 5d 2e 61 74 74 72 69 62 75 74 65 73 5f 63 6f x].attributes_co 10410 75 6e 74 3b 20 61 74 74 72 5f 69 64 78 2b 2b 29 unt; attr_idx++) 10420 20 7b 0a 09 09 09 09 63 75 72 72 5f 61 74 74 72 {.....curr_attr 10430 20 3d 20 26 69 64 65 6e 74 69 74 69 65 73 5b 69 = &identities[i 10440 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 d_idx].attribute 10450 73 5b 61 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 s[attr_idx];.... 10460 09 09 69 66 20 28 63 75 72 72 5f 61 74 74 72 2d ..if (curr_attr- 10470 3e 70 56 61 6c 75 65 29 20 7b 0a 09 09 09 09 09 >pValue) {...... 10480 66 72 65 65 28 63 75 72 72 5f 61 74 74 72 2d 3e free(curr_attr-> 10490 70 56 61 6c 75 65 29 3b 0a 09 09 09 09 7d 0a 09 pValue);.....}.. 104a0 09 09 7d 0a 0a 09 09 09 66 72 65 65 28 69 64 65 ..}.....free(ide 104b0 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e ntities[id_idx]. 104c0 61 74 74 72 69 62 75 74 65 73 29 3b 0a 09 09 7d attributes);...} 104d0 0a 09 7d 0a 0a 09 66 72 65 65 28 69 64 65 6e 74 ..}...free(ident 104e0 69 74 69 65 73 29 3b 0a 7d 0a 0a 73 74 61 74 69 ities);.}..stati 104f0 63 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f c struct cackey_ 10500 69 64 65 6e 74 69 74 79 20 2a 63 61 63 6b 65 79 identity *cackey 10510 5f 72 65 61 64 5f 69 64 65 6e 74 69 74 69 65 73 _read_identities 10520 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 (struct cackey_s 10530 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 lot *slot, unsig 10540 6e 65 64 20 6c 6f 6e 67 20 2a 69 64 73 5f 66 6f ned long *ids_fo 10550 75 6e 64 29 20 7b 0a 09 73 74 72 75 63 74 20 63 und) {..struct c 10560 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 ackey_pcsc_ident 10570 69 74 79 20 2a 70 63 73 63 5f 69 64 65 6e 74 69 ity *pcsc_identi 10580 74 69 65 73 3b 0a 09 73 74 72 75 63 74 20 63 61 ties;..struct ca 10590 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 69 ckey_identity *i 105a0 64 65 6e 74 69 74 69 65 73 3b 0a 09 75 6e 73 69 dentities;..unsi 105b0 67 6e 65 64 20 6c 6f 6e 67 20 6e 75 6d 5f 69 64 gned long num_id 105c0 73 2c 20 69 64 5f 69 64 78 2c 20 63 75 72 72 5f s, id_idx, curr_ 105d0 69 64 5f 74 79 70 65 3b 0a 09 75 6e 73 69 67 6e id_type;..unsign 105e0 65 64 20 6c 6f 6e 67 20 6e 75 6d 5f 63 65 72 74 ed long num_cert 105f0 73 2c 20 63 65 72 74 5f 69 64 78 3b 0a 0a 09 43 s, cert_idx;...C 10600 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 10610 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 10620 09 69 66 20 28 69 64 73 5f 66 6f 75 6e 64 20 3d .if (ids_found = 10630 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK 10640 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 10650 22 45 72 72 6f 72 2e 20 20 69 64 73 5f 66 6f 75 "Error. ids_fou 10660 6e 64 20 69 73 20 4e 55 4c 4c 22 29 3b 0a 0a 09 nd is NULL");... 10670 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 .return(NULL);.. 10680 7d 0a 0a 09 70 63 73 63 5f 69 64 65 6e 74 69 74 }...pcsc_identit 10690 69 65 73 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 ies = cackey_rea 106a0 64 5f 63 65 72 74 73 28 73 6c 6f 74 2c 20 4e 55 d_certs(slot, NU 106b0 4c 4c 2c 20 26 6e 75 6d 5f 63 65 72 74 73 29 3b LL, &num_certs); 106c0 0a 09 69 66 20 28 70 63 73 63 5f 69 64 65 6e 74 ..if (pcsc_ident 106d0 69 74 69 65 73 20 21 3d 20 4e 55 4c 4c 29 20 7b ities != NULL) { 106e0 0a 09 09 2f 2a 20 43 6f 6e 76 65 72 74 20 6e 75 .../* Convert nu 106f0 6d 62 65 72 20 6f 66 20 43 65 72 74 73 20 74 6f mber of Certs to 10700 20 6e 75 6d 62 65 72 20 6f 66 20 6f 62 6a 65 63 number of objec 10710 74 73 20 2a 2f 0a 09 09 6e 75 6d 5f 69 64 73 20 ts */...num_ids 10720 3d 20 28 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b = (CKO_PRIVATE_K 10730 45 59 20 2d 20 43 4b 4f 5f 43 45 52 54 49 46 49 EY - CKO_CERTIFI 10740 43 41 54 45 20 2b 20 31 29 20 2a 20 6e 75 6d 5f CATE + 1) * num_ 10750 63 65 72 74 73 3b 0a 0a 09 09 69 64 65 6e 74 69 certs;....identi 10760 74 69 65 73 20 3d 20 6d 61 6c 6c 6f 63 28 6e 75 ties = malloc(nu 10770 6d 5f 69 64 73 20 2a 20 73 69 7a 65 6f 66 28 2a m_ids * sizeof(* 10780 69 64 65 6e 74 69 74 69 65 73 29 29 3b 0a 0a 09 identities));... 10790 09 69 64 5f 69 64 78 20 3d 20 30 3b 0a 09 09 66 .id_idx = 0;...f 107a0 6f 72 20 28 63 65 72 74 5f 69 64 78 20 3d 20 30 or (cert_idx = 0 107b0 3b 20 63 65 72 74 5f 69 64 78 20 3c 20 6e 75 6d ; cert_idx < num 107c0 5f 63 65 72 74 73 3b 20 63 65 72 74 5f 69 64 78 _certs; cert_idx 107d0 2b 2b 29 20 7b 0a 09 09 09 66 6f 72 20 28 63 75 ++) {....for (cu 107e0 72 72 5f 69 64 5f 74 79 70 65 20 3d 20 43 4b 4f rr_id_type = CKO 107f0 5f 43 45 52 54 49 46 49 43 41 54 45 3b 20 63 75 _CERTIFICATE; cu 10800 72 72 5f 69 64 5f 74 79 70 65 20 3c 3d 20 43 4b rr_id_type <= CK 10810 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 3b 20 63 O_PRIVATE_KEY; c 10820 75 72 72 5f 69 64 5f 74 79 70 65 2b 2b 29 20 7b urr_id_type++) { 10830 0a 09 09 09 09 69 64 65 6e 74 69 74 69 65 73 5b .....identities[ 10840 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 id_idx].attribut 10850 65 73 20 3d 20 63 61 63 6b 65 79 5f 67 65 74 5f es = cackey_get_ 10860 61 74 74 72 69 62 75 74 65 73 28 63 75 72 72 5f attributes(curr_ 10870 69 64 5f 74 79 70 65 2c 20 26 70 63 73 63 5f 69 id_type, &pcsc_i 10880 64 65 6e 74 69 74 69 65 73 5b 63 65 72 74 5f 69 dentities[cert_i 10890 64 78 5d 2c 20 63 65 72 74 5f 69 64 78 2c 20 26 dx], cert_idx, & 108a0 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 identities[id_id 108b0 78 5d 2e 61 74 74 72 69 62 75 74 65 73 5f 63 6f x].attributes_co 108c0 75 6e 74 29 3b 0a 0a 09 09 09 09 69 66 20 28 69 unt);......if (i 108d0 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 dentities[id_idx 108e0 5d 2e 61 74 74 72 69 62 75 74 65 73 20 3d 3d 20 ].attributes == 108f0 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 09 69 64 65 NULL) {......ide 10900 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e ntities[id_idx]. 10910 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 attributes_count 10920 20 3d 20 30 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 = 0;.....}..... 10930 09 69 64 5f 69 64 78 2b 2b 3b 0a 09 09 09 7d 0a .id_idx++;....}. 10940 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 66 72 ..}....cackey_fr 10950 65 65 5f 63 65 72 74 73 28 70 63 73 63 5f 69 64 ee_certs(pcsc_id 10960 65 6e 74 69 74 69 65 73 2c 20 6e 75 6d 5f 63 65 entities, num_ce 10970 72 74 73 2c 20 31 29 3b 0a 0a 09 09 2a 69 64 73 rts, 1);....*ids 10980 5f 66 6f 75 6e 64 20 3d 20 6e 75 6d 5f 69 64 73 _found = num_ids 10990 3b 0a 09 09 72 65 74 75 72 6e 28 69 64 65 6e 74 ;...return(ident 109a0 69 74 69 65 73 29 3b 0a 09 7d 0a 0a 09 2a 69 64 ities);..}...*id 109b0 73 5f 66 6f 75 6e 64 20 3d 20 30 3b 0a 09 72 65 s_found = 0;..re 109c0 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 7d 0a 0a 43 turn(NULL);.}..C 109d0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 109e0 4e 28 43 4b 5f 52 56 2c 20 43 5f 49 6e 69 74 69 N(CK_RV, C_Initi 109f0 61 6c 69 7a 65 29 28 43 4b 5f 56 4f 49 44 5f 50 alize)(CK_VOID_P 10a00 54 52 20 70 49 6e 69 74 41 72 67 73 29 20 7b 0a TR pInitArgs) {. 10a10 09 43 4b 5f 43 5f 49 4e 49 54 49 41 4c 49 5a 45 .CK_C_INITIALIZE 10a20 5f 41 52 47 53 20 43 4b 5f 50 54 52 20 61 72 67 _ARGS CK_PTR arg 10a30 73 3b 0a 09 75 69 6e 74 33 32 5f 74 20 69 64 78 s;..uint32_t idx 10a40 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 69 6e 69 ;..int mutex_ini 10a50 74 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f t_ret;...CACKEY_ 10a60 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 10a70 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 lled.");...if (p 10a80 49 6e 69 74 41 72 67 73 20 21 3d 20 4e 55 4c 4c InitArgs != NULL 10a90 29 20 7b 0a 09 09 61 72 67 73 20 3d 20 70 49 6e ) {...args = pIn 10aa0 69 74 41 72 67 73 3b 0a 09 09 6d 65 6d 63 70 79 itArgs;...memcpy 10ab0 28 26 63 61 63 6b 65 79 5f 61 72 67 73 2c 20 61 (&cackey_args, a 10ac0 72 67 73 2c 20 73 69 7a 65 6f 66 28 63 61 63 6b rgs, sizeof(cack 10ad0 65 79 5f 61 72 67 73 29 29 3b 0a 0a 09 09 69 66 ey_args));....if 10ae0 20 28 61 72 67 73 2d 3e 43 72 65 61 74 65 4d 75 (args->CreateMu 10af0 74 65 78 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 61 tex == NULL || a 10b00 72 67 73 2d 3e 44 65 73 74 72 6f 79 4d 75 74 65 rgs->DestroyMute 10b10 78 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 x == NULL || arg 10b20 73 2d 3e 4c 6f 63 6b 4d 75 74 65 78 20 3d 3d 20 s->LockMutex == 10b30 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 55 6e NULL || args->Un 10b40 6c 6f 63 6b 4d 75 74 65 78 20 3d 3d 20 4e 55 4c lockMutex == NUL 10b50 4c 29 20 7b 0a 09 09 09 69 66 20 28 61 72 67 73 L) {....if (args 10b60 2d 3e 43 72 65 61 74 65 4d 75 74 65 78 20 21 3d ->CreateMutex != 10b70 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 44 NULL || args->D 10b80 65 73 74 72 6f 79 4d 75 74 65 78 20 21 3d 20 4e estroyMutex != N 10b90 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 4c 6f 63 ULL || args->Loc 10ba0 6b 4d 75 74 65 78 20 21 3d 20 4e 55 4c 4c 20 7c kMutex != NULL | 10bb0 7c 20 61 72 67 73 2d 3e 55 6e 6c 6f 63 6b 4d 75 | args->UnlockMu 10bc0 74 65 78 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 tex != NULL) {.. 10bd0 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 10be0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 53 PRINTF("Error. S 10bf0 6f 6d 65 2c 20 62 75 74 20 6e 6f 74 20 41 6c 6c ome, but not All 10c00 20 74 68 72 65 61 64 69 6e 67 20 70 72 69 6d 69 threading primi 10c10 74 69 76 65 73 20 70 72 6f 76 69 64 65 64 2e 22 tives provided." 10c20 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 43 );......return(C 10c30 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD 10c40 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 69 );....}...}....i 10c50 66 20 28 61 72 67 73 2d 3e 70 52 65 73 65 72 76 f (args->pReserv 10c60 65 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 ed != NULL) {... 10c70 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 10c80 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 52 65 INTF("Error. pRe 10c90 73 65 72 76 65 64 20 69 73 20 6e 6f 74 20 4e 55 served is not NU 10ca0 4c 4c 2e 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 LL.");.....retur 10cb0 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f n(CKR_ARGUMENTS_ 10cc0 42 41 44 29 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 BAD);...}..} els 10cd0 65 20 7b 0a 09 09 63 61 63 6b 65 79 5f 61 72 67 e {...cackey_arg 10ce0 73 2e 43 72 65 61 74 65 4d 75 74 65 78 20 3d 20 s.CreateMutex = 10cf0 4e 55 4c 4c 3b 0a 09 09 63 61 63 6b 65 79 5f 61 NULL;...cackey_a 10d00 72 67 73 2e 44 65 73 74 72 6f 79 4d 75 74 65 78 rgs.DestroyMutex 10d10 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 6b 65 = NULL;...cacke 10d20 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 y_args.LockMutex 10d30 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 6b 65 = NULL;...cacke 10d40 79 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 74 y_args.UnlockMut 10d50 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 ex = NULL;...cac 10d60 6b 65 79 5f 61 72 67 73 2e 66 6c 61 67 73 20 3d key_args.flags = 10d70 20 30 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 0;..}...if (cac 10d80 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 10d90 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 10da0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 10db0 20 20 41 6c 72 65 61 64 79 20 69 6e 69 74 69 61 Already initia 10dc0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 10dd0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 10de0 5f 41 4c 52 45 41 44 59 5f 49 4e 49 54 49 41 4c _ALREADY_INITIAL 10df0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 66 6f 72 20 IZED);..}...for 10e00 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 (idx = 0; idx < 10e10 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 (sizeof(cackey_s 10e20 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f essions) / sizeo 10e30 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 10e40 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b s[0])); idx++) { 10e50 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio 10e60 6e 73 5b 69 64 78 5d 2e 61 63 74 69 76 65 20 3d ns[idx].active = 10e70 20 30 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 0;..}...for (id 10e80 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 28 73 69 x = 0; idx < (si 10e90 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 10ea0 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 10eb0 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 3b 20 69 ey_slots[0])); i 10ec0 64 78 2b 2b 29 20 7b 0a 09 09 63 61 63 6b 65 79 dx++) {...cackey 10ed0 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 61 63 74 69 _slots[idx].acti 10ee0 76 65 20 3d 20 30 3b 0a 09 09 63 61 63 6b 65 79 ve = 0;...cackey 10ef0 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 _slots[idx].pcsc 10f00 5f 72 65 61 64 65 72 20 3d 20 4e 55 4c 4c 3b 0a _reader = NULL;. 10f10 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 ..cackey_slots[i 10f20 64 78 5d 2e 74 72 61 6e 73 61 63 74 69 6f 6e 5f dx].transaction_ 10f30 64 65 70 74 68 20 3d 20 30 3b 0a 09 09 63 61 63 depth = 0;...cac 10f40 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 73 key_slots[idx].s 10f50 6c 6f 74 5f 72 65 73 65 74 20 3d 20 30 3b 0a 09 lot_reset = 0;.. 10f60 7d 0a 0a 09 63 61 63 6b 65 79 5f 69 6e 69 74 69 }...cackey_initi 10f70 61 6c 69 7a 65 64 20 3d 20 31 3b 0a 0a 09 69 66 alized = 1;...if 10f80 20 28 21 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 (!cackey_bigloc 10f90 6b 5f 69 6e 69 74 29 20 7b 0a 09 09 6d 75 74 65 k_init) {...mute 10fa0 78 5f 69 6e 69 74 5f 72 65 74 20 3d 20 63 61 63 x_init_ret = cac 10fb0 6b 65 79 5f 6d 75 74 65 78 5f 63 72 65 61 74 65 key_mutex_create 10fc0 28 26 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b (&cackey_biglock 10fd0 29 3b 0a 0a 09 09 69 66 20 28 6d 75 74 65 78 5f );....if (mutex_ 10fe0 69 6e 69 74 5f 72 65 74 20 21 3d 20 30 29 20 7b init_ret != 0) { 10ff0 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 11000 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 11010 20 4d 75 74 65 78 20 69 6e 69 74 69 61 6c 69 7a Mutex initializ 11020 61 74 69 6f 6e 20 66 61 69 6c 65 64 2e 22 29 3b ation failed."); 11030 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 11040 43 41 4e 54 5f 4c 4f 43 4b 29 3b 0a 09 09 7d 0a CANT_LOCK);...}. 11050 0a 09 09 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ...cackey_bigloc 11060 6b 5f 69 6e 69 74 20 3d 20 31 3b 0a 09 7d 0a 0a k_init = 1;..}.. 11070 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 11080 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 11090 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK 110a0 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 R_OK);...return( 110b0 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 CKR_OK);.}..CK_D 110c0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 110d0 4b 5f 52 56 2c 20 43 5f 46 69 6e 61 6c 69 7a 65 K_RV, C_Finalize 110e0 29 28 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 52 )(CK_VOID_PTR pR 110f0 65 73 65 72 76 65 64 29 20 7b 0a 09 75 69 6e 74 eserved) {..uint 11100 33 32 5f 74 20 69 64 78 3b 0a 0a 09 43 41 43 4b 32_t idx;...CACK 11110 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 11120 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 11130 20 28 70 52 65 73 65 72 76 65 64 20 21 3d 20 4e (pReserved != N 11140 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ULL) {...CACKEY_ 11150 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 11160 72 6f 72 2e 20 70 52 65 73 65 72 76 65 64 20 69 ror. pReserved i 11170 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a s not NULL.");.. 11180 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG 11190 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a UMENTS_BAD);..}. 111a0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 111b0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 111c0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 111d0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 111e0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 111f0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 11200 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 11210 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 66 6f ALIZED);..}...fo 11220 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 r (idx = 0; idx 11230 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 < (sizeof(cackey 11240 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a _sessions) / siz 11250 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi 11260 6f 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 ons[0])); idx++) 11270 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f {...if (cackey_ 11280 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 63 sessions[idx].ac 11290 74 69 76 65 29 20 7b 0a 09 09 09 43 5f 43 6c 6f tive) {....C_Clo 112a0 73 65 53 65 73 73 69 6f 6e 28 69 64 78 29 3b 0a seSession(idx);. 112b0 09 09 7d 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f ..}..}...cackey_ 112c0 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 slots_disconnect 112d0 5f 61 6c 6c 28 29 3b 0a 0a 09 66 6f 72 20 28 69 _all();...for (i 112e0 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 28 73 dx = 0; idx < (s 112f0 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f izeof(cackey_slo 11300 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ts) / sizeof(cac 11310 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 3b 20 key_slots[0])); 11320 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63 idx++) {...if (c 11330 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d ackey_slots[idx] 11340 2e 70 63 73 63 5f 72 65 61 64 65 72 29 20 7b 0a .pcsc_reader) {. 11350 09 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f 73 ...free(cackey_s 11360 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 72 lots[idx].pcsc_r 11370 65 61 64 65 72 29 3b 0a 09 09 7d 0a 09 7d 0a 0a eader);...}..}.. 11380 09 63 61 63 6b 65 79 5f 70 63 73 63 5f 64 69 73 .cackey_pcsc_dis 11390 63 6f 6e 6e 65 63 74 28 29 3b 0a 0a 09 63 61 63 connect();...cac 113a0 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 20 key_initialized 113b0 3d 20 30 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 = 0;...CACKEY_DE 113c0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 113d0 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 113e0 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 )", CKR_OK);...r 113f0 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 11400 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 11410 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 TION(CK_RV, C_Ge 11420 74 49 6e 66 6f 29 28 43 4b 5f 49 4e 46 4f 5f 50 tInfo)(CK_INFO_P 11430 54 52 20 70 49 6e 66 6f 29 20 7b 0a 09 73 74 61 TR pInfo) {..sta 11440 74 69 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20 tic CK_UTF8CHAR 11450 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 5b 5d manufacturerID[] 11460 20 3d 20 22 55 2e 53 2e 20 47 6f 76 65 72 6e 6d = "U.S. Governm 11470 65 6e 74 22 3b 0a 09 73 74 61 74 69 63 20 43 4b ent";..static CK 11480 5f 55 54 46 38 43 48 41 52 20 6c 69 62 72 61 72 _UTF8CHAR librar 11490 79 44 65 73 63 72 69 70 74 69 6f 6e 5b 5d 20 3d yDescription[] = 114a0 20 22 43 41 43 4b 65 79 22 3b 0a 0a 09 43 41 43 "CACKey";...CAC 114b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 114c0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 114d0 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c f (pInfo == NULL 114e0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 114f0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 11500 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e . pInfo is NULL. 11510 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 11520 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 R_ARGUMENTS_BAD) 11530 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack 11540 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 11550 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 11560 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 11570 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 11580 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 11590 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 115a0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 115b0 0a 0a 09 70 49 6e 66 6f 2d 3e 63 72 79 70 74 6f ...pInfo->crypto 115c0 6b 69 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 kiVersion.major 115d0 3d 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54 = ((CACKEY_CRYPT 115e0 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 OKI_VERSION_CODE 115f0 29 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b ) >> 16) & 0xff; 11600 0a 09 70 49 6e 66 6f 2d 3e 63 72 79 70 74 6f 6b ..pInfo->cryptok 11610 69 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d iVersion.minor = 11620 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54 4f ((CACKEY_CRYPTO 11630 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 29 KI_VERSION_CODE) 11640 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a >> 8) & 0xff;.. 11650 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d .memset(pInfo->m 11660 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 27 anufacturerID, ' 11670 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f ', sizeof(pInfo 11680 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 ->manufacturerID 11690 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 ));..memcpy(pInf 116a0 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 o->manufacturerI 116b0 44 2c 20 6d 61 6e 75 66 61 63 74 75 72 65 72 49 D, manufacturerI 116c0 44 2c 20 73 69 7a 65 6f 66 28 6d 61 6e 75 66 61 D, sizeof(manufa 116d0 63 74 75 72 65 72 49 44 29 20 2d 20 31 29 3b 0a cturerID) - 1);. 116e0 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d ..pInfo->flags = 116f0 20 30 78 30 30 3b 0a 0a 09 6d 65 6d 73 65 74 28 0x00;...memset( 11700 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 44 65 pInfo->libraryDe 11710 73 63 72 69 70 74 69 6f 6e 2c 20 27 20 27 2c 20 scription, ' ', 11720 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6c 69 sizeof(pInfo->li 11730 62 72 61 72 79 44 65 73 63 72 69 70 74 69 6f 6e braryDescription 11740 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 ));..memcpy(pInf 11750 6f 2d 3e 6c 69 62 72 61 72 79 44 65 73 63 72 69 o->libraryDescri 11760 70 74 69 6f 6e 2c 20 6c 69 62 72 61 72 79 44 65 ption, libraryDe 11770 73 63 72 69 70 74 69 6f 6e 2c 20 73 69 7a 65 6f scription, sizeo 11780 66 28 6c 69 62 72 61 72 79 44 65 73 63 72 69 70 f(libraryDescrip 11790 74 69 6f 6e 29 20 2d 20 31 29 3b 0a 0a 09 70 49 tion) - 1);...pI 117a0 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 56 65 72 73 nfo->libraryVers 117b0 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 61 63 ion.major = (cac 117c0 6b 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 key_getversion() 117d0 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a >> 16) & 0xff;. 117e0 09 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 56 .pInfo->libraryV 117f0 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 ersion.minor = ( 11800 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f cackey_getversio 11810 6e 28 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66 n() >> 8) & 0xff 11820 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 11830 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 11840 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c ng CKR_OK (%i)", 11850 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 CKR_OK);...retu 11860 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 2f rn(CKR_OK);.}../ 11870 2a 0a 20 2a 20 50 72 6f 63 65 73 73 20 6c 69 73 *. * Process lis 11880 74 20 6f 66 20 72 65 61 64 65 72 73 2c 20 61 6e t of readers, an 11890 64 20 63 72 65 61 74 65 20 6d 61 70 70 69 6e 67 d create mapping 118a0 20 62 65 74 77 65 65 6e 20 72 65 61 64 65 72 20 between reader 118b0 6e 61 6d 65 20 61 6e 64 20 73 6c 6f 74 20 49 44 name and slot ID 118c0 0a 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 . */.CK_DEFINE_F 118d0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 118e0 5f 47 65 74 53 6c 6f 74 4c 69 73 74 29 28 43 4b _GetSlotList)(CK 118f0 5f 42 42 4f 4f 4c 20 74 6f 6b 65 6e 50 72 65 73 _BBOOL tokenPres 11900 65 6e 74 2c 20 43 4b 5f 53 4c 4f 54 5f 49 44 5f ent, CK_SLOT_ID_ 11910 50 54 52 20 70 53 6c 6f 74 4c 69 73 74 2c 20 43 PTR pSlotList, C 11920 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 43 K_ULONG_PTR pulC 11930 6f 75 6e 74 29 20 7b 0a 09 69 6e 74 20 6d 75 74 ount) {..int mut 11940 65 78 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 ex_retval;..int 11950 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 pcsc_connect_ret 11960 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 63 6f 75 6e ;..CK_ULONG coun 11970 74 2c 20 73 6c 6f 74 5f 63 6f 75 6e 74 20 3d 20 t, slot_count = 11980 30 2c 20 63 75 72 72 73 6c 6f 74 3b 0a 09 63 68 0, currslot;..ch 11990 61 72 20 2a 70 63 73 63 5f 72 65 61 64 65 72 73 ar *pcsc_readers 119a0 2c 20 2a 70 63 73 63 5f 72 65 61 64 65 72 73 5f , *pcsc_readers_ 119b0 73 2c 20 2a 70 63 73 63 5f 72 65 61 64 65 72 73 s, *pcsc_readers 119c0 5f 65 3b 0a 09 44 57 4f 52 44 20 70 63 73 63 5f _e;..DWORD pcsc_ 119d0 72 65 61 64 65 72 73 5f 6c 65 6e 3b 0a 09 4c 4f readers_len;..LO 119e0 4e 47 20 73 63 61 72 64 5f 6c 69 73 74 72 65 61 NG scard_listrea 119f0 64 65 72 73 5f 72 65 74 3b 0a 09 73 69 7a 65 5f ders_ret;..size_ 11a00 74 20 63 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 t curr_reader_le 11a10 6e 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 n;...CACKEY_DEBU 11a20 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 11a30 2e 22 29 3b 0a 0a 09 69 66 20 28 70 75 6c 43 6f .");...if (pulCo 11a40 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 unt == NULL) {.. 11a50 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 11a60 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 75 6c INTF("Error. pul 11a70 43 6f 75 6e 74 20 69 73 20 4e 55 4c 4c 2e 22 29 Count is NULL.") 11a80 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 11a90 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 11aa0 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 11ab0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 11ac0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11ad0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 11ae0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 11af0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 11b00 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 11b10 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 11b20 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 11b30 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 cackey_mutex_loc 11b40 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 11b50 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 11b60 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 11b70 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 11b80 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b TF("Error. Lock 11b90 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 11ba0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 11bb0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 11bc0 0a 09 2f 2a 20 43 6c 65 61 72 20 6c 69 73 74 20 ../* Clear list 11bd0 6f 66 20 73 6c 6f 74 73 20 2a 2f 0a 09 69 66 20 of slots */..if 11be0 28 70 53 6c 6f 74 4c 69 73 74 29 20 7b 0a 09 09 (pSlotList) {... 11bf0 2f 2a 20 4f 6e 6c 79 20 75 70 64 61 74 65 20 74 /* Only update t 11c00 68 65 20 6c 69 73 74 20 6f 66 20 73 6c 6f 74 73 he list of slots 11c10 20 69 66 20 77 65 20 61 72 65 20 61 63 74 75 61 if we are actua 11c20 6c 6c 79 20 62 65 69 6e 67 20 73 75 70 70 6c 79 lly being supply 11c30 20 74 68 65 20 73 6c 6f 74 20 69 6e 66 6f 72 6d the slot inform 11c40 61 74 69 6f 6e 20 2a 2f 0a 09 09 63 61 63 6b 65 ation */...cacke 11c50 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 y_slots_disconne 11c60 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 66 6f 72 ct_all();....for 11c70 20 28 63 75 72 72 73 6c 6f 74 20 3d 20 30 3b 20 (currslot = 0; 11c80 63 75 72 72 73 6c 6f 74 20 3c 20 28 73 69 7a 65 currslot < (size 11c90 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 of(cackey_slots) 11ca0 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 11cb0 5f 73 6c 6f 74 73 5b 30 5d 29 29 3b 20 63 75 72 _slots[0])); cur 11cc0 72 73 6c 6f 74 2b 2b 29 20 7b 0a 09 09 09 69 66 rslot++) {....if 11cd0 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 (cackey_slots[c 11ce0 75 72 72 73 6c 6f 74 5d 2e 70 63 73 63 5f 72 65 urrslot].pcsc_re 11cf0 61 64 65 72 29 20 7b 0a 09 09 09 09 66 72 65 65 ader) {.....free 11d00 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 (cackey_slots[cu 11d10 72 72 73 6c 6f 74 5d 2e 70 63 73 63 5f 72 65 61 rrslot].pcsc_rea 11d20 64 65 72 29 3b 0a 0a 09 09 09 09 63 61 63 6b 65 der);......cacke 11d30 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 y_slots[currslot 11d40 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 20 3d 20 ].pcsc_reader = 11d50 4e 55 4c 4c 3b 0a 09 09 09 7d 0a 0a 09 09 09 63 NULL;....}.....c 11d60 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 ackey_slots[curr 11d70 73 6c 6f 74 5d 2e 61 63 74 69 76 65 20 3d 20 30 slot].active = 0 11d80 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 2f 2a 20 44 65 ;...}..}.../* De 11d90 74 65 72 6d 69 6e 65 20 6c 69 73 74 20 6f 66 20 termine list of 11da0 72 65 61 64 65 72 73 20 2a 2f 0a 09 70 63 73 63 readers */..pcsc 11db0 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 3d 20 63 _connect_ret = c 11dc0 61 63 6b 65 79 5f 70 63 73 63 5f 63 6f 6e 6e 65 ackey_pcsc_conne 11dd0 63 74 28 29 3b 0a 09 69 66 20 28 70 63 73 63 5f ct();..if (pcsc_ 11de0 63 6f 6e 6e 65 63 74 5f 72 65 74 20 21 3d 20 43 connect_ret != C 11df0 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 ACKEY_PCSC_S_OK) 11e00 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 11e10 47 5f 50 52 49 4e 54 46 28 22 43 6f 6e 6e 65 63 G_PRINTF("Connec 11e20 74 69 6f 6e 20 74 6f 20 50 43 2f 53 43 20 66 61 tion to PC/SC fa 11e30 69 6c 65 64 2c 20 61 73 73 75 6d 69 6e 67 20 6e iled, assuming n 11e40 6f 20 73 6c 6f 74 73 22 29 3b 0a 0a 09 09 73 6c o slots");....sl 11e50 6f 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 7d ot_count = 0;..} 11e60 20 65 6c 73 65 20 7b 0a 09 09 70 63 73 63 5f 72 else {...pcsc_r 11e70 65 61 64 65 72 73 5f 6c 65 6e 20 3d 20 30 3b 0a eaders_len = 0;. 11e80 0a 09 09 73 63 61 72 64 5f 6c 69 73 74 72 65 61 ...scard_listrea 11e90 64 65 72 73 5f 72 65 74 20 3d 20 53 43 61 72 64 ders_ret = SCard 11ea0 4c 69 73 74 52 65 61 64 65 72 73 28 2a 63 61 63 ListReaders(*cac 11eb0 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 2c key_pcsc_handle, 11ec0 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 26 70 63 NULL, NULL, &pc 11ed0 73 63 5f 72 65 61 64 65 72 73 5f 6c 65 6e 29 3b sc_readers_len); 11ee0 0a 09 09 69 66 20 28 73 63 61 72 64 5f 6c 69 73 ...if (scard_lis 11ef0 74 72 65 61 64 65 72 73 5f 72 65 74 20 3d 3d 20 treaders_ret == 11f00 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 20 SCARD_S_SUCCESS 11f10 26 26 20 70 63 73 63 5f 72 65 61 64 65 72 73 5f && pcsc_readers_ 11f20 6c 65 6e 20 21 3d 20 30 29 20 7b 0a 09 09 09 70 len != 0) {....p 11f30 63 73 63 5f 72 65 61 64 65 72 73 20 3d 20 6d 61 csc_readers = ma 11f40 6c 6c 6f 63 28 70 63 73 63 5f 72 65 61 64 65 72 lloc(pcsc_reader 11f50 73 5f 6c 65 6e 29 3b 0a 09 09 09 70 63 73 63 5f s_len);....pcsc_ 11f60 72 65 61 64 65 72 73 5f 73 20 3d 20 70 63 73 63 readers_s = pcsc 11f70 5f 72 65 61 64 65 72 73 3b 0a 0a 09 09 09 73 63 _readers;.....sc 11f80 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f ard_listreaders_ 11f90 72 65 74 20 3d 20 53 43 61 72 64 4c 69 73 74 52 ret = SCardListR 11fa0 65 61 64 65 72 73 28 2a 63 61 63 6b 65 79 5f 70 eaders(*cackey_p 11fb0 63 73 63 5f 68 61 6e 64 6c 65 2c 20 4e 55 4c 4c csc_handle, NULL 11fc0 2c 20 70 63 73 63 5f 72 65 61 64 65 72 73 2c 20 , pcsc_readers, 11fd0 26 70 63 73 63 5f 72 65 61 64 65 72 73 5f 6c 65 &pcsc_readers_le 11fe0 6e 29 3b 0a 09 09 09 69 66 20 28 73 63 61 72 64 n);....if (scard 11ff0 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 _listreaders_ret 12000 20 3d 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 == SCARD_S_SUCC 12010 45 53 53 29 20 7b 0a 09 09 09 09 70 63 73 63 5f ESS) {.....pcsc_ 12020 72 65 61 64 65 72 73 5f 65 20 3d 20 70 63 73 63 readers_e = pcsc 12030 5f 72 65 61 64 65 72 73 20 2b 20 70 63 73 63 5f _readers + pcsc_ 12040 72 65 61 64 65 72 73 5f 6c 65 6e 3b 0a 0a 09 09 readers_len;.... 12050 09 09 63 75 72 72 73 6c 6f 74 20 3d 20 30 3b 0a ..currslot = 0;. 12060 09 09 09 09 77 68 69 6c 65 20 28 70 63 73 63 5f ....while (pcsc_ 12070 72 65 61 64 65 72 73 20 3c 20 70 63 73 63 5f 72 readers < pcsc_r 12080 65 61 64 65 72 73 5f 65 29 20 7b 0a 09 09 09 09 eaders_e) {..... 12090 09 63 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e .curr_reader_len 120a0 20 3d 20 73 74 72 6c 65 6e 28 70 63 73 63 5f 72 = strlen(pcsc_r 120b0 65 61 64 65 72 73 29 3b 0a 0a 09 09 09 09 09 69 eaders);.......i 120c0 66 20 28 28 70 63 73 63 5f 72 65 61 64 65 72 73 f ((pcsc_readers 120d0 20 2b 20 63 75 72 72 5f 72 65 61 64 65 72 5f 6c + curr_reader_l 120e0 65 6e 29 20 3e 20 70 63 73 63 5f 72 65 61 64 65 en) > pcsc_reade 120f0 72 73 5f 65 29 20 7b 0a 09 09 09 09 09 09 62 72 rs_e) {.......br 12100 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09 eak;......}..... 12110 09 09 69 66 20 28 63 75 72 72 5f 72 65 61 64 65 ..if (curr_reade 12120 72 5f 6c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 r_len == 0) {... 12130 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 ....break;...... 12140 7d 0a 0a 09 09 09 09 09 69 66 20 28 63 75 72 72 }.......if (curr 12150 73 6c 6f 74 20 3e 3d 20 28 73 69 7a 65 6f 66 28 slot >= (sizeof( 12160 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 cackey_slots) / 12170 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c sizeof(cackey_sl 12180 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 09 09 ots[0]))) {..... 12190 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 121a0 52 49 4e 54 46 28 22 46 6f 75 6e 64 20 6d 6f 72 RINTF("Found mor 121b0 65 20 72 65 61 64 65 72 73 20 74 68 61 6e 20 73 e readers than s 121c0 6c 6f 74 73 20 61 72 65 20 61 76 61 69 6c 61 62 lots are availab 121d0 6c 65 21 22 29 3b 0a 0a 09 09 09 09 09 09 62 72 le!");........br 121e0 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09 eak;......}..... 121f0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 12200 52 49 4e 54 46 28 22 46 6f 75 6e 64 20 72 65 61 RINTF("Found rea 12210 64 65 72 3a 20 25 73 22 2c 20 70 63 73 63 5f 72 der: %s", pcsc_r 12220 65 61 64 65 72 73 29 3b 0a 0a 09 09 09 09 09 2f eaders);......./ 12230 2a 20 4f 6e 6c 79 20 75 70 64 61 74 65 20 74 68 * Only update th 12240 65 20 6c 69 73 74 20 6f 66 20 73 6c 6f 74 73 20 e list of slots 12250 69 66 20 77 65 20 61 72 65 20 61 63 74 75 61 6c if we are actual 12260 6c 79 20 62 65 69 6e 67 20 73 75 70 70 6c 79 20 ly being supply 12270 74 68 65 20 73 6c 6f 74 20 69 6e 66 6f 72 6d 61 the slot informa 12280 74 69 6f 6e 20 2a 2f 0a 09 09 09 09 09 69 66 20 tion */......if 12290 28 70 53 6c 6f 74 4c 69 73 74 29 20 7b 0a 09 09 (pSlotList) {... 122a0 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 ....cackey_slots 122b0 5b 63 75 72 72 73 6c 6f 74 5d 2e 61 63 74 69 76 [currslot].activ 122c0 65 20 3d 20 31 3b 0a 09 09 09 09 09 09 63 61 63 e = 1;.......cac 122d0 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c key_slots[currsl 122e0 6f 74 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 20 ot].pcsc_reader 122f0 3d 20 73 74 72 64 75 70 28 70 63 73 63 5f 72 65 = strdup(pcsc_re 12300 61 64 65 72 73 29 3b 0a 09 09 09 09 09 09 63 61 aders);.......ca 12310 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 ckey_slots[currs 12320 6c 6f 74 5d 2e 70 63 73 63 5f 63 61 72 64 5f 63 lot].pcsc_card_c 12330 6f 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a 09 09 onnected = 0;... 12340 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 ....cackey_slots 12350 5b 63 75 72 72 73 6c 6f 74 5d 2e 74 72 61 6e 73 [currslot].trans 12360 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3d 20 30 action_depth = 0 12370 3b 0a 09 09 09 09 09 09 63 61 63 6b 65 79 5f 73 ;.......cackey_s 12380 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 73 lots[currslot].s 12390 6c 6f 74 5f 72 65 73 65 74 20 3d 20 31 3b 0a 09 lot_reset = 1;.. 123a0 09 09 09 09 7d 0a 09 09 09 09 09 63 75 72 72 73 ....}......currs 123b0 6c 6f 74 2b 2b 3b 0a 0a 09 09 09 09 09 70 63 73 lot++;.......pcs 123c0 63 5f 72 65 61 64 65 72 73 20 2b 3d 20 63 75 72 c_readers += cur 123d0 72 5f 72 65 61 64 65 72 5f 6c 65 6e 20 2b 20 31 r_reader_len + 1 123e0 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 ;.....}......if 123f0 28 63 75 72 72 73 6c 6f 74 20 3e 20 30 29 20 7b (currslot > 0) { 12400 0a 09 09 09 09 09 73 6c 6f 74 5f 63 6f 75 6e 74 ......slot_count 12410 20 3d 20 63 75 72 72 73 6c 6f 74 3b 0a 09 09 09 = currslot;.... 12420 09 7d 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 .}....} else {.. 12430 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 12440 50 52 49 4e 54 46 28 22 53 65 63 6f 6e 64 20 63 PRINTF("Second c 12450 61 6c 6c 20 74 6f 20 53 43 61 72 64 4c 69 73 74 all to SCardList 12460 52 65 61 64 65 72 73 20 66 61 69 6c 65 64 2c 20 Readers failed, 12470 72 65 74 75 72 6e 20 25 73 2f 25 6c 69 22 2c 20 return %s/%li", 12480 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN 12490 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 C_SCARDERR_TO_ST 124a0 52 28 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 R(scard_listread 124b0 65 72 73 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 ers_ret), (long) 124c0 20 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 scard_listreade 124d0 72 73 5f 72 65 74 29 3b 0a 09 09 09 7d 0a 0a 09 rs_ret);....}... 124e0 09 09 66 72 65 65 28 70 63 73 63 5f 72 65 61 64 ..free(pcsc_read 124f0 65 72 73 5f 73 29 3b 0a 09 09 7d 20 65 6c 73 65 ers_s);...} else 12500 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB 12510 55 47 5f 50 52 49 4e 54 46 28 22 46 69 72 73 74 UG_PRINTF("First 12520 20 63 61 6c 6c 20 74 6f 20 53 43 61 72 64 4c 69 call to SCardLi 12530 73 74 52 65 61 64 65 72 73 20 66 61 69 6c 65 64 stReaders failed 12540 2c 20 72 65 74 75 72 6e 20 25 73 2f 25 6c 69 22 , return %s/%li" 12550 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F 12560 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f UNC_SCARDERR_TO_ 12570 53 54 52 28 73 63 61 72 64 5f 6c 69 73 74 72 65 STR(scard_listre 12580 61 64 65 72 73 5f 72 65 74 29 2c 20 28 6c 6f 6e aders_ret), (lon 12590 67 29 20 73 63 61 72 64 5f 6c 69 73 74 72 65 61 g) scard_listrea 125a0 64 65 72 73 5f 72 65 74 29 3b 0a 09 09 7d 0a 09 ders_ret);...}.. 125b0 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 125c0 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 125d0 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 125e0 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 glock);..if (mut 125f0 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 12600 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 12610 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 12620 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 Unlocking faile 12630 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 12640 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 12650 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 53 6c R);..}...if (pSl 12660 6f 74 4c 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 20 otList == NULL) 12670 7b 0a 09 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 {...*pulCount = 12680 73 6c 6f 74 5f 63 6f 75 6e 74 3b 0a 0a 09 09 43 slot_count;....C 12690 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 126a0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 126b0 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ 126c0 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 OK);....return(C 126d0 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 63 6f 75 KR_OK);..}...cou 126e0 6e 74 20 3d 20 2a 70 75 6c 43 6f 75 6e 74 3b 0a nt = *pulCount;. 126f0 09 69 66 20 28 63 6f 75 6e 74 20 3c 20 73 6c 6f .if (count < slo 12700 74 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 43 41 43 t_count) {...CAC 12710 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 12720 28 22 45 72 72 6f 72 2e 20 55 73 65 72 20 61 6c ("Error. User al 12730 6c 6f 63 61 74 65 64 20 25 6c 75 20 65 6e 74 72 located %lu entr 12740 69 65 73 2c 20 62 75 74 20 77 65 20 68 61 76 65 ies, but we have 12750 20 25 6c 75 20 65 6e 74 72 69 65 73 2e 22 2c 20 %lu entries.", 12760 63 6f 75 6e 74 2c 20 73 6c 6f 74 5f 63 6f 75 6e count, slot_coun 12770 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b t);....return(CK 12780 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 R_BUFFER_TOO_SMA 12790 4c 4c 29 3b 09 0a 09 7d 0a 0a 09 66 6f 72 20 28 LL);...}...for ( 127a0 63 75 72 72 73 6c 6f 74 20 3d 20 30 3b 20 63 75 currslot = 0; cu 127b0 72 72 73 6c 6f 74 20 3c 20 73 6c 6f 74 5f 63 6f rrslot < slot_co 127c0 75 6e 74 3b 20 63 75 72 72 73 6c 6f 74 2b 2b 29 unt; currslot++) 127d0 20 7b 0a 09 09 70 53 6c 6f 74 4c 69 73 74 5b 63 {...pSlotList[c 127e0 75 72 72 73 6c 6f 74 5d 20 3d 20 63 75 72 72 73 urrslot] = currs 127f0 6c 6f 74 3b 0a 09 7d 0a 0a 09 2a 70 75 6c 43 6f lot;..}...*pulCo 12800 75 6e 74 20 3d 20 73 6c 6f 74 5f 63 6f 75 6e 74 unt = slot_count 12810 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 12820 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 12830 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 2e 20 ng CKR_OK (%i). 12840 20 46 6f 75 6e 64 20 25 6c 75 20 72 65 61 64 65 Found %lu reade 12850 72 73 2e 22 2c 20 43 4b 52 5f 4f 4b 2c 20 28 75 rs.", CKR_OK, (u 12860 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 6c nsigned long) sl 12870 6f 74 5f 63 6f 75 6e 74 29 3b 0a 0a 09 72 65 74 ot_count);...ret 12880 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 74 urn(CKR_OK);...t 12890 6f 6b 65 6e 50 72 65 73 65 6e 74 20 3d 20 74 6f okenPresent = to 128a0 6b 65 6e 50 72 65 73 65 6e 74 3b 20 2f 2a 20 53 kenPresent; /* S 128b0 75 70 72 65 73 73 20 75 6e 75 73 65 64 20 76 61 upress unused va 128c0 72 69 61 62 6c 65 20 77 61 72 6e 69 6e 67 20 2a riable warning * 128d0 2f 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 /.}..CK_DEFINE_F 128e0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 128f0 5f 47 65 74 53 6c 6f 74 49 6e 66 6f 29 28 43 4b _GetSlotInfo)(CK 12900 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c _SLOT_ID slotID, 12910 20 43 4b 5f 53 4c 4f 54 5f 49 4e 46 4f 5f 50 54 CK_SLOT_INFO_PT 12920 52 20 70 49 6e 66 6f 29 20 7b 0a 09 73 74 61 74 R pInfo) {..stat 12930 69 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20 73 ic CK_UTF8CHAR s 12940 6c 6f 74 44 65 73 63 72 69 70 74 69 6f 6e 5b 5d lotDescription[] 12950 20 3d 20 22 43 41 43 4b 65 79 20 53 6c 6f 74 22 = "CACKey Slot" 12960 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 ;..int mutex_ret 12970 76 61 6c 3b 0a 09 69 6e 74 20 62 79 74 65 73 5f val;..int bytes_ 12980 74 6f 5f 63 6f 70 79 3b 0a 0a 09 43 41 43 4b 45 to_copy;...CACKE 12990 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 129a0 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 129b0 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 20 (pInfo == NULL) 129c0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 129d0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 129e0 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 29 pInfo is NULL.") 129f0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 12a00 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 12a10 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 12a20 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 12a30 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 12a40 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 12a50 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 12a60 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 12a70 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 12a80 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 12a90 09 69 66 20 28 73 6c 6f 74 49 44 20 3c 20 30 20 .if (slotID < 0 12aa0 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 28 73 69 || slotID >= (si 12ab0 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 12ac0 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 12ad0 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b ey_slots[0]))) { 12ae0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 12af0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 PRINTF("Error. I 12b00 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 nvalid slot requ 12b10 65 73 74 65 64 20 28 25 6c 75 29 2c 20 6f 75 74 ested (%lu), out 12b20 73 69 64 65 20 6f 66 20 76 61 6c 69 64 20 72 61 side of valid ra 12b30 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a nge", slotID);.. 12b40 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f ..return(CKR_SLO 12b50 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 T_ID_INVALID);.. 12b60 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 12b70 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 12b80 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 12b90 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 12ba0 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 12bb0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 12bc0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 12bd0 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 12be0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 12bf0 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 12c00 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f .}...if (cackey_ 12c10 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 slots[slotID].ac 12c20 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09 09 43 tive == 0) {...C 12c30 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 12c40 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c TF("Error. Inval 12c50 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 id slot requeste 12c60 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f d (%lu), slot no 12c70 74 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 t currently acti 12c80 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 ve", slotID);... 12c90 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e .cackey_mutex_un 12ca0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 12cb0 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 ock);....return( 12cc0 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 CKR_SLOT_ID_INVA 12cd0 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 LID);..}...mutex 12ce0 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 12cf0 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 12d00 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 12d10 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 12d20 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 12d30 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 12d40 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e Error. Unlockin 12d50 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 12d60 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 12d70 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 12d80 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 73 6c memset(pInfo->sl 12d90 6f 74 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 27 otDescription, ' 12da0 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f ', sizeof(pInfo 12db0 2d 3e 73 6c 6f 74 44 65 73 63 72 69 70 74 69 6f ->slotDescriptio 12dc0 6e 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e n));..memcpy(pIn 12dd0 66 6f 2d 3e 73 6c 6f 74 44 65 73 63 72 69 70 74 fo->slotDescript 12de0 69 6f 6e 2c 20 73 6c 6f 74 44 65 73 63 72 69 70 ion, slotDescrip 12df0 74 69 6f 6e 2c 20 73 69 7a 65 6f 66 28 73 6c 6f tion, sizeof(slo 12e00 74 44 65 73 63 72 69 70 74 69 6f 6e 29 20 2d 20 tDescription) - 12e10 31 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 1);...memset(pIn 12e20 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 fo->manufacturer 12e30 49 44 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 ID, ' ', sizeof( 12e40 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 pInfo->manufactu 12e50 72 65 72 49 44 29 29 3b 0a 0a 09 62 79 74 65 73 rerID));...bytes 12e60 5f 74 6f 5f 63 6f 70 79 20 3d 20 73 74 72 6c 65 _to_copy = strle 12e70 6e 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 n(cackey_slots[s 12e80 6c 6f 74 49 44 5d 2e 70 63 73 63 5f 72 65 61 64 lotID].pcsc_read 12e90 65 72 29 3b 0a 09 69 66 20 28 73 69 7a 65 6f 66 er);..if (sizeof 12ea0 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 (pInfo->manufact 12eb0 75 72 65 72 49 44 29 20 3c 20 62 79 74 65 73 5f urerID) < bytes_ 12ec0 74 6f 5f 63 6f 70 79 29 20 7b 0a 09 09 62 79 74 to_copy) {...byt 12ed0 65 73 5f 74 6f 5f 63 6f 70 79 20 3d 20 73 69 7a es_to_copy = siz 12ee0 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 eof(pInfo->manuf 12ef0 61 63 74 75 72 65 72 49 44 29 3b 0a 09 7d 0a 09 acturerID);..}.. 12f00 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6d 61 memcpy(pInfo->ma 12f10 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 63 61 nufacturerID, ca 12f20 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 ckey_slots[slotI 12f30 44 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 2c 20 D].pcsc_reader, 12f40 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 3b 0a bytes_to_copy);. 12f50 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d ..pInfo->flags = 12f60 20 30 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 0;...if (cackey 12f70 5f 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 28 26 _token_present(& 12f80 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo 12f90 74 49 44 5d 29 20 3d 3d 20 43 41 43 4b 45 59 5f tID]) == CACKEY_ 12fa0 50 43 53 43 5f 53 5f 54 4f 4b 45 4e 50 52 45 53 PCSC_S_TOKENPRES 12fb0 45 4e 54 29 20 7b 0a 09 09 70 49 6e 66 6f 2d 3e ENT) {...pInfo-> 12fc0 66 6c 61 67 73 20 7c 3d 20 43 4b 46 5f 54 4f 4b flags |= CKF_TOK 12fd0 45 4e 5f 50 52 45 53 45 4e 54 3b 0a 09 7d 0a 0a EN_PRESENT;..}.. 12fe0 09 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 65 .pInfo->hardware 12ff0 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 Version.major = 13000 28 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 (cackey_getversi 13010 6f 6e 28 29 20 3e 3e 20 31 36 29 20 26 20 30 78 on() >> 16) & 0x 13020 66 66 3b 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 64 ff;..pInfo->hard 13030 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f wareVersion.mino 13040 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 65 74 76 r = (cackey_getv 13050 65 72 73 69 6f 6e 28 29 20 3e 3e 20 38 29 20 26 ersion() >> 8) & 13060 20 30 78 66 66 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 0xff;...pInfo-> 13070 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f 6e 2e firmwareVersion. 13080 6d 61 6a 6f 72 20 3d 20 30 78 30 30 3b 0a 09 70 major = 0x00;..p 13090 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 72 65 56 65 Info->firmwareVe 130a0 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 30 78 rsion.minor = 0x 130b0 30 30 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 00;...CACKEY_DEB 130c0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 130d0 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 130e0 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 130f0 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 13100 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 13110 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 ION(CK_RV, C_Get 13120 54 6f 6b 65 6e 49 6e 66 6f 29 28 43 4b 5f 53 4c TokenInfo)(CK_SL 13130 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b OT_ID slotID, CK 13140 5f 54 4f 4b 45 4e 5f 49 4e 46 4f 5f 50 54 52 20 _TOKEN_INFO_PTR 13150 70 49 6e 66 6f 29 20 7b 0a 09 73 74 61 74 69 63 pInfo) {..static 13160 20 43 4b 5f 55 54 46 38 43 48 41 52 20 6d 61 6e CK_UTF8CHAR man 13170 75 66 61 63 74 75 72 65 72 49 44 5b 5d 20 3d 20 ufacturerID[] = 13180 22 55 2e 53 2e 20 47 6f 76 65 72 6e 6d 65 6e 74 "U.S. Government 13190 22 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 54 ";..static CK_UT 131a0 46 38 43 48 41 52 20 64 65 66 61 75 6c 74 4c 61 F8CHAR defaultLa 131b0 62 65 6c 5b 5d 20 3d 20 22 55 6e 6b 6e 6f 77 6e bel[] = "Unknown 131c0 20 54 6f 6b 65 6e 22 3b 0a 09 73 74 61 74 69 63 Token";..static 131d0 20 43 4b 5f 55 54 46 38 43 48 41 52 20 6d 6f 64 CK_UTF8CHAR mod 131e0 65 6c 5b 5d 20 3d 20 22 43 41 43 20 54 6f 6b 65 el[] = "CAC Toke 131f0 6e 22 3b 0a 09 73 74 72 75 63 74 20 63 61 63 6b n";..struct cack 13200 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 ey_pcsc_identity 13210 20 2a 70 63 73 63 5f 69 64 65 6e 74 69 74 69 65 *pcsc_identitie 13220 73 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e s;..unsigned lon 13230 67 20 6e 75 6d 5f 63 65 72 74 73 3b 0a 09 73 73 g num_certs;..ss 13240 69 7a 65 5f 74 20 6c 61 62 65 6c 5f 72 65 74 3b ize_t label_ret; 13250 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 ..int mutex_retv 13260 61 6c 3b 0a 09 69 6e 74 20 75 73 65 5f 64 65 66 al;..int use_def 13270 61 75 6c 74 5f 6c 61 62 65 6c 3b 0a 0a 09 43 41 ault_label;...CA 13280 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 13290 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 132a0 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c if (pInfo == NUL 132b0 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 L) {...CACKEY_DE 132c0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 132d0 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c r. pInfo is NULL 132e0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 132f0 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD 13300 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 13310 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 13320 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 13330 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 13340 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 13350 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 13360 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 13370 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 13380 7d 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 3c }...if (slotID < 13390 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 0 || slotID >= 133a0 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 (sizeof(cackey_s 133b0 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 lots) / sizeof(c 133c0 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 ackey_slots[0])) 133d0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 133e0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 133f0 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 . Invalid slot r 13400 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 equested (%lu), 13410 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 64 outside of valid 13420 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 range", slotID) 13430 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 13440 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 SLOT_ID_INVALID) 13450 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 13460 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 13470 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 ex_lock(cackey_b 13480 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 13490 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 134a0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 134b0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 134c0 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Locking failed 134d0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 134e0 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 134f0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b );..}...if (cack 13500 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d ey_slots[slotID] 13510 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a .active == 0) {. 13520 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 13530 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e RINTF("Error. In 13540 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 valid slot reque 13550 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 sted (%lu), slot 13560 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 not currently a 13570 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b ctive", slotID); 13580 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 ....cackey_mutex 13590 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 135a0 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 iglock);....retu 135b0 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 rn(CKR_SLOT_ID_I 135c0 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 NVALID);..}...if 135d0 20 28 63 61 63 6b 65 79 5f 74 6f 6b 65 6e 5f 70 (cackey_token_p 135e0 72 65 73 65 6e 74 28 26 63 61 63 6b 65 79 5f 73 resent(&cackey_s 135f0 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 29 20 21 3d lots[slotID]) != 13600 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 54 CACKEY_PCSC_S_T 13610 4f 4b 45 4e 50 52 45 53 45 4e 54 29 20 7b 0a 09 OKENPRESENT) {.. 13620 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 13630 49 4e 54 46 28 22 4e 6f 20 74 6f 6b 65 6e 20 69 INTF("No token i 13640 73 20 70 72 65 73 65 6e 74 20 69 6e 20 73 6c 6f s present in slo 13650 74 49 44 20 3d 20 25 6c 75 22 2c 20 73 6c 6f 74 tID = %lu", slot 13660 49 44 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d ID);....cackey_m 13670 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 13680 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 13690 72 65 74 75 72 6e 28 43 4b 52 5f 54 4f 4b 45 4e return(CKR_TOKEN 136a0 5f 4e 4f 54 5f 50 52 45 53 45 4e 54 29 3b 0a 09 _NOT_PRESENT);.. 136b0 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 136c0 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 136d0 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 136e0 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 glock);..if (mut 136f0 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 13700 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 13710 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 13720 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 Unlocking faile 13730 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 13740 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 13750 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 44 65 74 65 R);..}.../* Dete 13760 72 6d 69 6e 65 20 74 6f 6b 65 6e 20 6c 61 62 65 rmine token labe 13770 6c 20 66 72 6f 6d 20 63 65 72 74 69 66 69 63 61 l from certifica 13780 74 65 73 20 2a 2f 0a 09 6d 65 6d 73 65 74 28 70 tes */..memset(p 13790 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20 27 20 27 Info->label, ' ' 137a0 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e , sizeof(pInfo-> 137b0 6c 61 62 65 6c 29 29 3b 0a 09 75 73 65 5f 64 65 label));..use_de 137c0 66 61 75 6c 74 5f 6c 61 62 65 6c 20 3d 20 31 3b fault_label = 1; 137d0 0a 0a 09 70 63 73 63 5f 69 64 65 6e 74 69 74 69 ...pcsc_identiti 137e0 65 73 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 es = cackey_read 137f0 5f 63 65 72 74 73 28 26 63 61 63 6b 65 79 5f 73 _certs(&cackey_s 13800 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2c 20 4e 55 lots[slotID], NU 13810 4c 4c 2c 20 26 6e 75 6d 5f 63 65 72 74 73 29 3b LL, &num_certs); 13820 0a 09 69 66 20 28 70 63 73 63 5f 69 64 65 6e 74 ..if (pcsc_ident 13830 69 74 69 65 73 20 21 3d 20 4e 55 4c 4c 29 20 7b ities != NULL) { 13840 0a 09 09 69 66 20 28 6e 75 6d 5f 63 65 72 74 73 ...if (num_certs 13850 20 3e 20 30 29 20 7b 0a 09 09 09 6c 61 62 65 6c > 0) {....label 13860 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 70 63 _ret = cackey_pc 13870 73 63 5f 69 64 65 6e 74 69 74 79 5f 74 6f 5f 6c sc_identity_to_l 13880 61 62 65 6c 28 70 63 73 63 5f 69 64 65 6e 74 69 abel(pcsc_identi 13890 74 69 65 73 2c 20 70 49 6e 66 6f 2d 3e 6c 61 62 ties, pInfo->lab 138a0 65 6c 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f el, sizeof(pInfo 138b0 2d 3e 6c 61 62 65 6c 29 29 3b 0a 09 09 09 69 66 ->label));....if 138c0 20 28 6c 61 62 65 6c 5f 72 65 74 20 3e 20 30 29 (label_ret > 0) 138d0 20 7b 0a 09 09 09 09 75 73 65 5f 64 65 66 61 75 {.....use_defau 138e0 6c 74 5f 6c 61 62 65 6c 20 3d 20 30 3b 0a 09 09 lt_label = 0;... 138f0 09 7d 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 .}...}....cackey 13900 5f 66 72 65 65 5f 63 65 72 74 73 28 70 63 73 63 _free_certs(pcsc 13910 5f 69 64 65 6e 74 69 74 69 65 73 2c 20 6e 75 6d _identities, num 13920 5f 63 65 72 74 73 2c 20 31 29 3b 0a 09 7d 0a 0a _certs, 1);..}.. 13930 09 69 66 20 28 75 73 65 5f 64 65 66 61 75 6c 74 .if (use_default 13940 5f 6c 61 62 65 6c 29 20 7b 0a 09 09 6d 65 6d 63 _label) {...memc 13950 70 79 28 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c py(pInfo->label, 13960 20 64 65 66 61 75 6c 74 4c 61 62 65 6c 2c 20 73 defaultLabel, s 13970 69 7a 65 6f 66 28 64 65 66 61 75 6c 74 4c 61 62 izeof(defaultLab 13980 65 6c 29 20 2d 20 31 29 3b 0a 09 7d 0a 0a 09 6d el) - 1);..}...m 13990 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d 61 6e emset(pInfo->man 139a0 75 66 61 63 74 75 72 65 72 49 44 2c 20 27 20 27 ufacturerID, ' ' 139b0 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e , sizeof(pInfo-> 139c0 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 29 manufacturerID)) 139d0 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d ;..memcpy(pInfo- 139e0 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c >manufacturerID, 139f0 20 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c manufacturerID, 13a00 20 73 69 7a 65 6f 66 28 6d 61 6e 75 66 61 63 74 sizeof(manufact 13a10 75 72 65 72 49 44 29 20 2d 20 31 29 3b 0a 0a 09 urerID) - 1);... 13a20 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d 6f memset(pInfo->mo 13a30 64 65 6c 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 del, ' ', sizeof 13a40 28 70 49 6e 66 6f 2d 3e 6d 6f 64 65 6c 29 29 3b (pInfo->model)); 13a50 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e ..memcpy(pInfo-> 13a60 6d 6f 64 65 6c 2c 20 6d 6f 64 65 6c 2c 20 73 69 model, model, si 13a70 7a 65 6f 66 28 6d 6f 64 65 6c 29 20 2d 20 31 29 zeof(model) - 1) 13a80 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f ;...memset(pInfo 13a90 2d 3e 73 65 72 69 61 6c 4e 75 6d 62 65 72 2c 20 ->serialNumber, 13aa0 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 ' ', sizeof(pInf 13ab0 6f 2d 3e 73 65 72 69 61 6c 4e 75 6d 62 65 72 29 o->serialNumber) 13ac0 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 );...memset(pInf 13ad0 6f 2d 3e 75 74 63 54 69 6d 65 2c 20 27 20 27 2c o->utcTime, ' ', 13ae0 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 75 sizeof(pInfo->u 13af0 74 63 54 69 6d 65 29 29 3b 0a 0a 09 70 49 6e 66 tcTime));...pInf 13b00 6f 2d 3e 68 61 72 64 77 61 72 65 56 65 72 73 69 o->hardwareVersi 13b10 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 61 63 6b on.major = (cack 13b20 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 20 ey_getversion() 13b30 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a 09 >> 16) & 0xff;.. 13b40 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 65 56 pInfo->hardwareV 13b50 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 ersion.minor = ( 13b60 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f cackey_getversio 13b70 6e 28 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66 n() >> 8) & 0xff 13b80 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66 69 72 6d 77 ;...pInfo->firmw 13b90 61 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 areVersion.major 13ba0 20 3d 20 30 78 30 30 3b 0a 09 70 49 6e 66 6f 2d = 0x00;..pInfo- 13bb0 3e 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f 6e >firmwareVersion 13bc0 2e 6d 69 6e 6f 72 20 3d 20 30 78 30 30 3b 0a 0a .minor = 0x00;.. 13bd0 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 .pInfo->flags = 13be0 43 4b 46 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 CKF_WRITE_PROTEC 13bf0 54 45 44 20 7c 20 43 4b 46 5f 55 53 45 52 5f 50 TED | CKF_USER_P 13c00 49 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 44 20 7c IN_INITIALIZED | 13c10 20 43 4b 46 5f 54 4f 4b 45 4e 5f 49 4e 49 54 49 CKF_TOKEN_INITI 13c20 41 4c 49 5a 45 44 20 7c 20 43 4b 46 5f 4c 4f 47 ALIZED | CKF_LOG 13c30 49 4e 5f 52 45 51 55 49 52 45 44 3b 0a 0a 09 70 IN_REQUIRED;...p 13c40 49 6e 66 6f 2d 3e 75 6c 4d 61 78 53 65 73 73 69 Info->ulMaxSessi 13c50 6f 6e 43 6f 75 6e 74 20 3d 20 28 73 69 7a 65 6f onCount = (sizeo 13c60 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 13c70 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 13c80 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 ey_sessions[0])) 13c90 20 2d 20 31 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c - 1;..pInfo->ul 13ca0 53 65 73 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 43 SessionCount = C 13cb0 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e K_UNAVAILABLE_IN 13cc0 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 FORMATION;..pInf 13cd0 6f 2d 3e 75 6c 4d 61 78 52 77 53 65 73 73 69 6f o->ulMaxRwSessio 13ce0 6e 43 6f 75 6e 74 20 3d 20 30 3b 0a 09 70 49 6e nCount = 0;..pIn 13cf0 66 6f 2d 3e 75 6c 52 77 53 65 73 73 69 6f 6e 43 fo->ulRwSessionC 13d00 6f 75 6e 74 20 3d 20 43 4b 5f 55 4e 41 56 41 49 ount = CK_UNAVAI 13d10 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f LABLE_INFORMATIO 13d20 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 N;..pInfo->ulMax 13d30 50 69 6e 4c 65 6e 20 3d 20 31 32 38 3b 0a 09 70 PinLen = 128;..p 13d40 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 50 69 6e 4c 65 Info->ulMinPinLe 13d50 6e 20 3d 20 30 3b 0a 09 70 49 6e 66 6f 2d 3e 75 n = 0;..pInfo->u 13d60 6c 54 6f 74 61 6c 50 75 62 6c 69 63 4d 65 6d 6f lTotalPublicMemo 13d70 72 79 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 ry = CK_UNAVAILA 13d80 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b BLE_INFORMATION; 13d90 0a 09 70 49 6e 66 6f 2d 3e 75 6c 46 72 65 65 50 ..pInfo->ulFreeP 13da0 75 62 6c 69 63 4d 65 6d 6f 72 79 20 3d 20 43 4b ublicMemory = CK 13db0 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e 46 _UNAVAILABLE_INF 13dc0 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f ORMATION;..pInfo 13dd0 2d 3e 75 6c 54 6f 74 61 6c 50 72 69 76 61 74 65 ->ulTotalPrivate 13de0 4d 65 6d 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 56 Memory = CK_UNAV 13df0 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 AILABLE_INFORMAT 13e00 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 46 ION;..pInfo->ulF 13e10 72 65 65 50 72 69 76 61 74 65 4d 65 6d 6f 72 79 reePrivateMemory 13e20 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c = CK_UNAVAILABL 13e30 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 0a E_INFORMATION;.. 13e40 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 13e50 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 13e60 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK 13e70 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 R_OK);...return( 13e80 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 CKR_OK);.}..CK_D 13e90 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 13ea0 4b 5f 52 56 2c 20 43 5f 57 61 69 74 46 6f 72 53 K_RV, C_WaitForS 13eb0 6c 6f 74 45 76 65 6e 74 29 28 43 4b 5f 46 4c 41 lotEvent)(CK_FLA 13ec0 47 53 20 66 6c 61 67 73 2c 20 43 4b 5f 53 4c 4f GS flags, CK_SLO 13ed0 54 5f 49 44 5f 50 54 52 20 70 53 6c 6f 74 49 44 T_ID_PTR pSlotID 13ee0 2c 20 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 52 , CK_VOID_PTR pR 13ef0 65 73 65 72 76 65 64 29 20 7b 0a 09 43 41 43 4b eserved) {..CACK 13f00 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 13f10 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 13f20 20 28 70 52 65 73 65 72 76 65 64 20 21 3d 20 4e (pReserved != N 13f30 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ULL) {...CACKEY_ 13f40 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 13f50 72 6f 72 2e 20 70 52 65 73 65 72 76 65 64 20 69 ror. pReserved i 13f60 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a s not NULL.");.. 13f70 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG 13f80 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a UMENTS_BAD);..}. 13f90 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 13fa0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 13fb0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 13fc0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 13fd0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 13fe0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 13ff0 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 14000 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 14010 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 14020 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 14030 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 14040 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C 14050 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 14060 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re 14070 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO 14080 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 14090 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 140a0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 140b0 5f 47 65 74 4d 65 63 68 61 6e 69 73 6d 4c 69 73 _GetMechanismLis 140c0 74 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c t)(CK_SLOT_ID sl 140d0 6f 74 49 44 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 otID, CK_MECHANI 140e0 53 4d 5f 54 59 50 45 5f 50 54 52 20 70 4d 65 63 SM_TYPE_PTR pMec 140f0 68 61 6e 69 73 6d 4c 69 73 74 2c 20 43 4b 5f 55 hanismList, CK_U 14100 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 43 6f 75 6e LONG_PTR pulCoun 14110 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 t) {..CACKEY_DEB 14120 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 14130 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 14140 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 14150 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 14160 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 14170 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 14180 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 14190 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 141a0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 141b0 7d 0a 0a 09 69 66 20 28 70 75 6c 43 6f 75 6e 74 }...if (pulCount 141c0 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 == NULL) {...CA 141d0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 141e0 46 28 22 45 72 72 6f 72 2e 20 20 70 75 6c 43 6f F("Error. pulCo 141f0 75 6e 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a unt is NULL.");. 14200 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 14210 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} 14220 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 6e 69 73 ...if (pMechanis 14230 6d 4c 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b mList == NULL) { 14240 0a 09 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 33 ...*pulCount = 3 14250 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 14260 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 14270 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 14280 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 , CKR_OK);....re 14290 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d turn(CKR_OK);..} 142a0 0a 0a 09 69 66 20 28 2a 70 75 6c 43 6f 75 6e 74 ...if (*pulCount 142b0 20 3c 20 33 29 20 7b 0a 09 09 43 41 43 4b 45 59 < 3) {...CACKEY 142c0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 142d0 72 72 6f 72 2e 20 20 42 75 66 66 65 72 20 74 6f rror. Buffer to 142e0 6f 20 73 6d 61 6c 6c 2e 22 29 3b 0a 0a 09 09 72 o small.");....r 142f0 65 74 75 72 6e 28 43 4b 52 5f 42 55 46 46 45 52 eturn(CKR_BUFFER 14300 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 3b 0a 09 7d 0a _TOO_SMALL);..}. 14310 0a 09 70 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 ..pMechanismList 14320 5b 30 5d 20 3d 20 43 4b 4d 5f 52 53 41 5f 50 4b [0] = CKM_RSA_PK 14330 43 53 3b 0a 09 70 4d 65 63 68 61 6e 69 73 6d 4c CS;..pMechanismL 14340 69 73 74 5b 31 5d 20 3d 20 43 4b 4d 5f 53 48 41 ist[1] = CKM_SHA 14350 31 5f 52 53 41 5f 50 4b 43 53 3b 0a 09 2a 70 75 1_RSA_PKCS;..*pu 14360 6c 43 6f 75 6e 74 20 3d 20 32 3b 0a 0a 09 43 41 lCount = 2;...CA 14370 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 14380 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 14390 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f _OK (%i)", CKR_O 143a0 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 K);...return(CKR 143b0 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 _OK);.}..CK_DEFI 143c0 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 143d0 56 2c 20 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 V, C_GetMechanis 143e0 6d 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49 mInfo)(CK_SLOT_I 143f0 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 4d 45 43 D slotID, CK_MEC 14400 48 41 4e 49 53 4d 5f 54 59 50 45 20 74 79 70 65 HANISM_TYPE type 14410 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 49 , CK_MECHANISM_I 14420 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 7b NFO_PTR pInfo) { 14430 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 ..int mutex_retv 14440 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 al;...CACKEY_DEB 14450 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 14460 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 49 6e 66 d.");...if (pInf 14470 6f 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 o == NULL) {...C 14480 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 14490 54 46 28 22 45 72 72 6f 72 2e 20 70 49 6e 66 6f TF("Error. pInfo 144a0 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 is NULL.");.... 144b0 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM 144c0 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 ENTS_BAD);..}... 144d0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 144e0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 144f0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 14500 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 14510 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 14520 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 14530 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 14540 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 IZED);..}...if ( 14550 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c slotID < 0 || sl 14560 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 otID >= (sizeof( 14570 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 cackey_slots) / 14580 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c sizeof(cackey_sl 14590 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 ots[0]))) {...CA 145a0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 145b0 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 F("Error. Invali 145c0 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 d slot requested 145d0 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 (%lu), outside 145e0 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c of valid range", 145f0 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 slotID);....ret 14600 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f urn(CKR_SLOT_ID_ 14610 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d INVALID);..}...m 14620 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 14630 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( 14640 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 14650 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 14660 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 14670 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 14680 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e ("Error. Lockin 14690 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 146a0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 146b0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 146c0 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 if (cackey_slots 146d0 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 [slotID].active 146e0 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 == 0) {...CACKEY 146f0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 14700 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c rror. Invalid sl 14710 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c ot requested (%l 14720 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 u), slot not cur 14730 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20 rently active", 14740 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b slotID);....cack 14750 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 14760 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 14770 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 14780 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b LOT_ID_INVALID); 14790 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 147a0 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 147b0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 147c0 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 147d0 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 147e0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 147f0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 14800 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 . Unlocking fai 14810 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 14820 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 14830 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 58 58 ROR);..}.../* XX 14840 58 3a 20 54 68 69 73 20 69 73 20 75 6e 74 65 73 X: This is untes 14850 74 65 64 2c 20 61 6e 64 20 66 75 72 74 68 65 72 ted, and further 14860 20 49 27 6d 20 6e 6f 74 20 72 65 61 6c 6c 79 20 I'm not really 14870 73 75 72 65 20 69 66 20 74 68 69 73 20 69 73 20 sure if this is 14880 63 6f 72 72 65 63 74 2e 20 2a 2f 0a 09 73 77 69 correct. */..swi 14890 74 63 68 20 28 74 79 70 65 29 20 7b 0a 09 09 63 tch (type) {...c 148a0 61 73 65 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 ase CKM_RSA_PKCS 148b0 3a 0a 09 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d 69 :....pInfo->ulMi 148c0 6e 4b 65 79 53 69 7a 65 20 3d 20 35 31 32 3b 0a nKeySize = 512;. 148d0 09 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 4b ...pInfo->ulMaxK 148e0 65 79 53 69 7a 65 20 3d 20 38 31 39 32 3b 0a 09 eySize = 8192;.. 148f0 09 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d ..pInfo->flags = 14900 20 43 4b 46 5f 48 57 20 7c 20 43 4b 46 5f 45 4e CKF_HW | CKF_EN 14910 43 52 59 50 54 20 7c 20 43 4b 46 5f 44 45 43 52 CRYPT | CKF_DECR 14920 59 50 54 20 7c 20 43 4b 46 5f 53 49 47 4e 20 7c YPT | CKF_SIGN | 14930 20 43 4b 46 5f 56 45 52 49 46 59 3b 0a 09 09 09 CKF_VERIFY;.... 14940 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 43 4b break;...case CK 14950 4d 5f 52 53 41 5f 58 5f 35 30 39 3a 0a 09 09 09 M_RSA_X_509:.... 14960 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 53 pInfo->ulMinKeyS 14970 69 7a 65 20 3d 20 35 31 32 3b 0a 09 09 09 70 49 ize = 512;....pI 14980 6e 66 6f 2d 3e 75 6c 4d 61 78 4b 65 79 53 69 7a nfo->ulMaxKeySiz 14990 65 20 3d 20 38 31 39 32 3b 0a 09 09 09 70 49 6e e = 8192;....pIn 149a0 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 43 4b 46 5f fo->flags = CKF_ 149b0 48 57 20 7c 20 43 4b 46 5f 45 4e 43 52 59 50 54 HW | CKF_ENCRYPT 149c0 20 7c 20 43 4b 46 5f 44 45 43 52 59 50 54 20 7c | CKF_DECRYPT | 149d0 20 43 4b 46 5f 53 49 47 4e 20 7c 20 43 4b 46 5f CKF_SIGN | CKF_ 149e0 56 45 52 49 46 59 3b 0a 09 09 09 62 72 65 61 6b VERIFY;....break 149f0 3b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 53 48 41 ;...case CKM_SHA 14a00 31 5f 52 53 41 5f 50 4b 43 53 3a 0a 09 09 09 70 1_RSA_PKCS:....p 14a10 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 53 69 Info->ulMinKeySi 14a20 7a 65 20 3d 20 35 31 32 3b 0a 09 09 09 70 49 6e ze = 512;....pIn 14a30 66 6f 2d 3e 75 6c 4d 61 78 4b 65 79 53 69 7a 65 fo->ulMaxKeySize 14a40 20 3d 20 38 31 39 32 3b 0a 09 09 09 70 49 6e 66 = 8192;....pInf 14a50 6f 2d 3e 66 6c 61 67 73 20 3d 20 43 4b 46 5f 48 o->flags = CKF_H 14a60 57 20 7c 20 43 4b 46 5f 53 49 47 4e 20 7c 20 43 W | CKF_SIGN | C 14a70 4b 46 5f 56 45 52 49 46 59 3b 0a 09 09 09 62 72 KF_VERIFY;....br 14a80 65 61 6b 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 eak;..}...CACKEY 14a90 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 14aa0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 eturning CKR_OK 14ab0 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a (%i)", CKR_OK);. 14ac0 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 ..return(CKR_OK) 14ad0 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 64 6f 6e 27 74 ;.}../* We don't 14ae0 20 73 75 70 70 6f 72 74 20 74 68 69 73 20 6d 65 support this me 14af0 74 68 6f 64 2e 20 2a 2f 0a 43 4b 5f 44 45 46 49 thod. */.CK_DEFI 14b00 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 14b10 56 2c 20 43 5f 49 6e 69 74 54 6f 6b 65 6e 29 28 V, C_InitToken)( 14b20 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 CK_SLOT_ID slotI 14b30 44 2c 20 43 4b 5f 55 54 46 38 43 48 41 52 5f 50 D, CK_UTF8CHAR_P 14b40 54 52 20 70 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e TR pPin, CK_ULON 14b50 47 20 75 6c 50 69 6e 4c 65 6e 2c 20 43 4b 5f 55 G ulPinLen, CK_U 14b60 54 46 38 43 48 41 52 5f 50 54 52 20 70 4c 61 62 TF8CHAR_PTR pLab 14b70 65 6c 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 el) {..CACKEY_DE 14b80 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 14b90 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 14ba0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 14bb0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 14bc0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 14bd0 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 14be0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 14bf0 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 14c00 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 14c10 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 14c20 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 14c30 69 6e 67 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 ing CKR_TOKEN_WR 14c40 49 54 45 5f 50 52 4f 54 45 43 54 45 44 20 28 25 ITE_PROTECTED (% 14c50 69 29 22 2c 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 i)", CKR_TOKEN_W 14c60 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 29 3b RITE_PROTECTED); 14c70 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 54 4f ...return(CKR_TO 14c80 4b 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 KEN_WRITE_PROTEC 14c90 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 64 TED);.}../* We d 14ca0 6f 6e 27 74 20 73 75 70 70 6f 72 74 20 74 68 69 on't support thi 14cb0 73 20 6d 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b 5f s method. */.CK_ 14cc0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 14cd0 43 4b 5f 52 56 2c 20 43 5f 49 6e 69 74 50 49 4e CK_RV, C_InitPIN 14ce0 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 14cf0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 14d00 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 50 _UTF8CHAR_PTR pP 14d10 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 in, CK_ULONG ulP 14d20 69 6e 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 inLen) {..CACKEY 14d30 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 14d40 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 14d50 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 14d60 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 14d70 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 14d80 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 14d90 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 14da0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 14db0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 14dc0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 14dd0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 14de0 75 72 6e 69 6e 67 20 43 4b 52 5f 54 4f 4b 45 4e urning CKR_TOKEN 14df0 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 _WRITE_PROTECTED 14e00 20 28 25 69 29 22 2c 20 43 4b 52 5f 54 4f 4b 45 (%i)", CKR_TOKE 14e10 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 N_WRITE_PROTECTE 14e20 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 14e30 5f 54 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 4f _TOKEN_WRITE_PRO 14e40 54 45 43 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 57 TECTED);.}../* W 14e50 65 20 64 6f 6e 27 74 20 73 75 70 70 6f 72 74 20 e don't support 14e60 74 68 69 73 20 6d 65 74 68 6f 64 2e 20 2a 2f 0a this method. */. 14e70 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 14e80 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 74 50 ON(CK_RV, C_SetP 14e90 49 4e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 IN)(CK_SESSION_H 14ea0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 14eb0 43 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 CK_UTF8CHAR_PTR 14ec0 70 4f 6c 64 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e pOldPin, CK_ULON 14ed0 47 20 75 6c 4f 6c 64 50 69 6e 4c 65 6e 2c 20 43 G ulOldPinLen, C 14ee0 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 K_UTF8CHAR_PTR p 14ef0 4e 65 77 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 NewPin, CK_ULONG 14f00 20 75 6c 4e 65 77 50 69 6e 4c 65 6e 29 20 7b 0a ulNewPinLen) {. 14f10 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 14f20 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 14f30 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 14f40 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 14f50 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 14f60 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 14f70 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 14f80 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 14f90 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 14fa0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 14fb0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 14fc0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 14fd0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 14fe0 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 14ff0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 15000 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 15010 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 15020 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 15030 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 15040 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 15050 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 29 28 43 C_OpenSession)(C 15060 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 K_SLOT_ID slotID 15070 2c 20 43 4b 5f 46 4c 41 47 53 20 66 6c 61 67 73 , CK_FLAGS flags 15080 2c 20 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 41 , CK_VOID_PTR pA 15090 70 70 6c 69 63 61 74 69 6f 6e 2c 20 43 4b 5f 4e pplication, CK_N 150a0 4f 54 49 46 59 20 6e 6f 74 69 66 79 2c 20 43 4b OTIFY notify, CK 150b0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 150c0 50 54 52 20 70 68 53 65 73 73 69 6f 6e 29 20 7b PTR phSession) { 150d0 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 ..unsigned long 150e0 69 64 78 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f idx;..int mutex_ 150f0 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 66 6f 75 retval;..int fou 15100 6e 64 5f 73 65 73 73 69 6f 6e 20 3d 20 30 3b 0a nd_session = 0;. 15110 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 15120 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 15130 3b 0a 0a 09 69 66 20 28 28 66 6c 61 67 73 20 26 ;...if ((flags & 15140 20 43 4b 46 5f 53 45 52 49 41 4c 5f 53 45 53 53 CKF_SERIAL_SESS 15150 49 4f 4e 29 20 21 3d 20 43 4b 46 5f 53 45 52 49 ION) != CKF_SERI 15160 41 4c 5f 53 45 53 53 49 4f 4e 29 20 7b 0a 09 09 AL_SESSION) {... 15170 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 15180 4f 4e 5f 50 41 52 41 4c 4c 45 4c 5f 4e 4f 54 5f ON_PARALLEL_NOT_ 15190 53 55 50 50 4f 52 54 45 44 29 3b 0a 09 7d 0a 0a SUPPORTED);..}.. 151a0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 151b0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 151c0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 151d0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 151e0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 151f0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 15200 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 15210 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 LIZED);..}...if 15220 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 (slotID < 0 || s 15230 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 lotID >= (sizeof 15240 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f (cackey_slots) / 15250 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s 15260 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 lots[0]))) {...C 15270 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 15280 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c TF("Error. Inval 15290 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 id slot requeste 152a0 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 d (%lu), outside 152b0 20 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 of valid range" 152c0 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 , slotID);....re 152d0 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 turn(CKR_SLOT_ID 152e0 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 152f0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 15300 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b ackey_mutex_lock 15310 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 15320 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 15330 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 15340 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 15350 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 F("Error. Locki 15360 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 15370 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 15380 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 15390 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 .if (cackey_slot 153a0 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 s[slotID].active 153b0 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 == 0) {...CACKE 153c0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 153d0 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 Error. Invalid s 153e0 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 lot requested (% 153f0 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 lu), slot not cu 15400 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c rrently active", 15410 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 slotID);....cac 15420 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 15430 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 15440 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 15450 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 SLOT_ID_INVALID) 15460 3b 0a 09 7d 0a 0a 09 2f 2a 20 56 65 72 69 66 79 ;..}.../* Verify 15470 20 74 68 61 74 20 74 68 65 20 63 61 72 64 20 69 that the card i 15480 73 20 61 63 74 75 61 6c 6c 79 20 69 6e 20 74 68 s actually in th 15490 65 20 73 6c 6f 74 2e 20 2a 2f 0a 09 2f 2a 20 58 e slot. */../* X 154a0 58 58 3a 20 43 68 65 63 6b 20 74 6f 20 6d 61 6b XX: Check to mak 154b0 65 20 73 75 72 65 20 74 68 69 73 20 69 73 20 69 e sure this is i 154c0 6e 20 74 68 65 20 50 4b 43 53 23 31 31 20 73 70 n the PKCS#11 sp 154d0 65 63 69 66 69 63 61 74 69 6f 6e 20 2a 2f 0a 09 ecification */.. 154e0 69 66 20 28 63 61 63 6b 65 79 5f 74 6f 6b 65 6e if (cackey_token 154f0 5f 70 72 65 73 65 6e 74 28 26 63 61 63 6b 65 79 _present(&cackey 15500 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 29 20 _slots[slotID]) 15510 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 != CACKEY_PCSC_S 15520 5f 54 4f 4b 45 4e 50 52 45 53 45 4e 54 29 20 7b _TOKENPRESENT) { 15530 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 15540 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 15550 43 61 72 64 20 6e 6f 74 20 70 72 65 73 65 6e 74 Card not present 15560 2e 20 20 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 . Returning CKR 15570 5f 44 45 56 49 43 45 5f 52 45 4d 4f 56 45 44 22 _DEVICE_REMOVED" 15580 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 );....cackey_mut 15590 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 155a0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 _biglock);....re 155b0 74 75 72 6e 28 43 4b 52 5f 44 45 56 49 43 45 5f turn(CKR_DEVICE_ 155c0 52 45 4d 4f 56 45 44 29 3b 0a 09 7d 0a 0a 09 66 REMOVED);..}...f 155d0 6f 72 20 28 69 64 78 20 3d 20 31 3b 20 69 64 78 or (idx = 1; idx 155e0 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 < (sizeof(cacke 155f0 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 y_sessions) / si 15600 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 15610 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b ions[0])); idx++ 15620 29 20 7b 0a 09 09 69 66 20 28 21 63 61 63 6b 65 ) {...if (!cacke 15630 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. 15640 61 63 74 69 76 65 29 20 7b 0a 09 09 09 66 6f 75 active) {....fou 15650 6e 64 5f 73 65 73 73 69 6f 6e 20 3d 20 31 3b 0a nd_session = 1;. 15660 0a 09 09 09 2a 70 68 53 65 73 73 69 6f 6e 20 3d ....*phSession = 15670 20 69 64 78 3b 0a 0a 09 09 09 63 61 63 6b 65 79 idx;.....cackey 15680 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 _sessions[idx].a 15690 63 74 69 76 65 20 3d 20 31 3b 0a 09 09 09 63 61 ctive = 1;....ca 156a0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 ckey_sessions[id 156b0 78 5d 2e 73 6c 6f 74 49 44 20 3d 20 73 6c 6f 74 x].slotID = slot 156c0 49 44 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 ID;....cackey_se 156d0 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 74 61 74 ssions[idx].stat 156e0 65 20 3d 20 43 4b 53 5f 52 4f 5f 50 55 42 4c 49 e = CKS_RO_PUBLI 156f0 43 5f 53 45 53 53 49 4f 4e 3b 0a 09 09 09 63 61 C_SESSION;....ca 15700 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 ckey_sessions[id 15710 78 5d 2e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 x].flags = flags 15720 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 ;....cackey_sess 15730 69 6f 6e 73 5b 69 64 78 5d 2e 75 6c 44 65 76 69 ions[idx].ulDevi 15740 63 65 45 72 72 6f 72 20 3d 20 30 3b 0a 09 09 09 ceError = 0;.... 15750 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 15760 69 64 78 5d 2e 70 41 70 70 6c 69 63 61 74 69 6f idx].pApplicatio 15770 6e 20 3d 20 70 41 70 70 6c 69 63 61 74 69 6f 6e n = pApplication 15780 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 ;....cackey_sess 15790 69 6f 6e 73 5b 69 64 78 5d 2e 4e 6f 74 69 66 79 ions[idx].Notify 157a0 20 3d 20 6e 6f 74 69 66 79 3b 0a 0a 09 09 09 63 = notify;.....c 157b0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 ackey_sessions[i 157c0 64 78 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 3d dx].identities = 157d0 20 4e 55 4c 4c 3b 0a 09 09 09 63 61 63 6b 65 79 NULL;....cackey 157e0 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 69 _sessions[idx].i 157f0 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 20 dentities_count 15800 3d 20 30 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f = 0;.....cackey_ 15810 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 65 sessions[idx].se 15820 61 72 63 68 5f 61 63 74 69 76 65 20 3d 20 30 3b arch_active = 0; 15830 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 .....cackey_sess 15840 69 6f 6e 73 5b 69 64 78 5d 2e 73 69 67 6e 5f 61 ions[idx].sign_a 15850 63 74 69 76 65 20 3d 20 30 3b 0a 0a 09 09 09 63 ctive = 0;.....c 15860 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 ackey_sessions[i 15870 64 78 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 69 dx].decrypt_acti 15880 76 65 20 3d 20 30 3b 0a 0a 09 09 09 63 61 63 6b ve = 0;.....cack 15890 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d ey_sessions[idx] 158a0 2e 69 64 65 6e 74 69 74 69 65 73 20 3d 20 63 61 .identities = ca 158b0 63 6b 65 79 5f 72 65 61 64 5f 69 64 65 6e 74 69 ckey_read_identi 158c0 74 69 65 73 28 26 63 61 63 6b 65 79 5f 73 6c 6f ties(&cackey_slo 158d0 74 73 5b 73 6c 6f 74 49 44 5d 2c 20 26 63 61 63 ts[slotID], &cac 158e0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 key_sessions[idx 158f0 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 ].identities_cou 15900 6e 74 29 3b 0a 0a 0a 09 09 09 62 72 65 61 6b 3b nt);......break; 15910 0a 09 09 7d 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f ...}..}...mutex_ 15920 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 15930 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 15940 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 15950 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 15960 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 15970 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 15980 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 15990 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 159a0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 159b0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i 159c0 66 20 28 21 66 6f 75 6e 64 5f 73 65 73 73 69 6f f (!found_sessio 159d0 6e 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 n) {...CACKEY_DE 159e0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 159f0 72 6e 69 6e 67 20 43 4b 52 5f 53 45 53 53 49 4f rning CKR_SESSIO 15a00 4e 5f 43 4f 55 4e 54 20 28 25 69 29 22 2c 20 43 N_COUNT (%i)", C 15a10 4b 52 5f 53 45 53 53 49 4f 4e 5f 43 4f 55 4e 54 KR_SESSION_COUNT 15a20 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 15a30 5f 53 45 53 53 49 4f 4e 5f 43 4f 55 4e 54 29 3b _SESSION_COUNT); 15a40 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 15a50 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 15a60 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 15a70 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 15a80 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 15a90 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 15aa0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 6c 6f ION(CK_RV, C_Clo 15ab0 73 65 53 65 73 73 69 6f 6e 29 28 43 4b 5f 53 45 seSession)(CK_SE 15ac0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 15ad0 73 73 69 6f 6e 29 20 7b 0a 09 69 6e 74 20 6d 75 ssion) {..int mu 15ae0 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 tex_retval;...CA 15af0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 15b00 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 15b10 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 15b20 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 15b30 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 15b40 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 15b50 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 15b60 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 15b70 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 15b80 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 IZED);..}...if ( 15b90 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c hSession == 0 || 15ba0 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 hSession >= (si 15bb0 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 15bc0 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 ions) / sizeof(c 15bd0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 ackey_sessions[0 15be0 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ]))) {...CACKEY_ 15bf0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 15c00 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 ror. Session ou 15c10 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 t of range.");.. 15c20 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 15c30 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 15c40 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 VALID);..}...mut 15c50 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 15c60 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 ey_mutex_lock(ca 15c70 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 15c80 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 15c90 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 15ca0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15cb0 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 Error. Locking 15cc0 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 15cd0 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 15ce0 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 _ERROR);..}...if 15cf0 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f (!cackey_sessio 15d00 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 ns[hSession].act 15d10 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ive) {...cackey_ 15d20 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 15d30 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 15d40 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 15d50 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 15d60 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 ssion not active 15d70 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 15d80 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 15d90 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 15da0 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio 15db0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 ns[hSession].act 15dc0 69 76 65 20 3d 20 30 3b 0a 09 63 61 63 6b 65 79 ive = 0;..cackey 15dd0 5f 66 72 65 65 5f 69 64 65 6e 74 69 74 69 65 73 _free_identities 15de0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 15df0 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 [hSession].ident 15e00 69 74 69 65 73 2c 20 63 61 63 6b 65 79 5f 73 65 ities, cackey_se 15e10 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 15e20 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e .identities_coun 15e30 74 29 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 t);...mutex_retv 15e40 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 15e50 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 15e60 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 15e70 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 15e80 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 15e90 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 15ea0 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 . Unlocking fai 15eb0 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 15ec0 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 15ed0 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ROR);..}...CACKE 15ee0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15ef0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 15f00 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b (%i)", CKR_OK); 15f10 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 15f20 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 15f30 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 15f40 43 5f 43 6c 6f 73 65 41 6c 6c 53 65 73 73 69 6f C_CloseAllSessio 15f50 6e 73 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 ns)(CK_SLOT_ID s 15f60 6c 6f 74 49 44 29 20 7b 0a 09 75 69 6e 74 33 32 lotID) {..uint32 15f70 5f 74 20 69 64 78 3b 0a 09 69 6e 74 20 6d 75 74 _t idx;..int mut 15f80 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 ex_retval;...CAC 15f90 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 15fa0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 15fb0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 15fc0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 15fd0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 15fe0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 15ff0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 16000 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 16010 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 16020 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 ZED);..}...if (s 16030 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f lotID < 0 || slo 16040 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 tID >= (sizeof(c 16050 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 ackey_slots) / s 16060 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f izeof(cackey_slo 16070 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 ts[0]))) {...CAC 16080 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 16090 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 ("Error. Invalid 160a0 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 slot requested 160b0 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 6f (%lu), outside o 160c0 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 f valid range", 160d0 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 slotID);....retu 160e0 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 rn(CKR_SLOT_ID_I 160f0 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 NVALID);..}...mu 16100 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 16110 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 key_mutex_lock(c 16120 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 16130 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 16140 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 16150 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 16160 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 "Error. Locking 16170 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 16180 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 16190 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i 161a0 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b f (cackey_slots[ 161b0 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 3d slotID].active = 161c0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 161d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 161e0 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f ror. Invalid slo 161f0 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 t requested (%lu 16200 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72 ), slot not curr 16210 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20 73 ently active", s 16220 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b 65 lotID);....cacke 16230 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 16240 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 16250 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c ...return(CKR_SL 16260 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a OT_ID_INVALID);. 16270 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 .}...for (idx = 16280 30 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 0; idx < (sizeof 16290 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 162a0 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke 162b0 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 3b y_sessions[0])); 162c0 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 idx++) {...if ( 162d0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 162e0 69 64 78 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 idx].active) {.. 162f0 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73 ..if (cackey_ses 16300 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 6c 6f 74 49 sions[idx].slotI 16310 44 20 21 3d 20 73 6c 6f 74 49 44 29 20 7b 0a 09 D != slotID) {.. 16320 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 ...continue;.... 16330 7d 0a 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 }.....cackey_mut 16340 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 16350 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 09 09 43 5f _biglock);....C_ 16360 43 6c 6f 73 65 53 65 73 73 69 6f 6e 28 69 64 78 CloseSession(idx 16370 29 3b 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 );....cackey_mut 16380 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 ex_lock(cackey_b 16390 69 67 6c 6f 63 6b 29 3b 0a 09 09 7d 0a 09 7d 0a iglock);...}..}. 163a0 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 163b0 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e cackey_mutex_un 163c0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 163d0 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 163e0 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 163f0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 16400 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 RINTF("Error. U 16410 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e nlocking failed. 16420 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 16430 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 16440 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 16450 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 16460 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 16470 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 )", CKR_OK);...r 16480 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 16490 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 164a0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 TION(CK_RV, C_Ge 164b0 74 53 65 73 73 69 6f 6e 49 6e 66 6f 29 28 43 4b tSessionInfo)(CK 164c0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 164d0 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 53 45 53 hSession, CK_SES 164e0 53 49 4f 4e 5f 49 4e 46 4f 5f 50 54 52 20 70 49 SION_INFO_PTR pI 164f0 6e 66 6f 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 nfo) {..int mute 16500 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b x_retval;...CACK 16510 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 16520 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 16530 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 (pInfo == NULL) 16540 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 16550 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 16560 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 pInfo is NULL." 16570 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 16580 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b _ARGUMENTS_BAD); 16590 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ..}...if (!cacke 165a0 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 165b0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 165c0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 165d0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 165e0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 165f0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 16600 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 16610 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d ..if (hSession = 16620 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 = 0 || hSession 16630 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 >= (sizeof(cacke 16640 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 y_sessions) / si 16650 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 16660 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 ions[0]))) {...C 16670 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 16680 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 16690 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 ion out of range 166a0 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 166b0 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 166c0 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 166d0 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 166e0 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c = cackey_mutex_l 166f0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 16700 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 16710 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 16720 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 16730 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f INTF("Error. Lo 16740 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 16750 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 16760 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 16770 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f }...if (!cackey_ 16780 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 16790 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 n].active) {...c 167a0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 167b0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 167c0 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 167d0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 167e0 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 r. Session not 167f0 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 active.");...... 16800 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 16810 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 16820 44 29 3b 0a 09 7d 0a 0a 09 70 49 6e 66 6f 2d 3e D);..}...pInfo-> 16830 73 6c 6f 74 49 44 20 3d 20 63 61 63 6b 65 79 5f slotID = cackey_ 16840 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 16850 6e 5d 2e 73 6c 6f 74 49 44 3b 0a 09 70 49 6e 66 n].slotID;..pInf 16860 6f 2d 3e 73 74 61 74 65 20 3d 20 63 61 63 6b 65 o->state = cacke 16870 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 16880 69 6f 6e 5d 2e 73 74 61 74 65 3b 0a 09 70 49 6e ion].state;..pIn 16890 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 63 61 63 6b fo->flags = cack 168a0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 168b0 73 69 6f 6e 5d 2e 66 6c 61 67 73 3b 0a 09 70 49 sion].flags;..pI 168c0 6e 66 6f 2d 3e 75 6c 44 65 76 69 63 65 45 72 72 nfo->ulDeviceErr 168d0 6f 72 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 or = cackey_sess 168e0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 75 ions[hSession].u 168f0 6c 44 65 76 69 63 65 45 72 72 6f 72 3b 0a 0a 09 lDeviceError;... 16900 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 16910 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 16920 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 16930 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 16940 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 16950 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 16960 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c NTF("Error. Unl 16970 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 16980 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 16990 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 169a0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 169b0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 169c0 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 169d0 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret 169e0 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}.. 169f0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 16a00 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 4f ON(CK_RV, C_GetO 16a10 70 65 72 61 74 69 6f 6e 53 74 61 74 65 29 28 43 perationState)(C 16a20 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 16a30 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 16a40 54 45 5f 50 54 52 20 70 4f 70 65 72 61 74 69 6f TE_PTR pOperatio 16a50 6e 53 74 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 nState, CK_ULONG 16a60 5f 50 54 52 20 70 75 6c 4f 70 65 72 61 74 69 6f _PTR pulOperatio 16a70 6e 53 74 61 74 65 4c 65 6e 29 20 7b 0a 09 43 41 nStateLen) {..CA 16a80 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 16a90 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 16aa0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 16ab0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 16ac0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 16ad0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 16ae0 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 16af0 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 16b00 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 16b10 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 16b20 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 16b30 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 16b40 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 16b50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 16b60 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 16b70 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 16b80 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 16b90 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 16ba0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 16bb0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 CTION(CK_RV, C_S 16bc0 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 etOperationState 16bd0 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 16be0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 16bf0 5f 42 59 54 45 5f 50 54 52 20 70 4f 70 65 72 61 _BYTE_PTR pOpera 16c00 74 69 6f 6e 53 74 61 74 65 2c 20 43 4b 5f 55 4c tionState, CK_UL 16c10 4f 4e 47 20 75 6c 4f 70 65 72 61 74 69 6f 6e 53 ONG ulOperationS 16c20 74 61 74 65 4c 65 6e 2c 20 43 4b 5f 4f 42 4a 45 tateLen, CK_OBJE 16c30 43 54 5f 48 41 4e 44 4c 45 20 68 45 6e 63 72 79 CT_HANDLE hEncry 16c40 70 74 69 6f 6e 4b 65 79 2c 20 43 4b 5f 4f 42 4a ptionKey, CK_OBJ 16c50 45 43 54 5f 48 41 4e 44 4c 45 20 68 41 75 74 68 ECT_HANDLE hAuth 16c60 65 6e 74 69 63 61 74 69 6f 6e 4b 65 79 29 20 7b enticationKey) { 16c70 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 16c80 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 16c90 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 16ca0 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 16cb0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 16cc0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 16cd0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 16ce0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 16cf0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 16d00 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 16d10 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 16d20 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 16d30 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 16d40 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 16d50 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 16d60 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 16d70 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 16d80 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 16d90 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 16da0 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 16db0 20 43 5f 4c 6f 67 69 6e 29 28 43 4b 5f 53 45 53 C_Login)(CK_SES 16dc0 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 16dd0 73 69 6f 6e 2c 20 43 4b 5f 55 53 45 52 5f 54 59 sion, CK_USER_TY 16de0 50 45 20 75 73 65 72 54 79 70 65 2c 20 43 4b 5f PE userType, CK_ 16df0 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 50 69 UTF8CHAR_PTR pPi 16e00 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 69 n, CK_ULONG ulPi 16e10 6e 4c 65 6e 29 20 7b 0a 09 69 6e 74 20 6d 75 74 nLen) {..int mut 16e20 65 78 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 ex_retval;..int 16e30 6c 6f 67 69 6e 5f 72 65 74 3b 0a 0a 09 43 41 43 login_ret;...CAC 16e40 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 16e50 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 16e60 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 16e70 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 16e80 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 16e90 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 16ea0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 16eb0 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 16ec0 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 16ed0 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 ZED);..}...if (h 16ee0 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 Session == 0 || 16ef0 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a hSession >= (siz 16f00 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi 16f10 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 ons) / sizeof(ca 16f20 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d ckey_sessions[0] 16f30 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ))) {...CACKEY_D 16f40 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 16f50 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 or. Session out 16f60 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 of range.");... 16f70 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 ...return(CKR_SE 16f80 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 SSION_HANDLE_INV 16f90 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 ALID);..}...if ( 16fa0 75 73 65 72 54 79 70 65 20 21 3d 20 43 4b 55 5f userType != CKU_ 16fb0 55 53 45 52 29 20 7b 0a 09 09 43 41 43 4b 45 59 USER) {...CACKEY 16fc0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 16fd0 72 72 6f 72 2e 20 20 57 65 20 6f 6e 6c 79 20 73 rror. We only s 16fe0 75 70 70 6f 72 74 20 55 53 45 52 20 6d 6f 64 65 upport USER mode 16ff0 2c 20 61 73 6b 65 64 20 66 6f 72 20 25 6c 75 20 , asked for %lu 17000 6d 6f 64 65 2e 22 2c 20 28 75 6e 73 69 67 6e 65 mode.", (unsigne 17010 64 20 6c 6f 6e 67 29 20 75 73 65 72 54 79 70 65 d long) userType 17020 29 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f )....return(CKR_ 17030 55 53 45 52 5f 54 59 50 45 5f 49 4e 56 41 4c 49 USER_TYPE_INVALI 17040 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 D);..}...mutex_r 17050 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 17060 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 utex_lock(cackey 17070 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 17080 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 17090 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 170a0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 170b0 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c r. Locking fail 170c0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 170d0 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 170e0 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 OR);..}...if (!c 170f0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 17100 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 Session].active) 17110 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 17120 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 17130 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 17140 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 17150 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 17160 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b n not active."); 17170 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 17180 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 17190 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6c INVALID);..}...l 171a0 6f 67 69 6e 5f 72 65 74 20 3d 20 63 61 63 6b 65 ogin_ret = cacke 171b0 79 5f 6c 6f 67 69 6e 28 26 63 61 63 6b 65 79 5f y_login(&cackey_ 171c0 73 6c 6f 74 73 5b 63 61 63 6b 65 79 5f 73 65 73 slots[cackey_ses 171d0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 171e0 73 6c 6f 74 49 44 5d 2c 20 70 50 69 6e 2c 20 75 slotID], pPin, u 171f0 6c 50 69 6e 4c 65 6e 2c 20 4e 55 4c 4c 29 3b 0a lPinLen, NULL);. 17200 09 69 66 20 28 6c 6f 67 69 6e 5f 72 65 74 20 21 .if (login_ret ! 17210 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f = CACKEY_PCSC_S_ 17220 4f 4b 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d OK) {...cackey_m 17230 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 17240 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 17250 69 66 20 28 6c 6f 67 69 6e 5f 72 65 74 20 3d 3d if (login_ret == 17260 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 4c CACKEY_PCSC_E_L 17270 4f 43 4b 45 44 29 20 7b 0a 09 09 09 43 41 43 4b OCKED) {....CACK 17280 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 17290 22 45 72 72 6f 72 2e 20 20 54 6f 6b 65 6e 20 69 "Error. Token i 172a0 73 20 6c 6f 63 6b 65 64 2e 22 29 3b 0a 0a 09 09 s locked.");.... 172b0 09 72 65 74 75 72 6e 28 43 4b 52 5f 50 49 4e 5f .return(CKR_PIN_ 172c0 4c 4f 43 4b 45 44 29 3b 0a 09 09 7d 20 65 6c 73 LOCKED);...} els 172d0 65 20 69 66 20 28 6c 6f 67 69 6e 5f 72 65 74 20 e if (login_ret 172e0 3d 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 == CACKEY_PCSC_E 172f0 5f 42 41 44 50 49 4e 29 20 7b 0a 09 09 09 43 41 _BADPIN) {....CA 17300 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 17310 46 28 22 45 72 72 6f 72 2e 20 20 49 6e 76 61 6c F("Error. Inval 17320 69 64 20 50 49 4e 2e 22 29 3b 0a 0a 09 09 09 72 id PIN.");.....r 17330 65 74 75 72 6e 28 43 4b 52 5f 50 49 4e 5f 49 4e eturn(CKR_PIN_IN 17340 43 4f 52 52 45 43 54 29 3b 0a 09 09 7d 0a 0a 09 CORRECT);...}... 17350 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 17360 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e INTF("Error. Un 17370 6b 6e 6f 77 6e 20 65 72 72 6f 72 20 72 65 74 75 known error retu 17380 72 6e 65 64 20 66 72 6f 6d 20 63 61 63 6b 65 79 rned from cackey 17390 5f 6c 6f 67 69 6e 28 29 20 28 25 69 29 22 2c 20 _login() (%i)", 173a0 6c 6f 67 69 6e 5f 72 65 74 29 3b 0a 0a 09 09 72 login_ret);....r 173b0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 173c0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 63 L_ERROR);..}...c 173d0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 173e0 53 65 73 73 69 6f 6e 5d 2e 73 74 61 74 65 20 3d Session].state = 173f0 20 43 4b 53 5f 52 4f 5f 55 53 45 52 5f 46 55 4e CKS_RO_USER_FUN 17400 43 54 49 4f 4e 53 3b 0a 0a 09 6d 75 74 65 78 5f CTIONS;...mutex_ 17410 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 17420 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 17430 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 17440 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 17450 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 17460 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 17470 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 17480 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 17490 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 174a0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 L_ERROR);..}...C 174b0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 174c0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 174d0 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ 174e0 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b OK);...return(CK 174f0 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 R_OK);.}..CK_DEF 17500 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 17510 52 56 2c 20 43 5f 4c 6f 67 6f 75 74 29 28 43 4b RV, C_Logout)(CK 17520 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 17530 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 69 6e 74 hSession) {..int 17540 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a mutex_retval;.. 17550 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 17560 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 17570 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 17580 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 17590 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 175a0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 175b0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 175c0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 175d0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 175e0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 IALIZED);..}...i 175f0 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 f (hSession == 0 17600 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 || hSession >= 17610 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 (sizeof(cackey_s 17620 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f essions) / sizeo 17630 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 17640 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b s[0]))) {...CACK 17650 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 17660 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 17670 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 out of range.") 17680 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 17690 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 176a0 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 176b0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 176c0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b ackey_mutex_lock 176d0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 176e0 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 176f0 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 17700 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 17710 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 F("Error. Locki 17720 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 17730 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 17740 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 17750 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 .if (!cackey_ses 17760 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 17770 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b active) {...cack 17780 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 17790 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 177a0 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 177b0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 177c0 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 Session not act 177d0 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ive.");......ret 177e0 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 177f0 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 17800 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 ..}...cackey_ses 17810 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 17820 73 74 61 74 65 20 3d 20 43 4b 53 5f 52 4f 5f 50 state = CKS_RO_P 17830 55 42 4c 49 43 5f 53 45 53 53 49 4f 4e 3b 0a 0a UBLIC_SESSION;.. 17840 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 17850 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 17860 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 17870 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 17880 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 17890 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 178a0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e INTF("Error. Un 178b0 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 locking failed." 178c0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 178d0 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 178e0 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 178f0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 17900 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 17910 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 17920 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 17930 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 17940 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 72 65 ION(CK_RV, C_Cre 17950 61 74 65 4f 62 6a 65 63 74 29 28 43 4b 5f 53 45 ateObject)(CK_SE 17960 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 17970 73 73 69 6f 6e 2c 20 43 4b 5f 41 54 54 52 49 42 ssion, CK_ATTRIB 17980 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 UTE_PTR pTemplat 17990 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f e, CK_ULONG ulCo 179a0 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 unt, CK_OBJECT_H 179b0 41 4e 44 4c 45 5f 50 54 52 20 70 68 4f 62 6a 65 ANDLE_PTR phObje 179c0 63 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 ct) {..CACKEY_DE 179d0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 179e0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 179f0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 17a00 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 17a10 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 17a20 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 17a30 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 17a40 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 17a50 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 17a60 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 17a70 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 17a80 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 17a90 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 17aa0 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 17ab0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 17ac0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 17ad0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 17ae0 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 17af0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 17b00 4b 5f 52 56 2c 20 43 5f 43 6f 70 79 4f 62 6a 65 K_RV, C_CopyObje 17b10 63 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 ct)(CK_SESSION_H 17b20 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 17b30 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 17b40 20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 41 54 54 hObject, CK_ATT 17b50 52 49 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 RIBUTE_PTR pTemp 17b60 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 late, CK_ULONG u 17b70 6c 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 lCount, CK_OBJEC 17b80 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4e T_HANDLE_PTR phN 17b90 65 77 4f 62 6a 65 63 74 29 20 7b 0a 09 43 41 43 ewObject) {..CAC 17ba0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 17bb0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 17bc0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 17bd0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 17be0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 17bf0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 17c00 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 17c10 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 17c20 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 17c30 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 17c40 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 17c50 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 17c60 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 17c70 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 17c80 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 17c90 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 17ca0 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 17cb0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 17cc0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 17cd0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 TION(CK_RV, C_De 17ce0 73 74 72 6f 79 4f 62 6a 65 63 74 29 28 43 4b 5f stroyObject)(CK_ 17cf0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 17d00 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 Session, CK_OBJE 17d10 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 CT_HANDLE hObjec 17d20 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 t) {..CACKEY_DEB 17d30 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 17d40 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 17d50 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 17d60 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 17d70 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 17d80 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 17d90 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 17da0 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 17db0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 17dc0 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 17dd0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 17de0 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 17df0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 17e00 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 17e10 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 17e20 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 17e30 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 17e40 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 17e50 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 17e60 5f 52 56 2c 20 43 5f 47 65 74 4f 62 6a 65 63 74 _RV, C_GetObject 17e70 53 69 7a 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e Size)(CK_SESSION 17e80 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 17e90 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 17ea0 4c 45 20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 55 LE hObject, CK_U 17eb0 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 7a 65 LONG_PTR pulSize 17ec0 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 17ed0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 17ee0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 17ef0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 17f00 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 17f10 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 17f20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 17f30 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 17f40 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 17f50 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 17f60 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 17f70 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 17f80 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 17f90 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 17fa0 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 17fb0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 17fc0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 17fd0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 17fe0 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 17ff0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 18000 52 56 2c 20 43 5f 47 65 74 41 74 74 72 69 62 75 RV, C_GetAttribu 18010 74 65 56 61 6c 75 65 29 28 43 4b 5f 53 45 53 53 teValue)(CK_SESS 18020 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 18030 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 ion, CK_OBJECT_H 18040 41 4e 44 4c 45 20 68 4f 62 6a 65 63 74 2c 20 43 ANDLE hObject, C 18050 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 K_ATTRIBUTE_PTR 18060 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c pTemplate, CK_UL 18070 4f 4e 47 20 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 ONG ulCount) {.. 18080 43 4b 5f 41 54 54 52 49 42 55 54 45 20 2a 63 75 CK_ATTRIBUTE *cu 18090 72 72 5f 61 74 74 72 3b 0a 09 73 74 72 75 63 74 rr_attr;..struct 180a0 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 cackey_identity 180b0 20 2a 69 64 65 6e 74 69 74 79 3b 0a 09 75 6e 73 *identity;..uns 180c0 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 65 6e 74 igned long ident 180d0 69 74 79 5f 69 64 78 2c 20 61 74 74 72 5f 69 64 ity_idx, attr_id 180e0 78 2c 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 x, sess_attr_idx 180f0 2c 20 6e 75 6d 5f 69 64 73 3b 0a 09 69 6e 74 20 , num_ids;..int 18100 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 09 43 mutex_retval;..C 18110 4b 5f 52 56 20 72 65 74 76 61 6c 20 3d 20 43 4b K_RV retval = CK 18120 52 5f 4f 4b 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 R_OK;..CK_VOID_P 18130 54 52 20 70 56 61 6c 75 65 3b 0a 09 43 4b 5f 55 TR pValue;..CK_U 18140 4c 4f 4e 47 20 75 6c 56 61 6c 75 65 4c 65 6e 3b LONG ulValueLen; 18150 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 18160 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 18170 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 18180 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 18190 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 181a0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 181b0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 181c0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 181d0 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 181e0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 181f0 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d .if (hSession == 18200 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 0 || hSession > 18210 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 = (sizeof(cackey 18220 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a _sessions) / siz 18230 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi 18240 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 ons[0]))) {...CA 18250 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 18260 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 18270 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e on out of range. 18280 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 18290 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 CKR_SESSION_HAND 182a0 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 182b0 0a 09 69 66 20 28 68 4f 62 6a 65 63 74 20 3d 3d ..if (hObject == 182c0 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 182d0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 182e0 6f 72 2e 20 20 4f 62 6a 65 63 74 20 68 61 6e 64 or. Object hand 182f0 6c 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e le out of range. 18300 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 18310 43 4b 52 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CKR_OBJECT_HANDL 18320 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 18330 09 69 66 20 28 75 6c 43 6f 75 6e 74 20 3d 3d 20 .if (ulCount == 18340 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 74 20 0) {.../* Short 18350 63 69 72 63 75 69 74 2c 20 69 66 20 7a 65 72 6f circuit, if zero 18360 20 6f 62 6a 65 63 74 73 20 77 65 72 65 20 73 70 objects were sp 18370 65 63 69 66 69 65 64 20 72 65 74 75 72 6e 20 7a ecified return z 18380 65 72 6f 20 69 74 65 6d 73 20 69 6d 6d 65 64 69 ero items immedi 18390 61 74 65 6c 79 20 2a 2f 0a 09 09 43 41 43 4b 45 ately */...CACKE 183a0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 183b0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 183c0 20 28 25 69 29 20 28 73 68 6f 72 74 20 63 69 72 (%i) (short cir 183d0 63 75 69 74 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b cuit)", CKR_OK); 183e0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ....return(CKR_O 183f0 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 54 65 K);..}...if (pTe 18400 6d 70 6c 61 74 65 20 3d 3d 20 4e 55 4c 4c 29 20 mplate == NULL) 18410 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 18420 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 18430 20 70 54 65 6d 70 6c 61 74 65 20 69 73 20 4e 55 pTemplate is NU 18440 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 18450 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 18460 41 44 29 3b 0a 09 7d 0a 0a 09 69 64 65 6e 74 69 AD);..}...identi 18470 74 79 5f 69 64 78 20 3d 20 68 4f 62 6a 65 63 74 ty_idx = hObject 18480 20 2d 20 31 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 - 1;...mutex_re 18490 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 184a0 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 184b0 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 184c0 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 184d0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 184e0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 184f0 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 18500 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 18510 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 18520 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 R);..}...if (!ca 18530 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 18540 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 ession].active) 18550 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 18560 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 18570 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 18580 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 18590 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 185a0 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 185b0 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 185c0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 185d0 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6e 75 NVALID);..}...nu 185e0 6d 5f 69 64 73 20 3d 20 63 61 63 6b 65 79 5f 73 m_ids = cackey_s 185f0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 18600 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 ].identities_cou 18610 6e 74 3b 0a 0a 09 69 66 20 28 69 64 65 6e 74 69 nt;...if (identi 18620 74 79 5f 69 64 78 20 3e 3d 20 6e 75 6d 5f 69 64 ty_idx >= num_id 18630 73 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 s) {...cackey_mu 18640 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 18650 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....C 18660 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 18670 54 46 28 22 45 72 72 6f 72 2e 20 20 4f 62 6a 65 TF("Error. Obje 18680 63 74 20 68 61 6e 64 6c 65 20 6f 75 74 20 6f 66 ct handle out of 18690 20 72 61 6e 67 65 2e 20 20 69 64 65 6e 74 69 74 range. identit 186a0 79 5f 69 64 78 20 3d 20 25 6c 75 2c 20 6e 75 6d y_idx = %lu, num 186b0 5f 69 64 73 20 3d 20 25 6c 75 2e 22 2c 20 28 75 _ids = %lu.", (u 186c0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 69 64 nsigned long) id 186d0 65 6e 74 69 74 79 5f 69 64 78 2c 20 28 75 6e 73 entity_idx, (uns 186e0 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6e 75 6d 5f igned long) num_ 186f0 69 64 73 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 ids);....return( 18700 43 4b 52 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CKR_OBJECT_HANDL 18710 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 18720 09 69 64 65 6e 74 69 74 79 20 3d 20 26 63 61 63 .identity = &cac 18730 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 18740 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 ssion].identitie 18750 73 5b 69 64 65 6e 74 69 74 79 5f 69 64 78 5d 3b s[identity_idx]; 18760 0a 0a 09 66 6f 72 20 28 61 74 74 72 5f 69 64 78 ...for (attr_idx 18770 20 3d 20 30 3b 20 61 74 74 72 5f 69 64 78 20 3c = 0; attr_idx < 18780 20 75 6c 43 6f 75 6e 74 3b 20 61 74 74 72 5f 69 ulCount; attr_i 18790 64 78 2b 2b 29 20 7b 0a 09 09 63 75 72 72 5f 61 dx++) {...curr_a 187a0 74 74 72 20 3d 20 26 70 54 65 6d 70 6c 61 74 65 ttr = &pTemplate 187b0 5b 61 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 70 [attr_idx];....p 187c0 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 Value = NULL;... 187d0 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 28 43 4b ulValueLen = (CK 187e0 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 0a 09 09 43 41 _LONG) -1;....CA 187f0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 18800 46 28 22 4c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 F("Looking for a 18810 74 74 72 69 62 75 74 65 20 30 78 25 30 38 6c 78 ttribute 0x%08lx 18820 20 28 69 64 65 6e 74 69 74 79 3a 25 6c 75 29 20 (identity:%lu) 18830 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 ...", (unsigned 18840 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 2d long) curr_attr- 18850 3e 74 79 70 65 2c 20 28 75 6e 73 69 67 6e 65 64 >type, (unsigned 18860 20 6c 6f 6e 67 29 20 69 64 65 6e 74 69 74 79 5f long) identity_ 18870 69 64 78 29 3b 0a 0a 09 09 66 6f 72 20 28 73 65 idx);....for (se 18880 73 73 5f 61 74 74 72 5f 69 64 78 20 3d 20 30 3b ss_attr_idx = 0; 18890 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 20 3c sess_attr_idx < 188a0 20 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 identity->attri 188b0 62 75 74 65 73 5f 63 6f 75 6e 74 3b 20 73 65 73 butes_count; ses 188c0 73 5f 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a s_attr_idx++) {. 188d0 09 09 09 69 66 20 28 69 64 65 6e 74 69 74 79 2d ...if (identity- 188e0 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 >attributes[sess 188f0 5f 61 74 74 72 5f 69 64 78 5d 2e 74 79 70 65 20 _attr_idx].type 18900 3d 3d 20 63 75 72 72 5f 61 74 74 72 2d 3e 74 79 == curr_attr->ty 18910 70 65 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 pe) {.....CACKEY 18920 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 18930 2e 2e 2e 20 66 6f 75 6e 64 20 69 74 2c 20 70 56 ... found it, pV 18940 61 6c 75 65 20 3d 20 25 70 2c 20 75 6c 56 61 6c alue = %p, ulVal 18950 75 65 4c 65 6e 20 3d 20 25 6c 75 22 2c 20 69 64 ueLen = %lu", id 18960 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 75 74 entity->attribut 18970 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 es[sess_attr_idx 18980 5d 2e 70 56 61 6c 75 65 2c 20 69 64 65 6e 74 69 ].pValue, identi 18990 74 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 ty->attributes[s 189a0 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c ess_attr_idx].ul 189b0 56 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 09 09 0a ValueLen);...... 189c0 09 09 09 09 70 56 61 6c 75 65 20 3d 20 69 64 65 ....pValue = ide 189d0 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 75 74 65 ntity->attribute 189e0 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d s[sess_attr_idx] 189f0 2e 70 56 61 6c 75 65 3b 0a 09 09 09 09 75 6c 56 .pValue;.....ulV 18a00 61 6c 75 65 4c 65 6e 20 3d 20 69 64 65 6e 74 69 alueLen = identi 18a10 74 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 ty->attributes[s 18a20 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c ess_attr_idx].ul 18a30 56 61 6c 75 65 4c 65 6e 3b 0a 09 09 09 7d 0a 09 ValueLen;....}.. 18a40 09 7d 0a 0a 09 09 69 66 20 28 63 75 72 72 5f 61 .}....if (curr_a 18a50 74 74 72 2d 3e 70 56 61 6c 75 65 20 26 26 20 70 ttr->pValue && p 18a60 56 61 6c 75 65 29 20 7b 0a 09 09 09 69 66 20 28 Value) {....if ( 18a70 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c curr_attr->ulVal 18a80 75 65 4c 65 6e 20 3e 3d 20 75 6c 56 61 6c 75 65 ueLen >= ulValue 18a90 4c 65 6e 29 20 7b 0a 09 09 09 09 6d 65 6d 63 70 Len) {.....memcp 18aa0 79 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 y(curr_attr->pVa 18ab0 6c 75 65 2c 20 70 56 61 6c 75 65 2c 20 75 6c 56 lue, pValue, ulV 18ac0 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 09 7d 20 65 alueLen);....} e 18ad0 6c 73 65 20 7b 0a 09 09 09 09 75 6c 56 61 6c 75 lse {.....ulValu 18ae0 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47 29 eLen = (CK_LONG) 18af0 20 2d 31 3b 0a 0a 09 09 09 09 72 65 74 76 61 6c -1;......retval 18b00 20 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f = CKR_BUFFER_TO 18b10 4f 5f 53 4d 41 4c 4c 3b 0a 09 09 09 7d 0a 09 09 O_SMALL;....}... 18b20 7d 0a 0a 09 09 63 75 72 72 5f 61 74 74 72 2d 3e }....curr_attr-> 18b30 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 75 6c 56 ulValueLen = ulV 18b40 61 6c 75 65 4c 65 6e 3b 0a 09 7d 0a 0a 09 6d 75 alueLen;..}...mu 18b50 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 18b60 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 18b70 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 18b80 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 18b90 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 18ba0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 18bb0 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 18bc0 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 18bd0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 18be0 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 18bf0 0a 0a 09 69 66 20 28 72 65 74 76 61 6c 20 3d 3d ...if (retval == 18c00 20 43 4b 52 5f 41 54 54 52 49 42 55 54 45 5f 54 CKR_ATTRIBUTE_T 18c10 59 50 45 5f 49 4e 56 41 4c 49 44 29 20 7b 0a 09 YPE_INVALID) {.. 18c20 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 18c30 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 18c40 43 4b 52 5f 41 54 54 52 49 42 55 54 45 5f 54 59 CKR_ATTRIBUTE_TY 18c50 50 45 5f 49 4e 56 41 4c 49 44 20 28 25 69 29 22 PE_INVALID (%i)" 18c60 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c 29 3b , (int) retval); 18c70 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 72 65 74 ..} else if (ret 18c80 76 61 6c 20 3d 3d 20 43 4b 52 5f 42 55 46 46 45 val == CKR_BUFFE 18c90 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a 09 R_TOO_SMALL) {.. 18ca0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 18cb0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 18cc0 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 CKR_BUFFER_TOO_S 18cd0 4d 41 4c 4c 20 28 25 69 29 22 2c 20 28 69 6e 74 MALL (%i)", (int 18ce0 29 20 72 65 74 76 61 6c 29 3b 0a 09 7d 20 65 6c ) retval);..} el 18cf0 73 65 20 69 66 20 28 72 65 74 76 61 6c 20 3d 3d se if (retval == 18d00 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 CKR_OK) {...CAC 18d10 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 18d20 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 18d30 4f 4b 20 28 25 69 29 22 2c 20 28 69 6e 74 29 20 OK (%i)", (int) 18d40 72 65 74 76 61 6c 29 3b 0a 09 7d 20 65 6c 73 65 retval);..} else 18d50 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 18d60 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 18d70 69 6e 67 20 25 69 22 2c 20 28 69 6e 74 29 20 72 ing %i", (int) r 18d80 65 74 76 61 6c 29 3b 0a 09 7d 0a 0a 09 72 65 74 etval);..}...ret 18d90 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a urn(retval);.}.. 18da0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 18db0 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 74 41 ON(CK_RV, C_SetA 18dc0 74 74 72 69 62 75 74 65 56 61 6c 75 65 29 28 43 ttributeValue)(C 18dd0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 18de0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 hSession, CK_OB 18df0 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a JECT_HANDLE hObj 18e00 65 63 74 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 ect, CK_ATTRIBUT 18e10 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c E_PTR pTemplate, 18e20 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e CK_ULONG ulCoun 18e30 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 t) {..CACKEY_DEB 18e40 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 18e50 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 18e60 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 18e70 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 18e80 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 18e90 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 18ea0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 18eb0 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 18ec0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 18ed0 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 18ee0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 18ef0 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 18f00 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 18f10 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 18f20 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 18f30 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 18f40 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 18f50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 18f60 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 18f70 5f 52 56 2c 20 43 5f 46 69 6e 64 4f 62 6a 65 63 _RV, C_FindObjec 18f80 74 73 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 tsInit)(CK_SESSI 18f90 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 18fa0 6f 6e 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45 on, CK_ATTRIBUTE 18fb0 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 _PTR pTemplate, 18fc0 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 CK_ULONG ulCount 18fd0 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 ) {..int mutex_r 18fe0 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f etval;...CACKEY_ 18ff0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 19000 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 19010 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 19020 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 19030 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 19040 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 19050 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 19060 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 19070 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 19080 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 ;..}...if (hSess 19090 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 ion == 0 || hSes 190a0 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 sion >= (sizeof( 190b0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 190c0 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 190d0 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 _sessions[0]))) 190e0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 190f0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 19100 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 Session out of 19110 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 range.");......r 19120 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 19130 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 19140 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 );..}...mutex_re 19150 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 19160 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 19170 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 19180 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 19190 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 191a0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 191b0 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 191c0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 191d0 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 191e0 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 R);..}...if (!ca 191f0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 19200 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 ession].active) 19210 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 19220 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 19230 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 19240 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 19250 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 19260 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 19270 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 19280 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 19290 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 NVALID);..}...if 192a0 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (cackey_session 192b0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 s[hSession].sear 192c0 63 68 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 ch_active) {...c 192d0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 192e0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 192f0 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 19300 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 19310 72 2e 20 20 53 65 61 72 63 68 20 61 6c 72 65 61 r. Search alrea 19320 64 79 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 dy active.");... 19330 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 ...return(CKR_OP 19340 45 52 41 54 49 4f 4e 5f 41 43 54 49 56 45 29 3b ERATION_ACTIVE); 19350 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 ..}...if (cackey 19360 5f 73 6c 6f 74 73 5b 63 61 63 6b 65 79 5f 73 65 _slots[cackey_se 19370 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 19380 2e 73 6c 6f 74 49 44 5d 2e 73 6c 6f 74 5f 72 65 .slotID].slot_re 19390 73 65 74 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f set) {...CACKEY_ 193a0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 54 68 DEBUG_PRINTF("Th 193b0 65 20 73 6c 6f 74 20 68 61 73 20 62 65 65 6e 20 e slot has been 193c0 72 65 73 65 74 20 73 69 6e 63 65 20 77 65 20 6c reset since we l 193d0 61 73 74 20 6c 6f 6f 6b 65 64 20 66 6f 72 20 69 ast looked for i 193e0 64 65 6e 74 69 74 69 65 73 20 2d 2d 20 72 65 73 dentities -- res 193f0 63 61 6e 6e 69 6e 67 22 29 3b 0a 0a 09 09 69 66 canning");....if 19400 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (cackey_session 19410 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 19420 74 69 74 69 65 73 20 21 3d 20 4e 55 4c 4c 29 20 tities != NULL) 19430 7b 0a 09 09 09 63 61 63 6b 65 79 5f 66 72 65 65 {....cackey_free 19440 5f 69 64 65 6e 74 69 74 69 65 73 28 63 61 63 6b _identities(cack 19450 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 19460 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 sion].identities 19470 2c 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e , cackey_session 19480 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 19490 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 3b 0a 0a tities_count);.. 194a0 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio 194b0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 ns[hSession].ide 194c0 6e 74 69 74 69 65 73 20 3d 20 4e 55 4c 4c 3b 0a ntities = NULL;. 194d0 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio 194e0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 ns[hSession].ide 194f0 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 20 3d 20 ntities_count = 19500 30 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 0;...}....cackey 19510 5f 73 6c 6f 74 73 5b 63 61 63 6b 65 79 5f 73 65 _slots[cackey_se 19520 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 19530 2e 73 6c 6f 74 49 44 5d 2e 73 6c 6f 74 5f 72 65 .slotID].slot_re 19540 73 65 74 20 3d 20 30 3b 0a 09 7d 0a 0a 09 69 66 set = 0;..}...if 19550 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (cackey_session 19560 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 19570 74 69 74 69 65 73 20 3d 3d 20 4e 55 4c 4c 29 20 tities == NULL) 19580 7b 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 {...cackey_sessi 19590 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 ons[hSession].id 195a0 65 6e 74 69 74 69 65 73 20 3d 20 63 61 63 6b 65 entities = cacke 195b0 79 5f 72 65 61 64 5f 69 64 65 6e 74 69 74 69 65 y_read_identitie 195c0 73 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b s(&cackey_slots[ 195d0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 195e0 68 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f 74 49 44 hSession].slotID 195f0 5d 2c 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69 ], &cackey_sessi 19600 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 ons[hSession].id 19610 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 3b entities_count); 19620 0a 09 7d 0a 0a 09 69 66 20 28 70 54 65 6d 70 6c ..}...if (pTempl 19630 61 74 65 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 ate != NULL) {.. 19640 09 69 66 20 28 75 6c 43 6f 75 6e 74 20 21 3d 20 .if (ulCount != 19650 30 29 20 7b 0a 09 09 09 63 61 63 6b 65 79 5f 73 0) {....cackey_s 19660 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 19670 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63 ].search_query_c 19680 6f 75 6e 74 20 3d 20 75 6c 43 6f 75 6e 74 3b 0a ount = ulCount;. 19690 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...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 71 75 65 72 79 20 3d 20 6d 61 6c 6c rch_query = mall 196c0 6f 63 28 75 6c 43 6f 75 6e 74 20 2a 20 73 69 7a oc(ulCount * siz 196d0 65 6f 66 28 2a 70 54 65 6d 70 6c 61 74 65 29 29 eof(*pTemplate)) 196e0 3b 0a 0a 09 09 09 6d 65 6d 63 70 79 28 63 61 63 ;.....memcpy(cac 196f0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 19700 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 ssion].search_qu 19710 65 72 79 2c 20 70 54 65 6d 70 6c 61 74 65 2c 20 ery, pTemplate, 19720 75 6c 43 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 ulCount * sizeof 19730 28 2a 70 54 65 6d 70 6c 61 74 65 29 29 3b 0a 09 (*pTemplate));.. 19740 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 63 61 63 .} else {....cac 19750 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 19760 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 ssion].search_qu 19770 65 72 79 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 ery_count = 0;.. 19780 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 19790 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 s[hSession].sear 197a0 63 68 5f 71 75 65 72 79 20 3d 20 4e 55 4c 4c 3b ch_query = NULL; 197b0 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 ...}..} else {.. 197c0 09 69 66 20 28 75 6c 43 6f 75 6e 74 20 21 3d 20 .if (ulCount != 197d0 30 29 20 7b 0a 09 09 09 63 61 63 6b 65 79 5f 6d 0) {....cackey_m 197e0 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 197f0 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 19800 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 19810 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 19820 61 72 63 68 20 71 75 65 72 79 20 73 70 65 63 69 arch query speci 19830 66 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 62 75 fied as NULL, bu 19840 74 20 6e 75 6d 62 65 72 20 6f 66 20 71 75 65 72 t number of quer 19850 79 20 74 65 72 6d 73 20 6e 6f 74 20 73 70 65 63 y terms not spec 19860 69 66 69 65 64 20 61 73 20 30 2e 22 29 3b 0a 0a ified as 0.");.. 19870 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 19880 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 09 GUMENTS_BAD);... 19890 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 73 }....cackey_sess 198a0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 198b0 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e earch_query_coun 198c0 74 20 3d 20 30 3b 0a 09 09 63 61 63 6b 65 79 5f t = 0;...cackey_ 198d0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 198e0 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 20 n].search_query 198f0 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a 09 63 61 63 = NULL;..}...cac 19900 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 19910 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 ssion].search_ac 19920 74 69 76 65 20 3d 20 31 3b 0a 09 63 61 63 6b 65 tive = 1;..cacke 19930 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 19940 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 63 75 72 72 ion].search_curr 19950 5f 69 64 20 3d 20 30 3b 0a 0a 09 6d 75 74 65 78 _id = 0;...mutex 19960 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 19970 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 19980 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 19990 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 199a0 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 199b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 199c0 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e Error. Unlockin 199d0 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 199e0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 199f0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 19a00 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 19a10 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 19a20 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR 19a30 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C 19a40 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 KR_OK);.}..CK_DE 19a50 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 19a60 5f 52 56 2c 20 43 5f 46 69 6e 64 4f 62 6a 65 63 _RV, C_FindObjec 19a70 74 73 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 ts)(CK_SESSION_H 19a80 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 19a90 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 19aa0 5f 50 54 52 20 70 68 4f 62 6a 65 63 74 2c 20 43 _PTR phObject, C 19ab0 4b 5f 55 4c 4f 4e 47 20 75 6c 4d 61 78 4f 62 6a K_ULONG ulMaxObj 19ac0 65 63 74 43 6f 75 6e 74 2c 20 43 4b 5f 55 4c 4f ectCount, CK_ULO 19ad0 4e 47 5f 50 54 52 20 70 75 6c 4f 62 6a 65 63 74 NG_PTR pulObject 19ae0 43 6f 75 6e 74 29 20 7b 0a 09 73 74 72 75 63 74 Count) {..struct 19af0 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 cackey_identity 19b00 20 2a 63 75 72 72 5f 69 64 3b 0a 09 43 4b 5f 41 *curr_id;..CK_A 19b10 54 54 52 49 42 55 54 45 20 2a 63 75 72 72 5f 61 TTRIBUTE *curr_a 19b20 74 74 72 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 63 ttr;..CK_ULONG c 19b30 75 72 72 5f 69 64 5f 69 64 78 2c 20 63 75 72 72 urr_id_idx, curr 19b40 5f 6f 75 74 5f 69 64 5f 69 64 78 2c 20 63 75 72 _out_id_idx, cur 19b50 72 5f 61 74 74 72 5f 69 64 78 2c 20 73 65 73 73 r_attr_idx, sess 19b60 5f 61 74 74 72 5f 69 64 78 3b 0a 09 43 4b 5f 55 _attr_idx;..CK_U 19b70 4c 4f 4e 47 20 6d 61 74 63 68 65 64 5f 63 6f 75 LONG matched_cou 19b80 6e 74 2c 20 70 72 65 76 5f 6d 61 74 63 68 65 64 nt, prev_matched 19b90 5f 63 6f 75 6e 74 3b 0a 09 69 6e 74 20 6d 75 74 _count;..int mut 19ba0 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 ex_retval;...CAC 19bb0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 19bc0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 19bd0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 19be0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 19bf0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 19c00 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 19c10 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 19c20 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 19c30 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 19c40 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 ZED);..}...if (p 19c50 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 3d ulObjectCount == 19c60 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 NULL) {...CACKE 19c70 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 19c80 45 72 72 6f 72 2e 20 20 70 75 6c 4f 62 6a 65 63 Error. pulObjec 19c90 74 43 6f 75 6e 74 20 69 73 20 4e 55 4c 4c 2e 22 tCount is NULL." 19ca0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 19cb0 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b _ARGUMENTS_BAD); 19cc0 0a 09 7d 0a 0a 09 69 66 20 28 70 68 4f 62 6a 65 ..}...if (phObje 19cd0 63 74 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c ct == NULL && ul 19ce0 4d 61 78 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d MaxObjectCount = 19cf0 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 = 0) {.../* Shor 19d00 74 20 63 69 72 63 75 69 74 2c 20 69 66 20 7a 65 t circuit, if ze 19d10 72 6f 20 6f 62 6a 65 63 74 73 20 77 65 72 65 20 ro objects were 19d20 73 70 65 63 69 66 69 65 64 20 72 65 74 75 72 6e specified return 19d30 20 7a 65 72 6f 20 69 74 65 6d 73 20 69 6d 6d 65 zero items imme 19d40 64 69 61 74 65 6c 79 20 2a 2f 0a 09 09 2a 70 75 diately */...*pu 19d50 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 20 30 lObjectCount = 0 19d60 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 19d70 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 19d80 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 20 ing CKR_OK (%i) 19d90 28 73 68 6f 72 74 20 63 69 72 63 75 69 74 29 22 (short circuit)" 19da0 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 , CKR_OK);....re 19db0 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d turn(CKR_OK);..} 19dc0 0a 0a 09 69 66 20 28 70 68 4f 62 6a 65 63 74 20 ...if (phObject 19dd0 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 19de0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 19df0 28 22 45 72 72 6f 72 2e 20 20 70 68 4f 62 6a 65 ("Error. phObje 19e00 63 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a ct is NULL.");.. 19e10 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG 19e20 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a UMENTS_BAD);..}. 19e30 0a 09 69 66 20 28 75 6c 4d 61 78 4f 62 6a 65 63 ..if (ulMaxObjec 19e40 74 43 6f 75 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 tCount == 0) {.. 19e50 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 19e60 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4d 61 INTF("Error. Ma 19e70 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 ximum number of 19e80 6f 62 6a 65 63 74 73 20 73 70 65 63 69 66 69 65 objects specifie 19e90 64 20 61 73 20 7a 65 72 6f 2e 22 29 3b 0a 0a 09 d as zero.");... 19ea0 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 19eb0 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 19ec0 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d .if (hSession == 19ed0 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 0 || hSession > 19ee0 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 = (sizeof(cackey 19ef0 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a _sessions) / siz 19f00 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi 19f10 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 ons[0]))) {...CA 19f20 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 19f30 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 19f40 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e on out of range. 19f50 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 19f60 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 CKR_SESSION_HAND 19f70 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 19f80 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 19f90 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f cackey_mutex_lo 19fa0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 19fb0 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 19fc0 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 19fd0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 19fe0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 NTF("Error. Loc 19ff0 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 1a000 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 1a010 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 1a020 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 ...if (!cackey_s 1a030 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1a040 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 ].active) {...ca 1a050 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 1a060 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1a070 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 1a080 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1a090 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 . Session not a 1a0a0 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 ctive.");......r 1a0b0 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 1a0c0 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 1a0d0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 1a0e0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1a0f0 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 ssion].search_ac 1a100 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 tive) {...cackey 1a110 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 1a120 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 1a130 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1a140 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 1a150 65 61 72 63 68 20 6e 6f 74 20 61 63 74 69 76 65 earch not active 1a160 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 1a170 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e (CKR_OPERATION_N 1a180 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1a190 0a 09 7d 0a 0a 09 63 75 72 72 5f 6f 75 74 5f 69 ..}...curr_out_i 1a1a0 64 5f 69 64 78 20 3d 20 30 3b 0a 09 66 6f 72 20 d_idx = 0;..for 1a1b0 28 63 75 72 72 5f 69 64 5f 69 64 78 20 3d 20 63 (curr_id_idx = c 1a1c0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1a1d0 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 1a1e0 63 75 72 72 5f 69 64 3b 20 63 75 72 72 5f 69 64 curr_id; curr_id 1a1f0 5f 69 64 78 20 3c 20 63 61 63 6b 65 79 5f 73 65 _idx < cackey_se 1a200 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 1a210 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e .identities_coun 1a220 74 20 26 26 20 75 6c 4d 61 78 4f 62 6a 65 63 74 t && ulMaxObject 1a230 43 6f 75 6e 74 3b 20 63 75 72 72 5f 69 64 5f 69 Count; curr_id_i 1a240 64 78 2b 2b 29 20 7b 0a 09 09 63 75 72 72 5f 69 dx++) {...curr_i 1a250 64 20 3d 20 26 63 61 63 6b 65 79 5f 73 65 73 73 d = &cackey_sess 1a260 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 ions[hSession].i 1a270 64 65 6e 74 69 74 69 65 73 5b 63 75 72 72 5f 69 dentities[curr_i 1a280 64 5f 69 64 78 5d 3b 0a 0a 09 09 43 41 43 4b 45 d_idx];....CACKE 1a290 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1a2a0 50 72 6f 63 65 73 73 69 6e 67 20 69 64 65 6e 74 Processing ident 1a2b0 69 74 79 3a 25 6c 75 22 2c 20 28 75 6e 73 69 67 ity:%lu", (unsig 1a2c0 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 69 ned long) curr_i 1a2d0 64 5f 69 64 78 29 3b 0a 0a 09 09 6d 61 74 63 68 d_idx);....match 1a2e0 65 64 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 0a 09 ed_count = 0;... 1a2f0 09 66 6f 72 20 28 63 75 72 72 5f 61 74 74 72 5f .for (curr_attr_ 1a300 69 64 78 20 3d 20 30 3b 20 63 75 72 72 5f 61 74 idx = 0; curr_at 1a310 74 72 5f 69 64 78 20 3c 20 63 61 63 6b 65 79 5f tr_idx < cackey_ 1a320 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1a330 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5f n].search_query_ 1a340 63 6f 75 6e 74 3b 20 63 75 72 72 5f 61 74 74 72 count; curr_attr 1a350 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 70 72 65 _idx++) {....pre 1a360 76 5f 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 20 v_matched_count 1a370 3d 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 3b = matched_count; 1a380 0a 0a 09 09 09 63 75 72 72 5f 61 74 74 72 20 3d .....curr_attr = 1a390 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e &cackey_session 1a3a0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 s[hSession].sear 1a3b0 63 68 5f 71 75 65 72 79 5b 63 75 72 72 5f 61 74 ch_query[curr_at 1a3c0 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 09 43 41 43 tr_idx];.....CAC 1a3d0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1a3e0 28 22 20 20 43 68 65 63 6b 69 6e 67 20 66 6f 72 (" Checking for 1a3f0 20 61 74 74 72 69 62 75 74 65 20 30 78 25 30 38 attribute 0x%08 1a400 6c 78 20 69 6e 20 69 64 65 6e 74 69 74 79 3a 25 lx in identity:% 1a410 69 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 i...", (unsigned 1a420 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr 1a430 2d 3e 74 79 70 65 2c 20 28 69 6e 74 29 20 63 75 ->type, (int) cu 1a440 72 72 5f 69 64 5f 69 64 78 29 3b 0a 09 09 09 43 rr_id_idx);....C 1a450 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1a460 54 42 55 46 28 22 20 20 20 20 56 61 6c 75 65 20 TBUF(" Value 1a470 6c 6f 6f 6b 69 6e 67 20 66 6f 72 3a 22 2c 20 63 looking for:", c 1a480 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 urr_attr->pValue 1a490 2c 20 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 , curr_attr->ulV 1a4a0 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 66 6f alueLen);.....fo 1a4b0 72 20 28 73 65 73 73 5f 61 74 74 72 5f 69 64 78 r (sess_attr_idx 1a4c0 20 3d 20 30 3b 20 73 65 73 73 5f 61 74 74 72 5f = 0; sess_attr_ 1a4d0 69 64 78 20 3c 20 63 75 72 72 5f 69 64 2d 3e 61 idx < curr_id->a 1a4e0 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 3b ttributes_count; 1a4f0 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 2b 2b sess_attr_idx++ 1a500 29 20 7b 0a 09 09 09 09 69 66 20 28 63 75 72 72 ) {.....if (curr 1a510 5f 69 64 2d 3e 61 74 74 72 69 62 75 74 65 73 5b _id->attributes[ 1a520 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 74 sess_attr_idx].t 1a530 79 70 65 20 3d 3d 20 63 75 72 72 5f 61 74 74 72 ype == curr_attr 1a540 2d 3e 74 79 70 65 29 20 7b 0a 09 09 09 09 09 43 ->type) {......C 1a550 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1a560 54 46 28 22 20 20 20 20 2e 2e 2e 20 66 6f 75 6e TF(" ... foun 1a570 64 20 6d 61 74 63 68 69 6e 67 20 74 79 70 65 20 d matching type 1a580 2e 2e 2e 22 29 3b 0a 09 09 09 09 09 43 41 43 4b ...");......CACK 1a590 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 EY_DEBUG_PRINTBU 1a5a0 46 28 22 20 20 20 20 2e 2e 2e 20 6f 75 72 20 76 F(" ... our v 1a5b0 61 6c 75 65 3a 22 2c 20 63 75 72 72 5f 69 64 2d alue:", curr_id- 1a5c0 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 >attributes[sess 1a5d0 5f 61 74 74 72 5f 69 64 78 5d 2e 70 56 61 6c 75 _attr_idx].pValu 1a5e0 65 2c 20 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 e, curr_id->attr 1a5f0 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 ibutes[sess_attr 1a600 5f 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e _idx].ulValueLen 1a610 29 3b 0a 0a 09 09 09 09 09 69 66 20 28 63 75 72 );.......if (cur 1a620 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 20 3d r_attr->pValue = 1a630 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 09 09 = NULL) {....... 1a640 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1a650 4e 54 46 28 22 20 20 20 20 20 20 20 2e 2e 2e 20 NTF(" ... 1a660 66 6f 75 6e 64 20 77 69 6c 64 63 61 72 64 20 6d found wildcard m 1a670 61 74 63 68 22 29 3b 0a 0a 09 09 09 09 09 09 6d atch");........m 1a680 61 74 63 68 65 64 5f 63 6f 75 6e 74 2b 2b 3b 0a atched_count++;. 1a690 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 .......break;... 1a6a0 09 09 09 7d 0a 0a 20 09 09 09 09 09 69 66 20 28 ...}.. .....if ( 1a6b0 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c curr_attr->ulVal 1a6c0 75 65 4c 65 6e 20 3d 3d 20 63 75 72 72 5f 69 64 ueLen == curr_id 1a6d0 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 ->attributes[ses 1a6e0 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c 56 61 s_attr_idx].ulVa 1a6f0 6c 75 65 4c 65 6e 20 26 26 20 6d 65 6d 63 6d 70 lueLen && memcmp 1a700 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c (curr_attr->pVal 1a710 75 65 2c 20 63 75 72 72 5f 69 64 2d 3e 61 74 74 ue, curr_id->att 1a720 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 ributes[sess_att 1a730 72 5f 69 64 78 5d 2e 70 56 61 6c 75 65 2c 20 63 r_idx].pValue, c 1a740 75 72 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 74 urr_id->attribut 1a750 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 es[sess_attr_idx 1a760 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 20 3d 3d ].ulValueLen) == 1a770 20 30 29 20 7b 0a 09 09 09 09 09 09 43 41 43 4b 0) {.......CACK 1a780 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1a790 22 20 20 20 20 20 20 20 2e 2e 2e 20 66 6f 75 6e " ... foun 1a7a0 64 20 65 78 61 63 74 20 6d 61 74 63 68 22 29 3b d exact match"); 1a7b0 0a 0a 09 09 09 09 09 09 6d 61 74 63 68 65 64 5f ........matched_ 1a7c0 63 6f 75 6e 74 2b 2b 3b 0a 0a 09 09 09 09 09 09 count++;........ 1a7d0 62 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 09 09 break;......}... 1a7e0 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 2f 2a 20 ..}....}...../* 1a7f0 49 66 20 74 68 65 20 61 74 74 72 69 62 75 74 65 If the attribute 1a800 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 6d 61 could not be ma 1a810 74 63 68 65 64 2c 20 64 6f 20 6e 6f 74 20 74 72 tched, do not tr 1a820 79 20 74 6f 20 6d 61 74 63 68 20 61 64 64 69 74 y to match addit 1a830 69 6f 6e 61 6c 20 61 74 74 72 69 62 75 74 65 73 ional attributes 1a840 20 2a 2f 0a 09 09 09 69 66 20 28 70 72 65 76 5f */....if (prev_ 1a850 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 20 3d 3d matched_count == 1a860 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 29 20 matched_count) 1a870 7b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 {.....break;.... 1a880 7d 0a 09 09 7d 0a 0a 09 09 69 66 20 28 6d 61 74 }...}....if (mat 1a890 63 68 65 64 5f 63 6f 75 6e 74 20 3d 3d 20 63 61 ched_count == ca 1a8a0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1a8b0 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 ession].search_q 1a8c0 75 65 72 79 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 uery_count) {... 1a8d0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1a8e0 49 4e 54 46 28 22 20 20 2e 2e 2e 20 41 6c 6c 20 INTF(" ... All 1a8f0 25 69 20 61 74 74 72 69 62 75 74 65 73 20 63 68 %i attributes ch 1a900 65 63 6b 65 64 20 66 6f 72 20 66 6f 75 6e 64 2c ecked for found, 1a910 20 61 64 64 69 6e 67 20 69 64 65 6e 74 69 74 79 adding identity 1a920 3a 25 69 20 74 6f 20 72 65 74 75 72 6e 65 64 20 :%i to returned 1a930 6c 69 73 74 22 2c 20 28 69 6e 74 29 20 63 61 63 list", (int) cac 1a940 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1a950 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 ssion].search_qu 1a960 65 72 79 5f 63 6f 75 6e 74 2c 20 28 69 6e 74 29 ery_count, (int) 1a970 20 63 75 72 72 5f 69 64 5f 69 64 78 29 3b 0a 0a curr_id_idx);.. 1a980 09 09 09 70 68 4f 62 6a 65 63 74 5b 63 75 72 72 ...phObject[curr 1a990 5f 6f 75 74 5f 69 64 5f 69 64 78 5d 20 3d 20 63 _out_id_idx] = c 1a9a0 75 72 72 5f 69 64 5f 69 64 78 20 2b 20 31 3b 0a urr_id_idx + 1;. 1a9b0 0a 09 09 09 75 6c 4d 61 78 4f 62 6a 65 63 74 43 ....ulMaxObjectC 1a9c0 6f 75 6e 74 2d 2d 3b 0a 0a 09 09 09 63 75 72 72 ount--;.....curr 1a9d0 5f 6f 75 74 5f 69 64 5f 69 64 78 2b 2b 3b 0a 09 _out_id_idx++;.. 1a9e0 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 43 41 43 .} else {....CAC 1a9f0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1aa00 28 22 20 20 2e 2e 2e 20 4e 6f 74 20 61 6c 6c 20 (" ... Not all 1aa10 25 69 20 28 6f 6e 6c 79 20 66 6f 75 6e 64 20 25 %i (only found % 1aa20 69 29 20 61 74 74 72 69 62 75 74 65 73 20 63 68 i) attributes ch 1aa30 65 63 6b 65 64 20 66 6f 72 20 66 6f 75 6e 64 2c ecked for found, 1aa40 20 6e 6f 74 20 61 64 64 69 6e 67 20 69 64 65 6e not adding iden 1aa50 74 69 74 79 3a 25 69 22 2c 20 28 69 6e 74 29 20 tity:%i", (int) 1aa60 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1aa70 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 hSession].search 1aa80 5f 71 75 65 72 79 5f 63 6f 75 6e 74 2c 20 28 69 _query_count, (i 1aa90 6e 74 29 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e nt) matched_coun 1aaa0 74 2c 20 28 69 6e 74 29 20 63 75 72 72 5f 69 64 t, (int) curr_id 1aab0 5f 69 64 78 29 3b 0a 09 09 7d 0a 09 7d 0a 09 63 _idx);...}..}..c 1aac0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1aad0 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 1aae0 63 75 72 72 5f 69 64 20 3d 20 63 75 72 72 5f 69 curr_id = curr_i 1aaf0 64 5f 69 64 78 3b 0a 09 2a 70 75 6c 4f 62 6a 65 d_idx;..*pulObje 1ab00 63 74 43 6f 75 6e 74 20 3d 20 63 75 72 72 5f 6f ctCount = curr_o 1ab10 75 74 5f 69 64 5f 69 64 78 3b 0a 0a 09 6d 75 74 ut_id_idx;...mut 1ab20 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 1ab30 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 1ab40 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 1ab50 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 1ab60 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 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 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b ("Error. Unlock 1ab90 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 1aba0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 1abb0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 1abc0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1abd0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 1abe0 20 43 4b 52 5f 4f 4b 20 28 25 69 29 2c 20 6e 75 CKR_OK (%i), nu 1abf0 6d 20 6f 62 6a 65 63 74 73 20 3d 20 25 6c 75 22 m objects = %lu" 1ac00 2c 20 43 4b 52 5f 4f 4b 2c 20 2a 70 75 6c 4f 62 , CKR_OK, *pulOb 1ac10 6a 65 63 74 43 6f 75 6e 74 29 3b 0a 0a 09 72 65 jectCount);...re 1ac20 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 1ac30 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 1ac40 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 46 69 6e ION(CK_RV, C_Fin 1ac50 64 4f 62 6a 65 63 74 73 46 69 6e 61 6c 29 28 43 dObjectsFinal)(C 1ac60 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 1ac70 20 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 69 6e hSession) {..in 1ac80 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a t mutex_retval;. 1ac90 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1aca0 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 1acb0 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 1acc0 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 1acd0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1ace0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 1acf0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 1ad00 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1ad10 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 1ad20 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 1ad30 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 if (hSession == 1ad40 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 0 || hSession >= 1ad50 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 1ad60 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 1ad70 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 1ad80 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 ns[0]))) {...CAC 1ad90 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1ada0 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 1adb0 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 n out of range." 1adc0 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 1add0 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 1ade0 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 1adf0 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 1ae00 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 cackey_mutex_loc 1ae10 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1ae20 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 1ae30 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 1ae40 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1ae50 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b TF("Error. Lock 1ae60 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 1ae70 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 1ae80 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 1ae90 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 ..if (!cackey_se 1aea0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 1aeb0 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 .active) {...cac 1aec0 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1aed0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1aee0 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 1aef0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1af00 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 Session not ac 1af10 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 1af20 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 1af30 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 1af40 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack 1af50 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1af60 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 74 sion].search_act 1af70 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ive) {...cackey_ 1af80 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 1af90 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 1afa0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1afb0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 1afc0 61 72 63 68 20 6e 6f 74 20 61 63 74 69 76 65 2e arch not active. 1afd0 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 1afe0 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f CKR_OPERATION_NO 1aff0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 1b000 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 .}...cackey_sess 1b010 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 1b020 65 61 72 63 68 5f 61 63 74 69 76 65 20 3d 20 30 earch_active = 0 1b030 3b 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 ;..if (cackey_se 1b040 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 1b050 2e 73 65 61 72 63 68 5f 71 75 65 72 79 29 20 7b .search_query) { 1b060 0a 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f 73 ...free(cackey_s 1b070 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1b080 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 29 3b ].search_query); 1b090 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 1b0a0 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 1b0b0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 1b0c0 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 1b0d0 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 1b0e0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1b0f0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1b100 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 . Unlocking fai 1b110 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 1b120 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 1b130 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ROR);..}...CACKE 1b140 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1b150 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 1b160 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b (%i)", CKR_OK); 1b170 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 1b180 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1b190 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1b1a0 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 29 28 43 C_EncryptInit)(C 1b1b0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 1b1c0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 hSession, CK_ME 1b1d0 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 CHANISM_PTR pMec 1b1e0 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 hanism, CK_OBJEC 1b1f0 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b T_HANDLE hKey) { 1b200 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1b210 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 1b220 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 1b230 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 1b240 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1b250 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 1b260 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 1b270 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1b280 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 1b290 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 1b2a0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1b2b0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 1b2c0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 1b2d0 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 1b2e0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 1b2f0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 1b300 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 1b310 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1b320 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 1b330 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 1b340 20 43 5f 45 6e 63 72 79 70 74 29 28 43 4b 5f 53 C_Encrypt)(CK_S 1b350 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 1b360 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f ession, CK_BYTE_ 1b370 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c PTR pData, CK_UL 1b380 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43 ONG ulDataLen, C 1b390 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 K_BYTE_PTR pEncr 1b3a0 79 70 74 65 64 44 61 74 61 2c 20 43 4b 5f 55 4c yptedData, CK_UL 1b3b0 4f 4e 47 5f 50 54 52 20 70 75 6c 45 6e 63 72 79 ONG_PTR pulEncry 1b3c0 70 74 65 64 44 61 74 61 4c 65 6e 29 20 7b 0a 09 ptedDataLen) {.. 1b3d0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1b3e0 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 1b3f0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 1b400 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 1b410 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1b420 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 1b430 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 1b440 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 1b450 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 1b460 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 1b470 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1b480 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 1b490 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1b4a0 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C 1b4b0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 1b4c0 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re 1b4d0 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO 1b4e0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 1b4f0 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 1b500 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 1b510 5f 45 6e 63 72 79 70 74 55 70 64 61 74 65 29 28 _EncryptUpdate)( 1b520 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 1b530 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 1b540 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 YTE_PTR pPart, C 1b550 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 K_ULONG ulPartLe 1b560 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 1b570 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 43 EncryptedPart, C 1b580 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 45 K_ULONG_PTR pulE 1b590 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 29 ncryptedPartLen) 1b5a0 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 1b5b0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 1b5c0 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 1b5d0 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 1b5e0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1b5f0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1b600 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 1b610 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1b620 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 1b630 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 1b640 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1b650 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 1b660 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 1b670 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 1b680 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 1b690 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 1b6a0 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 1b6b0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 1b6c0 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 1b6d0 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 1b6e0 56 2c 20 43 5f 45 6e 63 72 79 70 74 46 69 6e 61 V, C_EncryptFina 1b6f0 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 l)(CK_SESSION_HA 1b700 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 1b710 4b 5f 42 59 54 45 5f 50 54 52 20 70 4c 61 73 74 K_BYTE_PTR pLast 1b720 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 43 EncryptedPart, C 1b730 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 4c K_ULONG_PTR pulL 1b740 61 73 74 45 6e 63 72 79 70 74 65 64 50 61 72 74 astEncryptedPart 1b750 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Len) {..CACKEY_D 1b760 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 1b770 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 1b780 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 1b790 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 1b7a0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1b7b0 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 1b7c0 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 1b7d0 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 1b7e0 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1b7f0 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 1b800 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1b810 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 1b820 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 1b830 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 1b840 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1b850 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 1b860 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1b870 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 1b880 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 1b890 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 74 CK_RV, C_Decrypt 1b8a0 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e Init)(CK_SESSION 1b8b0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 1b8c0 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 , CK_MECHANISM_P 1b8d0 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 TR pMechanism, C 1b8e0 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 K_OBJECT_HANDLE 1b8f0 68 4b 65 79 29 20 7b 0a 09 69 6e 74 20 6d 75 74 hKey) {..int mut 1b900 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 68 4b 65 ex_retval;...hKe 1b910 79 2d 2d 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 y--;...CACKEY_DE 1b920 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 1b930 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 1b940 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 1b950 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1b960 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1b970 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 1b980 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1b990 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 1b9a0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 1b9b0 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 6e .}...if (pMechan 1b9c0 69 73 6d 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 ism == NULL) {.. 1b9d0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1b9e0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 4d 65 INTF("Error. pMe 1b9f0 63 68 61 6e 69 73 6d 20 69 73 20 4e 55 4c 4c 2e chanism is NULL. 1ba00 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1ba10 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 R_ARGUMENTS_BAD) 1ba20 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68 ;..}...if (pMech 1ba30 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d anism->mechanism 1ba40 20 21 3d 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 != CKM_RSA_PKCS 1ba50 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1ba60 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1ba70 2e 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 . pMechanism->me 1ba80 63 68 61 6e 69 73 6d 20 6e 6f 74 20 73 70 65 63 chanism not spec 1ba90 69 66 69 65 64 20 61 73 20 43 4b 4d 5f 52 53 41 ified as CKM_RSA 1baa0 5f 50 4b 43 53 22 29 3b 0a 0a 09 09 72 65 74 75 _PKCS");....retu 1bab0 72 6e 28 43 4b 52 5f 4d 45 43 48 41 4e 49 53 4d rn(CKR_MECHANISM 1bac0 5f 50 41 52 41 4d 5f 49 4e 56 41 4c 49 44 29 3b _PARAM_INVALID); 1bad0 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 ..}...if (hSessi 1bae0 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 on == 0 || hSess 1baf0 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 ion >= (sizeof(c 1bb00 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 ackey_sessions) 1bb10 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ 1bb20 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b sessions[0]))) { 1bb30 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1bb40 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1bb50 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 Session out of r 1bb60 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 ange.");......re 1bb70 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 1bb80 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 1bb90 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 1bba0 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 1bbb0 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 ex_lock(cackey_b 1bbc0 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 1bbd0 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 1bbe0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1bbf0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1bc00 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Locking failed 1bc10 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1bc20 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 1bc30 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 1bc40 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1bc50 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b ssion].active) { 1bc60 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 1bc70 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 1bc80 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 1bc90 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1bca0 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 1bcb0 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 not active.");.. 1bcc0 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 1bcd0 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 1bce0 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 VALID);..}...if 1bcf0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 1bd00 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 [hSession].decry 1bd10 70 74 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 pt_active) {...c 1bd20 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 1bd30 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 1bd40 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....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 44 65 63 72 79 70 74 20 61 6c 72 65 r. Decrypt alre 1bd70 61 64 79 20 69 6e 20 70 72 6f 67 72 65 73 73 2e ady in progress. 1bd80 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 1bd90 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 41 43 CKR_OPERATION_AC 1bda0 54 49 56 45 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 TIVE);..}...if ( 1bdb0 68 4b 65 79 20 3e 3d 20 63 61 63 6b 65 79 5f 73 hKey >= cackey_s 1bdc0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1bdd0 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 ].identities_cou 1bde0 6e 74 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d nt) {...cackey_m 1bdf0 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 1be00 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 1be10 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1be20 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4b 65 79 NTF("Error. Key 1be30 20 68 61 6e 64 6c 65 20 6f 75 74 20 6f 66 20 72 handle out of r 1be40 61 6e 67 65 20 28 72 65 71 75 65 73 74 65 64 20 ange (requested 1be50 6b 65 79 20 25 6c 75 2c 20 6f 6e 6c 79 20 25 6c key %lu, only %l 1be60 75 20 69 64 65 6e 74 69 74 69 65 73 20 61 76 61 u identities ava 1be70 69 6c 61 62 6c 65 29 2e 22 2c 20 28 75 6e 73 69 ilable).", (unsi 1be80 67 6e 65 64 20 6c 6f 6e 67 29 20 68 4b 65 79 2c gned long) hKey, 1be90 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 1bea0 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 1beb0 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 [hSession].ident 1bec0 69 74 69 65 73 5f 63 6f 75 6e 74 29 3b 0a 0a 09 ities_count);... 1bed0 09 72 65 74 75 72 6e 28 43 4b 52 5f 4b 45 59 5f .return(CKR_KEY_ 1bee0 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 1bef0 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 ..}...cackey_ses 1bf00 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1bf10 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 20 3d decrypt_active = 1bf20 20 31 3b 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 1;...cackey_ses 1bf30 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1bf40 64 65 63 72 79 70 74 5f 6d 65 63 68 61 6e 69 73 decrypt_mechanis 1bf50 6d 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e m = pMechanism-> 1bf60 6d 65 63 68 61 6e 69 73 6d 3b 0a 09 63 61 63 6b mechanism;..cack 1bf70 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1bf80 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 6d 65 sion].decrypt_me 1bf90 63 68 5f 70 61 72 6d 20 3d 20 70 4d 65 63 68 61 ch_parm = pMecha 1bfa0 6e 69 73 6d 2d 3e 70 50 61 72 61 6d 65 74 65 72 nism->pParameter 1bfb0 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ;..cackey_sessio 1bfc0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 ns[hSession].dec 1bfd0 72 79 70 74 5f 6d 65 63 68 5f 70 61 72 6d 6c 65 rypt_mech_parmle 1bfe0 6e 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e n = pMechanism-> 1bff0 75 6c 50 61 72 61 6d 65 74 65 72 4c 65 6e 3b 0a ulParameterLen;. 1c000 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 1c010 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 [hSession].decry 1c020 70 74 5f 69 64 65 6e 74 69 74 79 20 3d 20 26 63 pt_identity = &c 1c030 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1c040 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 Session].identit 1c050 69 65 73 5b 68 4b 65 79 5d 3b 0a 0a 09 6d 75 74 ies[hKey];...mut 1c060 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 1c070 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 1c080 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 1c090 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 1c0a0 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 1c0b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1c0c0 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b ("Error. Unlock 1c0d0 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 1c0e0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 1c0f0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 1c100 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1c110 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 1c120 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C 1c130 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return 1c140 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f (CKR_OK);.}..CK_ 1c150 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 1c160 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 74 CK_RV, C_Decrypt 1c170 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 1c180 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 1c190 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 _BYTE_PTR pEncry 1c1a0 70 74 65 64 44 61 74 61 2c 20 43 4b 5f 55 4c 4f ptedData, CK_ULO 1c1b0 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64 44 61 NG ulEncryptedDa 1c1c0 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 taLen, CK_BYTE_P 1c1d0 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f TR pData, CK_ULO 1c1e0 4e 47 5f 50 54 52 20 70 75 6c 44 61 74 61 4c 65 NG_PTR pulDataLe 1c1f0 6e 29 20 7b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 64 n) {..CK_ULONG d 1c200 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 2c 20 64 atalen_update, d 1c210 61 74 61 6c 65 6e 5f 66 69 6e 61 6c 3b 0a 09 43 atalen_final;..C 1c220 4b 5f 52 56 20 64 65 63 72 79 70 74 5f 72 65 74 K_RV decrypt_ret 1c230 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 1c240 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 1c250 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 1c260 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 1c270 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1c280 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1c290 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 1c2a0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1c2b0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 1c2c0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 1c2d0 0a 09 69 66 20 28 70 75 6c 44 61 74 61 4c 65 6e ..if (pulDataLen 1c2e0 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 == NULL) {...CA 1c2f0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1c300 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 44 61 74 F("Error. pulDat 1c310 61 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 3b aLen is NULL."); 1c320 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 ....return(CKR_A 1c330 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 RGUMENTS_BAD);.. 1c340 7d 0a 0a 09 64 61 74 61 6c 65 6e 5f 75 70 64 61 }...datalen_upda 1c350 74 65 20 3d 20 2a 70 75 6c 44 61 74 61 4c 65 6e te = *pulDataLen 1c360 3b 0a 0a 09 64 65 63 72 79 70 74 5f 72 65 74 20 ;...decrypt_ret 1c370 3d 20 43 5f 44 65 63 72 79 70 74 55 70 64 61 74 = C_DecryptUpdat 1c380 65 28 68 53 65 73 73 69 6f 6e 2c 20 70 45 6e 63 e(hSession, pEnc 1c390 72 79 70 74 65 64 44 61 74 61 2c 20 75 6c 45 6e ryptedData, ulEn 1c3a0 63 72 79 70 74 65 64 44 61 74 61 4c 65 6e 2c 20 cryptedDataLen, 1c3b0 70 44 61 74 61 2c 20 26 64 61 74 61 6c 65 6e 5f pData, &datalen_ 1c3c0 75 70 64 61 74 65 29 3b 0a 09 69 66 20 28 64 65 update);..if (de 1c3d0 63 72 79 70 74 5f 72 65 74 20 21 3d 20 43 4b 52 crypt_ret != CKR 1c3e0 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f _OK) {...CACKEY_ 1c3f0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1c400 72 6f 72 2e 20 20 44 65 63 72 79 70 74 55 70 64 ror. DecryptUpd 1c410 61 74 65 28 29 20 72 65 74 75 72 6e 65 64 20 66 ate() returned f 1c420 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 6c 75 ailure (rv = %lu 1c430 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ).", (unsigned l 1c440 6f 6e 67 29 20 64 65 63 72 79 70 74 5f 72 65 74 ong) decrypt_ret 1c450 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 64 65 63 );....return(dec 1c460 72 79 70 74 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 rypt_ret);..}... 1c470 69 66 20 28 70 44 61 74 61 29 20 7b 0a 09 09 70 if (pData) {...p 1c480 44 61 74 61 20 2b 3d 20 64 61 74 61 6c 65 6e 5f Data += datalen_ 1c490 75 70 64 61 74 65 3b 0a 09 7d 0a 09 64 61 74 61 update;..}..data 1c4a0 6c 65 6e 5f 66 69 6e 61 6c 20 3d 20 2a 70 75 6c len_final = *pul 1c4b0 44 61 74 61 4c 65 6e 20 2d 20 64 61 74 61 6c 65 DataLen - datale 1c4c0 6e 5f 75 70 64 61 74 65 3b 0a 0a 09 64 65 63 72 n_update;...decr 1c4d0 79 70 74 5f 72 65 74 20 3d 20 43 5f 44 65 63 72 ypt_ret = C_Decr 1c4e0 79 70 74 46 69 6e 61 6c 28 68 53 65 73 73 69 6f yptFinal(hSessio 1c4f0 6e 2c 20 70 44 61 74 61 2c 20 26 64 61 74 61 6c n, pData, &datal 1c500 65 6e 5f 66 69 6e 61 6c 29 3b 0a 09 69 66 20 28 en_final);..if ( 1c510 64 65 63 72 79 70 74 5f 72 65 74 20 21 3d 20 43 decrypt_ret != C 1c520 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 KR_OK) {...CACKE 1c530 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1c540 45 72 72 6f 72 2e 20 20 44 65 63 72 79 70 74 46 Error. DecryptF 1c550 69 6e 61 6c 28 29 20 72 65 74 75 72 6e 65 64 20 inal() returned 1c560 66 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 6c failure (rv = %l 1c570 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 u).", (unsigned 1c580 6c 6f 6e 67 29 20 64 65 63 72 79 70 74 5f 72 65 long) decrypt_re 1c590 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 64 65 t);....return(de 1c5a0 63 72 79 70 74 5f 72 65 74 29 3b 0a 09 7d 0a 0a crypt_ret);..}.. 1c5b0 09 2a 70 75 6c 44 61 74 61 4c 65 6e 20 3d 20 64 .*pulDataLen = d 1c5c0 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 20 2b 20 atalen_update + 1c5d0 64 61 74 61 6c 65 6e 5f 66 69 6e 61 6c 3b 0a 0a datalen_final;.. 1c5e0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1c5f0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 1c600 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK 1c610 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 R_OK);...return( 1c620 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 CKR_OK);.}..CK_D 1c630 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 1c640 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 74 55 K_RV, C_DecryptU 1c650 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f pdate)(CK_SESSIO 1c660 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 1c670 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 1c680 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 43 EncryptedPart, C 1c690 4b 5f 55 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 70 K_ULONG ulEncryp 1c6a0 74 65 64 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 tedPartLen, CK_B 1c6b0 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 YTE_PTR pPart, C 1c6c0 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 50 K_ULONG_PTR pulP 1c6d0 61 72 74 4c 65 6e 29 20 7b 0a 09 73 74 61 74 69 artLen) {..stati 1c6e0 63 20 43 4b 5f 42 59 54 45 20 62 75 66 5b 31 36 c CK_BYTE buf[16 1c6f0 33 38 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 20 62 384];..ssize_t b 1c700 75 66 6c 65 6e 3b 0a 09 43 4b 5f 52 56 20 72 65 uflen;..CK_RV re 1c710 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e 45 52 tval = CKR_GENER 1c720 41 4c 5f 45 52 52 4f 52 3b 0a 09 69 6e 74 20 6d AL_ERROR;..int m 1c730 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 utex_retval;...C 1c740 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1c750 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 1c760 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 1c770 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 1c780 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1c790 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 1c7a0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 1c7b0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 1c7c0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 1c7d0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 LIZED);..}...if 1c7e0 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c (hSession == 0 | 1c7f0 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 | hSession >= (s 1c800 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 1c810 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 sions) / sizeof( 1c820 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1c830 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 0]))) {...CACKEY 1c840 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1c850 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f rror. Session o 1c860 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a ut of range.");. 1c870 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 1c880 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 1c890 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 NVALID);..}...if 1c8a0 20 28 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 (pEncryptedPart 1c8b0 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c 45 6e == NULL && ulEn 1c8c0 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 3d cryptedPartLen = 1c8d0 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 = 0) {.../* Shor 1c8e0 74 20 63 69 72 63 75 69 74 20 69 66 20 77 65 20 t circuit if we 1c8f0 61 72 65 20 61 73 6b 65 64 20 74 6f 20 64 65 63 are asked to dec 1c900 72 79 70 74 20 6e 6f 74 68 69 6e 67 2e 2e 2e 20 rypt nothing... 1c910 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 */...CACKEY_DEBU 1c920 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 1c930 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 20 ing CKR_OK (%i) 1c940 28 73 68 6f 72 74 20 63 69 72 63 75 69 74 29 22 (short circuit)" 1c950 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 , CKR_OK);....re 1c960 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d turn(CKR_OK);..} 1c970 0a 0a 09 69 66 20 28 70 45 6e 63 72 79 70 74 65 ...if (pEncrypte 1c980 64 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b dPart == NULL) { 1c990 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1c9a0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 PRINTF("Error. p 1c9b0 45 6e 63 72 79 70 74 65 64 50 61 72 74 20 69 73 EncryptedPart is 1c9c0 20 4e 55 4c 4c 2c 20 62 75 74 20 75 6c 45 6e 63 NULL, but ulEnc 1c9d0 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 69 73 ryptedPartLen is 1c9e0 20 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 09 72 65 not 0.");....re 1c9f0 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 1ca00 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if 1ca10 20 28 75 6c 45 6e 63 72 79 70 74 65 64 50 61 72 (ulEncryptedPar 1ca20 74 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 43 tLen == 0) {...C 1ca30 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1ca40 54 46 28 22 45 72 72 6f 72 2e 20 75 6c 45 6e 63 TF("Error. ulEnc 1ca50 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 69 73 ryptedPartLen is 1ca60 20 30 2c 20 62 75 74 20 70 50 61 72 74 20 69 73 0, but pPart is 1ca70 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 not NULL.");... 1ca80 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 1ca90 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 1caa0 09 69 66 20 28 70 75 6c 50 61 72 74 4c 65 6e 20 .if (pulPartLen 1cab0 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 1cac0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1cad0 28 22 45 72 72 6f 72 2e 20 70 75 6c 50 61 72 74 ("Error. pulPart 1cae0 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a Len is NULL.");. 1caf0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 1cb00 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} 1cb10 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 1cb20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c = cackey_mutex_l 1cb30 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1cb40 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 1cb50 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 1cb60 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1cb70 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f INTF("Error. Lo 1cb80 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 1cb90 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 1cba0 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 1cbb0 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f }...if (!cackey_ 1cbc0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1cbd0 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 n].active) {...c 1cbe0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 1cbf0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 1cc00 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 1cc10 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1cc20 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 r. Session not 1cc30 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 active.");...... 1cc40 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 1cc50 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 1cc60 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 D);..}...if (!ca 1cc70 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1cc80 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f ession].decrypt_ 1cc90 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b active) {...cack 1cca0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 1ccb0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 1ccc0 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 1ccd0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1cce0 20 44 65 63 72 79 70 74 20 6e 6f 74 20 61 63 74 Decrypt not act 1ccf0 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ive.");......ret 1cd00 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f urn(CKR_OPERATIO 1cd10 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 N_NOT_INITIALIZE 1cd20 44 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 68 20 D);..}...switch 1cd30 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 1cd40 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 [hSession].decry 1cd50 70 74 5f 6d 65 63 68 61 6e 69 73 6d 29 20 7b 0a pt_mechanism) {. 1cd60 09 09 63 61 73 65 20 43 4b 4d 5f 52 53 41 5f 50 ..case CKM_RSA_P 1cd70 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 73 6b 20 63 KCS:..../* Ask c 1cd80 61 72 64 20 74 6f 20 64 65 63 72 79 70 74 20 2a ard to decrypt * 1cd90 2f 0a 09 09 09 62 75 66 6c 65 6e 20 3d 20 63 61 /....buflen = ca 1cda0 63 6b 65 79 5f 73 69 67 6e 64 65 63 72 79 70 74 ckey_signdecrypt 1cdb0 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 (&cackey_slots[c 1cdc0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1cdd0 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f 74 49 44 5d Session].slotID] 1cde0 2c 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e , cackey_session 1cdf0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 s[hSession].decr 1ce00 79 70 74 5f 69 64 65 6e 74 69 74 79 2c 20 70 45 ypt_identity, pE 1ce10 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 75 6c ncryptedPart, ul 1ce20 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e EncryptedPartLen 1ce30 2c 20 62 75 66 2c 20 73 69 7a 65 6f 66 28 62 75 , buf, sizeof(bu 1ce40 66 29 29 3b 0a 0a 09 09 09 69 66 20 28 62 75 66 f));.....if (buf 1ce50 6c 65 6e 20 3c 20 30 29 20 7b 0a 09 09 09 09 2f len < 0) {...../ 1ce60 2a 20 44 65 63 72 79 70 74 69 6f 6e 20 66 61 69 * Decryption fai 1ce70 6c 65 64 2e 20 2a 2f 0a 09 09 09 09 72 65 74 76 led. */.....retv 1ce80 61 6c 20 3d 20 43 4b 52 5f 47 45 4e 45 52 41 4c al = CKR_GENERAL 1ce90 5f 45 52 52 4f 52 3b 0a 09 09 09 7d 20 65 6c 73 _ERROR;....} els 1cea0 65 20 69 66 20 28 28 28 75 6e 73 69 67 6e 65 64 e if (((unsigned 1ceb0 20 6c 6f 6e 67 29 20 62 75 66 6c 65 6e 29 20 3e long) buflen) > 1cec0 20 2a 70 75 6c 50 61 72 74 4c 65 6e 20 26 26 20 *pulPartLen && 1ced0 70 50 61 72 74 29 20 7b 0a 09 09 09 09 2f 2a 20 pPart) {...../* 1cee0 44 65 63 72 79 70 74 65 64 20 64 61 74 61 20 74 Decrypted data t 1cef0 6f 6f 20 6c 61 72 67 65 20 2a 2f 0a 09 09 09 09 oo large */..... 1cf00 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 42 55 46 retval = CKR_BUF 1cf10 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b 0a 09 FER_TOO_SMALL;.. 1cf20 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 69 ..} else {.....i 1cf30 66 20 28 70 50 61 72 74 29 20 7b 0a 09 09 09 09 f (pPart) {..... 1cf40 09 6d 65 6d 63 70 79 28 70 50 61 72 74 2c 20 62 .memcpy(pPart, b 1cf50 75 66 2c 20 62 75 66 6c 65 6e 29 3b 0a 09 09 09 uf, buflen);.... 1cf60 09 7d 0a 0a 09 09 09 09 2a 70 75 6c 50 61 72 74 .}......*pulPart 1cf70 4c 65 6e 20 3d 20 62 75 66 6c 65 6e 3b 0a 0a 09 Len = buflen;... 1cf80 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f ...retval = CKR_ 1cf90 4f 4b 3b 0a 09 09 09 7d 0a 0a 09 09 09 62 72 65 OK;....}.....bre 1cfa0 61 6b 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 ak;..}...mutex_r 1cfb0 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 1cfc0 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 1cfd0 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 1cfe0 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 1cff0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 1d000 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1d010 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 ror. Unlocking 1d020 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 1d030 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 1d040 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 _ERROR);..}...CA 1d050 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1d060 46 28 22 52 65 74 75 72 6e 69 6e 67 20 25 69 22 F("Returning %i" 1d070 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c 29 3b , (int) retval); 1d080 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c ...return(retval 1d090 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1d0a0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1d0b0 43 5f 44 65 63 72 79 70 74 46 69 6e 61 6c 29 28 C_DecryptFinal)( 1d0c0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 1d0d0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 1d0e0 59 54 45 5f 50 54 52 20 70 4c 61 73 74 50 61 72 YTE_PTR pLastPar 1d0f0 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 t, CK_ULONG_PTR 1d100 70 75 6c 4c 61 73 74 50 61 72 74 4c 65 6e 29 20 pulLastPartLen) 1d110 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 {..int mutex_ret 1d120 76 61 6c 3b 0a 09 69 6e 74 20 74 65 72 6d 69 6e val;..int termin 1d130 61 74 65 5f 64 65 63 72 79 70 74 20 3d 20 31 3b ate_decrypt = 1; 1d140 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1d150 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 1d160 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 1d170 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 1d180 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1d190 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 1d1a0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 1d1b0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1d1c0 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 1d1d0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 1d1e0 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d .if (hSession == 1d1f0 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 0 || hSession > 1d200 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 = (sizeof(cackey 1d210 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a _sessions) / siz 1d220 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi 1d230 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 ons[0]))) {...CA 1d240 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1d250 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 1d260 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e on out of range. 1d270 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 1d280 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 CKR_SESSION_HAND 1d290 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 1d2a0 0a 09 69 66 20 28 70 75 6c 4c 61 73 74 50 61 72 ..if (pulLastPar 1d2b0 74 4c 65 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a tLen == NULL) {. 1d2c0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1d2d0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 75 RINTF("Error. pu 1d2e0 6c 4c 61 73 74 50 61 72 74 4c 65 6e 20 69 73 20 lLastPartLen is 1d2f0 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 NULL.");....retu 1d300 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 rn(CKR_ARGUMENTS 1d310 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 _BAD);..}...mute 1d320 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 1d330 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 y_mutex_lock(cac 1d340 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 1d350 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 1d360 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 1d370 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1d380 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 rror. Locking f 1d390 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 ailed.");....ret 1d3a0 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 1d3b0 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 ERROR);..}...if 1d3c0 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (!cackey_session 1d3d0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 s[hSession].acti 1d3e0 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d ve) {...cackey_m 1d3f0 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 1d400 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 1d410 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1d420 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 NTF("Error. Ses 1d430 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e sion not active. 1d440 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 1d450 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 CKR_SESSION_HAND 1d460 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 1d470 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 ..if (!cackey_se 1d480 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 1d490 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 29 .decrypt_active) 1d4a0 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 1d4b0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 1d4c0 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 1d4d0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1d4e0 28 22 45 72 72 6f 72 2e 20 20 44 65 63 72 79 70 ("Error. Decryp 1d4f0 74 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b t not active."); 1d500 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 1d510 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 _OPERATION_NOT_I 1d520 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 1d530 0a 09 2a 70 75 6c 4c 61 73 74 50 61 72 74 4c 65 ..*pulLastPartLe 1d540 6e 20 3d 20 30 3b 0a 0a 09 69 66 20 28 70 4c 61 n = 0;...if (pLa 1d550 73 74 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 20 stPart == NULL) 1d560 7b 0a 09 09 74 65 72 6d 69 6e 61 74 65 5f 64 65 {...terminate_de 1d570 63 72 79 70 74 20 3d 20 30 3b 0a 09 7d 0a 0a 09 crypt = 0;..}... 1d580 69 66 20 28 74 65 72 6d 69 6e 61 74 65 5f 64 65 if (terminate_de 1d590 63 72 79 70 74 29 20 7b 0a 09 09 63 61 63 6b 65 crypt) {...cacke 1d5a0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 1d5b0 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 ion].decrypt_act 1d5c0 69 76 65 20 3d 20 30 3b 0a 09 7d 0a 0a 09 6d 75 ive = 0;..}...mu 1d5d0 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 1d5e0 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1d5f0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1d600 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 1d610 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 1d620 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1d630 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 1d640 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 1d650 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 1d660 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 1d670 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1d680 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1d690 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", 1d6a0 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 CKR_OK);...retur 1d6b0 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b n(CKR_OK);.}..CK 1d6c0 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 1d6d0 28 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 (CK_RV, C_Digest 1d6e0 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e Init)(CK_SESSION 1d6f0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 1d700 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 , CK_MECHANISM_P 1d710 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 29 20 7b TR pMechanism) { 1d720 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1d730 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 1d740 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 1d750 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 1d760 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1d770 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 1d780 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 1d790 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1d7a0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 1d7b0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 1d7c0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1d7d0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 1d7e0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 1d7f0 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 1d800 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 1d810 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 1d820 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 1d830 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1d840 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 1d850 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 1d860 20 43 5f 44 69 67 65 73 74 29 28 43 4b 5f 53 45 C_Digest)(CK_SE 1d870 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 1d880 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 ssion, CK_BYTE_P 1d890 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f TR pData, CK_ULO 1d8a0 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b NG ulDataLen, CK 1d8b0 5f 42 59 54 45 5f 50 54 52 20 70 44 69 67 65 73 _BYTE_PTR pDiges 1d8c0 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 t, CK_ULONG_PTR 1d8d0 70 75 6c 44 69 67 65 73 74 4c 65 6e 29 20 7b 0a pulDigestLen) {. 1d8e0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1d8f0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1d900 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1d910 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1d920 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1d930 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1d940 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1d950 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1d960 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1d970 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 1d980 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1d990 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1d9a0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1d9b0 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 1d9c0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1d9d0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 1d9e0 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 1d9f0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1da00 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1da10 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1da20 43 5f 44 69 67 65 73 74 55 70 64 61 74 65 29 28 C_DigestUpdate)( 1da30 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 1da40 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 1da50 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 YTE_PTR pPart, C 1da60 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 K_ULONG ulPartLe 1da70 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 n) {..CACKEY_DEB 1da80 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 1da90 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 1daa0 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 1dab0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1dac0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1dad0 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 1dae0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1daf0 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 1db00 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 1db10 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 1db20 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1db30 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 1db40 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 1db50 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 1db60 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 1db70 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 1db80 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1db90 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 1dba0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 1dbb0 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 4b 65 79 _RV, C_DigestKey 1dbc0 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 1dbd0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 1dbe0 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 _OBJECT_HANDLE h 1dbf0 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Key) {..CACKEY_D 1dc00 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 1dc10 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 1dc20 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 1dc30 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 1dc40 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1dc50 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 1dc60 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 1dc70 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 1dc80 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1dc90 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 1dca0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1dcb0 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 1dcc0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 1dcd0 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 1dce0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1dcf0 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 1dd00 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1dd10 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 1dd20 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 1dd30 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 46 CK_RV, C_DigestF 1dd40 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e inal)(CK_SESSION 1dd50 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 1dd60 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 , CK_BYTE_PTR pD 1dd70 69 67 65 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f igest, CK_ULONG_ 1dd80 50 54 52 20 70 75 6c 44 69 67 65 73 74 4c 65 6e PTR pulDigestLen 1dd90 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 1dda0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 1ddb0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 1ddc0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1ddd0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1dde0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1ddf0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1de00 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1de10 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1de20 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1de30 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1de40 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1de50 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 1de60 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 1de70 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 1de80 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1de90 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 1dea0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1deb0 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 1dec0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1ded0 52 56 2c 20 43 5f 53 69 67 6e 49 6e 69 74 29 28 RV, C_SignInit)( 1dee0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 1def0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d E hSession, CK_M 1df00 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 ECHANISM_PTR pMe 1df10 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 chanism, CK_OBJE 1df20 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 CT_HANDLE hKey) 1df30 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 {..int mutex_ret 1df40 76 61 6c 3b 0a 0a 09 68 4b 65 79 2d 2d 3b 0a 0a val;...hKey--;.. 1df50 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1df60 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1df70 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1df80 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1df90 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1dfa0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1dfb0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1dfc0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1dfd0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1dfe0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 IALIZED);..}...i 1dff0 66 20 28 70 4d 65 63 68 61 6e 69 73 6d 20 3d 3d f (pMechanism == 1e000 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 NULL) {...CACKE 1e010 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1e020 45 72 72 6f 72 2e 20 70 4d 65 63 68 61 6e 69 73 Error. pMechanis 1e030 6d 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 m is NULL.");... 1e040 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 1e050 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 1e060 09 69 66 20 28 70 4d 65 63 68 61 6e 69 73 6d 2d .if (pMechanism- 1e070 3e 6d 65 63 68 61 6e 69 73 6d 20 21 3d 20 43 4b >mechanism != CK 1e080 4d 5f 52 53 41 5f 50 4b 43 53 20 26 26 20 70 4d M_RSA_PKCS && pM 1e090 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e echanism->mechan 1e0a0 69 73 6d 20 21 3d 20 43 4b 4d 5f 53 48 41 31 5f ism != CKM_SHA1_ 1e0b0 52 53 41 5f 50 4b 43 53 29 20 7b 0a 09 09 43 41 RSA_PKCS) {...CA 1e0c0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1e0d0 46 28 22 45 72 72 6f 72 2e 20 70 4d 65 63 68 61 F("Error. pMecha 1e0e0 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 20 nism->mechanism 1e0f0 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 61 73 not specified as 1e100 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 20 6f 72 CKM_RSA_PKCS or 1e110 20 43 4b 4d 5f 53 48 41 31 5f 52 53 41 5f 50 4b CKM_SHA1_RSA_PK 1e120 43 53 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 CS");....return( 1e130 43 4b 52 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 41 CKR_MECHANISM_PA 1e140 52 41 4d 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d RAM_INVALID);..} 1e150 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 ...if (hSession 1e160 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e == 0 || hSession 1e170 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b >= (sizeof(cack 1e180 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 1e190 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 1e1a0 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 sions[0]))) {... 1e1b0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1e1c0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 NTF("Error. Ses 1e1d0 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 sion out of rang 1e1e0 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 1e1f0 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 1e200 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 1e210 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 1e220 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 1e230 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 1e240 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 1e250 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 1e260 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1e270 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 1e280 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 1e290 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1e2a0 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 1e2b0 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 1e2c0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1e2d0 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 on].active) {... 1e2e0 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 1e2f0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1e300 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 1e310 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1e320 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 or. Session not 1e330 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 active.");..... 1e340 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 1e350 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 1e360 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 ID);..}...if (ca 1e370 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1e380 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 ession].sign_act 1e390 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ive) {...cackey_ 1e3a0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 1e3b0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 1e3c0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1e3d0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 69 INTF("Error. Si 1e3e0 67 6e 20 61 6c 72 65 61 64 79 20 69 6e 20 70 72 gn already in pr 1e3f0 6f 67 72 65 73 73 2e 22 29 3b 0a 09 09 0a 09 09 ogress.");...... 1e400 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 return(CKR_OPERA 1e410 54 49 4f 4e 5f 41 43 54 49 56 45 29 3b 0a 09 7d TION_ACTIVE);..} 1e420 0a 0a 09 69 66 20 28 68 4b 65 79 20 3e 3d 20 63 ...if (hKey >= c 1e430 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1e440 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 Session].identit 1e450 69 65 73 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 63 ies_count) {...c 1e460 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 1e470 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 1e480 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 1e490 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1e4a0 72 2e 20 20 4b 65 79 20 68 61 6e 64 6c 65 20 6f r. Key handle o 1e4b0 75 74 20 6f 66 20 72 61 6e 67 65 20 28 72 65 71 ut of range (req 1e4c0 75 65 73 74 65 64 20 6b 65 79 20 25 6c 75 2c 20 uested key %lu, 1e4d0 6f 6e 6c 79 20 25 6c 75 20 69 64 65 6e 74 69 74 only %lu identit 1e4e0 69 65 73 20 61 76 61 69 6c 61 62 6c 65 29 2e 22 ies available)." 1e4f0 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 1e500 29 20 68 4b 65 79 2c 20 28 75 6e 73 69 67 6e 65 ) hKey, (unsigne 1e510 64 20 6c 6f 6e 67 29 20 63 61 63 6b 65 79 5f 73 d long) cackey_s 1e520 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1e530 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 ].identities_cou 1e540 6e 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 nt);....return(C 1e550 4b 52 5f 4b 45 59 5f 48 41 4e 44 4c 45 5f 49 4e KR_KEY_HANDLE_IN 1e560 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 VALID);..}...cac 1e570 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1e580 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 ssion].sign_acti 1e590 76 65 20 3d 20 31 3b 0a 0a 09 63 61 63 6b 65 79 ve = 1;...cackey 1e5a0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1e5b0 6f 6e 5d 2e 73 69 67 6e 5f 6d 65 63 68 61 6e 69 on].sign_mechani 1e5c0 73 6d 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d 2d sm = pMechanism- 1e5d0 3e 6d 65 63 68 61 6e 69 73 6d 3b 0a 0a 09 63 61 >mechanism;...ca 1e5e0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1e5f0 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 ession].sign_buf 1e600 6c 65 6e 20 3d 20 31 32 38 3b 0a 09 63 61 63 6b len = 128;..cack 1e610 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1e620 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73 sion].sign_bufus 1e630 65 64 20 3d 20 30 3b 0a 09 63 61 63 6b 65 79 5f ed = 0;..cackey_ 1e640 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1e650 6e 5d 2e 73 69 67 6e 5f 62 75 66 20 3d 20 6d 61 n].sign_buf = ma 1e660 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 61 63 lloc(sizeof(*cac 1e670 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1e680 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 ssion].sign_buf) 1e690 20 2a 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f * cackey_sessio 1e6a0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 1e6b0 6e 5f 62 75 66 6c 65 6e 29 3b 0a 0a 09 43 41 43 n_buflen);...CAC 1e6c0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1e6d0 28 22 53 65 73 73 69 6f 6e 20 25 6c 75 20 73 69 ("Session %lu si 1e6e0 67 6e 5f 69 64 65 6e 74 69 74 79 20 69 73 20 25 gn_identity is % 1e6f0 70 20 28 69 64 65 6e 74 69 74 69 65 20 23 25 6c p (identitie #%l 1e700 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c u)", (unsigned l 1e710 6f 6e 67 29 20 68 53 65 73 73 69 6f 6e 2c 20 26 ong) hSession, & 1e720 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1e730 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 hSession].identi 1e740 74 69 65 73 5b 68 4b 65 79 5d 2c 20 28 75 6e 73 ties[hKey], (uns 1e750 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 4b 65 79 igned long) hKey 1e760 29 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 );..cackey_sessi 1e770 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 1e780 67 6e 5f 69 64 65 6e 74 69 74 79 20 3d 20 26 63 gn_identity = &c 1e790 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1e7a0 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 Session].identit 1e7b0 69 65 73 5b 68 4b 65 79 5d 3b 0a 0a 09 6d 75 74 ies[hKey];...mut 1e7c0 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 1e7d0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 1e7e0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 1e7f0 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 1e800 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 1e810 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1e820 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b ("Error. Unlock 1e830 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 1e840 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 1e850 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 1e860 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1e870 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 1e880 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C 1e890 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return 1e8a0 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f (CKR_OK);.}..CK_ 1e8b0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 1e8c0 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 29 28 43 CK_RV, C_Sign)(C 1e8d0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 1e8e0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 1e8f0 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b TE_PTR pData, CK 1e900 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e _ULONG ulDataLen 1e910 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 , CK_BYTE_PTR pS 1e920 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f ignature, CK_ULO 1e930 4e 47 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 74 NG_PTR pulSignat 1e940 75 72 65 4c 65 6e 29 20 7b 0a 09 43 4b 5f 52 56 ureLen) {..CK_RV 1e950 20 73 69 67 6e 5f 72 65 74 3b 0a 0a 09 43 41 43 sign_ret;...CAC 1e960 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1e970 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 1e980 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 1e990 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 1e9a0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1e9b0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 1e9c0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 1e9d0 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 1e9e0 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 1e9f0 5a 45 44 29 3b 0a 09 7d 0a 0a 09 73 69 67 6e 5f ZED);..}...sign_ 1ea00 72 65 74 20 3d 20 43 5f 53 69 67 6e 55 70 64 61 ret = C_SignUpda 1ea10 74 65 28 68 53 65 73 73 69 6f 6e 2c 20 70 44 61 te(hSession, pDa 1ea20 74 61 2c 20 75 6c 44 61 74 61 4c 65 6e 29 3b 0a ta, ulDataLen);. 1ea30 09 69 66 20 28 73 69 67 6e 5f 72 65 74 20 21 3d .if (sign_ret != 1ea40 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 CKR_OK) {...CAC 1ea50 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1ea60 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 55 70 ("Error. SignUp 1ea70 64 61 74 65 28 29 20 72 65 74 75 72 6e 65 64 20 date() returned 1ea80 66 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 6c failure (rv = %l 1ea90 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 u).", (unsigned 1eaa0 6c 6f 6e 67 29 20 73 69 67 6e 5f 72 65 74 29 3b long) sign_ret); 1eab0 0a 0a 09 09 72 65 74 75 72 6e 28 73 69 67 6e 5f ....return(sign_ 1eac0 72 65 74 29 3b 0a 09 7d 0a 0a 09 73 69 67 6e 5f ret);..}...sign_ 1ead0 72 65 74 20 3d 20 43 5f 53 69 67 6e 46 69 6e 61 ret = C_SignFina 1eae0 6c 28 68 53 65 73 73 69 6f 6e 2c 20 70 53 69 67 l(hSession, pSig 1eaf0 6e 61 74 75 72 65 2c 20 70 75 6c 53 69 67 6e 61 nature, pulSigna 1eb00 74 75 72 65 4c 65 6e 29 3b 0a 09 69 66 20 28 73 tureLen);..if (s 1eb10 69 67 6e 5f 72 65 74 20 21 3d 20 43 4b 52 5f 4f ign_ret != CKR_O 1eb20 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 K) {...CACKEY_DE 1eb30 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1eb40 72 2e 20 20 53 69 67 6e 46 69 6e 61 6c 28 29 20 r. SignFinal() 1eb50 72 65 74 75 72 6e 65 64 20 66 61 69 6c 75 72 65 returned failure 1eb60 20 28 72 76 20 3d 20 25 6c 75 29 2e 22 2c 20 28 (rv = %lu).", ( 1eb70 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 unsigned long) s 1eb80 69 67 6e 5f 72 65 74 29 3b 0a 0a 09 09 72 65 74 ign_ret);....ret 1eb90 75 72 6e 28 73 69 67 6e 5f 72 65 74 29 3b 0a 09 urn(sign_ret);.. 1eba0 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 1ebb0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1ebc0 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c ng CKR_OK (%i)", 1ebd0 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 CKR_OK);...retu 1ebe0 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 rn(CKR_OK);.}..C 1ebf0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 1ec00 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 55 N(CK_RV, C_SignU 1ec10 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f pdate)(CK_SESSIO 1ec20 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 1ec30 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 1ec40 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 Part, CK_ULONG u 1ec50 6c 50 61 72 74 4c 65 6e 29 20 7b 0a 09 69 6e 74 lPartLen) {..int 1ec60 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a mutex_retval;.. 1ec70 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1ec80 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1ec90 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1eca0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1ecb0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1ecc0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1ecd0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1ece0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1ecf0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1ed00 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 IALIZED);..}...i 1ed10 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 f (hSession == 0 1ed20 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 || hSession >= 1ed30 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 (sizeof(cackey_s 1ed40 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f essions) / sizeo 1ed50 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 1ed60 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b s[0]))) {...CACK 1ed70 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1ed80 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 1ed90 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 out of range.") 1eda0 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 1edb0 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 1edc0 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 1edd0 69 66 20 28 70 50 61 72 74 20 3d 3d 20 4e 55 4c if (pPart == NUL 1ede0 4c 20 26 26 20 75 6c 50 61 72 74 4c 65 6e 20 3d L && ulPartLen = 1edf0 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 = 0) {.../* Shor 1ee00 74 20 63 69 72 63 75 69 74 20 69 66 20 77 65 20 t circuit if we 1ee10 61 72 65 20 61 73 6b 65 64 20 74 6f 20 73 69 67 are asked to sig 1ee20 6e 20 6e 6f 74 68 69 6e 67 2e 2e 2e 20 2a 2f 0a n nothing... */. 1ee30 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1ee40 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 1ee50 20 43 4b 52 5f 4f 4b 20 28 25 69 29 20 28 73 68 CKR_OK (%i) (sh 1ee60 6f 72 74 20 63 69 72 63 75 69 74 29 22 2c 20 43 ort circuit)", C 1ee70 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 KR_OK);....retur 1ee80 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 n(CKR_OK);..}... 1ee90 69 66 20 28 70 50 61 72 74 20 3d 3d 20 4e 55 4c if (pPart == NUL 1eea0 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 L) {...CACKEY_DE 1eeb0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1eec0 72 2e 20 70 50 61 72 74 20 69 73 20 4e 55 4c 4c r. pPart is NULL 1eed0 2c 20 62 75 74 20 75 6c 50 61 72 74 4c 65 6e 20 , but ulPartLen 1eee0 69 73 20 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 09 is not 0.");.... 1eef0 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM 1ef00 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 ENTS_BAD);..}... 1ef10 69 66 20 28 75 6c 50 61 72 74 4c 65 6e 20 3d 3d if (ulPartLen == 1ef20 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 1ef30 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1ef40 6f 72 2e 20 75 6c 50 61 72 74 4c 65 6e 20 69 73 or. ulPartLen is 1ef50 20 30 2c 20 62 75 74 20 70 50 61 72 74 20 69 73 0, but pPart is 1ef60 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 not NULL.");... 1ef70 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 1ef80 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 1ef90 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 1efa0 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 cackey_mutex_loc 1efb0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1efc0 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 1efd0 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 1efe0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1eff0 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b TF("Error. Lock 1f000 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 1f010 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 1f020 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 1f030 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 ..if (!cackey_se 1f040 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 1f050 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 .active) {...cac 1f060 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1f070 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1f080 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 1f090 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1f0a0 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 Session not ac 1f0b0 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 1f0c0 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 1f0d0 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 1f0e0 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack 1f0f0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1f100 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 sion].sign_activ 1f110 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 e) {...cackey_mu 1f120 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 1f130 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....C 1f140 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1f150 54 46 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e TF("Error. Sign 1f160 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 1f170 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 1f180 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e OPERATION_NOT_IN 1f190 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 1f1a0 09 73 77 69 74 63 68 20 28 63 61 63 6b 65 79 5f .switch (cackey_ 1f1b0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1f1c0 6e 5d 2e 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 n].sign_mechanis 1f1d0 6d 29 20 7b 0a 09 09 63 61 73 65 20 43 4b 4d 5f m) {...case CKM_ 1f1e0 52 53 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 RSA_PKCS:..../* 1f1f0 41 63 63 75 6d 75 6c 61 74 65 20 64 69 72 65 63 Accumulate direc 1f200 74 6c 79 20 2a 2f 0a 09 09 09 69 66 20 28 28 63 tly */....if ((c 1f210 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1f220 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 Session].sign_bu 1f230 66 75 73 65 64 20 2b 20 75 6c 50 61 72 74 4c 65 fused + ulPartLe 1f240 6e 29 20 3e 20 63 61 63 6b 65 79 5f 73 65 73 73 n) > cackey_sess 1f250 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 1f260 69 67 6e 5f 62 75 66 6c 65 6e 29 20 7b 0a 09 09 ign_buflen) {... 1f270 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 1f280 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 1f290 5f 62 75 66 6c 65 6e 20 2a 3d 20 32 3b 0a 0a 09 _buflen *= 2;... 1f2a0 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio 1f2b0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 1f2c0 6e 5f 62 75 66 20 3d 20 72 65 61 6c 6c 6f 63 28 n_buf = realloc( 1f2d0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1f2e0 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 hSession].sign_b 1f2f0 75 66 2c 20 73 69 7a 65 6f 66 28 2a 63 61 63 6b uf, sizeof(*cack 1f300 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1f310 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20 sion].sign_buf) 1f320 2a 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e * cackey_session 1f330 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 1f340 5f 62 75 66 6c 65 6e 29 3b 0a 09 09 09 7d 0a 0a _buflen);....}.. 1f350 09 09 09 6d 65 6d 63 70 79 28 63 61 63 6b 65 79 ...memcpy(cackey 1f360 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1f370 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 20 2b 20 63 on].sign_buf + c 1f380 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1f390 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 Session].sign_bu 1f3a0 66 75 73 65 64 2c 20 70 50 61 72 74 2c 20 75 6c fused, pPart, ul 1f3b0 50 61 72 74 4c 65 6e 29 3b 0a 0a 09 09 09 63 61 PartLen);.....ca 1f3c0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1f3d0 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 ession].sign_buf 1f3e0 75 73 65 64 20 2b 3d 20 75 6c 50 61 72 74 4c 65 used += ulPartLe 1f3f0 6e 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 n;.....break;... 1f400 63 61 73 65 20 43 4b 4d 5f 53 48 41 31 5f 52 53 case CKM_SHA1_RS 1f410 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 63 A_PKCS:..../* Ac 1f420 63 75 6d 75 6c 61 74 65 20 69 6e 74 6f 20 61 20 cumulate into a 1f430 53 48 41 31 20 68 61 73 68 20 2a 2f 0a 09 09 09 SHA1 hash */.... 1f440 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 1f450 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1f460 63 6b 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f ck);.....CACKEY_ 1f470 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 1f480 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 turning CKR_FUNC 1f490 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1f4a0 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 ED (%i)", CKR_FU 1f4b0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1f4c0 52 54 45 44 29 3b 0a 0a 09 09 09 72 65 74 75 72 RTED);.....retur 1f4d0 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 1f4e0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 09 OT_SUPPORTED);.. 1f4f0 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 6d 75 ..break;..}...mu 1f500 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 1f510 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1f520 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1f530 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 1f540 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 1f550 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1f560 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 1f570 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 1f580 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 1f590 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 1f5a0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1f5b0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1f5c0 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", 1f5d0 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 CKR_OK);...retur 1f5e0 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b n(CKR_OK);.}..CK 1f5f0 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 1f600 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 46 69 (CK_RV, C_SignFi 1f610 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f nal)(CK_SESSION_ 1f620 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 1f630 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 CK_BYTE_PTR pSi 1f640 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e gnature, CK_ULON 1f650 47 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 74 75 G_PTR pulSignatu 1f660 72 65 4c 65 6e 29 20 7b 0a 09 73 74 61 74 69 63 reLen) {..static 1f670 20 43 4b 5f 42 59 54 45 20 73 69 67 62 75 66 5b CK_BYTE sigbuf[ 1f680 31 30 32 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 20 1024];..ssize_t 1f690 73 69 67 62 75 66 6c 65 6e 3b 0a 09 43 4b 5f 52 sigbuflen;..CK_R 1f6a0 56 20 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 47 V retval = CKR_G 1f6b0 45 4e 45 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 69 ENERAL_ERROR;..i 1f6c0 6e 74 20 74 65 72 6d 69 6e 61 74 65 5f 73 69 67 nt terminate_sig 1f6d0 6e 20 3d 20 31 3b 0a 09 69 6e 74 20 6d 75 74 65 n = 1;..int mute 1f6e0 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b x_retval;...CACK 1f6f0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1f700 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 1f710 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 1f720 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 1f730 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1f740 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 1f750 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 1f760 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 1f770 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 1f780 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 75 ED);..}...if (pu 1f790 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 20 3d 3d lSignatureLen == 1f7a0 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 NULL) {...CACKE 1f7b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1f7c0 45 72 72 6f 72 2e 20 70 75 6c 53 69 67 6e 61 74 Error. pulSignat 1f7d0 75 72 65 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 ureLen is NULL." 1f7e0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1f7f0 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b _ARGUMENTS_BAD); 1f800 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 ..}...if (hSessi 1f810 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 on == 0 || hSess 1f820 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 ion >= (sizeof(c 1f830 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 ackey_sessions) 1f840 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ 1f850 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b sessions[0]))) { 1f860 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1f870 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1f880 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 Session out of r 1f890 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 ange.");......re 1f8a0 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 1f8b0 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 1f8c0 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 1f8d0 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 1f8e0 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 ex_lock(cackey_b 1f8f0 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 1f900 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 1f910 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1f920 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1f930 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Locking failed 1f940 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1f950 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 1f960 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 1f970 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1f980 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b ssion].active) { 1f990 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 1f9a0 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 1f9b0 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 1f9c0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1f9d0 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 1f9e0 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 not active.");.. 1f9f0 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 1fa00 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 1fa10 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 VALID);..}...if 1fa20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (!cackey_session 1fa30 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 1fa40 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 _active) {...cac 1fa50 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1fa60 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1fa70 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 1fa80 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1fa90 20 20 53 69 67 6e 20 6e 6f 74 20 61 63 74 69 76 Sign not activ 1faa0 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 1fab0 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f n(CKR_OPERATION_ 1fac0 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 1fad0 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 68 20 28 63 ;..}...switch (c 1fae0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1faf0 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 6d 65 Session].sign_me 1fb00 63 68 61 6e 69 73 6d 29 20 7b 0a 09 09 63 61 73 chanism) {...cas 1fb10 65 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 3a 0a e CKM_RSA_PKCS:. 1fb20 09 09 09 2f 2a 20 41 73 6b 20 63 61 72 64 20 74 .../* Ask card t 1fb30 6f 20 73 69 67 6e 20 2a 2f 0a 09 09 09 43 41 43 o sign */....CAC 1fb40 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1fb50 28 22 41 73 6b 69 6e 67 20 74 6f 20 64 65 63 72 ("Asking to decr 1fb60 79 70 74 20 66 72 6f 6d 20 69 64 65 6e 74 69 74 ypt from identit 1fb70 79 20 25 70 20 69 6e 20 73 65 73 73 69 6f 6e 20 y %p in session 1fb80 25 6c 75 22 2c 20 63 61 63 6b 65 79 5f 73 65 73 %lu", cackey_ses 1fb90 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1fba0 73 69 67 6e 5f 69 64 65 6e 74 69 74 79 2c 20 28 sign_identity, ( 1fbb0 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 unsigned long) h 1fbc0 53 65 73 73 69 6f 6e 29 3b 0a 09 09 09 73 69 67 Session);....sig 1fbd0 62 75 66 6c 65 6e 20 3d 20 63 61 63 6b 65 79 5f buflen = cackey_ 1fbe0 73 69 67 6e 64 65 63 72 79 70 74 28 26 63 61 63 signdecrypt(&cac 1fbf0 6b 65 79 5f 73 6c 6f 74 73 5b 63 61 63 6b 65 79 key_slots[cackey 1fc00 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1fc10 6f 6e 5d 2e 73 6c 6f 74 49 44 5d 2c 20 63 61 63 on].slotID], cac 1fc20 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1fc30 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 69 64 65 6e ssion].sign_iden 1fc40 74 69 74 79 2c 20 63 61 63 6b 65 79 5f 73 65 73 tity, cackey_ses 1fc50 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1fc60 73 69 67 6e 5f 62 75 66 2c 20 63 61 63 6b 65 79 sign_buf, cackey 1fc70 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1fc80 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c 65 6e 2c on].sign_buflen, 1fc90 20 73 69 67 62 75 66 2c 20 73 69 7a 65 6f 66 28 sigbuf, sizeof( 1fca0 73 69 67 62 75 66 29 29 3b 0a 0a 09 09 09 69 66 sigbuf));.....if 1fcb0 20 28 73 69 67 62 75 66 6c 65 6e 20 3c 20 30 29 (sigbuflen < 0) 1fcc0 20 7b 0a 09 09 09 09 2f 2a 20 53 69 67 6e 69 6e {...../* Signin 1fcd0 67 20 66 61 69 6c 65 64 2e 20 2a 2f 0a 09 09 09 g failed. */.... 1fce0 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45 .retval = CKR_GE 1fcf0 4e 45 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 09 09 NERAL_ERROR;.... 1fd00 7d 20 65 6c 73 65 20 69 66 20 28 28 28 75 6e 73 } else if (((uns 1fd10 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 69 67 62 igned long) sigb 1fd20 75 66 6c 65 6e 29 20 3e 20 2a 70 75 6c 53 69 67 uflen) > *pulSig 1fd30 6e 61 74 75 72 65 4c 65 6e 20 26 26 20 70 53 69 natureLen && pSi 1fd40 67 6e 61 74 75 72 65 29 20 7b 0a 09 09 09 09 2f gnature) {...../ 1fd50 2a 20 53 69 67 6e 65 64 20 64 61 74 61 20 74 6f * Signed data to 1fd60 6f 20 6c 61 72 67 65 20 2a 2f 0a 09 09 09 09 72 o large */.....r 1fd70 65 74 76 61 6c 20 3d 20 43 4b 52 5f 42 55 46 46 etval = CKR_BUFF 1fd80 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b 0a 0a 09 ER_TOO_SMALL;... 1fd90 09 09 09 74 65 72 6d 69 6e 61 74 65 5f 73 69 67 ...terminate_sig 1fda0 6e 20 3d 20 30 3b 0a 09 09 09 7d 20 65 6c 73 65 n = 0;....} else 1fdb0 20 7b 0a 09 09 09 09 74 65 72 6d 69 6e 61 74 65 {.....terminate 1fdc0 5f 73 69 67 6e 20 3d 20 30 3b 0a 0a 09 09 09 09 _sign = 0;...... 1fdd0 69 66 20 28 70 53 69 67 6e 61 74 75 72 65 29 20 if (pSignature) 1fde0 7b 0a 09 09 09 09 09 6d 65 6d 63 70 79 28 70 53 {......memcpy(pS 1fdf0 69 67 6e 61 74 75 72 65 2c 20 73 69 67 62 75 66 ignature, sigbuf 1fe00 2c 20 73 69 67 62 75 66 6c 65 6e 29 3b 0a 0a 09 , sigbuflen);... 1fe10 09 09 09 09 74 65 72 6d 69 6e 61 74 65 5f 73 69 ....terminate_si 1fe20 67 6e 20 3d 20 31 3b 0a 09 09 09 09 7d 0a 0a 09 gn = 1;.....}... 1fe30 09 09 09 2a 70 75 6c 53 69 67 6e 61 74 75 72 65 ...*pulSignature 1fe40 4c 65 6e 20 3d 20 73 69 67 62 75 66 6c 65 6e 3b Len = sigbuflen; 1fe50 0a 0a 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 ......retval = C 1fe60 4b 52 5f 4f 4b 3b 0a 09 09 09 7d 0a 0a 09 09 09 KR_OK;....}..... 1fe70 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 43 4b break;...case CK 1fe80 4d 5f 53 48 41 31 5f 52 53 41 5f 50 4b 43 53 3a M_SHA1_RSA_PKCS: 1fe90 0a 09 09 09 2f 2a 20 41 63 63 75 6d 75 6c 61 74 ..../* Accumulat 1fea0 65 20 69 6e 74 6f 20 61 20 53 48 41 31 20 68 61 e into a SHA1 ha 1feb0 73 68 20 2a 2f 0a 09 09 09 63 61 63 6b 65 79 5f sh */....cackey_ 1fec0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 1fed0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 1fee0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1fef0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 1ff00 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 1ff10 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 1ff20 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 1ff30 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 1ff40 0a 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ....return(CKR_F 1ff50 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1ff60 4f 52 54 45 44 29 3b 0a 09 09 09 62 72 65 61 6b ORTED);....break 1ff70 3b 0a 09 7d 0a 0a 09 69 66 20 28 74 65 72 6d 69 ;..}...if (termi 1ff80 6e 61 74 65 5f 73 69 67 6e 29 20 7b 0a 09 09 69 nate_sign) {...i 1ff90 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f f (cackey_sessio 1ffa0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 1ffb0 6e 5f 62 75 66 29 20 7b 0a 09 09 09 66 72 65 65 n_buf) {....free 1ffc0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 1ffd0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 1ffe0 62 75 66 29 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 buf);...}....cac 1fff0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 20000 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 ssion].sign_acti 20010 76 65 20 3d 20 30 3b 0a 09 7d 0a 0a 09 6d 75 74 ve = 0;..}...mut 20020 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 20030 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 20040 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 20050 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 20060 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 20070 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 20080 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b ("Error. Unlock 20090 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 200a0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 200b0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 200c0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 200d0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 200e0 20 25 69 22 2c 20 28 69 6e 74 29 20 72 65 74 76 %i", (int) retv 200f0 61 6c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 al);...return(re 20100 74 76 61 6c 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 tval);.}..CK_DEF 20110 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 20120 52 56 2c 20 43 5f 53 69 67 6e 52 65 63 6f 76 65 RV, C_SignRecove 20130 72 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f rInit)(CK_SESSIO 20140 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 20150 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f n, CK_MECHANISM_ 20160 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 PTR pMechanism, 20170 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 20180 20 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 hKey) {..CACKEY 20190 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 201a0 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 201b0 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 201c0 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 201d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 201e0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 201f0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 20200 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 20210 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 20220 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 20230 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 20240 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 20250 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 20260 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 20270 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 20280 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 20290 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 202a0 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 202b0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 202c0 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 52 N(CK_RV, C_SignR 202d0 65 63 6f 76 65 72 29 28 43 4b 5f 53 45 53 53 49 ecover)(CK_SESSI 202e0 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 202f0 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 20300 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 pData, CK_ULONG 20310 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 ulDataLen, CK_BY 20320 54 45 5f 50 54 52 20 70 53 69 67 6e 61 74 75 72 TE_PTR pSignatur 20330 65 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 e, CK_ULONG_PTR 20340 70 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 29 pulSignatureLen) 20350 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 20360 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 20370 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 20380 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 20390 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 203a0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 203b0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 203c0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 203d0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 203e0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 203f0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 20400 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 20410 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 20420 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 20430 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 20440 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 20450 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 20460 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 20470 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 20480 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 20490 56 2c 20 43 5f 56 65 72 69 66 79 49 6e 69 74 29 V, C_VerifyInit) 204a0 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 204b0 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 204c0 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d MECHANISM_PTR pM 204d0 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a echanism, CK_OBJ 204e0 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 ECT_HANDLE hKey) 204f0 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 20500 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 20510 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 20520 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 20530 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 20540 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 20550 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 20560 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 20570 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 20580 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 20590 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 205a0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 205b0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 205c0 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 205d0 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 205e0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 205f0 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 20600 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 20610 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 20620 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 20630 56 2c 20 43 5f 56 65 72 69 66 79 29 28 43 4b 5f V, C_Verify)(CK_ 20640 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 20650 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 20660 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 _PTR pData, CK_U 20670 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c 20 LONG ulDataLen, 20680 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 67 CK_BYTE_PTR pSig 20690 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 nature, CK_ULONG 206a0 20 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 29 ulSignatureLen) 206b0 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 206c0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 206d0 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 206e0 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 206f0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 20700 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 20710 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 20720 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 20730 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 20740 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 20750 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 20760 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 20770 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 20780 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 20790 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 207a0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 207b0 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 207c0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 207d0 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 207e0 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 207f0 56 2c 20 43 5f 56 65 72 69 66 79 55 70 64 61 74 V, C_VerifyUpdat 20800 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 e)(CK_SESSION_HA 20810 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 20820 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 K_BYTE_PTR pPart 20830 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 , CK_ULONG ulPar 20840 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f tLen) {..CACKEY_ 20850 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 20860 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 20870 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 20880 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 20890 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 208a0 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 208b0 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 208c0 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 208d0 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 208e0 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 208f0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 20900 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 rning CKR_FUNCTI 20910 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 20920 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 (%i)", CKR_FUNC 20930 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 20940 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK 20950 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 20960 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b UPPORTED);.}..CK 20970 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 20980 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66 79 (CK_RV, C_Verify 20990 46 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f Final)(CK_SESSIO 209a0 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 209b0 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 209c0 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c Signature, CK_UL 209d0 4f 4e 47 20 75 6c 53 69 67 6e 61 74 75 72 65 4c ONG ulSignatureL 209e0 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 en) {..CACKEY_DE 209f0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 20a00 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 20a10 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 20a20 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 20a30 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 20a40 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 20a50 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 20a60 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 20a70 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 20a80 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 20a90 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 20aa0 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 20ab0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 20ac0 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 20ad0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 20ae0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 20af0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 20b00 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 20b10 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 20b20 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66 79 52 65 K_RV, C_VerifyRe 20b30 63 6f 76 65 72 49 6e 69 74 29 28 43 4b 5f 53 45 coverInit)(CK_SE 20b40 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 20b50 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e ssion, CK_MECHAN 20b60 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 ISM_PTR pMechani 20b70 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 sm, CK_OBJECT_HA 20b80 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 41 NDLE hKey) {..CA 20b90 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 20ba0 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 20bb0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 20bc0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 20bd0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 20be0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 20bf0 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 20c00 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 20c10 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 20c20 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 20c30 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 20c40 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 20c50 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 20c60 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 20c70 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 20c80 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 20c90 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 20ca0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 20cb0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 20cc0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 CTION(CK_RV, C_V 20cd0 65 72 69 66 79 52 65 63 6f 76 65 72 29 28 43 4b erifyRecover)(CK 20ce0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 20cf0 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 hSession, CK_BYT 20d00 45 5f 50 54 52 20 70 53 69 67 6e 61 74 75 72 65 E_PTR pSignature 20d10 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 69 67 , CK_ULONG ulSig 20d20 6e 61 74 75 72 65 4c 65 6e 2c 20 43 4b 5f 42 59 natureLen, CK_BY 20d30 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b TE_PTR pData, CK 20d40 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 44 61 _ULONG_PTR pulDa 20d50 74 61 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 taLen) {..CACKEY 20d60 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 20d70 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 20d80 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 20d90 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 20da0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 20db0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 20dc0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 20dd0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 20de0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 20df0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 20e00 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 20e10 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 20e20 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 20e30 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 20e40 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 20e50 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 20e60 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 20e70 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 20e80 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 20e90 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 N(CK_RV, C_Diges 20ea0 74 45 6e 63 72 79 70 74 55 70 64 61 74 65 29 28 tEncryptUpdate)( 20eb0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 20ec0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 20ed0 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 YTE_PTR pPart, C 20ee0 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 K_ULONG ulPartLe 20ef0 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 20f00 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 43 EncryptedPart, C 20f10 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 45 K_ULONG_PTR pulE 20f20 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 29 ncryptedPartLen) 20f30 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 20f40 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 20f50 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 20f60 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 20f70 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 20f80 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 20f90 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 20fa0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 20fb0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 20fc0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 20fd0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 20fe0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 20ff0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 21000 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 21010 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 21020 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 21030 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 21040 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 21050 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 21060 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 21070 56 2c 20 43 5f 44 65 63 72 79 70 74 44 69 67 65 V, C_DecryptDige 21080 73 74 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 stUpdate)(CK_SES 21090 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 210a0 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 sion, CK_BYTE_PT 210b0 52 20 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 R pEncryptedPart 210c0 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 45 6e 63 , CK_ULONG ulEnc 210d0 72 79 70 74 65 64 50 61 72 74 4c 65 6e 2c 20 43 ryptedPartLen, C 210e0 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 K_BYTE_PTR pPart 210f0 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 , CK_ULONG_PTR p 21100 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 ulPartLen) {..CA 21110 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 21120 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 21130 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 21140 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 21150 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 21160 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 21170 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 21180 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 21190 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 211a0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 211b0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 211c0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 211d0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 211e0 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 211f0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 21200 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 21210 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 21220 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 21230 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 21240 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 CTION(CK_RV, C_S 21250 69 67 6e 45 6e 63 72 79 70 74 55 70 64 61 74 65 ignEncryptUpdate 21260 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 21270 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 21280 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c _BYTE_PTR pPart, 21290 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 CK_ULONG ulPart 212a0 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 Len, CK_BYTE_PTR 212b0 20 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c pEncryptedPart, 212c0 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 CK_ULONG_PTR pu 212d0 6c 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 lEncryptedPartLe 212e0 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 n) {..CACKEY_DEB 212f0 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 21300 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 21310 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 21320 20 7b 0a 09 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 45 72 72 6f 72 2e G_PRINTF("Error. 21340 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 21350 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 21360 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 21370 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 21380 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 21390 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 213a0 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 213b0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 213c0 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 213d0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 213e0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 213f0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 21400 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 21410 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 21420 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 74 56 65 _RV, C_DecryptVe 21430 72 69 66 79 55 70 64 61 74 65 29 28 43 4b 5f 53 rifyUpdate)(CK_S 21440 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 21450 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f ession, CK_BYTE_ 21460 50 54 52 20 70 45 6e 63 72 79 70 74 65 64 50 61 PTR pEncryptedPa 21470 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 45 rt, CK_ULONG ulE 21480 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 2c ncryptedPartLen, 21490 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 CK_BYTE_PTR pPa 214a0 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 rt, CK_ULONG_PTR 214b0 20 70 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a 09 pulPartLen) {.. 214c0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 214d0 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 214e0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 214f0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...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 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 21520 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 21530 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 21540 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 21550 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 21560 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 21570 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 21580 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 21590 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C 215a0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 215b0 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re 215c0 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO 215d0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 215e0 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 215f0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 21600 5f 47 65 6e 65 72 61 74 65 4b 65 79 29 28 43 4b _GenerateKey)(CK 21610 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 21620 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 hSession, CK_MEC 21630 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 HANISM_PTR pMech 21640 61 6e 69 73 6d 2c 20 43 4b 5f 41 54 54 52 49 42 anism, CK_ATTRIB 21650 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 UTE_PTR pTemplat 21660 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f e, CK_ULONG ulCo 21670 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 unt, CK_OBJECT_H 21680 41 4e 44 4c 45 5f 50 54 52 20 70 68 4b 65 79 29 ANDLE_PTR phKey) 21690 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 216a0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 216b0 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 216c0 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 216d0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 216e0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 216f0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 21700 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 21710 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 21720 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 21730 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 21740 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 21750 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 21760 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 21770 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 21780 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 21790 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 217a0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 217b0 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 217c0 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 217d0 56 2c 20 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 V, C_GenerateKey 217e0 50 61 69 72 29 28 43 4b 5f 53 45 53 53 49 4f 4e Pair)(CK_SESSION 217f0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 21800 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 , CK_MECHANISM_P 21810 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 TR pMechanism, C 21820 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 K_ATTRIBUTE_PTR 21830 70 50 75 62 6c 69 63 4b 65 79 54 65 6d 70 6c 61 pPublicKeyTempla 21840 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 te, CK_ULONG ulP 21850 75 62 6c 69 63 4b 65 79 41 74 74 72 69 62 75 74 ublicKeyAttribut 21860 65 43 6f 75 6e 74 2c 20 43 4b 5f 41 54 54 52 49 eCount, CK_ATTRI 21870 42 55 54 45 5f 50 54 52 20 70 50 72 69 76 61 74 BUTE_PTR pPrivat 21880 65 4b 65 79 54 65 6d 70 6c 61 74 65 2c 20 43 4b eKeyTemplate, CK 21890 5f 55 4c 4f 4e 47 20 75 6c 50 72 69 76 61 74 65 _ULONG ulPrivate 218a0 4b 65 79 41 74 74 72 69 62 75 74 65 43 6f 75 6e KeyAttributeCoun 218b0 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e t, CK_OBJECT_HAN 218c0 44 4c 45 5f 50 54 52 20 70 68 50 75 62 6c 69 63 DLE_PTR phPublic 218d0 4b 65 79 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 Key, CK_OBJECT_H 218e0 41 4e 44 4c 45 5f 50 54 52 20 70 68 50 72 69 76 ANDLE_PTR phPriv 218f0 61 74 65 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 ateKey) {..CACKE 21900 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 21910 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 21920 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 21930 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 21940 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 21950 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 21960 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 21970 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 21980 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 21990 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ 219a0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 219b0 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 turning CKR_FUNC 219c0 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 219d0 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 ED (%i)", CKR_FU 219e0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 219f0 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 RTED);...return( 21a00 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 21a10 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a _SUPPORTED);.}.. 21a20 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 21a30 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 57 72 61 70 ON(CK_RV, C_Wrap 21a40 4b 65 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f Key)(CK_SESSION_ 21a50 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 21a60 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 CK_MECHANISM_PT 21a70 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b R pMechanism, CK 21a80 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 _OBJECT_HANDLE h 21a90 57 72 61 70 70 69 6e 67 4b 65 79 2c 20 43 4b 5f WrappingKey, CK_ 21aa0 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b OBJECT_HANDLE hK 21ab0 65 79 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 ey, CK_BYTE_PTR 21ac0 70 57 72 61 70 70 65 64 4b 65 79 2c 20 43 4b 5f pWrappedKey, CK_ 21ad0 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 57 72 61 ULONG_PTR pulWra 21ae0 70 70 65 64 4b 65 79 4c 65 6e 29 20 7b 0a 09 43 ppedKeyLen) {..C 21af0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 21b00 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 21b10 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 21b20 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 21b30 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 21b40 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 21b50 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 21b60 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 21b70 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 21b80 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 21b90 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 21ba0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 21bb0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 21bc0 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 21bd0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 21be0 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 21bf0 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 21c00 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 21c10 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 21c20 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 21c30 55 6e 77 72 61 70 4b 65 79 29 28 43 4b 5f 53 45 UnwrapKey)(CK_SE 21c40 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 21c50 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e ssion, CK_MECHAN 21c60 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 ISM_PTR pMechani 21c70 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 sm, CK_OBJECT_HA 21c80 4e 44 4c 45 20 68 55 6e 77 72 61 70 70 69 6e 67 NDLE hUnwrapping 21c90 4b 65 79 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 Key, CK_BYTE_PTR 21ca0 20 70 57 72 61 70 70 65 64 4b 65 79 2c 20 43 4b pWrappedKey, CK 21cb0 5f 55 4c 4f 4e 47 20 75 6c 57 72 61 70 70 65 64 _ULONG ulWrapped 21cc0 4b 65 79 4c 65 6e 2c 20 43 4b 5f 41 54 54 52 49 KeyLen, CK_ATTRI 21cd0 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 BUTE_PTR pTempla 21ce0 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 41 te, CK_ULONG ulA 21cf0 74 74 72 69 62 75 74 65 43 6f 75 6e 74 2c 20 43 ttributeCount, C 21d00 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f K_OBJECT_HANDLE_ 21d10 50 54 52 20 70 68 4b 65 79 29 20 7b 0a 09 43 41 PTR phKey) {..CA 21d20 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 21d30 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 21d40 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 21d50 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 21d60 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 21d70 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 21d80 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 21d90 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 21da0 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 21db0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 21dc0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 21dd0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 21de0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 21df0 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 21e00 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 21e10 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 21e20 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 21e30 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 21e40 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 21e50 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 CTION(CK_RV, C_D 21e60 65 72 69 76 65 4b 65 79 29 28 43 4b 5f 53 45 53 eriveKey)(CK_SES 21e70 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 21e80 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 sion, CK_MECHANI 21e90 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 SM_PTR pMechanis 21ea0 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e m, CK_OBJECT_HAN 21eb0 44 4c 45 20 68 42 61 73 65 4b 65 79 2c 20 43 4b DLE hBaseKey, CK 21ec0 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 _ATTRIBUTE_PTR p 21ed0 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f Template, CK_ULO 21ee0 4e 47 20 75 6c 41 74 74 72 69 62 75 74 65 43 6f NG ulAttributeCo 21ef0 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 unt, CK_OBJECT_H 21f00 41 4e 44 4c 45 5f 50 54 52 20 70 68 4b 65 79 29 ANDLE_PTR phKey) 21f10 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 21f20 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 21f30 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 21f40 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 21f50 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 21f60 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 21f70 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 21f80 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 21f90 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 21fa0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 21fb0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 21fc0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 21fd0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 21fe0 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 21ff0 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 22000 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 22010 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 22020 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 22030 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 22040 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 22050 56 2c 20 43 5f 53 65 65 64 52 61 6e 64 6f 6d 29 V, C_SeedRandom) 22060 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 22070 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 22080 42 59 54 45 5f 50 54 52 20 70 53 65 65 64 2c 20 BYTE_PTR pSeed, 22090 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 65 65 64 4c CK_ULONG ulSeedL 220a0 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 en) {..CACKEY_DE 220b0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 220c0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 220d0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 220e0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 220f0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 22100 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 22110 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 22120 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 22130 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 22140 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 22150 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 22160 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 22170 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 22180 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 22190 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 221a0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 221b0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 221c0 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 221d0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 221e0 4b 5f 52 56 2c 20 43 5f 47 65 6e 65 72 61 74 65 K_RV, C_Generate 221f0 52 61 6e 64 6f 6d 29 28 43 4b 5f 53 45 53 53 49 Random)(CK_SESSI 22200 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 22210 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 22220 70 52 61 6e 64 6f 6d 44 61 74 61 2c 20 43 4b 5f pRandomData, CK_ 22230 55 4c 4f 4e 47 20 75 6c 52 61 6e 64 6f 6d 4c 65 ULONG ulRandomLe 22240 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 n) {..CACKEY_DEB 22250 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 22260 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 22270 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 22280 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 22290 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 222a0 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 222b0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 222c0 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 222d0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 222e0 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 222f0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 22300 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 22310 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 22320 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 22330 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 22340 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 22350 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 22360 4f 52 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 44 65 ORTED);.}../* De 22370 70 72 65 63 61 74 65 64 20 46 75 6e 63 74 69 6f precated Functio 22380 6e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 n */.CK_DEFINE_F 22390 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 223a0 5f 47 65 74 46 75 6e 63 74 69 6f 6e 53 74 61 74 _GetFunctionStat 223b0 75 73 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 us)(CK_SESSION_H 223c0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 20 ANDLE hSession) 223d0 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 223e0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 223f0 29 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 );...CACKEY_DEBU 22400 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 22410 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 22420 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 20 28 25 _NOT_PARALLEL (% 22430 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 22440 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 3b N_NOT_PARALLEL); 22450 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 22460 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c NCTION_NOT_PARAL 22470 4c 45 4c 29 3b 0a 0a 09 68 53 65 73 73 69 6f 6e LEL);...hSession 22480 20 3d 20 68 53 65 73 73 69 6f 6e 3b 20 2f 2a 20 = hSession; /* 22490 53 75 70 72 65 73 73 20 75 6e 75 73 65 64 20 76 Supress unused v 224a0 61 72 69 61 62 6c 65 20 77 61 72 6e 69 6e 67 20 ariable warning 224b0 2a 2f 0a 7d 0a 0a 2f 2a 20 44 65 70 72 65 63 61 */.}../* Depreca 224c0 74 65 64 20 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a ted Function */. 224d0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 224e0 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 61 6e 63 ON(CK_RV, C_Canc 224f0 65 6c 46 75 6e 63 74 69 6f 6e 29 28 43 4b 5f 53 elFunction)(CK_S 22500 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 22510 65 73 73 69 6f 6e 29 20 7b 0a 09 43 41 43 4b 45 ession) {..CACKE 22520 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 22530 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 43 41 43 Called.");...CAC 22540 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 22550 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 22560 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 FUNCTION_NOT_PAR 22570 41 4c 4c 45 4c 20 28 25 69 29 22 2c 20 43 4b 52 ALLEL (%i)", CKR 22580 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 _FUNCTION_NOT_PA 22590 52 41 4c 4c 45 4c 29 3b 0a 0a 09 72 65 74 75 72 RALLEL);...retur 225a0 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 225b0 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a 09 OT_PARALLEL);... 225c0 68 53 65 73 73 69 6f 6e 20 3d 20 68 53 65 73 73 hSession = hSess 225d0 69 6f 6e 3b 20 2f 2a 20 53 75 70 72 65 73 73 20 ion; /* Supress 225e0 75 6e 75 73 65 64 20 76 61 72 69 61 62 6c 65 20 unused variable 225f0 77 61 72 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 43 4b warning */.}..CK 22600 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 22610 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 46 75 6e (CK_RV, C_GetFun 22620 63 74 69 6f 6e 4c 69 73 74 29 28 43 4b 5f 46 55 ctionList)(CK_FU 22630 4e 43 54 49 4f 4e 5f 4c 49 53 54 5f 50 54 52 5f NCTION_LIST_PTR_ 22640 50 54 52 20 70 70 46 75 6e 63 74 69 6f 6e 4c 69 PTR ppFunctionLi 22650 73 74 29 20 7b 0a 09 43 4b 5f 46 55 4e 43 54 49 st) {..CK_FUNCTI 22660 4f 4e 5f 4c 49 53 54 5f 50 54 52 20 70 46 75 6e ON_LIST_PTR pFun 22670 63 74 69 6f 6e 4c 69 73 74 3b 0a 0a 09 43 41 43 ctionList;...CAC 22680 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 22690 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 226a0 66 20 28 70 70 46 75 6e 63 74 69 6f 6e 4c 69 73 f (ppFunctionLis 226b0 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 t == NULL) {...C 226c0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 226d0 54 46 28 22 45 72 72 6f 72 2e 20 70 70 46 75 6e TF("Error. ppFun 226e0 63 74 69 6f 6e 4c 69 73 74 20 69 73 20 4e 55 4c ctionList is NUL 226f0 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 L.");....return( 22700 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA 22710 44 29 3b 0a 09 7d 0a 0a 09 70 46 75 6e 63 74 69 D);..}...pFuncti 22720 6f 6e 4c 69 73 74 20 3d 20 6d 61 6c 6c 6f 63 28 onList = malloc( 22730 73 69 7a 65 6f 66 28 2a 70 46 75 6e 63 74 69 6f sizeof(*pFunctio 22740 6e 4c 69 73 74 29 29 3b 0a 0a 09 70 46 75 6e 63 nList));...pFunc 22750 74 69 6f 6e 4c 69 73 74 2d 3e 76 65 72 73 69 6f tionList->versio 22760 6e 2e 6d 61 6a 6f 72 20 3d 20 28 28 43 41 43 4b n.major = ((CACK 22770 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 53 EY_CRYPTOKI_VERS 22780 49 4f 4e 5f 43 4f 44 45 29 20 3e 3e 20 31 36 29 ION_CODE) >> 16) 22790 20 26 20 30 78 66 66 3b 0a 09 70 46 75 6e 63 74 & 0xff;..pFunct 227a0 69 6f 6e 4c 69 73 74 2d 3e 76 65 72 73 69 6f 6e ionList->version 227b0 2e 6d 69 6e 6f 72 20 3d 20 28 28 43 41 43 4b 45 .minor = ((CACKE 227c0 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 53 49 Y_CRYPTOKI_VERSI 227d0 4f 4e 5f 43 4f 44 45 29 20 3e 3e 20 38 29 20 26 ON_CODE) >> 8) & 227e0 20 30 78 66 66 3b 0a 0a 09 70 46 75 6e 63 74 69 0xff;...pFuncti 227f0 6f 6e 4c 69 73 74 2d 3e 43 5f 49 6e 69 74 69 61 onList->C_Initia 22800 6c 69 7a 65 20 3d 20 43 5f 49 6e 69 74 69 61 6c lize = C_Initial 22810 69 7a 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ize;..pFunctionL 22820 69 73 74 2d 3e 43 5f 46 69 6e 61 6c 69 7a 65 20 ist->C_Finalize 22830 3d 20 43 5f 46 69 6e 61 6c 69 7a 65 3b 0a 09 70 = C_Finalize;..p 22840 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 22850 47 65 74 49 6e 66 6f 20 3d 20 43 5f 47 65 74 49 GetInfo = C_GetI 22860 6e 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c nfo;..pFunctionL 22870 69 73 74 2d 3e 43 5f 47 65 74 53 6c 6f 74 4c 69 ist->C_GetSlotLi 22880 73 74 20 3d 20 43 5f 47 65 74 53 6c 6f 74 4c 69 st = C_GetSlotLi 22890 73 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 st;..pFunctionLi 228a0 73 74 2d 3e 43 5f 47 65 74 53 6c 6f 74 49 6e 66 st->C_GetSlotInf 228b0 6f 20 3d 20 43 5f 47 65 74 53 6c 6f 74 49 6e 66 o = C_GetSlotInf 228c0 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 o;..pFunctionLis 228d0 74 2d 3e 43 5f 47 65 74 54 6f 6b 65 6e 49 6e 66 t->C_GetTokenInf 228e0 6f 20 3d 20 43 5f 47 65 74 54 6f 6b 65 6e 49 6e o = C_GetTokenIn 228f0 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 fo;..pFunctionLi 22900 73 74 2d 3e 43 5f 57 61 69 74 46 6f 72 53 6c 6f st->C_WaitForSlo 22910 74 45 76 65 6e 74 20 3d 20 43 5f 57 61 69 74 46 tEvent = C_WaitF 22920 6f 72 53 6c 6f 74 45 76 65 6e 74 3b 0a 09 70 46 orSlotEvent;..pF 22930 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 unctionList->C_G 22940 65 74 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 20 etMechanismList 22950 3d 20 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 6d = C_GetMechanism 22960 4c 69 73 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e List;..pFunction 22970 4c 69 73 74 2d 3e 43 5f 47 65 74 4d 65 63 68 61 List->C_GetMecha 22980 6e 69 73 6d 49 6e 66 6f 20 3d 20 43 5f 47 65 74 nismInfo = C_Get 22990 4d 65 63 68 61 6e 69 73 6d 49 6e 66 6f 3b 0a 09 MechanismInfo;.. 229a0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 229b0 5f 49 6e 69 74 54 6f 6b 65 6e 20 3d 20 43 5f 49 _InitToken = C_I 229c0 6e 69 74 54 6f 6b 65 6e 3b 0a 09 70 46 75 6e 63 nitToken;..pFunc 229d0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 49 6e 69 74 tionList->C_Init 229e0 50 49 4e 20 3d 20 43 5f 49 6e 69 74 50 49 4e 3b PIN = C_InitPIN; 229f0 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 22a00 3e 43 5f 53 65 74 50 49 4e 20 3d 20 43 5f 53 65 >C_SetPIN = C_Se 22a10 74 50 49 4e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e tPIN;..pFunction 22a20 4c 69 73 74 2d 3e 43 5f 4f 70 65 6e 53 65 73 73 List->C_OpenSess 22a30 69 6f 6e 20 3d 20 43 5f 4f 70 65 6e 53 65 73 73 ion = C_OpenSess 22a40 69 6f 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ion;..pFunctionL 22a50 69 73 74 2d 3e 43 5f 43 6c 6f 73 65 53 65 73 73 ist->C_CloseSess 22a60 69 6f 6e 20 3d 20 43 5f 43 6c 6f 73 65 53 65 73 ion = C_CloseSes 22a70 73 69 6f 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e sion;..pFunction 22a80 4c 69 73 74 2d 3e 43 5f 43 6c 6f 73 65 41 6c 6c List->C_CloseAll 22a90 53 65 73 73 69 6f 6e 73 20 3d 20 43 5f 43 6c 6f Sessions = C_Clo 22aa0 73 65 41 6c 6c 53 65 73 73 69 6f 6e 73 3b 0a 09 seAllSessions;.. 22ab0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 22ac0 5f 47 65 74 53 65 73 73 69 6f 6e 49 6e 66 6f 20 _GetSessionInfo 22ad0 3d 20 43 5f 47 65 74 53 65 73 73 69 6f 6e 49 6e = C_GetSessionIn 22ae0 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 fo;..pFunctionLi 22af0 73 74 2d 3e 43 5f 47 65 74 4f 70 65 72 61 74 69 st->C_GetOperati 22b00 6f 6e 53 74 61 74 65 20 3d 20 43 5f 47 65 74 4f onState = C_GetO 22b10 70 65 72 61 74 69 6f 6e 53 74 61 74 65 3b 0a 09 perationState;.. 22b20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 22b30 5f 53 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 _SetOperationSta 22b40 74 65 20 3d 20 43 5f 53 65 74 4f 70 65 72 61 74 te = C_SetOperat 22b50 69 6f 6e 53 74 61 74 65 3b 0a 09 70 46 75 6e 63 ionState;..pFunc 22b60 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 4c 6f 67 69 tionList->C_Logi 22b70 6e 20 3d 20 43 5f 4c 6f 67 69 6e 3b 0a 09 70 46 n = C_Login;..pF 22b80 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 4c unctionList->C_L 22b90 6f 67 6f 75 74 20 3d 20 43 5f 4c 6f 67 6f 75 74 ogout = C_Logout 22ba0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 22bb0 2d 3e 43 5f 43 72 65 61 74 65 4f 62 6a 65 63 74 ->C_CreateObject 22bc0 20 3d 20 43 5f 43 72 65 61 74 65 4f 62 6a 65 63 = C_CreateObjec 22bd0 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t;..pFunctionLis 22be0 74 2d 3e 43 5f 43 6f 70 79 4f 62 6a 65 63 74 20 t->C_CopyObject 22bf0 3d 20 43 5f 43 6f 70 79 4f 62 6a 65 63 74 3b 0a = C_CopyObject;. 22c00 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 22c10 43 5f 44 65 73 74 72 6f 79 4f 62 6a 65 63 74 20 C_DestroyObject 22c20 3d 20 43 5f 44 65 73 74 72 6f 79 4f 62 6a 65 63 = C_DestroyObjec 22c30 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t;..pFunctionLis 22c40 74 2d 3e 43 5f 47 65 74 4f 62 6a 65 63 74 53 69 t->C_GetObjectSi 22c50 7a 65 20 3d 20 43 5f 47 65 74 4f 62 6a 65 63 74 ze = C_GetObject 22c60 53 69 7a 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e Size;..pFunction 22c70 4c 69 73 74 2d 3e 43 5f 47 65 74 41 74 74 72 69 List->C_GetAttri 22c80 62 75 74 65 56 61 6c 75 65 20 3d 20 43 5f 47 65 buteValue = C_Ge 22c90 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 65 3b tAttributeValue; 22ca0 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 22cb0 3e 43 5f 53 65 74 41 74 74 72 69 62 75 74 65 56 >C_SetAttributeV 22cc0 61 6c 75 65 20 3d 20 43 5f 53 65 74 41 74 74 72 alue = C_SetAttr 22cd0 69 62 75 74 65 56 61 6c 75 65 3b 0a 09 70 46 75 ibuteValue;..pFu 22ce0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 nctionList->C_Fi 22cf0 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 20 3d 20 ndObjectsInit = 22d00 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 C_FindObjectsIni 22d10 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t;..pFunctionLis 22d20 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 t->C_FindObjects 22d30 20 3d 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 = C_FindObjects 22d40 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 22d50 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 ->C_FindObjectsF 22d60 69 6e 61 6c 20 3d 20 43 5f 46 69 6e 64 4f 62 6a inal = C_FindObj 22d70 65 63 74 73 46 69 6e 61 6c 3b 0a 09 70 46 75 6e ectsFinal;..pFun 22d80 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 ctionList->C_Enc 22d90 72 79 70 74 49 6e 69 74 20 3d 20 43 5f 45 6e 63 ryptInit = C_Enc 22da0 72 79 70 74 49 6e 69 74 3b 0a 09 70 46 75 6e 63 ryptInit;..pFunc 22db0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 72 tionList->C_Encr 22dc0 79 70 74 20 3d 20 43 5f 45 6e 63 72 79 70 74 3b ypt = C_Encrypt; 22dd0 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 22de0 3e 43 5f 45 6e 63 72 79 70 74 55 70 64 61 74 65 >C_EncryptUpdate 22df0 20 3d 20 43 5f 45 6e 63 72 79 70 74 55 70 64 61 = C_EncryptUpda 22e00 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 te;..pFunctionLi 22e10 73 74 2d 3e 43 5f 45 6e 63 72 79 70 74 46 69 6e st->C_EncryptFin 22e20 61 6c 20 3d 20 43 5f 45 6e 63 72 79 70 74 46 69 al = C_EncryptFi 22e30 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c nal;..pFunctionL 22e40 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 49 6e ist->C_DecryptIn 22e50 69 74 20 3d 20 43 5f 44 65 63 72 79 70 74 49 6e it = C_DecryptIn 22e60 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 it;..pFunctionLi 22e70 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 20 3d 20 st->C_Decrypt = 22e80 43 5f 44 65 63 72 79 70 74 3b 0a 09 70 46 75 6e C_Decrypt;..pFun 22e90 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 ctionList->C_Dec 22ea0 72 79 70 74 55 70 64 61 74 65 20 3d 20 43 5f 44 ryptUpdate = C_D 22eb0 65 63 72 79 70 74 55 70 64 61 74 65 3b 0a 09 70 ecryptUpdate;..p 22ec0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 22ed0 44 65 63 72 79 70 74 46 69 6e 61 6c 20 3d 20 43 DecryptFinal = C 22ee0 5f 44 65 63 72 79 70 74 46 69 6e 61 6c 3b 0a 09 _DecryptFinal;.. 22ef0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 22f00 5f 44 69 67 65 73 74 49 6e 69 74 20 3d 20 43 5f _DigestInit = C_ 22f10 44 69 67 65 73 74 49 6e 69 74 3b 0a 09 70 46 75 DigestInit;..pFu 22f20 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 nctionList->C_Di 22f30 67 65 73 74 20 3d 20 43 5f 44 69 67 65 73 74 3b gest = C_Digest; 22f40 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 22f50 3e 43 5f 44 69 67 65 73 74 55 70 64 61 74 65 20 >C_DigestUpdate 22f60 3d 20 43 5f 44 69 67 65 73 74 55 70 64 61 74 65 = C_DigestUpdate 22f70 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 22f80 2d 3e 43 5f 44 69 67 65 73 74 4b 65 79 20 3d 20 ->C_DigestKey = 22f90 43 5f 44 69 67 65 73 74 4b 65 79 3b 0a 09 70 46 C_DigestKey;..pF 22fa0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 unctionList->C_D 22fb0 69 67 65 73 74 46 69 6e 61 6c 20 3d 20 43 5f 44 igestFinal = C_D 22fc0 69 67 65 73 74 46 69 6e 61 6c 3b 0a 09 70 46 75 igestFinal;..pFu 22fd0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 nctionList->C_Si 22fe0 67 6e 49 6e 69 74 20 3d 20 43 5f 53 69 67 6e 49 gnInit = C_SignI 22ff0 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c nit;..pFunctionL 23000 69 73 74 2d 3e 43 5f 53 69 67 6e 20 3d 20 43 5f ist->C_Sign = C_ 23010 53 69 67 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e Sign;..pFunction 23020 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 55 70 64 61 List->C_SignUpda 23030 74 65 20 3d 20 43 5f 53 69 67 6e 55 70 64 61 74 te = C_SignUpdat 23040 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 e;..pFunctionLis 23050 74 2d 3e 43 5f 53 69 67 6e 46 69 6e 61 6c 20 3d t->C_SignFinal = 23060 20 43 5f 53 69 67 6e 46 69 6e 61 6c 3b 0a 09 70 C_SignFinal;..p 23070 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 23080 53 69 67 6e 52 65 63 6f 76 65 72 49 6e 69 74 20 SignRecoverInit 23090 3d 20 43 5f 53 69 67 6e 52 65 63 6f 76 65 72 49 = C_SignRecoverI 230a0 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c nit;..pFunctionL 230b0 69 73 74 2d 3e 43 5f 53 69 67 6e 52 65 63 6f 76 ist->C_SignRecov 230c0 65 72 20 3d 20 43 5f 53 69 67 6e 52 65 63 6f 76 er = C_SignRecov 230d0 65 72 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 er;..pFunctionLi 230e0 73 74 2d 3e 43 5f 56 65 72 69 66 79 49 6e 69 74 st->C_VerifyInit 230f0 20 3d 20 43 5f 56 65 72 69 66 79 49 6e 69 74 3b = C_VerifyInit; 23100 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 23110 3e 43 5f 56 65 72 69 66 79 20 3d 20 43 5f 56 65 >C_Verify = C_Ve 23120 72 69 66 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e rify;..pFunction 23130 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 55 70 List->C_VerifyUp 23140 64 61 74 65 20 3d 20 43 5f 56 65 72 69 66 79 55 date = C_VerifyU 23150 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f pdate;..pFunctio 23160 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 46 nList->C_VerifyF 23170 69 6e 61 6c 20 3d 20 43 5f 56 65 72 69 66 79 46 inal = C_VerifyF 23180 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e inal;..pFunction 23190 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 52 65 List->C_VerifyRe 231a0 63 6f 76 65 72 49 6e 69 74 20 3d 20 43 5f 56 65 coverInit = C_Ve 231b0 72 69 66 79 52 65 63 6f 76 65 72 49 6e 69 74 3b rifyRecoverInit; 231c0 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 231d0 3e 43 5f 56 65 72 69 66 79 52 65 63 6f 76 65 72 >C_VerifyRecover 231e0 20 3d 20 43 5f 56 65 72 69 66 79 52 65 63 6f 76 = C_VerifyRecov 231f0 65 72 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 er;..pFunctionLi 23200 73 74 2d 3e 43 5f 44 69 67 65 73 74 45 6e 63 72 st->C_DigestEncr 23210 79 70 74 55 70 64 61 74 65 20 3d 20 43 5f 44 69 yptUpdate = C_Di 23220 67 65 73 74 45 6e 63 72 79 70 74 55 70 64 61 74 gestEncryptUpdat 23230 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 e;..pFunctionLis 23240 74 2d 3e 43 5f 44 65 63 72 79 70 74 44 69 67 65 t->C_DecryptDige 23250 73 74 55 70 64 61 74 65 20 3d 20 43 5f 44 65 63 stUpdate = C_Dec 23260 72 79 70 74 44 69 67 65 73 74 55 70 64 61 74 65 ryptDigestUpdate 23270 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 23280 2d 3e 43 5f 53 69 67 6e 45 6e 63 72 79 70 74 55 ->C_SignEncryptU 23290 70 64 61 74 65 20 3d 20 43 5f 53 69 67 6e 45 6e pdate = C_SignEn 232a0 63 72 79 70 74 55 70 64 61 74 65 3b 0a 09 70 46 cryptUpdate;..pF 232b0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 unctionList->C_D 232c0 65 63 72 79 70 74 56 65 72 69 66 79 55 70 64 61 ecryptVerifyUpda 232d0 74 65 20 3d 20 43 5f 44 65 63 72 79 70 74 56 65 te = C_DecryptVe 232e0 72 69 66 79 55 70 64 61 74 65 3b 0a 09 70 46 75 rifyUpdate;..pFu 232f0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge 23300 6e 65 72 61 74 65 4b 65 79 20 3d 20 43 5f 47 65 nerateKey = C_Ge 23310 6e 65 72 61 74 65 4b 65 79 3b 0a 09 70 46 75 6e nerateKey;..pFun 23320 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 6e ctionList->C_Gen 23330 65 72 61 74 65 4b 65 79 50 61 69 72 20 3d 20 43 erateKeyPair = C 23340 5f 47 65 6e 65 72 61 74 65 4b 65 79 50 61 69 72 _GenerateKeyPair 23350 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 23360 2d 3e 43 5f 57 72 61 70 4b 65 79 20 3d 20 43 5f ->C_WrapKey = C_ 23370 57 72 61 70 4b 65 79 3b 0a 09 70 46 75 6e 63 74 WrapKey;..pFunct 23380 69 6f 6e 4c 69 73 74 2d 3e 43 5f 55 6e 77 72 61 ionList->C_Unwra 23390 70 4b 65 79 20 3d 20 43 5f 55 6e 77 72 61 70 4b pKey = C_UnwrapK 233a0 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 ey;..pFunctionLi 233b0 73 74 2d 3e 43 5f 44 65 72 69 76 65 4b 65 79 20 st->C_DeriveKey 233c0 3d 20 43 5f 44 65 72 69 76 65 4b 65 79 3b 0a 09 = C_DeriveKey;.. 233d0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 233e0 5f 53 65 65 64 52 61 6e 64 6f 6d 20 3d 20 43 5f _SeedRandom = C_ 233f0 53 65 65 64 52 61 6e 64 6f 6d 3b 0a 09 70 46 75 SeedRandom;..pFu 23400 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge 23410 6e 65 72 61 74 65 52 61 6e 64 6f 6d 20 3d 20 43 nerateRandom = C 23420 5f 47 65 6e 65 72 61 74 65 52 61 6e 64 6f 6d 3b _GenerateRandom; 23430 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 23440 3e 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 53 74 >C_GetFunctionSt 23450 61 74 75 73 20 3d 20 43 5f 47 65 74 46 75 6e 63 atus = C_GetFunc 23460 74 69 6f 6e 53 74 61 74 75 73 3b 0a 09 70 46 75 tionStatus;..pFu 23470 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 61 nctionList->C_Ca 23480 6e 63 65 6c 46 75 6e 63 74 69 6f 6e 20 3d 20 43 ncelFunction = C 23490 5f 43 61 6e 63 65 6c 46 75 6e 63 74 69 6f 6e 3b _CancelFunction; 234a0 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 234b0 3e 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 4c 69 >C_GetFunctionLi 234c0 73 74 20 3d 20 43 5f 47 65 74 46 75 6e 63 74 69 st = C_GetFuncti 234d0 6f 6e 4c 69 73 74 3b 0a 0a 09 2a 70 70 46 75 6e onList;...*ppFun 234e0 63 74 69 6f 6e 4c 69 73 74 20 3d 20 70 46 75 6e ctionList = pFun 234f0 63 74 69 6f 6e 4c 69 73 74 3b 0a 0a 09 43 41 43 ctionList;...CAC 23500 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 23510 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 23520 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b OK (%i)", CKR_OK 23530 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 23540 4f 4b 29 3b 0a 7d 0a 0a OK);.}..