Artifact cd6ed6e22a733ca2e4c20d1501168d18358bb238:
- File
cackey.c
— part of check-in
[0c536f15c1]
at
2010-05-12 23:58:50
on branch trunk
— Moved certificate examination to occur during search initialization
Added support for logging in via PC/SC in C_Login() (user: rkeene, size: 122757) [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 0a read.h>.#endif.. 01d0: 23 64 65 66 69 6e 65 20 43 4b 5f 50 54 52 20 2a #define CK_PTR * 01e0: 0a 23 64 65 66 69 6e 65 20 43 4b 5f 44 45 46 49 .#define CK_DEFI 01f0: 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 72 65 74 75 NE_FUNCTION(retu 0200: 72 6e 54 79 70 65 2c 20 6e 61 6d 65 29 20 72 65 rnType, name) re 0210: 74 75 72 6e 54 79 70 65 20 6e 61 6d 65 0a 23 64 turnType name.#d 0220: 65 66 69 6e 65 20 43 4b 5f 44 45 43 4c 41 52 45 efine CK_DECLARE 0230: 5f 46 55 4e 43 54 49 4f 4e 28 72 65 74 75 72 6e _FUNCTION(return 0240: 54 79 70 65 2c 20 6e 61 6d 65 29 20 72 65 74 75 Type, name) retu 0250: 72 6e 54 79 70 65 20 6e 61 6d 65 0a 23 64 65 66 rnType name.#def 0260: 69 6e 65 20 43 4b 5f 44 45 43 4c 41 52 45 5f 46 ine CK_DECLARE_F 0270: 55 4e 43 54 49 4f 4e 5f 50 4f 49 4e 54 45 52 28 UNCTION_POINTER( 0280: 72 65 74 75 72 6e 54 79 70 65 2c 20 6e 61 6d 65 returnType, name 0290: 29 20 72 65 74 75 72 6e 54 79 70 65 20 28 2a 20 ) returnType (* 02a0: 6e 61 6d 65 29 0a 23 64 65 66 69 6e 65 20 43 4b name).#define CK 02b0: 5f 43 41 4c 4c 42 41 43 4b 5f 46 55 4e 43 54 49 _CALLBACK_FUNCTI 02c0: 4f 4e 28 72 65 74 75 72 6e 54 79 70 65 2c 20 6e ON(returnType, n 02d0: 61 6d 65 29 20 72 65 74 75 72 6e 54 79 70 65 20 ame) returnType 02e0: 28 2a 20 6e 61 6d 65 29 0a 23 69 66 6e 64 65 66 (* name).#ifndef 02f0: 20 4e 55 4c 4c 5f 50 54 52 0a 23 20 20 64 65 66 NULL_PTR.# def 0300: 69 6e 65 20 4e 55 4c 4c 5f 50 54 52 20 30 0a 23 ine NULL_PTR 0.# 0310: 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 endif..#include 0320: 22 70 6b 63 73 31 31 2e 68 22 0a 23 69 6e 63 6c "pkcs11.h".#incl 0330: 75 64 65 20 22 61 73 6e 31 2d 78 35 30 39 2e 68 ude "asn1-x509.h 0340: 22 0a 0a 23 69 66 6e 64 65 66 20 43 41 43 4b 45 "..#ifndef CACKE 0350: 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 53 49 Y_CRYPTOKI_VERSI 0360: 4f 4e 5f 43 4f 44 45 0a 23 20 20 64 65 66 69 6e ON_CODE.# defin 0370: 65 20 43 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b e CACKEY_CRYPTOK 0380: 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 20 30 I_VERSION_CODE 0 0390: 78 30 32 31 65 30 30 0a 23 65 6e 64 69 66 0a 0a x021e00.#endif.. 03a0: 23 69 66 6e 64 65 66 20 43 4b 41 5f 54 52 55 53 #ifndef CKA_TRUS 03b0: 54 5f 53 45 52 56 45 52 5f 41 55 54 48 0a 23 20 T_SERVER_AUTH.# 03c0: 20 64 65 66 69 6e 65 20 43 4b 41 5f 54 52 55 53 define CKA_TRUS 03d0: 54 5f 53 45 52 56 45 52 5f 41 55 54 48 20 30 78 T_SERVER_AUTH 0x 03e0: 63 65 35 33 36 33 35 38 0a 23 65 6e 64 69 66 0a ce536358.#endif. 03f0: 23 69 66 6e 64 65 66 20 43 4b 41 5f 54 52 55 53 #ifndef CKA_TRUS 0400: 54 5f 43 4c 49 45 4e 54 5f 41 55 54 48 0a 23 20 T_CLIENT_AUTH.# 0410: 20 64 65 66 69 6e 65 20 43 4b 41 5f 54 52 55 53 define CKA_TRUS 0420: 54 5f 43 4c 49 45 4e 54 5f 41 55 54 48 20 30 78 T_CLIENT_AUTH 0x 0430: 63 65 35 33 36 33 35 39 0a 23 65 6e 64 69 66 0a ce536359.#endif. 0440: 23 69 66 6e 64 65 66 20 43 4b 41 5f 54 52 55 53 #ifndef CKA_TRUS 0450: 54 5f 43 4f 44 45 5f 53 49 47 4e 49 4e 47 0a 23 T_CODE_SIGNING.# 0460: 20 20 64 65 66 69 6e 65 20 43 4b 41 5f 54 52 55 define CKA_TRU 0470: 53 54 5f 43 4f 44 45 5f 53 49 47 4e 49 4e 47 20 ST_CODE_SIGNING 0480: 30 78 63 65 35 33 36 33 35 61 0a 23 65 6e 64 69 0xce53635a.#endi 0490: 66 0a 23 69 66 6e 64 65 66 20 43 4b 41 5f 54 52 f.#ifndef CKA_TR 04a0: 55 53 54 5f 45 4d 41 49 4c 5f 50 52 4f 54 45 43 UST_EMAIL_PROTEC 04b0: 54 49 4f 4e 0a 23 20 20 64 65 66 69 6e 65 20 43 TION.# define C 04c0: 4b 41 5f 54 52 55 53 54 5f 45 4d 41 49 4c 5f 50 KA_TRUST_EMAIL_P 04d0: 52 4f 54 45 43 54 49 4f 4e 20 30 78 63 65 35 33 ROTECTION 0xce53 04e0: 36 33 35 62 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 635b.#endif../* 04f0: 47 53 43 2d 49 53 20 76 32 2e 31 20 44 65 66 69 GSC-IS v2.1 Defi 0500: 6e 69 74 69 6f 6e 73 20 2a 2f 0a 2f 2a 2a 20 43 nitions */./** C 0510: 6c 61 73 73 65 73 20 2a 2a 2f 0a 23 64 65 66 69 lasses **/.#defi 0520: 6e 65 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 ne GSCIS_CLASS_I 0530: 53 4f 37 38 31 36 20 20 20 20 20 20 20 20 20 20 SO7816 0540: 20 30 78 30 30 0a 23 64 65 66 69 6e 65 20 47 53 0x00.#define GS 0550: 43 49 53 5f 43 4c 41 53 53 5f 47 4c 4f 42 41 4c CIS_CLASS_GLOBAL 0560: 5f 50 4c 41 54 46 4f 52 4d 20 20 20 30 78 38 30 _PLATFORM 0x80 0570: 0a 0a 2f 2a 2a 20 49 6e 73 74 72 75 63 74 69 6f ../** Instructio 0580: 6e 73 20 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 ns **/.#define G 0590: 53 43 49 53 5f 49 4e 53 54 52 5f 47 45 54 5f 52 SCIS_INSTR_GET_R 05a0: 45 53 50 4f 4e 53 45 20 20 20 20 20 20 30 78 43 ESPONSE 0xC 05b0: 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 0.#define GSCIS_ 05c0: 49 4e 53 54 52 5f 52 45 41 44 5f 42 49 4e 41 52 INSTR_READ_BINAR 05d0: 59 20 20 20 20 20 20 20 30 78 42 30 0a 23 64 65 Y 0xB0.#de 05e0: 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 fine GSCIS_INSTR 05f0: 5f 55 50 44 41 54 45 5f 42 49 4e 41 52 59 20 20 _UPDATE_BINARY 0600: 20 20 20 30 78 44 36 0a 23 64 65 66 69 6e 65 20 0xD6.#define 0610: 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 45 4c 45 GSCIS_INSTR_SELE 0620: 43 54 20 20 20 20 20 20 20 20 20 20 20 20 30 78 CT 0x 0630: 41 34 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 A4.#define GSCIS 0640: 5f 49 4e 53 54 52 5f 45 58 54 45 52 4e 41 4c 5f _INSTR_EXTERNAL_ 0650: 41 55 54 48 20 20 20 20 20 30 78 38 32 0a 23 64 AUTH 0x82.#d 0660: 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 efine GSCIS_INST 0670: 52 5f 47 45 54 5f 43 48 41 4c 4c 45 4e 47 45 20 R_GET_CHALLENGE 0680: 20 20 20 20 30 78 38 34 0a 23 64 65 66 69 6e 65 0x84.#define 0690: 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 49 4e 54 GSCIS_INSTR_INT 06a0: 45 52 4e 41 4c 5f 41 55 54 48 20 20 20 20 20 30 ERNAL_AUTH 0 06b0: 78 38 38 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x88.#define GSCI 06c0: 53 5f 49 4e 53 54 52 5f 56 45 52 49 46 59 20 20 S_INSTR_VERIFY 06d0: 20 20 20 20 20 20 20 20 20 20 30 78 32 30 0a 23 0x20.# 06e0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 define GSCIS_INS 06f0: 54 52 5f 53 49 47 4e 20 20 20 20 20 20 20 20 20 TR_SIGN 0700: 20 20 20 20 20 30 78 32 41 0a 23 64 65 66 69 6e 0x2A.#defin 0710: 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 47 45 e GSCIS_INSTR_GE 0720: 54 5f 50 52 4f 50 20 20 20 20 20 20 20 20 20 20 T_PROP 0730: 30 78 35 36 0a 23 64 65 66 69 6e 65 20 47 53 43 0x56.#define GSC 0740: 49 53 5f 49 4e 53 54 52 5f 47 45 54 5f 41 43 52 IS_INSTR_GET_ACR 0750: 20 20 20 20 20 20 20 20 20 20 20 30 78 34 43 0a 0x4C. 0760: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e #define GSCIS_IN 0770: 53 54 52 5f 52 45 41 44 5f 42 55 46 46 45 52 20 STR_READ_BUFFER 0780: 20 20 20 20 20 20 30 78 35 32 0a 23 64 65 66 69 0x52.#defi 0790: 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 ne GSCIS_INSTR_S 07a0: 49 47 4e 44 45 43 52 59 50 54 20 20 20 20 20 20 IGNDECRYPT 07b0: 20 30 78 34 32 0a 0a 23 64 65 66 69 6e 65 20 47 0x42..#define G 07c0: 53 43 49 53 5f 50 41 52 41 4d 5f 53 45 4c 45 43 SCIS_PARAM_SELEC 07d0: 54 5f 41 50 50 4c 45 54 20 20 20 20 20 30 78 30 T_APPLET 0x0 07e0: 34 0a 0a 2f 2a 2a 20 54 61 67 73 20 2a 2a 2f 0a 4../** Tags **/. 07f0: 2f 2a 2a 2a 20 43 43 43 20 54 61 67 73 20 2a 2a /*** CCC Tags ** 0800: 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 */.#define GSCIS 0810: 5f 54 41 47 5f 43 41 52 44 49 44 20 20 20 20 20 _TAG_CARDID 0820: 20 20 20 20 20 20 20 20 20 30 78 46 30 0a 23 64 0xF0.#d 0830: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0840: 43 43 43 5f 56 45 52 20 20 20 20 20 20 20 20 20 CCC_VER 0850: 20 20 20 20 30 78 46 31 0a 23 64 65 66 69 6e 65 0xF1.#define 0860: 20 47 53 43 49 53 5f 54 41 47 5f 43 43 47 5f 56 GSCIS_TAG_CCG_V 0870: 45 52 20 20 20 20 20 20 20 20 20 20 20 20 20 30 ER 0 0880: 78 46 32 0a 23 64 65 66 69 6e 65 20 47 53 43 49 xF2.#define GSCI 0890: 53 5f 54 41 47 5f 43 41 52 44 55 52 4c 20 20 20 S_TAG_CARDURL 08a0: 20 20 20 20 20 20 20 20 20 20 30 78 46 33 0a 23 0xF3.# 08b0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 08c0: 5f 50 4b 43 53 31 35 20 20 20 20 20 20 20 20 20 _PKCS15 08d0: 20 20 20 20 20 30 78 46 34 0a 23 64 65 66 69 6e 0xF4.#defin 08e0: 65 20 47 53 43 49 53 5f 54 41 47 5f 52 45 47 5f e GSCIS_TAG_REG_ 08f0: 44 41 54 41 5f 4d 4f 44 45 4c 20 20 20 20 20 20 DATA_MODEL 0900: 30 78 46 35 0a 23 64 65 66 69 6e 65 20 47 53 43 0xF5.#define GSC 0910: 49 53 5f 54 41 47 5f 41 43 52 5f 54 41 42 4c 45 IS_TAG_ACR_TABLE 0920: 20 20 20 20 20 20 20 20 20 20 20 30 78 46 36 0a 0xF6. 0930: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0940: 47 5f 43 41 52 44 5f 41 50 44 55 20 20 20 20 20 G_CARD_APDU 0950: 20 20 20 20 20 20 30 78 46 37 0a 23 64 65 66 69 0xF7.#defi 0960: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 52 45 44 ne GSCIS_TAG_RED 0970: 49 52 45 43 54 49 4f 4e 20 20 20 20 20 20 20 20 IRECTION 0980: 20 30 78 46 41 0a 23 64 65 66 69 6e 65 20 47 53 0xFA.#define GS 0990: 43 49 53 5f 54 41 47 5f 43 54 20 20 20 20 20 20 CIS_TAG_CT 09a0: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 46 42 0xFB 09b0: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 09c0: 41 47 5f 53 54 20 20 20 20 20 20 20 20 20 20 20 AG_ST 09d0: 20 20 20 20 20 20 20 30 78 46 43 0a 23 64 65 66 0xFC.#def 09e0: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4e 45 ine GSCIS_TAG_NE 09f0: 58 54 43 43 43 20 20 20 20 20 20 20 20 20 20 20 XTCCC 0a00: 20 20 30 78 46 44 0a 0a 2f 2a 2a 2a 20 47 65 6e 0xFD../*** Gen 0a10: 65 72 61 6c 20 2d 20 45 46 20 32 32 30 30 20 2a eral - EF 2200 * 0a20: 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 43 49 **/.#define GSCI 0a30: 53 5f 54 41 47 5f 46 4e 41 4d 45 20 20 20 20 20 S_TAG_FNAME 0a40: 20 20 20 20 20 20 20 20 20 20 30 78 30 31 0a 23 0x01.# 0a50: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0a60: 5f 4d 4e 41 4d 45 20 20 20 20 20 20 20 20 20 20 _MNAME 0a70: 20 20 20 20 20 30 78 30 32 0a 23 64 65 66 69 6e 0x02.#defin 0a80: 65 20 47 53 43 49 53 5f 54 41 47 5f 4c 4e 41 4d e GSCIS_TAG_LNAM 0a90: 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 E 0aa0: 30 78 30 33 0a 23 64 65 66 69 6e 65 20 47 53 43 0x03.#define GSC 0ab0: 49 53 5f 54 41 47 5f 53 55 46 46 49 58 20 20 20 IS_TAG_SUFFIX 0ac0: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 34 0a 0x04. 0ad0: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0ae0: 47 5f 47 4f 56 54 5f 41 47 45 4e 43 59 20 20 20 G_GOVT_AGENCY 0af0: 20 20 20 20 20 20 30 78 30 35 0a 23 64 65 66 69 0x05.#defi 0b00: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 52 ne GSCIS_TAG_BUR 0b10: 45 41 55 20 20 20 20 20 20 20 20 20 20 20 20 20 EAU 0b20: 20 30 78 30 36 0a 23 64 65 66 69 6e 65 20 47 53 0x06.#define GS 0b30: 43 49 53 5f 54 41 47 5f 42 55 52 45 41 55 5f 43 CIS_TAG_BUREAU_C 0b40: 4f 44 45 20 20 20 20 20 20 20 20 20 30 78 30 37 ODE 0x07 0b50: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0b60: 41 47 5f 44 45 50 54 5f 43 4f 44 45 20 20 20 20 AG_DEPT_CODE 0b70: 20 20 20 20 20 20 20 30 78 30 38 0a 23 64 65 66 0x08.#def 0b80: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 54 49 ine GSCIS_TAG_TI 0b90: 54 4c 45 20 20 20 20 20 20 20 20 20 20 20 20 20 TLE 0ba0: 20 20 30 78 30 39 0a 23 64 65 66 69 6e 65 20 47 0x09.#define G 0bb0: 53 43 49 53 5f 54 41 47 5f 42 55 49 4c 44 49 4e SCIS_TAG_BUILDIN 0bc0: 47 20 20 20 20 20 20 20 20 20 20 20 20 30 78 31 G 0x1 0bd0: 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 0.#define GSCIS_ 0be0: 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 31 TAG_OFFICE_ADDR1 0bf0: 20 20 20 20 20 20 20 20 30 78 31 31 0a 23 64 65 0x11.#de 0c00: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4f fine GSCIS_TAG_O 0c10: 46 46 49 43 45 5f 41 44 44 52 32 20 20 20 20 20 FFICE_ADDR2 0c20: 20 20 20 30 78 31 32 0a 23 64 65 66 69 6e 65 20 0x12.#define 0c30: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 0c40: 5f 43 49 54 59 20 20 20 20 20 20 20 20 20 30 78 _CITY 0x 0c50: 31 33 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 13.#define GSCIS 0c60: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 53 54 41 54 _TAG_OFFICE_STAT 0c70: 45 20 20 20 20 20 20 20 20 30 78 31 34 0a 23 64 E 0x14.#d 0c80: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0c90: 4f 46 46 49 43 45 5f 5a 49 50 20 20 20 20 20 20 OFFICE_ZIP 0ca0: 20 20 20 20 30 78 31 35 0a 23 64 65 66 69 6e 65 0x15.#define 0cb0: 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 GSCIS_TAG_OFFIC 0cc0: 45 5f 43 4f 55 4e 54 52 59 20 20 20 20 20 20 30 E_COUNTRY 0 0cd0: 78 31 36 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x16.#define GSCI 0ce0: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 4f S_TAG_OFFICE_PHO 0cf0: 4e 45 20 20 20 20 20 20 20 20 30 78 31 37 0a 23 NE 0x17.# 0d00: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0d10: 5f 4f 46 46 49 43 45 5f 50 48 4f 4e 45 5f 45 58 _OFFICE_PHONE_EX 0d20: 54 20 20 20 20 30 78 31 38 0a 23 64 65 66 69 6e T 0x18.#defin 0d30: 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 e GSCIS_TAG_OFFI 0d40: 43 45 5f 46 41 58 20 20 20 20 20 20 20 20 20 20 CE_FAX 0d50: 30 78 31 39 0a 23 64 65 66 69 6e 65 20 47 53 43 0x19.#define GSC 0d60: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 45 4d IS_TAG_OFFICE_EM 0d70: 41 49 4c 20 20 20 20 20 20 20 20 30 78 31 41 0a AIL 0x1A. 0d80: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0d90: 47 5f 4f 46 46 49 43 45 5f 52 4f 4f 4d 20 20 20 G_OFFICE_ROOM 0da0: 20 20 20 20 20 20 30 78 31 42 0a 23 64 65 66 69 0x1B.#defi 0db0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4e 4f 4e ne GSCIS_TAG_NON 0dc0: 47 4f 56 5f 41 47 45 4e 43 59 20 20 20 20 20 20 GOV_AGENCY 0dd0: 20 30 78 31 43 0a 23 64 65 66 69 6e 65 20 47 53 0x1C.#define GS 0de0: 43 49 53 5f 54 41 47 5f 53 53 4e 5f 44 45 53 49 CIS_TAG_SSN_DESI 0df0: 47 4e 41 54 4f 52 20 20 20 20 20 20 30 78 31 44 GNATOR 0x1D 0e00: 0a 0a 2f 2a 2a 2a 20 50 49 49 20 2d 20 45 46 20 ../*** PII - EF 0e10: 32 31 30 30 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 2100 ***/.#defin 0e20: 65 20 47 53 43 49 53 5f 54 41 47 5f 53 53 4e 20 e GSCIS_TAG_SSN 0e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0e40: 30 78 32 30 0a 23 64 65 66 69 6e 65 20 47 53 43 0x20.#define GSC 0e50: 49 53 5f 54 41 47 5f 44 4f 42 20 20 20 20 20 20 IS_TAG_DOB 0e60: 20 20 20 20 20 20 20 20 20 20 20 30 78 32 31 0a 0x21. 0e70: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0e80: 47 5f 47 45 4e 44 45 52 20 20 20 20 20 20 20 20 G_GENDER 0e90: 20 20 20 20 20 20 30 78 32 32 0a 0a 2f 2a 2a 2a 0x22../*** 0ea0: 20 4c 6f 67 69 6e 20 49 6e 66 6f 72 6d 61 74 69 Login Informati 0eb0: 6f 6e 20 2d 20 45 46 20 34 30 30 30 20 2a 2a 2a on - EF 4000 *** 0ec0: 2f 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f /.#define GSCIS_ 0ed0: 54 41 47 5f 55 53 45 52 49 44 20 20 20 20 20 20 TAG_USERID 0ee0: 20 20 20 20 20 20 20 20 30 78 34 30 0a 23 64 65 0x40.#de 0ef0: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 44 fine GSCIS_TAG_D 0f00: 4f 4d 41 49 4e 20 20 20 20 20 20 20 20 20 20 20 OMAIN 0f10: 20 20 20 30 78 34 31 0a 23 64 65 66 69 6e 65 20 0x41.#define 0f20: 47 53 43 49 53 5f 54 41 47 5f 50 41 53 53 57 4f GSCIS_TAG_PASSWO 0f30: 52 44 20 20 20 20 20 20 20 20 20 20 20 20 30 78 RD 0x 0f40: 34 32 0a 0a 2f 2a 2a 2a 20 43 61 72 64 20 49 6e 42../*** Card In 0f50: 66 6f 72 6d 61 74 69 6f 6e 20 2d 20 45 46 20 35 formation - EF 5 0f60: 30 30 30 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 000 ***/.#define 0f70: 20 47 53 43 49 53 5f 54 41 47 5f 49 53 53 55 45 GSCIS_TAG_ISSUE 0f80: 52 49 44 20 20 20 20 20 20 20 20 20 20 20 20 30 RID 0 0f90: 78 35 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x50.#define GSCI 0fa0: 53 5f 54 41 47 5f 53 45 52 4e 4f 20 20 20 20 20 S_TAG_SERNO 0fb0: 20 20 20 20 20 20 20 20 20 20 30 78 35 31 0a 23 0x51.# 0fc0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0fd0: 5f 49 53 53 55 45 5f 44 41 54 45 20 20 20 20 20 _ISSUE_DATE 0fe0: 20 20 20 20 20 30 78 35 32 0a 23 64 65 66 69 6e 0x52.#defin 0ff0: 65 20 47 53 43 49 53 5f 54 41 47 5f 45 58 50 49 e GSCIS_TAG_EXPI 1000: 52 45 5f 44 41 54 45 20 20 20 20 20 20 20 20 20 RE_DATE 1010: 30 78 35 33 0a 23 64 65 66 69 6e 65 20 47 53 43 0x53.#define GSC 1020: 49 53 5f 54 41 47 5f 43 41 52 44 5f 54 59 50 45 IS_TAG_CARD_TYPE 1030: 20 20 20 20 20 20 20 20 20 20 20 30 78 35 34 0a 0x54. 1040: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 1050: 47 5f 53 45 43 55 52 49 54 59 5f 43 4f 44 45 20 G_SECURITY_CODE 1060: 20 20 20 20 20 20 30 78 35 37 0a 23 64 65 66 69 0x57.#defi 1070: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 ne GSCIS_TAG_CAR 1080: 44 49 44 5f 41 49 44 20 20 20 20 20 20 20 20 20 DID_AID 1090: 20 30 78 35 38 0a 0a 2f 2a 2a 2a 20 50 4b 49 20 0x58../*** PKI 10a0: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 2d 20 45 46 Information - EF 10b0: 20 37 30 30 30 20 2a 2a 2a 2f 0a 23 64 65 66 69 7000 ***/.#defi 10c0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 ne GSCIS_TAG_CER 10d0: 54 49 46 49 43 41 54 45 20 20 20 20 20 20 20 20 TIFICATE 10e0: 20 30 78 37 30 0a 23 64 65 66 69 6e 65 20 47 53 0x70.#define GS 10f0: 43 49 53 5f 54 41 47 5f 43 45 52 54 5f 49 53 53 CIS_TAG_CERT_ISS 1100: 55 45 5f 44 41 54 45 20 20 20 20 20 30 78 37 31 UE_DATE 0x71 1110: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 1120: 41 47 5f 43 45 52 54 5f 45 58 50 49 52 45 5f 44 AG_CERT_EXPIRE_D 1130: 41 54 45 20 20 20 20 30 78 37 32 0a 0a 2f 2a 2a ATE 0x72../** 1140: 20 41 70 70 6c 65 74 20 49 44 73 20 2a 2a 2f 0a Applet IDs **/. 1150: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 41 49 #define GSCIS_AI 1160: 44 5f 43 43 43 20 20 20 20 20 20 20 20 20 20 20 D_CCC 1170: 20 20 20 20 20 20 30 78 41 30 2c 20 30 78 30 30 0xA0, 0x00 1180: 2c 20 30 78 30 30 2c 20 30 78 30 31 2c 20 30 78 , 0x00, 0x01, 0x 1190: 31 36 2c 20 30 78 44 42 2c 20 30 78 30 30 0a 0a 16, 0xDB, 0x00.. 11a0: 23 69 66 64 65 66 20 43 41 43 4b 45 59 5f 44 45 #ifdef CACKEY_DE 11b0: 42 55 47 0a 23 20 20 69 66 64 65 66 20 48 41 56 BUG.# ifdef HAV 11c0: 45 5f 53 54 44 49 4f 5f 48 0a 23 20 20 20 20 69 E_STDIO_H.# i 11d0: 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e nclude <stdio.h> 11e0: 0a 23 20 20 65 6e 64 69 66 0a 0a 23 20 20 64 65 .# endif..# de 11f0: 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 fine CACKEY_DEBU 1200: 47 5f 50 52 49 4e 54 46 28 78 2e 2e 2e 29 20 7b G_PRINTF(x...) { 1210: 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c fprintf(stderr, 1220: 20 22 25 73 28 29 3a 20 22 2c 20 5f 5f 66 75 6e "%s(): ", __fun 1230: 63 5f 5f 29 3b 20 66 70 72 69 6e 74 66 28 73 74 c__); fprintf(st 1240: 64 65 72 72 2c 20 78 29 3b 20 66 70 72 69 6e 74 derr, x); fprint 1250: 66 28 73 74 64 65 72 72 2c 20 22 5c 6e 22 29 3b f(stderr, "\n"); 1260: 20 7d 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 }.# define CAC 1270: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 KEY_DEBUG_PRINTB 1280: 55 46 28 66 2c 20 78 2c 20 79 29 20 7b 20 75 6e UF(f, x, y) { un 1290: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 75 66 signed char *buf 12a0: 3b 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 ; unsigned long 12b0: 69 64 78 3b 20 62 75 66 20 3d 20 28 75 6e 73 69 idx; buf = (unsi 12c0: 67 6e 65 64 20 63 68 61 72 20 2a 29 20 28 78 29 gned char *) (x) 12d0: 3b 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 ; fprintf(stderr 12e0: 2c 20 22 25 73 28 29 3a 20 25 73 20 20 28 25 73 , "%s(): %s (%s 12f0: 2f 25 6c 75 20 3d 20 7b 25 30 32 78 22 2c 20 5f /%lu = {%02x", _ 1300: 5f 66 75 6e 63 5f 5f 2c 20 66 2c 20 23 78 2c 20 _func__, f, #x, 1310: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 1320: 28 79 29 2c 20 62 75 66 5b 30 5d 29 3b 20 66 6f (y), buf[0]); fo 1330: 72 20 28 69 64 78 20 3d 20 31 3b 20 69 64 78 20 r (idx = 1; idx 1340: 3c 20 28 79 29 3b 20 69 64 78 2b 2b 29 20 7b 20 < (y); idx++) { 1350: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 fprintf(stderr, 1360: 22 2c 20 25 30 32 78 22 2c 20 62 75 66 5b 69 64 ", %02x", buf[id 1370: 78 5d 29 3b 20 7d 3b 20 66 70 72 69 6e 74 66 28 x]); }; fprintf( 1380: 73 74 64 65 72 72 2c 20 22 7d 29 5c 6e 22 29 3b stderr, "})\n"); 1390: 20 7d 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 }.# define CAC 13a0: 4b 45 59 5f 44 45 42 55 47 5f 50 45 52 52 4f 52 KEY_DEBUG_PERROR 13b0: 28 78 29 20 7b 20 66 70 72 69 6e 74 66 28 73 74 (x) { fprintf(st 13c0: 64 65 72 72 2c 20 22 25 73 28 29 3a 20 22 2c 20 derr, "%s(): ", 13d0: 5f 5f 66 75 6e 63 5f 5f 29 3b 20 70 65 72 72 6f __func__); perro 13e0: 72 28 78 29 3b 20 7d 0a 23 20 20 64 65 66 69 6e r(x); }.# defin 13f0: 65 20 66 72 65 65 28 78 29 20 7b 20 43 41 43 4b e free(x) { CACK 1400: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1410: 22 46 52 45 45 28 25 70 29 20 28 25 73 29 22 2c "FREE(%p) (%s)", 1420: 20 78 2c 20 23 78 29 3b 20 66 72 65 65 28 78 29 x, #x); free(x) 1430: 3b 20 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 ; }..static void 1440: 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 *CACKEY_DEBUG_F 1450: 55 4e 43 5f 4d 41 4c 4c 4f 43 28 73 69 7a 65 5f UNC_MALLOC(size_ 1460: 74 20 73 69 7a 65 2c 20 63 6f 6e 73 74 20 63 68 t size, const ch 1470: 61 72 20 2a 66 75 6e 63 29 20 7b 0a 09 76 6f 69 ar *func) {..voi 1480: 64 20 2a 72 65 74 76 61 6c 3b 0a 0a 09 72 65 74 d *retval;...ret 1490: 76 61 6c 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a val = malloc(siz 14a0: 65 29 3b 0a 0a 09 66 70 72 69 6e 74 66 28 73 74 e);...fprintf(st 14b0: 64 65 72 72 2c 20 22 25 73 28 29 3a 20 22 2c 20 derr, "%s(): ", 14c0: 66 75 6e 63 29 3b 0a 09 66 70 72 69 6e 74 66 28 func);..fprintf( 14d0: 73 74 64 65 72 72 2c 20 22 4d 41 4c 4c 4f 43 28 stderr, "MALLOC( 14e0: 29 20 3d 20 25 70 22 2c 20 72 65 74 76 61 6c 29 ) = %p", retval) 14f0: 3b 0a 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 ;..fprintf(stder 1500: 72 2c 20 22 5c 6e 22 29 3b 0a 0a 09 72 65 74 75 r, "\n");...retu 1510: 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 rn(retval);.}..s 1520: 74 61 74 69 63 20 76 6f 69 64 20 2a 43 41 43 4b tatic void *CACK 1530: 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 52 45 EY_DEBUG_FUNC_RE 1540: 41 4c 4c 4f 43 28 76 6f 69 64 20 2a 70 74 72 2c ALLOC(void *ptr, 1550: 20 73 69 7a 65 5f 74 20 73 69 7a 65 2c 20 63 6f size_t size, co 1560: 6e 73 74 20 63 68 61 72 20 2a 66 75 6e 63 29 20 nst char *func) 1570: 7b 0a 09 76 6f 69 64 20 2a 72 65 74 76 61 6c 3b {..void *retval; 1580: 0a 0a 09 72 65 74 76 61 6c 20 3d 20 72 65 61 6c ...retval = real 1590: 6c 6f 63 28 70 74 72 2c 20 73 69 7a 65 29 3b 0a loc(ptr, size);. 15a0: 0a 09 69 66 20 28 72 65 74 76 61 6c 20 21 3d 20 ..if (retval != 15b0: 70 74 72 29 20 7b 0a 09 09 66 70 72 69 6e 74 66 ptr) {...fprintf 15c0: 28 73 74 64 65 72 72 2c 20 22 25 73 28 29 3a 20 (stderr, "%s(): 15d0: 22 2c 20 66 75 6e 63 29 3b 0a 09 09 66 70 72 69 ", func);...fpri 15e0: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 52 45 41 ntf(stderr, "REA 15f0: 4c 4c 4f 43 28 25 70 29 20 3d 20 25 70 22 2c 20 LLOC(%p) = %p", 1600: 70 74 72 2c 20 72 65 74 76 61 6c 29 3b 0a 09 09 ptr, retval);... 1610: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 fprintf(stderr, 1620: 22 5c 6e 22 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 "\n");..}...retu 1630: 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 rn(retval);.}..s 1640: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 tatic const char 1650: 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 *CACKEY_DEBUG_F 1660: 55 4e 43 5f 54 41 47 5f 54 4f 5f 53 54 52 28 75 UNC_TAG_TO_STR(u 1670: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 74 61 67 nsigned char tag 1680: 29 20 7b 0a 09 73 77 69 74 63 68 20 28 74 61 67 ) {..switch (tag 1690: 29 20 7b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ) {...case GSCIS 16a0: 5f 54 41 47 5f 43 41 52 44 49 44 3a 0a 09 09 09 _TAG_CARDID:.... 16b0: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 16c0: 47 5f 43 41 52 44 49 44 22 29 3b 0a 09 09 63 61 G_CARDID");...ca 16d0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 43 43 se GSCIS_TAG_CCC 16e0: 5f 56 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 _VER:....return( 16f0: 22 47 53 43 49 53 5f 54 41 47 5f 43 43 43 5f 56 "GSCIS_TAG_CCC_V 1700: 45 52 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 ER");...case GSC 1710: 49 53 5f 54 41 47 5f 43 43 47 5f 56 45 52 3a 0a IS_TAG_CCG_VER:. 1720: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 1730: 5f 54 41 47 5f 43 43 47 5f 56 45 52 22 29 3b 0a _TAG_CCG_VER");. 1740: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 1750: 5f 43 41 52 44 55 52 4c 3a 0a 09 09 09 72 65 74 _CARDURL:....ret 1760: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 43 urn("GSCIS_TAG_C 1770: 41 52 44 55 52 4c 22 29 3b 0a 09 09 63 61 73 65 ARDURL");...case 1780: 20 47 53 43 49 53 5f 54 41 47 5f 50 4b 43 53 31 GSCIS_TAG_PKCS1 1790: 35 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 5:....return("GS 17a0: 43 49 53 5f 54 41 47 5f 50 4b 43 53 31 35 22 29 CIS_TAG_PKCS15") 17b0: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 17c0: 41 47 5f 52 45 47 5f 44 41 54 41 5f 4d 4f 44 45 AG_REG_DATA_MODE 17d0: 4c 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 L:....return("GS 17e0: 43 49 53 5f 54 41 47 5f 52 45 47 5f 44 41 54 41 CIS_TAG_REG_DATA 17f0: 5f 4d 4f 44 45 4c 22 29 3b 0a 09 09 63 61 73 65 _MODEL");...case 1800: 20 47 53 43 49 53 5f 54 41 47 5f 41 43 52 5f 54 GSCIS_TAG_ACR_T 1810: 41 42 4c 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 ABLE:....return( 1820: 22 47 53 43 49 53 5f 54 41 47 5f 41 43 52 5f 54 "GSCIS_TAG_ACR_T 1830: 41 42 4c 45 22 29 3b 0a 09 09 63 61 73 65 20 47 ABLE");...case G 1840: 53 43 49 53 5f 54 41 47 5f 43 41 52 44 5f 41 50 SCIS_TAG_CARD_AP 1850: 44 55 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 DU:....return("G 1860: 53 43 49 53 5f 54 41 47 5f 43 41 52 44 5f 41 50 SCIS_TAG_CARD_AP 1870: 44 55 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 DU");...case GSC 1880: 49 53 5f 54 41 47 5f 52 45 44 49 52 45 43 54 49 IS_TAG_REDIRECTI 1890: 4f 4e 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 ON:....return("G 18a0: 53 43 49 53 5f 54 41 47 5f 52 45 44 49 52 45 43 SCIS_TAG_REDIREC 18b0: 54 49 4f 4e 22 29 3b 0a 09 09 63 61 73 65 20 47 TION");...case G 18c0: 53 43 49 53 5f 54 41 47 5f 43 54 3a 0a 09 09 09 SCIS_TAG_CT:.... 18d0: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 18e0: 47 5f 43 54 22 29 3b 0a 09 09 63 61 73 65 20 47 G_CT");...case G 18f0: 53 43 49 53 5f 54 41 47 5f 53 54 3a 0a 09 09 09 SCIS_TAG_ST:.... 1900: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1910: 47 5f 53 54 22 29 3b 0a 09 09 63 61 73 65 20 47 G_ST");...case G 1920: 53 43 49 53 5f 54 41 47 5f 4e 45 58 54 43 43 43 SCIS_TAG_NEXTCCC 1930: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 1940: 49 53 5f 54 41 47 5f 4e 45 58 54 43 43 43 22 29 IS_TAG_NEXTCCC") 1950: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 1960: 41 47 5f 46 4e 41 4d 45 3a 0a 09 09 09 72 65 74 AG_FNAME:....ret 1970: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 46 urn("GSCIS_TAG_F 1980: 4e 41 4d 45 22 29 3b 0a 09 09 63 61 73 65 20 47 NAME");...case G 1990: 53 43 49 53 5f 54 41 47 5f 4d 4e 41 4d 45 3a 0a SCIS_TAG_MNAME:. 19a0: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 19b0: 5f 54 41 47 5f 4d 4e 41 4d 45 22 29 3b 0a 09 09 _TAG_MNAME");... 19c0: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4c case GSCIS_TAG_L 19d0: 4e 41 4d 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 NAME:....return( 19e0: 22 47 53 43 49 53 5f 54 41 47 5f 4c 4e 41 4d 45 "GSCIS_TAG_LNAME 19f0: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 1a00: 5f 54 41 47 5f 53 55 46 46 49 58 3a 0a 09 09 09 _TAG_SUFFIX:.... 1a10: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1a20: 47 5f 53 55 46 46 49 58 22 29 3b 0a 09 09 63 61 G_SUFFIX");...ca 1a30: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 47 4f 56 se GSCIS_TAG_GOV 1a40: 54 5f 41 47 45 4e 43 59 3a 0a 09 09 09 72 65 74 T_AGENCY:....ret 1a50: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 47 urn("GSCIS_TAG_G 1a60: 4f 56 54 5f 41 47 45 4e 43 59 22 29 3b 0a 09 09 OVT_AGENCY");... 1a70: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 42 case GSCIS_TAG_B 1a80: 55 52 45 41 55 3a 0a 09 09 09 72 65 74 75 72 6e UREAU:....return 1a90: 28 22 47 53 43 49 53 5f 54 41 47 5f 42 55 52 45 ("GSCIS_TAG_BURE 1aa0: 41 55 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 AU");...case GSC 1ab0: 49 53 5f 54 41 47 5f 42 55 52 45 41 55 5f 43 4f IS_TAG_BUREAU_CO 1ac0: 44 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 DE:....return("G 1ad0: 53 43 49 53 5f 54 41 47 5f 42 55 52 45 41 55 5f SCIS_TAG_BUREAU_ 1ae0: 43 4f 44 45 22 29 3b 0a 09 09 63 61 73 65 20 47 CODE");...case G 1af0: 53 43 49 53 5f 54 41 47 5f 44 45 50 54 5f 43 4f SCIS_TAG_DEPT_CO 1b00: 44 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 DE:....return("G 1b10: 53 43 49 53 5f 54 41 47 5f 44 45 50 54 5f 43 4f SCIS_TAG_DEPT_CO 1b20: 44 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 DE");...case GSC 1b30: 49 53 5f 54 41 47 5f 54 49 54 4c 45 3a 0a 09 09 IS_TAG_TITLE:... 1b40: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 1b50: 41 47 5f 54 49 54 4c 45 22 29 3b 0a 09 09 63 61 AG_TITLE");...ca 1b60: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 49 se GSCIS_TAG_BUI 1b70: 4c 44 49 4e 47 3a 0a 09 09 09 72 65 74 75 72 6e LDING:....return 1b80: 28 22 47 53 43 49 53 5f 54 41 47 5f 42 55 49 4c ("GSCIS_TAG_BUIL 1b90: 44 49 4e 47 22 29 3b 0a 09 09 63 61 73 65 20 47 DING");...case G 1ba0: 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f SCIS_TAG_OFFICE_ 1bb0: 41 44 44 52 31 3a 0a 09 09 09 72 65 74 75 72 6e ADDR1:....return 1bc0: 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 ("GSCIS_TAG_OFFI 1bd0: 43 45 5f 41 44 44 52 31 22 29 3b 0a 09 09 63 61 CE_ADDR1");...ca 1be0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 se GSCIS_TAG_OFF 1bf0: 49 43 45 5f 41 44 44 52 32 3a 0a 09 09 09 72 65 ICE_ADDR2:....re 1c00: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1c10: 4f 46 46 49 43 45 5f 41 44 44 52 32 22 29 3b 0a OFFICE_ADDR2");. 1c20: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 1c30: 5f 4f 46 46 49 43 45 5f 43 49 54 59 3a 0a 09 09 _OFFICE_CITY:... 1c40: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 1c50: 41 47 5f 4f 46 46 49 43 45 5f 43 49 54 59 22 29 AG_OFFICE_CITY") 1c60: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 1c70: 41 47 5f 4f 46 46 49 43 45 5f 53 54 41 54 45 3a AG_OFFICE_STATE: 1c80: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 1c90: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 53 54 41 S_TAG_OFFICE_STA 1ca0: 54 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 TE");...case GSC 1cb0: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 5a 49 IS_TAG_OFFICE_ZI 1cc0: 50 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 P:....return("GS 1cd0: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 5a CIS_TAG_OFFICE_Z 1ce0: 49 50 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 IP");...case GSC 1cf0: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 43 4f IS_TAG_OFFICE_CO 1d00: 55 4e 54 52 59 3a 0a 09 09 09 72 65 74 75 72 6e UNTRY:....return 1d10: 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 ("GSCIS_TAG_OFFI 1d20: 43 45 5f 43 4f 55 4e 54 52 59 22 29 3b 0a 09 09 CE_COUNTRY");... 1d30: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f case GSCIS_TAG_O 1d40: 46 46 49 43 45 5f 50 48 4f 4e 45 3a 0a 09 09 09 FFICE_PHONE:.... 1d50: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1d60: 47 5f 4f 46 46 49 43 45 5f 50 48 4f 4e 45 22 29 G_OFFICE_PHONE") 1d70: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 1d80: 41 47 5f 4f 46 46 49 43 45 5f 50 48 4f 4e 45 5f AG_OFFICE_PHONE_ 1d90: 45 58 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 EXT:....return(" 1da0: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 1db0: 5f 50 48 4f 4e 45 5f 45 58 54 22 29 3b 0a 09 09 _PHONE_EXT");... 1dc0: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f case GSCIS_TAG_O 1dd0: 46 46 49 43 45 5f 46 41 58 3a 0a 09 09 09 72 65 FFICE_FAX:....re 1de0: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1df0: 4f 46 46 49 43 45 5f 46 41 58 22 29 3b 0a 09 09 OFFICE_FAX");... 1e00: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f case GSCIS_TAG_O 1e10: 46 46 49 43 45 5f 45 4d 41 49 4c 3a 0a 09 09 09 FFICE_EMAIL:.... 1e20: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1e30: 47 5f 4f 46 46 49 43 45 5f 45 4d 41 49 4c 22 29 G_OFFICE_EMAIL") 1e40: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 1e50: 41 47 5f 4f 46 46 49 43 45 5f 52 4f 4f 4d 3a 0a AG_OFFICE_ROOM:. 1e60: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 1e70: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 52 4f 4f 4d _TAG_OFFICE_ROOM 1e80: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 1e90: 5f 54 41 47 5f 4e 4f 4e 47 4f 56 5f 41 47 45 4e _TAG_NONGOV_AGEN 1ea0: 43 59 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 CY:....return("G 1eb0: 53 43 49 53 5f 54 41 47 5f 4e 4f 4e 47 4f 56 5f SCIS_TAG_NONGOV_ 1ec0: 41 47 45 4e 43 59 22 29 3b 0a 09 09 63 61 73 65 AGENCY");...case 1ed0: 20 47 53 43 49 53 5f 54 41 47 5f 53 53 4e 5f 44 GSCIS_TAG_SSN_D 1ee0: 45 53 49 47 4e 41 54 4f 52 3a 0a 09 09 09 72 65 ESIGNATOR:....re 1ef0: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1f00: 53 53 4e 5f 44 45 53 49 47 4e 41 54 4f 52 22 29 SSN_DESIGNATOR") 1f10: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 1f20: 41 47 5f 53 53 4e 3a 0a 09 09 09 72 65 74 75 72 AG_SSN:....retur 1f30: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 53 53 4e n("GSCIS_TAG_SSN 1f40: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 1f50: 5f 54 41 47 5f 44 4f 42 3a 0a 09 09 09 72 65 74 _TAG_DOB:....ret 1f60: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 44 urn("GSCIS_TAG_D 1f70: 4f 42 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 OB");...case GSC 1f80: 49 53 5f 54 41 47 5f 47 45 4e 44 45 52 3a 0a 09 IS_TAG_GENDER:.. 1f90: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 1fa0: 54 41 47 5f 47 45 4e 44 45 52 22 29 3b 0a 09 09 TAG_GENDER");... 1fb0: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 55 case GSCIS_TAG_U 1fc0: 53 45 52 49 44 3a 0a 09 09 09 72 65 74 75 72 6e SERID:....return 1fd0: 28 22 47 53 43 49 53 5f 54 41 47 5f 55 53 45 52 ("GSCIS_TAG_USER 1fe0: 49 44 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 ID");...case GSC 1ff0: 49 53 5f 54 41 47 5f 44 4f 4d 41 49 4e 3a 0a 09 IS_TAG_DOMAIN:.. 2000: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 2010: 54 41 47 5f 44 4f 4d 41 49 4e 22 29 3b 0a 09 09 TAG_DOMAIN");... 2020: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 50 case GSCIS_TAG_P 2030: 41 53 53 57 4f 52 44 3a 0a 09 09 09 72 65 74 75 ASSWORD:....retu 2040: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 50 41 rn("GSCIS_TAG_PA 2050: 53 53 57 4f 52 44 22 29 3b 0a 09 09 63 61 73 65 SSWORD");...case 2060: 20 47 53 43 49 53 5f 54 41 47 5f 49 53 53 55 45 GSCIS_TAG_ISSUE 2070: 52 49 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 RID:....return(" 2080: 47 53 43 49 53 5f 54 41 47 5f 49 53 53 55 45 52 GSCIS_TAG_ISSUER 2090: 49 44 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 ID");...case GSC 20a0: 49 53 5f 54 41 47 5f 53 45 52 4e 4f 3a 0a 09 09 IS_TAG_SERNO:... 20b0: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 20c0: 41 47 5f 53 45 52 4e 4f 22 29 3b 0a 09 09 63 61 AG_SERNO");...ca 20d0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 49 53 53 se GSCIS_TAG_ISS 20e0: 55 45 5f 44 41 54 45 3a 0a 09 09 09 72 65 74 75 UE_DATE:....retu 20f0: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 49 53 rn("GSCIS_TAG_IS 2100: 53 55 45 5f 44 41 54 45 22 29 3b 0a 09 09 63 61 SUE_DATE");...ca 2110: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 45 58 50 se GSCIS_TAG_EXP 2120: 49 52 45 5f 44 41 54 45 3a 0a 09 09 09 72 65 74 IRE_DATE:....ret 2130: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 45 urn("GSCIS_TAG_E 2140: 58 50 49 52 45 5f 44 41 54 45 22 29 3b 0a 09 09 XPIRE_DATE");... 2150: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 case GSCIS_TAG_C 2160: 41 52 44 5f 54 59 50 45 3a 0a 09 09 09 72 65 74 ARD_TYPE:....ret 2170: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 43 urn("GSCIS_TAG_C 2180: 41 52 44 5f 54 59 50 45 22 29 3b 0a 09 09 63 61 ARD_TYPE");...ca 2190: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 53 45 43 se GSCIS_TAG_SEC 21a0: 55 52 49 54 59 5f 43 4f 44 45 3a 0a 09 09 09 72 URITY_CODE:....r 21b0: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 21c0: 5f 53 45 43 55 52 49 54 59 5f 43 4f 44 45 22 29 _SECURITY_CODE") 21d0: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 21e0: 41 47 5f 43 41 52 44 49 44 5f 41 49 44 3a 0a 09 AG_CARDID_AID:.. 21f0: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 2200: 54 41 47 5f 43 41 52 44 49 44 5f 41 49 44 22 29 TAG_CARDID_AID") 2210: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 2220: 41 47 5f 43 45 52 54 49 46 49 43 41 54 45 3a 0a AG_CERTIFICATE:. 2230: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 2240: 5f 54 41 47 5f 43 45 52 54 49 46 49 43 41 54 45 _TAG_CERTIFICATE 2250: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 2260: 5f 54 41 47 5f 43 45 52 54 5f 49 53 53 55 45 5f _TAG_CERT_ISSUE_ 2270: 44 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 DATE:....return( 2280: 22 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 5f "GSCIS_TAG_CERT_ 2290: 49 53 53 55 45 5f 44 41 54 45 22 29 3b 0a 09 09 ISSUE_DATE");... 22a0: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 case GSCIS_TAG_C 22b0: 45 52 54 5f 45 58 50 49 52 45 5f 44 41 54 45 3a ERT_EXPIRE_DATE: 22c0: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 22d0: 53 5f 54 41 47 5f 43 45 52 54 5f 45 58 50 49 52 S_TAG_CERT_EXPIR 22e0: 45 5f 44 41 54 45 22 29 3b 0a 09 7d 0a 0a 09 72 E_DATE");..}...r 22f0: 65 74 75 72 6e 28 22 55 4e 4b 4e 4f 57 4e 22 29 eturn("UNKNOWN") 2300: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63 6f 6e 73 ;.}..static cons 2310: 74 20 63 68 61 72 20 2a 43 41 43 4b 45 59 5f 44 t char *CACKEY_D 2320: 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 EBUG_FUNC_SCARDE 2330: 52 52 5f 54 4f 5f 53 54 52 28 4c 4f 4e 47 20 72 RR_TO_STR(LONG r 2340: 65 74 63 6f 64 65 29 20 7b 0a 09 73 77 69 74 63 etcode) {..switc 2350: 68 20 28 72 65 74 63 6f 64 65 29 20 7b 0a 09 09 h (retcode) {... 2360: 63 61 73 65 20 53 43 41 52 44 5f 53 5f 53 55 43 case SCARD_S_SUC 2370: 43 45 53 53 3a 0a 09 09 09 72 65 74 75 72 6e 28 CESS:....return( 2380: 22 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 "SCARD_S_SUCCESS 2390: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 23a0: 5f 45 5f 43 41 4e 43 45 4c 4c 45 44 3a 0a 09 09 _E_CANCELLED:... 23b0: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 23c0: 5f 43 41 4e 43 45 4c 4c 45 44 22 29 3b 0a 09 09 _CANCELLED");... 23d0: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 43 41 4e case SCARD_E_CAN 23e0: 54 5f 44 49 53 50 4f 53 45 3a 0a 09 09 09 72 65 T_DISPOSE:....re 23f0: 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 43 41 turn("SCARD_E_CA 2400: 4e 54 5f 44 49 53 50 4f 53 45 22 29 3b 0a 09 09 NT_DISPOSE");... 2410: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 49 4e 53 case SCARD_E_INS 2420: 55 46 46 49 43 49 45 4e 54 5f 42 55 46 46 45 52 UFFICIENT_BUFFER 2430: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 :....return("SCA 2440: 52 44 5f 45 5f 49 4e 53 55 46 46 49 43 49 45 4e RD_E_INSUFFICIEN 2450: 54 5f 42 55 46 46 45 52 22 29 3b 0a 09 09 63 61 T_BUFFER");...ca 2460: 73 65 20 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c se SCARD_E_INVAL 2470: 49 44 5f 41 54 52 3a 0a 09 09 09 72 65 74 75 72 ID_ATR:....retur 2480: 6e 28 22 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c n("SCARD_E_INVAL 2490: 49 44 5f 41 54 52 22 29 3b 0a 09 09 63 61 73 65 ID_ATR");...case 24a0: 20 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 SCARD_E_INVALID 24b0: 5f 48 41 4e 44 4c 45 3a 0a 09 09 09 72 65 74 75 _HANDLE:....retu 24c0: 72 6e 28 22 53 43 41 52 44 5f 45 5f 49 4e 56 41 rn("SCARD_E_INVA 24d0: 4c 49 44 5f 48 41 4e 44 4c 45 22 29 3b 0a 09 09 LID_HANDLE");... 24e0: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 49 4e 56 case SCARD_E_INV 24f0: 41 4c 49 44 5f 50 41 52 41 4d 45 54 45 52 3a 0a ALID_PARAMETER:. 2500: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2510: 5f 45 5f 49 4e 56 41 4c 49 44 5f 50 41 52 41 4d _E_INVALID_PARAM 2520: 45 54 45 52 22 29 3b 0a 09 09 63 61 73 65 20 53 ETER");...case S 2530: 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 54 CARD_E_INVALID_T 2540: 41 52 47 45 54 3a 0a 09 09 09 72 65 74 75 72 6e ARGET:....return 2550: 28 22 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 ("SCARD_E_INVALI 2560: 44 5f 54 41 52 47 45 54 22 29 3b 0a 09 09 63 61 D_TARGET");...ca 2570: 73 65 20 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c se SCARD_E_INVAL 2580: 49 44 5f 56 41 4c 55 45 3a 0a 09 09 09 72 65 74 ID_VALUE:....ret 2590: 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 49 4e 56 urn("SCARD_E_INV 25a0: 41 4c 49 44 5f 56 41 4c 55 45 22 29 3b 0a 09 09 ALID_VALUE");... 25b0: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 4e 4f 5f case SCARD_E_NO_ 25c0: 4d 45 4d 4f 52 59 3a 0a 09 09 09 72 65 74 75 72 MEMORY:....retur 25d0: 6e 28 22 53 43 41 52 44 5f 45 5f 4e 4f 5f 4d 45 n("SCARD_E_NO_ME 25e0: 4d 4f 52 59 22 29 3b 0a 09 09 63 61 73 65 20 53 MORY");...case S 25f0: 43 41 52 44 5f 45 5f 55 4e 4b 4e 4f 57 4e 5f 52 CARD_E_UNKNOWN_R 2600: 45 41 44 45 52 3a 0a 09 09 09 72 65 74 75 72 6e EADER:....return 2610: 28 22 53 43 41 52 44 5f 45 5f 55 4e 4b 4e 4f 57 ("SCARD_E_UNKNOW 2620: 4e 5f 52 45 41 44 45 52 22 29 3b 0a 09 09 63 61 N_READER");...ca 2630: 73 65 20 53 43 41 52 44 5f 45 5f 54 49 4d 45 4f se SCARD_E_TIMEO 2640: 55 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 UT:....return("S 2650: 43 41 52 44 5f 45 5f 54 49 4d 45 4f 55 54 22 29 CARD_E_TIMEOUT") 2660: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 ;...case SCARD_E 2670: 5f 53 48 41 52 49 4e 47 5f 56 49 4f 4c 41 54 49 _SHARING_VIOLATI 2680: 4f 4e 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 ON:....return("S 2690: 43 41 52 44 5f 45 5f 53 48 41 52 49 4e 47 5f 56 CARD_E_SHARING_V 26a0: 49 4f 4c 41 54 49 4f 4e 22 29 3b 0a 09 09 63 61 IOLATION");...ca 26b0: 73 65 20 53 43 41 52 44 5f 45 5f 4e 4f 5f 53 4d se SCARD_E_NO_SM 26c0: 41 52 54 43 41 52 44 3a 0a 09 09 09 72 65 74 75 ARTCARD:....retu 26d0: 72 6e 28 22 53 43 41 52 44 5f 45 5f 4e 4f 5f 53 rn("SCARD_E_NO_S 26e0: 4d 41 52 54 43 41 52 44 22 29 3b 0a 09 09 63 61 MARTCARD");...ca 26f0: 73 65 20 53 43 41 52 44 5f 45 5f 55 4e 4b 4e 4f se SCARD_E_UNKNO 2700: 57 4e 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 WN_CARD:....retu 2710: 72 6e 28 22 53 43 41 52 44 5f 45 5f 55 4e 4b 4e rn("SCARD_E_UNKN 2720: 4f 57 4e 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 OWN_CARD");...ca 2730: 73 65 20 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f se SCARD_E_PROTO 2740: 5f 4d 49 53 4d 41 54 43 48 3a 0a 09 09 09 72 65 _MISMATCH:....re 2750: 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 50 52 turn("SCARD_E_PR 2760: 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 22 29 3b 0a OTO_MISMATCH");. 2770: 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 4e ..case SCARD_E_N 2780: 4f 54 5f 52 45 41 44 59 3a 0a 09 09 09 72 65 74 OT_READY:....ret 2790: 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 4e 4f 54 urn("SCARD_E_NOT 27a0: 5f 52 45 41 44 59 22 29 3b 0a 09 09 63 61 73 65 _READY");...case 27b0: 20 53 43 41 52 44 5f 45 5f 53 59 53 54 45 4d 5f SCARD_E_SYSTEM_ 27c0: 43 41 4e 43 45 4c 4c 45 44 3a 0a 09 09 09 72 65 CANCELLED:....re 27d0: 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 53 59 turn("SCARD_E_SY 27e0: 53 54 45 4d 5f 43 41 4e 43 45 4c 4c 45 44 22 29 STEM_CANCELLED") 27f0: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 ;...case SCARD_E 2800: 5f 4e 4f 54 5f 54 52 41 4e 53 41 43 54 45 44 3a _NOT_TRANSACTED: 2810: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 2820: 44 5f 45 5f 4e 4f 54 5f 54 52 41 4e 53 41 43 54 D_E_NOT_TRANSACT 2830: 45 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 ED");...case SCA 2840: 52 44 5f 45 5f 52 45 41 44 45 52 5f 55 4e 41 56 RD_E_READER_UNAV 2850: 41 49 4c 41 42 4c 45 3a 0a 09 09 09 72 65 74 75 AILABLE:....retu 2860: 72 6e 28 22 53 43 41 52 44 5f 45 5f 52 45 41 44 rn("SCARD_E_READ 2870: 45 52 5f 55 4e 41 56 41 49 4c 41 42 4c 45 22 29 ER_UNAVAILABLE") 2880: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 57 ;...case SCARD_W 2890: 5f 55 4e 53 55 50 50 4f 52 54 45 44 5f 43 41 52 _UNSUPPORTED_CAR 28a0: 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 D:....return("SC 28b0: 41 52 44 5f 57 5f 55 4e 53 55 50 50 4f 52 54 45 ARD_W_UNSUPPORTE 28c0: 44 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 D_CARD");...case 28d0: 20 53 43 41 52 44 5f 57 5f 55 4e 52 45 53 50 4f SCARD_W_UNRESPO 28e0: 4e 53 49 56 45 5f 43 41 52 44 3a 0a 09 09 09 72 NSIVE_CARD:....r 28f0: 65 74 75 72 6e 28 22 53 43 41 52 44 5f 57 5f 55 eturn("SCARD_W_U 2900: 4e 52 45 53 50 4f 4e 53 49 56 45 5f 43 41 52 44 NRESPONSIVE_CARD 2910: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 2920: 5f 57 5f 55 4e 50 4f 57 45 52 45 44 5f 43 41 52 _W_UNPOWERED_CAR 2930: 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 D:....return("SC 2940: 41 52 44 5f 57 5f 55 4e 50 4f 57 45 52 45 44 5f ARD_W_UNPOWERED_ 2950: 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 20 53 CARD");...case S 2960: 43 41 52 44 5f 57 5f 52 45 53 45 54 5f 43 41 52 CARD_W_RESET_CAR 2970: 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 D:....return("SC 2980: 41 52 44 5f 57 5f 52 45 53 45 54 5f 43 41 52 44 ARD_W_RESET_CARD 2990: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 29a0: 5f 57 5f 52 45 4d 4f 56 45 44 5f 43 41 52 44 3a _W_REMOVED_CARD: 29b0: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 29c0: 44 5f 57 5f 52 45 4d 4f 56 45 44 5f 43 41 52 44 D_W_REMOVED_CARD 29d0: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 29e0: 5f 45 5f 50 43 49 5f 54 4f 4f 5f 53 4d 41 4c 4c _E_PCI_TOO_SMALL 29f0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 :....return("SCA 2a00: 52 44 5f 45 5f 50 43 49 5f 54 4f 4f 5f 53 4d 41 RD_E_PCI_TOO_SMA 2a10: 4c 4c 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 LL");...case SCA 2a20: 52 44 5f 45 5f 52 45 41 44 45 52 5f 55 4e 53 55 RD_E_READER_UNSU 2a30: 50 50 4f 52 54 45 44 3a 0a 09 09 09 72 65 74 75 PPORTED:....retu 2a40: 72 6e 28 22 53 43 41 52 44 5f 45 5f 52 45 41 44 rn("SCARD_E_READ 2a50: 45 52 5f 55 4e 53 55 50 50 4f 52 54 45 44 22 29 ER_UNSUPPORTED") 2a60: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 ;...case SCARD_E 2a70: 5f 44 55 50 4c 49 43 41 54 45 5f 52 45 41 44 45 _DUPLICATE_READE 2a80: 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 R:....return("SC 2a90: 41 52 44 5f 45 5f 44 55 50 4c 49 43 41 54 45 5f ARD_E_DUPLICATE_ 2aa0: 52 45 41 44 45 52 22 29 3b 0a 09 09 63 61 73 65 READER");...case 2ab0: 20 53 43 41 52 44 5f 45 5f 43 41 52 44 5f 55 4e SCARD_E_CARD_UN 2ac0: 53 55 50 50 4f 52 54 45 44 3a 0a 09 09 09 72 65 SUPPORTED:....re 2ad0: 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 43 41 turn("SCARD_E_CA 2ae0: 52 44 5f 55 4e 53 55 50 50 4f 52 54 45 44 22 29 RD_UNSUPPORTED") 2af0: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 ;...case SCARD_E 2b00: 5f 4e 4f 5f 53 45 52 56 49 43 45 3a 0a 09 09 09 _NO_SERVICE:.... 2b10: 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f return("SCARD_E_ 2b20: 4e 4f 5f 53 45 52 56 49 43 45 22 29 3b 0a 09 09 NO_SERVICE");... 2b30: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 53 45 52 case SCARD_E_SER 2b40: 56 49 43 45 5f 53 54 4f 50 50 45 44 3a 0a 09 09 VICE_STOPPED:... 2b50: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 2b60: 5f 53 45 52 56 49 43 45 5f 53 54 4f 50 50 45 44 _SERVICE_STOPPED 2b70: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 2b80: 5f 57 5f 49 4e 53 45 52 54 45 44 5f 43 41 52 44 _W_INSERTED_CARD 2b90: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 :....return("SCA 2ba0: 52 44 5f 57 5f 49 4e 53 45 52 54 45 44 5f 43 41 RD_W_INSERTED_CA 2bb0: 52 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 RD");...case SCA 2bc0: 52 44 5f 45 5f 55 4e 53 55 50 50 4f 52 54 45 44 RD_E_UNSUPPORTED 2bd0: 5f 46 45 41 54 55 52 45 3a 0a 09 09 09 72 65 74 _FEATURE:....ret 2be0: 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 55 4e 53 urn("SCARD_E_UNS 2bf0: 55 50 50 4f 52 54 45 44 5f 46 45 41 54 55 52 45 UPPORTED_FEATURE 2c00: 22 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 ");..}...return( 2c10: 22 55 4e 4b 4e 4f 57 4e 22 29 3b 0a 7d 0a 0a 73 "UNKNOWN");.}..s 2c20: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 tatic const char 2c30: 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 *CACKEY_DEBUG_F 2c40: 55 4e 43 5f 4f 42 4a 49 44 5f 54 4f 5f 53 54 52 UNC_OBJID_TO_STR 2c50: 28 75 69 6e 74 31 36 5f 74 20 6f 62 6a 69 64 29 (uint16_t objid) 2c60: 20 7b 0a 09 73 77 69 74 63 68 20 28 6f 62 6a 69 {..switch (obji 2c70: 64 29 20 7b 0a 09 09 63 61 73 65 20 30 78 32 30 d) {...case 0x20 2c80: 30 30 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 00:....return("C 2c90: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 2ca0: 47 45 4e 45 52 41 4c 49 4e 46 4f 22 29 3b 0a 09 GENERALINFO");.. 2cb0: 09 63 61 73 65 20 30 78 32 31 30 30 3a 0a 09 09 .case 0x2100:... 2cc0: 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f .return("CACKEY_ 2cd0: 54 4c 56 5f 4f 42 4a 49 44 5f 50 52 4f 50 45 52 TLV_OBJID_PROPER 2ce0: 53 4f 4e 41 4c 49 4e 46 4f 22 29 3b 0a 09 09 63 SONALINFO");...c 2cf0: 61 73 65 20 30 78 33 30 30 30 3a 0a 09 09 09 72 ase 0x3000:....r 2d00: 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c eturn("CACKEY_TL 2d10: 56 5f 4f 42 4a 49 44 5f 41 43 43 45 53 53 43 4f V_OBJID_ACCESSCO 2d20: 4e 54 52 4f 4c 22 29 3b 0a 09 09 63 61 73 65 20 NTROL");...case 2d30: 30 78 34 30 30 30 3a 0a 09 09 09 72 65 74 75 72 0x4000:....retur 2d40: 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 n("CACKEY_TLV_OB 2d50: 4a 49 44 5f 4c 4f 47 49 4e 22 29 3b 0a 09 09 63 JID_LOGIN");...c 2d60: 61 73 65 20 30 78 35 30 30 30 3a 0a 09 09 09 72 ase 0x5000:....r 2d70: 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c eturn("CACKEY_TL 2d80: 56 5f 4f 42 4a 49 44 5f 43 41 52 44 49 4e 46 4f V_OBJID_CARDINFO 2d90: 22 29 3b 0a 09 09 63 61 73 65 20 30 78 36 30 30 ");...case 0x600 2da0: 30 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 0:....return("CA 2db0: 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 42 CKEY_TLV_OBJID_B 2dc0: 49 4f 4d 45 54 52 49 43 53 22 29 3b 0a 09 09 63 IOMETRICS");...c 2dd0: 61 73 65 20 30 78 37 30 30 30 3a 0a 09 09 09 72 ase 0x7000:....r 2de0: 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c eturn("CACKEY_TL 2df0: 56 5f 4f 42 4a 49 44 5f 44 49 47 49 54 41 4c 53 V_OBJID_DIGITALS 2e00: 49 47 43 45 52 54 22 29 3b 0a 09 09 63 61 73 65 IGCERT");...case 2e10: 20 30 78 30 32 30 30 3a 0a 09 09 09 72 65 74 75 0x0200:....retu 2e20: 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f rn("CACKEY_TLV_O 2e30: 42 4a 49 44 5f 43 41 43 5f 50 45 52 53 4f 4e 22 BJID_CAC_PERSON" 2e40: 29 3b 0a 09 09 63 61 73 65 20 30 78 30 32 30 32 );...case 0x0202 2e50: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 :....return("CAC 2e60: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 KEY_TLV_OBJID_CA 2e70: 43 5f 42 45 4e 45 46 49 54 53 22 29 3b 0a 09 09 C_BENEFITS");... 2e80: 63 61 73 65 20 30 78 30 32 30 33 3a 0a 09 09 09 case 0x0203:.... 2e90: 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 return("CACKEY_T 2ea0: 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 4f 54 48 LV_OBJID_CAC_OTH 2eb0: 45 52 42 45 4e 45 46 49 54 53 22 29 3b 0a 09 09 ERBENEFITS");... 2ec0: 63 61 73 65 20 30 78 30 32 30 31 3a 0a 09 09 09 case 0x0201:.... 2ed0: 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 return("CACKEY_T 2ee0: 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 45 52 LV_OBJID_CAC_PER 2ef0: 53 4f 4e 4e 45 4c 22 29 3b 0a 09 09 63 61 73 65 SONNEL");...case 2f00: 20 30 78 30 32 46 45 3a 0a 09 09 09 72 65 74 75 0x02FE:....retu 2f10: 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f rn("CACKEY_TLV_O 2f20: 42 4a 49 44 5f 43 41 43 5f 50 4b 49 43 45 52 54 BJID_CAC_PKICERT 2f30: 22 29 3b 0a 09 7d 0a 09 0a 09 72 65 74 75 72 6e ");..}....return 2f40: 28 22 55 4e 4b 4e 4f 57 4e 22 29 3b 0a 7d 0a 0a ("UNKNOWN");.}.. 2f50: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 static const cha 2f60: 72 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 47 5f r *CACKEY_DEBUG_ 2f70: 46 55 4e 43 5f 41 50 50 54 59 50 45 5f 54 4f 5f FUNC_APPTYPE_TO_ 2f80: 53 54 52 28 75 69 6e 74 38 5f 74 20 61 70 70 74 STR(uint8_t appt 2f90: 79 70 65 29 20 7b 0a 09 73 77 69 74 63 68 20 28 ype) {..switch ( 2fa0: 61 70 70 74 79 70 65 29 20 7b 0a 09 09 63 61 73 apptype) {...cas 2fb0: 65 20 30 78 30 30 3a 0a 09 09 09 72 65 74 75 72 e 0x00:....retur 2fc0: 6e 28 22 4e 4f 4e 45 22 29 3b 0a 09 09 63 61 73 n("NONE");...cas 2fd0: 65 20 30 78 30 31 3a 0a 09 09 09 72 65 74 75 72 e 0x01:....retur 2fe0: 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 n("CACKEY_TLV_AP 2ff0: 50 5f 47 45 4e 45 52 49 43 22 29 3b 0a 09 09 63 P_GENERIC");...c 3000: 61 73 65 20 30 78 30 32 3a 0a 09 09 09 72 65 74 ase 0x02:....ret 3010: 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f urn("CACKEY_TLV_ 3020: 41 50 50 5f 53 4b 49 22 29 3b 0a 09 09 63 61 73 APP_SKI");...cas 3030: 65 20 30 78 30 33 3a 0a 09 09 09 72 65 74 75 72 e 0x03:....retur 3040: 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 n("CACKEY_TLV_AP 3050: 50 5f 47 45 4e 45 52 49 43 20 7c 20 43 41 43 4b P_GENERIC | CACK 3060: 45 59 5f 54 4c 56 5f 41 50 50 5f 53 4b 49 22 29 EY_TLV_APP_SKI") 3070: 3b 0a 09 09 63 61 73 65 20 30 78 30 34 3a 0a 09 ;...case 0x04:.. 3080: 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 ..return("CACKEY 3090: 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 22 29 3b 0a _TLV_APP_PKI");. 30a0: 09 09 63 61 73 65 20 30 78 30 35 3a 0a 09 09 09 ..case 0x05:.... 30b0: 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 return("CACKEY_T 30c0: 4c 56 5f 41 50 50 5f 47 45 4e 45 52 49 43 20 7c LV_APP_GENERIC | 30d0: 20 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f CACKEY_TLV_APP_ 30e0: 50 4b 49 22 29 3b 0a 09 09 63 61 73 65 20 30 78 PKI");...case 0x 30f0: 30 36 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 06:....return("C 3100: 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 53 4b ACKEY_TLV_APP_SK 3110: 49 20 7c 20 43 41 43 4b 45 59 5f 54 4c 56 5f 41 I | CACKEY_TLV_A 3120: 50 50 5f 50 4b 49 22 29 3b 0a 09 09 63 61 73 65 PP_PKI");...case 3130: 20 30 78 30 37 3a 0a 09 09 09 72 65 74 75 72 6e 0x07:....return 3140: 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 ("CACKEY_TLV_APP 3150: 5f 47 45 4e 45 52 49 43 20 7c 20 43 41 43 4b 45 _GENERIC | CACKE 3160: 59 5f 54 4c 56 5f 41 50 50 5f 53 4b 49 20 7c 20 Y_TLV_APP_SKI | 3170: 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 CACKEY_TLV_APP_P 3180: 4b 49 22 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 KI");..}...retur 3190: 6e 28 22 49 4e 56 41 4c 49 44 22 29 3b 0a 7d 0a n("INVALID");.}. 31a0: 0a 23 20 20 64 65 66 69 6e 65 20 6d 61 6c 6c 6f .# define mallo 31b0: 63 28 78 29 20 43 41 43 4b 45 59 5f 44 45 42 55 c(x) CACKEY_DEBU 31c0: 47 5f 46 55 4e 43 5f 4d 41 4c 4c 4f 43 28 78 2c G_FUNC_MALLOC(x, 31d0: 20 5f 5f 66 75 6e 63 5f 5f 29 0a 23 20 20 64 65 __func__).# de 31e0: 66 69 6e 65 20 72 65 61 6c 6c 6f 63 28 78 2c 20 fine realloc(x, 31f0: 79 29 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f y) CACKEY_DEBUG_ 3200: 46 55 4e 43 5f 52 45 41 4c 4c 4f 43 28 78 2c 20 FUNC_REALLOC(x, 3210: 79 2c 20 5f 5f 66 75 6e 63 5f 5f 29 0a 23 65 6c y, __func__).#el 3220: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 se.# define CAC 3230: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 3240: 28 78 2e 2e 2e 29 20 2f 2a 2a 2f 0a 23 20 20 64 (x...) /**/.# d 3250: 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 efine CACKEY_DEB 3260: 55 47 5f 50 52 49 4e 54 42 55 46 28 66 2c 20 78 UG_PRINTBUF(f, x 3270: 2c 20 79 29 20 2f 2a 2a 2f 0a 23 20 20 64 65 66 , y) /**/.# def 3280: 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 ine CACKEY_DEBUG 3290: 5f 50 45 52 52 4f 52 28 78 29 20 2f 2a 2a 2f 0a _PERROR(x) /**/. 32a0: 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 # define CACKEY 32b0: 5f 44 45 42 55 47 5f 46 55 4e 43 5f 54 41 47 5f _DEBUG_FUNC_TAG_ 32c0: 54 4f 5f 53 54 52 28 78 29 20 22 44 45 42 55 47 TO_STR(x) "DEBUG 32d0: 5f 44 49 53 41 42 4c 45 44 22 0a 23 20 20 64 65 _DISABLED".# de 32e0: 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 fine CACKEY_DEBU 32f0: 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f G_FUNC_SCARDERR_ 3300: 54 4f 5f 53 54 52 28 78 29 20 22 44 45 42 55 47 TO_STR(x) "DEBUG 3310: 5f 44 49 53 41 42 4c 45 44 22 0a 23 20 20 64 65 _DISABLED".# de 3320: 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 fine CACKEY_DEBU 3330: 47 5f 46 55 4e 43 5f 4f 42 4a 49 44 5f 54 4f 5f G_FUNC_OBJID_TO_ 3340: 53 54 52 28 78 29 20 22 44 45 42 55 47 5f 44 49 STR(x) "DEBUG_DI 3350: 53 41 42 4c 45 44 22 0a 23 20 20 64 65 66 69 6e SABLED".# defin 3360: 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 e CACKEY_DEBUG_F 3370: 55 4e 43 5f 41 50 50 54 59 50 45 5f 54 4f 5f 53 UNC_APPTYPE_TO_S 3380: 54 52 28 78 29 20 22 44 45 42 55 47 5f 44 49 53 TR(x) "DEBUG_DIS 3390: 41 42 4c 45 44 22 0a 23 65 6e 64 69 66 0a 0a 73 ABLED".#endif..s 33a0: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 70 63 73 truct cackey_pcs 33b0: 63 5f 69 64 65 6e 74 69 74 79 20 7b 0a 09 75 6e c_identity {..un 33c0: 73 69 67 6e 65 64 20 63 68 61 72 20 61 70 70 6c signed char appl 33d0: 65 74 5b 37 5d 3b 0a 09 75 69 6e 74 31 36 5f 74 et[7];..uint16_t 33e0: 20 66 69 6c 65 3b 0a 0a 09 75 6e 73 69 67 6e 65 file;...unsigne 33f0: 64 20 63 68 61 72 20 2a 6c 61 62 65 6c 3b 0a 0a d char *label;.. 3400: 09 73 69 7a 65 5f 74 20 63 65 72 74 69 66 69 63 .size_t certific 3410: 61 74 65 5f 6c 65 6e 3b 0a 09 75 6e 73 69 67 6e ate_len;..unsign 3420: 65 64 20 63 68 61 72 20 2a 63 65 72 74 69 66 69 ed char *certifi 3430: 63 61 74 65 3b 0a 7d 3b 0a 0a 73 74 72 75 63 74 cate;.};..struct 3440: 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 cackey_identity 3450: 20 7b 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 {..struct cacke 3460: 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 y_pcsc_identity 3470: 2a 69 64 65 6e 74 69 74 79 3b 0a 0a 09 43 4b 5f *identity;...CK_ 3480: 41 54 54 52 49 42 55 54 45 20 2a 61 74 74 72 69 ATTRIBUTE *attri 3490: 62 75 74 65 73 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 butes;..CK_ULONG 34a0: 20 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e attributes_coun 34b0: 74 3b 0a 7d 3b 0a 0a 73 74 72 75 63 74 20 63 61 t;.};..struct ca 34c0: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 20 7b 0a 09 ckey_session {.. 34d0: 69 6e 74 20 61 63 74 69 76 65 3b 0a 0a 09 43 4b int active;...CK 34e0: 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 3b _SLOT_ID slotID; 34f0: 0a 0a 09 43 4b 5f 53 54 41 54 45 20 73 74 61 74 ...CK_STATE stat 3500: 65 3b 0a 09 43 4b 5f 46 4c 41 47 53 20 66 6c 61 e;..CK_FLAGS fla 3510: 67 73 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 75 6c gs;..CK_ULONG ul 3520: 44 65 76 69 63 65 45 72 72 6f 72 3b 0a 09 43 4b DeviceError;..CK 3530: 5f 56 4f 49 44 5f 50 54 52 20 70 41 70 70 6c 69 _VOID_PTR pAppli 3540: 63 61 74 69 6f 6e 3b 0a 09 43 4b 5f 4e 4f 54 49 cation;..CK_NOTI 3550: 46 59 20 4e 6f 74 69 66 79 3b 0a 0a 09 73 74 72 FY Notify;...str 3560: 75 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 uct cackey_ident 3570: 69 74 79 20 2a 69 64 65 6e 74 69 74 69 65 73 3b ity *identities; 3580: 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 ..unsigned long 3590: 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 identities_count 35a0: 3b 0a 0a 09 69 6e 74 20 73 65 61 72 63 68 5f 61 ;...int search_a 35b0: 63 74 69 76 65 3b 0a 09 43 4b 5f 41 54 54 52 49 ctive;..CK_ATTRI 35c0: 42 55 54 45 5f 50 54 52 20 73 65 61 72 63 68 5f BUTE_PTR search_ 35d0: 71 75 65 72 79 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 query;..CK_ULONG 35e0: 20 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f search_query_co 35f0: 75 6e 74 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c unt;..unsigned l 3600: 6f 6e 67 20 73 65 61 72 63 68 5f 63 75 72 72 5f ong search_curr_ 3610: 69 64 3b 0a 0a 09 69 6e 74 20 73 69 67 6e 5f 61 id;...int sign_a 3620: 63 74 69 76 65 3b 0a 09 43 4b 5f 4d 45 43 48 41 ctive;..CK_MECHA 3630: 4e 49 53 4d 5f 54 59 50 45 20 73 69 67 6e 5f 6d NISM_TYPE sign_m 3640: 65 63 68 61 6e 69 73 6d 3b 0a 09 43 4b 5f 42 59 echanism;..CK_BY 3650: 54 45 5f 50 54 52 20 73 69 67 6e 5f 62 75 66 3b TE_PTR sign_buf; 3660: 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 ..unsigned long 3670: 73 69 67 6e 5f 62 75 66 6c 65 6e 3b 0a 09 75 6e sign_buflen;..un 3680: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 73 69 67 6e signed long sign 3690: 5f 62 75 66 75 73 65 64 3b 0a 0a 09 69 6e 74 20 _bufused;...int 36a0: 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 3b 0a decrypt_active;. 36b0: 09 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 59 .CK_MECHANISM_TY 36c0: 50 45 20 64 65 63 72 79 70 74 5f 6d 65 63 68 61 PE decrypt_mecha 36d0: 6e 69 73 6d 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 nism;..CK_VOID_P 36e0: 54 52 20 64 65 63 72 79 70 74 5f 6d 65 63 68 5f TR decrypt_mech_ 36f0: 70 61 72 6d 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 parm;..CK_ULONG 3700: 64 65 63 72 79 70 74 5f 6d 65 63 68 5f 70 61 72 decrypt_mech_par 3710: 6d 6c 65 6e 3b 0a 0a 7d 3b 0a 0a 73 74 72 75 63 mlen;..};..struc 3720: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 7b 0a t cackey_slot {. 3730: 09 69 6e 74 20 61 63 74 69 76 65 3b 0a 0a 09 63 .int active;...c 3740: 68 61 72 20 2a 70 63 73 63 5f 72 65 61 64 65 72 har *pcsc_reader 3750: 3b 0a 0a 09 69 6e 74 20 70 63 73 63 5f 63 61 72 ;...int pcsc_car 3760: 64 5f 63 6f 6e 6e 65 63 74 65 64 3b 0a 09 53 43 d_connected;..SC 3770: 41 52 44 48 41 4e 44 4c 45 20 70 63 73 63 5f 63 ARDHANDLE pcsc_c 3780: 61 72 64 3b 0a 7d 3b 0a 0a 74 79 70 65 64 65 66 ard;.};..typedef 3790: 20 65 6e 75 6d 20 7b 0a 09 43 41 43 4b 45 59 5f enum {..CACKEY_ 37a0: 54 4c 56 5f 41 50 50 5f 47 45 4e 45 52 49 43 20 TLV_APP_GENERIC 37b0: 3d 20 30 78 30 31 2c 0a 09 43 41 43 4b 45 59 5f = 0x01,..CACKEY_ 37c0: 54 4c 56 5f 41 50 50 5f 53 4b 49 20 20 20 20 20 TLV_APP_SKI 37d0: 3d 20 30 78 30 32 2c 0a 09 43 41 43 4b 45 59 5f = 0x02,..CACKEY_ 37e0: 54 4c 56 5f 41 50 50 5f 50 4b 49 20 20 20 20 20 TLV_APP_PKI 37f0: 3d 20 30 78 30 34 0a 7d 20 63 61 63 6b 65 79 5f = 0x04.} cackey_ 3800: 74 6c 76 5f 61 70 70 74 79 70 65 3b 0a 0a 74 79 tlv_apptype;..ty 3810: 70 65 64 65 66 20 65 6e 75 6d 20 7b 0a 09 43 41 pedef enum {..CA 3820: 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 47 CKEY_TLV_OBJID_G 3830: 45 4e 45 52 41 4c 49 4e 46 4f 20 20 20 20 20 20 ENERALINFO 3840: 20 3d 20 30 78 32 30 30 30 2c 0a 09 43 41 43 4b = 0x2000,..CACK 3850: 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 50 52 4f EY_TLV_OBJID_PRO 3860: 50 45 52 53 4f 4e 41 4c 49 4e 46 4f 20 20 20 3d PERSONALINFO = 3870: 20 30 78 32 31 30 30 2c 0a 09 43 41 43 4b 45 59 0x2100,..CACKEY 3880: 5f 54 4c 56 5f 4f 42 4a 49 44 5f 41 43 43 45 53 _TLV_OBJID_ACCES 3890: 53 43 4f 4e 54 52 4f 4c 20 20 20 20 20 3d 20 30 SCONTROL = 0 38a0: 78 33 30 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 x3000,..CACKEY_T 38b0: 4c 56 5f 4f 42 4a 49 44 5f 4c 4f 47 49 4e 20 20 LV_OBJID_LOGIN 38c0: 20 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 34 = 0x4 38d0: 30 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 000,..CACKEY_TLV 38e0: 5f 4f 42 4a 49 44 5f 43 41 52 44 49 4e 46 4f 20 _OBJID_CARDINFO 38f0: 20 20 20 20 20 20 20 20 20 3d 20 30 78 35 30 30 = 0x500 3900: 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 0,..CACKEY_TLV_O 3910: 42 4a 49 44 5f 42 49 4f 4d 45 54 52 49 43 53 20 BJID_BIOMETRICS 3920: 20 20 20 20 20 20 20 3d 20 30 78 36 30 30 30 2c = 0x6000, 3930: 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a ..CACKEY_TLV_OBJ 3940: 49 44 5f 44 49 47 49 54 41 4c 53 49 47 43 45 52 ID_DIGITALSIGCER 3950: 54 20 20 20 20 3d 20 30 78 37 30 30 30 2c 0a 09 T = 0x7000,.. 3960: 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 CACKEY_TLV_OBJID 3970: 5f 43 41 43 5f 50 45 52 53 4f 4e 20 20 20 20 20 _CAC_PERSON 3980: 20 20 20 3d 20 30 78 30 32 30 30 2c 0a 09 43 41 = 0x0200,..CA 3990: 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 CKEY_TLV_OBJID_C 39a0: 41 43 5f 42 45 4e 45 46 49 54 53 20 20 20 20 20 AC_BENEFITS 39b0: 20 3d 20 30 78 30 32 30 32 2c 0a 09 43 41 43 4b = 0x0202,..CACK 39c0: 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 EY_TLV_OBJID_CAC 39d0: 5f 4f 54 48 45 52 42 45 4e 45 46 49 54 53 20 3d _OTHERBENEFITS = 39e0: 20 30 78 30 32 30 33 2c 0a 09 43 41 43 4b 45 59 0x0203,..CACKEY 39f0: 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 _TLV_OBJID_CAC_P 3a00: 45 52 53 4f 4e 4e 45 4c 20 20 20 20 20 3d 20 30 ERSONNEL = 0 3a10: 78 30 32 30 31 2c 0a 09 43 41 43 4b 45 59 5f 54 x0201,..CACKEY_T 3a20: 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 4b 49 LV_OBJID_CAC_PKI 3a30: 43 45 52 54 20 20 20 20 20 20 20 3d 20 30 78 30 CERT = 0x0 3a40: 32 46 45 0a 7d 20 63 61 63 6b 65 79 5f 74 6c 76 2FE.} cackey_tlv 3a50: 5f 6f 62 6a 65 63 74 69 64 3b 0a 0a 74 79 70 65 _objectid;..type 3a60: 64 65 66 20 65 6e 75 6d 20 7b 0a 09 43 41 43 4b def enum {..CACK 3a70: 45 59 5f 4c 4f 47 49 4e 5f 4f 4b 20 20 20 20 20 EY_LOGIN_OK 3a80: 3d 20 30 2c 0a 09 43 41 43 4b 45 59 5f 4c 4f 47 = 0,..CACKEY_LOG 3a90: 49 4e 5f 42 41 44 50 49 4e 20 3d 20 2d 31 2c 0a IN_BADPIN = -1,. 3aa0: 09 43 41 43 4b 45 59 5f 4c 4f 47 49 4e 5f 4c 4f .CACKEY_LOGIN_LO 3ab0: 43 4b 45 44 20 3d 20 2d 32 0a 7d 20 63 61 63 6b CKED = -2.} cack 3ac0: 65 79 5f 6c 6f 67 69 6e 5f 72 65 74 3b 0a 0a 73 ey_login_ret;..s 3ad0: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 truct cackey_tlv 3ae0: 5f 63 61 72 64 75 72 6c 20 7b 0a 09 75 6e 73 69 _cardurl {..unsi 3af0: 67 6e 65 64 20 63 68 61 72 20 20 20 20 20 20 20 gned char 3b00: 20 72 69 64 5b 35 5d 3b 0a 09 63 61 63 6b 65 79 rid[5];..cackey 3b10: 5f 74 6c 76 5f 61 70 70 74 79 70 65 20 20 20 61 _tlv_apptype a 3b20: 70 70 74 79 70 65 3b 0a 09 63 61 63 6b 65 79 5f pptype;..cackey_ 3b30: 74 6c 76 5f 6f 62 6a 65 63 74 69 64 20 20 6f 62 tlv_objectid ob 3b40: 6a 65 63 74 69 64 3b 0a 09 63 61 63 6b 65 79 5f jectid;..cackey_ 3b50: 74 6c 76 5f 6f 62 6a 65 63 74 69 64 20 20 61 70 tlv_objectid ap 3b60: 70 69 64 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 pid;..unsigned c 3b70: 68 61 72 20 20 20 20 20 20 20 20 70 69 6e 69 64 har pinid 3b80: 3b 0a 7d 3b 0a 0a 73 74 72 75 63 74 20 63 61 63 ;.};..struct cac 3b90: 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 3b 0a key_tlv_entity;. 3ba0: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c struct cackey_tl 3bb0: 76 5f 65 6e 74 69 74 79 20 7b 0a 09 75 69 6e 74 v_entity {..uint 3bc0: 38 5f 74 20 74 61 67 3b 0a 09 73 69 7a 65 5f 74 8_t tag;..size_t 3bd0: 20 6c 65 6e 67 74 68 3b 0a 0a 09 75 6e 69 6f 6e length;...union 3be0: 20 7b 0a 09 09 76 6f 69 64 20 2a 76 61 6c 75 65 {...void *value 3bf0: 3b 0a 09 09 73 74 72 75 63 74 20 63 61 63 6b 65 ;...struct cacke 3c00: 79 5f 74 6c 76 5f 63 61 72 64 75 72 6c 20 2a 76 y_tlv_cardurl *v 3c10: 61 6c 75 65 5f 63 61 72 64 75 72 6c 3b 0a 09 09 alue_cardurl;... 3c20: 75 69 6e 74 38 5f 74 20 76 61 6c 75 65 5f 62 79 uint8_t value_by 3c30: 74 65 3b 0a 09 7d 3b 0a 0a 09 73 74 72 75 63 74 te;..};...struct 3c40: 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 cackey_tlv_enti 3c50: 74 79 20 2a 5f 6e 65 78 74 3b 0a 7d 3b 0a 0a 2f ty *_next;.};../ 3c60: 2a 20 43 41 43 4b 45 59 20 47 6c 6f 62 61 6c 20 * CACKEY Global 3c70: 48 61 6e 64 6c 65 73 20 2a 2f 0a 73 74 61 74 69 Handles */.stati 3c80: 63 20 76 6f 69 64 20 2a 63 61 63 6b 65 79 5f 62 c void *cackey_b 3c90: 69 67 6c 6f 63 6b 20 3d 20 4e 55 4c 4c 3b 0a 73 iglock = NULL;.s 3ca0: 74 61 74 69 63 20 73 74 72 75 63 74 20 63 61 63 tatic struct cac 3cb0: 6b 65 79 5f 73 65 73 73 69 6f 6e 20 63 61 63 6b key_session cack 3cc0: 65 79 5f 73 65 73 73 69 6f 6e 73 5b 31 32 38 5d ey_sessions[128] 3cd0: 3b 0a 73 74 61 74 69 63 20 73 74 72 75 63 74 20 ;.static struct 3ce0: 63 61 63 6b 65 79 5f 73 6c 6f 74 20 63 61 63 6b cackey_slot cack 3cf0: 65 79 5f 73 6c 6f 74 73 5b 31 32 38 5d 3b 0a 73 ey_slots[128];.s 3d00: 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 tatic int cackey 3d10: 5f 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d 20 30 _initialized = 0 3d20: 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61 63 ;.static int cac 3d30: 6b 65 79 5f 62 69 67 6c 6f 63 6b 5f 69 6e 69 74 key_biglock_init 3d40: 20 3d 20 30 3b 0a 43 4b 5f 43 5f 49 4e 49 54 49 = 0;.CK_C_INITI 3d50: 41 4c 49 5a 45 5f 41 52 47 53 20 63 61 63 6b 65 ALIZE_ARGS cacke 3d60: 79 5f 61 72 67 73 3b 0a 0a 2f 2a 20 50 43 53 43 y_args;../* PCSC 3d70: 20 47 6c 6f 62 61 6c 20 48 61 6e 64 6c 65 73 20 Global Handles 3d80: 2a 2f 0a 73 74 61 74 69 63 20 4c 50 53 43 41 52 */.static LPSCAR 3d90: 44 43 4f 4e 54 45 58 54 20 63 61 63 6b 65 79 5f DCONTEXT cackey_ 3da0: 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 20 4e 55 pcsc_handle = NU 3db0: 4c 4c 3b 0a 0a 73 74 61 74 69 63 20 75 6e 73 69 LL;..static unsi 3dc0: 67 6e 65 64 20 6c 6f 6e 67 20 63 61 63 6b 65 79 gned long cackey 3dd0: 5f 67 65 74 76 65 72 73 69 6f 6e 28 76 6f 69 64 _getversion(void 3de0: 29 20 7b 0a 09 73 74 61 74 69 63 20 75 6e 73 69 ) {..static unsi 3df0: 67 6e 65 64 20 6c 6f 6e 67 20 72 65 74 76 61 6c gned long retval 3e00: 20 3d 20 32 35 35 3b 0a 09 75 6e 73 69 67 6e 65 = 255;..unsigne 3e10: 64 20 6c 6f 6e 67 20 6d 61 6a 6f 72 20 3d 20 30 d long major = 0 3e20: 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ;..unsigned long 3e30: 20 6d 69 6e 6f 72 20 3d 20 30 3b 0a 09 63 68 61 minor = 0;..cha 3e40: 72 20 2a 6d 61 6a 6f 72 5f 73 74 72 20 3d 20 4e r *major_str = N 3e50: 55 4c 4c 3b 0a 09 63 68 61 72 20 2a 6d 69 6e 6f ULL;..char *mino 3e60: 72 5f 73 74 72 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 r_str = NULL;... 3e70: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 3e80: 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 3e90: 0a 09 69 66 20 28 72 65 74 76 61 6c 20 21 3d 20 ..if (retval != 3ea0: 32 35 35 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 255) {...CACKEY_ 3eb0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 3ec0: 74 75 72 6e 69 6e 67 20 30 78 25 6c 78 20 28 63 turning 0x%lx (c 3ed0: 61 63 68 65 64 29 2e 22 2c 20 72 65 74 76 61 6c ached).", retval 3ee0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 72 65 74 );....return(ret 3ef0: 76 61 6c 29 3b 0a 09 7d 0a 0a 09 72 65 74 76 61 val);..}...retva 3f00: 6c 20 3d 20 30 3b 0a 0a 23 69 66 64 65 66 20 50 l = 0;..#ifdef P 3f10: 41 43 4b 41 47 45 5f 56 45 52 53 49 4f 4e 0a 20 ACKAGE_VERSION. 3f20: 20 20 20 20 20 20 20 6d 61 6a 6f 72 5f 73 74 72 major_str 3f30: 20 3d 20 50 41 43 4b 41 47 45 5f 56 45 52 53 49 = PACKAGE_VERSI 3f40: 4f 4e 3b 0a 09 69 66 20 28 6d 61 6a 6f 72 5f 73 ON;..if (major_s 3f50: 74 72 29 20 7b 0a 09 20 20 20 20 20 20 20 20 6d tr) {.. m 3f60: 61 6a 6f 72 20 3d 20 73 74 72 74 6f 75 6c 28 6d ajor = strtoul(m 3f70: 61 6a 6f 72 5f 73 74 72 2c 20 26 6d 69 6e 6f 72 ajor_str, &minor 3f80: 5f 73 74 72 2c 20 31 30 29 3b 0a 0a 09 09 69 66 _str, 10);....if 3f90: 20 28 6d 69 6e 6f 72 5f 73 74 72 29 20 7b 0a 09 (minor_str) {.. 3fa0: 09 09 6d 69 6e 6f 72 20 3d 20 73 74 72 74 6f 75 ..minor = strtou 3fb0: 6c 28 6d 69 6e 6f 72 5f 73 74 72 20 2b 20 31 2c l(minor_str + 1, 3fc0: 20 4e 55 4c 4c 2c 20 31 30 29 3b 0a 09 09 7d 0a NULL, 10);...}. 3fd0: 09 7d 0a 0a 09 72 65 74 76 61 6c 20 3d 20 28 6d .}...retval = (m 3fe0: 61 6a 6f 72 20 3c 3c 20 31 36 29 20 7c 20 28 6d ajor << 16) | (m 3ff0: 69 6e 6f 72 20 3c 3c 20 38 29 3b 0a 23 65 6e 64 inor << 8);.#end 4000: 69 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 if...CACKEY_DEBU 4010: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 4020: 69 6e 67 20 30 78 25 6c 78 22 2c 20 72 65 74 76 ing 0x%lx", retv 4030: 61 6c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 al);...return(re 4040: 74 76 61 6c 29 3b 0a 7d 0a 0a 2f 2a 20 50 43 2f tval);.}../* PC/ 4050: 53 43 20 52 65 6c 61 74 65 64 20 46 75 6e 63 74 SC Related Funct 4060: 69 6f 6e 73 20 2a 2f 0a 73 74 61 74 69 63 20 76 ions */.static v 4070: 6f 69 64 20 63 61 63 6b 65 79 5f 73 6c 6f 74 73 oid cackey_slots 4080: 5f 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 _disconnect_all( 4090: 76 6f 69 64 29 20 7b 0a 09 75 69 6e 74 33 32 5f void) {..uint32_ 40a0: 74 20 69 64 78 3b 0a 0a 09 43 41 43 4b 45 59 5f t idx;...CACKEY_ 40b0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 40c0: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 66 6f 72 20 28 lled.");...for ( 40d0: 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 28 idx = 0; idx < ( 40e0: 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c sizeof(cackey_sl 40f0: 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 ots) / sizeof(ca 4100: 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 3b ckey_slots[0])); 4110: 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 idx++) {...if ( 4120: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx 4130: 5d 2e 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e ].pcsc_card_conn 4140: 65 63 74 65 64 29 20 7b 0a 09 09 09 43 41 43 4b ected) {....CACK 4150: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 4160: 22 53 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 "SCardDisconnect 4170: 28 25 6c 75 29 20 63 61 6c 6c 65 64 22 2c 20 28 (%lu) called", ( 4180: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 69 unsigned long) i 4190: 64 78 29 3b 0a 0a 09 09 09 53 43 61 72 64 44 69 dx);.....SCardDi 41a0: 73 63 6f 6e 6e 65 63 74 28 63 61 63 6b 65 79 5f sconnect(cackey_ 41b0: 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f slots[idx].pcsc_ 41c0: 63 61 72 64 2c 20 53 43 41 52 44 5f 4c 45 41 56 card, SCARD_LEAV 41d0: 45 5f 43 41 52 44 29 3b 0a 09 09 7d 0a 0a 09 09 E_CARD);...}.... 41e0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx 41f0: 5d 2e 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e ].pcsc_card_conn 4200: 65 63 74 65 64 20 3d 20 30 3b 0a 09 7d 0a 0a 09 ected = 0;..}... 4210: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 4220: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 22 29 NTF("Returning") 4230: 3b 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 73 ;...return;.}..s 4240: 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 tatic int cackey 4250: 5f 70 63 73 63 5f 63 6f 6e 6e 65 63 74 28 76 6f _pcsc_connect(vo 4260: 69 64 29 20 7b 0a 09 4c 4f 4e 47 20 73 63 61 72 id) {..LONG scar 4270: 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 d_est_context_re 4280: 74 3b 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 t;.#ifdef HAVE_S 4290: 43 41 52 44 49 53 56 41 4c 49 44 43 4f 4e 54 45 CARDISVALIDCONTE 42a0: 58 54 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f 69 XT..LONG scard_i 42b0: 73 76 61 6c 69 64 5f 72 65 74 3b 0a 23 65 6e 64 svalid_ret;.#end 42c0: 69 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 if...CACKEY_DEBU 42d0: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 42e0: 2e 22 29 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 .");...if (cacke 42f0: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 3d y_pcsc_handle == 4300: 20 4e 55 4c 4c 29 20 7b 0a 09 09 63 61 63 6b 65 NULL) {...cacke 4310: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 20 y_pcsc_handle = 4320: 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 malloc(sizeof(*c 4330: 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c ackey_pcsc_handl 4340: 65 29 29 3b 0a 09 09 69 66 20 28 63 61 63 6b 65 e));...if (cacke 4350: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 3d y_pcsc_handle == 4360: 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 43 41 43 4b NULL) {....CACK 4370: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 4380: 22 43 61 6c 6c 20 74 6f 20 6d 61 6c 6c 6f 63 28 "Call to malloc( 4390: 29 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e ) failed, return 43a0: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 43b0: 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f ;.....cackey_slo 43c0: 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c ts_disconnect_al 43d0: 6c 28 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 l();.....return( 43e0: 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b -1);...}....CACK 43f0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 4400: 22 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 43 "SCardEstablishC 4410: 6f 6e 74 65 78 74 28 29 20 63 61 6c 6c 65 64 22 ontext() called" 4420: 29 3b 0a 09 09 73 63 61 72 64 5f 65 73 74 5f 63 );...scard_est_c 4430: 6f 6e 74 65 78 74 5f 72 65 74 20 3d 20 53 43 61 ontext_ret = SCa 4440: 72 64 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 rdEstablishConte 4450: 78 74 28 53 43 41 52 44 5f 53 43 4f 50 45 5f 53 xt(SCARD_SCOPE_S 4460: 59 53 54 45 4d 2c 20 4e 55 4c 4c 2c 20 4e 55 4c YSTEM, NULL, NUL 4470: 4c 2c 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 L, cackey_pcsc_h 4480: 61 6e 64 6c 65 29 3b 0a 09 09 69 66 20 28 73 63 andle);...if (sc 4490: 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f ard_est_context_ 44a0: 72 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 ret != SCARD_S_S 44b0: 55 43 43 45 53 53 29 20 7b 0a 09 09 09 43 41 43 UCCESS) {....CAC 44c0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 44d0: 28 22 43 61 6c 6c 20 74 6f 20 53 43 61 72 64 45 ("Call to SCardE 44e0: 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 20 stablishContext 44f0: 66 61 69 6c 65 64 20 28 72 65 74 75 72 6e 65 64 failed (returned 4500: 20 25 73 2f 25 6c 69 29 2c 20 72 65 74 75 72 6e %s/%li), return 4510: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 2c ing in failure", 4520: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 CACKEY_DEBUG_FU 4530: 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 NC_SCARDERR_TO_S 4540: 54 52 28 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e TR(scard_est_con 4550: 74 65 78 74 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 text_ret), (long 4560: 29 20 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 ) scard_est_cont 4570: 65 78 74 5f 72 65 74 29 3b 0a 0a 09 09 09 66 72 ext_ret);.....fr 4580: 65 65 28 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 ee(cackey_pcsc_h 4590: 61 6e 64 6c 65 29 3b 0a 0a 09 09 09 63 61 63 6b andle);.....cack 45a0: 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e ey_slots_disconn 45b0: 65 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 09 72 ect_all();.....r 45c0: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09 eturn(-1);...}.. 45d0: 7d 0a 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 }..#ifdef HAVE_S 45e0: 43 41 52 44 49 53 56 41 4c 49 44 43 4f 4e 54 45 CARDISVALIDCONTE 45f0: 58 54 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 XT..CACKEY_DEBUG 4600: 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 49 73 _PRINTF("SCardIs 4610: 56 61 6c 69 64 43 6f 6e 74 65 78 74 28 29 20 63 ValidContext() c 4620: 61 6c 6c 65 64 22 29 3b 0a 09 73 63 61 72 64 5f alled");..scard_ 4630: 69 73 76 61 6c 69 64 5f 72 65 74 20 3d 20 53 43 isvalid_ret = SC 4640: 61 72 64 49 73 56 61 6c 69 64 43 6f 6e 74 65 78 ardIsValidContex 4650: 74 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 t(*cackey_pcsc_h 4660: 61 6e 64 6c 65 29 3b 0a 09 69 66 20 28 73 63 61 andle);..if (sca 4670: 72 64 5f 69 73 76 61 6c 69 64 5f 72 65 74 20 21 rd_isvalid_ret ! 4680: 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 = SCARD_S_SUCCES 4690: 53 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 S) {...CACKEY_DE 46a0: 42 55 47 5f 50 52 49 4e 54 46 28 22 48 61 6e 64 BUG_PRINTF("Hand 46b0: 6c 65 20 68 61 73 20 62 65 63 6f 6d 65 20 69 6e le has become in 46c0: 76 61 6c 69 64 20 28 53 43 61 72 64 49 73 56 61 valid (SCardIsVa 46d0: 6c 69 64 43 6f 6e 74 65 78 74 20 3d 20 25 73 2f lidContext = %s/ 46e0: 25 6c 69 29 2c 20 74 72 79 69 6e 67 20 74 6f 20 %li), trying to 46f0: 72 65 2d 65 73 74 61 62 6c 69 73 68 2e 2e 2e 22 re-establish..." 4700: 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F 4710: 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f UNC_SCARDERR_TO_ 4720: 53 54 52 28 73 63 61 72 64 5f 69 73 76 61 6c 69 STR(scard_isvali 4730: 64 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20 73 d_ret), (long) s 4740: 63 61 72 64 5f 69 73 76 61 6c 69 64 5f 72 65 74 card_isvalid_ret 4750: 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 4760: 55 47 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 UG_PRINTF("SCard 4770: 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 EstablishContext 4780: 28 29 20 63 61 6c 6c 65 64 22 29 3b 0a 09 09 73 () called");...s 4790: 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 card_est_context 47a0: 5f 72 65 74 20 3d 20 53 43 61 72 64 45 73 74 61 _ret = SCardEsta 47b0: 62 6c 69 73 68 43 6f 6e 74 65 78 74 28 53 43 41 blishContext(SCA 47c0: 52 44 5f 53 43 4f 50 45 5f 53 59 53 54 45 4d 2c RD_SCOPE_SYSTEM, 47d0: 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 63 61 63 NULL, NULL, cac 47e0: 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 key_pcsc_handle) 47f0: 3b 0a 09 09 69 66 20 28 73 63 61 72 64 5f 65 73 ;...if (scard_es 4800: 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20 21 3d t_context_ret != 4810: 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 SCARD_S_SUCCESS 4820: 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE 4830: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 4840: 20 74 6f 20 53 43 61 72 64 45 73 74 61 62 6c 69 to SCardEstabli 4850: 73 68 43 6f 6e 74 65 78 74 20 66 61 69 6c 65 64 shContext failed 4860: 20 28 72 65 74 75 72 6e 65 64 20 25 73 2f 25 6c (returned %s/%l 4870: 69 29 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e i), returning in 4880: 20 66 61 69 6c 75 72 65 22 2c 20 43 41 43 4b 45 failure", CACKE 4890: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 Y_DEBUG_FUNC_SCA 48a0: 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 RDERR_TO_STR(sca 48b0: 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 rd_est_context_r 48c0: 65 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 et), (long) scar 48d0: 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 d_est_context_re 48e0: 74 29 3b 0a 0a 09 09 09 66 72 65 65 28 63 61 63 t);.....free(cac 48f0: 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 key_pcsc_handle) 4900: 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f ;.....cackey_slo 4910: 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c ts_disconnect_al 4920: 6c 28 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 l();.....return( 4930: 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b -1);...}....CACK 4940: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 4950: 22 48 61 6e 64 6c 65 20 68 61 73 20 62 65 65 6e "Handle has been 4960: 20 72 65 2d 65 73 74 61 62 6c 69 73 68 65 64 22 re-established" 4970: 29 3b 0a 09 7d 0a 23 65 6e 64 69 66 0a 0a 09 43 );..}.#endif...C 4980: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 4990: 54 46 28 22 53 75 63 65 73 73 66 75 6c 6c 79 20 TF("Sucessfully 49a0: 63 6f 6e 6e 65 63 74 65 64 20 74 6f 20 50 43 2f connected to PC/ 49b0: 53 43 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e SC, returning in 49c0: 20 73 75 63 63 65 73 73 22 29 3b 0a 0a 09 72 65 success");...re 49d0: 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 2f 2a 20 41 turn(0);.}../* A 49e0: 50 44 55 20 52 65 6c 61 74 65 64 20 46 75 6e 63 PDU Related Func 49f0: 74 69 6f 6e 73 20 2a 2f 0a 2f 2a 2a 20 4c 65 20 tions */./** Le 4a00: 3d 20 30 78 30 30 20 74 6f 20 69 6e 64 69 63 61 = 0x00 to indica 4a10: 74 65 20 6e 6f 74 20 74 6f 20 73 65 6e 64 20 4c te not to send L 4a20: 65 20 2a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 e **/.static int 4a30: 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 cackey_send_apd 4a40: 75 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f u(struct cackey_ 4a50: 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 slot *slot, unsi 4a60: 67 6e 65 64 20 63 68 61 72 20 63 6c 61 73 73 2c gned char class, 4a70: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 69 unsigned char i 4a80: 6e 73 74 72 75 63 74 69 6f 6e 2c 20 75 6e 73 69 nstruction, unsi 4a90: 67 6e 65 64 20 63 68 61 72 20 70 31 2c 20 75 6e gned char p1, un 4aa0: 73 69 67 6e 65 64 20 63 68 61 72 20 70 32 2c 20 signed char p2, 4ab0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c 63 unsigned char lc 4ac0: 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 , unsigned char 4ad0: 2a 64 61 74 61 2c 20 75 6e 73 69 67 6e 65 64 20 *data, unsigned 4ae0: 63 68 61 72 20 6c 65 2c 20 75 69 6e 74 31 36 5f char le, uint16_ 4af0: 74 20 2a 72 65 73 70 63 6f 64 65 2c 20 75 6e 73 t *respcode, uns 4b00: 69 67 6e 65 64 20 63 68 61 72 20 2a 72 65 73 70 igned char *resp 4b10: 64 61 74 61 2c 20 73 69 7a 65 5f 74 20 2a 72 65 data, size_t *re 4b20: 73 70 64 61 74 61 5f 6c 65 6e 29 20 7b 0a 09 75 spdata_len) {..u 4b30: 69 6e 74 38 5f 74 20 6d 61 6a 6f 72 5f 72 63 2c int8_t major_rc, 4b40: 20 6d 69 6e 6f 72 5f 72 63 3b 0a 09 73 69 7a 65 minor_rc;..size 4b50: 5f 74 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 _t bytes_to_copy 4b60: 2c 20 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c , tmp_respdata_l 4b70: 65 6e 3b 0a 09 44 57 4f 52 44 20 70 72 6f 74 6f en;..DWORD proto 4b80: 63 6f 6c 3b 0a 09 44 57 4f 52 44 20 78 6d 69 74 col;..DWORD xmit 4b90: 5f 6c 65 6e 2c 20 72 65 63 76 5f 6c 65 6e 3b 0a _len, recv_len;. 4ba0: 09 4c 4f 4e 47 20 73 63 61 72 64 5f 63 6f 6e 6e .LONG scard_conn 4bb0: 5f 72 65 74 2c 20 73 63 61 72 64 5f 78 6d 69 74 _ret, scard_xmit 4bc0: 5f 72 65 74 2c 20 73 63 61 72 64 5f 72 65 63 6f _ret, scard_reco 4bd0: 6e 6e 5f 72 65 74 3b 0a 09 42 59 54 45 20 78 6d nn_ret;..BYTE xm 4be0: 69 74 5f 62 75 66 5b 31 30 32 34 5d 2c 20 72 65 it_buf[1024], re 4bf0: 63 76 5f 62 75 66 5b 31 30 32 34 5d 3b 0a 09 69 cv_buf[1024];..i 4c00: 6e 74 20 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f nt pcsc_connect_ 4c10: 72 65 74 2c 20 70 63 73 63 5f 67 65 74 72 65 73 ret, pcsc_getres 4c20: 70 5f 72 65 74 3b 0a 09 69 6e 74 20 69 64 78 3b p_ret;..int idx; 4c30: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 4c40: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 4c50: 29 3b 0a 0a 09 69 66 20 28 21 73 6c 6f 74 29 20 );...if (!slot) 4c60: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 4c70: 5f 50 52 49 4e 54 46 28 22 49 6e 76 61 6c 69 64 _PRINTF("Invalid 4c80: 20 73 6c 6f 74 20 73 70 65 63 69 66 69 65 64 2e slot specified. 4c90: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 ");....return(-1 4ca0: 29 3b 0a 09 7d 0a 0a 09 70 63 73 63 5f 63 6f 6e );..}...pcsc_con 4cb0: 6e 65 63 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 nect_ret = cacke 4cc0: 79 5f 70 63 73 63 5f 63 6f 6e 6e 65 63 74 28 29 y_pcsc_connect() 4cd0: 3b 0a 09 69 66 20 28 70 63 73 63 5f 63 6f 6e 6e ;..if (pcsc_conn 4ce0: 65 63 74 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 ect_ret < 0) {.. 4cf0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 4d00: 49 4e 54 46 28 22 43 6f 6e 6e 65 63 74 69 6f 6e INTF("Connection 4d10: 20 74 6f 20 50 43 2f 53 43 20 66 61 69 6c 65 64 to PC/SC failed 4d20: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f 4d30: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 ailure");....ret 4d40: 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 2f 2a urn(-1);..}.../* 4d50: 20 43 6f 6e 6e 65 63 74 20 74 6f 20 72 65 61 64 Connect to read 4d60: 65 72 2c 20 69 66 20 6e 65 65 64 65 64 20 2a 2f er, if needed */ 4d70: 0a 09 69 66 20 28 21 73 6c 6f 74 2d 3e 70 63 73 ..if (!slot->pcs 4d80: 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 c_card_connected 4d90: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 4da0: 55 47 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 UG_PRINTF("SCard 4db0: 43 6f 6e 6e 65 63 74 28 25 73 29 20 63 61 6c 6c Connect(%s) call 4dc0: 65 64 22 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 5f ed", slot->pcsc_ 4dd0: 72 65 61 64 65 72 29 3b 0a 09 09 73 63 61 72 64 reader);...scard 4de0: 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 53 43 61 72 _conn_ret = SCar 4df0: 64 43 6f 6e 6e 65 63 74 28 2a 63 61 63 6b 65 79 dConnect(*cackey 4e00: 5f 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 73 6c _pcsc_handle, sl 4e10: 6f 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 72 2c ot->pcsc_reader, 4e20: 20 53 43 41 52 44 5f 53 48 41 52 45 5f 53 48 41 SCARD_SHARE_SHA 4e30: 52 45 44 2c 20 53 43 41 52 44 5f 50 52 4f 54 4f RED, SCARD_PROTO 4e40: 43 4f 4c 5f 54 30 2c 20 26 73 6c 6f 74 2d 3e 70 COL_T0, &slot->p 4e50: 63 73 63 5f 63 61 72 64 2c 20 26 70 72 6f 74 6f csc_card, &proto 4e60: 63 6f 6c 29 3b 0a 0a 09 09 69 66 20 28 73 63 61 col);....if (sca 4e70: 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 21 3d 20 53 rd_conn_ret != S 4e80: 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 CARD_S_SUCCESS) 4e90: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU 4ea0: 47 5f 50 52 49 4e 54 46 28 22 43 6f 6e 6e 65 63 G_PRINTF("Connec 4eb0: 74 69 6f 6e 20 74 6f 20 63 61 72 64 20 66 61 69 tion to card fai 4ec0: 6c 65 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 led, returning i 4ed0: 6e 20 66 61 69 6c 75 72 65 20 28 53 43 61 72 64 n failure (SCard 4ee0: 43 6f 6e 6e 65 63 74 28 29 20 3d 20 25 73 2f 25 Connect() = %s/% 4ef0: 6c 69 29 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 li)", CACKEY_DEB 4f00: 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 UG_FUNC_SCARDERR 4f10: 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f 63 6f _TO_STR(scard_co 4f20: 6e 6e 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20 nn_ret), (long) 4f30: 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 29 3b scard_conn_ret); 4f40: 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b .....return(-1); 4f50: 0a 09 09 7d 0a 0a 09 09 73 6c 6f 74 2d 3e 70 63 ...}....slot->pc 4f60: 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 sc_card_connecte 4f70: 64 20 3d 20 31 3b 0a 09 7d 0a 0a 09 2f 2a 20 54 d = 1;..}.../* T 4f80: 72 61 6e 73 6d 69 74 20 2a 2f 0a 09 78 6d 69 74 ransmit */..xmit 4f90: 5f 6c 65 6e 20 3d 20 30 3b 0a 09 78 6d 69 74 5f _len = 0;..xmit_ 4fa0: 62 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 buf[xmit_len++] 4fb0: 3d 20 63 6c 61 73 73 3b 0a 09 78 6d 69 74 5f 62 = class;..xmit_b 4fc0: 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d uf[xmit_len++] = 4fd0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 3b 0a 09 78 instruction;..x 4fe0: 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e mit_buf[xmit_len 4ff0: 2b 2b 5d 20 3d 20 70 31 3b 0a 09 78 6d 69 74 5f ++] = p1;..xmit_ 5000: 62 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 buf[xmit_len++] 5010: 3d 20 70 32 3b 0a 09 69 66 20 28 64 61 74 61 29 = p2;..if (data) 5020: 20 7b 0a 09 09 78 6d 69 74 5f 62 75 66 5b 78 6d {...xmit_buf[xm 5030: 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 6c 63 3b 0a it_len++] = lc;. 5040: 09 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 ..for (idx = 0; 5050: 69 64 78 20 3c 20 6c 63 3b 20 69 64 78 2b 2b 29 idx < lc; idx++) 5060: 20 7b 0a 09 09 09 78 6d 69 74 5f 62 75 66 5b 78 {....xmit_buf[x 5070: 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 64 61 74 mit_len++] = dat 5080: 61 5b 69 64 78 5d 3b 0a 09 09 7d 0a 09 7d 0a 0a a[idx];...}..}.. 5090: 09 69 66 20 28 6c 65 20 21 3d 20 30 78 30 30 29 .if (le != 0x00) 50a0: 20 7b 0a 09 09 78 6d 69 74 5f 62 75 66 5b 78 6d {...xmit_buf[xm 50b0: 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 6c 65 3b 0a it_len++] = le;. 50c0: 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 50d0: 47 5f 50 52 49 4e 54 42 55 46 28 22 53 65 6e 64 G_PRINTBUF("Send 50e0: 69 6e 67 20 41 50 44 55 3a 22 2c 20 78 6d 69 74 ing APDU:", xmit 50f0: 5f 62 75 66 2c 20 78 6d 69 74 5f 6c 65 6e 29 3b _buf, xmit_len); 5100: 0a 0a 09 72 65 63 76 5f 6c 65 6e 20 3d 20 73 69 ...recv_len = si 5110: 7a 65 6f 66 28 72 65 63 76 5f 62 75 66 29 3b 0a zeof(recv_buf);. 5120: 09 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 20 .scard_xmit_ret 5130: 3d 20 53 43 61 72 64 54 72 61 6e 73 6d 69 74 28 = SCardTransmit( 5140: 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c slot->pcsc_card, 5150: 20 53 43 41 52 44 5f 50 43 49 5f 54 30 2c 20 78 SCARD_PCI_T0, x 5160: 6d 69 74 5f 62 75 66 2c 20 78 6d 69 74 5f 6c 65 mit_buf, xmit_le 5170: 6e 2c 20 53 43 41 52 44 5f 50 43 49 5f 54 31 2c n, SCARD_PCI_T1, 5180: 20 72 65 63 76 5f 62 75 66 2c 20 26 72 65 63 76 recv_buf, &recv 5190: 5f 6c 65 6e 29 3b 0a 09 69 66 20 28 73 63 61 72 _len);..if (scar 51a0: 64 5f 78 6d 69 74 5f 72 65 74 20 21 3d 20 53 43 d_xmit_ret != SC 51b0: 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b ARD_S_SUCCESS) { 51c0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 51d0: 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 74 PRINTF("Failed t 51e0: 6f 20 73 65 6e 64 20 41 50 44 55 20 74 6f 20 63 o send APDU to c 51f0: 61 72 64 20 28 53 43 61 72 64 54 72 61 6e 73 6d ard (SCardTransm 5200: 69 74 28 29 20 3d 20 25 73 2f 25 6c 78 29 22 2c it() = %s/%lx)", 5210: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 CACKEY_DEBUG_FU 5220: 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 NC_SCARDERR_TO_S 5230: 54 52 28 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 TR(scard_xmit_re 5240: 74 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f t), (unsigned lo 5250: 6e 67 29 20 73 63 61 72 64 5f 78 6d 69 74 5f 72 ng) scard_xmit_r 5260: 65 74 29 3b 0a 0a 09 09 69 66 20 28 73 63 61 72 et);....if (scar 5270: 64 5f 78 6d 69 74 5f 72 65 74 20 3d 3d 20 53 43 d_xmit_ret == SC 5280: 41 52 44 5f 57 5f 52 45 53 45 54 5f 43 41 52 44 ARD_W_RESET_CARD 5290: 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE 52a0: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 73 65 BUG_PRINTF("Rese 52b0: 74 20 72 65 71 75 69 72 65 64 2c 20 70 6c 65 61 t required, plea 52c0: 73 65 20 68 6f 6c 64 2e 2e 2e 22 29 3b 0a 0a 09 se hold...");... 52d0: 09 09 73 63 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 ..scard_reconn_r 52e0: 65 74 20 3d 20 53 43 61 72 64 52 65 63 6f 6e 6e et = SCardReconn 52f0: 65 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 ect(slot->pcsc_c 5300: 61 72 64 2c 20 53 43 41 52 44 5f 53 48 41 52 45 ard, SCARD_SHARE 5310: 5f 53 48 41 52 45 44 2c 20 53 43 41 52 44 5f 50 _SHARED, SCARD_P 5320: 52 4f 54 4f 43 4f 4c 5f 54 30 2c 20 53 43 41 52 ROTOCOL_T0, SCAR 5330: 44 5f 52 45 53 45 54 5f 43 41 52 44 2c 20 26 70 D_RESET_CARD, &p 5340: 72 6f 74 6f 63 6f 6c 29 3b 0a 09 09 09 69 66 20 rotocol);....if 5350: 28 73 63 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 (scard_reconn_re 5360: 74 20 3d 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 t == SCARD_S_SUC 5370: 43 45 53 53 29 20 7b 0a 09 09 09 09 43 41 43 4b CESS) {.....CACK 5380: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 5390: 22 52 65 73 65 74 20 73 75 63 63 65 73 73 66 75 "Reset successfu 53a0: 6c 2c 20 72 65 74 72 61 6e 73 6d 69 74 74 69 6e l, retransmittin 53b0: 67 22 29 3b 0a 09 09 09 09 73 63 61 72 64 5f 78 g");.....scard_x 53c0: 6d 69 74 5f 72 65 74 20 3d 20 53 43 61 72 64 54 mit_ret = SCardT 53d0: 72 61 6e 73 6d 69 74 28 73 6c 6f 74 2d 3e 70 63 ransmit(slot->pc 53e0: 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 50 sc_card, SCARD_P 53f0: 43 49 5f 54 30 2c 20 78 6d 69 74 5f 62 75 66 2c CI_T0, xmit_buf, 5400: 20 78 6d 69 74 5f 6c 65 6e 2c 20 53 43 41 52 44 xmit_len, SCARD 5410: 5f 50 43 49 5f 54 30 2c 20 72 65 63 76 5f 62 75 _PCI_T0, recv_bu 5420: 66 2c 20 26 72 65 63 76 5f 6c 65 6e 29 3b 0a 0a f, &recv_len);.. 5430: 09 09 09 09 69 66 20 28 73 63 61 72 64 5f 78 6d ....if (scard_xm 5440: 69 74 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f it_ret != SCARD_ 5450: 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 S_SUCCESS) {.... 5460: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 5470: 52 49 4e 54 46 28 22 52 65 74 72 61 6e 73 6d 69 RINTF("Retransmi 5480: 74 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e t failed, return 5490: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 20 61 ing in failure a 54a0: 66 74 65 72 20 64 69 73 63 6f 6e 6e 65 63 74 69 fter disconnecti 54b0: 6e 67 20 74 68 65 20 63 61 72 64 20 28 53 43 61 ng the card (SCa 54c0: 72 64 54 72 61 6e 73 6d 69 74 20 3d 20 25 73 2f rdTransmit = %s/ 54d0: 25 6c 69 29 22 2c 20 43 41 43 4b 45 59 5f 44 45 %li)", CACKEY_DE 54e0: 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 BUG_FUNC_SCARDER 54f0: 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f 78 R_TO_STR(scard_x 5500: 6d 69 74 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 mit_ret), (long) 5510: 20 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 scard_xmit_ret) 5520: 3b 0a 0a 09 09 09 09 09 53 43 61 72 64 44 69 73 ;.......SCardDis 5530: 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e 70 63 connect(slot->pc 5540: 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 52 sc_card, SCARD_R 5550: 45 53 45 54 5f 43 41 52 44 29 3b 0a 09 09 09 09 ESET_CARD);..... 5560: 09 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 .slot->pcsc_card 5570: 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a _connected = 0;. 5580: 0a 09 09 09 09 09 72 65 74 75 72 6e 28 2d 31 29 ......return(-1) 5590: 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73 ;.....}....} els 55a0: 65 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 e {.....CACKEY_D 55b0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 44 69 73 EBUG_PRINTF("Dis 55c0: 63 6f 6e 6e 65 63 74 69 6e 67 20 63 61 72 64 22 connecting card" 55d0: 29 3b 0a 0a 09 09 09 09 53 43 61 72 64 44 69 73 );......SCardDis 55e0: 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e 70 63 connect(slot->pc 55f0: 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 52 sc_card, SCARD_R 5600: 45 53 45 54 5f 43 41 52 44 29 3b 0a 09 09 09 09 ESET_CARD);..... 5610: 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f slot->pcsc_card_ 5620: 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a 0a connected = 0;.. 5630: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 5640: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 5650: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b ng in failure"); 5660: 0a 09 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b .....return(-1); 5670: 0a 09 09 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b ....}...} else { 5680: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 5690: 5f 50 52 49 4e 54 46 28 22 44 69 73 63 6f 6e 6e _PRINTF("Disconn 56a0: 65 63 74 69 6e 67 20 63 61 72 64 22 29 3b 0a 0a ecting card");.. 56b0: 09 09 09 53 43 61 72 64 44 69 73 63 6f 6e 6e 65 ...SCardDisconne 56c0: 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 ct(slot->pcsc_ca 56d0: 72 64 2c 20 53 43 41 52 44 5f 52 45 53 45 54 5f rd, SCARD_RESET_ 56e0: 43 41 52 44 29 3b 0a 09 09 09 73 6c 6f 74 2d 3e CARD);....slot-> 56f0: 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 pcsc_card_connec 5700: 74 65 64 20 3d 20 30 3b 0a 0a 09 09 09 43 41 43 ted = 0;.....CAC 5710: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 5720: 28 22 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 ("Returning in f 5730: 61 69 6c 75 72 65 22 29 3b 0a 09 09 09 72 65 74 ailure");....ret 5740: 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09 7d 0a urn(-1);...}..}. 5750: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 5760: 52 49 4e 54 42 55 46 28 22 52 65 74 75 72 6e 65 RINTBUF("Returne 5770: 64 20 56 61 6c 75 65 3a 22 2c 20 72 65 63 76 5f d Value:", recv_ 5780: 62 75 66 2c 20 72 65 63 76 5f 6c 65 6e 29 3b 0a buf, recv_len);. 5790: 0a 09 69 66 20 28 72 65 63 76 5f 6c 65 6e 20 3c ..if (recv_len < 57a0: 20 32 29 20 7b 0a 09 09 2f 2a 20 4d 69 6e 69 6d 2) {.../* Minim 57b0: 61 6c 20 72 65 73 70 6f 6e 73 65 20 6c 65 6e 67 al response leng 57c0: 74 68 20 69 73 20 32 20 62 79 74 65 73 2c 20 72 th is 2 bytes, r 57d0: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail 57e0: 75 72 65 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f ure */...CACKEY_ 57f0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 5800: 73 70 6f 6e 73 65 20 74 6f 6f 20 73 6d 61 6c 6c sponse too small 5810: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f 5820: 61 69 6c 75 72 65 20 28 72 65 63 76 5f 6c 65 6e ailure (recv_len 5830: 20 3d 20 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 = %lu)", (unsig 5840: 6e 65 64 20 6c 6f 6e 67 29 20 72 65 63 76 5f 6c ned long) recv_l 5850: 65 6e 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d en);....return(- 5860: 31 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 44 65 74 65 1);..}.../* Dete 5870: 72 6d 69 6e 65 20 72 65 73 75 6c 74 20 63 6f 64 rmine result cod 5880: 65 20 2a 2f 0a 09 6d 61 6a 6f 72 5f 72 63 20 3d e */..major_rc = 5890: 20 72 65 63 76 5f 62 75 66 5b 72 65 63 76 5f 6c recv_buf[recv_l 58a0: 65 6e 20 2d 20 32 5d 3b 0a 09 6d 69 6e 6f 72 5f en - 2];..minor_ 58b0: 72 63 20 3d 20 72 65 63 76 5f 62 75 66 5b 72 65 rc = recv_buf[re 58c0: 63 76 5f 6c 65 6e 20 2d 20 31 5d 3b 0a 09 69 66 cv_len - 1];..if 58d0: 20 28 72 65 73 70 63 6f 64 65 29 20 7b 0a 09 09 (respcode) {... 58e0: 2a 72 65 73 70 63 6f 64 65 20 3d 20 28 6d 61 6a *respcode = (maj 58f0: 6f 72 5f 72 63 20 3c 3c 20 38 29 20 7c 20 6d 69 or_rc << 8) | mi 5900: 6e 6f 72 5f 72 63 3b 0a 09 7d 0a 0a 09 2f 2a 20 nor_rc;..}.../* 5910: 41 64 6a 75 73 74 20 6d 65 73 73 61 67 65 20 62 Adjust message b 5920: 75 66 66 65 72 20 2a 2f 0a 09 72 65 63 76 5f 6c uffer */..recv_l 5930: 65 6e 20 2d 3d 20 32 3b 0a 0a 09 2f 2a 20 41 64 en -= 2;.../* Ad 5940: 64 20 62 79 74 65 73 20 74 6f 20 72 65 74 75 72 d bytes to retur 5950: 6e 20 76 61 6c 75 65 20 2a 2f 0a 09 74 6d 70 5f n value */..tmp_ 5960: 72 65 73 70 64 61 74 61 5f 6c 65 6e 20 3d 20 30 respdata_len = 0 5970: 3b 0a 09 69 66 20 28 72 65 73 70 64 61 74 61 20 ;..if (respdata 5980: 26 26 20 72 65 73 70 64 61 74 61 5f 6c 65 6e 29 && respdata_len) 5990: 20 7b 0a 09 09 74 6d 70 5f 72 65 73 70 64 61 74 {...tmp_respdat 59a0: 61 5f 6c 65 6e 20 3d 20 2a 72 65 73 70 64 61 74 a_len = *respdat 59b0: 61 5f 6c 65 6e 3b 0a 0a 09 09 62 79 74 65 73 5f a_len;....bytes_ 59c0: 74 6f 5f 63 6f 70 79 20 3d 20 2a 72 65 73 70 64 to_copy = *respd 59d0: 61 74 61 5f 6c 65 6e 3b 0a 0a 09 09 69 66 20 28 ata_len;....if ( 59e0: 72 65 63 76 5f 6c 65 6e 20 3c 20 62 79 74 65 73 recv_len < bytes 59f0: 5f 74 6f 5f 63 6f 70 79 29 20 7b 0a 09 09 09 62 _to_copy) {....b 5a00: 79 74 65 73 5f 74 6f 5f 63 6f 70 79 20 3d 20 72 ytes_to_copy = r 5a10: 65 63 76 5f 6c 65 6e 3b 0a 09 09 7d 0a 0a 09 09 ecv_len;...}.... 5a20: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 5a30: 4e 54 46 28 22 43 6f 70 79 69 6e 67 20 25 6c 75 NTF("Copying %lu 5a40: 20 62 79 74 65 73 20 74 6f 20 74 68 65 20 62 75 bytes to the bu 5a50: 66 66 65 72 22 2c 20 28 75 6e 73 69 67 6e 65 64 ffer", (unsigned 5a60: 20 6c 6f 6e 67 29 20 62 79 74 65 73 5f 74 6f 5f long) bytes_to_ 5a70: 63 6f 70 79 29 3b 0a 0a 09 09 6d 65 6d 63 70 79 copy);....memcpy 5a80: 28 72 65 73 70 64 61 74 61 2c 20 72 65 63 76 5f (respdata, recv_ 5a90: 62 75 66 2c 20 62 79 74 65 73 5f 74 6f 5f 63 6f buf, bytes_to_co 5aa0: 70 79 29 3b 0a 09 09 72 65 73 70 64 61 74 61 20 py);...respdata 5ab0: 2b 3d 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 += bytes_to_copy 5ac0: 3b 0a 0a 09 09 2a 72 65 73 70 64 61 74 61 5f 6c ;....*respdata_l 5ad0: 65 6e 20 3d 20 62 79 74 65 73 5f 74 6f 5f 63 6f en = bytes_to_co 5ae0: 70 79 3b 0a 09 09 74 6d 70 5f 72 65 73 70 64 61 py;...tmp_respda 5af0: 74 61 5f 6c 65 6e 20 2d 3d 20 62 79 74 65 73 5f ta_len -= bytes_ 5b00: 74 6f 5f 63 6f 70 79 3b 0a 09 7d 20 65 6c 73 65 to_copy;..} else 5b10: 20 7b 0a 09 09 69 66 20 28 72 65 63 76 5f 6c 65 {...if (recv_le 5b20: 6e 20 21 3d 20 30 29 20 7b 0a 09 09 09 43 41 43 n != 0) {....CAC 5b30: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 5b40: 28 22 54 68 72 6f 77 69 6e 67 20 61 77 61 79 20 ("Throwing away 5b50: 25 6c 75 20 62 79 74 65 73 2c 20 6e 6f 77 68 65 %lu bytes, nowhe 5b60: 72 65 20 74 6f 20 70 75 74 20 74 68 65 6d 21 22 re to put them!" 5b70: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 5b80: 29 20 72 65 63 76 5f 6c 65 6e 29 3b 0a 09 09 7d ) recv_len);...} 5b90: 0a 09 7d 0a 0a 09 69 66 20 28 6d 61 6a 6f 72 5f ..}...if (major_ 5ba0: 72 63 20 3d 3d 20 30 78 36 31 29 20 7b 0a 09 09 rc == 0x61) {... 5bb0: 2f 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 52 45 /* We need to RE 5bc0: 41 44 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 AD */...CACKEY_D 5bd0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 42 75 66 EBUG_PRINTF("Buf 5be0: 66 65 72 20 72 65 61 64 20 72 65 71 75 69 72 65 fer read require 5bf0: 64 22 29 3b 0a 0a 09 09 70 63 73 63 5f 67 65 74 d");....pcsc_get 5c00: 72 65 73 70 5f 72 65 74 20 3d 20 63 61 63 6b 65 resp_ret = cacke 5c10: 79 5f 73 65 6e 64 5f 61 70 64 75 28 73 6c 6f 74 y_send_apdu(slot 5c20: 2c 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 , GSCIS_CLASS_IS 5c30: 4f 37 38 31 36 2c 20 47 53 43 49 53 5f 49 4e 53 O7816, GSCIS_INS 5c40: 54 52 5f 47 45 54 5f 52 45 53 50 4f 4e 53 45 2c TR_GET_RESPONSE, 5c50: 20 30 78 30 30 2c 20 30 78 30 30 2c 20 30 2c 20 0x00, 0x00, 0, 5c60: 4e 55 4c 4c 2c 20 6d 69 6e 6f 72 5f 72 63 2c 20 NULL, minor_rc, 5c70: 72 65 73 70 63 6f 64 65 2c 20 72 65 73 70 64 61 respcode, respda 5c80: 74 61 2c 20 26 74 6d 70 5f 72 65 73 70 64 61 74 ta, &tmp_respdat 5c90: 61 5f 6c 65 6e 29 3b 0a 09 09 69 66 20 28 70 63 a_len);...if (pc 5ca0: 73 63 5f 67 65 74 72 65 73 70 5f 72 65 74 20 3c sc_getresp_ret < 5cb0: 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 0) {....CACKEY_ 5cc0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 42 75 DEBUG_PRINTF("Bu 5cd0: 66 66 65 72 20 72 65 61 64 20 66 61 69 6c 65 64 ffer read failed 5ce0: 21 20 20 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 ! Returning in 5cf0: 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 09 72 failure");.....r 5d00: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a eturn(-1);...}.. 5d10: 09 09 69 66 20 28 72 65 73 70 64 61 74 61 5f 6c ..if (respdata_l 5d20: 65 6e 29 20 7b 0a 09 09 09 2a 72 65 73 70 64 61 en) {....*respda 5d30: 74 61 5f 6c 65 6e 20 2b 3d 20 74 6d 70 5f 72 65 ta_len += tmp_re 5d40: 73 70 64 61 74 61 5f 6c 65 6e 3b 0a 09 09 7d 0a spdata_len;...}. 5d50: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 5d60: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 5d70: 67 20 69 6e 20 73 75 63 63 65 73 73 20 28 62 75 g in success (bu 5d80: 66 66 65 72 20 72 65 61 64 20 63 6f 6d 70 6c 65 ffer read comple 5d90: 74 65 29 22 29 3b 0a 09 09 72 65 74 75 72 6e 28 te)");...return( 5da0: 30 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 6d 61 6a 0);..}...if (maj 5db0: 6f 72 5f 72 63 20 3d 3d 20 30 78 39 30 29 20 7b or_rc == 0x90) { 5dc0: 0a 09 09 2f 2a 20 53 75 63 63 65 73 73 20 2a 2f .../* Success */ 5dd0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 5de0: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 5df0: 67 20 69 6e 20 73 75 63 63 65 73 73 20 28 6d 61 g in success (ma 5e00: 6a 6f 72 5f 72 63 20 3d 20 30 78 39 30 29 22 29 jor_rc = 0x90)") 5e10: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 30 29 3b 0a ;....return(0);. 5e20: 09 7d 0a 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 .}....CACKEY_DEB 5e30: 55 47 5f 50 52 49 4e 54 46 28 22 41 50 44 55 20 UG_PRINTF("APDU 5e40: 52 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f Returned an erro 5e50: 72 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 r, returning in 5e60: 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 72 65 74 failure");...ret 5e70: 75 72 6e 28 2d 31 29 3b 0a 7d 0a 0a 73 74 61 74 urn(-1);.}..stat 5e80: 69 63 20 73 73 69 7a 65 5f 74 20 63 61 63 6b 65 ic ssize_t cacke 5e90: 79 5f 72 65 61 64 5f 62 75 66 66 65 72 28 73 74 y_read_buffer(st 5ea0: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ruct cackey_slot 5eb0: 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 64 *slot, unsigned 5ec0: 20 63 68 61 72 20 2a 62 75 66 66 65 72 2c 20 73 char *buffer, s 5ed0: 69 7a 65 5f 74 20 63 6f 75 6e 74 2c 20 75 6e 73 ize_t count, uns 5ee0: 69 67 6e 65 64 20 63 68 61 72 20 74 5f 6f 72 5f igned char t_or_ 5ef0: 76 2c 20 73 69 7a 65 5f 74 20 69 6e 69 74 69 61 v, size_t initia 5f00: 6c 5f 6f 66 66 73 65 74 29 20 7b 0a 09 73 69 7a l_offset) {..siz 5f10: 65 5f 74 20 6f 66 66 73 65 74 20 3d 20 30 2c 20 e_t offset = 0, 5f20: 6d 61 78 5f 6f 66 66 73 65 74 2c 20 6d 61 78 5f max_offset, max_ 5f30: 63 6f 75 6e 74 3b 0a 09 75 6e 73 69 67 6e 65 64 count;..unsigned 5f40: 20 63 68 61 72 20 63 6d 64 5b 32 5d 3b 0a 09 75 char cmd[2];..u 5f50: 69 6e 74 31 36 5f 74 20 72 65 73 70 63 6f 64 65 int16_t respcode 5f60: 3b 0a 09 69 6e 74 20 73 65 6e 64 5f 72 65 74 3b ;..int send_ret; 5f70: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 5f80: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 5f90: 29 3b 0a 0a 09 6d 61 78 5f 6f 66 66 73 65 74 20 );...max_offset 5fa0: 3d 20 63 6f 75 6e 74 3b 0a 09 6d 61 78 5f 63 6f = count;..max_co 5fb0: 75 6e 74 20 3d 20 32 35 32 3b 0a 0a 09 63 6d 64 unt = 252;...cmd 5fc0: 5b 30 5d 20 3d 20 74 5f 6f 72 5f 76 3b 0a 0a 09 [0] = t_or_v;... 5fd0: 77 68 69 6c 65 20 28 31 29 20 7b 0a 09 09 69 66 while (1) {...if 5fe0: 20 28 6f 66 66 73 65 74 20 3e 3d 20 6d 61 78 5f (offset >= max_ 5ff0: 6f 66 66 73 65 74 29 20 7b 0a 09 09 09 43 41 43 offset) {....CAC 6000: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 6010: 28 22 42 75 66 66 65 72 20 74 6f 6f 20 73 6d 61 ("Buffer too sma 6020: 6c 6c 2c 20 72 65 74 75 72 6e 69 6e 67 20 77 68 ll, returning wh 6030: 61 74 20 77 65 20 67 6f 74 2e 2e 2e 22 29 3b 0a at we got...");. 6040: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a ....break;...}.. 6050: 09 09 63 6f 75 6e 74 20 3d 20 6d 61 78 5f 6f 66 ..count = max_of 6060: 66 73 65 74 20 2d 20 6f 66 66 73 65 74 3b 0a 09 fset - offset;.. 6070: 09 69 66 20 28 63 6f 75 6e 74 20 3e 20 6d 61 78 .if (count > max 6080: 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09 63 6f 75 _count) {....cou 6090: 6e 74 20 3d 20 6d 61 78 5f 63 6f 75 6e 74 3b 0a nt = max_count;. 60a0: 09 09 7d 0a 0a 09 09 63 6d 64 5b 31 5d 20 3d 20 ..}....cmd[1] = 60b0: 63 6f 75 6e 74 3b 0a 0a 09 09 73 65 6e 64 5f 72 count;....send_r 60c0: 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 et = cackey_send 60d0: 5f 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 _apdu(slot, GSCI 60e0: 53 5f 43 4c 41 53 53 5f 47 4c 4f 42 41 4c 5f 50 S_CLASS_GLOBAL_P 60f0: 4c 41 54 46 4f 52 4d 2c 20 47 53 43 49 53 5f 49 LATFORM, GSCIS_I 6100: 4e 53 54 52 5f 52 45 41 44 5f 42 55 46 46 45 52 NSTR_READ_BUFFER 6110: 2c 20 28 28 69 6e 69 74 69 61 6c 5f 6f 66 66 73 , ((initial_offs 6120: 65 74 20 2b 20 6f 66 66 73 65 74 29 20 3e 3e 20 et + offset) >> 6130: 38 29 20 26 20 30 78 66 66 2c 20 28 69 6e 69 74 8) & 0xff, (init 6140: 69 61 6c 5f 6f 66 66 73 65 74 20 2b 20 6f 66 66 ial_offset + off 6150: 73 65 74 29 20 26 20 30 78 66 66 2c 20 73 69 7a set) & 0xff, siz 6160: 65 6f 66 28 63 6d 64 29 2c 20 63 6d 64 2c 20 30 eof(cmd), cmd, 0 6170: 78 30 30 2c 20 26 72 65 73 70 63 6f 64 65 2c 20 x00, &respcode, 6180: 62 75 66 66 65 72 20 2b 20 6f 66 66 73 65 74 2c buffer + offset, 6190: 20 26 63 6f 75 6e 74 29 3b 0a 09 09 69 66 20 28 &count);...if ( 61a0: 73 65 6e 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a send_ret < 0) {. 61b0: 09 09 09 69 66 20 28 72 65 73 70 63 6f 64 65 20 ...if (respcode 61c0: 3d 3d 20 30 78 36 41 38 36 29 20 7b 0a 09 09 09 == 0x6A86) {.... 61d0: 09 69 66 20 28 6d 61 78 5f 63 6f 75 6e 74 20 3d .if (max_count = 61e0: 3d 20 31 29 20 7b 0a 09 09 09 09 09 62 72 65 61 = 1) {......brea 61f0: 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 6d 61 k;.....}......ma 6200: 78 5f 63 6f 75 6e 74 20 3d 20 6d 61 78 5f 63 6f x_count = max_co 6210: 75 6e 74 20 2f 20 32 3b 0a 0a 09 09 09 09 63 6f unt / 2;......co 6220: 6e 74 69 6e 75 65 3b 0a 09 09 09 7d 0a 0a 09 09 ntinue;....}.... 6230: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 6240: 49 4e 54 46 28 22 63 61 63 6b 65 79 5f 73 65 6e INTF("cackey_sen 6250: 64 5f 61 70 64 75 28 29 20 66 61 69 6c 65 64 2c d_apdu() failed, 6260: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 returning in fa 6270: 69 6c 75 72 65 22 29 3b 0a 0a 09 09 09 72 65 74 ilure");.....ret 6280: 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 urn(-1);...}.... 6290: 6f 66 66 73 65 74 20 2b 3d 20 63 6f 75 6e 74 3b offset += count; 62a0: 0a 0a 09 09 69 66 20 28 63 6f 75 6e 74 20 3c 20 ....if (count < 62b0: 6d 61 78 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09 max_count) {.... 62c0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 62d0: 4e 54 46 28 22 53 68 6f 72 74 20 72 65 61 64 20 NTF("Short read 62e0: 2d 2d 20 63 6f 75 6e 74 20 3d 20 25 69 2c 20 63 -- count = %i, c 62f0: 6d 64 5b 31 5d 20 3d 20 25 69 22 2c 20 63 6f 75 md[1] = %i", cou 6300: 6e 74 2c 20 63 6d 64 5b 31 5d 29 3b 0a 0a 09 09 nt, cmd[1]);.... 6310: 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a .break;...}..}.. 6320: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 6330: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 6340: 69 6e 20 73 75 63 63 65 73 73 2c 20 72 65 61 64 in success, read 6350: 20 25 6c 75 20 62 79 74 65 73 22 2c 20 28 75 6e %lu bytes", (un 6360: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6f 66 66 signed long) off 6370: 73 65 74 29 3b 0a 0a 09 72 65 74 75 72 6e 28 6f set);...return(o 6380: 66 66 73 65 74 29 3b 0a 7d 0a 0a 73 74 61 74 69 ffset);.}..stati 6390: 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 73 65 6c c int cackey_sel 63a0: 65 63 74 5f 61 70 70 6c 65 74 28 73 74 72 75 63 ect_applet(struc 63b0: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 t cackey_slot *s 63c0: 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 lot, unsigned ch 63d0: 61 72 20 2a 61 69 64 2c 20 73 69 7a 65 5f 74 20 ar *aid, size_t 63e0: 61 69 64 5f 6c 65 6e 29 20 7b 0a 09 69 6e 74 20 aid_len) {..int 63f0: 73 65 6e 64 5f 72 65 74 3b 0a 0a 09 43 41 43 4b send_ret;...CACK 6400: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 6410: 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 43 41 "Called.");...CA 6420: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 6430: 42 55 46 28 22 53 65 6c 65 63 74 69 6e 67 20 61 BUF("Selecting a 6440: 70 70 6c 65 74 3a 22 2c 20 61 69 64 2c 20 61 69 pplet:", aid, ai 6450: 64 5f 6c 65 6e 29 3b 0a 0a 09 73 65 6e 64 5f 72 d_len);...send_r 6460: 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 et = cackey_send 6470: 5f 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 _apdu(slot, GSCI 6480: 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 31 36 2c S_CLASS_ISO7816, 6490: 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 45 4c GSCIS_INSTR_SEL 64a0: 45 43 54 2c 20 47 53 43 49 53 5f 50 41 52 41 4d ECT, GSCIS_PARAM 64b0: 5f 53 45 4c 45 43 54 5f 41 50 50 4c 45 54 2c 20 _SELECT_APPLET, 64c0: 30 78 30 43 2c 20 61 69 64 5f 6c 65 6e 2c 20 61 0x0C, aid_len, a 64d0: 69 64 2c 20 30 78 30 30 2c 20 4e 55 4c 4c 2c 20 id, 0x00, NULL, 64e0: 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 69 66 NULL, NULL);..if 64f0: 20 28 73 65 6e 64 5f 72 65 74 20 3c 20 30 29 20 (send_ret < 0) 6500: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 6510: 5f 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 _PRINTF("Failed 6520: 74 6f 20 6f 70 65 6e 20 61 70 70 6c 65 74 2c 20 to open applet, 6530: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai 6540: 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 lure");....retur 6550: 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b n(-1);..}...CACK 6560: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 6570: 22 53 75 63 63 65 73 73 66 75 6c 6c 79 20 73 65 "Successfully se 6580: 6c 65 63 74 65 64 20 66 69 6c 65 22 29 3b 0a 0a lected file");.. 6590: 09 72 65 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 73 .return(0);.}..s 65a0: 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 tatic int cackey 65b0: 5f 73 65 6c 65 63 74 5f 66 69 6c 65 28 73 74 72 _select_file(str 65c0: 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 uct cackey_slot 65d0: 2a 73 6c 6f 74 2c 20 75 69 6e 74 31 36 5f 74 20 *slot, uint16_t 65e0: 65 66 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 ef) {..unsigned 65f0: 63 68 61 72 20 66 69 64 5f 62 75 66 5b 32 5d 3b char fid_buf[2]; 6600: 0a 09 69 6e 74 20 73 65 6e 64 5f 72 65 74 3b 0a ..int send_ret;. 6610: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 6620: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 6630: 3b 0a 0a 09 2f 2a 20 4f 70 65 6e 20 74 68 65 20 ;.../* Open the 6640: 65 6c 65 6d 65 6e 74 61 72 79 20 66 69 6c 65 20 elementary file 6650: 2a 2f 0a 09 66 69 64 5f 62 75 66 5b 30 5d 20 3d */..fid_buf[0] = 6660: 20 28 65 66 20 3e 3e 20 38 29 20 26 20 30 78 66 (ef >> 8) & 0xf 6670: 66 3b 0a 09 66 69 64 5f 62 75 66 5b 31 5d 20 3d f;..fid_buf[1] = 6680: 20 65 66 20 26 20 30 78 66 66 3b 0a 0a 09 43 41 ef & 0xff;...CA 6690: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 66a0: 46 28 22 53 65 6c 65 63 74 69 6e 67 20 66 69 6c F("Selecting fil 66b0: 65 3a 20 25 30 34 6c 78 22 2c 20 28 75 6e 73 69 e: %04lx", (unsi 66c0: 67 6e 65 64 20 6c 6f 6e 67 29 20 65 66 29 3b 0a gned long) ef);. 66d0: 0a 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 61 63 ..send_ret = cac 66e0: 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 73 6c key_send_apdu(sl 66f0: 6f 74 2c 20 47 53 43 49 53 5f 43 4c 41 53 53 5f ot, GSCIS_CLASS_ 6700: 49 53 4f 37 38 31 36 2c 20 47 53 43 49 53 5f 49 ISO7816, GSCIS_I 6710: 4e 53 54 52 5f 53 45 4c 45 43 54 2c 20 30 78 30 NSTR_SELECT, 0x0 6720: 32 2c 20 30 78 30 43 2c 20 73 69 7a 65 6f 66 28 2, 0x0C, sizeof( 6730: 66 69 64 5f 62 75 66 29 2c 20 66 69 64 5f 62 75 fid_buf), fid_bu 6740: 66 2c 20 30 78 30 30 2c 20 4e 55 4c 4c 2c 20 4e f, 0x00, NULL, N 6750: 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 69 66 20 ULL, NULL);..if 6760: 28 73 65 6e 64 5f 72 65 74 20 3c 20 30 29 20 7b (send_ret < 0) { 6770: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 6780: 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 74 PRINTF("Failed t 6790: 6f 20 6f 70 65 6e 20 66 69 6c 65 2c 20 72 65 74 o open file, ret 67a0: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 67b0: 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d e");....return(- 67c0: 31 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 1);..}...CACKEY_ 67d0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 DEBUG_PRINTF("Su 67e0: 63 63 65 73 73 66 75 6c 6c 79 20 73 65 6c 65 63 ccessfully selec 67f0: 74 65 64 20 66 69 6c 65 22 29 3b 0a 0a 09 72 65 ted file");...re 6800: 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 73 74 61 74 turn(0);.}..stat 6810: 69 63 20 76 6f 69 64 20 63 61 63 6b 65 79 5f 66 ic void cackey_f 6820: 72 65 65 5f 74 6c 76 28 73 74 72 75 63 74 20 63 ree_tlv(struct c 6830: 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 ackey_tlv_entity 6840: 20 2a 72 6f 6f 74 29 20 7b 0a 09 73 74 72 75 63 *root) {..struc 6850: 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 t cackey_tlv_ent 6860: 69 74 79 20 2a 63 75 72 72 2c 20 2a 6e 65 78 74 ity *curr, *next 6870: 3b 0a 0a 09 69 66 20 28 72 6f 6f 74 20 3d 3d 20 ;...if (root == 6880: 4e 55 4c 4c 29 20 7b 0a 09 09 72 65 74 75 72 6e NULL) {...return 6890: 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 63 75 72 72 ;..}...for (curr 68a0: 20 3d 20 72 6f 6f 74 3b 20 63 75 72 72 3b 20 63 = root; curr; c 68b0: 75 72 72 20 3d 20 6e 65 78 74 29 20 7b 0a 09 09 urr = next) {... 68c0: 6e 65 78 74 20 3d 20 63 75 72 72 2d 3e 5f 6e 65 next = curr->_ne 68d0: 78 74 3b 0a 0a 09 09 73 77 69 74 63 68 20 28 63 xt;....switch (c 68e0: 75 72 72 2d 3e 74 61 67 29 20 7b 0a 09 09 09 63 urr->tag) {....c 68f0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 41 43 ase GSCIS_TAG_AC 6900: 52 5f 54 41 42 4c 45 3a 0a 09 09 09 63 61 73 65 R_TABLE:....case 6910: 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 49 GSCIS_TAG_CERTI 6920: 46 49 43 41 54 45 3a 0a 09 09 09 09 69 66 20 28 FICATE:.....if ( 6930: 63 75 72 72 2d 3e 76 61 6c 75 65 29 20 7b 0a 09 curr->value) {.. 6940: 09 09 09 09 66 72 65 65 28 63 75 72 72 2d 3e 76 ....free(curr->v 6950: 61 6c 75 65 29 3b 0a 09 09 09 09 7d 0a 09 09 09 alue);.....}.... 6960: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 .break;....case 6970: 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 55 52 GSCIS_TAG_CARDUR 6980: 4c 3a 0a 09 09 09 09 69 66 20 28 63 75 72 72 2d L:.....if (curr- 6990: 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 29 20 >value_cardurl) 69a0: 7b 0a 09 09 09 09 09 66 72 65 65 28 63 75 72 72 {......free(curr 69b0: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 29 ->value_cardurl) 69c0: 3b 0a 09 09 09 09 7d 0a 09 09 09 09 62 72 65 61 ;.....}.....brea 69d0: 6b 3b 0a 09 09 7d 0a 0a 09 09 66 72 65 65 28 63 k;...}....free(c 69e0: 75 72 72 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 urr);..}...retur 69f0: 6e 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 73 74 72 n;.}..static str 6a00: 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 uct cackey_tlv_e 6a10: 6e 74 69 74 79 20 2a 63 61 63 6b 65 79 5f 72 65 ntity *cackey_re 6a20: 61 64 5f 74 6c 76 28 73 74 72 75 63 74 20 63 61 ad_tlv(struct ca 6a30: 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 ckey_slot *slot) 6a40: 20 7b 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 {..struct cacke 6a50: 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a 63 75 y_tlv_entity *cu 6a60: 72 72 5f 65 6e 74 69 74 79 2c 20 2a 72 6f 6f 74 rr_entity, *root 6a70: 20 3d 20 4e 55 4c 4c 2c 20 2a 6c 61 73 74 20 3d = NULL, *last = 6a80: 20 4e 55 4c 4c 3b 0a 09 75 6e 73 69 67 6e 65 64 NULL;..unsigned 6a90: 20 63 68 61 72 20 74 6c 65 6e 5f 62 75 66 5b 32 char tlen_buf[2 6aa0: 5d 2c 20 74 76 61 6c 5f 62 75 66 5b 31 30 32 34 ], tval_buf[1024 6ab0: 5d 2c 20 2a 74 76 61 6c 3b 0a 09 75 6e 73 69 67 ], *tval;..unsig 6ac0: 6e 65 64 20 63 68 61 72 20 76 6c 65 6e 5f 62 75 ned char vlen_bu 6ad0: 66 5b 32 5d 2c 20 76 76 61 6c 5f 62 75 66 5b 38 f[2], vval_buf[8 6ae0: 31 39 32 5d 2c 20 2a 76 76 61 6c 3b 0a 09 75 6e 192], *vval;..un 6af0: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 74 6d 70 signed char *tmp 6b00: 62 75 66 3b 0a 09 73 73 69 7a 65 5f 74 20 74 6c buf;..ssize_t tl 6b10: 65 6e 2c 20 76 6c 65 6e 3b 0a 09 73 73 69 7a 65 en, vlen;..ssize 6b20: 5f 74 20 72 65 61 64 5f 72 65 74 3b 0a 09 73 69 _t read_ret;..si 6b30: 7a 65 5f 74 20 6f 66 66 73 65 74 5f 74 20 3d 20 ze_t offset_t = 6b40: 30 2c 20 6f 66 66 73 65 74 5f 76 20 3d 20 30 3b 0, offset_v = 0; 6b50: 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 ..unsigned char 6b60: 74 61 67 3b 0a 09 73 69 7a 65 5f 74 20 6c 65 6e tag;..size_t len 6b70: 67 74 68 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 gth;...CACKEY_DE 6b80: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 6b90: 65 64 2e 22 29 3b 0a 0a 09 72 65 61 64 5f 72 65 ed.");...read_re 6ba0: 74 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f t = cackey_read_ 6bb0: 62 75 66 66 65 72 28 73 6c 6f 74 2c 20 74 6c 65 buffer(slot, tle 6bc0: 6e 5f 62 75 66 2c 20 73 69 7a 65 6f 66 28 74 6c n_buf, sizeof(tl 6bd0: 65 6e 5f 62 75 66 29 2c 20 31 2c 20 6f 66 66 73 en_buf), 1, offs 6be0: 65 74 5f 74 29 3b 0a 09 69 66 20 28 72 65 61 64 et_t);..if (read 6bf0: 5f 72 65 74 20 21 3d 20 73 69 7a 65 6f 66 28 74 _ret != sizeof(t 6c00: 6c 65 6e 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 len_buf)) {...CA 6c10: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 6c20: 46 28 22 52 65 61 64 20 66 61 69 6c 65 64 2c 20 F("Read failed, 6c30: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai 6c40: 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 lure");....retur 6c50: 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 74 6c n(NULL);..}...tl 6c60: 65 6e 20 3d 20 28 74 6c 65 6e 5f 62 75 66 5b 31 en = (tlen_buf[1 6c70: 5d 20 3c 3c 20 38 29 20 7c 20 74 6c 65 6e 5f 62 ] << 8) | tlen_b 6c80: 75 66 5b 30 5d 3b 0a 0a 09 72 65 61 64 5f 72 65 uf[0];...read_re 6c90: 74 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f t = cackey_read_ 6ca0: 62 75 66 66 65 72 28 73 6c 6f 74 2c 20 76 6c 65 buffer(slot, vle 6cb0: 6e 5f 62 75 66 2c 20 73 69 7a 65 6f 66 28 76 6c n_buf, sizeof(vl 6cc0: 65 6e 5f 62 75 66 29 2c 20 32 2c 20 6f 66 66 73 en_buf), 2, offs 6cd0: 65 74 5f 76 29 3b 0a 09 69 66 20 28 72 65 61 64 et_v);..if (read 6ce0: 5f 72 65 74 20 21 3d 20 73 69 7a 65 6f 66 28 76 _ret != sizeof(v 6cf0: 6c 65 6e 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 len_buf)) {...CA 6d00: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 6d10: 46 28 22 52 65 61 64 20 66 61 69 6c 65 64 2c 20 F("Read failed, 6d20: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai 6d30: 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 lure");....retur 6d40: 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 76 6c n(NULL);..}...vl 6d50: 65 6e 20 3d 20 28 76 6c 65 6e 5f 62 75 66 5b 31 en = (vlen_buf[1 6d60: 5d 20 3c 3c 20 38 29 20 7c 20 76 6c 65 6e 5f 62 ] << 8) | vlen_b 6d70: 75 66 5b 30 5d 3b 0a 0a 09 43 41 43 4b 45 59 5f uf[0];...CACKEY_ 6d80: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 54 61 DEBUG_PRINTF("Ta 6d90: 67 20 4c 65 6e 67 74 68 20 3d 20 25 69 2c 20 56 g Length = %i, V 6da0: 61 6c 75 65 20 4c 65 6e 67 74 68 20 3d 20 25 69 alue Length = %i 6db0: 22 2c 20 74 6c 65 6e 2c 20 76 6c 65 6e 29 3b 0a ", tlen, vlen);. 6dc0: 0a 09 74 6c 65 6e 20 2d 3d 20 32 3b 0a 09 6f 66 ..tlen -= 2;..of 6dd0: 66 73 65 74 5f 74 20 2b 3d 20 32 3b 0a 0a 09 76 fset_t += 2;...v 6de0: 6c 65 6e 20 2d 3d 20 32 3b 0a 09 6f 66 66 73 65 len -= 2;..offse 6df0: 74 5f 76 20 2b 3d 20 32 3b 0a 0a 09 69 66 20 28 t_v += 2;...if ( 6e00: 74 6c 65 6e 20 3e 20 73 69 7a 65 6f 66 28 74 76 tlen > sizeof(tv 6e10: 61 6c 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 43 al_buf)) {...CAC 6e20: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 6e30: 28 22 54 61 67 20 6c 65 6e 67 74 68 20 69 73 20 ("Tag length is 6e40: 74 6f 6f 20 6c 61 72 67 65 2c 20 72 65 74 75 72 too large, retur 6e50: 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 ning in failure" 6e60: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c );....return(NUL 6e70: 4c 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 76 6c 65 L);..}...if (vle 6e80: 6e 20 3e 20 73 69 7a 65 6f 66 28 76 76 61 6c 5f n > sizeof(vval_ 6e90: 62 75 66 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 buf)) {...CACKEY 6ea0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 56 _DEBUG_PRINTF("V 6eb0: 61 6c 75 65 20 6c 65 6e 67 74 68 20 69 73 20 74 alue length is t 6ec0: 6f 6f 20 6c 61 72 67 65 2c 20 72 65 74 75 72 6e oo large, return 6ed0: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 6ee0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c ;....return(NULL 6ef0: 29 3b 0a 09 7d 0a 0a 09 72 65 61 64 5f 72 65 74 );..}...read_ret 6f00: 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 = cackey_read_b 6f10: 75 66 66 65 72 28 73 6c 6f 74 2c 20 74 76 61 6c uffer(slot, tval 6f20: 5f 62 75 66 2c 20 74 6c 65 6e 2c 20 31 2c 20 6f _buf, tlen, 1, o 6f30: 66 66 73 65 74 5f 74 29 3b 0a 09 69 66 20 28 72 ffset_t);..if (r 6f40: 65 61 64 5f 72 65 74 20 21 3d 20 74 6c 65 6e 29 ead_ret != tlen) 6f50: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 6f60: 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 G_PRINTF("Unable 6f70: 20 74 6f 20 72 65 61 64 20 65 6e 74 69 72 65 20 to read entire 6f80: 54 2d 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e T-buffer, return 6f90: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 6fa0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c ;....return(NULL 6fb0: 29 3b 0a 09 7d 0a 0a 09 72 65 61 64 5f 72 65 74 );..}...read_ret 6fc0: 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 = cackey_read_b 6fd0: 75 66 66 65 72 28 73 6c 6f 74 2c 20 76 76 61 6c uffer(slot, vval 6fe0: 5f 62 75 66 2c 20 76 6c 65 6e 2c 20 32 2c 20 6f _buf, vlen, 2, o 6ff0: 66 66 73 65 74 5f 76 29 3b 0a 09 69 66 20 28 72 ffset_v);..if (r 7000: 65 61 64 5f 72 65 74 20 21 3d 20 76 6c 65 6e 29 ead_ret != vlen) 7010: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 7020: 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 G_PRINTF("Unable 7030: 20 74 6f 20 72 65 61 64 20 65 6e 74 69 72 65 20 to read entire 7040: 56 2d 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e V-buffer, return 7050: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 7060: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c ;....return(NULL 7070: 29 3b 0a 09 7d 0a 0a 09 74 76 61 6c 20 3d 20 74 );..}...tval = t 7080: 76 61 6c 5f 62 75 66 3b 0a 09 76 76 61 6c 20 3d val_buf;..vval = 7090: 20 76 76 61 6c 5f 62 75 66 3b 0a 09 77 68 69 6c vval_buf;..whil 70a0: 65 20 28 74 6c 65 6e 20 3e 20 30 20 26 26 20 76 e (tlen > 0 && v 70b0: 6c 65 6e 20 3e 20 30 29 20 7b 0a 09 09 74 61 67 len > 0) {...tag 70c0: 20 3d 20 2a 74 76 61 6c 3b 0a 09 09 74 76 61 6c = *tval;...tval 70d0: 2b 2b 3b 0a 09 09 74 6c 65 6e 2d 2d 3b 0a 0a 09 ++;...tlen--;... 70e0: 09 69 66 20 28 2a 74 76 61 6c 20 3d 3d 20 30 78 .if (*tval == 0x 70f0: 66 66 29 20 7b 0a 09 09 09 6c 65 6e 67 74 68 20 ff) {....length 7100: 3d 20 28 74 76 61 6c 5b 32 5d 20 3c 3c 20 38 29 = (tval[2] << 8) 7110: 20 7c 20 74 76 61 6c 5b 31 5d 3b 0a 09 09 09 74 | tval[1];....t 7120: 76 61 6c 20 2b 3d 20 33 3b 0a 09 09 09 74 6c 65 val += 3;....tle 7130: 6e 20 2d 3d 20 33 3b 0a 09 09 7d 20 65 6c 73 65 n -= 3;...} else 7140: 20 7b 0a 09 09 09 6c 65 6e 67 74 68 20 3d 20 2a {....length = * 7150: 74 76 61 6c 3b 0a 09 09 09 74 76 61 6c 2b 2b 3b tval;....tval++; 7160: 0a 09 09 09 74 6c 65 6e 2d 2d 3b 0a 09 09 7d 0a ....tlen--;...}. 7170: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 7180: 50 52 49 4e 54 46 28 22 54 61 67 3a 20 25 73 20 PRINTF("Tag: %s 7190: 28 25 30 32 78 29 22 2c 20 43 41 43 4b 45 59 5f (%02x)", CACKEY_ 71a0: 44 45 42 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54 DEBUG_FUNC_TAG_T 71b0: 4f 5f 53 54 52 28 74 61 67 29 2c 20 28 75 6e 73 O_STR(tag), (uns 71c0: 69 67 6e 65 64 20 69 6e 74 29 20 74 61 67 29 3b igned int) tag); 71d0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 71e0: 50 52 49 4e 54 42 55 46 28 22 56 61 6c 75 65 3a PRINTBUF("Value: 71f0: 22 2c 20 76 76 61 6c 2c 20 6c 65 6e 67 74 68 29 ", vval, length) 7200: 3b 0a 09 09 76 76 61 6c 20 2b 3d 20 6c 65 6e 67 ;...vval += leng 7210: 74 68 3b 0a 09 09 76 6c 65 6e 20 2d 3d 20 6c 65 th;...vlen -= le 7220: 6e 67 74 68 3b 0a 0a 09 09 63 75 72 72 5f 65 6e ngth;....curr_en 7230: 74 69 74 79 20 3d 20 4e 55 4c 4c 3b 0a 09 09 73 tity = NULL;...s 7240: 77 69 74 63 68 20 28 74 61 67 29 20 7b 0a 09 09 witch (tag) {... 7250: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 7260: 43 41 52 44 55 52 4c 3a 0a 09 09 09 09 63 75 72 CARDURL:.....cur 7270: 72 5f 65 6e 74 69 74 79 20 3d 20 6d 61 6c 6c 6f r_entity = mallo 7280: 63 28 73 69 7a 65 6f 66 28 2a 63 75 72 72 5f 65 c(sizeof(*curr_e 7290: 6e 74 69 74 79 29 29 3b 0a 09 09 09 09 63 75 72 ntity));.....cur 72a0: 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 5f r_entity->value_ 72b0: 63 61 72 64 75 72 6c 20 3d 20 6d 61 6c 6c 6f 63 cardurl = malloc 72c0: 28 73 69 7a 65 6f 66 28 2a 63 75 72 72 5f 65 6e (sizeof(*curr_en 72d0: 74 69 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 tity->value_card 72e0: 75 72 6c 29 29 3b 0a 0a 09 09 09 09 6d 65 6d 63 url));......memc 72f0: 70 79 28 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e py(curr_entity-> 7300: 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 72 value_cardurl->r 7310: 69 64 2c 20 76 76 61 6c 2c 20 35 29 3b 0a 09 09 id, vval, 5);... 7320: 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 ..curr_entity->v 7330: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 alue_cardurl->ap 7340: 70 74 79 70 65 20 3d 20 76 76 61 6c 5b 35 5d 3b ptype = vval[5]; 7350: 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 .....curr_entity 7360: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d ->value_cardurl- 7370: 3e 6f 62 6a 65 63 74 69 64 20 3d 20 28 76 76 61 >objectid = (vva 7380: 6c 5b 36 5d 20 3c 3c 20 38 29 20 7c 20 76 76 61 l[6] << 8) | vva 7390: 6c 5b 37 5d 3b 0a 09 09 09 09 63 75 72 72 5f 65 l[7];.....curr_e 73a0: 6e 74 69 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 ntity->value_car 73b0: 64 75 72 6c 2d 3e 61 70 70 69 64 20 3d 20 28 76 durl->appid = (v 73c0: 76 61 6c 5b 38 5d 20 3c 3c 20 38 29 20 7c 20 76 val[8] << 8) | v 73d0: 76 61 6c 5b 39 5d 3b 0a 0a 09 09 09 09 63 75 72 val[9];......cur 73e0: 72 5f 65 6e 74 69 74 79 2d 3e 74 61 67 20 3d 20 r_entity->tag = 73f0: 74 61 67 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e tag;.....curr_en 7400: 74 69 74 79 2d 3e 5f 6e 65 78 74 20 3d 20 4e 55 tity->_next = NU 7410: 4c 4c 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a LL;......break;. 7420: 09 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 7430: 47 5f 41 43 52 5f 54 41 42 4c 45 3a 0a 09 09 09 G_ACR_TABLE:.... 7440: 09 63 75 72 72 5f 65 6e 74 69 74 79 20 3d 20 6d .curr_entity = m 7450: 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 75 alloc(sizeof(*cu 7460: 72 72 5f 65 6e 74 69 74 79 29 29 3b 0a 09 09 09 rr_entity));.... 7470: 09 74 6d 70 62 75 66 20 3d 20 6d 61 6c 6c 6f 63 .tmpbuf = malloc 7480: 28 6c 65 6e 67 74 68 29 3b 0a 0a 09 09 09 09 6d (length);......m 7490: 65 6d 63 70 79 28 74 6d 70 62 75 66 2c 20 76 76 emcpy(tmpbuf, vv 74a0: 61 6c 2c 20 6c 65 6e 67 74 68 29 3b 0a 0a 09 09 al, length);.... 74b0: 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 74 ..curr_entity->t 74c0: 61 67 20 3d 20 74 61 67 3b 0a 09 09 09 09 63 75 ag = tag;.....cu 74d0: 72 72 5f 65 6e 74 69 74 79 2d 3e 6c 65 6e 67 74 rr_entity->lengt 74e0: 68 20 3d 20 6c 65 6e 67 74 68 3b 0a 09 09 09 09 h = length;..... 74f0: 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c curr_entity->val 7500: 75 65 20 3d 20 74 6d 70 62 75 66 3b 0a 09 09 09 ue = tmpbuf;.... 7510: 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 5f 6e .curr_entity->_n 7520: 65 78 74 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 ext = NULL;..... 7530: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 .break;....case 7540: 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 49 46 GSCIS_TAG_CERTIF 7550: 49 43 41 54 45 3a 0a 09 09 09 09 63 75 72 72 5f ICATE:.....curr_ 7560: 65 6e 74 69 74 79 20 3d 20 6d 61 6c 6c 6f 63 28 entity = malloc( 7570: 73 69 7a 65 6f 66 28 2a 63 75 72 72 5f 65 6e 74 sizeof(*curr_ent 7580: 69 74 79 29 29 3b 0a 09 09 09 09 74 6d 70 62 75 ity));.....tmpbu 7590: 66 20 3d 20 6d 61 6c 6c 6f 63 28 6c 65 6e 67 74 f = malloc(lengt 75a0: 68 29 3b 0a 0a 09 09 09 09 6d 65 6d 63 70 79 28 h);......memcpy( 75b0: 74 6d 70 62 75 66 2c 20 76 76 61 6c 2c 20 6c 65 tmpbuf, vval, le 75c0: 6e 67 74 68 29 3b 0a 0a 09 09 09 09 63 75 72 72 ngth);......curr 75d0: 5f 65 6e 74 69 74 79 2d 3e 74 61 67 20 3d 20 74 _entity->tag = t 75e0: 61 67 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 ag;.....curr_ent 75f0: 69 74 79 2d 3e 6c 65 6e 67 74 68 20 3d 20 6c 65 ity->length = le 7600: 6e 67 74 68 3b 0a 09 09 09 09 63 75 72 72 5f 65 ngth;.....curr_e 7610: 6e 74 69 74 79 2d 3e 76 61 6c 75 65 20 3d 20 74 ntity->value = t 7620: 6d 70 62 75 66 3b 0a 09 09 09 09 63 75 72 72 5f mpbuf;.....curr_ 7630: 65 6e 74 69 74 79 2d 3e 5f 6e 65 78 74 20 3d 20 entity->_next = 7640: 4e 55 4c 4c 3b 0a 0a 09 09 09 09 62 72 65 61 6b NULL;......break 7650: 3b 0a 09 09 09 63 61 73 65 20 47 53 43 49 53 5f ;....case GSCIS_ 7660: 54 41 47 5f 50 4b 43 53 31 35 3a 0a 09 09 09 09 TAG_PKCS15:..... 7670: 63 75 72 72 5f 65 6e 74 69 74 79 20 3d 20 6d 61 curr_entity = ma 7680: 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 75 72 lloc(sizeof(*cur 7690: 72 5f 65 6e 74 69 74 79 29 29 3b 0a 0a 09 09 09 r_entity));..... 76a0: 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 74 61 .curr_entity->ta 76b0: 67 20 3d 20 74 61 67 3b 0a 09 09 09 09 63 75 72 g = tag;.....cur 76c0: 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 5f r_entity->value_ 76d0: 62 79 74 65 20 3d 20 76 76 61 6c 5b 30 5d 3b 0a byte = vval[0];. 76e0: 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d ....curr_entity- 76f0: 3e 5f 6e 65 78 74 20 3d 20 4e 55 4c 4c 3b 0a 0a >_next = NULL;.. 7700: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a ....break;...}.. 7710: 09 09 69 66 20 28 63 75 72 72 5f 65 6e 74 69 74 ..if (curr_entit 7720: 79 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 y != NULL) {.... 7730: 69 66 20 28 72 6f 6f 74 20 3d 3d 20 4e 55 4c 4c if (root == NULL 7740: 29 20 7b 0a 09 09 09 09 72 6f 6f 74 20 3d 20 63 ) {.....root = c 7750: 75 72 72 5f 65 6e 74 69 74 79 3b 0a 09 09 09 7d urr_entity;....} 7760: 0a 0a 09 09 09 69 66 20 28 6c 61 73 74 20 21 3d .....if (last != 7770: 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 6c 61 73 NULL) {.....las 7780: 74 2d 3e 5f 6e 65 78 74 20 3d 20 63 75 72 72 5f t->_next = curr_ 7790: 65 6e 74 69 74 79 3b 0a 09 09 09 7d 0a 0a 09 09 entity;....}.... 77a0: 09 6c 61 73 74 20 3d 20 63 75 72 72 5f 65 6e 74 .last = curr_ent 77b0: 69 74 79 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 72 65 ity;...}..}...re 77c0: 74 75 72 6e 28 72 6f 6f 74 29 3b 0a 7d 0a 0a 73 turn(root);.}..s 77d0: 74 61 74 69 63 20 76 6f 69 64 20 63 61 63 6b 65 tatic void cacke 77e0: 79 5f 66 72 65 65 5f 63 65 72 74 73 28 73 74 72 y_free_certs(str 77f0: 75 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f uct cackey_pcsc_ 7800: 69 64 65 6e 74 69 74 79 20 2a 73 74 61 72 74 2c identity *start, 7810: 20 73 69 7a 65 5f 74 20 63 6f 75 6e 74 2c 20 69 size_t count, i 7820: 6e 74 20 66 72 65 65 5f 73 74 61 72 74 29 20 7b nt free_start) { 7830: 0a 09 73 69 7a 65 5f 74 20 69 64 78 3b 0a 0a 09 ..size_t idx;... 7840: 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 for (idx = 0; id 7850: 78 20 3c 20 63 6f 75 6e 74 3b 20 69 64 78 2b 2b x < count; idx++ 7860: 29 20 7b 0a 09 09 69 66 20 28 73 74 61 72 74 5b ) {...if (start[ 7870: 69 64 78 5d 2e 63 65 72 74 69 66 69 63 61 74 65 idx].certificate 7880: 29 20 7b 0a 09 09 09 66 72 65 65 28 73 74 61 72 ) {....free(star 7890: 74 5b 69 64 78 5d 2e 63 65 72 74 69 66 69 63 61 t[idx].certifica 78a0: 74 65 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 te);...}..}...if 78b0: 20 28 66 72 65 65 5f 73 74 61 72 74 29 20 7b 0a (free_start) {. 78c0: 09 09 66 72 65 65 28 73 74 61 72 74 29 3b 0a 09 ..free(start);.. 78d0: 7d 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 73 }...return;.}..s 78e0: 74 61 74 69 63 20 73 74 72 75 63 74 20 63 61 63 tatic struct cac 78f0: 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 key_pcsc_identit 7900: 79 20 2a 63 61 63 6b 65 79 5f 72 65 61 64 5f 63 y *cackey_read_c 7910: 65 72 74 73 28 73 74 72 75 63 74 20 63 61 63 6b erts(struct cack 7920: 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 73 ey_slot *slot, s 7930: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 70 63 73 truct cackey_pcs 7940: 63 5f 69 64 65 6e 74 69 74 79 20 2a 63 65 72 74 c_identity *cert 7950: 73 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 s, unsigned long 7960: 20 2a 63 6f 75 6e 74 29 20 7b 0a 09 73 74 72 75 *count) {..stru 7970: 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 ct cackey_pcsc_i 7980: 64 65 6e 74 69 74 79 20 2a 63 75 72 72 5f 69 64 dentity *curr_id 7990: 3b 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 ;..struct cackey 79a0: 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a 63 63 63 _tlv_entity *ccc 79b0: 5f 74 6c 76 2c 20 2a 63 63 63 5f 63 75 72 72 2c _tlv, *ccc_curr, 79c0: 20 2a 61 70 70 5f 74 6c 76 2c 20 2a 61 70 70 5f *app_tlv, *app_ 79d0: 63 75 72 72 3b 0a 09 75 6e 73 69 67 6e 65 64 20 curr;..unsigned 79e0: 63 68 61 72 20 63 63 63 5f 61 69 64 5b 5d 20 3d char ccc_aid[] = 79f0: 20 7b 47 53 43 49 53 5f 41 49 44 5f 43 43 43 7d {GSCIS_AID_CCC} 7a00: 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 ;..unsigned char 7a10: 20 63 75 72 72 5f 61 69 64 5b 37 5d 3b 0a 09 75 curr_aid[7];..u 7a20: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6f 75 74 nsigned long out 7a30: 69 64 78 20 3d 20 30 3b 0a 09 69 6e 74 20 63 65 idx = 0;..int ce 7a40: 72 74 73 5f 72 65 73 69 7a 61 62 6c 65 3b 0a 09 rts_resizable;.. 7a50: 69 6e 74 20 73 65 6e 64 5f 72 65 74 2c 20 73 65 int send_ret, se 7a60: 6c 65 63 74 5f 72 65 74 3b 0a 0a 09 43 41 43 4b lect_ret;...CACK 7a70: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 7a80: 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 7a90: 20 28 63 6f 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 (count == NULL) 7aa0: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 7ab0: 47 5f 50 52 49 4e 54 46 28 22 63 6f 75 6e 74 20 G_PRINTF("count 7ac0: 69 73 20 4e 55 4c 4c 2c 20 72 65 74 75 72 6e 69 is NULL, returni 7ad0: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b ng in failure"); 7ae0: 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 ....return(NULL) 7af0: 3b 0a 09 7d 0a 0a 09 69 66 20 28 2a 63 6f 75 6e ;..}...if (*coun 7b00: 74 20 3d 3d 20 30 29 20 7b 0a 09 09 69 66 20 28 t == 0) {...if ( 7b10: 63 65 72 74 73 20 21 3d 20 4e 55 4c 4c 29 20 7b certs != NULL) { 7b20: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 7b30: 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 _PRINTF("Request 7b40: 65 64 20 77 65 20 72 65 74 75 72 6e 20 30 20 6f ed we return 0 o 7b50: 62 6a 65 63 74 73 2c 20 73 68 6f 72 74 2d 63 69 bjects, short-ci 7b60: 72 63 75 69 74 22 29 3b 0a 0a 09 09 09 72 65 74 rcuit");.....ret 7b70: 75 72 6e 28 63 65 72 74 73 29 3b 0a 09 09 7d 0a urn(certs);...}. 7b80: 09 7d 0a 0a 09 69 66 20 28 63 65 72 74 73 20 3d .}...if (certs = 7b90: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 63 65 72 74 = NULL) {...cert 7ba0: 73 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f s = malloc(sizeo 7bb0: 66 28 2a 63 65 72 74 73 29 20 2a 20 35 29 3b 0a f(*certs) * 5);. 7bc0: 09 09 2a 63 6f 75 6e 74 20 3d 20 35 3b 0a 09 09 ..*count = 5;... 7bd0: 63 65 72 74 73 5f 72 65 73 69 7a 61 62 6c 65 20 certs_resizable 7be0: 3d 20 31 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 = 1;..} else {.. 7bf0: 09 63 65 72 74 73 5f 72 65 73 69 7a 61 62 6c 65 .certs_resizable 7c00: 20 3d 20 30 3b 0a 09 7d 0a 0a 09 2f 2a 20 53 65 = 0;..}.../* Se 7c10: 6c 65 63 74 20 74 68 65 20 43 43 43 20 41 70 70 lect the CCC App 7c20: 6c 65 74 20 2a 2f 0a 09 73 65 6e 64 5f 72 65 74 let */..send_ret 7c30: 20 3d 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 = cackey_select 7c40: 5f 61 70 70 6c 65 74 28 73 6c 6f 74 2c 20 63 63 _applet(slot, cc 7c50: 63 5f 61 69 64 2c 20 73 69 7a 65 6f 66 28 63 63 c_aid, sizeof(cc 7c60: 63 5f 61 69 64 29 29 3b 0a 09 69 66 20 28 73 65 c_aid));..if (se 7c70: 6e 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 nd_ret < 0) {... 7c80: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 7c90: 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 73 NTF("Unable to s 7ca0: 65 6c 65 63 74 20 43 43 43 20 41 70 70 6c 65 74 elect CCC Applet 7cb0: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f 7cc0: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 ailure");....ret 7cd0: 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 urn(NULL);..}... 7ce0: 2f 2a 20 52 65 61 64 20 61 6c 6c 20 74 68 65 20 /* Read all the 7cf0: 61 70 70 6c 65 74 73 20 66 72 6f 6d 20 74 68 65 applets from the 7d00: 20 43 43 43 27 73 20 54 4c 56 20 2a 2f 0a 09 63 CCC's TLV */..c 7d10: 63 63 5f 74 6c 76 20 3d 20 63 61 63 6b 65 79 5f cc_tlv = cackey_ 7d20: 72 65 61 64 5f 74 6c 76 28 73 6c 6f 74 29 3b 0a read_tlv(slot);. 7d30: 0a 09 2f 2a 20 4c 6f 6f 6b 20 66 6f 72 20 43 41 ../* Look for CA 7d40: 52 44 55 52 4c 73 20 74 68 61 74 20 63 6f 6f 72 RDURLs that coor 7d50: 65 73 70 6f 6e 64 20 74 6f 20 50 4b 49 20 61 70 espond to PKI ap 7d60: 70 6c 65 74 73 20 2a 2f 0a 09 66 6f 72 20 28 63 plets */..for (c 7d70: 63 63 5f 63 75 72 72 20 3d 20 63 63 63 5f 74 6c cc_curr = ccc_tl 7d80: 76 3b 20 63 63 63 5f 63 75 72 72 3b 20 63 63 63 v; ccc_curr; ccc 7d90: 5f 63 75 72 72 20 3d 20 63 63 63 5f 63 75 72 72 _curr = ccc_curr 7da0: 2d 3e 5f 6e 65 78 74 29 20 7b 0a 09 09 43 41 43 ->_next) {...CAC 7db0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 7dc0: 28 22 46 6f 75 6e 64 20 74 61 67 3a 20 25 73 20 ("Found tag: %s 7dd0: 2e 2e 2e 20 22 2c 20 43 41 43 4b 45 59 5f 44 45 ... ", CACKEY_DE 7de0: 42 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54 4f 5f BUG_FUNC_TAG_TO_ 7df0: 53 54 52 28 63 63 63 5f 63 75 72 72 2d 3e 74 61 STR(ccc_curr->ta 7e00: 67 29 29 3b 0a 0a 09 09 69 66 20 28 63 63 63 5f g));....if (ccc_ 7e10: 63 75 72 72 2d 3e 74 61 67 20 21 3d 20 47 53 43 curr->tag != GSC 7e20: 49 53 5f 54 41 47 5f 43 41 52 44 55 52 4c 29 20 IS_TAG_CARDURL) 7e30: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU 7e40: 47 5f 50 52 49 4e 54 46 28 22 20 20 2e 2e 2e 20 G_PRINTF(" ... 7e50: 73 6b 69 70 70 69 6e 67 20 69 74 20 28 77 65 20 skipping it (we 7e60: 6f 6e 6c 79 20 63 61 72 65 20 61 62 6f 75 74 20 only care about 7e70: 43 41 52 44 55 52 4c 73 29 22 29 3b 0a 0a 09 09 CARDURLs)");.... 7e80: 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a .continue;...}.. 7e90: 09 09 69 66 20 28 28 63 63 63 5f 63 75 72 72 2d ..if ((ccc_curr- 7ea0: 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e >value_cardurl-> 7eb0: 61 70 70 74 79 70 65 20 26 20 43 41 43 4b 45 59 apptype & CACKEY 7ec0: 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 29 20 21 3d _TLV_APP_PKI) != 7ed0: 20 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f CACKEY_TLV_APP_ 7ee0: 50 4b 49 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 PKI) {....CACKEY 7ef0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 7f00: 20 2e 2e 2e 20 73 6b 69 70 70 69 6e 67 20 69 74 ... skipping it 7f10: 20 28 77 65 20 6f 6e 6c 79 20 63 61 72 65 20 61 (we only care a 7f20: 62 6f 75 74 20 50 4b 49 20 61 70 70 6c 65 74 73 bout PKI applets 7f30: 2c 20 74 68 69 73 20 61 70 70 6c 65 74 20 73 75 , this applet su 7f40: 70 70 6f 72 74 73 3a 20 25 73 2f 25 30 32 78 29 pports: %s/%02x) 7f50: 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ", CACKEY_DEBUG_ 7f60: 46 55 4e 43 5f 41 50 50 54 59 50 45 5f 54 4f 5f FUNC_APPTYPE_TO_ 7f70: 53 54 52 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 STR(ccc_curr->va 7f80: 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 lue_cardurl->app 7f90: 74 79 70 65 29 2c 20 28 75 6e 73 69 67 6e 65 64 type), (unsigned 7fa0: 20 69 6e 74 29 20 63 63 63 5f 63 75 72 72 2d 3e int) ccc_curr-> 7fb0: 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 value_cardurl->a 7fc0: 70 70 74 79 70 65 29 3b 0a 0a 09 09 09 63 6f 6e pptype);.....con 7fd0: 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 43 41 tinue;...}....CA 7fe0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 7ff0: 42 55 46 28 22 52 49 44 3a 22 2c 20 63 63 63 5f BUF("RID:", ccc_ 8000: 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 curr->value_card 8010: 75 72 6c 2d 3e 72 69 64 2c 20 73 69 7a 65 6f 66 url->rid, sizeof 8020: 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 (ccc_curr->value 8030: 5f 63 61 72 64 75 72 6c 2d 3e 72 69 64 29 29 3b _cardurl->rid)); 8040: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 8050: 50 52 49 4e 54 46 28 22 41 70 70 49 44 20 3d 20 PRINTF("AppID = 8060: 25 73 2f 25 30 34 6c 78 22 2c 20 43 41 43 4b 45 %s/%04lx", CACKE 8070: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 4f 42 4a Y_DEBUG_FUNC_OBJ 8080: 49 44 5f 54 4f 5f 53 54 52 28 63 63 63 5f 63 75 ID_TO_STR(ccc_cu 8090: 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 rr->value_cardur 80a0: 6c 2d 3e 61 70 70 69 64 29 2c 20 28 75 6e 73 69 l->appid), (unsi 80b0: 67 6e 65 64 20 6c 6f 6e 67 29 20 63 63 63 5f 63 gned long) ccc_c 80c0: 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 urr->value_cardu 80d0: 72 6c 2d 3e 61 70 70 69 64 29 3b 0a 09 09 43 41 rl->appid);...CA 80e0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 80f0: 46 28 22 4f 62 6a 65 63 74 49 44 20 3d 20 25 73 F("ObjectID = %s 8100: 2f 25 30 34 6c 78 22 2c 20 43 41 43 4b 45 59 5f /%04lx", CACKEY_ 8110: 44 45 42 55 47 5f 46 55 4e 43 5f 4f 42 4a 49 44 DEBUG_FUNC_OBJID 8120: 5f 54 4f 5f 53 54 52 28 63 63 63 5f 63 75 72 72 _TO_STR(ccc_curr 8130: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d ->value_cardurl- 8140: 3e 6f 62 6a 65 63 74 69 64 29 2c 20 28 75 6e 73 >objectid), (uns 8150: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 63 63 5f igned long) ccc_ 8160: 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 curr->value_card 8170: 75 72 6c 2d 3e 6f 62 6a 65 63 74 69 64 29 3b 0a url->objectid);. 8180: 0a 09 09 6d 65 6d 63 70 79 28 63 75 72 72 5f 61 ...memcpy(curr_a 8190: 69 64 2c 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 id, ccc_curr->va 81a0: 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 72 69 64 lue_cardurl->rid 81b0: 2c 20 73 69 7a 65 6f 66 28 63 63 63 5f 63 75 72 , sizeof(ccc_cur 81c0: 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c r->value_cardurl 81d0: 2d 3e 72 69 64 29 29 3b 0a 09 09 63 75 72 72 5f ->rid));...curr_ 81e0: 61 69 64 5b 73 69 7a 65 6f 66 28 63 75 72 72 5f aid[sizeof(curr_ 81f0: 61 69 64 29 20 2d 20 32 5d 20 3d 20 28 63 63 63 aid) - 2] = (ccc 8200: 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 _curr->value_car 8210: 64 75 72 6c 2d 3e 61 70 70 69 64 20 3e 3e 20 38 durl->appid >> 8 8220: 29 20 26 20 30 78 66 66 3b 0a 09 09 63 75 72 72 ) & 0xff;...curr 8230: 5f 61 69 64 5b 73 69 7a 65 6f 66 28 63 75 72 72 _aid[sizeof(curr 8240: 5f 61 69 64 29 20 2d 20 31 5d 20 3d 20 63 63 63 _aid) - 1] = ccc 8250: 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 _curr->value_car 8260: 64 75 72 6c 2d 3e 61 70 70 69 64 20 26 20 30 78 durl->appid & 0x 8270: 66 66 3b 0a 0a 09 09 2f 2a 20 53 65 6c 65 63 74 ff;..../* Select 8280: 20 66 6f 75 6e 64 20 61 70 70 6c 65 74 20 2e 2e found applet .. 8290: 2e 20 2a 2f 0a 09 09 73 65 6c 65 63 74 5f 72 65 . */...select_re 82a0: 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 t = cackey_selec 82b0: 74 5f 61 70 70 6c 65 74 28 73 6c 6f 74 2c 20 63 t_applet(slot, c 82c0: 75 72 72 5f 61 69 64 2c 20 73 69 7a 65 6f 66 28 urr_aid, sizeof( 82d0: 63 75 72 72 5f 61 69 64 29 29 3b 0a 09 09 69 66 curr_aid));...if 82e0: 20 28 73 65 6c 65 63 74 5f 72 65 74 20 3c 20 30 (select_ret < 0 82f0: 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE 8300: 42 55 47 5f 50 52 49 4e 54 46 28 22 46 61 69 6c BUG_PRINTF("Fail 8310: 65 64 20 74 6f 20 73 65 6c 65 63 74 20 61 70 70 ed to select app 8320: 6c 65 74 2c 20 73 6b 69 70 70 69 6e 67 20 70 72 let, skipping pr 8330: 6f 63 65 73 73 69 6e 67 20 6f 66 20 74 68 69 73 ocessing of this 8340: 20 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 63 object");.....c 8350: 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 ontinue;...}.... 8360: 2f 2a 20 2e 2e 2e 20 61 6e 64 20 6f 62 6a 65 63 /* ... and objec 8370: 74 20 28 66 69 6c 65 29 20 2a 2f 0a 09 09 73 65 t (file) */...se 8380: 6c 65 63 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 lect_ret = cacke 8390: 79 5f 73 65 6c 65 63 74 5f 66 69 6c 65 28 73 6c y_select_file(sl 83a0: 6f 74 2c 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 ot, ccc_curr->va 83b0: 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 6a lue_cardurl->obj 83c0: 65 63 74 69 64 29 3b 0a 09 09 69 66 20 28 73 65 ectid);...if (se 83d0: 6c 65 63 74 5f 72 65 74 20 3c 20 30 29 20 7b 0a lect_ret < 0) {. 83e0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 83f0: 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 74 PRINTF("Failed t 8400: 6f 20 73 65 6c 65 63 74 20 66 69 6c 65 2c 20 73 o select file, s 8410: 6b 69 70 70 69 6e 67 20 70 72 6f 63 65 73 73 69 kipping processi 8420: 6e 67 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 ng of this objec 8430: 74 22 29 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 t");.....continu 8440: 65 3b 0a 09 09 7d 0a 0a 09 09 2f 2a 20 50 72 6f e;...}..../* Pro 8450: 63 65 73 73 20 74 68 69 73 20 66 69 6c 65 27 73 cess this file's 8460: 20 54 4c 56 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 TLV looking for 8470: 20 63 65 72 74 69 66 69 63 61 74 65 73 20 2a 2f certificates */ 8480: 0a 09 09 61 70 70 5f 74 6c 76 20 3d 20 63 61 63 ...app_tlv = cac 8490: 6b 65 79 5f 72 65 61 64 5f 74 6c 76 28 73 6c 6f key_read_tlv(slo 84a0: 74 29 3b 0a 0a 09 09 66 6f 72 20 28 61 70 70 5f t);....for (app_ 84b0: 63 75 72 72 20 3d 20 61 70 70 5f 74 6c 76 3b 20 curr = app_tlv; 84c0: 61 70 70 5f 63 75 72 72 3b 20 61 70 70 5f 63 75 app_curr; app_cu 84d0: 72 72 20 3d 20 61 70 70 5f 63 75 72 72 2d 3e 5f rr = app_curr->_ 84e0: 6e 65 78 74 29 20 7b 0a 09 09 09 43 41 43 4b 45 next) {....CACKE 84f0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 8500: 46 6f 75 6e 64 20 74 61 67 3a 20 25 73 22 2c 20 Found tag: %s", 8510: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN 8520: 43 5f 54 41 47 5f 54 4f 5f 53 54 52 28 61 70 70 C_TAG_TO_STR(app 8530: 5f 63 75 72 72 2d 3e 74 61 67 29 29 3b 0a 09 09 _curr->tag));... 8540: 09 69 66 20 28 61 70 70 5f 63 75 72 72 2d 3e 74 .if (app_curr->t 8550: 61 67 20 21 3d 20 47 53 43 49 53 5f 54 41 47 5f ag != GSCIS_TAG_ 8560: 43 45 52 54 49 46 49 43 41 54 45 29 20 7b 0a 09 CERTIFICATE) {.. 8570: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 8580: 50 52 49 4e 54 46 28 22 20 20 2e 2e 2e 20 73 6b PRINTF(" ... sk 8590: 69 70 70 69 6e 67 20 69 74 20 28 77 65 20 6f 6e ipping it (we on 85a0: 6c 79 20 63 61 72 65 20 61 62 6f 75 74 20 43 45 ly care about CE 85b0: 52 54 49 46 49 43 41 54 45 73 29 22 29 3b 0a 0a RTIFICATEs)");.. 85c0: 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 ....continue;... 85d0: 09 7d 0a 0a 09 09 09 63 75 72 72 5f 69 64 20 3d .}.....curr_id = 85e0: 20 26 63 65 72 74 73 5b 6f 75 74 69 64 78 5d 3b &certs[outidx]; 85f0: 0a 09 09 09 6f 75 74 69 64 78 2b 2b 3b 0a 0a 09 ....outidx++;... 8600: 09 09 6d 65 6d 63 70 79 28 63 75 72 72 5f 69 64 ..memcpy(curr_id 8610: 2d 3e 61 70 70 6c 65 74 2c 20 63 75 72 72 5f 61 ->applet, curr_a 8620: 69 64 2c 20 73 69 7a 65 6f 66 28 63 75 72 72 5f id, sizeof(curr_ 8630: 69 64 2d 3e 61 70 70 6c 65 74 29 29 3b 0a 09 09 id->applet));... 8640: 09 63 75 72 72 5f 69 64 2d 3e 66 69 6c 65 20 3d .curr_id->file = 8650: 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 ccc_curr->value 8660: 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 6a 65 63 74 _cardurl->object 8670: 69 64 3b 0a 09 09 09 63 75 72 72 5f 69 64 2d 3e id;....curr_id-> 8680: 6c 61 62 65 6c 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 label = NULL;... 8690: 09 09 63 75 72 72 5f 69 64 2d 3e 63 65 72 74 69 ..curr_id->certi 86a0: 66 69 63 61 74 65 5f 6c 65 6e 20 3d 20 61 70 70 ficate_len = app 86b0: 5f 63 75 72 72 2d 3e 6c 65 6e 67 74 68 3b 0a 0a _curr->length;.. 86c0: 09 09 09 63 75 72 72 5f 69 64 2d 3e 63 65 72 74 ...curr_id->cert 86d0: 69 66 69 63 61 74 65 20 3d 20 6d 61 6c 6c 6f 63 ificate = malloc 86e0: 28 63 75 72 72 5f 69 64 2d 3e 63 65 72 74 69 66 (curr_id->certif 86f0: 69 63 61 74 65 5f 6c 65 6e 29 3b 0a 09 09 09 6d icate_len);....m 8700: 65 6d 63 70 79 28 63 75 72 72 5f 69 64 2d 3e 63 emcpy(curr_id->c 8710: 65 72 74 69 66 69 63 61 74 65 2c 20 61 70 70 5f ertificate, app_ 8720: 63 75 72 72 2d 3e 76 61 6c 75 65 2c 20 63 75 72 curr->value, cur 8730: 72 5f 69 64 2d 3e 63 65 72 74 69 66 69 63 61 74 r_id->certificat 8740: 65 5f 6c 65 6e 29 3b 0a 0a 09 09 09 69 66 20 28 e_len);.....if ( 8750: 6f 75 74 69 64 78 20 3e 3d 20 2a 63 6f 75 6e 74 outidx >= *count 8760: 29 20 7b 0a 09 09 09 09 69 66 20 28 63 65 72 74 ) {.....if (cert 8770: 73 5f 72 65 73 69 7a 61 62 6c 65 29 20 7b 0a 09 s_resizable) {.. 8780: 09 09 09 09 2a 63 6f 75 6e 74 20 2a 3d 20 32 3b ....*count *= 2; 8790: 0a 09 09 09 09 09 63 65 72 74 73 20 3d 20 72 65 ......certs = re 87a0: 61 6c 6c 6f 63 28 63 65 72 74 73 2c 20 73 69 7a alloc(certs, siz 87b0: 65 6f 66 28 2a 63 65 72 74 73 29 20 2a 20 28 2a eof(*certs) * (* 87c0: 63 6f 75 6e 74 29 29 3b 0a 09 09 09 09 7d 20 65 count));.....} e 87d0: 6c 73 65 20 7b 0a 09 09 09 09 09 62 72 65 61 6b lse {......break 87e0: 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d ;.....}....}...} 87f0: 0a 0a 09 09 63 61 63 6b 65 79 5f 66 72 65 65 5f ....cackey_free_ 8800: 74 6c 76 28 61 70 70 5f 74 6c 76 29 3b 0a 0a 09 tlv(app_tlv);... 8810: 09 69 66 20 28 6f 75 74 69 64 78 20 3e 3d 20 2a .if (outidx >= * 8820: 63 6f 75 6e 74 29 20 7b 0a 09 09 09 62 72 65 61 count) {....brea 8830: 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 63 61 63 6b k;...}..}...cack 8840: 65 79 5f 66 72 65 65 5f 74 6c 76 28 63 63 63 5f ey_free_tlv(ccc_ 8850: 74 6c 76 29 3b 0a 0a 09 2a 63 6f 75 6e 74 20 3d tlv);...*count = 8860: 20 6f 75 74 69 64 78 3b 0a 0a 09 69 66 20 28 63 outidx;...if (c 8870: 65 72 74 73 5f 72 65 73 69 7a 61 62 6c 65 29 20 erts_resizable) 8880: 7b 0a 09 09 63 65 72 74 73 20 3d 20 72 65 61 6c {...certs = real 8890: 6c 6f 63 28 63 65 72 74 73 2c 20 73 69 7a 65 6f loc(certs, sizeo 88a0: 66 28 2a 63 65 72 74 73 29 20 2a 20 28 2a 63 6f f(*certs) * (*co 88b0: 75 6e 74 29 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 unt));..}...retu 88c0: 72 6e 28 63 65 72 74 73 29 3b 0a 7d 0a 0a 73 74 rn(certs);.}..st 88d0: 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f atic int cackey_ 88e0: 6c 6f 67 69 6e 28 73 74 72 75 63 74 20 63 61 63 login(struct cac 88f0: 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 key_slot *slot, 8900: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 unsigned char *p 8910: 69 6e 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e in, unsigned lon 8920: 67 20 70 69 6e 5f 6c 65 6e 2c 20 69 6e 74 20 2a g pin_len, int * 8930: 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 5f tries_remaining_ 8940: 70 29 20 7b 0a 09 75 69 6e 74 31 36 5f 74 20 72 p) {..uint16_t r 8950: 65 73 70 6f 6e 73 65 5f 63 6f 64 65 3b 0a 09 69 esponse_code;..i 8960: 6e 74 20 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 nt tries_remaini 8970: 6e 67 3b 0a 09 69 6e 74 20 73 65 6e 64 5f 72 65 ng;..int send_re 8980: 74 3b 0a 0a 09 2f 2a 20 49 6e 64 69 63 61 74 65 t;.../* Indicate 8990: 20 74 68 61 74 20 77 65 20 64 6f 20 6e 6f 74 20 that we do not 89a0: 6b 6e 6f 77 20 61 62 6f 75 74 20 68 6f 77 20 6d know about how m 89b0: 61 6e 79 20 74 72 69 65 73 20 61 72 65 20 72 65 any tries are re 89c0: 6d 61 69 6e 69 6e 67 20 2a 2f 0a 09 69 66 20 28 maining */..if ( 89d0: 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 5f tries_remaining_ 89e0: 70 29 20 7b 0a 09 09 2a 74 72 69 65 73 5f 72 65 p) {...*tries_re 89f0: 6d 61 69 6e 69 6e 67 5f 70 20 3d 20 2d 31 3b 0a maining_p = -1;. 8a00: 09 7d 0a 0a 09 2f 2a 20 49 73 73 75 65 20 50 49 .}.../* Issue PI 8a10: 4e 20 56 65 72 69 66 79 20 2a 2f 0a 09 73 65 6e N Verify */..sen 8a20: 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 d_ret = cackey_s 8a30: 65 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c 20 47 end_apdu(slot, G 8a40: 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 SCIS_CLASS_ISO78 8a50: 31 36 2c 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 16, GSCIS_INSTR_ 8a60: 56 45 52 49 46 59 2c 20 30 78 30 30 2c 20 30 78 VERIFY, 0x00, 0x 8a70: 30 30 2c 20 70 69 6e 5f 6c 65 6e 2c 20 70 69 6e 00, pin_len, pin 8a80: 2c 20 30 78 30 30 2c 20 26 72 65 73 70 6f 6e 73 , 0x00, &respons 8a90: 65 5f 63 6f 64 65 2c 20 4e 55 4c 4c 2c 20 4e 55 e_code, NULL, NU 8aa0: 4c 4c 29 3b 0a 09 69 66 20 28 73 65 6e 64 5f 72 LL);..if (send_r 8ab0: 65 74 20 3c 20 30 29 20 7b 0a 09 09 69 66 20 28 et < 0) {...if ( 8ac0: 28 72 65 73 70 6f 6e 73 65 5f 63 6f 64 65 20 26 (response_code & 8ad0: 20 30 78 36 33 43 30 29 20 3d 3d 20 30 78 36 33 0x63C0) == 0x63 8ae0: 43 30 29 20 7b 0a 09 09 09 74 72 69 65 73 5f 72 C0) {....tries_r 8af0: 65 6d 61 69 6e 69 6e 67 20 3d 20 28 72 65 73 70 emaining = (resp 8b00: 6f 6e 73 65 5f 63 6f 64 65 20 26 20 30 78 46 29 onse_code & 0xF) 8b10: 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ;.....CACKEY_DEB 8b20: 55 47 5f 50 52 49 4e 54 46 28 22 50 49 4e 20 56 UG_PRINTF("PIN V 8b30: 65 72 69 66 69 63 61 74 69 6f 6e 20 66 61 69 6c erification fail 8b40: 65 64 2c 20 25 69 20 74 72 69 65 73 20 72 65 6d ed, %i tries rem 8b50: 61 69 6e 69 6e 67 22 2c 20 74 72 69 65 73 5f 72 aining", tries_r 8b60: 65 6d 61 69 6e 69 6e 67 29 3b 0a 0a 09 09 09 69 emaining);.....i 8b70: 66 20 28 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 f (tries_remaini 8b80: 6e 67 5f 70 29 20 7b 0a 09 09 09 09 2a 74 72 69 ng_p) {.....*tri 8b90: 65 73 5f 72 65 6d 61 69 6e 69 6e 67 5f 70 20 3d es_remaining_p = 8ba0: 20 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 tries_remaining 8bb0: 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 69 66 ;....}...}....if 8bc0: 20 28 72 65 73 70 6f 6e 73 65 5f 63 6f 64 65 20 (response_code 8bd0: 3d 3d 20 30 78 36 39 38 33 29 20 7b 0a 09 09 09 == 0x6983) {.... 8be0: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 4c 4f return(CACKEY_LO 8bf0: 47 49 4e 5f 4c 4f 43 4b 45 44 29 3b 0a 09 09 7d GIN_LOCKED);...} 8c00: 20 65 6c 73 65 20 7b 0a 09 09 09 72 65 74 75 72 else {....retur 8c10: 6e 28 43 41 43 4b 45 59 5f 4c 4f 47 49 4e 5f 42 n(CACKEY_LOGIN_B 8c20: 41 44 50 49 4e 29 3b 0a 09 09 7d 0a 09 7d 0a 0a ADPIN);...}..}.. 8c30: 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 4c .return(CACKEY_L 8c40: 4f 47 49 4e 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 20 OGIN_OK);.}../* 8c50: 52 65 74 75 72 6e 73 20 31 20 69 66 20 61 20 74 Returns 1 if a t 8c60: 6f 6b 65 6e 20 69 73 20 69 6e 20 74 68 65 20 73 oken is in the s 8c70: 70 65 63 69 66 69 65 64 20 73 6c 6f 74 2c 20 30 pecified slot, 0 8c80: 20 6f 74 68 65 72 77 69 73 65 20 2a 2f 0a 73 74 otherwise */.st 8c90: 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f atic int cackey_ 8ca0: 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 28 73 74 token_present(st 8cb0: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ruct cackey_slot 8cc0: 20 2a 73 6c 6f 74 29 20 7b 0a 09 75 6e 73 69 67 *slot) {..unsig 8cd0: 6e 65 64 20 63 68 61 72 20 63 63 63 5f 61 69 64 ned char ccc_aid 8ce0: 5b 5d 20 3d 20 7b 47 53 43 49 53 5f 41 49 44 5f [] = {GSCIS_AID_ 8cf0: 43 43 43 7d 3b 0a 09 69 6e 74 20 73 65 6e 64 5f CCC};..int send_ 8d00: 72 65 74 3b 0a 0a 09 2f 2a 20 53 65 6c 65 63 74 ret;.../* Select 8d10: 20 74 68 65 20 43 43 43 20 41 70 70 6c 65 74 20 the CCC Applet 8d20: 2a 2f 0a 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 */..send_ret = c 8d30: 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 70 ackey_select_app 8d40: 6c 65 74 28 73 6c 6f 74 2c 20 63 63 63 5f 61 69 let(slot, ccc_ai 8d50: 64 2c 20 73 69 7a 65 6f 66 28 63 63 63 5f 61 69 d, sizeof(ccc_ai 8d60: 64 29 29 3b 0a 09 69 66 20 28 73 65 6e 64 5f 72 d));..if (send_r 8d70: 65 74 20 3c 20 30 29 20 7b 0a 09 09 72 65 74 75 et < 0) {...retu 8d80: 72 6e 28 30 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 rn(0);..}...retu 8d90: 72 6e 28 31 29 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 rn(1);.}../* Ret 8da0: 75 72 6e 73 20 30 20 6f 6e 20 73 75 63 63 65 73 urns 0 on succes 8db0: 73 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 s */.static int 8dc0: 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 63 72 65 cackey_mutex_cre 8dd0: 61 74 65 28 76 6f 69 64 20 2a 2a 6d 75 74 65 78 ate(void **mutex 8de0: 29 20 7b 0a 09 70 74 68 72 65 61 64 5f 6d 75 74 ) {..pthread_mut 8df0: 65 78 5f 74 20 2a 70 74 68 72 65 61 64 5f 6d 75 ex_t *pthread_mu 8e00: 74 65 78 3b 0a 09 69 6e 74 20 70 74 68 72 65 61 tex;..int pthrea 8e10: 64 5f 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 52 56 d_retval;..CK_RV 8e20: 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 3b 0a custom_retval;. 8e30: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 8e40: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 8e50: 3b 0a 0a 09 69 66 20 28 28 63 61 63 6b 65 79 5f ;...if ((cackey_ 8e60: 61 72 67 73 2e 66 6c 61 67 73 20 26 20 43 4b 46 args.flags & CKF 8e70: 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 _OS_LOCKING_OK) 8e80: 3d 3d 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e == CKF_OS_LOCKIN 8e90: 47 5f 4f 4b 29 20 7b 0a 09 09 70 74 68 72 65 61 G_OK) {...pthrea 8ea0: 64 5f 6d 75 74 65 78 20 3d 20 6d 61 6c 6c 6f 63 d_mutex = malloc 8eb0: 28 73 69 7a 65 6f 66 28 2a 70 74 68 72 65 61 64 (sizeof(*pthread 8ec0: 5f 6d 75 74 65 78 29 29 3b 0a 09 09 69 66 20 28 _mutex));...if ( 8ed0: 21 70 74 68 72 65 61 64 5f 6d 75 74 65 78 29 20 !pthread_mutex) 8ee0: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU 8ef0: 47 5f 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 G_PRINTF("Failed 8f00: 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 6d 65 6d to allocate mem 8f10: 6f 72 79 2e 22 29 3b 0a 0a 09 09 09 72 65 74 75 ory.");.....retu 8f20: 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 70 rn(-1);...}....p 8f30: 74 68 72 65 61 64 5f 72 65 74 76 61 6c 20 3d 20 thread_retval = 8f40: 70 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 69 6e pthread_mutex_in 8f50: 69 74 28 70 74 68 72 65 61 64 5f 6d 75 74 65 78 it(pthread_mutex 8f60: 2c 20 4e 55 4c 4c 29 3b 0a 09 09 69 66 20 28 70 , NULL);...if (p 8f70: 74 68 72 65 61 64 5f 72 65 74 76 61 6c 20 21 3d thread_retval != 8f80: 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 0) {....CACKEY_ 8f90: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 70 74 DEBUG_PRINTF("pt 8fa0: 68 72 65 61 64 5f 6d 75 74 65 78 5f 69 6e 69 74 hread_mutex_init 8fb0: 28 29 20 72 65 74 75 72 6e 65 64 20 65 72 72 6f () returned erro 8fc0: 72 20 28 25 69 29 2e 22 2c 20 70 74 68 72 65 61 r (%i).", pthrea 8fd0: 64 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 72 d_retval);.....r 8fe0: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a eturn(-1);...}.. 8ff0: 09 09 2a 6d 75 74 65 78 20 3d 20 70 74 68 72 65 ..*mutex = pthre 9000: 61 64 5f 6d 75 74 65 78 3b 0a 09 7d 20 65 6c 73 ad_mutex;..} els 9010: 65 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 e {...if (cackey 9020: 5f 61 72 67 73 2e 43 72 65 61 74 65 4d 75 74 65 _args.CreateMute 9030: 78 29 20 7b 0a 09 09 09 63 75 73 74 6f 6d 5f 72 x) {....custom_r 9040: 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 61 etval = cackey_a 9050: 72 67 73 2e 43 72 65 61 74 65 4d 75 74 65 78 28 rgs.CreateMutex( 9060: 6d 75 74 65 78 29 3b 0a 0a 09 09 09 69 66 20 28 mutex);.....if ( 9070: 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 21 3d custom_retval != 9080: 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 43 CKR_OK) {.....C 9090: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 90a0: 54 46 28 22 63 61 63 6b 65 79 5f 61 72 67 73 2e TF("cackey_args. 90b0: 43 72 65 61 74 65 4d 75 74 65 78 28 29 20 72 65 CreateMutex() re 90c0: 74 75 72 6e 65 64 20 65 72 72 6f 72 20 28 25 6c turned error (%l 90d0: 69 29 2e 22 2c 20 28 6c 6f 6e 67 29 20 63 75 73 i).", (long) cus 90e0: 74 6f 6d 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 tom_retval);.... 90f0: 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 ..return(-1);... 9100: 09 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b .}...}..}...CACK 9110: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 9120: 22 52 65 74 75 72 6e 69 6e 67 20 73 75 63 65 73 "Returning suces 9130: 73 66 75 6c 6c 79 20 28 30 29 22 29 3b 0a 0a 09 sfully (0)");... 9140: 72 65 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 2f 2a return(0);.}../* 9150: 20 52 65 74 75 72 6e 73 20 30 20 6f 6e 20 73 75 Returns 0 on su 9160: 63 63 65 73 73 20 2a 2f 0a 73 74 61 74 69 63 20 ccess */.static 9170: 69 6e 74 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 int cackey_mutex 9180: 5f 6c 6f 63 6b 28 76 6f 69 64 20 2a 6d 75 74 65 _lock(void *mute 9190: 78 29 20 7b 0a 09 70 74 68 72 65 61 64 5f 6d 75 x) {..pthread_mu 91a0: 74 65 78 5f 74 20 2a 70 74 68 72 65 61 64 5f 6d tex_t *pthread_m 91b0: 75 74 65 78 3b 0a 09 69 6e 74 20 70 74 68 72 65 utex;..int pthre 91c0: 61 64 5f 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 52 ad_retval;..CK_R 91d0: 56 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 3b V custom_retval; 91e0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 91f0: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 9200: 29 3b 0a 0a 09 69 66 20 28 28 63 61 63 6b 65 79 );...if ((cackey 9210: 5f 61 72 67 73 2e 66 6c 61 67 73 20 26 20 43 4b _args.flags & CK 9220: 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 F_OS_LOCKING_OK) 9230: 20 3d 3d 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 == CKF_OS_LOCKI 9240: 4e 47 5f 4f 4b 29 20 7b 0a 09 09 70 74 68 72 65 NG_OK) {...pthre 9250: 61 64 5f 6d 75 74 65 78 20 3d 20 6d 75 74 65 78 ad_mutex = mutex 9260: 3b 0a 0a 09 09 70 74 68 72 65 61 64 5f 72 65 74 ;....pthread_ret 9270: 76 61 6c 20 3d 20 70 74 68 72 65 61 64 5f 6d 75 val = pthread_mu 9280: 74 65 78 5f 6c 6f 63 6b 28 70 74 68 72 65 61 64 tex_lock(pthread 9290: 5f 6d 75 74 65 78 29 3b 0a 09 09 69 66 20 28 70 _mutex);...if (p 92a0: 74 68 72 65 61 64 5f 72 65 74 76 61 6c 20 21 3d thread_retval != 92b0: 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 0) {....CACKEY_ 92c0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 70 74 DEBUG_PRINTF("pt 92d0: 68 72 65 61 64 5f 6d 75 74 65 78 5f 6c 6f 63 6b hread_mutex_lock 92e0: 28 29 20 72 65 74 75 72 6e 65 64 20 65 72 72 6f () returned erro 92f0: 72 20 28 25 69 29 2e 22 2c 20 70 74 68 72 65 61 r (%i).", pthrea 9300: 64 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 72 d_retval);.....r 9310: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09 eturn(-1);...}.. 9320: 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 28 63 } else {...if (c 9330: 61 63 6b 65 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d ackey_args.LockM 9340: 75 74 65 78 29 20 7b 0a 09 09 09 63 75 73 74 6f utex) {....custo 9350: 6d 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 m_retval = cacke 9360: 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 y_args.LockMutex 9370: 28 6d 75 74 65 78 29 3b 0a 0a 09 09 09 69 66 20 (mutex);.....if 9380: 28 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 21 (custom_retval ! 9390: 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 = CKR_OK) {..... 93a0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 93b0: 4e 54 46 28 22 63 61 63 6b 65 79 5f 61 72 67 73 NTF("cackey_args 93c0: 2e 4c 6f 63 6b 4d 75 74 65 78 28 29 20 72 65 74 .LockMutex() ret 93d0: 75 72 6e 65 64 20 65 72 72 6f 72 20 28 25 6c 69 urned error (%li 93e0: 29 2e 22 2c 20 28 6c 6f 6e 67 29 20 63 75 73 74 ).", (long) cust 93f0: 6f 6d 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 om_retval);..... 9400: 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 09 .return(-1);.... 9410: 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b 45 }...}..}...CACKE 9420: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 9430: 52 65 74 75 72 6e 69 6e 67 20 73 75 63 65 73 73 Returning sucess 9440: 66 75 6c 6c 79 20 28 30 29 22 29 3b 0a 0a 09 72 fully (0)");...r 9450: 65 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 2f 2a 20 eturn(0);.}../* 9460: 52 65 74 75 72 6e 73 20 30 20 6f 6e 20 73 75 63 Returns 0 on suc 9470: 63 65 73 73 20 2a 2f 0a 73 74 61 74 69 63 20 69 cess */.static i 9480: 6e 74 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f nt cackey_mutex_ 9490: 75 6e 6c 6f 63 6b 28 76 6f 69 64 20 2a 6d 75 74 unlock(void *mut 94a0: 65 78 29 20 7b 0a 09 70 74 68 72 65 61 64 5f 6d ex) {..pthread_m 94b0: 75 74 65 78 5f 74 20 2a 70 74 68 72 65 61 64 5f utex_t *pthread_ 94c0: 6d 75 74 65 78 3b 0a 09 69 6e 74 20 70 74 68 72 mutex;..int pthr 94d0: 65 61 64 5f 72 65 74 76 61 6c 3b 0a 09 43 4b 5f ead_retval;..CK_ 94e0: 52 56 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c RV custom_retval 94f0: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 9500: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 9510: 22 29 3b 0a 0a 09 69 66 20 28 28 63 61 63 6b 65 ");...if ((cacke 9520: 79 5f 61 72 67 73 2e 66 6c 61 67 73 20 26 20 43 y_args.flags & C 9530: 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b KF_OS_LOCKING_OK 9540: 29 20 3d 3d 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b ) == CKF_OS_LOCK 9550: 49 4e 47 5f 4f 4b 29 20 7b 0a 09 09 70 74 68 72 ING_OK) {...pthr 9560: 65 61 64 5f 6d 75 74 65 78 20 3d 20 6d 75 74 65 ead_mutex = mute 9570: 78 3b 0a 0a 09 09 70 74 68 72 65 61 64 5f 72 65 x;....pthread_re 9580: 74 76 61 6c 20 3d 20 70 74 68 72 65 61 64 5f 6d tval = pthread_m 9590: 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 70 74 68 72 utex_unlock(pthr 95a0: 65 61 64 5f 6d 75 74 65 78 29 3b 0a 09 09 69 66 ead_mutex);...if 95b0: 20 28 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c (pthread_retval 95c0: 20 21 3d 20 30 29 20 7b 0a 09 09 09 43 41 43 4b != 0) {....CACK 95d0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 95e0: 22 70 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 75 "pthread_mutex_u 95f0: 6e 6c 6f 63 6b 28 29 20 72 65 74 75 72 6e 65 64 nlock() returned 9600: 20 65 72 72 6f 72 20 28 25 69 29 2e 22 2c 20 70 error (%i).", p 9610: 74 68 72 65 61 64 5f 72 65 74 76 61 6c 29 3b 0a thread_retval);. 9620: 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. 9630: 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 ..}..} else {... 9640: 69 66 20 28 63 61 63 6b 65 79 5f 61 72 67 73 2e if (cackey_args. 9650: 55 6e 6c 6f 63 6b 4d 75 74 65 78 29 20 7b 0a 09 UnlockMutex) {.. 9660: 09 09 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 ..custom_retval 9670: 3d 20 63 61 63 6b 65 79 5f 61 72 67 73 2e 55 6e = cackey_args.Un 9680: 6c 6f 63 6b 4d 75 74 65 78 28 6d 75 74 65 78 29 lockMutex(mutex) 9690: 3b 0a 0a 09 09 09 69 66 20 28 63 75 73 74 6f 6d ;.....if (custom 96a0: 5f 72 65 74 76 61 6c 20 21 3d 20 43 4b 52 5f 4f _retval != CKR_O 96b0: 4b 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f K) {.....CACKEY_ 96c0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 63 61 DEBUG_PRINTF("ca 96d0: 63 6b 65 79 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b ckey_args.Unlock 96e0: 4d 75 74 65 78 28 29 20 72 65 74 75 72 6e 65 64 Mutex() returned 96f0: 20 65 72 72 6f 72 20 28 25 6c 69 29 2e 22 2c 20 error (%li).", 9700: 28 6c 6f 6e 67 29 20 63 75 73 74 6f 6d 5f 72 65 (long) custom_re 9710: 74 76 61 6c 29 3b 0a 0a 09 09 09 09 72 65 74 75 tval);......retu 9720: 72 6e 28 2d 31 29 3b 0a 09 09 09 7d 0a 09 09 7d rn(-1);....}...} 9730: 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 9740: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 9750: 6e 69 6e 67 20 73 75 63 65 73 73 66 75 6c 6c 79 ning sucessfully 9760: 20 28 30 29 22 29 3b 0a 0a 09 72 65 74 75 72 6e (0)");...return 9770: 28 30 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 43 (0);.}..static C 9780: 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 K_ATTRIBUTE_PTR 9790: 63 61 63 6b 65 79 5f 67 65 74 5f 61 74 74 72 69 cackey_get_attri 97a0: 62 75 74 65 73 28 43 4b 5f 4f 42 4a 45 43 54 5f butes(CK_OBJECT_ 97b0: 43 4c 41 53 53 20 6f 62 6a 65 63 74 63 6c 61 73 CLASS objectclas 97c0: 73 2c 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 s, struct cackey 97d0: 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 2a _pcsc_identity * 97e0: 69 64 65 6e 74 69 74 79 2c 20 75 6e 73 69 67 6e identity, unsign 97f0: 65 64 20 6c 6f 6e 67 20 69 64 65 6e 74 69 74 79 ed long identity 9800: 5f 6e 75 6d 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 _num, CK_ULONG_P 9810: 54 52 20 70 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 TR pulCount) {.. 9820: 73 74 61 74 69 63 20 43 4b 5f 42 42 4f 4f 4c 20 static CK_BBOOL 9830: 63 6b 5f 74 72 75 65 20 3d 20 31 3b 0a 09 73 74 ck_true = 1;..st 9840: 61 74 69 63 20 43 4b 5f 42 42 4f 4f 4c 20 63 6b atic CK_BBOOL ck 9850: 5f 66 61 6c 73 65 20 3d 20 30 3b 0a 09 43 4b 5f _false = 0;..CK_ 9860: 55 4c 4f 4e 47 20 6e 75 6d 61 74 74 72 73 20 3d ULONG numattrs = 9870: 20 30 2c 20 72 65 74 76 61 6c 5f 63 6f 75 6e 74 0, retval_count 9880: 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 5f ;..CK_ATTRIBUTE_ 9890: 54 59 50 45 20 63 75 72 72 5f 61 74 74 72 5f 74 TYPE curr_attr_t 98a0: 79 70 65 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55 ype;..CK_ATTRIBU 98b0: 54 45 20 63 75 72 72 5f 61 74 74 72 2c 20 2a 72 TE curr_attr, *r 98c0: 65 74 76 61 6c 3b 0a 09 43 4b 5f 56 4f 49 44 5f etval;..CK_VOID_ 98d0: 50 54 52 20 70 56 61 6c 75 65 3b 0a 09 43 4b 5f PTR pValue;..CK_ 98e0: 55 4c 4f 4e 47 20 75 6c 56 61 6c 75 65 4c 65 6e ULONG ulValueLen 98f0: 3b 0a 09 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 ;..CK_OBJECT_CLA 9900: 53 53 20 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c 61 SS ck_object_cla 9910: 73 73 3b 0a 09 43 4b 5f 43 45 52 54 49 46 49 43 ss;..CK_CERTIFIC 9920: 41 54 45 5f 54 59 50 45 20 63 6b 5f 63 65 72 74 ATE_TYPE ck_cert 9930: 69 66 69 63 61 74 65 5f 74 79 70 65 3b 0a 09 43 ificate_type;..C 9940: 4b 5f 4b 45 59 5f 54 59 50 45 20 63 6b 5f 6b 65 K_KEY_TYPE ck_ke 9950: 79 5f 74 79 70 65 3b 0a 09 43 4b 5f 55 54 46 38 y_type;..CK_UTF8 9960: 43 48 41 52 20 75 63 54 6d 70 42 75 66 5b 31 30 CHAR ucTmpBuf[10 9970: 32 34 5d 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 24];..unsigned c 9980: 68 61 72 20 63 65 72 74 69 66 69 63 61 74 65 5b har certificate[ 9990: 31 36 33 38 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 16384];..ssize_t 99a0: 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e certificate_len 99b0: 20 3d 20 2d 31 2c 20 78 35 30 39 5f 72 65 61 64 = -1, x509_read 99c0: 5f 72 65 74 3b 0a 09 69 6e 74 20 70 56 61 6c 75 _ret;..int pValu 99d0: 65 5f 66 72 65 65 3b 0a 0a 09 43 41 43 4b 45 59 e_free;...CACKEY 99e0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 99f0: 61 6c 6c 65 64 20 28 6f 62 6a 65 63 74 43 6c 61 alled (objectCla 9a00: 73 73 20 3d 20 25 6c 75 2c 20 69 64 65 6e 74 69 ss = %lu, identi 9a10: 74 79 5f 6e 75 6d 20 3d 20 25 6c 75 29 2e 22 2c ty_num = %lu).", 9a20: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 9a30: 20 6f 62 6a 65 63 74 63 6c 61 73 73 2c 20 69 64 objectclass, id 9a40: 65 6e 74 69 74 79 5f 6e 75 6d 29 3b 0a 0a 09 69 entity_num);...i 9a50: 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 f (objectclass ! 9a60: 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 = CKO_CERTIFICAT 9a70: 45 20 26 26 20 6f 62 6a 65 63 74 63 6c 61 73 73 E && objectclass 9a80: 20 21 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b != CKO_PUBLIC_K 9a90: 45 59 20 26 26 20 6f 62 6a 65 63 74 63 6c 61 73 EY && objectclas 9aa0: 73 20 21 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 s != CKO_PRIVATE 9ab0: 5f 4b 45 59 29 20 7b 0a 09 09 43 41 43 4b 45 59 _KEY) {...CACKEY 9ac0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 9ad0: 65 74 75 72 6e 69 6e 67 20 30 20 6f 62 6a 65 63 eturning 0 objec 9ae0: 74 73 20 28 4e 55 4c 4c 29 2c 20 69 6e 76 61 6c ts (NULL), inval 9af0: 69 64 20 6f 62 6a 65 63 74 20 63 6c 61 73 73 22 id object class" 9b00: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c );....return(NUL 9b10: 4c 29 3b 0a 09 7d 0a 0a 09 72 65 74 76 61 6c 5f L);..}...retval_ 9b20: 63 6f 75 6e 74 20 3d 20 31 36 3b 0a 09 72 65 74 count = 16;..ret 9b30: 76 61 6c 20 3d 20 6d 61 6c 6c 6f 63 28 72 65 74 val = malloc(ret 9b40: 76 61 6c 5f 63 6f 75 6e 74 20 2a 20 73 69 7a 65 val_count * size 9b50: 6f 66 28 2a 72 65 74 76 61 6c 29 29 3b 0a 0a 09 of(*retval));... 9b60: 2f 2a 20 58 58 58 3a 20 47 65 74 20 43 65 72 74 /* XXX: Get Cert 9b70: 20 2a 2f 0a 09 63 65 72 74 69 66 69 63 61 74 65 */..certificate 9b80: 5f 6c 65 6e 20 3d 20 2d 31 3b 0a 0a 09 69 66 20 _len = -1;...if 9b90: 28 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e (certificate_len 9ba0: 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 43 41 43 4b == -1) {...CACK 9bb0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 9bc0: 22 52 65 74 75 72 6e 69 6e 67 20 30 20 6f 62 6a "Returning 0 obj 9bd0: 65 63 74 73 20 28 4e 55 4c 4c 29 2c 20 74 68 69 ects (NULL), thi 9be0: 73 20 69 64 65 6e 74 69 74 79 20 64 6f 65 73 20 s identity does 9bf0: 6e 6f 74 20 68 61 76 65 20 61 6e 20 58 2e 35 30 not have an X.50 9c00: 39 20 63 65 72 74 69 66 69 63 61 74 65 20 61 73 9 certificate as 9c10: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 69 74 sociated with it 9c20: 20 61 6e 64 20 77 69 6c 6c 20 6e 6f 74 20 77 6f and will not wo 9c30: 72 6b 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 rk");....return( 9c40: 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 66 6f 72 20 NULL);..}...for 9c50: 28 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 20 (curr_attr_type 9c60: 3d 20 30 3b 20 63 75 72 72 5f 61 74 74 72 5f 74 = 0; curr_attr_t 9c70: 79 70 65 20 3c 20 30 78 63 65 35 33 36 33 35 66 ype < 0xce53635f 9c80: 3b 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 ; curr_attr_type 9c90: 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63 75 72 72 ++) {...if (curr 9ca0: 5f 61 74 74 72 5f 74 79 70 65 20 3d 3d 20 30 78 _attr_type == 0x 9cb0: 38 30 30 29 20 7b 0a 09 09 09 63 75 72 72 5f 61 800) {....curr_a 9cc0: 74 74 72 5f 74 79 70 65 20 3d 20 30 78 63 65 35 ttr_type = 0xce5 9cd0: 33 36 33 30 30 3b 0a 09 09 7d 0a 0a 09 09 70 56 36300;...}....pV 9ce0: 61 6c 75 65 5f 66 72 65 65 20 3d 20 30 3b 0a 09 alue_free = 0;.. 9cf0: 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a .pValue = NULL;. 9d00: 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 28 ..ulValueLen = ( 9d10: 43 4b 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 0a 09 09 CK_LONG) -1;.... 9d20: 73 77 69 74 63 68 20 28 63 75 72 72 5f 61 74 74 switch (curr_att 9d30: 72 5f 74 79 70 65 29 20 7b 0a 09 09 09 63 61 73 r_type) {....cas 9d40: 65 20 43 4b 41 5f 43 4c 41 53 53 3a 0a 09 09 09 e CKA_CLASS:.... 9d50: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 9d60: 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting 9d70: 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 43 attribute CKA_C 9d80: 4c 41 53 53 20 28 30 78 25 30 38 6c 78 29 20 2e LASS (0x%08lx) . 9d90: 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 9da0: 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 9db0: 79 70 65 29 3b 0a 0a 09 09 09 09 63 6b 5f 6f 62 ype);......ck_ob 9dc0: 6a 65 63 74 5f 63 6c 61 73 73 20 3d 20 6f 62 6a ject_class = obj 9dd0: 65 63 74 63 6c 61 73 73 3b 0a 0a 09 09 09 09 70 ectclass;......p 9de0: 56 61 6c 75 65 20 3d 20 26 63 6b 5f 6f 62 6a 65 Value = &ck_obje 9df0: 63 74 5f 63 6c 61 73 73 3b 0a 09 09 09 09 75 6c ct_class;.....ul 9e00: 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f ValueLen = sizeo 9e10: 66 28 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c 61 73 f(ck_object_clas 9e20: 73 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f s);......CACKEY_ 9e30: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 9e40: 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 .. returning %lu 9e50: 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 (%p/%lu)", (uns 9e60: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 igned long) *((C 9e70: 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 53 20 2a K_OBJECT_CLASS * 9e80: 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 ) pValue), pValu 9e90: 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e e, (unsigned lon 9ea0: 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a g) ulValueLen);. 9eb0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c 9ec0: 61 73 65 20 43 4b 41 5f 54 4f 4b 45 4e 3a 0a 09 ase CKA_TOKEN:.. 9ed0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 9ee0: 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti 9ef0: 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA 9f00: 5f 54 4f 4b 45 4e 20 28 30 78 25 30 38 6c 78 29 _TOKEN (0x%08lx) 9f10: 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned 9f20: 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr 9f30: 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 _type);......pVa 9f40: 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a lue = &ck_true;. 9f50: 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = 9f60: 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 sizeof(ck_true) 9f70: 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 ;......CACKEY_DE 9f80: 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... 9f90: 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 returning %lu ( 9fa0: 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 %p/%lu)", (unsig 9fb0: 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f ned long) *((CK_ 9fc0: 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 BBOOL *) pValue) 9fd0: 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 , pValue, (unsig 9fe0: 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 ned long) ulValu 9ff0: 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 eLen);......brea a000: 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 4d k;....case CKA_M a010: 4f 44 49 46 49 41 42 4c 45 3a 0a 09 09 09 09 43 ODIFIABLE:.....C a020: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN a030: 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 TF("Requesting a a040: 74 74 72 69 62 75 74 65 20 43 4b 41 5f 4d 4f 44 ttribute CKA_MOD a050: 49 46 49 41 42 4c 45 20 28 30 78 25 30 38 6c 78 IFIABLE (0x%08lx a060: 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 ) ...", (unsigne a070: 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 d long) curr_att a080: 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 r_type);......pV a090: 61 6c 75 65 20 3d 20 26 63 6b 5f 66 61 6c 73 65 alue = &ck_false a0a0: 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e ;.....ulValueLen a0b0: 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 66 61 6c = sizeof(ck_fal a0c0: 73 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 se);......CACKEY a0d0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" a0e0: 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c ... returning %l a0f0: 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e u (%p/%lu)", (un a100: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 signed long) *(( a110: 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c CK_BBOOL *) pVal a120: 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e ue), pValue, (un a130: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV a140: 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b a150: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK a160: 41 5f 4c 41 42 45 4c 3a 0a 09 09 09 09 43 41 43 A_LABEL:.....CAC a170: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF a180: 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 ("Requesting att a190: 72 69 62 75 74 65 20 43 4b 41 5f 4c 41 42 45 4c ribute CKA_LABEL a1a0: 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", a1b0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) a1c0: 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) a1d0: 3b 0a 0a 09 09 09 09 2f 2a 20 58 58 58 3a 20 44 ;....../* XXX: D a1e0: 65 74 65 72 6d 69 6e 65 20 6e 61 6d 65 20 2a 2f etermine name */ a1f0: 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB a200: 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... a210: 72 65 74 75 72 6e 69 6e 67 20 25 73 20 28 25 70 returning %s (%p a220: 2f 25 6c 75 29 22 2c 20 28 63 68 61 72 20 2a 29 /%lu)", (char *) a230: 20 28 28 43 4b 5f 55 54 46 38 43 48 41 52 20 2a ((CK_UTF8CHAR * a240: 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 ) pValue), pValu a250: 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e e, (unsigned lon a260: 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a g) ulValueLen);. a270: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c a280: 61 73 65 20 43 4b 41 5f 56 41 4c 55 45 3a 0a 09 ase CKA_VALUE:.. a290: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ a2a0: 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti a2b0: 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA a2c0: 5f 56 41 4c 55 45 20 28 30 78 25 30 38 6c 78 29 _VALUE (0x%08lx) a2d0: 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned a2e0: 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr a2f0: 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 73 77 69 _type);......swi a300: 74 63 68 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 tch (objectclass a310: 29 20 7b 0a 09 09 09 09 09 63 61 73 65 20 43 4b ) {......case CK a320: 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 3a 0a 09 O_PRIVATE_KEY:.. a330: 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU a340: 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 G_PRINTF(" ... b a350: 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 ut not getting i a360: 74 20 62 65 63 61 75 73 65 20 77 65 20 61 72 65 t because we are a370: 20 61 20 70 72 69 76 61 74 65 20 6b 65 79 2e 22 a private key." a380: 29 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b );........break; a390: 0a 09 09 09 09 09 63 61 73 65 20 43 4b 4f 5f 50 ......case CKO_P a3a0: 55 42 4c 49 43 5f 4b 45 59 3a 0a 09 09 09 09 09 UBLIC_KEY:...... a3b0: 09 2f 2a 20 58 58 58 3a 20 54 4f 44 4f 20 2a 2f ./* XXX: TODO */ a3c0: 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 ........break;.. a3d0: 09 09 09 09 63 61 73 65 20 43 4b 4f 5f 43 45 52 ....case CKO_CER a3e0: 54 49 46 49 43 41 54 45 3a 0a 09 09 09 09 09 09 TIFICATE:....... a3f0: 70 56 61 6c 75 65 20 3d 20 63 65 72 74 69 66 69 pValue = certifi a400: 63 61 74 65 3b 0a 09 09 09 09 09 09 75 6c 56 61 cate;.......ulVa a410: 6c 75 65 4c 65 6e 20 3d 20 63 65 72 74 69 66 69 lueLen = certifi a420: 63 61 74 65 5f 6c 65 6e 3b 0a 0a 09 09 09 09 09 cate_len;....... a430: 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 .break;.....}... a440: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ a450: 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 PRINTF(" ... ret a460: 75 72 6e 69 6e 67 20 25 70 2f 25 6c 75 22 2c 20 urning %p/%lu", a470: 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 pValue, (unsigne a480: 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c d long) ulValueL a490: 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b en);......break; a4a0: 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 49 53 53 ....case CKA_ISS a4b0: 55 45 52 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f UER:.....CACKEY_ a4c0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re a4d0: 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 questing attribu a4e0: 74 65 20 43 4b 41 5f 49 53 53 55 45 52 20 28 30 te CKA_ISSUER (0 a4f0: 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 x%08lx) ...", (u a500: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 nsigned long) cu a510: 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a rr_attr_type);.. a520: 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c ....if (objectcl a530: 61 73 73 20 21 3d 20 43 4b 4f 5f 43 45 52 54 49 ass != CKO_CERTI a540: 46 49 43 41 54 45 29 20 7b 0a 09 09 09 09 09 43 FICATE) {......C a550: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN a560: 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 TF(" ... but not a570: 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 getting it beca a580: 75 73 65 20 77 65 20 61 72 65 20 6e 6f 74 20 61 use we are not a a590: 20 63 65 72 74 69 66 69 63 61 74 65 2e 22 29 3b certificate."); a5a0: 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 .......break;... a5b0: 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 63 65 72 ..}......if (cer a5c0: 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3e 3d 20 tificate_len >= a5d0: 30 29 20 7b 0a 09 09 09 09 09 78 35 30 39 5f 72 0) {......x509_r a5e0: 65 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f 74 ead_ret = x509_t a5f0: 6f 5f 69 73 73 75 65 72 28 63 65 72 74 69 66 69 o_issuer(certifi a600: 63 61 74 65 2c 20 63 65 72 74 69 66 69 63 61 74 cate, certificat a610: 65 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 65 29 3b e_len, &pValue); a620: 0a 09 09 09 09 09 69 66 20 28 78 35 30 39 5f 72 ......if (x509_r a630: 65 61 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 ead_ret < 0) {.. a640: 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 4e 55 .....pValue = NU a650: 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 LL;......} else a660: 7b 0a 09 09 09 09 09 09 75 6c 56 61 6c 75 65 4c {.......ulValueL a670: 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 64 5f 72 en = x509_read_r a680: 65 74 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d et;......}.....} a690: 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB a6a0: 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... a6b0: 72 65 74 75 72 6e 69 6e 67 20 25 70 2f 25 6c 75 returning %p/%lu a6c0: 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 ", pValue, (unsi a6d0: 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c gned long) ulVal a6e0: 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 ueLen);......bre a6f0: 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f ak;....case CKA_ a700: 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52 3a 0a 09 SERIAL_NUMBER:.. a710: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ a720: 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti a730: 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA a740: 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52 20 28 _SERIAL_NUMBER ( a750: 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 0x%08lx) ...", ( a760: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 unsigned long) c a770: 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a urr_attr_type);. a780: 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 .....if (objectc a790: 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43 45 52 54 lass != CKO_CERT a7a0: 49 46 49 43 41 54 45 29 20 7b 0a 09 09 09 09 09 IFICATE) {...... a7b0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI a7c0: 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f NTF(" ... but no a7d0: 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 t getting it bec a7e0: 61 75 73 65 20 77 65 20 61 72 65 20 6e 6f 74 20 ause we are not a7f0: 61 20 63 65 72 74 69 66 69 63 61 74 65 2e 22 29 a certificate.") a800: 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 ;.......break;.. a810: 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 63 65 ...}......if (ce a820: 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3e 3d rtificate_len >= a830: 20 30 29 20 7b 0a 09 09 09 09 09 78 35 30 39 5f 0) {......x509_ a840: 72 65 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f read_ret = x509_ a850: 74 6f 5f 73 65 72 69 61 6c 28 63 65 72 74 69 66 to_serial(certif a860: 69 63 61 74 65 2c 20 63 65 72 74 69 66 69 63 61 icate, certifica a870: 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 65 29 te_len, &pValue) a880: 3b 0a 09 09 09 09 09 69 66 20 28 78 35 30 39 5f ;......if (x509_ a890: 72 65 61 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a read_ret < 0) {. a8a0: 09 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 4e ......pValue = N a8b0: 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 6c 73 65 ULL;......} else a8c0: 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 6c 75 65 {.......ulValue a8d0: 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 64 5f Len = x509_read_ a8e0: 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 ret;......}..... a8f0: 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 }......CACKEY_DE a900: 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... a910: 20 72 65 74 75 72 6e 69 6e 67 20 28 25 70 2f 25 returning (%p/% a920: 6c 75 29 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 lu)", pValue, (u a930: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c nsigned long) ul a940: 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 ValueLen);...... a950: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 break;....case C a960: 4b 41 5f 53 55 42 4a 45 43 54 3a 0a 09 09 09 09 KA_SUBJECT:..... a970: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI a980: 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 NTF("Requesting a990: 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 53 55 attribute CKA_SU a9a0: 42 4a 45 43 54 20 28 30 78 25 30 38 6c 78 29 20 BJECT (0x%08lx) a9b0: 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 ...", (unsigned a9c0: 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f long) curr_attr_ a9d0: 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 type);......if ( a9e0: 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43 objectclass != C a9f0: 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 29 20 KO_CERTIFICATE) aa00: 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {......CACKEY_DE aa10: 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... aa20: 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 but not getting aa30: 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20 61 it because we a aa40: 72 65 20 6e 6f 74 20 61 20 63 65 72 74 69 66 69 re not a certifi aa50: 63 61 74 65 2e 22 29 3b 0a 0a 09 09 09 09 09 62 cate.");.......b aa60: 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 reak;.....}..... aa70: 09 69 66 20 28 63 65 72 74 69 66 69 63 61 74 65 .if (certificate aa80: 5f 6c 65 6e 20 3e 3d 20 30 29 20 7b 0a 09 09 09 _len >= 0) {.... aa90: 09 09 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 ..x509_read_ret aaa0: 3d 20 78 35 30 39 5f 74 6f 5f 73 75 62 6a 65 63 = x509_to_subjec aab0: 74 28 63 65 72 74 69 66 69 63 61 74 65 2c 20 63 t(certificate, c aac0: 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 2c 20 ertificate_len, aad0: 26 70 56 61 6c 75 65 29 3b 0a 09 09 09 09 09 69 &pValue);......i aae0: 66 20 28 78 35 30 39 5f 72 65 61 64 5f 72 65 74 f (x509_read_ret aaf0: 20 3c 20 30 29 20 7b 0a 09 09 09 09 09 09 70 56 < 0) {.......pV ab00: 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 alue = NULL;.... ab10: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 ..} else {...... ab20: 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 78 35 .ulValueLen = x5 ab30: 30 39 5f 72 65 61 64 5f 72 65 74 3b 0a 09 09 09 09_read_ret;.... ab40: 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 ..}.....}......C ab50: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN ab60: 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 TF(" ... returni ab70: 6e 67 20 25 70 2f 25 6c 75 22 2c 20 70 56 61 6c ng %p/%lu", pVal ab80: 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f ue, (unsigned lo ab90: 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b ng) ulValueLen); aba0: 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... abb0: 63 61 73 65 20 43 4b 41 5f 49 44 3a 0a 09 09 09 case CKA_ID:.... abc0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR abd0: 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting abe0: 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 49 attribute CKA_I abf0: 44 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 D (0x%08lx) ..." ac00: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long ac10: 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 ) curr_attr_type ac20: 29 3b 0a 0a 09 09 09 09 75 63 54 6d 70 42 75 66 );......ucTmpBuf ac30: 5b 30 5d 20 3d 20 28 28 69 64 65 6e 74 69 74 79 [0] = ((identity ac40: 5f 6e 75 6d 20 2b 20 31 29 20 3e 3e 20 38 29 20 _num + 1) >> 8) ac50: 26 20 30 78 66 66 3b 0a 09 09 09 09 75 63 54 6d & 0xff;.....ucTm ac60: 70 42 75 66 5b 31 5d 20 3d 20 20 28 69 64 65 6e pBuf[1] = (iden ac70: 74 69 74 79 5f 6e 75 6d 20 2b 20 31 29 20 26 20 tity_num + 1) & ac80: 30 78 66 66 3b 0a 0a 09 09 09 09 70 56 61 6c 75 0xff;......pValu ac90: 65 20 3d 20 26 75 63 54 6d 70 42 75 66 3b 0a 09 e = &ucTmpBuf;.. aca0: 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 ...ulValueLen = acb0: 32 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 2;......CACKEY_D acc0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e EBUG_PRINTF(" .. acd0: 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 70 2f 25 . returning %p/% ace0: 6c 75 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e lu", pValue, (un acf0: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV ad00: 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b ad10: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK ad20: 41 5f 43 45 52 54 49 46 49 43 41 54 45 5f 54 59 A_CERTIFICATE_TY ad30: 50 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 PE:.....CACKEY_D ad40: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 EBUG_PRINTF("Req ad50: 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 uesting attribut ad60: 65 20 43 4b 41 5f 43 45 52 54 49 46 49 43 41 54 e CKA_CERTIFICAT ad70: 45 5f 54 59 50 45 20 28 30 78 25 30 38 6c 78 29 E_TYPE (0x%08lx) ad80: 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned ad90: 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr ada0: 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 _type);......if adb0: 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 (objectclass != adc0: 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 29 CKO_CERTIFICATE) add0: 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 {......CACKEY_D ade0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e EBUG_PRINTF(" .. adf0: 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e . but not gettin ae00: 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20 g it because we ae10: 61 72 65 20 6e 6f 74 20 61 20 63 65 72 74 69 66 are not a certif ae20: 69 63 61 74 65 2e 22 29 3b 0a 0a 09 09 09 09 09 icate.");....... ae30: 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 break;.....}.... ae40: 09 09 2f 2a 20 57 65 20 6f 6e 6c 79 20 73 75 70 ../* We only sup ae50: 70 6f 72 74 20 6f 6e 65 20 63 65 72 74 69 66 69 port one certifi ae60: 63 61 74 65 20 74 79 70 65 20 2a 2f 0a 09 09 09 cate type */.... ae70: 09 63 6b 5f 63 65 72 74 69 66 69 63 61 74 65 5f .ck_certificate_ ae80: 74 79 70 65 20 3d 20 43 4b 43 5f 58 5f 35 30 39 type = CKC_X_509 ae90: 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 ;......pValue = aea0: 26 63 6b 5f 63 65 72 74 69 66 69 63 61 74 65 5f &ck_certificate_ aeb0: 74 79 70 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 type;.....ulValu aec0: 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b eLen = sizeof(ck aed0: 5f 63 65 72 74 69 66 69 63 61 74 65 5f 74 79 70 _certificate_typ aee0: 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f e);......CACKEY_ aef0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . af00: 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 43 4b 43 .. returning CKC af10: 5f 58 5f 35 30 39 20 28 25 6c 75 29 20 28 25 70 _X_509 (%lu) (%p af20: 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 /%lu)", (unsigne af30: 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 43 45 d long) *((CK_CE af40: 52 54 49 46 49 43 41 54 45 5f 54 59 50 45 20 2a RTIFICATE_TYPE * af50: 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 ) pValue), pValu af60: 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e e, (unsigned lon af70: 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a g) ulValueLen);. af80: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c af90: 61 73 65 20 43 4b 41 5f 4b 45 59 5f 54 59 50 45 ase CKA_KEY_TYPE afa0: 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB afb0: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque afc0: 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute afd0: 43 4b 41 5f 4b 45 59 5f 54 59 50 45 20 28 30 78 CKA_KEY_TYPE (0x afe0: 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e %08lx) ...", (un aff0: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 signed long) cur b000: 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 r_attr_type);... b010: 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 ...if (objectcla b020: 73 73 20 21 3d 20 43 4b 4f 5f 50 52 49 56 41 54 ss != CKO_PRIVAT b030: 45 5f 4b 45 59 20 26 26 20 6f 62 6a 65 63 74 63 E_KEY && objectc b040: 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 50 55 42 4c lass != CKO_PUBL b050: 49 43 5f 4b 45 59 29 20 7b 0a 09 09 09 09 09 43 IC_KEY) {......C b060: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN b070: 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 TF(" ... but not b080: 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 getting it beca b090: 75 73 65 20 77 65 20 61 72 65 20 6e 6f 74 20 61 use we are not a b0a0: 20 6b 65 79 2e 22 29 3b 0a 0a 09 09 09 09 09 62 key.");.......b b0b0: 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 reak;.....}..... b0c0: 09 2f 2a 20 57 65 20 6f 6e 6c 79 20 73 75 70 70 ./* We only supp b0d0: 6f 72 74 20 6f 6e 65 20 6b 65 79 20 74 79 70 65 ort one key type b0e0: 20 2a 2f 0a 09 09 09 09 63 6b 5f 6b 65 79 5f 74 */.....ck_key_t b0f0: 79 70 65 20 3d 20 43 4b 4b 5f 52 53 41 3b 0a 0a ype = CKK_RSA;.. b100: 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b ....pValue = &ck b110: 5f 6b 65 79 5f 74 79 70 65 3b 0a 09 09 09 09 75 _key_type;.....u b120: 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 lValueLen = size b130: 6f 66 28 63 6b 5f 6b 65 79 5f 74 79 70 65 29 3b of(ck_key_type); b140: 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB b150: 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... b160: 72 65 74 75 72 6e 69 6e 67 20 43 4b 4b 5f 52 53 returning CKK_RS b170: 41 20 28 25 6c 75 29 20 28 25 70 2f 25 6c 75 29 A (%lu) (%p/%lu) b180: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon b190: 67 29 20 2a 28 28 43 4b 5f 43 45 52 54 49 46 49 g) *((CK_CERTIFI b1a0: 43 41 54 45 5f 54 59 50 45 20 2a 29 20 70 56 61 CATE_TYPE *) pVa b1b0: 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 lue), pValue, (u b1c0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c nsigned long) ul b1d0: 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 ValueLen);...... b1e0: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 break;....case C b1f0: 4b 41 5f 53 49 47 4e 3a 0a 09 09 09 09 43 41 43 KA_SIGN:.....CAC b200: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF b210: 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 ("Requesting att b220: 72 69 62 75 74 65 20 43 4b 41 5f 53 49 47 4e 20 ribute CKA_SIGN b230: 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 (0x%08lx) ...", b240: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) b250: 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b curr_attr_type); b260: 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 ......if (object b270: 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 50 52 49 class == CKO_PRI b280: 56 41 54 45 5f 4b 45 59 29 20 7b 0a 09 09 09 09 VATE_KEY) {..... b290: 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74 72 .pValue = &ck_tr b2a0: 75 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75 65 ue;......ulValue b2b0: 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f Len = sizeof(ck_ b2c0: 74 72 75 65 29 3b 0a 09 09 09 09 7d 20 65 6c 73 true);.....} els b2d0: 65 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 65 20 e {......pValue b2e0: 3d 20 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 = &ck_false;.... b2f0: 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 ..ulValueLen = s b300: 69 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b izeof(ck_false); b310: 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b .....}......CACK b320: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( b330: 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning b340: 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 %lu (%p/%lu)", ( b350: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a unsigned long) * b360: 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 ((CK_BBOOL *) pV b370: 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 alue), pValue, ( b380: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 unsigned long) u b390: 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 lValueLen);..... b3a0: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 .break;....case b3b0: 43 4b 41 5f 44 45 43 52 59 50 54 3a 0a 09 09 09 CKA_DECRYPT:.... b3c0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR b3d0: 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting b3e0: 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 44 attribute CKA_D b3f0: 45 43 52 59 50 54 20 28 30 78 25 30 38 6c 78 29 ECRYPT (0x%08lx) b400: 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned b410: 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr b420: 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 _type);......if b430: 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d 20 (objectclass == b440: 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 20 CKO_PRIVATE_KEY b450: 7c 7c 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d || objectclass = b460: 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b 45 59 = CKO_PUBLIC_KEY b470: 29 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 65 20 ) {......pValue b480: 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 = &ck_true;..... b490: 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 .ulValueLen = si b4a0: 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a 09 zeof(ck_true);.. b4b0: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 ...} else {..... b4c0: 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 66 61 .pValue = &ck_fa b4d0: 6c 73 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75 lse;......ulValu b4e0: 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b eLen = sizeof(ck b4f0: 5f 66 61 6c 73 65 29 3b 0a 09 09 09 09 7d 0a 0a _false);.....}.. b500: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG b510: 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 _PRINTF(" ... re b520: 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f turning %lu (%p/ b530: 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 %lu)", (unsigned b540: 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f long) *((CK_BBO b550: 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 OL *) pValue), p b560: 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 Value, (unsigned b570: 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 long) ulValueLe b580: 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a n);......break;. b590: 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 ...case CKA_TRUS b5a0: 54 5f 53 45 52 56 45 52 5f 41 55 54 48 3a 0a 09 T_SERVER_AUTH:.. b5b0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ b5c0: 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti b5d0: 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA b5e0: 5f 54 52 55 53 54 5f 53 45 52 56 45 52 5f 41 55 _TRUST_SERVER_AU b5f0: 54 48 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e TH (0x%08lx) ... b600: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon b610: 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 g) curr_attr_typ b620: 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 e);......pValue b630: 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 = &ck_true;..... b640: 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a ulValueLen = siz b650: 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a 0a 09 eof(ck_true);... b660: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ b670: 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 PRINTF(" ... ret b680: 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 urning %lu (%p/% b690: 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 lu)", (unsigned b6a0: 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f long) *((CK_BBOO b6b0: 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 L *) pValue), pV b6c0: 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 alue, (unsigned b6d0: 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e long) ulValueLen b6e0: 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 );......break;.. b6f0: 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 ..case CKA_TRUST b700: 5f 43 4c 49 45 4e 54 5f 41 55 54 48 3a 0a 09 09 _CLIENT_AUTH:... b710: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P b720: 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e RINTF("Requestin b730: 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f g attribute CKA_ b740: 54 52 55 53 54 5f 43 4c 49 45 4e 54 5f 41 55 54 TRUST_CLIENT_AUT b750: 48 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 H (0x%08lx) ..." b760: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long b770: 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 ) curr_attr_type b780: 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d );......pValue = b790: 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 75 &ck_true;.....u b7a0: 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 lValueLen = size b7b0: 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a 0a 09 09 of(ck_true);.... b7c0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P b7d0: 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 RINTF(" ... retu b7e0: 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c rning %lu (%p/%l b7f0: 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c u)", (unsigned l b800: 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c ong) *((CK_BBOOL b810: 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 *) pValue), pVa b820: 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c lue, (unsigned l b830: 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 ong) ulValueLen) b840: 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 ;......break;... b850: 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f .case CKA_TRUST_ b860: 43 4f 44 45 5f 53 49 47 4e 49 4e 47 3a 0a 09 09 CODE_SIGNING:... b870: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P b880: 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e RINTF("Requestin b890: 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f g attribute CKA_ b8a0: 54 52 55 53 54 5f 43 4f 44 45 5f 53 49 47 4e 49 TRUST_CODE_SIGNI b8b0: 4e 47 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e NG (0x%08lx) ... b8c0: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon b8d0: 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 g) curr_attr_typ b8e0: 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 e);......pValue b8f0: 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 = &ck_true;..... b900: 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a ulValueLen = siz b910: 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a 0a 09 eof(ck_true);... b920: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ b930: 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 PRINTF(" ... ret b940: 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 urning %lu (%p/% b950: 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 lu)", (unsigned b960: 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f long) *((CK_BBOO b970: 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 L *) pValue), pV b980: 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 alue, (unsigned b990: 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e long) ulValueLen b9a0: 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 );......break;.. b9b0: 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 ..case CKA_TRUST b9c0: 5f 45 4d 41 49 4c 5f 50 52 4f 54 45 43 54 49 4f _EMAIL_PROTECTIO b9d0: 4e 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 N:.....CACKEY_DE b9e0: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 BUG_PRINTF("Requ b9f0: 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 esting attribute ba00: 20 43 4b 41 5f 54 52 55 53 54 5f 45 4d 41 49 4c CKA_TRUST_EMAIL ba10: 5f 50 52 4f 54 45 43 54 49 4f 4e 20 28 30 78 25 _PROTECTION (0x% ba20: 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 08lx) ...", (uns ba30: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 igned long) curr ba40: 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 _attr_type);.... ba50: 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74 ..pValue = &ck_t ba60: 72 75 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 rue;.....ulValue ba70: 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f Len = sizeof(ck_ ba80: 74 72 75 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b true);......CACK ba90: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( baa0: 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning bab0: 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 %lu (%p/%lu)", ( bac0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a unsigned long) * bad0: 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 ((CK_BBOOL *) pV bae0: 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 alue), pValue, ( baf0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 unsigned long) u bb00: 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 lValueLen);..... bb10: 09 62 72 65 61 6b 3b 0a 09 09 09 64 65 66 61 75 .break;....defau bb20: 6c 74 3a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d lt:.....pValue = bb30: 20 4e 55 4c 4c 3b 0a 09 09 09 09 75 6c 56 61 6c NULL;.....ulVal bb40: 75 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47 ueLen = (CK_LONG bb50: 29 20 2d 31 3b 0a 09 09 09 09 62 72 65 61 6b 3b ) -1;.....break; bb60: 0a 09 09 7d 0a 0a 09 09 69 66 20 28 28 28 43 4b ...}....if (((CK bb70: 5f 4c 4f 4e 47 29 20 75 6c 56 61 6c 75 65 4c 65 _LONG) ulValueLe bb80: 6e 29 20 21 3d 20 28 28 43 4b 5f 4c 4f 4e 47 29 n) != ((CK_LONG) bb90: 20 2d 31 29 29 20 7b 0a 09 09 09 2f 2a 20 50 75 -1)) {..../* Pu bba0: 73 68 20 63 75 72 72 5f 61 74 74 72 20 6f 6e 74 sh curr_attr ont bbb0: 6f 20 74 68 65 20 73 74 61 63 6b 20 2a 2f 0a 09 o the stack */.. bbc0: 09 09 63 75 72 72 5f 61 74 74 72 2e 74 79 70 65 ..curr_attr.type bbd0: 20 3d 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 = curr_attr_typ bbe0: 65 3b 0a 09 09 09 63 75 72 72 5f 61 74 74 72 2e e;....curr_attr. bbf0: 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 75 6c 56 ulValueLen = ulV bc00: 61 6c 75 65 4c 65 6e 3b 0a 0a 09 09 09 63 75 72 alueLen;.....cur bc10: 72 5f 61 74 74 72 2e 70 56 61 6c 75 65 20 3d 20 r_attr.pValue = bc20: 6d 61 6c 6c 6f 63 28 63 75 72 72 5f 61 74 74 72 malloc(curr_attr bc30: 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 .ulValueLen);... bc40: 09 6d 65 6d 63 70 79 28 63 75 72 72 5f 61 74 74 .memcpy(curr_att bc50: 72 2e 70 56 61 6c 75 65 2c 20 70 56 61 6c 75 65 r.pValue, pValue bc60: 2c 20 63 75 72 72 5f 61 74 74 72 2e 75 6c 56 61 , curr_attr.ulVa bc70: 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 69 66 20 lueLen);.....if bc80: 28 70 56 61 6c 75 65 5f 66 72 65 65 20 26 26 20 (pValue_free && bc90: 70 56 61 6c 75 65 29 20 7b 0a 09 09 09 09 66 72 pValue) {.....fr bca0: 65 65 28 70 56 61 6c 75 65 29 3b 0a 09 09 09 7d ee(pValue);....} bcb0: 0a 0a 09 09 09 69 66 20 28 6e 75 6d 61 74 74 72 .....if (numattr bcc0: 73 20 3e 3d 20 72 65 74 76 61 6c 5f 63 6f 75 6e s >= retval_coun bcd0: 74 29 20 7b 0a 09 09 09 09 72 65 74 76 61 6c 5f t) {.....retval_ bce0: 63 6f 75 6e 74 20 2a 3d 20 32 3b 0a 09 09 09 09 count *= 2;..... bcf0: 72 65 74 76 61 6c 20 3d 20 72 65 61 6c 6c 6f 63 retval = realloc bd00: 28 72 65 74 76 61 6c 2c 20 72 65 74 76 61 6c 5f (retval, retval_ bd10: 63 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 28 2a count * sizeof(* bd20: 72 65 74 76 61 6c 29 29 3b 0a 09 09 09 7d 0a 0a retval));....}.. bd30: 09 09 09 6d 65 6d 63 70 79 28 26 72 65 74 76 61 ...memcpy(&retva bd40: 6c 5b 6e 75 6d 61 74 74 72 73 5d 2c 20 26 63 75 l[numattrs], &cu bd50: 72 72 5f 61 74 74 72 2c 20 73 69 7a 65 6f 66 28 rr_attr, sizeof( bd60: 63 75 72 72 5f 61 74 74 72 29 29 3b 0a 09 09 09 curr_attr));.... bd70: 6e 75 6d 61 74 74 72 73 2b 2b 3b 0a 09 09 7d 0a numattrs++;...}. bd80: 09 7d 0a 0a 09 69 66 20 28 6e 75 6d 61 74 74 72 .}...if (numattr bd90: 73 20 21 3d 20 30 29 20 7b 0a 09 09 72 65 74 76 s != 0) {...retv bda0: 61 6c 5f 63 6f 75 6e 74 20 3d 20 6e 75 6d 61 74 al_count = numat bdb0: 74 72 73 3b 0a 09 09 72 65 74 76 61 6c 20 3d 20 trs;...retval = bdc0: 72 65 61 6c 6c 6f 63 28 72 65 74 76 61 6c 2c 20 realloc(retval, bdd0: 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 2a 20 73 retval_count * s bde0: 69 7a 65 6f 66 28 2a 72 65 74 76 61 6c 29 29 3b izeof(*retval)); bdf0: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 66 72 65 ..} else {...fre be00: 65 28 72 65 74 76 61 6c 29 3b 0a 0a 09 09 72 65 e(retval);....re be10: 74 76 61 6c 20 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a tval = NULL;..}. be20: 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 6e 75 ..*pulCount = nu be30: 6d 61 74 74 72 73 3b 0a 0a 09 43 41 43 4b 45 59 mattrs;...CACKEY be40: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R be50: 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 6f 62 6a eturning %lu obj be60: 65 63 74 73 20 28 25 70 29 2e 22 2c 20 6e 75 6d ects (%p).", num be70: 61 74 74 72 73 2c 20 72 65 74 76 61 6c 29 3b 0a attrs, retval);. be80: 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 ..return(retval) be90: 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F bea0: 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C beb0: 5f 49 6e 69 74 69 61 6c 69 7a 65 29 28 43 4b 5f _Initialize)(CK_ bec0: 56 4f 49 44 5f 50 54 52 20 70 49 6e 69 74 41 72 VOID_PTR pInitAr bed0: 67 73 29 20 7b 0a 09 43 4b 5f 43 5f 49 4e 49 54 gs) {..CK_C_INIT bee0: 49 41 4c 49 5a 45 5f 41 52 47 53 20 43 4b 5f 50 IALIZE_ARGS CK_P bef0: 54 52 20 61 72 67 73 3b 0a 09 75 69 6e 74 33 32 TR args;..uint32 bf00: 5f 74 20 69 64 78 3b 0a 09 69 6e 74 20 6d 75 74 _t idx;..int mut bf10: 65 78 5f 69 6e 69 74 5f 72 65 74 3b 0a 0a 09 43 ex_init_ret;...C bf20: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN bf30: 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. bf40: 09 69 66 20 28 70 49 6e 69 74 41 72 67 73 20 21 .if (pInitArgs ! bf50: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 61 72 67 73 = NULL) {...args bf60: 20 3d 20 70 49 6e 69 74 41 72 67 73 3b 0a 09 09 = pInitArgs;... bf70: 6d 65 6d 63 70 79 28 26 63 61 63 6b 65 79 5f 61 memcpy(&cackey_a bf80: 72 67 73 2c 20 61 72 67 73 2c 20 73 69 7a 65 6f rgs, args, sizeo bf90: 66 28 63 61 63 6b 65 79 5f 61 72 67 73 29 29 3b f(cackey_args)); bfa0: 0a 0a 09 09 69 66 20 28 61 72 67 73 2d 3e 43 72 ....if (args->Cr bfb0: 65 61 74 65 4d 75 74 65 78 20 3d 3d 20 4e 55 4c eateMutex == NUL bfc0: 4c 20 7c 7c 20 61 72 67 73 2d 3e 44 65 73 74 72 L || args->Destr bfd0: 6f 79 4d 75 74 65 78 20 3d 3d 20 4e 55 4c 4c 20 oyMutex == NULL bfe0: 7c 7c 20 61 72 67 73 2d 3e 4c 6f 63 6b 4d 75 74 || args->LockMut bff0: 65 78 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 ex == NULL || ar c000: 67 73 2d 3e 55 6e 6c 6f 63 6b 4d 75 74 65 78 20 gs->UnlockMutex c010: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 69 66 == NULL) {....if c020: 20 28 61 72 67 73 2d 3e 43 72 65 61 74 65 4d 75 (args->CreateMu c030: 74 65 78 20 21 3d 20 4e 55 4c 4c 20 7c 7c 20 61 tex != NULL || a c040: 72 67 73 2d 3e 44 65 73 74 72 6f 79 4d 75 74 65 rgs->DestroyMute c050: 78 20 21 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 x != NULL || arg c060: 73 2d 3e 4c 6f 63 6b 4d 75 74 65 78 20 21 3d 20 s->LockMutex != c070: 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 55 6e NULL || args->Un c080: 6c 6f 63 6b 4d 75 74 65 78 20 21 3d 20 4e 55 4c lockMutex != NUL c090: 4c 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f L) {.....CACKEY_ c0a0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er c0b0: 72 6f 72 2e 20 53 6f 6d 65 2c 20 62 75 74 20 6e ror. Some, but n c0c0: 6f 74 20 41 6c 6c 20 74 68 72 65 61 64 69 6e 67 ot All threading c0d0: 20 70 72 69 6d 69 74 69 76 65 73 20 70 72 6f 76 primitives prov c0e0: 69 64 65 64 2e 22 29 3b 0a 0a 09 09 09 09 72 65 ided.");......re c0f0: 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN c100: 54 53 5f 42 41 44 29 3b 0a 09 09 09 7d 0a 09 09 TS_BAD);....}... c110: 7d 0a 0a 09 09 69 66 20 28 61 72 67 73 2d 3e 70 }....if (args->p c120: 52 65 73 65 72 76 65 64 20 21 3d 20 4e 55 4c 4c Reserved != NULL c130: 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE c140: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro c150: 72 2e 20 70 52 65 73 65 72 76 65 64 20 69 73 20 r. pReserved is c160: 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 not NULL.");.... c170: 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU c180: 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 09 7d 0a MENTS_BAD);...}. c190: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 63 61 63 6b .} else {...cack c1a0: 65 79 5f 61 72 67 73 2e 43 72 65 61 74 65 4d 75 ey_args.CreateMu c1b0: 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 tex = NULL;...ca c1c0: 63 6b 65 79 5f 61 72 67 73 2e 44 65 73 74 72 6f ckey_args.Destro c1d0: 79 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 yMutex = NULL;.. c1e0: 09 63 61 63 6b 65 79 5f 61 72 67 73 2e 4c 6f 63 .cackey_args.Loc c1f0: 6b 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 kMutex = NULL;.. c200: 09 63 61 63 6b 65 79 5f 61 72 67 73 2e 55 6e 6c .cackey_args.Unl c210: 6f 63 6b 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b ockMutex = NULL; c220: 0a 09 09 63 61 63 6b 65 79 5f 61 72 67 73 2e 66 ...cackey_args.f c230: 6c 61 67 73 20 3d 20 30 3b 0a 09 7d 0a 0a 09 69 lags = 0;..}...i c240: 66 20 28 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 f (cackey_initia c250: 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE c260: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" c270: 45 72 72 6f 72 2e 20 20 41 6c 72 65 61 64 79 20 Error. Already c280: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. c290: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR c2a0: 59 50 54 4f 4b 49 5f 41 4c 52 45 41 44 59 5f 49 YPTOKI_ALREADY_I c2b0: 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. c2c0: 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 ..for (idx = 0; c2d0: 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 idx < (sizeof(ca c2e0: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f ckey_sessions) / c2f0: 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s c300: 65 73 73 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 64 essions[0])); id c310: 78 2b 2b 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f x++) {...cackey_ c320: 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 63 sessions[idx].ac c330: 74 69 76 65 20 3d 20 30 3b 0a 09 7d 0a 0a 09 66 tive = 0;..}...f c340: 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 or (idx = 0; idx c350: 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 < (sizeof(cacke c360: 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f y_slots) / sizeo c370: 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 f(cackey_slots[0 c380: 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 ])); idx++) {... c390: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx c3a0: 5d 2e 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 09 ].active = 0;... c3b0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx c3c0: 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 20 3d 20 ].pcsc_reader = c3d0: 4e 55 4c 4c 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 NULL;..}...cacke c3e0: 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d 20 y_initialized = c3f0: 31 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 1;...if (!cackey c400: 5f 62 69 67 6c 6f 63 6b 5f 69 6e 69 74 29 20 7b _biglock_init) { c410: 0a 09 09 6d 75 74 65 78 5f 69 6e 69 74 5f 72 65 ...mutex_init_re c420: 74 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 t = cackey_mutex c430: 5f 63 72 65 61 74 65 28 26 63 61 63 6b 65 79 5f _create(&cackey_ c440: 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 69 66 20 biglock);....if c450: 28 6d 75 74 65 78 5f 69 6e 69 74 5f 72 65 74 20 (mutex_init_ret c460: 21 3d 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 != 0) {....CACKE c470: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" c480: 45 72 72 6f 72 2e 20 20 4d 75 74 65 78 20 69 6e Error. Mutex in c490: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 66 61 69 itialization fai c4a0: 6c 65 64 2e 22 29 3b 0a 0a 09 09 09 72 65 74 75 led.");.....retu c4b0: 72 6e 28 43 4b 52 5f 43 41 4e 54 5f 4c 4f 43 4b rn(CKR_CANT_LOCK c4c0: 29 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 );...}....cackey c4d0: 5f 62 69 67 6c 6f 63 6b 5f 69 6e 69 74 20 3d 20 _biglock_init = c4e0: 31 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 1;..}...CACKEY_D c4f0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret c500: 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 urning CKR_OK (% c510: 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 i)", CKR_OK);... c520: 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a return(CKR_OK);. c530: 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN c540: 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 46 CTION(CK_RV, C_F c550: 69 6e 61 6c 69 7a 65 29 28 43 4b 5f 56 4f 49 44 inalize)(CK_VOID c560: 5f 50 54 52 20 70 52 65 73 65 72 76 65 64 29 20 _PTR pReserved) c570: 7b 0a 09 75 69 6e 74 33 32 5f 74 20 69 64 78 3b {..uint32_t idx; c580: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ c590: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." c5a0: 29 3b 0a 0a 09 69 66 20 28 70 52 65 73 65 72 76 );...if (pReserv c5b0: 65 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 ed != NULL) {... c5c0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI c5d0: 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 52 65 73 NTF("Error. pRes c5e0: 65 72 76 65 64 20 69 73 20 6e 6f 74 20 4e 55 4c erved is not NUL c5f0: 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 L.");....return( c600: 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA c610: 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 D);..}...if (!ca c620: 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized c630: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB c640: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error c650: 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ c660: 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return c670: 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO c680: 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. c690: 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 .}...for (idx = c6a0: 30 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 0; idx < (sizeof c6b0: 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions c6c0: 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke c6d0: 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 3b y_sessions[0])); c6e0: 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 idx++) {...if ( c6f0: 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ c700: 69 64 78 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 idx].active) {.. c710: 09 09 43 5f 43 6c 6f 73 65 53 65 73 73 69 6f 6e ..C_CloseSession c720: 28 69 64 78 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 (idx);...}..}... c730: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 cackey_slots_dis c740: 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 29 3b 0a 0a connect_all();.. c750: 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 .for (idx = 0; i c760: 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 dx < (sizeof(cac c770: 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a key_slots) / siz c780: 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 eof(cackey_slots c790: 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b 0a [0])); idx++) {. c7a0: 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f ..if (cackey_slo c7b0: 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 72 65 61 ts[idx].pcsc_rea c7c0: 64 65 72 29 20 7b 0a 09 09 09 66 72 65 65 28 63 der) {....free(c c7d0: 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d ackey_slots[idx] c7e0: 2e 70 63 73 63 5f 72 65 61 64 65 72 29 3b 0a 09 .pcsc_reader);.. c7f0: 09 7d 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 69 .}..}...cackey_i c800: 6e 69 74 69 61 6c 69 7a 65 64 20 3d 20 30 3b 0a nitialized = 0;. c810: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P c820: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning c830: 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C c840: 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return c850: 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f (CKR_OK);.}..CK_ c860: 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( c870: 43 4b 5f 52 56 2c 20 43 5f 47 65 74 49 6e 66 6f CK_RV, C_GetInfo c880: 29 28 43 4b 5f 49 4e 46 4f 5f 50 54 52 20 70 49 )(CK_INFO_PTR pI c890: 6e 66 6f 29 20 7b 0a 09 73 74 61 74 69 63 20 43 nfo) {..static C c8a0: 4b 5f 55 54 46 38 43 48 41 52 20 6d 61 6e 75 66 K_UTF8CHAR manuf c8b0: 61 63 74 75 72 65 72 49 44 5b 5d 20 3d 20 22 55 acturerID[] = "U c8c0: 2e 53 2e 20 47 6f 76 65 72 6e 6d 65 6e 74 22 3b .S. Government"; c8d0: 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 54 46 38 ..static CK_UTF8 c8e0: 43 48 41 52 20 6c 69 62 72 61 72 79 44 65 73 63 CHAR libraryDesc c8f0: 72 69 70 74 69 6f 6e 5b 5d 20 3d 20 22 43 41 43 ription[] = "CAC c900: 4b 65 79 22 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 Key";...CACKEY_D c910: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal c920: 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 49 led.");...if (pI c930: 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 nfo == NULL) {.. c940: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR c950: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 49 6e INTF("Error. pIn c960: 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a fo is NULL.");.. c970: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG c980: 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a UMENTS_BAD);..}. c990: 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in c9a0: 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C c9b0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN c9c0: 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not c9d0: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. c9e0: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR c9f0: 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI ca00: 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 70 49 ALIZED);..}...pI ca10: 6e 66 6f 2d 3e 63 72 79 70 74 6f 6b 69 56 65 72 nfo->cryptokiVer ca20: 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 28 43 sion.major = ((C ca30: 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56 ACKEY_CRYPTOKI_V ca40: 45 52 53 49 4f 4e 5f 43 4f 44 45 29 20 3e 3e 20 ERSION_CODE) >> ca50: 31 36 29 20 26 20 30 78 66 66 3b 0a 09 70 49 6e 16) & 0xff;..pIn ca60: 66 6f 2d 3e 63 72 79 70 74 6f 6b 69 56 65 72 73 fo->cryptokiVers ca70: 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 28 43 41 ion.minor = ((CA ca80: 43 4b 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 CKEY_CRYPTOKI_VE ca90: 52 53 49 4f 4e 5f 43 4f 44 45 29 20 3e 3e 20 38 RSION_CODE) >> 8 caa0: 29 20 26 20 30 78 66 66 3b 0a 0a 09 6d 65 6d 73 ) & 0xff;...mems cab0: 65 74 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 et(pInfo->manufa cac0: 63 74 75 72 65 72 49 44 2c 20 27 20 27 2c 20 73 cturerID, ' ', s cad0: 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 61 6e izeof(pInfo->man cae0: 75 66 61 63 74 75 72 65 72 49 44 29 29 3b 0a 09 ufacturerID));.. caf0: 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6d 61 memcpy(pInfo->ma cb00: 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 6d 61 nufacturerID, ma cb10: 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 73 69 nufacturerID, si cb20: 7a 65 6f 66 28 6d 61 6e 75 66 61 63 74 75 72 65 zeof(manufacture cb30: 72 49 44 29 20 2d 20 31 29 3b 0a 0a 09 70 49 6e rID) - 1);...pIn cb40: 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 30 78 30 30 fo->flags = 0x00 cb50: 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f ;...memset(pInfo cb60: 2d 3e 6c 69 62 72 61 72 79 44 65 73 63 72 69 70 ->libraryDescrip cb70: 74 69 6f 6e 2c 20 27 20 27 2c 20 73 69 7a 65 6f tion, ' ', sizeo cb80: 66 28 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 f(pInfo->library cb90: 44 65 73 63 72 69 70 74 69 6f 6e 29 29 3b 0a 09 Description));.. cba0: 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6c 69 memcpy(pInfo->li cbb0: 62 72 61 72 79 44 65 73 63 72 69 70 74 69 6f 6e braryDescription cbc0: 2c 20 6c 69 62 72 61 72 79 44 65 73 63 72 69 70 , libraryDescrip cbd0: 74 69 6f 6e 2c 20 73 69 7a 65 6f 66 28 6c 69 62 tion, sizeof(lib cbe0: 72 61 72 79 44 65 73 63 72 69 70 74 69 6f 6e 29 raryDescription) cbf0: 20 2d 20 31 29 3b 0a 0a 09 70 49 6e 66 6f 2d 3e - 1);...pInfo-> cc00: 6c 69 62 72 61 72 79 56 65 72 73 69 6f 6e 2e 6d libraryVersion.m cc10: 61 6a 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 ajor = (cackey_g cc20: 65 74 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 31 etversion() >> 1 cc30: 36 29 20 26 20 30 78 66 66 3b 0a 09 70 49 6e 66 6) & 0xff;..pInf cc40: 6f 2d 3e 6c 69 62 72 61 72 79 56 65 72 73 69 6f o->libraryVersio cc50: 6e 2e 6d 69 6e 6f 72 20 3d 20 28 63 61 63 6b 65 n.minor = (cacke cc60: 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 20 3e y_getversion() > cc70: 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a 09 43 > 8) & 0xff;...C cc80: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN cc90: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK cca0: 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ ccb0: 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b OK);...return(CK ccc0: 52 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 R_OK);.}../*. * ccd0: 50 72 6f 63 65 73 73 20 6c 69 73 74 20 6f 66 20 Process list of cce0: 72 65 61 64 65 72 73 2c 20 61 6e 64 20 63 72 65 readers, and cre ccf0: 61 74 65 20 6d 61 70 70 69 6e 67 20 62 65 74 77 ate mapping betw cd00: 65 65 6e 20 72 65 61 64 65 72 20 6e 61 6d 65 20 een reader name cd10: 61 6e 64 20 73 6c 6f 74 20 49 44 0a 20 2a 2f 0a and slot ID. */. cd20: 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI cd30: 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 53 ON(CK_RV, C_GetS cd40: 6c 6f 74 4c 69 73 74 29 28 43 4b 5f 42 42 4f 4f lotList)(CK_BBOO cd50: 4c 20 74 6f 6b 65 6e 50 72 65 73 65 6e 74 2c 20 L tokenPresent, cd60: 43 4b 5f 53 4c 4f 54 5f 49 44 5f 50 54 52 20 70 CK_SLOT_ID_PTR p cd70: 53 6c 6f 74 4c 69 73 74 2c 20 43 4b 5f 55 4c 4f SlotList, CK_ULO cd80: 4e 47 5f 50 54 52 20 70 75 6c 43 6f 75 6e 74 29 NG_PTR pulCount) cd90: 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 {..int mutex_re cda0: 74 76 61 6c 3b 0a 09 69 6e 74 20 70 63 73 63 5f tval;..int pcsc_ cdb0: 63 6f 6e 6e 65 63 74 5f 72 65 74 3b 0a 09 43 4b connect_ret;..CK cdc0: 5f 55 4c 4f 4e 47 20 63 6f 75 6e 74 2c 20 73 6c _ULONG count, sl cdd0: 6f 74 5f 63 6f 75 6e 74 20 3d 20 30 2c 20 63 75 ot_count = 0, cu cde0: 72 72 73 6c 6f 74 3b 0a 09 63 68 61 72 20 2a 70 rrslot;..char *p cdf0: 63 73 63 5f 72 65 61 64 65 72 73 2c 20 2a 70 63 csc_readers, *pc ce00: 73 63 5f 72 65 61 64 65 72 73 5f 73 2c 20 2a 70 sc_readers_s, *p ce10: 63 73 63 5f 72 65 61 64 65 72 73 5f 65 3b 0a 09 csc_readers_e;.. ce20: 44 57 4f 52 44 20 70 63 73 63 5f 72 65 61 64 65 DWORD pcsc_reade ce30: 72 73 5f 6c 65 6e 3b 0a 09 4c 4f 4e 47 20 73 63 rs_len;..LONG sc ce40: 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f ard_listreaders_ ce50: 72 65 74 3b 0a 09 73 69 7a 65 5f 74 20 63 75 72 ret;..size_t cur ce60: 72 5f 72 65 61 64 65 72 5f 6c 65 6e 3b 0a 0a 09 r_reader_len;... ce70: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI ce80: 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. ce90: 0a 09 69 66 20 28 70 75 6c 43 6f 75 6e 74 20 3d ..if (pulCount = cea0: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK ceb0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( cec0: 22 45 72 72 6f 72 2e 20 70 75 6c 43 6f 75 6e 74 "Error. pulCount ced0: 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 is NULL.");.... cee0: 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM cef0: 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 ENTS_BAD);..}... cf00: 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init cf10: 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC cf20: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF cf30: 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in cf40: 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... cf50: 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP cf60: 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL cf70: 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 IZED);..}...mute cf80: 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke cf90: 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 y_mutex_lock(cac cfa0: 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i cfb0: 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval cfc0: 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY cfd0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E cfe0: 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 rror. Locking f cff0: 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 ailed.");....ret d000: 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ d010: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 ERROR);..}.../* d020: 43 6c 65 61 72 20 6c 69 73 74 20 6f 66 20 73 6c Clear list of sl d030: 6f 74 73 20 2a 2f 0a 09 69 66 20 28 70 53 6c 6f ots */..if (pSlo d040: 74 4c 69 73 74 29 20 7b 0a 09 09 2f 2a 20 4f 6e tList) {.../* On d050: 6c 79 20 75 70 64 61 74 65 20 74 68 65 20 6c 69 ly update the li d060: 73 74 20 6f 66 20 73 6c 6f 74 73 20 69 66 20 77 st of slots if w d070: 65 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 62 e are actually b d080: 65 69 6e 67 20 73 75 70 70 6c 79 20 74 68 65 20 eing supply the d090: 73 6c 6f 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e slot information d0a0: 20 2a 2f 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f */...cackey_slo d0b0: 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c ts_disconnect_al d0c0: 6c 28 29 3b 0a 0a 09 09 66 6f 72 20 28 63 75 72 l();....for (cur d0d0: 72 73 6c 6f 74 20 3d 20 30 3b 20 63 75 72 72 73 rslot = 0; currs d0e0: 6c 6f 74 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 lot < (sizeof(ca d0f0: 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 ckey_slots) / si d100: 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot d110: 73 5b 30 5d 29 29 3b 20 63 75 72 72 73 6c 6f 74 s[0])); currslot d120: 2b 2b 29 20 7b 0a 09 09 09 69 66 20 28 63 61 63 ++) {....if (cac d130: 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c key_slots[currsl d140: 6f 74 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 29 ot].pcsc_reader) d150: 20 7b 0a 09 09 09 09 66 72 65 65 28 63 61 63 6b {.....free(cack d160: 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f ey_slots[currslo d170: 74 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 29 3b t].pcsc_reader); d180: 0a 0a 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f ......cackey_slo d190: 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 70 63 73 ts[currslot].pcs d1a0: 63 5f 72 65 61 64 65 72 20 3d 20 4e 55 4c 4c 3b c_reader = NULL; d1b0: 0a 09 09 09 7d 0a 0a 09 09 09 63 61 63 6b 65 79 ....}.....cackey d1c0: 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d _slots[currslot] d1d0: 2e 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 09 7d .active = 0;...} d1e0: 0a 09 7d 0a 0a 09 2f 2a 20 44 65 74 65 72 6d 69 ..}.../* Determi d1f0: 6e 65 20 6c 69 73 74 20 6f 66 20 72 65 61 64 65 ne list of reade d200: 72 73 20 2a 2f 0a 09 70 63 73 63 5f 63 6f 6e 6e rs */..pcsc_conn d210: 65 63 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 ect_ret = cackey d220: 5f 70 63 73 63 5f 63 6f 6e 6e 65 63 74 28 29 3b _pcsc_connect(); d230: 0a 09 69 66 20 28 70 63 73 63 5f 63 6f 6e 6e 65 ..if (pcsc_conne d240: 63 74 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 ct_ret < 0) {... d250: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI d260: 4e 54 46 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 NTF("Connection d270: 74 6f 20 50 43 2f 53 43 20 66 61 69 6c 65 64 2c to PC/SC failed, d280: 20 61 73 73 75 6d 69 6e 67 20 6e 6f 20 73 6c 6f assuming no slo d290: 74 73 22 29 3b 0a 0a 09 09 73 6c 6f 74 5f 63 6f ts");....slot_co d2a0: 75 6e 74 20 3d 20 30 3b 0a 09 7d 20 65 6c 73 65 unt = 0;..} else d2b0: 20 7b 0a 09 09 70 63 73 63 5f 72 65 61 64 65 72 {...pcsc_reader d2c0: 73 5f 6c 65 6e 20 3d 20 30 3b 0a 0a 09 09 73 63 s_len = 0;....sc d2d0: 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f ard_listreaders_ d2e0: 72 65 74 20 3d 20 53 43 61 72 64 4c 69 73 74 52 ret = SCardListR d2f0: 65 61 64 65 72 73 28 2a 63 61 63 6b 65 79 5f 70 eaders(*cackey_p d300: 63 73 63 5f 68 61 6e 64 6c 65 2c 20 4e 55 4c 4c csc_handle, NULL d310: 2c 20 4e 55 4c 4c 2c 20 26 70 63 73 63 5f 72 65 , NULL, &pcsc_re d320: 61 64 65 72 73 5f 6c 65 6e 29 3b 0a 09 09 69 66 aders_len);...if d330: 20 28 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 (scard_listread d340: 65 72 73 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 ers_ret == SCARD d350: 5f 53 5f 53 55 43 43 45 53 53 20 26 26 20 70 63 _S_SUCCESS && pc d360: 73 63 5f 72 65 61 64 65 72 73 5f 6c 65 6e 20 21 sc_readers_len ! d370: 3d 20 30 29 20 7b 0a 09 09 09 70 63 73 63 5f 72 = 0) {....pcsc_r d380: 65 61 64 65 72 73 20 3d 20 6d 61 6c 6c 6f 63 28 eaders = malloc( d390: 70 63 73 63 5f 72 65 61 64 65 72 73 5f 6c 65 6e pcsc_readers_len d3a0: 29 3b 0a 09 09 09 70 63 73 63 5f 72 65 61 64 65 );....pcsc_reade d3b0: 72 73 5f 73 20 3d 20 70 63 73 63 5f 72 65 61 64 rs_s = pcsc_read d3c0: 65 72 73 3b 0a 0a 09 09 09 73 63 61 72 64 5f 6c ers;.....scard_l d3d0: 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 20 3d istreaders_ret = d3e0: 20 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 SCardListReader d3f0: 73 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 s(*cackey_pcsc_h d400: 61 6e 64 6c 65 2c 20 4e 55 4c 4c 2c 20 70 63 73 andle, NULL, pcs d410: 63 5f 72 65 61 64 65 72 73 2c 20 26 70 63 73 63 c_readers, &pcsc d420: 5f 72 65 61 64 65 72 73 5f 6c 65 6e 29 3b 0a 09 _readers_len);.. d430: 09 09 69 66 20 28 73 63 61 72 64 5f 6c 69 73 74 ..if (scard_list d440: 72 65 61 64 65 72 73 5f 72 65 74 20 3d 3d 20 53 readers_ret == S d450: 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 CARD_S_SUCCESS) d460: 7b 0a 09 09 09 09 70 63 73 63 5f 72 65 61 64 65 {.....pcsc_reade d470: 72 73 5f 65 20 3d 20 70 63 73 63 5f 72 65 61 64 rs_e = pcsc_read d480: 65 72 73 20 2b 20 70 63 73 63 5f 72 65 61 64 65 ers + pcsc_reade d490: 72 73 5f 6c 65 6e 3b 0a 0a 09 09 09 09 63 75 72 rs_len;......cur d4a0: 72 73 6c 6f 74 20 3d 20 30 3b 0a 09 09 09 09 77 rslot = 0;.....w d4b0: 68 69 6c 65 20 28 70 63 73 63 5f 72 65 61 64 65 hile (pcsc_reade d4c0: 72 73 20 3c 20 70 63 73 63 5f 72 65 61 64 65 72 rs < pcsc_reader d4d0: 73 5f 65 29 20 7b 0a 09 09 09 09 09 63 75 72 72 s_e) {......curr d4e0: 5f 72 65 61 64 65 72 5f 6c 65 6e 20 3d 20 73 74 _reader_len = st d4f0: 72 6c 65 6e 28 70 63 73 63 5f 72 65 61 64 65 72 rlen(pcsc_reader d500: 73 29 3b 0a 0a 09 09 09 09 09 69 66 20 28 28 70 s);.......if ((p d510: 63 73 63 5f 72 65 61 64 65 72 73 20 2b 20 63 75 csc_readers + cu d520: 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e 29 20 3e rr_reader_len) > d530: 20 70 63 73 63 5f 72 65 61 64 65 72 73 5f 65 29 pcsc_readers_e) d540: 20 7b 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a {.......break;. d550: 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 69 66 20 .....}.......if d560: 28 63 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e (curr_reader_len d570: 20 3d 3d 20 30 29 20 7b 0a 09 09 09 09 09 09 62 == 0) {.......b d580: 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 reak;......}.... d590: 09 09 09 69 66 20 28 63 75 72 72 73 6c 6f 74 20 ...if (currslot d5a0: 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 >= (sizeof(cacke d5b0: 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f y_slots) / sizeo d5c0: 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 f(cackey_slots[0 d5d0: 5d 29 29 29 20 7b 0a 09 09 09 09 09 09 43 41 43 ]))) {.......CAC d5e0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF d5f0: 28 22 46 6f 75 6e 64 20 6d 6f 72 65 20 72 65 61 ("Found more rea d600: 64 65 72 73 20 74 68 61 6e 20 73 6c 6f 74 73 20 ders than slots d610: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 21 22 29 are available!") d620: 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a ;........break;. d630: 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 43 41 43 .....}.......CAC d640: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF d650: 28 22 46 6f 75 6e 64 20 72 65 61 64 65 72 3a 20 ("Found reader: d660: 25 73 22 2c 20 70 63 73 63 5f 72 65 61 64 65 72 %s", pcsc_reader d670: 73 29 3b 0a 0a 09 09 09 09 09 2f 2a 20 4f 6e 6c s);......./* Onl d680: 79 20 75 70 64 61 74 65 20 74 68 65 20 6c 69 73 y update the lis d690: 74 20 6f 66 20 73 6c 6f 74 73 20 69 66 20 77 65 t of slots if we d6a0: 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 62 65 are actually be d6b0: 69 6e 67 20 73 75 70 70 6c 79 20 74 68 65 20 73 ing supply the s d6c0: 6c 6f 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 lot information d6d0: 2a 2f 0a 09 09 09 09 09 69 66 20 28 70 53 6c 6f */......if (pSlo d6e0: 74 4c 69 73 74 29 20 7b 0a 09 09 09 09 09 09 63 tList) {.......c d6f0: 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 ackey_slots[curr d700: 73 6c 6f 74 5d 2e 61 63 74 69 76 65 20 3d 20 31 slot].active = 1 d710: 3b 0a 09 09 09 09 09 09 63 61 63 6b 65 79 5f 73 ;.......cackey_s d720: 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 70 lots[currslot].p d730: 63 73 63 5f 72 65 61 64 65 72 20 3d 20 73 74 72 csc_reader = str d740: 64 75 70 28 70 63 73 63 5f 72 65 61 64 65 72 73 dup(pcsc_readers d750: 29 3b 0a 09 09 09 09 09 09 63 61 63 6b 65 79 5f );.......cackey_ d760: 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e slots[currslot]. d770: 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 pcsc_card_connec d780: 74 65 64 20 3d 20 30 3b 0a 09 09 09 09 09 7d 0a ted = 0;......}. d790: 09 09 09 09 09 63 75 72 72 73 6c 6f 74 2b 2b 3b .....currslot++; d7a0: 0a 0a 09 09 09 09 09 70 63 73 63 5f 72 65 61 64 .......pcsc_read d7b0: 65 72 73 20 2b 3d 20 63 75 72 72 5f 72 65 61 64 ers += curr_read d7c0: 65 72 5f 6c 65 6e 20 2b 20 31 3b 0a 09 09 09 09 er_len + 1;..... d7d0: 7d 0a 0a 09 09 09 09 69 66 20 28 63 75 72 72 73 }......if (currs d7e0: 6c 6f 74 20 3e 20 30 29 20 7b 0a 09 09 09 09 09 lot > 0) {...... d7f0: 73 6c 6f 74 5f 63 6f 75 6e 74 20 3d 20 63 75 72 slot_count = cur d800: 72 73 6c 6f 74 3b 0a 09 09 09 09 7d 0a 09 09 09 rslot;.....}.... d810: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 43 41 43 } else {.....CAC d820: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF d830: 28 22 53 65 63 6f 6e 64 20 63 61 6c 6c 20 74 6f ("Second call to d840: 20 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 SCardListReader d850: 73 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e s failed, return d860: 20 25 73 2f 25 6c 69 22 2c 20 43 41 43 4b 45 59 %s/%li", CACKEY d870: 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 _DEBUG_FUNC_SCAR d880: 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 DERR_TO_STR(scar d890: 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 d_listreaders_re d8a0: 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 t), (long) scard d8b0: 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 _listreaders_ret d8c0: 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 66 72 65 65 );....}.....free d8d0: 28 70 63 73 63 5f 72 65 61 64 65 72 73 5f 73 29 (pcsc_readers_s) d8e0: 3b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 ;...} else {.... d8f0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI d900: 4e 54 46 28 22 46 69 72 73 74 20 63 61 6c 6c 20 NTF("First call d910: 74 6f 20 53 43 61 72 64 4c 69 73 74 52 65 61 64 to SCardListRead d920: 65 72 73 20 66 61 69 6c 65 64 2c 20 72 65 74 75 ers failed, retu d930: 72 6e 20 25 73 2f 25 6c 69 22 2c 20 43 41 43 4b rn %s/%li", CACK d940: 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 EY_DEBUG_FUNC_SC d950: 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 ARDERR_TO_STR(sc d960: 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f ard_listreaders_ d970: 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 61 ret), (long) sca d980: 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 rd_listreaders_r d990: 65 74 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 6d 75 et);...}..}...mu d9a0: 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac d9b0: 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock d9c0: 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) d9d0: 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret d9e0: 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA d9f0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT da00: 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc da10: 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. da20: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE da30: 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} da40: 0a 0a 09 69 66 20 28 70 53 6c 6f 74 4c 69 73 74 ...if (pSlotList da50: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 2a 70 == NULL) {...*p da60: 75 6c 43 6f 75 6e 74 20 3d 20 73 6c 6f 74 5f 63 ulCount = slot_c da70: 6f 75 6e 74 3b 0a 0a 09 09 43 41 43 4b 45 59 5f ount;....CACKEY_ da80: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re da90: 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 turning CKR_OK ( daa0: 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a %i)", CKR_OK);.. dab0: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 ..return(CKR_OK) dac0: 3b 0a 09 7d 0a 0a 09 63 6f 75 6e 74 20 3d 20 2a ;..}...count = * dad0: 70 75 6c 43 6f 75 6e 74 3b 0a 09 69 66 20 28 63 pulCount;..if (c dae0: 6f 75 6e 74 20 3c 20 73 6c 6f 74 5f 63 6f 75 6e ount < slot_coun daf0: 74 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 t) {...CACKEY_DE db00: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro db10: 72 2e 20 55 73 65 72 20 61 6c 6c 6f 63 61 74 65 r. User allocate db20: 64 20 25 6c 75 20 65 6e 74 72 69 65 73 2c 20 62 d %lu entries, b db30: 75 74 20 77 65 20 68 61 76 65 20 25 6c 75 20 65 ut we have %lu e db40: 6e 74 72 69 65 73 2e 22 2c 20 63 6f 75 6e 74 2c ntries.", count, db50: 20 73 6c 6f 74 5f 63 6f 75 6e 74 29 3b 0a 0a 09 slot_count);... db60: 09 72 65 74 75 72 6e 28 43 4b 52 5f 42 55 46 46 .return(CKR_BUFF db70: 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 3b 09 0a ER_TOO_SMALL);.. db80: 09 7d 0a 0a 09 66 6f 72 20 28 63 75 72 72 73 6c .}...for (currsl db90: 6f 74 20 3d 20 30 3b 20 63 75 72 72 73 6c 6f 74 ot = 0; currslot dba0: 20 3c 20 73 6c 6f 74 5f 63 6f 75 6e 74 3b 20 63 < slot_count; c dbb0: 75 72 72 73 6c 6f 74 2b 2b 29 20 7b 0a 09 09 70 urrslot++) {...p dbc0: 53 6c 6f 74 4c 69 73 74 5b 63 75 72 72 73 6c 6f SlotList[currslo dbd0: 74 5d 20 3d 20 63 75 72 72 73 6c 6f 74 3b 0a 09 t] = currslot;.. dbe0: 7d 0a 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 }...*pulCount = dbf0: 73 6c 6f 74 5f 63 6f 75 6e 74 3b 0a 0a 09 43 41 slot_count;...CA dc00: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT dc10: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR dc20: 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f _OK (%i)", CKR_O dc30: 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 K);...return(CKR dc40: 5f 4f 4b 29 3b 0a 0a 09 74 6f 6b 65 6e 50 72 65 _OK);...tokenPre dc50: 73 65 6e 74 20 3d 20 74 6f 6b 65 6e 50 72 65 73 sent = tokenPres dc60: 65 6e 74 3b 20 2f 2a 20 53 75 70 72 65 73 73 20 ent; /* Supress dc70: 75 6e 75 73 65 64 20 76 61 72 69 61 62 6c 65 20 unused variable dc80: 77 61 72 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 43 4b warning */.}..CK dc90: 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION dca0: 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 53 6c 6f (CK_RV, C_GetSlo dcb0: 74 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49 tInfo)(CK_SLOT_I dcc0: 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 53 4c 4f D slotID, CK_SLO dcd0: 54 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f T_INFO_PTR pInfo dce0: 29 20 7b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 ) {..static CK_U dcf0: 54 46 38 43 48 41 52 20 73 6c 6f 74 44 65 73 63 TF8CHAR slotDesc dd00: 72 69 70 74 69 6f 6e 5b 5d 20 3d 20 22 43 41 43 ription[] = "CAC dd10: 4b 65 79 20 53 6c 6f 74 22 3b 0a 09 69 6e 74 20 Key Slot";..int dd20: 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a 0a bytes_to_copy;.. dd30: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR dd40: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); dd50: 0a 0a 09 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20 ...if (pInfo == dd60: 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY dd70: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E dd80: 72 72 6f 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e rror. pInfo is N dd90: 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 ULL.");....retur dda0: 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f n(CKR_ARGUMENTS_ ddb0: 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 BAD);..}...if (s ddc0: 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f lotID < 0 || slo ddd0: 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 tID >= (sizeof(c dde0: 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 ackey_slots) / s ddf0: 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f izeof(cackey_slo de00: 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 ts[0]))) {...CAC de10: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF de20: 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 ("Error. Invalid de30: 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 slot requested de40: 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 6f (%lu), outside o de50: 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 f valid range", de60: 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 slotID);....retu de70: 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 rn(CKR_SLOT_ID_I de80: 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 NVALID);..}...if de90: 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 (cackey_slots[s dea0: 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d lotID].active == deb0: 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D dec0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err ded0: 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 or. Invalid slot dee0: 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 requested (%lu) def0: 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65 , slot not curre df00: 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20 73 6c ntly active", sl df10: 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e otID);....return df20: 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 (CKR_SLOT_ID_INV df30: 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 ALID);..}...if ( df40: 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali df50: 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ df60: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er df70: 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia df80: 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret df90: 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI dfa0: 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED dfb0: 29 3b 0a 09 7d 0a 0a 09 6d 65 6d 73 65 74 28 70 );..}...memset(p dfc0: 49 6e 66 6f 2d 3e 73 6c 6f 74 44 65 73 63 72 69 Info->slotDescri dfd0: 70 74 69 6f 6e 2c 20 27 20 27 2c 20 73 69 7a 65 ption, ' ', size dfe0: 6f 66 28 70 49 6e 66 6f 2d 3e 73 6c 6f 74 44 65 of(pInfo->slotDe dff0: 73 63 72 69 70 74 69 6f 6e 29 29 3b 0a 09 6d 65 scription));..me e000: 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 73 6c 6f 74 mcpy(pInfo->slot e010: 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 73 6c 6f Description, slo e020: 74 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 73 69 tDescription, si e030: 7a 65 6f 66 28 73 6c 6f 74 44 65 73 63 72 69 70 zeof(slotDescrip e040: 74 69 6f 6e 29 20 2d 20 31 29 3b 0a 0a 09 6d 65 tion) - 1);...me e050: 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 mset(pInfo->manu e060: 66 61 63 74 75 72 65 72 49 44 2c 20 27 20 27 2c facturerID, ' ', e070: 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d sizeof(pInfo->m e080: 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 29 3b anufacturerID)); e090: 0a 0a 09 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 ...bytes_to_copy e0a0: 20 3d 20 73 74 72 6c 65 6e 28 63 61 63 6b 65 79 = strlen(cackey e0b0: 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 70 _slots[slotID].p e0c0: 63 73 63 5f 72 65 61 64 65 72 29 3b 0a 09 69 66 csc_reader);..if e0d0: 20 28 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e (sizeof(pInfo-> e0e0: 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 20 manufacturerID) e0f0: 3c 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 < bytes_to_copy) e100: 20 7b 0a 09 09 62 79 74 65 73 5f 74 6f 5f 63 6f {...bytes_to_co e110: 70 79 20 3d 20 73 69 7a 65 6f 66 28 70 49 6e 66 py = sizeof(pInf e120: 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 o->manufacturerI e130: 44 29 3b 0a 09 7d 0a 09 6d 65 6d 63 70 79 28 70 D);..}..memcpy(p e140: 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 Info->manufactur e150: 65 72 49 44 2c 20 63 61 63 6b 65 79 5f 73 6c 6f erID, cackey_slo e160: 74 73 5b 73 6c 6f 74 49 44 5d 2e 70 63 73 63 5f ts[slotID].pcsc_ e170: 72 65 61 64 65 72 2c 20 62 79 74 65 73 5f 74 6f reader, bytes_to e180: 5f 63 6f 70 79 29 3b 0a 0a 09 70 49 6e 66 6f 2d _copy);...pInfo- e190: 3e 66 6c 61 67 73 20 3d 20 30 3b 0a 0a 09 69 66 >flags = 0;...if e1a0: 20 28 63 61 63 6b 65 79 5f 74 6f 6b 65 6e 5f 70 (cackey_token_p e1b0: 72 65 73 65 6e 74 28 26 63 61 63 6b 65 79 5f 73 resent(&cackey_s e1c0: 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 29 29 20 7b lots[slotID])) { e1d0: 0a 09 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 ...pInfo->flags e1e0: 7c 3d 20 43 4b 46 5f 54 4f 4b 45 4e 5f 50 52 45 |= CKF_TOKEN_PRE e1f0: 53 45 4e 54 3b 0a 09 7d 0a 0a 09 70 49 6e 66 6f SENT;..}...pInfo e200: 2d 3e 68 61 72 64 77 61 72 65 56 65 72 73 69 6f ->hardwareVersio e210: 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 61 63 6b 65 n.major = (cacke e220: 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 20 3e y_getversion() > e230: 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a 09 70 > 16) & 0xff;..p e240: 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 65 56 65 Info->hardwareVe e250: 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 63 rsion.minor = (c e260: 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f 6e ackey_getversion e270: 28 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b () >> 8) & 0xff; e280: 0a 0a 09 70 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 ...pInfo->firmwa e290: 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 reVersion.major e2a0: 3d 20 30 78 30 30 3b 0a 09 70 49 6e 66 6f 2d 3e = 0x00;..pInfo-> e2b0: 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f 6e 2e firmwareVersion. e2c0: 6d 69 6e 6f 72 20 3d 20 30 78 30 30 3b 0a 0a 09 minor = 0x00;... e2d0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI e2e0: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C e2f0: 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR e300: 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C e310: 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 KR_OK);.}..CK_DE e320: 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK e330: 5f 52 56 2c 20 43 5f 47 65 74 54 6f 6b 65 6e 49 _RV, C_GetTokenI e340: 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 nfo)(CK_SLOT_ID e350: 73 6c 6f 74 49 44 2c 20 43 4b 5f 54 4f 4b 45 4e slotID, CK_TOKEN e360: 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 _INFO_PTR pInfo) e370: 20 7b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 54 {..static CK_UT e380: 46 38 43 48 41 52 20 6d 61 6e 75 66 61 63 74 75 F8CHAR manufactu e390: 72 65 72 49 44 5b 5d 20 3d 20 22 55 2e 53 2e 20 rerID[] = "U.S. e3a0: 47 6f 76 65 72 6e 6d 65 6e 74 22 3b 0a 09 73 74 Government";..st e3b0: 61 74 69 63 20 43 4b 5f 55 54 46 38 43 48 41 52 atic CK_UTF8CHAR e3c0: 20 64 65 66 61 75 6c 74 4c 61 62 65 6c 5b 5d 20 defaultLabel[] e3d0: 3d 20 22 55 6e 6b 6e 6f 77 6e 20 54 6f 6b 65 6e = "Unknown Token e3e0: 22 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 54 ";..static CK_UT e3f0: 46 38 43 48 41 52 20 6d 6f 64 65 6c 5b 5d 20 3d F8CHAR model[] = e400: 20 22 43 41 43 20 54 6f 6b 65 6e 22 3b 0a 0a 09 "CAC Token";... e410: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI e420: 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. e430: 0a 09 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e ..if (pInfo == N e440: 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ULL) {...CACKEY_ e450: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er e460: 72 6f 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 ror. pInfo is NU e470: 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return e480: 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B e490: 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6c AD);..}...if (sl e4a0: 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 otID < 0 || slot e4b0: 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 ID >= (sizeof(ca e4c0: 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 ckey_slots) / si e4d0: 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot e4e0: 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b s[0]))) {...CACK e4f0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( e500: 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 "Error. Invalid e510: 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 slot requested ( e520: 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 %lu), outside of e530: 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 valid range", s e540: 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 lotID);....retur e550: 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e n(CKR_SLOT_ID_IN e560: 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 VALID);..}...if e570: 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c (cackey_slots[sl e580: 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d 20 otID].active == e590: 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE e5a0: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro e5b0: 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 r. Invalid slot e5c0: 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c requested (%lu), e5d0: 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65 6e slot not curren e5e0: 74 6c 79 20 61 63 74 69 76 65 22 2c 20 73 6c 6f tly active", slo e5f0: 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 tID);....return( e600: 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 CKR_SLOT_ID_INVA e610: 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 LID);..}...if (! e620: 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ e630: 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D e640: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err e650: 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial e660: 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu e670: 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ e680: 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) e690: 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack e6a0: 65 79 5f 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 ey_token_present e6b0: 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 (&cackey_slots[s e6c0: 6c 6f 74 49 44 5d 29 29 20 7b 0a 09 09 43 41 43 lotID])) {...CAC e6d0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF e6e0: 28 22 4e 6f 20 74 6f 6b 65 6e 20 69 73 20 70 72 ("No token is pr e6f0: 65 73 65 6e 74 20 69 6e 20 73 6c 6f 74 49 44 20 esent in slotID e700: 3d 20 25 6c 75 22 2c 20 73 6c 6f 74 49 44 29 3b = %lu", slotID); e710: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 54 ....return(CKR_T e720: 4f 4b 45 4e 5f 4e 4f 54 5f 50 52 45 53 45 4e 54 OKEN_NOT_PRESENT e730: 29 3b 0a 09 7d 0a 0a 09 6d 65 6d 73 65 74 28 70 );..}...memset(p e740: 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20 27 20 27 Info->label, ' ' e750: 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e , sizeof(pInfo-> e760: 6c 61 62 65 6c 29 29 3b 0a 09 69 66 20 28 31 29 label));..if (1) e770: 20 7b 0a 09 09 6d 65 6d 63 70 79 28 70 49 6e 66 {...memcpy(pInf e780: 6f 2d 3e 6c 61 62 65 6c 2c 20 64 65 66 61 75 6c o->label, defaul e790: 74 4c 61 62 65 6c 2c 20 73 69 7a 65 6f 66 28 64 tLabel, sizeof(d e7a0: 65 66 61 75 6c 74 4c 61 62 65 6c 29 20 2d 20 31 efaultLabel) - 1 e7b0: 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 7d 0a );..} else {..}. e7c0: 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e ..memset(pInfo-> e7d0: 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 manufacturerID, e7e0: 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 ' ', sizeof(pInf e7f0: 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 o->manufacturerI e800: 44 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e D));..memcpy(pIn e810: 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 fo->manufacturer e820: 49 44 2c 20 6d 61 6e 75 66 61 63 74 75 72 65 72 ID, manufacturer e830: 49 44 2c 20 73 69 7a 65 6f 66 28 6d 61 6e 75 66 ID, sizeof(manuf e840: 61 63 74 75 72 65 72 49 44 29 20 2d 20 31 29 3b acturerID) - 1); e850: 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d ...memset(pInfo- e860: 3e 6d 6f 64 65 6c 2c 20 27 20 27 2c 20 73 69 7a >model, ' ', siz e870: 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 6f 64 65 6c eof(pInfo->model e880: 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 ));..memcpy(pInf e890: 6f 2d 3e 6d 6f 64 65 6c 2c 20 6d 6f 64 65 6c 2c o->model, model, e8a0: 20 73 69 7a 65 6f 66 28 6d 6f 64 65 6c 29 20 2d sizeof(model) - e8b0: 20 31 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 1);...memset(pI e8c0: 6e 66 6f 2d 3e 73 65 72 69 61 6c 4e 75 6d 62 65 nfo->serialNumbe e8d0: 72 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 r, ' ', sizeof(p e8e0: 49 6e 66 6f 2d 3e 73 65 72 69 61 6c 4e 75 6d 62 Info->serialNumb e8f0: 65 72 29 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 er));...memset(p e900: 49 6e 66 6f 2d 3e 75 74 63 54 69 6d 65 2c 20 27 Info->utcTime, ' e910: 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f ', sizeof(pInfo e920: 2d 3e 75 74 63 54 69 6d 65 29 29 3b 0a 0a 09 70 ->utcTime));...p e930: 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 65 56 65 Info->hardwareVe e940: 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 rsion.major = (c e950: 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f 6e ackey_getversion e960: 28 29 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 () >> 16) & 0xff e970: 3b 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 ;..pInfo->hardwa e980: 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 reVersion.minor e990: 3d 20 28 63 61 63 6b 65 79 5f 67 65 74 76 65 72 = (cackey_getver e9a0: 73 69 6f 6e 28 29 20 3e 3e 20 38 29 20 26 20 30 sion() >> 8) & 0 e9b0: 78 66 66 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66 69 xff;...pInfo->fi e9c0: 72 6d 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 61 rmwareVersion.ma e9d0: 6a 6f 72 20 3d 20 30 78 30 30 3b 0a 09 70 49 6e jor = 0x00;..pIn e9e0: 66 6f 2d 3e 66 69 72 6d 77 61 72 65 56 65 72 73 fo->firmwareVers e9f0: 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 30 78 30 30 ion.minor = 0x00 ea00: 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 ;...pInfo->flags ea10: 20 3d 20 43 4b 46 5f 57 52 49 54 45 5f 50 52 4f = CKF_WRITE_PRO ea20: 54 45 43 54 45 44 20 7c 20 43 4b 46 5f 55 53 45 TECTED | CKF_USE ea30: 52 5f 50 49 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 R_PIN_INITIALIZE ea40: 44 20 7c 20 43 4b 46 5f 54 4f 4b 45 4e 5f 49 4e D | CKF_TOKEN_IN ea50: 49 54 49 41 4c 49 5a 45 44 20 7c 20 43 4b 46 5f ITIALIZED | CKF_ ea60: 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 3b 0a LOGIN_REQUIRED;. ea70: 0a 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 53 65 ..pInfo->ulMaxSe ea80: 73 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 28 73 69 ssionCount = (si ea90: 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess eaa0: 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 ions) / sizeof(c eab0: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 ackey_sessions[0 eac0: 5d 29 29 20 2d 20 31 3b 0a 09 70 49 6e 66 6f 2d ])) - 1;..pInfo- ead0: 3e 75 6c 53 65 73 73 69 6f 6e 43 6f 75 6e 74 20 >ulSessionCount eae0: 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45 = CK_UNAVAILABLE eaf0: 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 _INFORMATION;..p eb00: 49 6e 66 6f 2d 3e 75 6c 4d 61 78 52 77 53 65 73 Info->ulMaxRwSes eb10: 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 30 3b 0a 09 sionCount = 0;.. eb20: 70 49 6e 66 6f 2d 3e 75 6c 52 77 53 65 73 73 69 pInfo->ulRwSessi eb30: 6f 6e 43 6f 75 6e 74 20 3d 20 43 4b 5f 55 4e 41 onCount = CK_UNA eb40: 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 VAILABLE_INFORMA eb50: 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c TION;..pInfo->ul eb60: 4d 61 78 50 69 6e 4c 65 6e 20 3d 20 31 32 38 3b MaxPinLen = 128; eb70: 0a 09 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 50 69 ..pInfo->ulMinPi eb80: 6e 4c 65 6e 20 3d 20 30 3b 0a 09 70 49 6e 66 6f nLen = 0;..pInfo eb90: 2d 3e 75 6c 54 6f 74 61 6c 50 75 62 6c 69 63 4d ->ulTotalPublicM eba0: 65 6d 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 56 41 emory = CK_UNAVA ebb0: 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 ILABLE_INFORMATI ebc0: 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 46 72 ON;..pInfo->ulFr ebd0: 65 65 50 75 62 6c 69 63 4d 65 6d 6f 72 79 20 3d eePublicMemory = ebe0: 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f CK_UNAVAILABLE_ ebf0: 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 INFORMATION;..pI ec00: 6e 66 6f 2d 3e 75 6c 54 6f 74 61 6c 50 72 69 76 nfo->ulTotalPriv ec10: 61 74 65 4d 65 6d 6f 72 79 20 3d 20 43 4b 5f 55 ateMemory = CK_U ec20: 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 NAVAILABLE_INFOR ec30: 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e MATION;..pInfo-> ec40: 75 6c 46 72 65 65 50 72 69 76 61 74 65 4d 65 6d ulFreePrivateMem ec50: 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c ory = CK_UNAVAIL ec60: 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e ABLE_INFORMATION ec70: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG ec80: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni ec90: 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c ng CKR_OK (%i)", eca0: 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 CKR_OK);...retu ecb0: 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 rn(CKR_OK);.}..C ecc0: 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO ecd0: 4e 28 43 4b 5f 52 56 2c 20 43 5f 57 61 69 74 46 N(CK_RV, C_WaitF ece0: 6f 72 53 6c 6f 74 45 76 65 6e 74 29 28 43 4b 5f orSlotEvent)(CK_ ecf0: 46 4c 41 47 53 20 66 6c 61 67 73 2c 20 43 4b 5f FLAGS flags, CK_ ed00: 53 4c 4f 54 5f 49 44 5f 50 54 52 20 70 53 6c 6f SLOT_ID_PTR pSlo ed10: 74 49 44 2c 20 43 4b 5f 56 4f 49 44 5f 50 54 52 tID, CK_VOID_PTR ed20: 20 70 52 65 73 65 72 76 65 64 29 20 7b 0a 09 43 pReserved) {..C ed30: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN ed40: 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. ed50: 09 69 66 20 28 70 52 65 73 65 72 76 65 64 20 21 .if (pReserved ! ed60: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK ed70: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( ed80: 22 45 72 72 6f 72 2e 20 70 52 65 73 65 72 76 65 "Error. pReserve ed90: 64 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 d is not NULL.") eda0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ edb0: 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. edc0: 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey edd0: 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. ede0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P edf0: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N ee00: 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." ee10: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR ee20: 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN ee30: 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. ee40: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR ee50: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning ee60: 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT ee70: 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" ee80: 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N ee90: 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. eea0: 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC eeb0: 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT eec0: 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN eed0: 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV eee0: 2c 20 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 6d , C_GetMechanism eef0: 4c 69 73 74 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 List)(CK_SLOT_ID ef00: 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 4d 45 43 48 slotID, CK_MECH ef10: 41 4e 49 53 4d 5f 54 59 50 45 5f 50 54 52 20 70 ANISM_TYPE_PTR p ef20: 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 2c 20 43 MechanismList, C ef30: 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 43 K_ULONG_PTR pulC ef40: 6f 75 6e 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f ount) {..CACKEY_ ef50: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca ef60: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! ef70: 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ ef80: 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D ef90: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err efa0: 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial efb0: 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu efc0: 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ efd0: 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) efe0: 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 75 6c 43 6f ;..}...if (pulCo eff0: 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 unt == NULL) {.. f000: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR f010: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 70 75 INTF("Error. pu f020: 6c 43 6f 75 6e 74 20 69 73 20 4e 55 4c 4c 2e 22 lCount is NULL." f030: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR f040: 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b _ARGUMENTS_BAD); f050: 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 ..}...if (pMecha f060: 6e 69 73 6d 4c 69 73 74 20 3d 3d 20 4e 55 4c 4c nismList == NULL f070: 29 20 7b 0a 09 09 2a 70 75 6c 43 6f 75 6e 74 20 ) {...*pulCount f080: 3d 20 33 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 = 3;....CACKEY_D f090: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret f0a0: 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 urning CKR_OK (% f0b0: 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 i)", CKR_OK);... f0c0: 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b .return(CKR_OK); f0d0: 0a 09 7d 0a 0a 09 69 66 20 28 2a 70 75 6c 43 6f ..}...if (*pulCo f0e0: 75 6e 74 20 3c 20 33 29 20 7b 0a 09 09 43 41 43 unt < 3) {...CAC f0f0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF f100: 28 22 45 72 72 6f 72 2e 20 20 42 75 66 66 65 72 ("Error. Buffer f110: 20 74 6f 6f 20 73 6d 61 6c 6c 2e 22 29 3b 0a 0a too small.");.. f120: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 42 55 46 ..return(CKR_BUF f130: 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 3b 0a FER_TOO_SMALL);. f140: 09 7d 0a 0a 09 70 4d 65 63 68 61 6e 69 73 6d 4c .}...pMechanismL f150: 69 73 74 5b 30 5d 20 3d 20 43 4b 4d 5f 52 53 41 ist[0] = CKM_RSA f160: 5f 50 4b 43 53 3b 0a 09 70 4d 65 63 68 61 6e 69 _PKCS;..pMechani f170: 73 6d 4c 69 73 74 5b 31 5d 20 3d 20 43 4b 4d 5f smList[1] = CKM_ f180: 53 48 41 31 5f 52 53 41 5f 50 4b 43 53 3b 0a 09 SHA1_RSA_PKCS;.. f190: 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 32 3b 0a 0a *pulCount = 2;.. f1a0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR f1b0: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning f1c0: 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK f1d0: 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 R_OK);...return( f1e0: 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 CKR_OK);.}..CK_D f1f0: 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C f200: 4b 5f 52 56 2c 20 43 5f 47 65 74 4d 65 63 68 61 K_RV, C_GetMecha f210: 6e 69 73 6d 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f nismInfo)(CK_SLO f220: 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f T_ID slotID, CK_ f230: 4d 45 43 48 41 4e 49 53 4d 5f 54 59 50 45 20 74 MECHANISM_TYPE t f240: 79 70 65 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 ype, CK_MECHANIS f250: 4d 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f M_INFO_PTR pInfo f260: 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU f270: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called f280: 2e 22 29 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 49 .");...if (slotI f290: 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 D < 0 || slotID f2a0: 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 >= (sizeof(cacke f2b0: 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f y_slots) / sizeo f2c0: 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 f(cackey_slots[0 f2d0: 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ]))) {...CACKEY_ f2e0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er f2f0: 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f ror. Invalid slo f300: 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 t requested (%lu f310: 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 ), outside of va f320: 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 lid range", slot f330: 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 ID);....return(C f340: 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c KR_SLOT_ID_INVAL f350: 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 ID);..}...if (ca f360: 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 ckey_slots[slotI f370: 44 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 D].active == 0) f380: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG f390: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. f3a0: 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 Invalid slot req f3b0: 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c uested (%lu), sl f3c0: 6f 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 ot not currently f3d0: 20 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 active", slotID f3e0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR f3f0: 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 _SLOT_ID_INVALID f400: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 49 6e 66 );..}...if (pInf f410: 6f 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 o == NULL) {...C f420: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN f430: 54 46 28 22 45 72 72 6f 72 2e 20 70 49 6e 66 6f TF("Error. pInfo f440: 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 is NULL.");.... f450: 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM f460: 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 ENTS_BAD);..}... f470: 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init f480: 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC f490: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF f4a0: 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in f4b0: 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... f4c0: 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP f4d0: 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL f4e0: 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 58 IZED);..}.../* X f4f0: 58 58 3a 20 54 68 69 73 20 69 73 20 75 6e 74 65 XX: This is unte f500: 73 74 65 64 2c 20 61 6e 64 20 66 75 72 74 68 65 sted, and furthe f510: 72 20 49 27 6d 20 6e 6f 74 20 72 65 61 6c 6c 79 r I'm not really f520: 20 73 75 72 65 20 69 66 20 74 68 69 73 20 69 73 sure if this is f530: 20 63 6f 72 72 65 63 74 2e 20 2a 2f 0a 09 73 77 correct. */..sw f540: 69 74 63 68 20 28 74 79 70 65 29 20 7b 0a 09 09 itch (type) {... f550: 63 61 73 65 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 case CKM_RSA_PKC f560: 53 3a 0a 09 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d S:....pInfo->ulM f570: 69 6e 4b 65 79 53 69 7a 65 20 3d 20 35 31 32 3b inKeySize = 512; f580: 0a 09 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 ....pInfo->ulMax f590: 4b 65 79 53 69 7a 65 20 3d 20 38 31 39 32 3b 0a KeySize = 8192;. f5a0: 09 09 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 ...pInfo->flags f5b0: 3d 20 43 4b 46 5f 48 57 20 7c 20 43 4b 46 5f 45 = CKF_HW | CKF_E f5c0: 4e 43 52 59 50 54 20 7c 20 43 4b 46 5f 44 45 43 NCRYPT | CKF_DEC f5d0: 52 59 50 54 20 7c 20 43 4b 46 5f 53 49 47 4e 20 RYPT | CKF_SIGN f5e0: 7c 20 43 4b 46 5f 56 45 52 49 46 59 3b 0a 09 09 | CKF_VERIFY;... f5f0: 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 43 .break;...case C f600: 4b 4d 5f 52 53 41 5f 58 5f 35 30 39 3a 0a 09 09 KM_RSA_X_509:... f610: 09 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 .pInfo->ulMinKey f620: 53 69 7a 65 20 3d 20 35 31 32 3b 0a 09 09 09 70 Size = 512;....p f630: 49 6e 66 6f 2d 3e 75 6c 4d 61 78 4b 65 79 53 69 Info->ulMaxKeySi f640: 7a 65 20 3d 20 38 31 39 32 3b 0a 09 09 09 70 49 ze = 8192;....pI f650: 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 43 4b 46 nfo->flags = CKF f660: 5f 48 57 20 7c 20 43 4b 46 5f 45 4e 43 52 59 50 _HW | CKF_ENCRYP f670: 54 20 7c 20 43 4b 46 5f 44 45 43 52 59 50 54 20 T | CKF_DECRYPT f680: 7c 20 43 4b 46 5f 53 49 47 4e 20 7c 20 43 4b 46 | CKF_SIGN | CKF f690: 5f 56 45 52 49 46 59 3b 0a 09 09 09 62 72 65 61 _VERIFY;....brea f6a0: 6b 3b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 53 48 k;...case CKM_SH f6b0: 41 31 5f 52 53 41 5f 50 4b 43 53 3a 0a 09 09 09 A1_RSA_PKCS:.... f6c0: 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 53 pInfo->ulMinKeyS f6d0: 69 7a 65 20 3d 20 35 31 32 3b 0a 09 09 09 70 49 ize = 512;....pI f6e0: 6e 66 6f 2d 3e 75 6c 4d 61 78 4b 65 79 53 69 7a nfo->ulMaxKeySiz f6f0: 65 20 3d 20 38 31 39 32 3b 0a 09 09 09 70 49 6e e = 8192;....pIn f700: 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 43 4b 46 5f fo->flags = CKF_ f710: 48 57 20 7c 20 43 4b 46 5f 53 49 47 4e 20 7c 20 HW | CKF_SIGN | f720: 43 4b 46 5f 56 45 52 49 46 59 3b 0a 09 09 09 62 CKF_VERIFY;....b f730: 72 65 61 6b 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 reak;..}...CACKE f740: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" f750: 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK f760: 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b (%i)", CKR_OK); f770: 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK f780: 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 64 6f 6e 27 );.}../* We don' f790: 74 20 73 75 70 70 6f 72 74 20 74 68 69 73 20 6d t support this m f7a0: 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b 5f 44 45 46 ethod. */.CK_DEF f7b0: 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ f7c0: 52 56 2c 20 43 5f 49 6e 69 74 54 6f 6b 65 6e 29 RV, C_InitToken) f7d0: 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 (CK_SLOT_ID slot f7e0: 49 44 2c 20 43 4b 5f 55 54 46 38 43 48 41 52 5f ID, CK_UTF8CHAR_ f7f0: 50 54 52 20 70 50 69 6e 2c 20 43 4b 5f 55 4c 4f PTR pPin, CK_ULO f800: 4e 47 20 75 6c 50 69 6e 4c 65 6e 2c 20 43 4b 5f NG ulPinLen, CK_ f810: 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 4c 61 UTF8CHAR_PTR pLa f820: 62 65 6c 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 bel) {..CACKEY_D f830: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal f840: 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c f850: 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize f860: 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE f870: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro f880: 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali f890: 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur f8a0: 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N f8b0: 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); f8c0: 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB f8d0: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur f8e0: 6e 69 6e 67 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 ning CKR_TOKEN_W f8f0: 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 20 28 RITE_PROTECTED ( f900: 25 69 29 22 2c 20 43 4b 52 5f 54 4f 4b 45 4e 5f %i)", CKR_TOKEN_ f910: 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 29 WRITE_PROTECTED) f920: 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 54 ;...return(CKR_T f930: 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 OKEN_WRITE_PROTE f940: 43 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 CTED);.}../* We f950: 64 6f 6e 27 74 20 73 75 70 70 6f 72 74 20 74 68 don't support th f960: 69 73 20 6d 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b is method. */.CK f970: 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION f980: 28 43 4b 5f 52 56 2c 20 43 5f 49 6e 69 74 50 49 (CK_RV, C_InitPI f990: 4e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 N)(CK_SESSION_HA f9a0: 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C f9b0: 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 K_UTF8CHAR_PTR p f9c0: 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c Pin, CK_ULONG ul f9d0: 50 69 6e 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 PinLen) {..CACKE f9e0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" f9f0: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if fa00: 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial fa10: 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY fa20: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E fa30: 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi fa40: 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re fa50: 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK fa60: 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE fa70: 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ fa80: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re fa90: 74 75 72 6e 69 6e 67 20 43 4b 52 5f 54 4f 4b 45 turning CKR_TOKE faa0: 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 N_WRITE_PROTECTE fab0: 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 54 4f 4b D (%i)", CKR_TOK fac0: 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 EN_WRITE_PROTECT fad0: 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK fae0: 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 R_TOKEN_WRITE_PR faf0: 4f 54 45 43 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 OTECTED);.}../* fb00: 57 65 20 64 6f 6e 27 74 20 73 75 70 70 6f 72 74 We don't support fb10: 20 74 68 69 73 20 6d 65 74 68 6f 64 2e 20 2a 2f this method. */ fb20: 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT fb30: 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 74 ION(CK_RV, C_Set fb40: 50 49 4e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f PIN)(CK_SESSION_ fb50: 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, fb60: 20 43 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52 CK_UTF8CHAR_PTR fb70: 20 70 4f 6c 64 50 69 6e 2c 20 43 4b 5f 55 4c 4f pOldPin, CK_ULO fb80: 4e 47 20 75 6c 4f 6c 64 50 69 6e 4c 65 6e 2c 20 NG ulOldPinLen, fb90: 43 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 CK_UTF8CHAR_PTR fba0: 70 4e 65 77 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e pNewPin, CK_ULON fbb0: 47 20 75 6c 4e 65 77 50 69 6e 4c 65 6e 29 20 7b G ulNewPinLen) { fbc0: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P fbd0: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") fbe0: 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ fbf0: 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. fc00: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR fc10: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No fc20: 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") fc30: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ fc40: 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI fc50: 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... fc60: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI fc70: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C fc80: 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ fc90: 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", fca0: 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO fcb0: 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... fcc0: 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT fcd0: 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE fce0: 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE fcf0: 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, fd00: 20 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 29 28 C_OpenSession)( fd10: 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 CK_SLOT_ID slotI fd20: 44 2c 20 43 4b 5f 46 4c 41 47 53 20 66 6c 61 67 D, CK_FLAGS flag fd30: 73 2c 20 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 s, CK_VOID_PTR p fd40: 41 70 70 6c 69 63 61 74 69 6f 6e 2c 20 43 4b 5f Application, CK_ fd50: 4e 4f 54 49 46 59 20 6e 6f 74 69 66 79 2c 20 43 NOTIFY notify, C fd60: 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE fd70: 5f 50 54 52 20 70 68 53 65 73 73 69 6f 6e 29 20 _PTR phSession) fd80: 7b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 {..unsigned long fd90: 20 69 64 78 3b 0a 09 69 6e 74 20 6d 75 74 65 78 idx;..int mutex fda0: 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 66 6f _retval;..int fo fdb0: 75 6e 64 5f 73 65 73 73 69 6f 6e 20 3d 20 30 3b und_session = 0; fdc0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ fdd0: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." fde0: 29 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 );...if (slotID fdf0: 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d < 0 || slotID >= fe00: 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ fe10: 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 slots) / sizeof( fe20: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 cackey_slots[0]) fe30: 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE fe40: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro fe50: 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 r. Invalid slot fe60: 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c requested (%lu), fe70: 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 outside of vali fe80: 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 d range", slotID fe90: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR fea0: 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 _SLOT_ID_INVALID feb0: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b );..}...if (cack fec0: 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d ey_slots[slotID] fed0: 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a .active == 0) {. fee0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P fef0: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e RINTF("Error. In ff00: 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 valid slot reque ff10: 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 sted (%lu), slot ff20: 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 not currently a ff30: 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b ctive", slotID); ff40: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S ff50: 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b LOT_ID_INVALID); ff60: 0a 09 7d 0a 0a 09 69 66 20 28 28 66 6c 61 67 73 ..}...if ((flags ff70: 20 26 20 43 4b 46 5f 53 45 52 49 41 4c 5f 53 45 & CKF_SERIAL_SE ff80: 53 53 49 4f 4e 29 20 21 3d 20 43 4b 46 5f 53 45 SSION) != CKF_SE ff90: 52 49 41 4c 5f 53 45 53 53 49 4f 4e 29 20 7b 0a RIAL_SESSION) {. ffa0: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES ffb0: 53 49 4f 4e 5f 50 41 52 41 4c 4c 45 4c 5f 4e 4f SION_PARALLEL_NO ffc0: 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 09 7d T_SUPPORTED);..} ffd0: 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i ffe0: 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... fff0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 10000 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 10010 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 10020 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 10030 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 10040 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 2f IALIZED);..}.../ 10050 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 74 68 * Verify that th 10060 65 20 63 61 72 64 20 69 73 20 61 63 74 75 61 6c e card is actual 10070 6c 79 20 69 6e 20 74 68 65 20 73 6c 6f 74 2e 20 ly in the slot. 10080 2a 2f 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f */..if (!cackey_ 10090 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 28 26 63 token_present(&c 100a0 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 ackey_slots[slot 100b0 49 44 5d 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 ID])) {...CACKEY 100c0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 100d0 72 72 6f 72 2e 20 20 43 61 72 64 20 6e 6f 74 20 rror. Card not 100e0 70 72 65 73 65 6e 74 2e 20 20 52 65 74 75 72 6e present. Return 100f0 69 6e 67 20 43 4b 52 5f 44 45 56 49 43 45 5f 52 ing CKR_DEVICE_R 10100 45 4d 4f 56 45 44 22 29 3b 0a 0a 09 09 72 65 74 EMOVED");....ret 10110 75 72 6e 28 43 4b 52 5f 44 45 56 49 43 45 5f 52 urn(CKR_DEVICE_R 10120 45 4d 4f 56 45 44 29 3b 0a 09 7d 0a 0a 09 6d 75 EMOVED);..}...mu 10130 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 10140 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 key_mutex_lock(c 10150 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 10160 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 10170 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 10180 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 10190 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 "Error. Locking 101a0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 101b0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 101c0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 66 L_ERROR);..}...f 101d0 6f 72 20 28 69 64 78 20 3d 20 31 3b 20 69 64 78 or (idx = 1; idx 101e0 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 < (sizeof(cacke 101f0 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 y_sessions) / si 10200 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 10210 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b ions[0])); idx++ 10220 29 20 7b 0a 09 09 69 66 20 28 21 63 61 63 6b 65 ) {...if (!cacke 10230 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. 10240 61 63 74 69 76 65 29 20 7b 0a 09 09 09 66 6f 75 active) {....fou 10250 6e 64 5f 73 65 73 73 69 6f 6e 20 3d 20 31 3b 0a nd_session = 1;. 10260 0a 09 09 09 2a 70 68 53 65 73 73 69 6f 6e 20 3d ....*phSession = 10270 20 69 64 78 3b 0a 0a 09 09 09 63 61 63 6b 65 79 idx;.....cackey 10280 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 _sessions[idx].a 10290 63 74 69 76 65 20 3d 20 31 3b 0a 09 09 09 63 61 ctive = 1;....ca 102a0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 ckey_sessions[id 102b0 78 5d 2e 73 6c 6f 74 49 44 20 3d 20 73 6c 6f 74 x].slotID = slot 102c0 49 44 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 ID;....cackey_se 102d0 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 74 61 74 ssions[idx].stat 102e0 65 20 3d 20 43 4b 53 5f 52 4f 5f 50 55 42 4c 49 e = CKS_RO_PUBLI 102f0 43 5f 53 45 53 53 49 4f 4e 3b 0a 09 09 09 63 61 C_SESSION;....ca 10300 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 ckey_sessions[id 10310 78 5d 2e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 x].flags = flags 10320 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 ;....cackey_sess 10330 69 6f 6e 73 5b 69 64 78 5d 2e 75 6c 44 65 76 69 ions[idx].ulDevi 10340 63 65 45 72 72 6f 72 20 3d 20 30 3b 0a 09 09 09 ceError = 0;.... 10350 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 10360 69 64 78 5d 2e 70 41 70 70 6c 69 63 61 74 69 6f idx].pApplicatio 10370 6e 20 3d 20 70 41 70 70 6c 69 63 61 74 69 6f 6e n = pApplication 10380 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 ;....cackey_sess 10390 69 6f 6e 73 5b 69 64 78 5d 2e 4e 6f 74 69 66 79 ions[idx].Notify 103a0 20 3d 20 6e 6f 74 69 66 79 3b 0a 0a 09 09 09 63 = notify;.....c 103b0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 ackey_sessions[i 103c0 64 78 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 3d dx].identities = 103d0 20 4e 55 4c 4c 3b 0a 09 09 09 63 61 63 6b 65 79 NULL;....cackey 103e0 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 69 _sessions[idx].i 103f0 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 20 dentities_count 10400 3d 20 30 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f = 0;.....cackey_ 10410 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 65 sessions[idx].se 10420 61 72 63 68 5f 61 63 74 69 76 65 20 3d 20 30 3b arch_active = 0; 10430 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 .....cackey_sess 10440 69 6f 6e 73 5b 69 64 78 5d 2e 73 69 67 6e 5f 61 ions[idx].sign_a 10450 63 74 69 76 65 20 3d 20 30 3b 0a 0a 09 09 09 63 ctive = 0;.....c 10460 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 ackey_sessions[i 10470 64 78 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 69 dx].decrypt_acti 10480 76 65 20 3d 20 30 3b 0a 0a 09 09 09 62 72 65 61 ve = 0;.....brea 10490 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 6d 75 74 65 k;...}..}...mute 104a0 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 104b0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 104c0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 104d0 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 104e0 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 104f0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 10500 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 "Error. Unlocki 10510 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 10520 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 10530 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 10540 09 69 66 20 28 21 66 6f 75 6e 64 5f 73 65 73 73 .if (!found_sess 10550 69 6f 6e 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ion) {...CACKEY_ 10560 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 10570 74 75 72 6e 69 6e 67 20 43 4b 52 5f 53 45 53 53 turning CKR_SESS 10580 49 4f 4e 5f 43 4f 55 4e 54 20 28 25 69 29 22 2c ION_COUNT (%i)", 10590 20 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 43 4f 55 CKR_SESSION_COU 105a0 4e 54 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 NT);....return(C 105b0 4b 52 5f 53 45 53 53 49 4f 4e 5f 43 4f 55 4e 54 KR_SESSION_COUNT 105c0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 105d0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 105e0 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 urning CKR_OK (% 105f0 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 i)", CKR_OK);... 10600 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a return(CKR_OK);. 10610 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 10620 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 CTION(CK_RV, C_C 10630 6c 6f 73 65 53 65 73 73 69 6f 6e 29 28 43 4b 5f loseSession)(CK_ 10640 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 10650 53 65 73 73 69 6f 6e 29 20 7b 0a 09 43 4b 5f 41 Session) {..CK_A 10660 54 54 52 49 42 55 54 45 20 2a 63 75 72 72 5f 61 TTRIBUTE *curr_a 10670 74 74 72 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c ttr;..unsigned l 10680 6f 6e 67 20 69 64 5f 69 64 78 2c 20 61 74 74 72 ong id_idx, attr 10690 5f 69 64 78 3b 0a 09 69 6e 74 20 6d 75 74 65 78 _idx;..int mutex 106a0 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 _retval;...CACKE 106b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 106c0 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 106d0 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 106e0 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 106f0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 10700 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 10710 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 10720 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 10730 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 10740 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 D);..}...if (hSe 10750 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 ssion == 0 || hS 10760 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f ession >= (sizeo 10770 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 10780 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 10790 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 ey_sessions[0])) 107a0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 107b0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 107c0 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f . Session out o 107d0 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 f range.");..... 107e0 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 107f0 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 10800 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f ID);..}...mutex_ 10810 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 10820 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 mutex_lock(cacke 10830 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 10840 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 10850 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 10860 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 10870 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 or. Locking fai 10880 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 10890 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 108a0 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 ROR);..}...if (! 108b0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 108c0 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 hSession].active 108d0 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 108e0 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 108f0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 10900 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 10910 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 10920 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 on not active.") 10930 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 10940 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 10950 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 10960 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 10970 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 hSession].active 10980 20 3d 20 30 3b 0a 09 69 66 20 28 63 61 63 6b 65 = 0;..if (cacke 10990 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 109a0 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 29 ion].identities) 109b0 20 7b 0a 09 09 66 6f 72 20 28 69 64 5f 69 64 78 {...for (id_idx 109c0 20 3d 20 30 3b 20 69 64 5f 69 64 78 20 3c 20 63 = 0; id_idx < c 109d0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 109e0 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 Session].identit 109f0 69 65 73 5f 63 6f 75 6e 74 3b 20 69 64 5f 69 64 ies_count; id_id 10a00 78 2b 2b 29 20 7b 0a 09 09 09 69 66 20 28 63 61 x++) {....if (ca 10a10 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 10a20 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 ession].identiti 10a30 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 es[id_idx].attri 10a40 62 75 74 65 73 29 20 7b 0a 09 09 09 09 66 6f 72 butes) {.....for 10a50 20 28 61 74 74 72 5f 69 64 78 20 3d 20 30 3b 20 (attr_idx = 0; 10a60 61 74 74 72 5f 69 64 78 20 3c 20 63 61 63 6b 65 attr_idx < cacke 10a70 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 10a80 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5b ion].identities[ 10a90 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 id_idx].attribut 10aa0 65 73 5f 63 6f 75 6e 74 3b 20 61 74 74 72 5f 69 es_count; attr_i 10ab0 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09 63 75 72 dx++) {......cur 10ac0 72 5f 61 74 74 72 20 3d 20 26 63 61 63 6b 65 79 r_attr = &cackey 10ad0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 10ae0 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5b 69 on].identities[i 10af0 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 d_idx].attribute 10b00 73 5b 61 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 s[attr_idx];.... 10b10 09 09 09 69 66 20 28 63 75 72 72 5f 61 74 74 72 ...if (curr_attr 10b20 2d 3e 70 56 61 6c 75 65 29 20 7b 0a 09 09 09 09 ->pValue) {..... 10b30 09 09 66 72 65 65 28 63 75 72 72 5f 61 74 74 72 ..free(curr_attr 10b40 2d 3e 70 56 61 6c 75 65 29 3b 0a 09 09 09 09 09 ->pValue);...... 10b50 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 66 72 65 }.....}......fre 10b60 65 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e e(cackey_session 10b70 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 10b80 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 tities[id_idx].a 10b90 74 74 72 69 62 75 74 65 73 29 3b 0a 09 09 09 7d ttributes);....} 10ba0 0a 09 09 7d 0a 0a 09 09 66 72 65 65 28 63 61 63 ...}....free(cac 10bb0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 10bc0 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 ssion].identitie 10bd0 73 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 s);..}...mutex_r 10be0 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 10bf0 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 10c00 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 10c10 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 10c20 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 10c30 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 10c40 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 ror. Unlocking 10c50 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 10c60 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 10c70 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 _ERROR);..}...CA 10c80 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 10c90 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 10ca0 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f _OK (%i)", CKR_O 10cb0 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 K);...return(CKR 10cc0 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 _OK);.}..CK_DEFI 10cd0 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 10ce0 56 2c 20 43 5f 43 6c 6f 73 65 41 6c 6c 53 65 73 V, C_CloseAllSes 10cf0 73 69 6f 6e 73 29 28 43 4b 5f 53 4c 4f 54 5f 49 sions)(CK_SLOT_I 10d00 44 20 73 6c 6f 74 49 44 29 20 7b 0a 09 75 69 6e D slotID) {..uin 10d10 74 33 32 5f 74 20 69 64 78 3b 0a 09 69 6e 74 20 t32_t idx;..int 10d20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 mutex_retval;... 10d30 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 10d40 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 10d50 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 3c 20 30 ..if (slotID < 0 10d60 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 28 73 || slotID >= (s 10d70 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f izeof(cackey_slo 10d80 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ts) / sizeof(cac 10d90 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 20 key_slots[0]))) 10da0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 10db0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 10dc0 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 Invalid slot req 10dd0 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 6f 75 uested (%lu), ou 10de0 74 73 69 64 65 20 6f 66 20 76 61 6c 69 64 20 72 tside of valid r 10df0 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a ange", slotID);. 10e00 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c ...return(CKR_SL 10e10 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a OT_ID_INVALID);. 10e20 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f .}...if (cackey_ 10e30 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 slots[slotID].ac 10e40 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09 09 43 tive == 0) {...C 10e50 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 10e60 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c TF("Error. Inval 10e70 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 id slot requeste 10e80 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f d (%lu), slot no 10e90 74 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 t currently acti 10ea0 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 ve", slotID);... 10eb0 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 .return(CKR_SLOT 10ec0 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d _ID_INVALID);..} 10ed0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 10ee0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 10ef0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 10f00 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 10f10 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 10f20 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 10f30 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 10f40 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 6d IALIZED);..}...m 10f50 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 10f60 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( 10f70 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 10f80 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 10f90 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 10fa0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 10fb0 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e ("Error. Lockin 10fc0 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 10fd0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 10fe0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 10ff0 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 for (idx = 0; id 11000 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b x < (sizeof(cack 11010 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 11020 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 11030 73 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b sions[0])); idx+ 11040 2b 29 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 +) {...if (cacke 11050 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. 11060 61 63 74 69 76 65 29 20 7b 0a 09 09 09 69 66 20 active) {....if 11070 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 11080 5b 69 64 78 5d 2e 73 6c 6f 74 49 44 20 21 3d 20 [idx].slotID != 11090 73 6c 6f 74 49 44 29 20 7b 0a 09 09 09 09 63 6f slotID) {.....co 110a0 6e 74 69 6e 75 65 3b 0a 09 09 09 7d 0a 0a 09 09 ntinue;....}.... 110b0 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e .cackey_mutex_un 110c0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 110d0 6f 63 6b 29 3b 0a 09 09 09 43 5f 43 6c 6f 73 65 ock);....C_Close 110e0 53 65 73 73 69 6f 6e 28 69 64 78 29 3b 0a 09 09 Session(idx);... 110f0 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f .cackey_mutex_lo 11100 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 11110 6b 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 6d 75 74 k);...}..}...mut 11120 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 11130 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 11140 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 11150 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 11160 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 11170 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 11180 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b ("Error. Unlock 11190 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 111a0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 111b0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 111c0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 111d0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 111e0 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C 111f0 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return 11200 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f (CKR_OK);.}..CK_ 11210 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 11220 43 4b 5f 52 56 2c 20 43 5f 47 65 74 53 65 73 73 CK_RV, C_GetSess 11230 69 6f 6e 49 6e 66 6f 29 28 43 4b 5f 53 45 53 53 ionInfo)(CK_SESS 11240 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 11250 69 6f 6e 2c 20 43 4b 5f 53 45 53 53 49 4f 4e 5f ion, CK_SESSION_ 11260 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 INFO_PTR pInfo) 11270 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 {..int mutex_ret 11280 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 val;...CACKEY_DE 11290 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 112a0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 49 6e ed.");...if (pIn 112b0 66 6f 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 fo == NULL) {... 112c0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 112d0 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 49 6e 66 NTF("Error. pInf 112e0 6f 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 o is NULL.");... 112f0 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 11300 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 11310 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 11320 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 11330 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 11340 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 11350 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 11360 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 11370 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 11380 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 LIZED);..}...if 11390 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c (hSession == 0 | 113a0 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 | hSession >= (s 113b0 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 113c0 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 sions) / sizeof( 113d0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 113e0 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 0]))) {...CACKEY 113f0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 11400 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f rror. Session o 11410 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a ut of range.");. 11420 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 11430 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 11440 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 NVALID);..}...mu 11450 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 11460 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 key_mutex_lock(c 11470 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 11480 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 11490 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 114a0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 114b0 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 "Error. Locking 114c0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 114d0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 114e0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i 114f0 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 11500 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 ons[hSession].ac 11510 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 tive) {...cackey 11520 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 11530 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 11540 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11550 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 11560 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 ession not activ 11570 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 11580 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 11590 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 115a0 7d 0a 0a 09 70 49 6e 66 6f 2d 3e 73 6c 6f 74 49 }...pInfo->slotI 115b0 44 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 D = cackey_sessi 115c0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 6c ons[hSession].sl 115d0 6f 74 49 44 3b 0a 09 70 49 6e 66 6f 2d 3e 73 74 otID;..pInfo->st 115e0 61 74 65 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 ate = cackey_ses 115f0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 11600 73 74 61 74 65 3b 0a 09 70 49 6e 66 6f 2d 3e 66 state;..pInfo->f 11610 6c 61 67 73 20 3d 20 63 61 63 6b 65 79 5f 73 65 lags = cackey_se 11620 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 11630 2e 66 6c 61 67 73 3b 0a 09 70 49 6e 66 6f 2d 3e .flags;..pInfo-> 11640 75 6c 44 65 76 69 63 65 45 72 72 6f 72 20 3d 20 ulDeviceError = 11650 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 11660 68 53 65 73 73 69 6f 6e 5d 2e 75 6c 44 65 76 69 hSession].ulDevi 11670 63 65 45 72 72 6f 72 3b 0a 0a 09 6d 75 74 65 78 ceError;...mutex 11680 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 11690 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 116a0 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 116b0 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 116c0 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 116d0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 116e0 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e Error. Unlockin 116f0 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 11700 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 11710 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 11720 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 11730 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 11740 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR 11750 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C 11760 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 KR_OK);.}..CK_DE 11770 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 11780 5f 52 56 2c 20 43 5f 47 65 74 4f 70 65 72 61 74 _RV, C_GetOperat 11790 69 6f 6e 53 74 61 74 65 29 28 43 4b 5f 53 45 53 ionState)(CK_SES 117a0 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 117b0 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 sion, CK_BYTE_PT 117c0 52 20 70 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 R pOperationStat 117d0 65 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 e, CK_ULONG_PTR 117e0 70 75 6c 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 pulOperationStat 117f0 65 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f eLen) {..CACKEY_ 11800 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 11810 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 11820 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 11830 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 11840 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 11850 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 11860 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 11870 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 11880 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 11890 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 118a0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 118b0 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 rning CKR_FUNCTI 118c0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 118d0 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 (%i)", CKR_FUNC 118e0 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 118f0 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK 11900 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 11910 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b UPPORTED);.}..CK 11920 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 11930 28 43 4b 5f 52 56 2c 20 43 5f 53 65 74 4f 70 65 (CK_RV, C_SetOpe 11940 72 61 74 69 6f 6e 53 74 61 74 65 29 28 43 4b 5f rationState)(CK_ 11950 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 11960 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 11970 5f 50 54 52 20 70 4f 70 65 72 61 74 69 6f 6e 53 _PTR pOperationS 11980 74 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 tate, CK_ULONG u 11990 6c 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 4c lOperationStateL 119a0 65 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 en, CK_OBJECT_HA 119b0 4e 44 4c 45 20 68 45 6e 63 72 79 70 74 69 6f 6e NDLE hEncryption 119c0 4b 65 79 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 Key, CK_OBJECT_H 119d0 41 4e 44 4c 45 20 68 41 75 74 68 65 6e 74 69 63 ANDLE hAuthentic 119e0 61 74 69 6f 6e 4b 65 79 29 20 7b 0a 09 43 41 43 ationKey) {..CAC 119f0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 11a00 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 11a10 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 11a20 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 11a30 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 11a40 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 11a50 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 11a60 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 11a70 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 11a80 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 11a90 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 11aa0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 11ab0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 11ac0 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 11ad0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 11ae0 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 11af0 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 11b00 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 11b10 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 11b20 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 4c 6f TION(CK_RV, C_Lo 11b30 67 69 6e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f gin)(CK_SESSION_ 11b40 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 11b50 20 43 4b 5f 55 53 45 52 5f 54 59 50 45 20 75 73 CK_USER_TYPE us 11b60 65 72 54 79 70 65 2c 20 43 4b 5f 55 54 46 38 43 erType, CK_UTF8C 11b70 48 41 52 5f 50 54 52 20 70 50 69 6e 2c 20 43 4b HAR_PTR pPin, CK 11b80 5f 55 4c 4f 4e 47 20 75 6c 50 69 6e 4c 65 6e 29 _ULONG ulPinLen) 11b90 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 {..int mutex_re 11ba0 74 76 61 6c 3b 0a 09 69 6e 74 20 6c 6f 67 69 6e tval;..int login 11bb0 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 _ret;...CACKEY_D 11bc0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 11bd0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 11be0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 11bf0 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 11c00 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 11c10 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 11c20 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 11c30 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 11c40 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 11c50 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 ..}...if (hSessi 11c60 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 on == 0 || hSess 11c70 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 ion >= (sizeof(c 11c80 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 ackey_sessions) 11c90 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ 11ca0 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b sessions[0]))) { 11cb0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 11cc0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 11cd0 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 Session out of r 11ce0 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 ange.");......re 11cf0 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 11d00 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 11d10 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 73 65 72 54 ;..}...if (userT 11d20 79 70 65 20 21 3d 20 43 4b 55 5f 55 53 45 52 29 ype != CKU_USER) 11d30 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 11d40 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 11d50 20 20 57 65 20 6f 6e 6c 79 20 73 75 70 70 6f 72 We only suppor 11d60 74 20 55 53 45 52 20 6d 6f 64 65 2c 20 61 73 6b t USER mode, ask 11d70 65 64 20 66 6f 72 20 25 6c 75 20 6d 6f 64 65 2e ed for %lu mode. 11d80 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 11d90 67 29 20 75 73 65 72 54 79 70 65 29 0a 0a 09 09 g) userType).... 11da0 72 65 74 75 72 6e 28 43 4b 52 5f 55 53 45 52 5f return(CKR_USER_ 11db0 54 59 50 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 TYPE_INVALID);.. 11dc0 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 11dd0 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 11de0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 11df0 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 11e00 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 11e10 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11e20 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 11e30 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 11e40 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 11e50 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 11e60 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 11e70 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 11e80 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 on].active) {... 11e90 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 11ea0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 11eb0 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 11ec0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 11ed0 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 or. Session not 11ee0 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 active.");..... 11ef0 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 11f00 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 11f10 49 44 29 3b 0a 09 7d 0a 0a 09 6c 6f 67 69 6e 5f ID);..}...login_ 11f20 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 6c 6f 67 ret = cackey_log 11f30 69 6e 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 in(&cackey_slots 11f40 5b 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 [cackey_sessions 11f50 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f 74 49 [hSession].slotI 11f60 44 5d 2c 20 70 50 69 6e 2c 20 75 6c 50 69 6e 4c D], pPin, ulPinL 11f70 65 6e 2c 20 4e 55 4c 4c 29 3b 0a 09 69 66 20 28 en, NULL);..if ( 11f80 6c 6f 67 69 6e 5f 72 65 74 20 21 3d 20 43 41 43 login_ret != CAC 11f90 4b 45 59 5f 4c 4f 47 49 4e 5f 4f 4b 29 20 7b 0a KEY_LOGIN_OK) {. 11fa0 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 11fb0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 11fc0 6c 6f 63 6b 29 3b 0a 0a 09 09 69 66 20 28 6c 6f lock);....if (lo 11fd0 67 69 6e 5f 72 65 74 20 3d 3d 20 43 41 43 4b 45 gin_ret == CACKE 11fe0 59 5f 4c 4f 47 49 4e 5f 4c 4f 43 4b 45 44 29 20 Y_LOGIN_LOCKED) 11ff0 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU 12000 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 12010 20 20 54 6f 6b 65 6e 20 69 73 20 6c 6f 63 6b 65 Token is locke 12020 64 2e 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e d.");.....return 12030 28 43 4b 52 5f 50 49 4e 5f 4c 4f 43 4b 45 44 29 (CKR_PIN_LOCKED) 12040 3b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 ;...} else {.... 12050 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 12060 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 49 6e 76 NTF("Error. Inv 12070 61 6c 69 64 20 50 49 4e 2e 22 29 3b 0a 0a 09 09 alid PIN.");.... 12080 09 72 65 74 75 72 6e 28 43 4b 52 5f 50 49 4e 5f .return(CKR_PIN_ 12090 49 4e 43 4f 52 52 45 43 54 29 3b 0a 09 09 7d 0a INCORRECT);...}. 120a0 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 .}...cackey_sess 120b0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 120c0 74 61 74 65 20 3d 20 43 4b 53 5f 52 4f 5f 55 53 tate = CKS_RO_US 120d0 45 52 5f 46 55 4e 43 54 49 4f 4e 53 3b 0a 0a 09 ER_FUNCTIONS;... 120e0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 120f0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 12100 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 12110 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 12120 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 12130 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 12140 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c NTF("Error. Unl 12150 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 12160 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 12170 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 12180 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 12190 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 121a0 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 121b0 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret 121c0 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}.. 121d0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 121e0 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 4c 6f 67 6f ON(CK_RV, C_Logo 121f0 75 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 ut)(CK_SESSION_H 12200 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 20 ANDLE hSession) 12210 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 {..int mutex_ret 12220 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 val;...CACKEY_DE 12230 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 12240 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 12250 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 12260 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 12270 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 12280 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 12290 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 122a0 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 122b0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 122c0 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f .}...if (hSessio 122d0 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 n == 0 || hSessi 122e0 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 on >= (sizeof(ca 122f0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f ckey_sessions) / 12300 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s 12310 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a essions[0]))) {. 12320 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 12330 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 12340 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 ession out of ra 12350 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 nge.");......ret 12360 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 12370 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 12380 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 12390 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 123a0 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 x_lock(cackey_bi 123b0 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 glock);..if (mut 123c0 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 123d0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 123e0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 123f0 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e Locking failed. 12400 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 12410 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 12420 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack 12430 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 12440 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a sion].active) {. 12450 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 12460 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 12470 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 lock);....CACKEY 12480 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 12490 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e rror. Session n 124a0 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 ot active.");... 124b0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 ...return(CKR_SE 124c0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 SSION_HANDLE_INV 124d0 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b ALID);..}...cack 124e0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 124f0 73 69 6f 6e 5d 2e 73 74 61 74 65 20 3d 20 43 4b sion].state = CK 12500 53 5f 52 4f 5f 50 55 42 4c 49 43 5f 53 45 53 53 S_RO_PUBLIC_SESS 12510 49 4f 4e 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ION;...mutex_ret 12520 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 12530 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 12540 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 12550 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 12560 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 12570 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 12580 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 12590 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 125a0 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 125b0 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b RROR);..}...CACK 125c0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 125d0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 125e0 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) 125f0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O 12600 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 K);.}..CK_DEFINE 12610 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 12620 20 43 5f 43 72 65 61 74 65 4f 62 6a 65 63 74 29 C_CreateObject) 12630 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 12640 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 12650 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 54 ATTRIBUTE_PTR pT 12660 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e emplate, CK_ULON 12670 47 20 75 6c 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 G ulCount, CK_OB 12680 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 JECT_HANDLE_PTR 12690 70 68 4f 62 6a 65 63 74 29 20 7b 0a 09 43 41 43 phObject) {..CAC 126a0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 126b0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 126c0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 126d0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 126e0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 126f0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 12700 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 12710 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 12720 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 12730 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 12740 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 12750 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 12760 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 12770 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 12780 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 12790 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 127a0 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 127b0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 127c0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 127d0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 6f TION(CK_RV, C_Co 127e0 70 79 4f 62 6a 65 63 74 29 28 43 4b 5f 53 45 53 pyObject)(CK_SES 127f0 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 12800 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f sion, CK_OBJECT_ 12810 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 74 2c 20 HANDLE hObject, 12820 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 CK_ATTRIBUTE_PTR 12830 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 pTemplate, CK_U 12840 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 2c 20 43 4b LONG ulCount, CK 12850 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 _OBJECT_HANDLE_P 12860 54 52 20 70 68 4e 65 77 4f 62 6a 65 63 74 29 20 TR phNewObject) 12870 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 12880 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 12890 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 128a0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 128b0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 128c0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 128d0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 128e0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 128f0 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 12900 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 12910 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 12920 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 12930 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 12940 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 12950 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 12960 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 12970 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 12980 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 12990 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN 129a0 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 129b0 2c 20 43 5f 44 65 73 74 72 6f 79 4f 62 6a 65 63 , C_DestroyObjec 129c0 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 t)(CK_SESSION_HA 129d0 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 129e0 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 K_OBJECT_HANDLE 129f0 68 4f 62 6a 65 63 74 29 20 7b 0a 09 43 41 43 4b hObject) {..CACK 12a00 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 12a10 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 12a20 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 12a30 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 12a40 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 12a50 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 12a60 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 12a70 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 12a80 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 12a90 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 12aa0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 12ab0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 12ac0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 12ad0 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 12ae0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 12af0 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 12b00 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 12b10 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 12b20 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 12b30 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 ION(CK_RV, C_Get 12b40 4f 62 6a 65 63 74 53 69 7a 65 29 28 43 4b 5f 53 ObjectSize)(CK_S 12b50 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 12b60 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 ession, CK_OBJEC 12b70 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 74 T_HANDLE hObject 12b80 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 , CK_ULONG_PTR p 12b90 75 6c 53 69 7a 65 29 20 7b 0a 09 43 41 43 4b 45 ulSize) {..CACKE 12ba0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 12bb0 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 12bc0 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 12bd0 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 12be0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 12bf0 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 12c00 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 12c10 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 12c20 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 12c30 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ 12c40 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 12c50 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 turning CKR_FUNC 12c60 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 12c70 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 ED (%i)", CKR_FU 12c80 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 12c90 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 RTED);...return( 12ca0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 12cb0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a _SUPPORTED);.}.. 12cc0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 12cd0 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 41 ON(CK_RV, C_GetA 12ce0 74 74 72 69 62 75 74 65 56 61 6c 75 65 29 28 43 ttributeValue)(C 12cf0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 12d00 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 hSession, CK_OB 12d10 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a JECT_HANDLE hObj 12d20 65 63 74 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 ect, CK_ATTRIBUT 12d30 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c E_PTR pTemplate, 12d40 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e CK_ULONG ulCoun 12d50 74 29 20 7b 0a 09 43 4b 5f 41 54 54 52 49 42 55 t) {..CK_ATTRIBU 12d60 54 45 20 2a 63 75 72 72 5f 61 74 74 72 3b 0a 09 TE *curr_attr;.. 12d70 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 69 64 struct cackey_id 12d80 65 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 74 79 entity *identity 12d90 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ;..unsigned long 12da0 20 69 64 65 6e 74 69 74 79 5f 69 64 78 2c 20 61 identity_idx, a 12db0 74 74 72 5f 69 64 78 2c 20 73 65 73 73 5f 61 74 ttr_idx, sess_at 12dc0 74 72 5f 69 64 78 2c 20 6e 75 6d 5f 69 64 73 3b tr_idx, num_ids; 12dd0 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 ..int mutex_retv 12de0 61 6c 3b 0a 09 43 4b 5f 52 56 20 72 65 74 76 61 al;..CK_RV retva 12df0 6c 20 3d 20 43 4b 52 5f 4f 4b 3b 0a 09 43 4b 5f l = CKR_OK;..CK_ 12e00 56 4f 49 44 5f 50 54 52 20 70 56 61 6c 75 65 3b VOID_PTR pValue; 12e10 0a 09 43 4b 5f 55 4c 4f 4e 47 20 75 6c 56 61 6c ..CK_ULONG ulVal 12e20 75 65 4c 65 6e 3b 0a 0a 09 43 41 43 4b 45 59 5f ueLen;...CACKEY_ 12e30 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 12e40 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 12e50 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 12e60 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 12e70 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 12e80 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 12e90 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 12ea0 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 12eb0 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 12ec0 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 ;..}...if (hSess 12ed0 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 ion == 0 || hSes 12ee0 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 sion >= (sizeof( 12ef0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 12f00 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 12f10 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 _sessions[0]))) 12f20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 12f30 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 12f40 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 Session out of 12f50 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 range.");......r 12f60 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 12f70 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 12f80 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 4f 62 6a );..}...if (hObj 12f90 65 63 74 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 ect == 0) {...CA 12fa0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 12fb0 46 28 22 45 72 72 6f 72 2e 20 20 4f 62 6a 65 63 F("Error. Objec 12fc0 74 20 68 61 6e 64 6c 65 20 6f 75 74 20 6f 66 20 t handle out of 12fd0 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 range.");......r 12fe0 65 74 75 72 6e 28 43 4b 52 5f 4f 42 4a 45 43 54 eturn(CKR_OBJECT 12ff0 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 13000 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 6c 43 6f 75 ;..}...if (ulCou 13010 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 nt == 0) {.../* 13020 53 68 6f 72 74 20 63 69 72 63 75 69 74 2c 20 69 Short circuit, i 13030 66 20 7a 65 72 6f 20 6f 62 6a 65 63 74 73 20 77 f zero objects w 13040 65 72 65 20 73 70 65 63 69 66 69 65 64 20 72 65 ere specified re 13050 74 75 72 6e 20 7a 65 72 6f 20 69 74 65 6d 73 20 turn zero items 13060 69 6d 6d 65 64 69 61 74 65 6c 79 20 2a 2f 0a 09 immediately */.. 13070 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 13080 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 13090 43 4b 52 5f 4f 4b 20 28 25 69 29 20 28 73 68 6f CKR_OK (%i) (sho 130a0 72 74 20 63 69 72 63 75 69 74 29 22 2c 20 43 4b rt circuit)", CK 130b0 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e R_OK);....return 130c0 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 (CKR_OK);..}...i 130d0 66 20 28 70 54 65 6d 70 6c 61 74 65 20 3d 3d 20 f (pTemplate == 130e0 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY 130f0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 13100 72 72 6f 72 2e 20 20 70 54 65 6d 70 6c 61 74 65 rror. pTemplate 13110 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 is NULL.");.... 13120 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM 13130 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 ENTS_BAD);..}... 13140 69 64 65 6e 74 69 74 79 5f 69 64 78 20 3d 20 68 identity_idx = h 13150 4f 62 6a 65 63 74 20 2d 20 31 3b 0a 0a 09 6d 75 Object - 1;...mu 13160 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 13170 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 key_mutex_lock(c 13180 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 13190 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 131a0 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 131b0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 131c0 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 "Error. Locking 131d0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 131e0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 131f0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i 13200 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 13210 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 ons[hSession].ac 13220 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 tive) {...cackey 13230 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 13240 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 13250 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 13260 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 13270 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 ession not activ 13280 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 13290 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 132a0 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 132b0 7d 0a 0a 09 6e 75 6d 5f 69 64 73 20 3d 20 63 61 }...num_ids = ca 132c0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 132d0 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 ession].identiti 132e0 65 73 5f 63 6f 75 6e 74 3b 0a 0a 09 69 66 20 28 es_count;...if ( 132f0 69 64 65 6e 74 69 74 79 5f 69 64 78 20 3e 3d 20 identity_idx >= 13300 6e 75 6d 5f 69 64 73 29 20 7b 0a 09 09 63 61 63 num_ids) {...cac 13310 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 13320 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 13330 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 13340 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 13350 20 20 4f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 Object handle 13360 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 20 20 69 out of range. i 13370 64 65 6e 74 69 74 79 5f 69 64 78 20 3d 20 25 6c dentity_idx = %l 13380 75 2c 20 6e 75 6d 5f 69 64 73 20 3d 20 25 6c 75 u, num_ids = %lu 13390 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f .", (unsigned lo 133a0 6e 67 29 20 69 64 65 6e 74 69 74 79 5f 69 64 78 ng) identity_idx 133b0 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 133c0 29 20 6e 75 6d 5f 69 64 73 29 3b 0a 0a 09 09 72 ) num_ids);....r 133d0 65 74 75 72 6e 28 43 4b 52 5f 4f 42 4a 45 43 54 eturn(CKR_OBJECT 133e0 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 133f0 3b 0a 09 7d 0a 0a 09 69 64 65 6e 74 69 74 79 20 ;..}...identity 13400 3d 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f = &cackey_sessio 13410 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 ns[hSession].ide 13420 6e 74 69 74 69 65 73 5b 69 64 65 6e 74 69 74 79 ntities[identity 13430 5f 69 64 78 5d 3b 0a 0a 09 66 6f 72 20 28 61 74 _idx];...for (at 13440 74 72 5f 69 64 78 20 3d 20 30 3b 20 61 74 74 72 tr_idx = 0; attr 13450 5f 69 64 78 20 3c 20 75 6c 43 6f 75 6e 74 3b 20 _idx < ulCount; 13460 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 attr_idx++) {... 13470 63 75 72 72 5f 61 74 74 72 20 3d 20 26 70 54 65 curr_attr = &pTe 13480 6d 70 6c 61 74 65 5b 61 74 74 72 5f 69 64 78 5d mplate[attr_idx] 13490 3b 0a 0a 09 09 70 56 61 6c 75 65 20 3d 20 4e 55 ;....pValue = NU 134a0 4c 4c 3b 0a 09 09 75 6c 56 61 6c 75 65 4c 65 6e LL;...ulValueLen 134b0 20 3d 20 28 43 4b 5f 4c 4f 4e 47 29 20 2d 31 3b = (CK_LONG) -1; 134c0 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 134d0 5f 50 52 49 4e 54 46 28 22 4c 6f 6f 6b 69 6e 67 _PRINTF("Looking 134e0 20 66 6f 72 20 61 74 74 72 69 62 75 74 65 20 30 for attribute 0 134f0 78 25 30 38 6c 78 20 28 69 64 65 6e 74 69 74 79 x%08lx (identity 13500 3a 25 6c 75 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 :%lu) ...", (uns 13510 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 igned long) curr 13520 5f 61 74 74 72 2d 3e 74 79 70 65 2c 20 28 75 6e _attr->type, (un 13530 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 69 64 65 signed long) ide 13540 6e 74 69 74 79 5f 69 64 78 29 3b 0a 0a 09 09 66 ntity_idx);....f 13550 6f 72 20 28 73 65 73 73 5f 61 74 74 72 5f 69 64 or (sess_attr_id 13560 78 20 3d 20 30 3b 20 73 65 73 73 5f 61 74 74 72 x = 0; sess_attr 13570 5f 69 64 78 20 3c 20 69 64 65 6e 74 69 74 79 2d _idx < identity- 13580 3e 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e >attributes_coun 13590 74 3b 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 t; sess_attr_idx 135a0 2b 2b 29 20 7b 0a 09 09 09 69 66 20 28 69 64 65 ++) {....if (ide 135b0 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 75 74 65 ntity->attribute 135c0 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d s[sess_attr_idx] 135d0 2e 74 79 70 65 20 3d 3d 20 63 75 72 72 5f 61 74 .type == curr_at 135e0 74 72 2d 3e 74 79 70 65 29 20 7b 0a 09 09 09 09 tr->type) {..... 135f0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 13600 4e 54 46 28 22 20 2e 2e 2e 20 66 6f 75 6e 64 20 NTF(" ... found 13610 69 74 2c 20 70 56 61 6c 75 65 20 3d 20 25 70 2c it, pValue = %p, 13620 20 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 25 6c ulValueLen = %l 13630 75 22 2c 20 69 64 65 6e 74 69 74 79 2d 3e 61 74 u", identity->at 13640 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 tributes[sess_at 13650 74 72 5f 69 64 78 5d 2e 70 56 61 6c 75 65 2c 20 tr_idx].pValue, 13660 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 identity->attrib 13670 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 utes[sess_attr_i 13680 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 3b dx].ulValueLen); 13690 0a 09 09 09 09 0a 09 09 09 09 70 56 61 6c 75 65 ..........pValue 136a0 20 3d 20 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 = identity->att 136b0 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 ributes[sess_att 136c0 72 5f 69 64 78 5d 2e 70 56 61 6c 75 65 3b 0a 09 r_idx].pValue;.. 136d0 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 ...ulValueLen = 136e0 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 identity->attrib 136f0 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 utes[sess_attr_i 13700 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a dx].ulValueLen;. 13710 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 69 66 20 28 ...}...}....if ( 13720 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 curr_attr->pValu 13730 65 20 26 26 20 70 56 61 6c 75 65 29 20 7b 0a 09 e && pValue) {.. 13740 09 09 69 66 20 28 63 75 72 72 5f 61 74 74 72 2d ..if (curr_attr- 13750 3e 75 6c 56 61 6c 75 65 4c 65 6e 20 3e 3d 20 75 >ulValueLen >= u 13760 6c 56 61 6c 75 65 4c 65 6e 29 20 7b 0a 09 09 09 lValueLen) {.... 13770 09 6d 65 6d 63 70 79 28 63 75 72 72 5f 61 74 74 .memcpy(curr_att 13780 72 2d 3e 70 56 61 6c 75 65 2c 20 70 56 61 6c 75 r->pValue, pValu 13790 65 2c 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a e, ulValueLen);. 137a0 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 ...} else {..... 137b0 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 28 43 4b ulValueLen = (CK 137c0 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 0a 09 09 09 09 _LONG) -1;...... 137d0 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 42 55 46 retval = CKR_BUF 137e0 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b 0a 09 FER_TOO_SMALL;.. 137f0 09 09 7d 0a 09 09 7d 0a 0a 09 09 63 75 72 72 5f ..}...}....curr_ 13800 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e attr->ulValueLen 13810 20 3d 20 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a 09 = ulValueLen;.. 13820 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 13830 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 13840 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 13850 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 glock);..if (mut 13860 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 13870 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 13880 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 13890 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 Unlocking faile 138a0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 138b0 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 138c0 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 72 65 74 R);..}...if (ret 138d0 76 61 6c 20 3d 3d 20 43 4b 52 5f 41 54 54 52 49 val == CKR_ATTRI 138e0 42 55 54 45 5f 54 59 50 45 5f 49 4e 56 41 4c 49 BUTE_TYPE_INVALI 138f0 44 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 D) {...CACKEY_DE 13900 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 13910 72 6e 69 6e 67 20 43 4b 52 5f 41 54 54 52 49 42 rning CKR_ATTRIB 13920 55 54 45 5f 54 59 50 45 5f 49 4e 56 41 4c 49 44 UTE_TYPE_INVALID 13930 20 28 25 69 29 22 2c 20 28 69 6e 74 29 20 72 65 (%i)", (int) re 13940 74 76 61 6c 29 3b 0a 09 7d 20 65 6c 73 65 20 69 tval);..} else i 13950 66 20 28 72 65 74 76 61 6c 20 3d 3d 20 43 4b 52 f (retval == CKR 13960 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c _BUFFER_TOO_SMAL 13970 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 L) {...CACKEY_DE 13980 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 13990 72 6e 69 6e 67 20 43 4b 52 5f 42 55 46 46 45 52 rning CKR_BUFFER 139a0 5f 54 4f 4f 5f 53 4d 41 4c 4c 20 28 25 69 29 22 _TOO_SMALL (%i)" 139b0 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c 29 3b , (int) retval); 139c0 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 72 65 74 ..} else if (ret 139d0 76 61 6c 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b val == CKR_OK) { 139e0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 139f0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 13a00 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", 13a10 28 69 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a 09 (int) retval);.. 13a20 7d 20 65 6c 73 65 20 7b 0a 09 09 43 41 43 4b 45 } else {...CACKE 13a30 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 13a40 52 65 74 75 72 6e 69 6e 67 20 25 69 22 2c 20 28 Returning %i", ( 13a50 69 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a 09 7d int) retval);..} 13a60 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c ...return(retval 13a70 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 13a80 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 13a90 43 5f 53 65 74 41 74 74 72 69 62 75 74 65 56 61 C_SetAttributeVa 13aa0 6c 75 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f lue)(CK_SESSION_ 13ab0 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 13ac0 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL 13ad0 45 20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 41 54 E hObject, CK_AT 13ae0 54 52 49 42 55 54 45 5f 50 54 52 20 70 54 65 6d TRIBUTE_PTR pTem 13af0 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 plate, CK_ULONG 13b00 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 43 41 43 4b ulCount) {..CACK 13b10 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 13b20 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 13b30 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 13b40 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 13b50 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 13b60 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 13b70 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 13b80 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 13b90 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 13ba0 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 13bb0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 13bc0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 13bd0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 13be0 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 13bf0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 13c00 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 13c10 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 13c20 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 13c30 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 13c40 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 46 69 6e ION(CK_RV, C_Fin 13c50 64 4f 62 6a 65 63 74 73 49 6e 69 74 29 28 43 4b dObjectsInit)(CK 13c60 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 13c70 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 41 54 54 hSession, CK_ATT 13c80 52 49 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 RIBUTE_PTR pTemp 13c90 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 late, CK_ULONG u 13ca0 6c 43 6f 75 6e 74 29 20 7b 0a 09 73 74 72 75 63 lCount) {..struc 13cb0 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 t cackey_pcsc_id 13cc0 65 6e 74 69 74 79 20 2a 70 63 73 63 5f 69 64 65 entity *pcsc_ide 13cd0 6e 74 69 74 69 65 73 3b 0a 09 73 74 72 75 63 74 ntities;..struct 13ce0 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 cackey_identity 13cf0 20 2a 69 64 65 6e 74 69 74 69 65 73 3b 0a 09 75 *identities;..u 13d00 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6e 75 6d nsigned long num 13d10 5f 69 64 73 2c 20 69 64 5f 69 64 78 2c 20 63 75 _ids, id_idx, cu 13d20 72 72 5f 69 64 5f 74 79 70 65 3b 0a 09 75 6e 73 rr_id_type;..uns 13d30 69 67 6e 65 64 20 6c 6f 6e 67 20 6e 75 6d 5f 63 igned long num_c 13d40 65 72 74 73 2c 20 63 65 72 74 5f 69 64 78 3b 0a erts, cert_idx;. 13d50 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 .int mutex_retva 13d60 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 l;...CACKEY_DEBU 13d70 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 13d80 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 13d90 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 13da0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 13db0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 13dc0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 13dd0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 13de0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 13df0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 13e00 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 ...if (hSession 13e10 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e == 0 || hSession 13e20 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b >= (sizeof(cack 13e30 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 13e40 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 13e50 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 sions[0]))) {... 13e60 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 13e70 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 NTF("Error. Ses 13e80 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 sion out of rang 13e90 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 13ea0 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 13eb0 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 13ec0 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 13ed0 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 13ee0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 13ef0 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 13f00 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 13f10 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 13f20 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 13f30 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 13f40 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 13f50 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 13f60 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 13f70 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 13f80 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 on].active) {... 13f90 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 13fa0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 13fb0 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 13fc0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 13fd0 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 or. Session not 13fe0 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 active.");..... 13ff0 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 14000 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 14010 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 ID);..}...if (ca 14020 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 14030 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 ession].search_a 14040 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 ctive) {...cacke 14050 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 14060 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 14070 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 14080 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 14090 53 65 61 72 63 68 20 61 6c 72 65 61 64 79 20 61 Search already a 140a0 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 ctive.");......r 140b0 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 eturn(CKR_OPERAT 140c0 49 4f 4e 5f 41 43 54 49 56 45 29 3b 0a 09 7d 0a ION_ACTIVE);..}. 140d0 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73 ..if (cackey_ses 140e0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 140f0 69 64 65 6e 74 69 74 69 65 73 20 3d 3d 20 4e 55 identities == NU 14100 4c 4c 29 20 7b 0a 09 09 70 63 73 63 5f 69 64 65 LL) {...pcsc_ide 14110 6e 74 69 74 69 65 73 20 3d 20 63 61 63 6b 65 79 ntities = cackey 14120 5f 72 65 61 64 5f 63 65 72 74 73 28 26 63 61 63 _read_certs(&cac 14130 6b 65 79 5f 73 6c 6f 74 73 5b 63 61 63 6b 65 79 key_slots[cackey 14140 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 14150 6f 6e 5d 2e 73 6c 6f 74 49 44 5d 2c 20 4e 55 4c on].slotID], NUL 14160 4c 2c 20 26 6e 75 6d 5f 63 65 72 74 73 29 3b 0a L, &num_certs);. 14170 09 09 69 66 20 28 70 63 73 63 5f 69 64 65 6e 74 ..if (pcsc_ident 14180 69 74 69 65 73 20 21 3d 20 4e 55 4c 4c 29 20 7b ities != NULL) { 14190 0a 09 09 09 2f 2a 20 43 6f 6e 76 65 72 74 20 6e ..../* Convert n 141a0 75 6d 62 65 72 20 6f 66 20 43 65 72 74 73 20 74 umber of Certs t 141b0 6f 20 6e 75 6d 62 65 72 20 6f 66 20 6f 62 6a 65 o number of obje 141c0 63 74 73 20 2a 2f 0a 09 09 09 6e 75 6d 5f 69 64 cts */....num_id 141d0 73 20 3d 20 28 43 4b 4f 5f 50 52 49 56 41 54 45 s = (CKO_PRIVATE 141e0 5f 4b 45 59 20 2d 20 43 4b 4f 5f 43 45 52 54 49 _KEY - CKO_CERTI 141f0 46 49 43 41 54 45 20 2b 20 31 29 20 2a 20 6e 75 FICATE + 1) * nu 14200 6d 5f 63 65 72 74 73 3b 0a 0a 09 09 09 69 64 65 m_certs;.....ide 14210 6e 74 69 74 69 65 73 20 3d 20 6d 61 6c 6c 6f 63 ntities = malloc 14220 28 6e 75 6d 5f 69 64 73 20 2a 20 73 69 7a 65 6f (num_ids * sizeo 14230 66 28 2a 69 64 65 6e 74 69 74 69 65 73 29 29 3b f(*identities)); 14240 0a 0a 09 09 09 69 64 5f 69 64 78 20 3d 20 30 3b .....id_idx = 0; 14250 0a 09 09 09 66 6f 72 20 28 63 65 72 74 5f 69 64 ....for (cert_id 14260 78 20 3d 20 30 3b 20 63 65 72 74 5f 69 64 78 20 x = 0; cert_idx 14270 3c 20 6e 75 6d 5f 63 65 72 74 73 3b 20 63 65 72 < num_certs; cer 14280 74 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 66 t_idx++) {.....f 14290 6f 72 20 28 63 75 72 72 5f 69 64 5f 74 79 70 65 or (curr_id_type 142a0 20 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 = CKO_CERTIFICA 142b0 54 45 3b 20 63 75 72 72 5f 69 64 5f 74 79 70 65 TE; curr_id_type 142c0 20 3c 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f <= CKO_PRIVATE_ 142d0 4b 45 59 3b 20 63 75 72 72 5f 69 64 5f 74 79 70 KEY; curr_id_typ 142e0 65 2b 2b 29 20 7b 0a 09 09 09 09 09 69 64 65 6e e++) {......iden 142f0 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 tities[id_idx].a 14300 74 74 72 69 62 75 74 65 73 20 3d 20 63 61 63 6b ttributes = cack 14310 65 79 5f 67 65 74 5f 61 74 74 72 69 62 75 74 65 ey_get_attribute 14320 73 28 63 75 72 72 5f 69 64 5f 74 79 70 65 2c 20 s(curr_id_type, 14330 26 70 63 73 63 5f 69 64 65 6e 74 69 74 69 65 73 &pcsc_identities 14340 5b 63 65 72 74 5f 69 64 78 5d 2c 20 2d 31 2c 20 [cert_idx], -1, 14350 26 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 &identities[id_i 14360 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 5f 63 dx].attributes_c 14370 6f 75 6e 74 29 3b 0a 0a 09 09 09 09 09 69 66 20 ount);.......if 14380 28 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 (identities[id_i 14390 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 20 3d dx].attributes = 143a0 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 09 09 = NULL) {....... 143b0 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 identities[id_id 143c0 78 5d 2e 61 74 74 72 69 62 75 74 65 73 5f 63 6f x].attributes_co 143d0 75 6e 74 20 3d 20 30 3b 0a 09 09 09 09 09 7d 0a unt = 0;......}. 143e0 0a 09 09 09 09 09 69 64 5f 69 64 78 2b 2b 3b 0a ......id_idx++;. 143f0 09 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 63 ....}....}.....c 14400 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 14410 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 Session].identit 14420 69 65 73 20 3d 20 69 64 65 6e 74 69 74 69 65 73 ies = identities 14430 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 ;....cackey_sess 14440 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 ions[hSession].i 14450 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 20 dentities_count 14460 3d 20 6e 75 6d 5f 69 64 73 3b 0a 0a 09 09 09 63 = num_ids;.....c 14470 61 63 6b 65 79 5f 66 72 65 65 5f 63 65 72 74 73 ackey_free_certs 14480 28 70 63 73 63 5f 69 64 65 6e 74 69 74 69 65 73 (pcsc_identities 14490 2c 20 6e 75 6d 5f 63 65 72 74 73 2c 20 31 29 3b , num_certs, 1); 144a0 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 70 54 ...}..}...if (pT 144b0 65 6d 70 6c 61 74 65 20 21 3d 20 4e 55 4c 4c 29 emplate != NULL) 144c0 20 7b 0a 09 09 69 66 20 28 75 6c 43 6f 75 6e 74 {...if (ulCount 144d0 20 21 3d 20 30 29 20 7b 0a 09 09 09 63 61 63 6b != 0) {....cack 144e0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 144f0 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 sion].search_que 14500 72 79 5f 63 6f 75 6e 74 20 3d 20 75 6c 43 6f 75 ry_count = ulCou 14510 6e 74 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 nt;....cackey_se 14520 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 14530 2e 73 65 61 72 63 68 5f 71 75 65 72 79 20 3d 20 .search_query = 14540 6d 61 6c 6c 6f 63 28 75 6c 43 6f 75 6e 74 20 2a malloc(ulCount * 14550 20 73 69 7a 65 6f 66 28 2a 70 54 65 6d 70 6c 61 sizeof(*pTempla 14560 74 65 29 29 3b 0a 0a 09 09 09 6d 65 6d 63 70 79 te));.....memcpy 14570 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 14580 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 14590 68 5f 71 75 65 72 79 2c 20 70 54 65 6d 70 6c 61 h_query, pTempla 145a0 74 65 2c 20 75 6c 43 6f 75 6e 74 20 2a 20 73 69 te, ulCount * si 145b0 7a 65 6f 66 28 2a 70 54 65 6d 70 6c 61 74 65 29 zeof(*pTemplate) 145c0 29 3b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 );...} else {... 145d0 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 145e0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 145f0 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 20 3d 20 h_query_count = 14600 30 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 0;....cackey_ses 14610 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 14620 73 65 61 72 63 68 5f 71 75 65 72 79 20 3d 20 4e search_query = N 14630 55 4c 4c 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 ULL;...}..} else 14640 20 7b 0a 09 09 69 66 20 28 75 6c 43 6f 75 6e 74 {...if (ulCount 14650 20 21 3d 20 30 29 20 7b 0a 09 09 09 63 61 63 6b != 0) {....cack 14660 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 14670 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 14680 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 14690 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 146a0 20 20 53 65 61 72 63 68 20 71 75 65 72 79 20 73 Search query s 146b0 70 65 63 69 66 69 65 64 20 61 73 20 4e 55 4c 4c pecified as NULL 146c0 2c 20 62 75 74 20 6e 75 6d 62 65 72 20 6f 66 20 , but number of 146d0 71 75 65 72 79 20 74 65 72 6d 73 20 6e 6f 74 20 query terms not 146e0 73 70 65 63 69 66 69 65 64 20 61 73 20 30 2e 22 specified as 0." 146f0 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 4b );.....return(CK 14700 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 R_ARGUMENTS_BAD) 14710 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f ;...}....cackey_ 14720 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 14730 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5f n].search_query_ 14740 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 09 63 61 63 count = 0;...cac 14750 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 14760 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 ssion].search_qu 14770 65 72 79 20 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a ery = NULL;..}.. 14780 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 14790 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 147a0 68 5f 61 63 74 69 76 65 20 3d 20 31 3b 0a 09 63 h_active = 1;..c 147b0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 147c0 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 147d0 63 75 72 72 5f 69 64 20 3d 20 30 3b 0a 0a 09 6d curr_id = 0;...m 147e0 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 147f0 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 14800 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 14810 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 14820 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 14830 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 14840 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f TF("Error. Unlo 14850 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 14860 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 14870 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 14880 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 14890 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 148a0 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c ng CKR_OK (%i)", 148b0 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 CKR_OK);...retu 148c0 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 rn(CKR_OK);.}..C 148d0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 148e0 4e 28 43 4b 5f 52 56 2c 20 43 5f 46 69 6e 64 4f N(CK_RV, C_FindO 148f0 62 6a 65 63 74 73 29 28 43 4b 5f 53 45 53 53 49 bjects)(CK_SESSI 14900 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 14910 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 on, CK_OBJECT_HA 14920 4e 44 4c 45 5f 50 54 52 20 70 68 4f 62 6a 65 63 NDLE_PTR phObjec 14930 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 4d 61 t, CK_ULONG ulMa 14940 78 4f 62 6a 65 63 74 43 6f 75 6e 74 2c 20 43 4b xObjectCount, CK 14950 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 4f 62 _ULONG_PTR pulOb 14960 6a 65 63 74 43 6f 75 6e 74 29 20 7b 0a 09 73 74 jectCount) {..st 14970 72 75 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e ruct cackey_iden 14980 74 69 74 79 20 2a 63 75 72 72 5f 69 64 3b 0a 09 tity *curr_id;.. 14990 43 4b 5f 41 54 54 52 49 42 55 54 45 20 2a 63 75 CK_ATTRIBUTE *cu 149a0 72 72 5f 61 74 74 72 3b 0a 09 43 4b 5f 55 4c 4f rr_attr;..CK_ULO 149b0 4e 47 20 63 75 72 72 5f 69 64 5f 69 64 78 2c 20 NG curr_id_idx, 149c0 63 75 72 72 5f 6f 75 74 5f 69 64 5f 69 64 78 2c curr_out_id_idx, 149d0 20 63 75 72 72 5f 61 74 74 72 5f 69 64 78 2c 20 curr_attr_idx, 149e0 73 65 73 73 5f 61 74 74 72 5f 69 64 78 3b 0a 09 sess_attr_idx;.. 149f0 43 4b 5f 55 4c 4f 4e 47 20 6d 61 74 63 68 65 64 CK_ULONG matched 14a00 5f 63 6f 75 6e 74 2c 20 70 72 65 76 5f 6d 61 74 _count, prev_mat 14a10 63 68 65 64 5f 63 6f 75 6e 74 3b 0a 09 69 6e 74 ched_count;..int 14a20 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a mutex_retval;.. 14a30 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 14a40 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 14a50 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 14a60 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 14a70 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 14a80 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 14a90 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 14aa0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 14ab0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 14ac0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 IALIZED);..}...i 14ad0 66 20 28 70 75 6c 4f 62 6a 65 63 74 43 6f 75 6e f (pulObjectCoun 14ae0 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 t == NULL) {...C 14af0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 14b00 54 46 28 22 45 72 72 6f 72 2e 20 20 70 75 6c 4f TF("Error. pulO 14b10 62 6a 65 63 74 43 6f 75 6e 74 20 69 73 20 4e 55 bjectCount is NU 14b20 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 14b30 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 14b40 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 68 AD);..}...if (ph 14b50 4f 62 6a 65 63 74 20 3d 3d 20 4e 55 4c 4c 20 26 Object == NULL & 14b60 26 20 75 6c 4d 61 78 4f 62 6a 65 63 74 43 6f 75 & ulMaxObjectCou 14b70 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 nt == 0) {.../* 14b80 53 68 6f 72 74 20 63 69 72 63 75 69 74 2c 20 69 Short circuit, i 14b90 66 20 7a 65 72 6f 20 6f 62 6a 65 63 74 73 20 77 f zero objects w 14ba0 65 72 65 20 73 70 65 63 69 66 69 65 64 20 72 65 ere specified re 14bb0 74 75 72 6e 20 7a 65 72 6f 20 69 74 65 6d 73 20 turn zero items 14bc0 69 6d 6d 65 64 69 61 74 65 6c 79 20 2a 2f 0a 09 immediately */.. 14bd0 09 2a 70 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 .*pulObjectCount 14be0 20 3d 20 30 3b 0a 0a 09 09 43 41 43 4b 45 59 5f = 0;....CACKEY_ 14bf0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 14c00 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 turning CKR_OK ( 14c10 25 69 29 20 28 73 68 6f 72 74 20 63 69 72 63 75 %i) (short circu 14c20 69 74 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a it)", CKR_OK);.. 14c30 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 ..return(CKR_OK) 14c40 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 68 4f 62 6a ;..}...if (phObj 14c50 65 63 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 ect == NULL) {.. 14c60 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 14c70 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 70 68 INTF("Error. ph 14c80 4f 62 6a 65 63 74 20 69 73 20 4e 55 4c 4c 2e 22 Object is NULL." 14c90 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 14ca0 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b _ARGUMENTS_BAD); 14cb0 0a 09 7d 0a 0a 09 69 66 20 28 75 6c 4d 61 78 4f ..}...if (ulMaxO 14cc0 62 6a 65 63 74 43 6f 75 6e 74 20 3d 3d 20 30 29 bjectCount == 0) 14cd0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 14ce0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 14cf0 20 20 4d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 Maximum number 14d00 20 6f 66 20 6f 62 6a 65 63 74 73 20 73 70 65 63 of objects spec 14d10 69 66 69 65 64 20 61 73 20 7a 65 72 6f 2e 22 29 ified as zero.") 14d20 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 14d30 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 14d40 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f .}...if (hSessio 14d50 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 n == 0 || hSessi 14d60 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 on >= (sizeof(ca 14d70 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f ckey_sessions) / 14d80 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s 14d90 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a essions[0]))) {. 14da0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 14db0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 14dc0 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 ession out of ra 14dd0 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 nge.");......ret 14de0 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 14df0 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 14e00 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 14e10 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 14e20 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 x_lock(cackey_bi 14e30 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 glock);..if (mut 14e40 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 14e50 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 14e60 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 14e70 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e Locking failed. 14e80 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 14e90 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 14ea0 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack 14eb0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 14ec0 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a sion].active) {. 14ed0 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 14ee0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 14ef0 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 lock);....CACKEY 14f00 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 14f10 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e rror. Session n 14f20 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 ot active.");... 14f30 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 ...return(CKR_SE 14f40 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 SSION_HANDLE_INV 14f50 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 ALID);..}...if ( 14f60 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 !cackey_sessions 14f70 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 14f80 68 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 h_active) {...ca 14f90 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 14fa0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 14fb0 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 14fc0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 14fd0 2e 20 20 53 65 61 72 63 68 20 6e 6f 74 20 61 63 . Search not ac 14fe0 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 14ff0 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 turn(CKR_OPERATI 15000 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a ON_NOT_INITIALIZ 15010 45 44 29 3b 0a 09 7d 0a 0a 09 63 75 72 72 5f 69 ED);..}...curr_i 15020 64 5f 69 64 78 20 3d 20 30 3b 0a 09 63 75 72 72 d_idx = 0;..curr 15030 5f 6f 75 74 5f 69 64 5f 69 64 78 20 3d 20 30 3b _out_id_idx = 0; 15040 0a 09 66 6f 72 20 28 63 75 72 72 5f 69 64 5f 69 ..for (curr_id_i 15050 64 78 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 dx = cackey_sess 15060 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 15070 65 61 72 63 68 5f 63 75 72 72 5f 69 64 3b 20 63 earch_curr_id; c 15080 75 72 72 5f 69 64 5f 69 64 78 20 3c 20 63 61 63 urr_id_idx < cac 15090 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 150a0 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 ssion].identitie 150b0 73 5f 63 6f 75 6e 74 20 26 26 20 75 6c 4d 61 78 s_count && ulMax 150c0 4f 62 6a 65 63 74 43 6f 75 6e 74 3b 20 63 75 72 ObjectCount; cur 150d0 72 5f 69 64 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 r_id_idx++) {... 150e0 63 75 72 72 5f 69 64 20 3d 20 26 63 61 63 6b 65 curr_id = &cacke 150f0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 15100 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5b ion].identities[ 15110 63 75 72 72 5f 69 64 5f 69 64 78 5d 3b 0a 0a 09 curr_id_idx];... 15120 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 15130 49 4e 54 46 28 22 50 72 6f 63 65 73 73 69 6e 67 INTF("Processing 15140 20 69 64 65 6e 74 69 74 79 3a 25 6c 75 22 2c 20 identity:%lu", 15150 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 15160 63 75 72 72 5f 69 64 5f 69 64 78 29 3b 0a 0a 09 curr_id_idx);... 15170 09 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 20 3d .matched_count = 15180 20 30 3b 0a 0a 09 09 66 6f 72 20 28 63 75 72 72 0;....for (curr 15190 5f 61 74 74 72 5f 69 64 78 20 3d 20 30 3b 20 63 _attr_idx = 0; c 151a0 75 72 72 5f 61 74 74 72 5f 69 64 78 20 3c 20 63 urr_attr_idx < c 151b0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 151c0 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 151d0 71 75 65 72 79 5f 63 6f 75 6e 74 3b 20 63 75 72 query_count; cur 151e0 72 5f 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a r_attr_idx++) {. 151f0 09 09 09 70 72 65 76 5f 6d 61 74 63 68 65 64 5f ...prev_matched_ 15200 63 6f 75 6e 74 20 3d 20 6d 61 74 63 68 65 64 5f count = matched_ 15210 63 6f 75 6e 74 3b 0a 0a 09 09 09 63 75 72 72 5f count;.....curr_ 15220 61 74 74 72 20 3d 20 26 63 61 63 6b 65 79 5f 73 attr = &cackey_s 15230 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 15240 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5b 63 ].search_query[c 15250 75 72 72 5f 61 74 74 72 5f 69 64 78 5d 3b 0a 0a urr_attr_idx];.. 15260 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 15270 50 52 49 4e 54 46 28 22 20 20 43 68 65 63 6b 69 PRINTF(" Checki 15280 6e 67 20 66 6f 72 20 61 74 74 72 69 62 75 74 65 ng for attribute 15290 20 30 78 25 30 38 6c 78 20 69 6e 20 69 64 65 6e 0x%08lx in iden 152a0 74 69 74 79 3a 25 69 2e 2e 2e 22 2c 20 28 75 6e tity:%i...", (un 152b0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 signed long) cur 152c0 72 5f 61 74 74 72 2d 3e 74 79 70 65 2c 20 28 69 r_attr->type, (i 152d0 6e 74 29 20 63 75 72 72 5f 69 64 5f 69 64 78 29 nt) curr_id_idx) 152e0 3b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 152f0 47 5f 50 52 49 4e 54 42 55 46 28 22 20 20 20 20 G_PRINTBUF(" 15300 56 61 6c 75 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f Value looking fo 15310 72 3a 22 2c 20 63 75 72 72 5f 61 74 74 72 2d 3e r:", curr_attr-> 15320 70 56 61 6c 75 65 2c 20 63 75 72 72 5f 61 74 74 pValue, curr_att 15330 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a r->ulValueLen);. 15340 0a 09 09 09 66 6f 72 20 28 73 65 73 73 5f 61 74 ....for (sess_at 15350 74 72 5f 69 64 78 20 3d 20 30 3b 20 73 65 73 73 tr_idx = 0; sess 15360 5f 61 74 74 72 5f 69 64 78 20 3c 20 63 75 72 72 _attr_idx < curr 15370 5f 69 64 2d 3e 61 74 74 72 69 62 75 74 65 73 5f _id->attributes_ 15380 63 6f 75 6e 74 3b 20 73 65 73 73 5f 61 74 74 72 count; sess_attr 15390 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 69 66 _idx++) {.....if 153a0 20 28 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 69 (curr_id->attri 153b0 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f butes[sess_attr_ 153c0 69 64 78 5d 2e 74 79 70 65 20 3d 3d 20 63 75 72 idx].type == cur 153d0 72 5f 61 74 74 72 2d 3e 74 79 70 65 29 20 7b 0a r_attr->type) {. 153e0 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 153f0 47 5f 50 52 49 4e 54 46 28 22 20 20 20 20 2e 2e G_PRINTF(" .. 15400 2e 20 66 6f 75 6e 64 20 6d 61 74 63 68 69 6e 67 . found matching 15410 20 74 79 70 65 20 2e 2e 2e 22 29 3b 0a 09 09 09 type ...");.... 15420 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 15430 52 49 4e 54 42 55 46 28 22 20 20 20 20 2e 2e 2e RINTBUF(" ... 15440 20 6f 75 72 20 76 61 6c 75 65 3a 22 2c 20 63 75 our value:", cu 15450 72 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 74 65 rr_id->attribute 15460 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d s[sess_attr_idx] 15470 2e 70 56 61 6c 75 65 2c 20 63 75 72 72 5f 69 64 .pValue, curr_id 15480 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 ->attributes[ses 15490 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c 56 61 s_attr_idx].ulVa 154a0 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 09 69 lueLen);.......i 154b0 66 20 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 f (curr_attr->pV 154c0 61 6c 75 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a alue == NULL) {. 154d0 09 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 154e0 55 47 5f 50 52 49 4e 54 46 28 22 20 20 20 20 20 UG_PRINTF(" 154f0 20 20 2e 2e 2e 20 66 6f 75 6e 64 20 77 69 6c 64 ... found wild 15500 63 61 72 64 20 6d 61 74 63 68 22 29 3b 0a 0a 09 card match");... 15510 09 09 09 09 09 6d 61 74 63 68 65 64 5f 63 6f 75 .....matched_cou 15520 6e 74 2b 2b 3b 0a 0a 09 09 09 09 09 09 62 72 65 nt++;........bre 15530 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a 20 09 09 09 ak;......}.. ... 15540 09 09 69 66 20 28 63 75 72 72 5f 61 74 74 72 2d ..if (curr_attr- 15550 3e 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 3d 20 63 >ulValueLen == c 15560 75 72 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 74 urr_id->attribut 15570 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 es[sess_attr_idx 15580 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 20 26 26 20 ].ulValueLen && 15590 6d 65 6d 63 6d 70 28 63 75 72 72 5f 61 74 74 72 memcmp(curr_attr 155a0 2d 3e 70 56 61 6c 75 65 2c 20 63 75 72 72 5f 69 ->pValue, curr_i 155b0 64 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 d->attributes[se 155c0 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 70 56 61 ss_attr_idx].pVa 155d0 6c 75 65 2c 20 63 75 72 72 5f 69 64 2d 3e 61 74 lue, curr_id->at 155e0 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 tributes[sess_at 155f0 74 72 5f 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c tr_idx].ulValueL 15600 65 6e 29 20 3d 3d 20 30 29 20 7b 0a 09 09 09 09 en) == 0) {..... 15610 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 15620 52 49 4e 54 46 28 22 20 20 20 20 20 20 20 2e 2e RINTF(" .. 15630 2e 20 66 6f 75 6e 64 20 65 78 61 63 74 20 6d 61 . found exact ma 15640 74 63 68 22 29 3b 0a 0a 09 09 09 09 09 09 6d 61 tch");........ma 15650 74 63 68 65 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 0a tched_count++;.. 15660 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 15670 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 0a ..}.....}....}.. 15680 09 09 09 2f 2a 20 49 66 20 74 68 65 20 61 74 74 .../* If the att 15690 72 69 62 75 74 65 20 63 6f 75 6c 64 20 6e 6f 74 ribute could not 156a0 20 62 65 20 6d 61 74 63 68 65 64 2c 20 64 6f 20 be matched, do 156b0 6e 6f 74 20 74 72 79 20 74 6f 20 6d 61 74 63 68 not try to match 156c0 20 61 64 64 69 74 69 6f 6e 61 6c 20 61 74 74 72 additional attr 156d0 69 62 75 74 65 73 20 2a 2f 0a 09 09 09 69 66 20 ibutes */....if 156e0 28 70 72 65 76 5f 6d 61 74 63 68 65 64 5f 63 6f (prev_matched_co 156f0 75 6e 74 20 3d 3d 20 6d 61 74 63 68 65 64 5f 63 unt == matched_c 15700 6f 75 6e 74 29 20 7b 0a 09 09 09 09 62 72 65 61 ount) {.....brea 15710 6b 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 69 k;....}...}....i 15720 66 20 28 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 f (matched_count 15730 20 3d 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 == cackey_sessi 15740 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 ons[hSession].se 15750 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 arch_query_count 15760 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE 15770 42 55 47 5f 50 52 49 4e 54 46 28 22 20 20 2e 2e BUG_PRINTF(" .. 15780 2e 20 41 6c 6c 20 25 69 20 61 74 74 72 69 62 75 . All %i attribu 15790 74 65 73 20 63 68 65 63 6b 65 64 20 66 6f 72 20 tes checked for 157a0 66 6f 75 6e 64 2c 20 61 64 64 69 6e 67 20 69 64 found, adding id 157b0 65 6e 74 69 74 79 3a 25 69 20 74 6f 20 72 65 74 entity:%i to ret 157c0 75 72 6e 65 64 20 6c 69 73 74 22 2c 20 28 69 6e urned list", (in 157d0 74 29 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f t) cackey_sessio 157e0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 ns[hSession].sea 157f0 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 2c rch_query_count, 15800 20 28 69 6e 74 29 20 63 75 72 72 5f 69 64 5f 69 (int) curr_id_i 15810 64 78 29 3b 0a 0a 09 09 09 70 68 4f 62 6a 65 63 dx);.....phObjec 15820 74 5b 63 75 72 72 5f 6f 75 74 5f 69 64 5f 69 64 t[curr_out_id_id 15830 78 5d 20 3d 20 63 75 72 72 5f 69 64 5f 69 64 78 x] = curr_id_idx 15840 20 2b 20 31 3b 0a 0a 09 09 09 75 6c 4d 61 78 4f + 1;.....ulMaxO 15850 62 6a 65 63 74 43 6f 75 6e 74 2d 2d 3b 0a 0a 09 bjectCount--;... 15860 09 09 63 75 72 72 5f 6f 75 74 5f 69 64 5f 69 64 ..curr_out_id_id 15870 78 2b 2b 3b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a x++;...} else {. 15880 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 15890 50 52 49 4e 54 46 28 22 20 20 2e 2e 2e 20 4e 6f PRINTF(" ... No 158a0 74 20 61 6c 6c 20 25 69 20 28 6f 6e 6c 79 20 66 t all %i (only f 158b0 6f 75 6e 64 20 25 69 29 20 61 74 74 72 69 62 75 ound %i) attribu 158c0 74 65 73 20 63 68 65 63 6b 65 64 20 66 6f 72 20 tes checked for 158d0 66 6f 75 6e 64 2c 20 6e 6f 74 20 61 64 64 69 6e found, not addin 158e0 67 20 69 64 65 6e 74 69 74 79 3a 25 69 22 2c 20 g identity:%i", 158f0 28 69 6e 74 29 20 63 61 63 6b 65 79 5f 73 65 73 (int) cackey_ses 15900 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 15910 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 search_query_cou 15920 6e 74 2c 20 28 69 6e 74 29 20 6d 61 74 63 68 65 nt, (int) matche 15930 64 5f 63 6f 75 6e 74 2c 20 28 69 6e 74 29 20 63 d_count, (int) c 15940 75 72 72 5f 69 64 5f 69 64 78 29 3b 0a 09 09 7d urr_id_idx);...} 15950 0a 09 7d 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 ..}..cackey_sess 15960 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 15970 65 61 72 63 68 5f 63 75 72 72 5f 69 64 20 3d 20 earch_curr_id = 15980 63 75 72 72 5f 69 64 5f 69 64 78 3b 0a 09 2a 70 curr_id_idx;..*p 15990 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 20 ulObjectCount = 159a0 63 75 72 72 5f 6f 75 74 5f 69 64 5f 69 64 78 3b curr_out_id_idx; 159b0 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 159c0 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 = cackey_mutex_u 159d0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 159e0 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 159f0 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 15a00 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 15a10 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 15a20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Unlocking failed 15a30 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 15a40 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 15a50 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 15a60 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 15a70 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 urning CKR_OK (% 15a80 69 29 2c 20 6e 75 6d 20 6f 62 6a 65 63 74 73 20 i), num objects 15a90 3d 20 25 6c 75 22 2c 20 43 4b 52 5f 4f 4b 2c 20 = %lu", CKR_OK, 15aa0 2a 70 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 29 *pulObjectCount) 15ab0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O 15ac0 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 K);.}..CK_DEFINE 15ad0 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 15ae0 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 69 C_FindObjectsFi 15af0 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f nal)(CK_SESSION_ 15b00 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 HANDLE hSession) 15b10 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 {..int mutex_re 15b20 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 tval;...CACKEY_D 15b30 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 15b40 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 15b50 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 15b60 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 15b70 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 15b80 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 15b90 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 15ba0 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 15bb0 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 15bc0 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 ..}...if (hSessi 15bd0 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 on == 0 || hSess 15be0 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 ion >= (sizeof(c 15bf0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 ackey_sessions) 15c00 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ 15c10 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b sessions[0]))) { 15c20 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 15c30 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 15c40 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 Session out of r 15c50 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 ange.");......re 15c60 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 15c70 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 15c80 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 15c90 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 15ca0 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 ex_lock(cackey_b 15cb0 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 15cc0 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 15cd0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 15ce0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 15cf0 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Locking failed 15d00 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 15d10 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 15d20 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 15d30 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 15d40 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b ssion].active) { 15d50 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 15d60 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 15d70 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 15d80 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15d90 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 15da0 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 not active.");.. 15db0 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 15dc0 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 15dd0 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 VALID);..}...if 15de0 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (!cackey_session 15df0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 s[hSession].sear 15e00 63 68 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 ch_active) {...c 15e10 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 15e20 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 15e30 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 15e40 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 15e50 72 2e 20 20 53 65 61 72 63 68 20 6e 6f 74 20 61 r. Search not a 15e60 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 ctive.");......r 15e70 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 eturn(CKR_OPERAT 15e80 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 ION_NOT_INITIALI 15e90 5a 45 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 ZED);..}...cacke 15ea0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 15eb0 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 74 69 ion].search_acti 15ec0 76 65 20 3d 20 30 3b 0a 09 69 66 20 28 63 61 63 ve = 0;..if (cac 15ed0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 15ee0 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 ssion].search_qu 15ef0 65 72 79 29 20 7b 0a 09 09 66 72 65 65 28 63 61 ery) {...free(ca 15f00 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 15f10 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 ession].search_q 15f20 75 65 72 79 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 uery);..}...mute 15f30 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 15f40 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 15f50 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 15f60 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 15f70 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 15f80 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 15f90 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 "Error. Unlocki 15fa0 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 15fb0 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 15fc0 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 15fd0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 15fe0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 15ff0 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK 16000 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 R_OK);...return( 16010 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 CKR_OK);.}..CK_D 16020 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 16030 4b 5f 52 56 2c 20 43 5f 45 6e 63 72 79 70 74 49 K_RV, C_EncryptI 16040 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f nit)(CK_SESSION_ 16050 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 16060 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 CK_MECHANISM_PT 16070 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b R pMechanism, CK 16080 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 _OBJECT_HANDLE h 16090 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Key) {..CACKEY_D 160a0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 160b0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 160c0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 160d0 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 160e0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 160f0 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 16100 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 16110 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 16120 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 16130 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 16140 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 16150 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 16160 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 16170 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 16180 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 16190 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 161a0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 161b0 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 161c0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 161d0 43 4b 5f 52 56 2c 20 43 5f 45 6e 63 72 79 70 74 CK_RV, C_Encrypt 161e0 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 161f0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 16200 5f 42 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c _BYTE_PTR pData, 16210 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 CK_ULONG ulData 16220 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 Len, CK_BYTE_PTR 16230 20 70 45 6e 63 72 79 70 74 65 64 44 61 74 61 2c pEncryptedData, 16240 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 CK_ULONG_PTR pu 16250 6c 45 6e 63 72 79 70 74 65 64 44 61 74 61 4c 65 lEncryptedDataLe 16260 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 n) {..CACKEY_DEB 16270 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 16280 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 16290 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 162a0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 162b0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 162c0 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 162d0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 162e0 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 162f0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 16300 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 16310 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 16320 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 16330 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 16340 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 16350 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 16360 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 16370 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 16380 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 16390 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 163a0 5f 52 56 2c 20 43 5f 45 6e 63 72 79 70 74 55 70 _RV, C_EncryptUp 163b0 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e date)(CK_SESSION 163c0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 163d0 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 , CK_BYTE_PTR pP 163e0 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c art, CK_ULONG ul 163f0 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 PartLen, CK_BYTE 16400 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 64 50 _PTR pEncryptedP 16410 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 art, CK_ULONG_PT 16420 52 20 70 75 6c 45 6e 63 72 79 70 74 65 64 50 61 R pulEncryptedPa 16430 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 rtLen) {..CACKEY 16440 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 16450 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 16460 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 16470 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 16480 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 16490 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 164a0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 164b0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 164c0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 164d0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 164e0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 164f0 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 16500 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 16510 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 16520 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 16530 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 16540 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 16550 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 16560 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 16570 4e 28 43 4b 5f 52 56 2c 20 43 5f 45 6e 63 72 79 N(CK_RV, C_Encry 16580 70 74 46 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 ptFinal)(CK_SESS 16590 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 165a0 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 165b0 20 70 4c 61 73 74 45 6e 63 72 79 70 74 65 64 50 pLastEncryptedP 165c0 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 art, CK_ULONG_PT 165d0 52 20 70 75 6c 4c 61 73 74 45 6e 63 72 79 70 74 R pulLastEncrypt 165e0 65 64 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 edPartLen) {..CA 165f0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 16600 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 16610 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 16620 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 16630 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 16640 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 16650 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 16660 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 16670 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 16680 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 16690 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 166a0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 166b0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 166c0 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 166d0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 166e0 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 166f0 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 16700 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 16710 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 16720 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 CTION(CK_RV, C_D 16730 65 63 72 79 70 74 49 6e 69 74 29 28 43 4b 5f 53 ecryptInit)(CK_S 16740 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 16750 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 ession, CK_MECHA 16760 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e NISM_PTR pMechan 16770 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 ism, CK_OBJECT_H 16780 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09 69 ANDLE hKey) {..i 16790 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b nt mutex_retval; 167a0 0a 0a 09 68 4b 65 79 2d 2d 3b 0a 0a 09 43 41 43 ...hKey--;...CAC 167b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 167c0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 167d0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 167e0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 167f0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 16800 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 16810 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 16820 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 16830 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 16840 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 ZED);..}...if (p 16850 4d 65 63 68 61 6e 69 73 6d 20 3d 3d 20 4e 55 4c Mechanism == NUL 16860 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 L) {...CACKEY_DE 16870 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 16880 72 2e 20 70 4d 65 63 68 61 6e 69 73 6d 20 69 73 r. pMechanism is 16890 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 NULL.");....ret 168a0 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 urn(CKR_ARGUMENT 168b0 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 S_BAD);..}...if 168c0 28 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 (pMechanism->mec 168d0 68 61 6e 69 73 6d 20 21 3d 20 43 4b 4d 5f 52 53 hanism != CKM_RS 168e0 41 5f 50 4b 43 53 29 20 7b 0a 09 09 43 41 43 4b A_PKCS) {...CACK 168f0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 16900 22 45 72 72 6f 72 2e 20 70 4d 65 63 68 61 6e 69 "Error. pMechani 16910 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 20 6e 6f sm->mechanism no 16920 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20 43 t specified as C 16930 4b 4d 5f 52 53 41 5f 50 4b 43 53 22 29 3b 0a 0a KM_RSA_PKCS");.. 16940 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4d 45 43 ..return(CKR_MEC 16950 48 41 4e 49 53 4d 5f 50 41 52 41 4d 5f 49 4e 56 HANISM_PARAM_INV 16960 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 ALID);..}...if ( 16970 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c hSession == 0 || 16980 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 hSession >= (si 16990 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 169a0 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 ions) / sizeof(c 169b0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 ackey_sessions[0 169c0 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ]))) {...CACKEY_ 169d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 169e0 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 ror. Session ou 169f0 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 t of range.");.. 16a00 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 16a10 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 16a20 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 VALID);..}...mut 16a30 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 16a40 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 ey_mutex_lock(ca 16a50 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 16a60 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 16a70 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 16a80 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 16a90 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 Error. Locking 16aa0 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 16ab0 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 16ac0 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 _ERROR);..}...if 16ad0 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f (!cackey_sessio 16ae0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 ns[hSession].act 16af0 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ive) {...cackey_ 16b00 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 16b10 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 16b20 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 16b30 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 16b40 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 ssion not active 16b50 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 16b60 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 16b70 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 16b80 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 ...if (cackey_se 16b90 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 16ba0 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 29 .decrypt_active) 16bb0 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 16bc0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 16bd0 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 16be0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 16bf0 28 22 45 72 72 6f 72 2e 20 20 44 65 63 72 79 70 ("Error. Decryp 16c00 74 20 61 6c 72 65 61 64 79 20 69 6e 20 70 72 6f t already in pro 16c10 67 72 65 73 73 2e 22 29 3b 0a 09 09 0a 09 09 72 gress.");......r 16c20 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 eturn(CKR_OPERAT 16c30 49 4f 4e 5f 41 43 54 49 56 45 29 3b 0a 09 7d 0a ION_ACTIVE);..}. 16c40 0a 09 69 66 20 28 68 4b 65 79 20 3e 3d 20 63 61 ..if (hKey >= ca 16c50 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 16c60 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 ession].identiti 16c70 65 73 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 63 61 es_count) {...ca 16c80 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 16c90 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 16ca0 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 16cb0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 16cc0 2e 20 20 4b 65 79 20 68 61 6e 64 6c 65 20 6f 75 . Key handle ou 16cd0 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 0a t of range.");.. 16ce0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4b 45 59 ..return(CKR_KEY 16cf0 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 16d00 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 ;..}...cackey_se 16d10 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 16d20 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 20 .decrypt_active 16d30 3d 20 31 3b 0a 0a 09 63 61 63 6b 65 79 5f 73 65 = 1;...cackey_se 16d40 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 16d50 2e 64 65 63 72 79 70 74 5f 6d 65 63 68 61 6e 69 .decrypt_mechani 16d60 73 6d 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d 2d sm = pMechanism- 16d70 3e 6d 65 63 68 61 6e 69 73 6d 3b 0a 09 63 61 63 >mechanism;..cac 16d80 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 16d90 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 6d ssion].decrypt_m 16da0 65 63 68 5f 70 61 72 6d 20 3d 20 70 4d 65 63 68 ech_parm = pMech 16db0 61 6e 69 73 6d 2d 3e 70 50 61 72 61 6d 65 74 65 anism->pParamete 16dc0 72 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 r;..cackey_sessi 16dd0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 ons[hSession].de 16de0 63 72 79 70 74 5f 6d 65 63 68 5f 70 61 72 6d 6c crypt_mech_parml 16df0 65 6e 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d 2d en = pMechanism- 16e00 3e 75 6c 50 61 72 61 6d 65 74 65 72 4c 65 6e 3b >ulParameterLen; 16e10 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 16e20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 = cackey_mutex_u 16e30 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 16e40 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 16e50 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 16e60 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 16e70 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 16e80 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Unlocking failed 16e90 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 16ea0 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 16eb0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 16ec0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 16ed0 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 urning CKR_OK (% 16ee0 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 i)", CKR_OK);... 16ef0 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a return(CKR_OK);. 16f00 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 16f10 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 CTION(CK_RV, C_D 16f20 65 63 72 79 70 74 29 28 43 4b 5f 53 45 53 53 49 ecrypt)(CK_SESSI 16f30 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 16f40 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 16f50 70 45 6e 63 72 79 70 74 65 64 44 61 74 61 2c 20 pEncryptedData, 16f60 43 4b 5f 55 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 CK_ULONG ulEncry 16f70 70 74 65 64 44 61 74 61 4c 65 6e 2c 20 43 4b 5f ptedDataLen, CK_ 16f80 42 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 BYTE_PTR pData, 16f90 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 16fa0 44 61 74 61 4c 65 6e 29 20 7b 0a 09 43 4b 5f 55 DataLen) {..CK_U 16fb0 4c 4f 4e 47 20 64 61 74 61 6c 65 6e 5f 75 70 64 LONG datalen_upd 16fc0 61 74 65 2c 20 64 61 74 61 6c 65 6e 5f 66 69 6e ate, datalen_fin 16fd0 61 6c 3b 0a 09 43 4b 5f 52 56 20 64 65 63 72 79 al;..CK_RV decry 16fe0 70 74 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 pt_ret;...CACKEY 16ff0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 17000 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 17010 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 17020 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 17030 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 17040 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 17050 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 17060 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 17070 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 17080 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 75 6c 44 );..}...if (pulD 17090 61 74 61 4c 65 6e 20 3d 3d 20 4e 55 4c 4c 29 20 ataLen == NULL) 170a0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 170b0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 170c0 70 75 6c 44 61 74 61 4c 65 6e 20 69 73 20 4e 55 pulDataLen is NU 170d0 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 170e0 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 170f0 41 44 29 3b 0a 09 7d 0a 0a 09 64 61 74 61 6c 65 AD);..}...datale 17100 6e 5f 75 70 64 61 74 65 20 3d 20 2a 70 75 6c 44 n_update = *pulD 17110 61 74 61 4c 65 6e 3b 0a 0a 09 64 65 63 72 79 70 ataLen;...decryp 17120 74 5f 72 65 74 20 3d 20 43 5f 44 65 63 72 79 70 t_ret = C_Decryp 17130 74 55 70 64 61 74 65 28 68 53 65 73 73 69 6f 6e tUpdate(hSession 17140 2c 20 70 45 6e 63 72 79 70 74 65 64 44 61 74 61 , pEncryptedData 17150 2c 20 75 6c 45 6e 63 72 79 70 74 65 64 44 61 74 , ulEncryptedDat 17160 61 4c 65 6e 2c 20 70 44 61 74 61 2c 20 26 64 61 aLen, pData, &da 17170 74 61 6c 65 6e 5f 75 70 64 61 74 65 29 3b 0a 09 talen_update);.. 17180 69 66 20 28 64 65 63 72 79 70 74 5f 72 65 74 20 if (decrypt_ret 17190 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 != CKR_OK) {...C 171a0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 171b0 54 46 28 22 45 72 72 6f 72 2e 20 20 44 65 63 72 TF("Error. Decr 171c0 79 70 74 55 70 64 61 74 65 28 29 20 72 65 74 75 yptUpdate() retu 171d0 72 6e 65 64 20 66 61 69 6c 75 72 65 20 28 72 76 rned failure (rv 171e0 20 3d 20 25 6c 75 29 2e 22 2c 20 28 75 6e 73 69 = %lu).", (unsi 171f0 67 6e 65 64 20 6c 6f 6e 67 29 20 64 65 63 72 79 gned long) decry 17200 70 74 5f 72 65 74 29 3b 0a 0a 09 09 72 65 74 75 pt_ret);....retu 17210 72 6e 28 64 65 63 72 79 70 74 5f 72 65 74 29 3b rn(decrypt_ret); 17220 0a 09 7d 0a 0a 09 69 66 20 28 70 44 61 74 61 29 ..}...if (pData) 17230 20 7b 0a 09 09 70 44 61 74 61 20 2b 3d 20 64 61 {...pData += da 17240 74 61 6c 65 6e 5f 75 70 64 61 74 65 3b 0a 09 7d talen_update;..} 17250 0a 09 64 61 74 61 6c 65 6e 5f 66 69 6e 61 6c 20 ..datalen_final 17260 3d 20 2a 70 75 6c 44 61 74 61 4c 65 6e 20 2d 20 = *pulDataLen - 17270 64 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 3b 0a datalen_update;. 17280 0a 09 64 65 63 72 79 70 74 5f 72 65 74 20 3d 20 ..decrypt_ret = 17290 43 5f 44 65 63 72 79 70 74 46 69 6e 61 6c 28 68 C_DecryptFinal(h 172a0 53 65 73 73 69 6f 6e 2c 20 70 44 61 74 61 2c 20 Session, pData, 172b0 26 64 61 74 61 6c 65 6e 5f 66 69 6e 61 6c 29 3b &datalen_final); 172c0 0a 09 69 66 20 28 64 65 63 72 79 70 74 5f 72 65 ..if (decrypt_re 172d0 74 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 t != CKR_OK) {.. 172e0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 172f0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 44 65 INTF("Error. De 17300 63 72 79 70 74 46 69 6e 61 6c 28 29 20 72 65 74 cryptFinal() ret 17310 75 72 6e 65 64 20 66 61 69 6c 75 72 65 20 28 72 urned failure (r 17320 76 20 3d 20 25 6c 75 29 2e 22 2c 20 28 75 6e 73 v = %lu).", (uns 17330 69 67 6e 65 64 20 6c 6f 6e 67 29 20 64 65 63 72 igned long) decr 17340 79 70 74 5f 72 65 74 29 3b 0a 0a 09 09 72 65 74 ypt_ret);....ret 17350 75 72 6e 28 64 65 63 72 79 70 74 5f 72 65 74 29 urn(decrypt_ret) 17360 3b 0a 09 7d 0a 0a 09 2a 70 75 6c 44 61 74 61 4c ;..}...*pulDataL 17370 65 6e 20 3d 20 64 61 74 61 6c 65 6e 5f 75 70 64 en = datalen_upd 17380 61 74 65 20 2b 20 64 61 74 61 6c 65 6e 5f 66 69 ate + datalen_fi 17390 6e 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 nal;...CACKEY_DE 173a0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 173b0 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 173c0 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 )", CKR_OK);...r 173d0 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 173e0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 173f0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 TION(CK_RV, C_De 17400 63 72 79 70 74 55 70 64 61 74 65 29 28 43 4b 5f cryptUpdate)(CK_ 17410 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 17420 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 17430 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 64 50 _PTR pEncryptedP 17440 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c art, CK_ULONG ul 17450 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e EncryptedPartLen 17460 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 , CK_BYTE_PTR pP 17470 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 art, CK_ULONG_PT 17480 52 20 70 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a R pulPartLen) {. 17490 09 73 74 61 74 69 63 20 43 4b 5f 42 59 54 45 20 .static CK_BYTE 174a0 62 75 66 5b 31 36 33 38 34 5d 3b 0a 09 73 73 69 buf[16384];..ssi 174b0 7a 65 5f 74 20 62 75 66 6c 65 6e 3b 0a 09 43 4b ze_t buflen;..CK 174c0 5f 52 56 20 72 65 74 76 61 6c 20 3d 20 43 4b 52 _RV retval = CKR 174d0 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 3b 0a _GENERAL_ERROR;. 174e0 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 .int mutex_retva 174f0 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 l;...CACKEY_DEBU 17500 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 17510 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 17520 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 17530 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 17540 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 17550 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 17560 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 17570 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 17580 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 17590 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 ...if (hSession 175a0 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e == 0 || hSession 175b0 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b >= (sizeof(cack 175c0 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 175d0 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 175e0 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 sions[0]))) {... 175f0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 17600 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 NTF("Error. Ses 17610 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 sion out of rang 17620 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 17630 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 17640 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 17650 7d 0a 0a 09 69 66 20 28 70 45 6e 63 72 79 70 74 }...if (pEncrypt 17660 65 64 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 20 26 edPart == NULL & 17670 26 20 75 6c 45 6e 63 72 79 70 74 65 64 50 61 72 & ulEncryptedPar 17680 74 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 2f tLen == 0) {.../ 17690 2a 20 53 68 6f 72 74 20 63 69 72 63 75 69 74 20 * Short circuit 176a0 69 66 20 77 65 20 61 72 65 20 61 73 6b 65 64 20 if we are asked 176b0 74 6f 20 64 65 63 72 79 70 74 20 6e 6f 74 68 69 to decrypt nothi 176c0 6e 67 2e 2e 2e 20 2a 2f 0a 09 09 43 41 43 4b 45 ng... */...CACKE 176d0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 176e0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 176f0 20 28 25 69 29 20 28 73 68 6f 72 74 20 63 69 72 (%i) (short cir 17700 63 75 69 74 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b cuit)", CKR_OK); 17710 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ....return(CKR_O 17720 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 45 6e K);..}...if (pEn 17730 63 72 79 70 74 65 64 50 61 72 74 20 3d 3d 20 4e cryptedPart == N 17740 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ULL) {...CACKEY_ 17750 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 17760 72 6f 72 2e 20 70 45 6e 63 72 79 70 74 65 64 50 ror. pEncryptedP 17770 61 72 74 20 69 73 20 4e 55 4c 4c 2c 20 62 75 74 art is NULL, but 17780 20 75 6c 45 6e 63 72 79 70 74 65 64 50 61 72 74 ulEncryptedPart 17790 4c 65 6e 20 69 73 20 6e 6f 74 20 30 2e 22 29 3b Len is not 0."); 177a0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 ....return(CKR_A 177b0 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 RGUMENTS_BAD);.. 177c0 7d 0a 0a 09 69 66 20 28 75 6c 45 6e 63 72 79 70 }...if (ulEncryp 177d0 74 65 64 50 61 72 74 4c 65 6e 20 3d 3d 20 30 29 tedPartLen == 0) 177e0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 177f0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 17800 20 75 6c 45 6e 63 72 79 70 74 65 64 50 61 72 74 ulEncryptedPart 17810 4c 65 6e 20 69 73 20 30 2c 20 62 75 74 20 70 50 Len is 0, but pP 17820 61 72 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e art is not NULL. 17830 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 17840 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 R_ARGUMENTS_BAD) 17850 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 75 6c 50 61 ;..}...if (pulPa 17860 72 74 4c 65 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b rtLen == NULL) { 17870 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 17880 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 PRINTF("Error. p 17890 75 6c 50 61 72 74 4c 65 6e 20 69 73 20 4e 55 4c ulPartLen is NUL 178a0 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 L.");....return( 178b0 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA 178c0 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 D);..}...mutex_r 178d0 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 178e0 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 utex_lock(cackey 178f0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 17900 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 17910 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 17920 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 17930 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c r. Locking fail 17940 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 17950 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 17960 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 OR);..}...if (!c 17970 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 17980 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 Session].active) 17990 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 179a0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 179b0 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 179c0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 179d0 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 179e0 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b n not active."); 179f0 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 17a00 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 17a10 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 17a20 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 17a30 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 ons[hSession].de 17a40 63 72 79 70 74 5f 61 63 74 69 76 65 29 20 7b 0a crypt_active) {. 17a50 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 17a60 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 17a70 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 lock);....CACKEY 17a80 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 17a90 72 72 6f 72 2e 20 20 44 65 63 72 79 70 74 20 6e rror. Decrypt n 17aa0 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 ot active.");... 17ab0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 ...return(CKR_OP 17ac0 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 ERATION_NOT_INIT 17ad0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 73 IALIZED);..}...s 17ae0 77 69 74 63 68 20 28 63 61 63 6b 65 79 5f 73 65 witch (cackey_se 17af0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 17b00 2e 64 65 63 72 79 70 74 5f 6d 65 63 68 61 6e 69 .decrypt_mechani 17b10 73 6d 29 20 7b 0a 09 09 63 61 73 65 20 43 4b 4d sm) {...case CKM 17b20 5f 52 53 41 5f 50 4b 43 53 3a 0a 09 09 09 62 75 _RSA_PKCS:....bu 17b30 66 6c 65 6e 20 3d 20 2d 31 3b 0a 0a 09 09 09 2f flen = -1;...../ 17b40 2a 20 58 58 58 3a 20 41 73 6b 20 63 61 72 64 20 * XXX: Ask card 17b50 74 6f 20 64 65 63 72 79 70 74 20 2a 2f 0a 0a 09 to decrypt */... 17b60 09 09 69 66 20 28 62 75 66 6c 65 6e 20 3c 20 30 ..if (buflen < 0 17b70 29 20 7b 0a 09 09 09 09 2f 2a 20 44 65 63 72 79 ) {...../* Decry 17b80 70 74 69 6f 6e 20 66 61 69 6c 65 64 2e 20 2a 2f ption failed. */ 17b90 0a 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b .....retval = CK 17ba0 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 3b R_GENERAL_ERROR; 17bb0 0a 09 09 09 7d 20 65 6c 73 65 20 69 66 20 28 28 ....} else if (( 17bc0 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 17bd0 62 75 66 6c 65 6e 29 20 3e 20 2a 70 75 6c 50 61 buflen) > *pulPa 17be0 72 74 4c 65 6e 20 26 26 20 70 50 61 72 74 29 20 rtLen && pPart) 17bf0 7b 0a 09 09 09 09 2f 2a 20 44 65 63 72 79 70 74 {...../* Decrypt 17c00 65 64 20 64 61 74 61 20 74 6f 6f 20 6c 61 72 67 ed data too larg 17c10 65 20 2a 2f 0a 09 09 09 09 72 65 74 76 61 6c 20 e */.....retval 17c20 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f = CKR_BUFFER_TOO 17c30 5f 53 4d 41 4c 4c 3b 0a 09 09 09 7d 20 65 6c 73 _SMALL;....} els 17c40 65 20 7b 0a 09 09 09 09 69 66 20 28 70 50 61 72 e {.....if (pPar 17c50 74 29 20 7b 0a 09 09 09 09 09 6d 65 6d 63 70 79 t) {......memcpy 17c60 28 70 50 61 72 74 2c 20 62 75 66 2c 20 62 75 66 (pPart, buf, buf 17c70 6c 65 6e 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 len);.....}..... 17c80 09 2a 70 75 6c 50 61 72 74 4c 65 6e 20 3d 20 62 .*pulPartLen = b 17c90 75 66 6c 65 6e 3b 0a 0a 09 09 09 09 72 65 74 76 uflen;......retv 17ca0 61 6c 20 3d 20 43 4b 52 5f 4f 4b 3b 0a 09 09 09 al = CKR_OK;.... 17cb0 7d 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a }.....break;..}. 17cc0 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 17cd0 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e cackey_mutex_un 17ce0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 17cf0 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 17d00 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 17d10 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 17d20 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 RINTF("Error. U 17d30 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e nlocking failed. 17d40 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 17d50 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 17d60 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 17d70 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 17d80 72 6e 69 6e 67 20 25 69 22 2c 20 28 69 6e 74 29 rning %i", (int) 17d90 20 72 65 74 76 61 6c 29 3b 0a 0a 09 72 65 74 75 retval);...retu 17da0 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 43 rn(retval);.}..C 17db0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 17dc0 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 N(CK_RV, C_Decry 17dd0 70 74 46 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 ptFinal)(CK_SESS 17de0 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 17df0 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 17e00 20 70 4c 61 73 74 50 61 72 74 2c 20 43 4b 5f 55 pLastPart, CK_U 17e10 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 4c 61 73 74 LONG_PTR pulLast 17e20 50 61 72 74 4c 65 6e 29 20 7b 0a 09 69 6e 74 20 PartLen) {..int 17e30 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 09 69 mutex_retval;..i 17e40 6e 74 20 74 65 72 6d 69 6e 61 74 65 5f 64 65 63 nt terminate_dec 17e50 72 79 70 74 20 3d 20 31 3b 0a 0a 09 43 41 43 4b rypt = 1;...CACK 17e60 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 17e70 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 17e80 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 17e90 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 17ea0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 17eb0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 17ec0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 17ed0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 17ee0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 17ef0 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 ED);..}...if (hS 17f00 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 ession == 0 || h 17f10 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 Session >= (size 17f20 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 17f30 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ns) / sizeof(cac 17f40 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 key_sessions[0]) 17f50 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE 17f60 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 17f70 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 r. Session out 17f80 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a of range.");.... 17f90 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES 17fa0 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 SION_HANDLE_INVA 17fb0 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 LID);..}...if (p 17fc0 75 6c 4c 61 73 74 50 61 72 74 4c 65 6e 20 3d 3d ulLastPartLen == 17fd0 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 NULL) {...CACKE 17fe0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 17ff0 45 72 72 6f 72 2e 20 70 75 6c 4c 61 73 74 50 61 Error. pulLastPa 18000 72 74 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 rtLen is NULL.") 18010 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 18020 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 18030 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 .}...mutex_retva 18040 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 18050 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 _lock(cackey_big 18060 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 18070 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 18080 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 18090 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 180a0 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 Locking failed." 180b0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 180c0 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 180d0 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ..}...if (!cacke 180e0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 180f0 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 ion].active) {.. 18100 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e .cackey_mutex_un 18110 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 18120 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f ock);....CACKEY_ 18130 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 18140 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f ror. Session no 18150 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a t active.");.... 18160 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES 18170 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 SION_HANDLE_INVA 18180 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 LID);..}...if (! 18190 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 181a0 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 hSession].decryp 181b0 74 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 t_active) {...ca 181c0 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 181d0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 181e0 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 181f0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 18200 2e 20 20 44 65 63 72 79 70 74 20 6e 6f 74 20 61 . Decrypt not a 18210 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 ctive.");......r 18220 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 eturn(CKR_OPERAT 18230 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 ION_NOT_INITIALI 18240 5a 45 44 29 3b 0a 09 7d 0a 0a 09 2a 70 75 6c 4c ZED);..}...*pulL 18250 61 73 74 50 61 72 74 4c 65 6e 20 3d 20 30 3b 0a astPartLen = 0;. 18260 0a 09 69 66 20 28 70 4c 61 73 74 50 61 72 74 20 ..if (pLastPart 18270 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 74 65 72 == NULL) {...ter 18280 6d 69 6e 61 74 65 5f 64 65 63 72 79 70 74 20 3d minate_decrypt = 18290 20 30 3b 0a 09 7d 0a 0a 09 69 66 20 28 74 65 72 0;..}...if (ter 182a0 6d 69 6e 61 74 65 5f 64 65 63 72 79 70 74 29 20 minate_decrypt) 182b0 7b 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 {...cackey_sessi 182c0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 ons[hSession].de 182d0 63 72 79 70 74 5f 61 63 74 69 76 65 20 3d 20 30 crypt_active = 0 182e0 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 182f0 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 18300 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 18310 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 18320 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 18330 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 18340 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 18350 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 18360 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 18370 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 18380 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b RROR);..}...CACK 18390 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 183a0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 183b0 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) 183c0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O 183d0 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 K);.}..CK_DEFINE 183e0 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 183f0 20 43 5f 44 69 67 65 73 74 49 6e 69 74 29 28 43 C_DigestInit)(C 18400 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 18410 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 hSession, CK_ME 18420 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 CHANISM_PTR pMec 18430 68 61 6e 69 73 6d 29 20 7b 0a 09 43 41 43 4b 45 hanism) {..CACKE 18440 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 18450 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 18460 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 18470 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 18480 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 18490 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 184a0 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 184b0 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 184c0 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 184d0 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ 184e0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 184f0 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 turning CKR_FUNC 18500 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 18510 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 ED (%i)", CKR_FU 18520 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 18530 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 RTED);...return( 18540 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 18550 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a _SUPPORTED);.}.. 18560 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 18570 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 ON(CK_RV, C_Dige 18580 73 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 st)(CK_SESSION_H 18590 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 185a0 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 61 74 CK_BYTE_PTR pDat 185b0 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 a, CK_ULONG ulDa 185c0 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 taLen, CK_BYTE_P 185d0 54 52 20 70 44 69 67 65 73 74 2c 20 43 4b 5f 55 TR pDigest, CK_U 185e0 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 44 69 67 65 LONG_PTR pulDige 185f0 73 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 stLen) {..CACKEY 18600 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 18610 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 18620 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 18630 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 18640 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 18650 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 18660 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 18670 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 18680 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 18690 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 186a0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 186b0 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 186c0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 186d0 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 186e0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 186f0 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 18700 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 18710 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 18720 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 18730 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 N(CK_RV, C_Diges 18740 74 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 tUpdate)(CK_SESS 18750 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 18760 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 18770 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 pPart, CK_ULONG 18780 20 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 ulPartLen) {..C 18790 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 187a0 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 187b0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 187c0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 187d0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 187e0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 187f0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 18800 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 18810 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 18820 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 18830 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 18840 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 18850 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 18860 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 18870 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 18880 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 18890 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 188a0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 188b0 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 188c0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 188d0 44 69 67 65 73 74 4b 65 79 29 28 43 4b 5f 53 45 DigestKey)(CK_SE 188e0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 188f0 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 ssion, CK_OBJECT 18900 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a _HANDLE hKey) {. 18910 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 18920 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 18930 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 18940 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 18950 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 18960 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 18970 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 18980 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 18990 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 189a0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 189b0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 189c0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 189d0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 189e0 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 189f0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 18a00 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 18a10 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 18a20 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 18a30 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 18a40 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 18a50 43 5f 44 69 67 65 73 74 46 69 6e 61 6c 29 28 43 C_DigestFinal)(C 18a60 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 18a70 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 18a80 54 45 5f 50 54 52 20 70 44 69 67 65 73 74 2c 20 TE_PTR pDigest, 18a90 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 18aa0 44 69 67 65 73 74 4c 65 6e 29 20 7b 0a 09 43 41 DigestLen) {..CA 18ab0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 18ac0 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 18ad0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 18ae0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 18af0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 18b00 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 18b10 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 18b20 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 18b30 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 18b40 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 18b50 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 18b60 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 18b70 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 18b80 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 18b90 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 18ba0 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 18bb0 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 18bc0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 18bd0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 18be0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 CTION(CK_RV, C_S 18bf0 69 67 6e 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 ignInit)(CK_SESS 18c00 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 18c10 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 ion, CK_MECHANIS 18c20 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d M_PTR pMechanism 18c30 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 18c40 4c 45 20 68 4b 65 79 29 20 7b 0a 09 69 6e 74 20 LE hKey) {..int 18c50 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 mutex_retval;... 18c60 68 4b 65 79 2d 2d 3b 0a 0a 09 43 41 43 4b 45 59 hKey--;...CACKEY 18c70 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 18c80 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 18c90 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 18ca0 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 18cb0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 18cc0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 18cd0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 18ce0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 18cf0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 18d00 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63 );..}...if (pMec 18d10 68 61 6e 69 73 6d 20 3d 3d 20 4e 55 4c 4c 29 20 hanism == NULL) 18d20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 18d30 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 18d40 70 4d 65 63 68 61 6e 69 73 6d 20 69 73 20 4e 55 pMechanism is NU 18d50 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 18d60 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 18d70 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 4d AD);..}...if (pM 18d80 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e echanism->mechan 18d90 69 73 6d 20 21 3d 20 43 4b 4d 5f 52 53 41 5f 50 ism != CKM_RSA_P 18da0 4b 43 53 20 26 26 20 70 4d 65 63 68 61 6e 69 73 KCS && pMechanis 18db0 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 20 21 3d 20 m->mechanism != 18dc0 43 4b 4d 5f 53 48 41 31 5f 52 53 41 5f 50 4b 43 CKM_SHA1_RSA_PKC 18dd0 53 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 S) {...CACKEY_DE 18de0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 18df0 72 2e 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d r. pMechanism->m 18e00 65 63 68 61 6e 69 73 6d 20 6e 6f 74 20 73 70 65 echanism not spe 18e10 63 69 66 69 65 64 20 61 73 20 43 4b 4d 5f 52 53 cified as CKM_RS 18e20 41 5f 50 4b 43 53 20 6f 72 20 43 4b 4d 5f 53 48 A_PKCS or CKM_SH 18e30 41 31 5f 52 53 41 5f 50 4b 43 53 22 29 3b 0a 0a A1_RSA_PKCS");.. 18e40 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4d 45 43 ..return(CKR_MEC 18e50 48 41 4e 49 53 4d 5f 50 41 52 41 4d 5f 49 4e 56 HANISM_PARAM_INV 18e60 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 ALID);..}...if ( 18e70 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c hSession == 0 || 18e80 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 hSession >= (si 18e90 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 18ea0 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 ions) / sizeof(c 18eb0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 ackey_sessions[0 18ec0 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ]))) {...CACKEY_ 18ed0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 18ee0 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 ror. Session ou 18ef0 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 t of range.");.. 18f00 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 18f10 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 18f20 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 VALID);..}...mut 18f30 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 18f40 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 ey_mutex_lock(ca 18f50 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 18f60 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 18f70 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 18f80 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 18f90 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 Error. Locking 18fa0 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 18fb0 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 18fc0 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 _ERROR);..}...if 18fd0 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f (!cackey_sessio 18fe0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 ns[hSession].act 18ff0 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ive) {...cackey_ 19000 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 19010 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 19020 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 19030 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 19040 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 ssion not active 19050 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 19060 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 19070 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 19080 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 ...if (cackey_se 19090 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 190a0 2e 73 69 67 6e 5f 61 63 74 69 76 65 29 20 7b 0a .sign_active) {. 190b0 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 190c0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 190d0 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 lock);....CACKEY 190e0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 190f0 72 72 6f 72 2e 20 20 53 69 67 6e 20 61 6c 72 65 rror. Sign alre 19100 61 64 79 20 69 6e 20 70 72 6f 67 72 65 73 73 2e ady in progress. 19110 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 19120 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 41 43 CKR_OPERATION_AC 19130 54 49 56 45 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 TIVE);..}...if ( 19140 68 4b 65 79 20 3e 3d 20 63 61 63 6b 65 79 5f 73 hKey >= cackey_s 19150 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 19160 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 ].identities_cou 19170 6e 74 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d nt) {...cackey_m 19180 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 19190 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 191a0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 191b0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4b 65 79 NTF("Error. Key 191c0 20 68 61 6e 64 6c 65 20 6f 75 74 20 6f 66 20 72 handle out of r 191d0 61 6e 67 65 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ange.");....retu 191e0 72 6e 28 43 4b 52 5f 4b 45 59 5f 48 41 4e 44 4c rn(CKR_KEY_HANDL 191f0 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 19200 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 19210 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 19220 61 63 74 69 76 65 20 3d 20 31 3b 0a 0a 09 63 61 active = 1;...ca 19230 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 19240 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 6d 65 63 ession].sign_mec 19250 68 61 6e 69 73 6d 20 3d 20 70 4d 65 63 68 61 6e hanism = pMechan 19260 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 3b 0a ism->mechanism;. 19270 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 19280 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 19290 5f 62 75 66 6c 65 6e 20 3d 20 31 32 38 3b 0a 09 _buflen = 128;.. 192a0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 192b0 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 hSession].sign_b 192c0 75 66 75 73 65 64 20 3d 20 30 3b 0a 09 63 61 63 ufused = 0;..cac 192d0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 192e0 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 20 ssion].sign_buf 192f0 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 = malloc(sizeof( 19300 2a 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 *cackey_sessions 19310 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 19320 62 75 66 29 20 2a 20 63 61 63 6b 65 79 5f 73 65 buf) * cackey_se 19330 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 19340 2e 73 69 67 6e 5f 62 75 66 6c 65 6e 29 3b 0a 0a .sign_buflen);.. 19350 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 19360 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 19370 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 19380 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 19390 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 193a0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 193b0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e INTF("Error. Un 193c0 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 locking failed." 193d0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 193e0 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 193f0 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 19400 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 19410 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 19420 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 19430 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 19440 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 19450 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 ION(CK_RV, C_Sig 19460 6e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 n)(CK_SESSION_HA 19470 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 19480 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 61 74 61 K_BYTE_PTR pData 19490 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 , CK_ULONG ulDat 194a0 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 aLen, CK_BYTE_PT 194b0 52 20 70 53 69 67 6e 61 74 75 72 65 2c 20 43 4b R pSignature, CK 194c0 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 _ULONG_PTR pulSi 194d0 67 6e 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09 43 gnatureLen) {..C 194e0 4b 5f 52 56 20 73 69 67 6e 5f 72 65 74 3b 0a 0a K_RV sign_ret;.. 194f0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 19500 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 19510 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 19520 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 19530 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 19540 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 19550 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 19560 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 19570 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 19580 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 73 IALIZED);..}...s 19590 69 67 6e 5f 72 65 74 20 3d 20 43 5f 53 69 67 6e ign_ret = C_Sign 195a0 55 70 64 61 74 65 28 68 53 65 73 73 69 6f 6e 2c Update(hSession, 195b0 20 70 44 61 74 61 2c 20 75 6c 44 61 74 61 4c 65 pData, ulDataLe 195c0 6e 29 3b 0a 09 69 66 20 28 73 69 67 6e 5f 72 65 n);..if (sign_re 195d0 74 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 t != CKR_OK) {.. 195e0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 195f0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 69 INTF("Error. Si 19600 67 6e 55 70 64 61 74 65 28 29 20 72 65 74 75 72 gnUpdate() retur 19610 6e 65 64 20 66 61 69 6c 75 72 65 20 28 72 76 20 ned failure (rv 19620 3d 20 25 6c 75 29 2e 22 2c 20 28 75 6e 73 69 67 = %lu).", (unsig 19630 6e 65 64 20 6c 6f 6e 67 29 20 73 69 67 6e 5f 72 ned long) sign_r 19640 65 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 73 et);....return(s 19650 69 67 6e 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 73 ign_ret);..}...s 19660 69 67 6e 5f 72 65 74 20 3d 20 43 5f 53 69 67 6e ign_ret = C_Sign 19670 46 69 6e 61 6c 28 68 53 65 73 73 69 6f 6e 2c 20 Final(hSession, 19680 70 53 69 67 6e 61 74 75 72 65 2c 20 70 75 6c 53 pSignature, pulS 19690 69 67 6e 61 74 75 72 65 4c 65 6e 29 3b 0a 09 69 ignatureLen);..i 196a0 66 20 28 73 69 67 6e 5f 72 65 74 20 21 3d 20 43 f (sign_ret != C 196b0 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 KR_OK) {...CACKE 196c0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 196d0 45 72 72 6f 72 2e 20 20 53 69 67 6e 46 69 6e 61 Error. SignFina 196e0 6c 28 29 20 72 65 74 75 72 6e 65 64 20 66 61 69 l() returned fai 196f0 6c 75 72 65 20 28 72 76 20 3d 20 25 6c 75 29 2e lure (rv = %lu). 19700 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 19710 67 29 20 73 69 67 6e 5f 72 65 74 29 3b 0a 0a 09 g) sign_ret);... 19720 09 72 65 74 75 72 6e 28 73 69 67 6e 5f 72 65 74 .return(sign_ret 19730 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 19740 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 19750 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 urning CKR_OK (% 19760 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 i)", CKR_OK);... 19770 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a return(CKR_OK);. 19780 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 19790 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 CTION(CK_RV, C_S 197a0 69 67 6e 55 70 64 61 74 65 29 28 43 4b 5f 53 45 ignUpdate)(CK_SE 197b0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 197c0 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 ssion, CK_BYTE_P 197d0 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f TR pPart, CK_ULO 197e0 4e 47 20 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a NG ulPartLen) {. 197f0 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 .int mutex_retva 19800 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 l;...CACKEY_DEBU 19810 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 19820 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 19830 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 19840 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 19850 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 19860 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 19870 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 19880 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 19890 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 198a0 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 ...if (hSession 198b0 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e == 0 || hSession 198c0 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b >= (sizeof(cack 198d0 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 198e0 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 198f0 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 sions[0]))) {... 19900 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 19910 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 NTF("Error. Ses 19920 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 sion out of rang 19930 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 19940 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 19950 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 19960 7d 0a 0a 09 69 66 20 28 70 50 61 72 74 20 3d 3d }...if (pPart == 19970 20 4e 55 4c 4c 20 26 26 20 75 6c 50 61 72 74 4c NULL && ulPartL 19980 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 en == 0) {.../* 19990 53 68 6f 72 74 20 63 69 72 63 75 69 74 20 69 66 Short circuit if 199a0 20 77 65 20 61 72 65 20 61 73 6b 65 64 20 74 6f we are asked to 199b0 20 73 69 67 6e 20 6e 6f 74 68 69 6e 67 2e 2e 2e sign nothing... 199c0 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 */...CACKEY_DEB 199d0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 199e0 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 199f0 20 28 73 68 6f 72 74 20 63 69 72 63 75 69 74 29 (short circuit) 19a00 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 ", CKR_OK);....r 19a10 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 eturn(CKR_OK);.. 19a20 7d 0a 0a 09 69 66 20 28 70 50 61 72 74 20 3d 3d }...if (pPart == 19a30 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 NULL) {...CACKE 19a40 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 19a50 45 72 72 6f 72 2e 20 70 50 61 72 74 20 69 73 20 Error. pPart is 19a60 4e 55 4c 4c 2c 20 62 75 74 20 75 6c 50 61 72 74 NULL, but ulPart 19a70 4c 65 6e 20 69 73 20 6e 6f 74 20 30 2e 22 29 3b Len is not 0."); 19a80 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 ....return(CKR_A 19a90 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 RGUMENTS_BAD);.. 19aa0 7d 0a 0a 09 69 66 20 28 75 6c 50 61 72 74 4c 65 }...if (ulPartLe 19ab0 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b n == 0) {...CACK 19ac0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 19ad0 22 45 72 72 6f 72 2e 20 75 6c 50 61 72 74 4c 65 "Error. ulPartLe 19ae0 6e 20 69 73 20 30 2c 20 62 75 74 20 70 50 61 72 n is 0, but pPar 19af0 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 t is not NULL.") 19b00 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 19b10 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 19b20 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 .}...mutex_retva 19b30 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 19b40 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 _lock(cackey_big 19b50 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 19b60 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 19b70 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 19b80 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 19b90 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 Locking failed." 19ba0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 19bb0 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 19bc0 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ..}...if (!cacke 19bd0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 19be0 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 ion].active) {.. 19bf0 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e .cackey_mutex_un 19c00 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 19c10 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f ock);....CACKEY_ 19c20 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 19c30 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f ror. Session no 19c40 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a t active.");.... 19c50 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES 19c60 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 SION_HANDLE_INVA 19c70 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 LID);..}...if (! 19c80 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 19c90 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 hSession].sign_a 19ca0 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 ctive) {...cacke 19cb0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 19cc0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 19cd0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 19ce0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 19cf0 53 69 67 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e Sign not active. 19d00 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 19d10 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f CKR_OPERATION_NO 19d20 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 19d30 09 7d 0a 0a 09 73 77 69 74 63 68 20 28 63 61 63 .}...switch (cac 19d40 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 19d50 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 6d 65 63 68 ssion].sign_mech 19d60 61 6e 69 73 6d 29 20 7b 0a 09 09 63 61 73 65 20 anism) {...case 19d70 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 3a 0a 09 09 CKM_RSA_PKCS:... 19d80 09 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65 20 64 ./* Accumulate d 19d90 69 72 65 63 74 6c 79 20 2a 2f 0a 09 09 09 69 66 irectly */....if 19da0 20 28 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ((cackey_sessio 19db0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 19dc0 6e 5f 62 75 66 75 73 65 64 20 2b 20 75 6c 50 61 n_bufused + ulPa 19dd0 72 74 4c 65 6e 29 20 3e 20 63 61 63 6b 65 79 5f rtLen) > cackey_ 19de0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 19df0 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c 65 6e 29 20 n].sign_buflen) 19e00 7b 0a 09 09 09 09 63 61 63 6b 65 79 5f 73 65 73 {.....cackey_ses 19e10 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 19e20 73 69 67 6e 5f 62 75 66 6c 65 6e 20 2a 3d 20 32 sign_buflen *= 2 19e30 3b 0a 0a 09 09 09 09 63 61 63 6b 65 79 5f 73 65 ;......cackey_se 19e40 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 19e50 2e 73 69 67 6e 5f 62 75 66 20 3d 20 72 65 61 6c .sign_buf = real 19e60 6c 6f 63 28 63 61 63 6b 65 79 5f 73 65 73 73 69 loc(cackey_sessi 19e70 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 19e80 67 6e 5f 62 75 66 2c 20 73 69 7a 65 6f 66 28 2a gn_buf, sizeof(* 19e90 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 19ea0 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 hSession].sign_b 19eb0 75 66 29 20 2a 20 63 61 63 6b 65 79 5f 73 65 73 uf) * cackey_ses 19ec0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 19ed0 73 69 67 6e 5f 62 75 66 6c 65 6e 29 3b 0a 09 09 sign_buflen);... 19ee0 09 7d 0a 0a 09 09 09 6d 65 6d 63 70 79 28 63 61 .}.....memcpy(ca 19ef0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 19f00 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 ession].sign_buf 19f10 20 2b 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f + cackey_sessio 19f20 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 19f30 6e 5f 62 75 66 75 73 65 64 2c 20 70 50 61 72 74 n_bufused, pPart 19f40 2c 20 75 6c 50 61 72 74 4c 65 6e 29 3b 0a 0a 09 , ulPartLen);... 19f50 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 19f60 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 19f70 5f 62 75 66 75 73 65 64 20 2b 3d 20 75 6c 50 61 _bufused += ulPa 19f80 72 74 4c 65 6e 3b 0a 0a 09 09 09 62 72 65 61 6b rtLen;.....break 19f90 3b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 53 48 41 ;...case CKM_SHA 19fa0 31 5f 52 53 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 1_RSA_PKCS:..../ 19fb0 2a 20 41 63 63 75 6d 75 6c 61 74 65 20 69 6e 74 * Accumulate int 19fc0 6f 20 61 20 53 48 41 31 20 68 61 73 68 20 2a 2f o a SHA1 hash */ 19fd0 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 ....cackey_mutex 19fe0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 19ff0 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 09 43 41 43 iglock);.....CAC 1a000 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1a010 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1a020 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1a030 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 1a040 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1a050 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 09 09 72 UPPORTED);.....r 1a060 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 1a070 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1a080 29 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a );....break;..}. 1a090 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 1a0a0 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e cackey_mutex_un 1a0b0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 1a0c0 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 1a0d0 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 1a0e0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1a0f0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 RINTF("Error. U 1a100 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e nlocking failed. 1a110 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1a120 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 1a130 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 1a140 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 1a150 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 1a160 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 )", CKR_OK);...r 1a170 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 1a180 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 1a190 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 TION(CK_RV, C_Si 1a1a0 67 6e 46 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 gnFinal)(CK_SESS 1a1b0 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 1a1c0 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 1a1d0 20 70 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f pSignature, CK_ 1a1e0 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 67 ULONG_PTR pulSig 1a1f0 6e 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09 73 74 natureLen) {..st 1a200 61 74 69 63 20 43 4b 5f 42 59 54 45 20 73 69 67 atic CK_BYTE sig 1a210 62 75 66 5b 31 30 32 34 5d 3b 0a 09 73 73 69 7a buf[1024];..ssiz 1a220 65 5f 74 20 73 69 67 62 75 66 6c 65 6e 3b 0a 09 e_t sigbuflen;.. 1a230 43 4b 5f 52 56 20 72 65 74 76 61 6c 20 3d 20 43 CK_RV retval = C 1a240 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 1a250 3b 0a 09 69 6e 74 20 74 65 72 6d 69 6e 61 74 65 ;..int terminate 1a260 5f 73 69 67 6e 20 3d 20 31 3b 0a 09 69 6e 74 20 _sign = 1;..int 1a270 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 mutex_retval;... 1a280 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1a290 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 1a2a0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 1a2b0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 1a2c0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1a2d0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 1a2e0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 1a2f0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 1a300 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 1a310 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 1a320 20 28 70 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 (pulSignatureLe 1a330 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 n == NULL) {...C 1a340 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1a350 54 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 53 69 TF("Error. pulSi 1a360 67 6e 61 74 75 72 65 4c 65 6e 20 69 73 20 4e 55 gnatureLen is NU 1a370 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 1a380 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 1a390 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 AD);..}...if (hS 1a3a0 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 ession == 0 || h 1a3b0 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 Session >= (size 1a3c0 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 1a3d0 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ns) / sizeof(cac 1a3e0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 key_sessions[0]) 1a3f0 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE 1a400 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1a410 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 r. Session out 1a420 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a of range.");.... 1a430 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES 1a440 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 SION_HANDLE_INVA 1a450 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 LID);..}...mutex 1a460 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 1a470 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b _mutex_lock(cack 1a480 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 1a490 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 1a4a0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 1a4b0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1a4c0 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 ror. Locking fa 1a4d0 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 1a4e0 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 1a4f0 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 RROR);..}...if ( 1a500 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 !cackey_sessions 1a510 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 [hSession].activ 1a520 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 e) {...cackey_mu 1a530 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 1a540 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....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 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 1a570 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 ion not active." 1a580 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 1a590 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 1a5a0 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 1a5b0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 .if (!cackey_ses 1a5c0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1a5d0 73 69 67 6e 5f 61 63 74 69 76 65 29 20 7b 0a 09 sign_active) {.. 1a5e0 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e .cackey_mutex_un 1a5f0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 1a600 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f ock);....CACKEY_ 1a610 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1a620 72 6f 72 2e 20 20 53 69 67 6e 20 6e 6f 74 20 61 ror. Sign not a 1a630 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 ctive.");......r 1a640 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 eturn(CKR_OPERAT 1a650 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 ION_NOT_INITIALI 1a660 5a 45 44 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 ZED);..}...switc 1a670 68 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f h (cackey_sessio 1a680 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 1a690 6e 5f 6d 65 63 68 61 6e 69 73 6d 29 20 7b 0a 09 n_mechanism) {.. 1a6a0 09 63 61 73 65 20 43 4b 4d 5f 52 53 41 5f 50 4b .case CKM_RSA_PK 1a6b0 43 53 3a 0a 09 09 09 73 69 67 62 75 66 6c 65 6e CS:....sigbuflen 1a6c0 20 3d 20 2d 31 3b 0a 0a 09 09 09 2f 2a 20 58 58 = -1;...../* XX 1a6d0 58 3a 20 41 73 6b 20 63 61 72 64 20 74 6f 20 73 X: Ask card to s 1a6e0 69 67 6e 20 2a 2f 0a 0a 09 09 09 69 66 20 28 73 ign */.....if (s 1a6f0 69 67 62 75 66 6c 65 6e 20 3c 20 30 29 20 7b 0a igbuflen < 0) {. 1a700 09 09 09 09 2f 2a 20 53 69 67 6e 69 6e 67 20 66 ..../* Signing f 1a710 61 69 6c 65 64 2e 20 2a 2f 0a 09 09 09 09 72 65 ailed. */.....re 1a720 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e 45 52 tval = CKR_GENER 1a730 41 4c 5f 45 52 52 4f 52 3b 0a 09 09 09 7d 20 65 AL_ERROR;....} e 1a740 6c 73 65 20 69 66 20 28 28 28 75 6e 73 69 67 6e lse if (((unsign 1a750 65 64 20 6c 6f 6e 67 29 20 73 69 67 62 75 66 6c ed long) sigbufl 1a760 65 6e 29 20 3e 20 2a 70 75 6c 53 69 67 6e 61 74 en) > *pulSignat 1a770 75 72 65 4c 65 6e 20 26 26 20 70 53 69 67 6e 61 ureLen && pSigna 1a780 74 75 72 65 29 20 7b 0a 09 09 09 09 2f 2a 20 53 ture) {...../* S 1a790 69 67 6e 65 64 20 64 61 74 61 20 74 6f 6f 20 6c igned data too l 1a7a0 61 72 67 65 20 2a 2f 0a 09 09 09 09 72 65 74 76 arge */.....retv 1a7b0 61 6c 20 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f al = CKR_BUFFER_ 1a7c0 54 4f 4f 5f 53 4d 41 4c 4c 3b 0a 0a 09 09 09 09 TOO_SMALL;...... 1a7d0 74 65 72 6d 69 6e 61 74 65 5f 73 69 67 6e 20 3d terminate_sign = 1a7e0 20 30 3b 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 0;....} else {. 1a7f0 09 09 09 09 74 65 72 6d 69 6e 61 74 65 5f 73 69 ....terminate_si 1a800 67 6e 20 3d 20 30 3b 0a 0a 09 09 09 09 69 66 20 gn = 0;......if 1a810 28 70 53 69 67 6e 61 74 75 72 65 29 20 7b 0a 09 (pSignature) {.. 1a820 09 09 09 09 6d 65 6d 63 70 79 28 70 53 69 67 6e ....memcpy(pSign 1a830 61 74 75 72 65 2c 20 73 69 67 62 75 66 2c 20 73 ature, sigbuf, s 1a840 69 67 62 75 66 6c 65 6e 29 3b 0a 0a 09 09 09 09 igbuflen);...... 1a850 09 74 65 72 6d 69 6e 61 74 65 5f 73 69 67 6e 20 .terminate_sign 1a860 3d 20 31 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 = 1;.....}...... 1a870 2a 70 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e *pulSignatureLen 1a880 20 3d 20 73 69 67 62 75 66 6c 65 6e 3b 0a 0a 09 = sigbuflen;... 1a890 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f ...retval = CKR_ 1a8a0 4f 4b 3b 0a 09 09 09 7d 0a 0a 09 09 09 62 72 65 OK;....}.....bre 1a8b0 61 6b 3b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 53 ak;...case CKM_S 1a8c0 48 41 31 5f 52 53 41 5f 50 4b 43 53 3a 0a 09 09 HA1_RSA_PKCS:... 1a8d0 09 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65 20 69 ./* Accumulate i 1a8e0 6e 74 6f 20 61 20 53 48 41 31 20 68 61 73 68 20 nto a SHA1 hash 1a8f0 2a 2f 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 */....cackey_mut 1a900 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 1a910 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 09 43 _biglock);.....C 1a920 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1a930 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1a940 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1a950 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 1a960 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1a970 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 09 _SUPPORTED);.... 1a980 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 1a990 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1a9a0 45 44 29 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 ED);....break;.. 1a9b0 7d 0a 0a 09 69 66 20 28 74 65 72 6d 69 6e 61 74 }...if (terminat 1a9c0 65 5f 73 69 67 6e 29 20 7b 0a 09 09 69 66 20 28 e_sign) {...if ( 1a9d0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1a9e0 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 hSession].sign_b 1a9f0 75 66 29 20 7b 0a 09 09 09 66 72 65 65 28 63 61 uf) {....free(ca 1aa00 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1aa10 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 ession].sign_buf 1aa20 29 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 );...}....cackey 1aa30 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1aa40 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 20 on].sign_active 1aa50 3d 20 30 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f = 0;..}...mutex_ 1aa60 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 1aa70 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 1aa80 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 1aa90 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 1aaa0 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 1aab0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1aac0 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 1aad0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 1aae0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 1aaf0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 L_ERROR);..}...C 1ab00 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1ab10 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 25 69 TF("Returning %i 1ab20 22 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c 29 ", (int) retval) 1ab30 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 ;...return(retva 1ab40 6c 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 l);.}..CK_DEFINE 1ab50 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 1ab60 20 43 5f 53 69 67 6e 52 65 63 6f 76 65 72 49 6e C_SignRecoverIn 1ab70 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 it)(CK_SESSION_H 1ab80 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 1ab90 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 CK_MECHANISM_PTR 1aba0 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f pMechanism, CK_ 1abb0 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b OBJECT_HANDLE hK 1abc0 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 ey) {..CACKEY_DE 1abd0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 1abe0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 1abf0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 1ac00 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1ac10 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1ac20 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 1ac30 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1ac40 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 1ac50 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 1ac60 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 1ac70 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 1ac80 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 1ac90 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 1aca0 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 1acb0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1acc0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 1acd0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1ace0 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 1acf0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 1ad00 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 52 65 63 6f K_RV, C_SignReco 1ad10 76 65 72 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f ver)(CK_SESSION_ 1ad20 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 1ad30 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 61 CK_BYTE_PTR pDa 1ad40 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 ta, CK_ULONG ulD 1ad50 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f ataLen, CK_BYTE_ 1ad60 50 54 52 20 70 53 69 67 6e 61 74 75 72 65 2c 20 PTR pSignature, 1ad70 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 1ad80 53 69 67 6e 61 74 75 72 65 4c 65 6e 29 20 7b 0a SignatureLen) {. 1ad90 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1ada0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1adb0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1adc0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1add0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1ade0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1adf0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1ae00 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1ae10 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1ae20 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 1ae30 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1ae40 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1ae50 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1ae60 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 1ae70 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1ae80 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 1ae90 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 1aea0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1aeb0 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1aec0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1aed0 43 5f 56 65 72 69 66 79 49 6e 69 74 29 28 43 4b C_VerifyInit)(CK 1aee0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 1aef0 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 hSession, CK_MEC 1af00 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 HANISM_PTR pMech 1af10 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 anism, CK_OBJECT 1af20 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a _HANDLE hKey) {. 1af30 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1af40 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1af50 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1af60 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1af70 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1af80 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1af90 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1afa0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1afb0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1afc0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 1afd0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1afe0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1aff0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1b000 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 1b010 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1b020 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 1b030 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 1b040 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1b050 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1b060 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1b070 43 5f 56 65 72 69 66 79 29 28 43 4b 5f 53 45 53 C_Verify)(CK_SES 1b080 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 1b090 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 sion, CK_BYTE_PT 1b0a0 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e R pData, CK_ULON 1b0b0 47 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b 5f G ulDataLen, CK_ 1b0c0 42 59 54 45 5f 50 54 52 20 70 53 69 67 6e 61 74 BYTE_PTR pSignat 1b0d0 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c ure, CK_ULONG ul 1b0e0 53 69 67 6e 61 74 75 72 65 4c 65 6e 29 20 7b 0a SignatureLen) {. 1b0f0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1b100 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1b110 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1b120 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1b130 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1b140 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1b150 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1b160 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1b170 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1b180 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 1b190 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1b1a0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1b1b0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1b1c0 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 1b1d0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1b1e0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 1b1f0 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 1b200 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1b210 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1b220 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1b230 43 5f 56 65 72 69 66 79 55 70 64 61 74 65 29 28 C_VerifyUpdate)( 1b240 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 1b250 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 1b260 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 YTE_PTR pPart, C 1b270 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 K_ULONG ulPartLe 1b280 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 n) {..CACKEY_DEB 1b290 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 1b2a0 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 1b2b0 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 1b2c0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1b2d0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1b2e0 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 1b2f0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1b300 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 1b310 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 1b320 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 1b330 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1b340 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 1b350 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 1b360 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 1b370 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 1b380 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 1b390 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1b3a0 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 1b3b0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 1b3c0 5f 52 56 2c 20 43 5f 56 65 72 69 66 79 46 69 6e _RV, C_VerifyFin 1b3d0 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 al)(CK_SESSION_H 1b3e0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 1b3f0 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 67 CK_BYTE_PTR pSig 1b400 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 nature, CK_ULONG 1b410 20 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 29 ulSignatureLen) 1b420 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 1b430 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 1b440 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 1b450 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 1b460 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1b470 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1b480 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 1b490 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1b4a0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 1b4b0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 1b4c0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1b4d0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 1b4e0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 1b4f0 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 1b500 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 1b510 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 1b520 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 1b530 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 1b540 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 1b550 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 1b560 56 2c 20 43 5f 56 65 72 69 66 79 52 65 63 6f 76 V, C_VerifyRecov 1b570 65 72 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 erInit)(CK_SESSI 1b580 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 1b590 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d on, CK_MECHANISM 1b5a0 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c _PTR pMechanism, 1b5b0 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL 1b5c0 45 20 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 E hKey) {..CACKE 1b5d0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1b5e0 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 1b5f0 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 1b600 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 1b610 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1b620 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 1b630 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 1b640 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 1b650 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 1b660 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ 1b670 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 1b680 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 turning CKR_FUNC 1b690 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1b6a0 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 ED (%i)", CKR_FU 1b6b0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1b6c0 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 RTED);...return( 1b6d0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1b6e0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a _SUPPORTED);.}.. 1b6f0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 1b700 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 69 ON(CK_RV, C_Veri 1b710 66 79 52 65 63 6f 76 65 72 29 28 43 4b 5f 53 45 fyRecover)(CK_SE 1b720 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 1b730 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 ssion, CK_BYTE_P 1b740 54 52 20 70 53 69 67 6e 61 74 75 72 65 2c 20 43 TR pSignature, C 1b750 4b 5f 55 4c 4f 4e 47 20 75 6c 53 69 67 6e 61 74 K_ULONG ulSignat 1b760 75 72 65 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f ureLen, CK_BYTE_ 1b770 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c PTR pData, CK_UL 1b780 4f 4e 47 5f 50 54 52 20 70 75 6c 44 61 74 61 4c ONG_PTR pulDataL 1b790 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 en) {..CACKEY_DE 1b7a0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 1b7b0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 1b7c0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 1b7d0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1b7e0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1b7f0 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 1b800 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1b810 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 1b820 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 1b830 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 1b840 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 1b850 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 1b860 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 1b870 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 1b880 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1b890 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 1b8a0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1b8b0 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 1b8c0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 1b8d0 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 45 6e K_RV, C_DigestEn 1b8e0 63 72 79 70 74 55 70 64 61 74 65 29 28 43 4b 5f cryptUpdate)(CK_ 1b8f0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 1b900 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 1b910 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 _PTR pPart, CK_U 1b920 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 6e 2c 20 LONG ulPartLen, 1b930 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 CK_BYTE_PTR pEnc 1b940 72 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 ryptedPart, CK_U 1b950 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 45 6e 63 72 LONG_PTR pulEncr 1b960 79 70 74 65 64 50 61 72 74 4c 65 6e 29 20 7b 0a yptedPartLen) {. 1b970 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1b980 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1b990 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1b9a0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1b9b0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1b9c0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1b9d0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1b9e0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1b9f0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1ba00 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 1ba10 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1ba20 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1ba30 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1ba40 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 1ba50 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1ba60 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 1ba70 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 1ba80 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1ba90 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1baa0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1bab0 43 5f 44 65 63 72 79 70 74 44 69 67 65 73 74 55 C_DecryptDigestU 1bac0 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f pdate)(CK_SESSIO 1bad0 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 1bae0 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 1baf0 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 43 EncryptedPart, C 1bb00 4b 5f 55 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 70 K_ULONG ulEncryp 1bb10 74 65 64 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 tedPartLen, CK_B 1bb20 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 YTE_PTR pPart, C 1bb30 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 50 K_ULONG_PTR pulP 1bb40 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 artLen) {..CACKE 1bb50 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1bb60 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 1bb70 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 1bb80 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 1bb90 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1bba0 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 1bbb0 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 1bbc0 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 1bbd0 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 1bbe0 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ 1bbf0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 1bc00 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 turning CKR_FUNC 1bc10 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1bc20 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 ED (%i)", CKR_FU 1bc30 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1bc40 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 RTED);...return( 1bc50 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1bc60 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a _SUPPORTED);.}.. 1bc70 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 1bc80 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e ON(CK_RV, C_Sign 1bc90 45 6e 63 72 79 70 74 55 70 64 61 74 65 29 28 43 EncryptUpdate)(C 1bca0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 1bcb0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 1bcc0 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b TE_PTR pPart, CK 1bcd0 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 6e _ULONG ulPartLen 1bce0 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 , CK_BYTE_PTR pE 1bcf0 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 43 4b ncryptedPart, CK 1bd00 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 45 6e _ULONG_PTR pulEn 1bd10 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 29 20 cryptedPartLen) 1bd20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 1bd30 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 1bd40 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 1bd50 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 1bd60 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1bd70 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 1bd80 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 1bd90 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1bda0 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 1bdb0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 1bdc0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1bdd0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 1bde0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1bdf0 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 1be00 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 1be10 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 1be20 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 1be30 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1be40 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN 1be50 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 1be60 2c 20 43 5f 44 65 63 72 79 70 74 56 65 72 69 66 , C_DecryptVerif 1be70 79 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 yUpdate)(CK_SESS 1be80 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 1be90 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 1bea0 20 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c pEncryptedPart, 1beb0 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 45 6e 63 72 CK_ULONG ulEncr 1bec0 79 70 74 65 64 50 61 72 74 4c 65 6e 2c 20 43 4b yptedPartLen, CK 1bed0 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c _BYTE_PTR pPart, 1bee0 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 CK_ULONG_PTR pu 1bef0 6c 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 lPartLen) {..CAC 1bf00 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1bf10 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 1bf20 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 1bf30 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 1bf40 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1bf50 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 1bf60 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 1bf70 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 1bf80 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 1bf90 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 1bfa0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1bfb0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 1bfc0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1bfd0 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 1bfe0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1bff0 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 1c000 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 1c010 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 1c020 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 1c030 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 TION(CK_RV, C_Ge 1c040 6e 65 72 61 74 65 4b 65 79 29 28 43 4b 5f 53 45 nerateKey)(CK_SE 1c050 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 1c060 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e ssion, CK_MECHAN 1c070 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 ISM_PTR pMechani 1c080 73 6d 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45 sm, CK_ATTRIBUTE 1c090 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 _PTR pTemplate, 1c0a0 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 CK_ULONG ulCount 1c0b0 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 1c0c0 4c 45 5f 50 54 52 20 70 68 4b 65 79 29 20 7b 0a LE_PTR phKey) {. 1c0d0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1c0e0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1c0f0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1c100 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1c110 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1c120 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1c130 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1c140 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1c150 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1c160 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 1c170 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1c180 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1c190 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1c1a0 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 1c1b0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1c1c0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 1c1d0 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 1c1e0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1c1f0 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1c200 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1c210 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 50 61 69 C_GenerateKeyPai 1c220 72 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 r)(CK_SESSION_HA 1c230 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 1c240 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 K_MECHANISM_PTR 1c250 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 41 pMechanism, CK_A 1c260 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 50 75 TTRIBUTE_PTR pPu 1c270 62 6c 69 63 4b 65 79 54 65 6d 70 6c 61 74 65 2c blicKeyTemplate, 1c280 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 75 62 6c CK_ULONG ulPubl 1c290 69 63 4b 65 79 41 74 74 72 69 62 75 74 65 43 6f icKeyAttributeCo 1c2a0 75 6e 74 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 unt, CK_ATTRIBUT 1c2b0 45 5f 50 54 52 20 70 50 72 69 76 61 74 65 4b 65 E_PTR pPrivateKe 1c2c0 79 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c yTemplate, CK_UL 1c2d0 4f 4e 47 20 75 6c 50 72 69 76 61 74 65 4b 65 79 ONG ulPrivateKey 1c2e0 41 74 74 72 69 62 75 74 65 43 6f 75 6e 74 2c 20 AttributeCount, 1c2f0 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 1c300 5f 50 54 52 20 70 68 50 75 62 6c 69 63 4b 65 79 _PTR phPublicKey 1c310 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 1c320 4c 45 5f 50 54 52 20 70 68 50 72 69 76 61 74 65 LE_PTR phPrivate 1c330 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Key) {..CACKEY_D 1c340 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 1c350 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 1c360 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 1c370 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 1c380 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1c390 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 1c3a0 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 1c3b0 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 1c3c0 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1c3d0 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 1c3e0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1c3f0 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 1c400 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 1c410 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 1c420 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1c430 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 1c440 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1c450 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 1c460 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 1c470 43 4b 5f 52 56 2c 20 43 5f 57 72 61 70 4b 65 79 CK_RV, C_WrapKey 1c480 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 1c490 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 1c4a0 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 _MECHANISM_PTR p 1c4b0 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 Mechanism, CK_OB 1c4c0 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 57 72 61 JECT_HANDLE hWra 1c4d0 70 70 69 6e 67 4b 65 79 2c 20 43 4b 5f 4f 42 4a ppingKey, CK_OBJ 1c4e0 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 2c ECT_HANDLE hKey, 1c4f0 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 57 72 CK_BYTE_PTR pWr 1c500 61 70 70 65 64 4b 65 79 2c 20 43 4b 5f 55 4c 4f appedKey, CK_ULO 1c510 4e 47 5f 50 54 52 20 70 75 6c 57 72 61 70 70 65 NG_PTR pulWrappe 1c520 64 4b 65 79 4c 65 6e 29 20 7b 0a 09 43 41 43 4b dKeyLen) {..CACK 1c530 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1c540 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 1c550 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 1c560 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 1c570 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1c580 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 1c590 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 1c5a0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 1c5b0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 1c5c0 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 1c5d0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 1c5e0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 1c5f0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 1c600 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 1c610 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1c620 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 1c630 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 1c640 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 1c650 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 1c660 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 55 6e 77 ION(CK_RV, C_Unw 1c670 72 61 70 4b 65 79 29 28 43 4b 5f 53 45 53 53 49 rapKey)(CK_SESSI 1c680 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 1c690 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d on, CK_MECHANISM 1c6a0 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c _PTR pMechanism, 1c6b0 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL 1c6c0 45 20 68 55 6e 77 72 61 70 70 69 6e 67 4b 65 79 E hUnwrappingKey 1c6d0 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 57 , CK_BYTE_PTR pW 1c6e0 72 61 70 70 65 64 4b 65 79 2c 20 43 4b 5f 55 4c rappedKey, CK_UL 1c6f0 4f 4e 47 20 75 6c 57 72 61 70 70 65 64 4b 65 79 ONG ulWrappedKey 1c700 4c 65 6e 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 Len, CK_ATTRIBUT 1c710 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c E_PTR pTemplate, 1c720 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 41 74 74 72 CK_ULONG ulAttr 1c730 69 62 75 74 65 43 6f 75 6e 74 2c 20 43 4b 5f 4f ibuteCount, CK_O 1c740 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 BJECT_HANDLE_PTR 1c750 20 70 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 phKey) {..CACKE 1c760 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1c770 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 1c780 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 1c790 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 1c7a0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1c7b0 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 1c7c0 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 1c7d0 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 1c7e0 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 1c7f0 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ 1c800 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 1c810 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 turning CKR_FUNC 1c820 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1c830 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 ED (%i)", CKR_FU 1c840 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1c850 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 RTED);...return( 1c860 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1c870 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a _SUPPORTED);.}.. 1c880 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 1c890 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 72 69 ON(CK_RV, C_Deri 1c8a0 76 65 4b 65 79 29 28 43 4b 5f 53 45 53 53 49 4f veKey)(CK_SESSIO 1c8b0 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 1c8c0 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f n, CK_MECHANISM_ 1c8d0 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 PTR pMechanism, 1c8e0 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 1c8f0 20 68 42 61 73 65 4b 65 79 2c 20 43 4b 5f 41 54 hBaseKey, CK_AT 1c900 54 52 49 42 55 54 45 5f 50 54 52 20 70 54 65 6d TRIBUTE_PTR pTem 1c910 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 plate, CK_ULONG 1c920 75 6c 41 74 74 72 69 62 75 74 65 43 6f 75 6e 74 ulAttributeCount 1c930 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 1c940 4c 45 5f 50 54 52 20 70 68 4b 65 79 29 20 7b 0a LE_PTR phKey) {. 1c950 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1c960 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1c970 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1c980 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1c990 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1c9a0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1c9b0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1c9c0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1c9d0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1c9e0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 1c9f0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1ca00 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1ca10 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1ca20 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 1ca30 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1ca40 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 1ca50 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 1ca60 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1ca70 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1ca80 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1ca90 43 5f 53 65 65 64 52 61 6e 64 6f 6d 29 28 43 4b C_SeedRandom)(CK 1caa0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 1cab0 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 hSession, CK_BYT 1cac0 45 5f 50 54 52 20 70 53 65 65 64 2c 20 43 4b 5f E_PTR pSeed, CK_ 1cad0 55 4c 4f 4e 47 20 75 6c 53 65 65 64 4c 65 6e 29 ULONG ulSeedLen) 1cae0 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 1caf0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 1cb00 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 1cb10 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 1cb20 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1cb30 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1cb40 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 1cb50 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1cb60 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 1cb70 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 1cb80 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1cb90 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 1cba0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 1cbb0 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 1cbc0 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 1cbd0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 1cbe0 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 1cbf0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 1cc00 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 1cc10 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 1cc20 56 2c 20 43 5f 47 65 6e 65 72 61 74 65 52 61 6e V, C_GenerateRan 1cc30 64 6f 6d 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f dom)(CK_SESSION_ 1cc40 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 1cc50 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 52 61 CK_BYTE_PTR pRa 1cc60 6e 64 6f 6d 44 61 74 61 2c 20 43 4b 5f 55 4c 4f ndomData, CK_ULO 1cc70 4e 47 20 75 6c 52 61 6e 64 6f 6d 4c 65 6e 29 20 NG ulRandomLen) 1cc80 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 1cc90 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 1cca0 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 1ccb0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 1ccc0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1ccd0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 1cce0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 1ccf0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1cd00 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 1cd10 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 1cd20 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1cd30 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 1cd40 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1cd50 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 1cd60 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 1cd70 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 1cd80 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 1cd90 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1cda0 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 44 65 70 72 65 ED);.}../* Depre 1cdb0 63 61 74 65 64 20 46 75 6e 63 74 69 6f 6e 20 2a cated Function * 1cdc0 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 /.CK_DEFINE_FUNC 1cdd0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 TION(CK_RV, C_Ge 1cde0 74 46 75 6e 63 74 69 6f 6e 53 74 61 74 75 73 29 tFunctionStatus) 1cdf0 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 1ce00 4c 45 20 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 LE hSession) {.. 1ce10 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1ce20 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 1ce30 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1ce40 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 1ce50 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 1ce60 54 5f 50 41 52 41 4c 4c 45 4c 20 28 25 69 29 22 T_PARALLEL (%i)" 1ce70 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 1ce80 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a 09 OT_PARALLEL);... 1ce90 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 1cea0 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c ION_NOT_PARALLEL 1ceb0 29 3b 0a 0a 09 68 53 65 73 73 69 6f 6e 20 3d 20 );...hSession = 1cec0 68 53 65 73 73 69 6f 6e 3b 20 2f 2a 20 53 75 70 hSession; /* Sup 1ced0 72 65 73 73 20 75 6e 75 73 65 64 20 76 61 72 69 ress unused vari 1cee0 61 62 6c 65 20 77 61 72 6e 69 6e 67 20 2a 2f 0a able warning */. 1cef0 7d 0a 0a 2f 2a 20 44 65 70 72 65 63 61 74 65 64 }../* Deprecated 1cf00 20 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 43 4b 5f Function */.CK_ 1cf10 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 1cf20 43 4b 5f 52 56 2c 20 43 5f 43 61 6e 63 65 6c 46 CK_RV, C_CancelF 1cf30 75 6e 63 74 69 6f 6e 29 28 43 4b 5f 53 45 53 53 unction)(CK_SESS 1cf40 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 1cf50 69 6f 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 ion) {..CACKEY_D 1cf60 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 1cf70 6c 65 64 2e 22 29 3b 0a 0a 09 43 41 43 4b 45 59 led.");...CACKEY 1cf80 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 1cf90 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 1cfa0 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c CTION_NOT_PARALL 1cfb0 45 4c 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 EL (%i)", CKR_FU 1cfc0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c NCTION_NOT_PARAL 1cfd0 4c 45 4c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 LEL);...return(C 1cfe0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 1cff0 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a 09 68 53 65 PARALLEL);...hSe 1d000 73 73 69 6f 6e 20 3d 20 68 53 65 73 73 69 6f 6e ssion = hSession 1d010 3b 20 2f 2a 20 53 75 70 72 65 73 73 20 75 6e 75 ; /* Supress unu 1d020 73 65 64 20 76 61 72 69 61 62 6c 65 20 77 61 72 sed variable war 1d030 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 43 4b 5f 44 45 ning */.}..CK_DE 1d040 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 1d050 5f 52 56 2c 20 43 5f 47 65 74 46 75 6e 63 74 69 _RV, C_GetFuncti 1d060 6f 6e 4c 69 73 74 29 28 43 4b 5f 46 55 4e 43 54 onList)(CK_FUNCT 1d070 49 4f 4e 5f 4c 49 53 54 5f 50 54 52 5f 50 54 52 ION_LIST_PTR_PTR 1d080 20 70 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 29 ppFunctionList) 1d090 20 7b 0a 09 43 4b 5f 46 55 4e 43 54 49 4f 4e 5f {..CK_FUNCTION_ 1d0a0 4c 49 53 54 5f 50 54 52 20 70 46 75 6e 63 74 69 LIST_PTR pFuncti 1d0b0 6f 6e 4c 69 73 74 3b 0a 0a 09 43 41 43 4b 45 59 onList;...CACKEY 1d0c0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 1d0d0 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 1d0e0 70 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 20 3d ppFunctionList = 1d0f0 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK 1d100 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1d110 22 45 72 72 6f 72 2e 20 70 70 46 75 6e 63 74 69 "Error. ppFuncti 1d120 6f 6e 4c 69 73 74 20 69 73 20 4e 55 4c 4c 2e 22 onList is NULL." 1d130 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1d140 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b _ARGUMENTS_BAD); 1d150 0a 09 7d 0a 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ..}...pFunctionL 1d160 69 73 74 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a ist = malloc(siz 1d170 65 6f 66 28 2a 70 46 75 6e 63 74 69 6f 6e 4c 69 eof(*pFunctionLi 1d180 73 74 29 29 3b 0a 0a 09 70 46 75 6e 63 74 69 6f st));...pFunctio 1d190 6e 4c 69 73 74 2d 3e 76 65 72 73 69 6f 6e 2e 6d nList->version.m 1d1a0 61 6a 6f 72 20 3d 20 28 28 43 41 43 4b 45 59 5f ajor = ((CACKEY_ 1d1b0 43 52 59 50 54 4f 4b 49 5f 56 45 52 53 49 4f 4e CRYPTOKI_VERSION 1d1c0 5f 43 4f 44 45 29 20 3e 3e 20 31 36 29 20 26 20 _CODE) >> 16) & 1d1d0 30 78 66 66 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 0xff;..pFunction 1d1e0 4c 69 73 74 2d 3e 76 65 72 73 69 6f 6e 2e 6d 69 List->version.mi 1d1f0 6e 6f 72 20 3d 20 28 28 43 41 43 4b 45 59 5f 43 nor = ((CACKEY_C 1d200 52 59 50 54 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f RYPTOKI_VERSION_ 1d210 43 4f 44 45 29 20 3e 3e 20 38 29 20 26 20 30 78 CODE) >> 8) & 0x 1d220 66 66 3b 0a 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ff;...pFunctionL 1d230 69 73 74 2d 3e 43 5f 49 6e 69 74 69 61 6c 69 7a ist->C_Initializ 1d240 65 20 3d 20 43 5f 49 6e 69 74 69 61 6c 69 7a 65 e = C_Initialize 1d250 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1d260 2d 3e 43 5f 46 69 6e 61 6c 69 7a 65 20 3d 20 43 ->C_Finalize = C 1d270 5f 46 69 6e 61 6c 69 7a 65 3b 0a 09 70 46 75 6e _Finalize;..pFun 1d280 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 ctionList->C_Get 1d290 49 6e 66 6f 20 3d 20 43 5f 47 65 74 49 6e 66 6f Info = C_GetInfo 1d2a0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1d2b0 2d 3e 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 20 ->C_GetSlotList 1d2c0 3d 20 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 3b = C_GetSlotList; 1d2d0 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 1d2e0 3e 43 5f 47 65 74 53 6c 6f 74 49 6e 66 6f 20 3d >C_GetSlotInfo = 1d2f0 20 43 5f 47 65 74 53 6c 6f 74 49 6e 66 6f 3b 0a C_GetSlotInfo;. 1d300 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 1d310 43 5f 47 65 74 54 6f 6b 65 6e 49 6e 66 6f 20 3d C_GetTokenInfo = 1d320 20 43 5f 47 65 74 54 6f 6b 65 6e 49 6e 66 6f 3b C_GetTokenInfo; 1d330 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 1d340 3e 43 5f 57 61 69 74 46 6f 72 53 6c 6f 74 45 76 >C_WaitForSlotEv 1d350 65 6e 74 20 3d 20 43 5f 57 61 69 74 46 6f 72 53 ent = C_WaitForS 1d360 6c 6f 74 45 76 65 6e 74 3b 0a 09 70 46 75 6e 63 lotEvent;..pFunc 1d370 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 4d tionList->C_GetM 1d380 65 63 68 61 6e 69 73 6d 4c 69 73 74 20 3d 20 43 echanismList = C 1d390 5f 47 65 74 4d 65 63 68 61 6e 69 73 6d 4c 69 73 _GetMechanismLis 1d3a0 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t;..pFunctionLis 1d3b0 74 2d 3e 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 t->C_GetMechanis 1d3c0 6d 49 6e 66 6f 20 3d 20 43 5f 47 65 74 4d 65 63 mInfo = C_GetMec 1d3d0 68 61 6e 69 73 6d 49 6e 66 6f 3b 0a 09 70 46 75 hanismInfo;..pFu 1d3e0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 49 6e nctionList->C_In 1d3f0 69 74 54 6f 6b 65 6e 20 3d 20 43 5f 49 6e 69 74 itToken = C_Init 1d400 54 6f 6b 65 6e 3b 0a 09 70 46 75 6e 63 74 69 6f Token;..pFunctio 1d410 6e 4c 69 73 74 2d 3e 43 5f 49 6e 69 74 50 49 4e nList->C_InitPIN 1d420 20 3d 20 43 5f 49 6e 69 74 50 49 4e 3b 0a 09 70 = C_InitPIN;..p 1d430 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1d440 53 65 74 50 49 4e 20 3d 20 43 5f 53 65 74 50 49 SetPIN = C_SetPI 1d450 4e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 N;..pFunctionLis 1d460 74 2d 3e 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e t->C_OpenSession 1d470 20 3d 20 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e = C_OpenSession 1d480 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1d490 2d 3e 43 5f 43 6c 6f 73 65 53 65 73 73 69 6f 6e ->C_CloseSession 1d4a0 20 3d 20 43 5f 43 6c 6f 73 65 53 65 73 73 69 6f = C_CloseSessio 1d4b0 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 n;..pFunctionLis 1d4c0 74 2d 3e 43 5f 43 6c 6f 73 65 41 6c 6c 53 65 73 t->C_CloseAllSes 1d4d0 73 69 6f 6e 73 20 3d 20 43 5f 43 6c 6f 73 65 41 sions = C_CloseA 1d4e0 6c 6c 53 65 73 73 69 6f 6e 73 3b 0a 09 70 46 75 llSessions;..pFu 1d4f0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge 1d500 74 53 65 73 73 69 6f 6e 49 6e 66 6f 20 3d 20 43 tSessionInfo = C 1d510 5f 47 65 74 53 65 73 73 69 6f 6e 49 6e 66 6f 3b _GetSessionInfo; 1d520 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 1d530 3e 43 5f 47 65 74 4f 70 65 72 61 74 69 6f 6e 53 >C_GetOperationS 1d540 74 61 74 65 20 3d 20 43 5f 47 65 74 4f 70 65 72 tate = C_GetOper 1d550 61 74 69 6f 6e 53 74 61 74 65 3b 0a 09 70 46 75 ationState;..pFu 1d560 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 65 nctionList->C_Se 1d570 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 20 tOperationState 1d580 3d 20 43 5f 53 65 74 4f 70 65 72 61 74 69 6f 6e = C_SetOperation 1d590 53 74 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f State;..pFunctio 1d5a0 6e 4c 69 73 74 2d 3e 43 5f 4c 6f 67 69 6e 20 3d nList->C_Login = 1d5b0 20 43 5f 4c 6f 67 69 6e 3b 0a 09 70 46 75 6e 63 C_Login;..pFunc 1d5c0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 4c 6f 67 6f tionList->C_Logo 1d5d0 75 74 20 3d 20 43 5f 4c 6f 67 6f 75 74 3b 0a 09 ut = C_Logout;.. 1d5e0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 1d5f0 5f 43 72 65 61 74 65 4f 62 6a 65 63 74 20 3d 20 _CreateObject = 1d600 43 5f 43 72 65 61 74 65 4f 62 6a 65 63 74 3b 0a C_CreateObject;. 1d610 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 1d620 43 5f 43 6f 70 79 4f 62 6a 65 63 74 20 3d 20 43 C_CopyObject = C 1d630 5f 43 6f 70 79 4f 62 6a 65 63 74 3b 0a 09 70 46 _CopyObject;..pF 1d640 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 unctionList->C_D 1d650 65 73 74 72 6f 79 4f 62 6a 65 63 74 20 3d 20 43 estroyObject = C 1d660 5f 44 65 73 74 72 6f 79 4f 62 6a 65 63 74 3b 0a _DestroyObject;. 1d670 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 1d680 43 5f 47 65 74 4f 62 6a 65 63 74 53 69 7a 65 20 C_GetObjectSize 1d690 3d 20 43 5f 47 65 74 4f 62 6a 65 63 74 53 69 7a = C_GetObjectSiz 1d6a0 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 e;..pFunctionLis 1d6b0 74 2d 3e 43 5f 47 65 74 41 74 74 72 69 62 75 74 t->C_GetAttribut 1d6c0 65 56 61 6c 75 65 20 3d 20 43 5f 47 65 74 41 74 eValue = C_GetAt 1d6d0 74 72 69 62 75 74 65 56 61 6c 75 65 3b 0a 09 70 tributeValue;..p 1d6e0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1d6f0 53 65 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 SetAttributeValu 1d700 65 20 3d 20 43 5f 53 65 74 41 74 74 72 69 62 75 e = C_SetAttribu 1d710 74 65 56 61 6c 75 65 3b 0a 09 70 46 75 6e 63 74 teValue;..pFunct 1d720 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 4f ionList->C_FindO 1d730 62 6a 65 63 74 73 49 6e 69 74 20 3d 20 43 5f 46 bjectsInit = C_F 1d740 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 3b 0a indObjectsInit;. 1d750 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 1d760 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 20 3d 20 C_FindObjects = 1d770 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 3b 0a 09 C_FindObjects;.. 1d780 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 1d790 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 69 6e 61 _FindObjectsFina 1d7a0 6c 20 3d 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 l = C_FindObject 1d7b0 73 46 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 sFinal;..pFuncti 1d7c0 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 72 79 70 onList->C_Encryp 1d7d0 74 49 6e 69 74 20 3d 20 43 5f 45 6e 63 72 79 70 tInit = C_Encryp 1d7e0 74 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f tInit;..pFunctio 1d7f0 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 72 79 70 74 nList->C_Encrypt 1d800 20 3d 20 43 5f 45 6e 63 72 79 70 74 3b 0a 09 70 = C_Encrypt;..p 1d810 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1d820 45 6e 63 72 79 70 74 55 70 64 61 74 65 20 3d 20 EncryptUpdate = 1d830 43 5f 45 6e 63 72 79 70 74 55 70 64 61 74 65 3b C_EncryptUpdate; 1d840 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 1d850 3e 43 5f 45 6e 63 72 79 70 74 46 69 6e 61 6c 20 >C_EncryptFinal 1d860 3d 20 43 5f 45 6e 63 72 79 70 74 46 69 6e 61 6c = C_EncryptFinal 1d870 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1d880 2d 3e 43 5f 44 65 63 72 79 70 74 49 6e 69 74 20 ->C_DecryptInit 1d890 3d 20 43 5f 44 65 63 72 79 70 74 49 6e 69 74 3b = C_DecryptInit; 1d8a0 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 1d8b0 3e 43 5f 44 65 63 72 79 70 74 20 3d 20 43 5f 44 >C_Decrypt = C_D 1d8c0 65 63 72 79 70 74 3b 0a 09 70 46 75 6e 63 74 69 ecrypt;..pFuncti 1d8d0 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 onList->C_Decryp 1d8e0 74 55 70 64 61 74 65 20 3d 20 43 5f 44 65 63 72 tUpdate = C_Decr 1d8f0 79 70 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e yptUpdate;..pFun 1d900 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 ctionList->C_Dec 1d910 72 79 70 74 46 69 6e 61 6c 20 3d 20 43 5f 44 65 ryptFinal = C_De 1d920 63 72 79 70 74 46 69 6e 61 6c 3b 0a 09 70 46 75 cryptFinal;..pFu 1d930 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 nctionList->C_Di 1d940 67 65 73 74 49 6e 69 74 20 3d 20 43 5f 44 69 67 gestInit = C_Dig 1d950 65 73 74 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 estInit;..pFunct 1d960 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 73 ionList->C_Diges 1d970 74 20 3d 20 43 5f 44 69 67 65 73 74 3b 0a 09 70 t = C_Digest;..p 1d980 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1d990 44 69 67 65 73 74 55 70 64 61 74 65 20 3d 20 43 DigestUpdate = C 1d9a0 5f 44 69 67 65 73 74 55 70 64 61 74 65 3b 0a 09 _DigestUpdate;.. 1d9b0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 1d9c0 5f 44 69 67 65 73 74 4b 65 79 20 3d 20 43 5f 44 _DigestKey = C_D 1d9d0 69 67 65 73 74 4b 65 79 3b 0a 09 70 46 75 6e 63 igestKey;..pFunc 1d9e0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 tionList->C_Dige 1d9f0 73 74 46 69 6e 61 6c 20 3d 20 43 5f 44 69 67 65 stFinal = C_Dige 1da00 73 74 46 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 stFinal;..pFunct 1da10 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 49 ionList->C_SignI 1da20 6e 69 74 20 3d 20 43 5f 53 69 67 6e 49 6e 69 74 nit = C_SignInit 1da30 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1da40 2d 3e 43 5f 53 69 67 6e 20 3d 20 43 5f 53 69 67 ->C_Sign = C_Sig 1da50 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 n;..pFunctionLis 1da60 74 2d 3e 43 5f 53 69 67 6e 55 70 64 61 74 65 20 t->C_SignUpdate 1da70 3d 20 43 5f 53 69 67 6e 55 70 64 61 74 65 3b 0a = C_SignUpdate;. 1da80 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 1da90 43 5f 53 69 67 6e 46 69 6e 61 6c 20 3d 20 43 5f C_SignFinal = C_ 1daa0 53 69 67 6e 46 69 6e 61 6c 3b 0a 09 70 46 75 6e SignFinal;..pFun 1dab0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 ctionList->C_Sig 1dac0 6e 52 65 63 6f 76 65 72 49 6e 69 74 20 3d 20 43 nRecoverInit = C 1dad0 5f 53 69 67 6e 52 65 63 6f 76 65 72 49 6e 69 74 _SignRecoverInit 1dae0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1daf0 2d 3e 43 5f 53 69 67 6e 52 65 63 6f 76 65 72 20 ->C_SignRecover 1db00 3d 20 43 5f 53 69 67 6e 52 65 63 6f 76 65 72 3b = C_SignRecover; 1db10 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 1db20 3e 43 5f 56 65 72 69 66 79 49 6e 69 74 20 3d 20 >C_VerifyInit = 1db30 43 5f 56 65 72 69 66 79 49 6e 69 74 3b 0a 09 70 C_VerifyInit;..p 1db40 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1db50 56 65 72 69 66 79 20 3d 20 43 5f 56 65 72 69 66 Verify = C_Verif 1db60 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 y;..pFunctionLis 1db70 74 2d 3e 43 5f 56 65 72 69 66 79 55 70 64 61 74 t->C_VerifyUpdat 1db80 65 20 3d 20 43 5f 56 65 72 69 66 79 55 70 64 61 e = C_VerifyUpda 1db90 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 te;..pFunctionLi 1dba0 73 74 2d 3e 43 5f 56 65 72 69 66 79 46 69 6e 61 st->C_VerifyFina 1dbb0 6c 20 3d 20 43 5f 56 65 72 69 66 79 46 69 6e 61 l = C_VerifyFina 1dbc0 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 l;..pFunctionLis 1dbd0 74 2d 3e 43 5f 56 65 72 69 66 79 52 65 63 6f 76 t->C_VerifyRecov 1dbe0 65 72 49 6e 69 74 20 3d 20 43 5f 56 65 72 69 66 erInit = C_Verif 1dbf0 79 52 65 63 6f 76 65 72 49 6e 69 74 3b 0a 09 70 yRecoverInit;..p 1dc00 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1dc10 56 65 72 69 66 79 52 65 63 6f 76 65 72 20 3d 20 VerifyRecover = 1dc20 43 5f 56 65 72 69 66 79 52 65 63 6f 76 65 72 3b C_VerifyRecover; 1dc30 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 1dc40 3e 43 5f 44 69 67 65 73 74 45 6e 63 72 79 70 74 >C_DigestEncrypt 1dc50 55 70 64 61 74 65 20 3d 20 43 5f 44 69 67 65 73 Update = C_Diges 1dc60 74 45 6e 63 72 79 70 74 55 70 64 61 74 65 3b 0a tEncryptUpdate;. 1dc70 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 1dc80 43 5f 44 65 63 72 79 70 74 44 69 67 65 73 74 55 C_DecryptDigestU 1dc90 70 64 61 74 65 20 3d 20 43 5f 44 65 63 72 79 70 pdate = C_Decryp 1dca0 74 44 69 67 65 73 74 55 70 64 61 74 65 3b 0a 09 tDigestUpdate;.. 1dcb0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 1dcc0 5f 53 69 67 6e 45 6e 63 72 79 70 74 55 70 64 61 _SignEncryptUpda 1dcd0 74 65 20 3d 20 43 5f 53 69 67 6e 45 6e 63 72 79 te = C_SignEncry 1dce0 70 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 ptUpdate;..pFunc 1dcf0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 72 tionList->C_Decr 1dd00 79 70 74 56 65 72 69 66 79 55 70 64 61 74 65 20 yptVerifyUpdate 1dd10 3d 20 43 5f 44 65 63 72 79 70 74 56 65 72 69 66 = C_DecryptVerif 1dd20 79 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 yUpdate;..pFunct 1dd30 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 6e 65 72 ionList->C_Gener 1dd40 61 74 65 4b 65 79 20 3d 20 43 5f 47 65 6e 65 72 ateKey = C_Gener 1dd50 61 74 65 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69 ateKey;..pFuncti 1dd60 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 6e 65 72 61 onList->C_Genera 1dd70 74 65 4b 65 79 50 61 69 72 20 3d 20 43 5f 47 65 teKeyPair = C_Ge 1dd80 6e 65 72 61 74 65 4b 65 79 50 61 69 72 3b 0a 09 nerateKeyPair;.. 1dd90 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 1dda0 5f 57 72 61 70 4b 65 79 20 3d 20 43 5f 57 72 61 _WrapKey = C_Wra 1ddb0 70 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e pKey;..pFunction 1ddc0 4c 69 73 74 2d 3e 43 5f 55 6e 77 72 61 70 4b 65 List->C_UnwrapKe 1ddd0 79 20 3d 20 43 5f 55 6e 77 72 61 70 4b 65 79 3b y = C_UnwrapKey; 1dde0 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 1ddf0 3e 43 5f 44 65 72 69 76 65 4b 65 79 20 3d 20 43 >C_DeriveKey = C 1de00 5f 44 65 72 69 76 65 4b 65 79 3b 0a 09 70 46 75 _DeriveKey;..pFu 1de10 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 65 nctionList->C_Se 1de20 65 64 52 61 6e 64 6f 6d 20 3d 20 43 5f 53 65 65 edRandom = C_See 1de30 64 52 61 6e 64 6f 6d 3b 0a 09 70 46 75 6e 63 74 dRandom;..pFunct 1de40 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 6e 65 72 ionList->C_Gener 1de50 61 74 65 52 61 6e 64 6f 6d 20 3d 20 43 5f 47 65 ateRandom = C_Ge 1de60 6e 65 72 61 74 65 52 61 6e 64 6f 6d 3b 0a 09 70 nerateRandom;..p 1de70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1de80 47 65 74 46 75 6e 63 74 69 6f 6e 53 74 61 74 75 GetFunctionStatu 1de90 73 20 3d 20 43 5f 47 65 74 46 75 6e 63 74 69 6f s = C_GetFunctio 1dea0 6e 53 74 61 74 75 73 3b 0a 09 70 46 75 6e 63 74 nStatus;..pFunct 1deb0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 61 6e 63 65 ionList->C_Cance 1dec0 6c 46 75 6e 63 74 69 6f 6e 20 3d 20 43 5f 43 61 lFunction = C_Ca 1ded0 6e 63 65 6c 46 75 6e 63 74 69 6f 6e 3b 0a 09 70 ncelFunction;..p 1dee0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1def0 47 65 74 46 75 6e 63 74 69 6f 6e 4c 69 73 74 20 GetFunctionList 1df00 3d 20 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 4c = C_GetFunctionL 1df10 69 73 74 3b 0a 0a 09 2a 70 70 46 75 6e 63 74 69 ist;...*ppFuncti 1df20 6f 6e 4c 69 73 74 20 3d 20 70 46 75 6e 63 74 69 onList = pFuncti 1df30 6f 6e 4c 69 73 74 3b 0a 0a 09 43 41 43 4b 45 59 onList;...CACKEY 1df40 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 1df50 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 eturning CKR_OK 1df60 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a (%i)", CKR_OK);. 1df70 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 ..return(CKR_OK) 1df80 3b 0a 7d 0a 0a ;.}..