Artifact 80414011fe51ef9431e89287547ae7d1dc447056:
- File
cackey.c
— part of check-in
[06e07b8f0d]
at
2010-05-12 21:52:55
on branch trunk
— Added routines for reading certificates
Updated OpenSession to use PC/SC certificates
Comment and debugging update
Updated to read in larger chunks to improve speed (user: rkeene, size: 121225) [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 73 74 72 75 _objectid;..stru 3a60: 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 63 61 ct cackey_tlv_ca 3a70: 72 64 75 72 6c 20 7b 0a 09 75 6e 73 69 67 6e 65 rdurl {..unsigne 3a80: 64 20 63 68 61 72 20 20 20 20 20 20 20 20 72 69 d char ri 3a90: 64 5b 35 5d 3b 0a 09 63 61 63 6b 65 79 5f 74 6c d[5];..cackey_tl 3aa0: 76 5f 61 70 70 74 79 70 65 20 20 20 61 70 70 74 v_apptype appt 3ab0: 79 70 65 3b 0a 09 63 61 63 6b 65 79 5f 74 6c 76 ype;..cackey_tlv 3ac0: 5f 6f 62 6a 65 63 74 69 64 20 20 6f 62 6a 65 63 _objectid objec 3ad0: 74 69 64 3b 0a 09 63 61 63 6b 65 79 5f 74 6c 76 tid;..cackey_tlv 3ae0: 5f 6f 62 6a 65 63 74 69 64 20 20 61 70 70 69 64 _objectid appid 3af0: 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 ;..unsigned char 3b00: 20 20 20 20 20 20 20 20 70 69 6e 69 64 3b 0a 7d pinid;.} 3b10: 3b 0a 0a 73 74 72 75 63 74 20 63 61 63 6b 65 79 ;..struct cackey 3b20: 5f 74 6c 76 5f 65 6e 74 69 74 79 3b 0a 73 74 72 _tlv_entity;.str 3b30: 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 uct cackey_tlv_e 3b40: 6e 74 69 74 79 20 7b 0a 09 75 69 6e 74 38 5f 74 ntity {..uint8_t 3b50: 20 74 61 67 3b 0a 09 73 69 7a 65 5f 74 20 6c 65 tag;..size_t le 3b60: 6e 67 74 68 3b 0a 0a 09 75 6e 69 6f 6e 20 7b 0a ngth;...union {. 3b70: 09 09 76 6f 69 64 20 2a 76 61 6c 75 65 3b 0a 09 ..void *value;.. 3b80: 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 .struct cackey_t 3b90: 6c 76 5f 63 61 72 64 75 72 6c 20 2a 76 61 6c 75 lv_cardurl *valu 3ba0: 65 5f 63 61 72 64 75 72 6c 3b 0a 09 09 75 69 6e e_cardurl;...uin 3bb0: 74 38 5f 74 20 76 61 6c 75 65 5f 62 79 74 65 3b t8_t value_byte; 3bc0: 0a 09 7d 3b 0a 0a 09 73 74 72 75 63 74 20 63 61 ..};...struct ca 3bd0: 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 ckey_tlv_entity 3be0: 2a 5f 6e 65 78 74 3b 0a 7d 3b 0a 0a 2f 2a 20 43 *_next;.};../* C 3bf0: 41 43 4b 45 59 20 47 6c 6f 62 61 6c 20 48 61 6e ACKEY Global Han 3c00: 64 6c 65 73 20 2a 2f 0a 73 74 61 74 69 63 20 76 dles */.static v 3c10: 6f 69 64 20 2a 63 61 63 6b 65 79 5f 62 69 67 6c oid *cackey_bigl 3c20: 6f 63 6b 20 3d 20 4e 55 4c 4c 3b 0a 73 74 61 74 ock = NULL;.stat 3c30: 69 63 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 ic struct cackey 3c40: 5f 73 65 73 73 69 6f 6e 20 63 61 63 6b 65 79 5f _session cackey_ 3c50: 73 65 73 73 69 6f 6e 73 5b 31 32 38 5d 3b 0a 73 sessions[128];.s 3c60: 74 61 74 69 63 20 73 74 72 75 63 74 20 63 61 63 tatic struct cac 3c70: 6b 65 79 5f 73 6c 6f 74 20 63 61 63 6b 65 79 5f key_slot cackey_ 3c80: 73 6c 6f 74 73 5b 31 32 38 5d 3b 0a 73 74 61 74 slots[128];.stat 3c90: 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 69 6e ic int cackey_in 3ca0: 69 74 69 61 6c 69 7a 65 64 20 3d 20 30 3b 0a 73 itialized = 0;.s 3cb0: 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 tatic int cackey 3cc0: 5f 62 69 67 6c 6f 63 6b 5f 69 6e 69 74 20 3d 20 _biglock_init = 3cd0: 30 3b 0a 43 4b 5f 43 5f 49 4e 49 54 49 41 4c 49 0;.CK_C_INITIALI 3ce0: 5a 45 5f 41 52 47 53 20 63 61 63 6b 65 79 5f 61 ZE_ARGS cackey_a 3cf0: 72 67 73 3b 0a 0a 2f 2a 20 50 43 53 43 20 47 6c rgs;../* PCSC Gl 3d00: 6f 62 61 6c 20 48 61 6e 64 6c 65 73 20 2a 2f 0a obal Handles */. 3d10: 73 74 61 74 69 63 20 4c 50 53 43 41 52 44 43 4f static LPSCARDCO 3d20: 4e 54 45 58 54 20 63 61 63 6b 65 79 5f 70 63 73 NTEXT cackey_pcs 3d30: 63 5f 68 61 6e 64 6c 65 20 3d 20 4e 55 4c 4c 3b c_handle = NULL; 3d40: 0a 0a 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 ..static unsigne 3d50: 64 20 6c 6f 6e 67 20 63 61 63 6b 65 79 5f 67 65 d long cackey_ge 3d60: 74 76 65 72 73 69 6f 6e 28 76 6f 69 64 29 20 7b tversion(void) { 3d70: 0a 09 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 ..static unsigne 3d80: 64 20 6c 6f 6e 67 20 72 65 74 76 61 6c 20 3d 20 d long retval = 3d90: 32 35 35 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 255;..unsigned l 3da0: 6f 6e 67 20 6d 61 6a 6f 72 20 3d 20 30 3b 0a 09 ong major = 0;.. 3db0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6d 69 unsigned long mi 3dc0: 6e 6f 72 20 3d 20 30 3b 0a 09 63 68 61 72 20 2a nor = 0;..char * 3dd0: 6d 61 6a 6f 72 5f 73 74 72 20 3d 20 4e 55 4c 4c major_str = NULL 3de0: 3b 0a 09 63 68 61 72 20 2a 6d 69 6e 6f 72 5f 73 ;..char *minor_s 3df0: 74 72 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 43 41 43 tr = NULL;...CAC 3e00: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 3e10: 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 3e20: 66 20 28 72 65 74 76 61 6c 20 21 3d 20 32 35 35 f (retval != 255 3e30: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 3e40: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 3e50: 6e 69 6e 67 20 30 78 25 6c 78 20 28 63 61 63 68 ning 0x%lx (cach 3e60: 65 64 29 2e 22 2c 20 72 65 74 76 61 6c 29 3b 0a ed).", retval);. 3e70: 0a 09 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c ...return(retval 3e80: 29 3b 0a 09 7d 0a 0a 09 72 65 74 76 61 6c 20 3d );..}...retval = 3e90: 20 30 3b 0a 0a 23 69 66 64 65 66 20 50 41 43 4b 0;..#ifdef PACK 3ea0: 41 47 45 5f 56 45 52 53 49 4f 4e 0a 20 20 20 20 AGE_VERSION. 3eb0: 20 20 20 20 6d 61 6a 6f 72 5f 73 74 72 20 3d 20 major_str = 3ec0: 50 41 43 4b 41 47 45 5f 56 45 52 53 49 4f 4e 3b PACKAGE_VERSION; 3ed0: 0a 09 69 66 20 28 6d 61 6a 6f 72 5f 73 74 72 29 ..if (major_str) 3ee0: 20 7b 0a 09 20 20 20 20 20 20 20 20 6d 61 6a 6f {.. majo 3ef0: 72 20 3d 20 73 74 72 74 6f 75 6c 28 6d 61 6a 6f r = strtoul(majo 3f00: 72 5f 73 74 72 2c 20 26 6d 69 6e 6f 72 5f 73 74 r_str, &minor_st 3f10: 72 2c 20 31 30 29 3b 0a 0a 09 09 69 66 20 28 6d r, 10);....if (m 3f20: 69 6e 6f 72 5f 73 74 72 29 20 7b 0a 09 09 09 6d inor_str) {....m 3f30: 69 6e 6f 72 20 3d 20 73 74 72 74 6f 75 6c 28 6d inor = strtoul(m 3f40: 69 6e 6f 72 5f 73 74 72 20 2b 20 31 2c 20 4e 55 inor_str + 1, NU 3f50: 4c 4c 2c 20 31 30 29 3b 0a 09 09 7d 0a 09 7d 0a LL, 10);...}..}. 3f60: 0a 09 72 65 74 76 61 6c 20 3d 20 28 6d 61 6a 6f ..retval = (majo 3f70: 72 20 3c 3c 20 31 36 29 20 7c 20 28 6d 69 6e 6f r << 16) | (mino 3f80: 72 20 3c 3c 20 38 29 3b 0a 23 65 6e 64 69 66 0a r << 8);.#endif. 3f90: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 3fa0: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 3fb0: 20 30 78 25 6c 78 22 2c 20 72 65 74 76 61 6c 29 0x%lx", retval) 3fc0: 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 ;...return(retva 3fd0: 6c 29 3b 0a 7d 0a 0a 2f 2a 20 50 43 2f 53 43 20 l);.}../* PC/SC 3fe0: 52 65 6c 61 74 65 64 20 46 75 6e 63 74 69 6f 6e Related Function 3ff0: 73 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 s */.static void 4000: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 cackey_slots_di 4010: 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 76 6f 69 sconnect_all(voi 4020: 64 29 20 7b 0a 09 75 69 6e 74 33 32 5f 74 20 69 d) {..uint32_t i 4030: 64 78 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 dx;...CACKEY_DEB 4040: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 4050: 64 2e 22 29 3b 0a 0a 09 66 6f 72 20 28 69 64 78 d.");...for (idx 4060: 20 3d 20 30 3b 20 69 64 78 20 3c 20 28 73 69 7a = 0; idx < (siz 4070: 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 eof(cackey_slots 4080: 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke 4090: 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 3b 20 69 64 y_slots[0])); id 40a0: 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63 61 63 x++) {...if (cac 40b0: 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 key_slots[idx].p 40c0: 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 csc_card_connect 40d0: 65 64 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f ed) {....CACKEY_ 40e0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 43 DEBUG_PRINTF("SC 40f0: 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 25 6c ardDisconnect(%l 4100: 75 29 20 63 61 6c 6c 65 64 22 2c 20 28 75 6e 73 u) called", (uns 4110: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 69 64 78 29 igned long) idx) 4120: 3b 0a 0a 09 09 09 53 43 61 72 64 44 69 73 63 6f ;.....SCardDisco 4130: 6e 6e 65 63 74 28 63 61 63 6b 65 79 5f 73 6c 6f nnect(cackey_slo 4140: 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 63 61 72 ts[idx].pcsc_car 4150: 64 2c 20 53 43 41 52 44 5f 4c 45 41 56 45 5f 43 d, SCARD_LEAVE_C 4160: 41 52 44 29 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 ARD);...}....cac 4170: 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 key_slots[idx].p 4180: 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 csc_card_connect 4190: 65 64 20 3d 20 30 3b 0a 09 7d 0a 0a 09 43 41 43 ed = 0;..}...CAC 41a0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 41b0: 28 22 52 65 74 75 72 6e 69 6e 67 22 29 3b 0a 0a ("Returning");.. 41c0: 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 73 74 61 74 .return;.}..stat 41d0: 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 70 63 ic int cackey_pc 41e0: 73 63 5f 63 6f 6e 6e 65 63 74 28 76 6f 69 64 29 sc_connect(void) 41f0: 20 7b 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f 65 {..LONG scard_e 4200: 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 3b 0a st_context_ret;. 4210: 23 69 66 64 65 66 20 48 41 56 45 5f 53 43 41 52 #ifdef HAVE_SCAR 4220: 44 49 53 56 41 4c 49 44 43 4f 4e 54 45 58 54 0a DISVALIDCONTEXT. 4230: 09 4c 4f 4e 47 20 73 63 61 72 64 5f 69 73 76 61 .LONG scard_isva 4240: 6c 69 64 5f 72 65 74 3b 0a 23 65 6e 64 69 66 0a lid_ret;.#endif. 4250: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 4260: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 4270: 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 70 ;...if (cackey_p 4280: 63 73 63 5f 68 61 6e 64 6c 65 20 3d 3d 20 4e 55 csc_handle == NU 4290: 4c 4c 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 70 LL) {...cackey_p 42a0: 63 73 63 5f 68 61 6e 64 6c 65 20 3d 20 6d 61 6c csc_handle = mal 42b0: 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 61 63 6b loc(sizeof(*cack 42c0: 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 29 ey_pcsc_handle)) 42d0: 3b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 70 ;...if (cackey_p 42e0: 63 73 63 5f 68 61 6e 64 6c 65 20 3d 3d 20 4e 55 csc_handle == NU 42f0: 4c 4c 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f LL) {....CACKEY_ 4300: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 4310: 6c 6c 20 74 6f 20 6d 61 6c 6c 6f 63 28 29 20 66 ll to malloc() f 4320: 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 69 6e 67 ailed, returning 4330: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. 4340: 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f ...cackey_slots_ 4350: 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 29 disconnect_all() 4360: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 ;.....return(-1) 4370: 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b 45 59 5f ;...}....CACKEY_ 4380: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 43 DEBUG_PRINTF("SC 4390: 61 72 64 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 ardEstablishCont 43a0: 65 78 74 28 29 20 63 61 6c 6c 65 64 22 29 3b 0a ext() called");. 43b0: 09 09 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 ..scard_est_cont 43c0: 65 78 74 5f 72 65 74 20 3d 20 53 43 61 72 64 45 ext_ret = SCardE 43d0: 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 28 stablishContext( 43e0: 53 43 41 52 44 5f 53 43 4f 50 45 5f 53 59 53 54 SCARD_SCOPE_SYST 43f0: 45 4d 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 EM, NULL, NULL, 4400: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 4410: 6c 65 29 3b 0a 09 09 69 66 20 28 73 63 61 72 64 le);...if (scard 4420: 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 _est_context_ret 4430: 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 != SCARD_S_SUCC 4440: 45 53 53 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 ESS) {....CACKEY 4450: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 4460: 61 6c 6c 20 74 6f 20 53 43 61 72 64 45 73 74 61 all to SCardEsta 4470: 62 6c 69 73 68 43 6f 6e 74 65 78 74 20 66 61 69 blishContext fai 4480: 6c 65 64 20 28 72 65 74 75 72 6e 65 64 20 25 73 led (returned %s 4490: 2f 25 6c 69 29 2c 20 72 65 74 75 72 6e 69 6e 67 /%li), returning 44a0: 20 69 6e 20 66 61 69 6c 75 72 65 22 2c 20 43 41 in failure", CA 44b0: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 44c0: 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 SCARDERR_TO_STR( 44d0: 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 scard_est_contex 44e0: 74 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20 73 t_ret), (long) s 44f0: 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 card_est_context 4500: 5f 72 65 74 29 3b 0a 0a 09 09 09 66 72 65 65 28 _ret);.....free( 4510: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 4520: 6c 65 29 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f le);.....cackey_ 4530: 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 slots_disconnect 4540: 5f 61 6c 6c 28 29 3b 0a 0a 09 09 09 72 65 74 75 _all();.....retu 4550: 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09 7d 0a 0a rn(-1);...}..}.. 4560: 23 69 66 64 65 66 20 48 41 56 45 5f 53 43 41 52 #ifdef HAVE_SCAR 4570: 44 49 53 56 41 4c 49 44 43 4f 4e 54 45 58 54 0a DISVALIDCONTEXT. 4580: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 4590: 49 4e 54 46 28 22 53 43 61 72 64 49 73 56 61 6c INTF("SCardIsVal 45a0: 69 64 43 6f 6e 74 65 78 74 28 29 20 63 61 6c 6c idContext() call 45b0: 65 64 22 29 3b 0a 09 73 63 61 72 64 5f 69 73 76 ed");..scard_isv 45c0: 61 6c 69 64 5f 72 65 74 20 3d 20 53 43 61 72 64 alid_ret = SCard 45d0: 49 73 56 61 6c 69 64 43 6f 6e 74 65 78 74 28 2a IsValidContext(* 45e0: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 45f0: 6c 65 29 3b 0a 09 69 66 20 28 73 63 61 72 64 5f le);..if (scard_ 4600: 69 73 76 61 6c 69 64 5f 72 65 74 20 21 3d 20 53 isvalid_ret != S 4610: 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 CARD_S_SUCCESS) 4620: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 4630: 5f 50 52 49 4e 54 46 28 22 48 61 6e 64 6c 65 20 _PRINTF("Handle 4640: 68 61 73 20 62 65 63 6f 6d 65 20 69 6e 76 61 6c has become inval 4650: 69 64 20 28 53 43 61 72 64 49 73 56 61 6c 69 64 id (SCardIsValid 4660: 43 6f 6e 74 65 78 74 20 3d 20 25 73 2f 25 6c 69 Context = %s/%li 4670: 29 2c 20 74 72 79 69 6e 67 20 74 6f 20 72 65 2d ), trying to re- 4680: 65 73 74 61 62 6c 69 73 68 2e 2e 2e 22 2c 20 43 establish...", C 4690: 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC 46a0: 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 _SCARDERR_TO_STR 46b0: 28 73 63 61 72 64 5f 69 73 76 61 6c 69 64 5f 72 (scard_isvalid_r 46c0: 65 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 et), (long) scar 46d0: 64 5f 69 73 76 61 6c 69 64 5f 72 65 74 29 3b 0a d_isvalid_ret);. 46e0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 46f0: 50 52 49 4e 54 46 28 22 53 43 61 72 64 45 73 74 PRINTF("SCardEst 4700: 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 28 29 20 ablishContext() 4710: 63 61 6c 6c 65 64 22 29 3b 0a 09 09 73 63 61 72 called");...scar 4720: 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 d_est_context_re 4730: 74 20 3d 20 53 43 61 72 64 45 73 74 61 62 6c 69 t = SCardEstabli 4740: 73 68 43 6f 6e 74 65 78 74 28 53 43 41 52 44 5f shContext(SCARD_ 4750: 53 43 4f 50 45 5f 53 59 53 54 45 4d 2c 20 4e 55 SCOPE_SYSTEM, NU 4760: 4c 4c 2c 20 4e 55 4c 4c 2c 20 63 61 63 6b 65 79 LL, NULL, cackey 4770: 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 _pcsc_handle);.. 4780: 09 69 66 20 28 73 63 61 72 64 5f 65 73 74 5f 63 .if (scard_est_c 4790: 6f 6e 74 65 78 74 5f 72 65 74 20 21 3d 20 53 43 ontext_ret != SC 47a0: 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b ARD_S_SUCCESS) { 47b0: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 47c0: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 20 74 6f _PRINTF("Call to 47d0: 20 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 43 SCardEstablishC 47e0: 6f 6e 74 65 78 74 20 66 61 69 6c 65 64 20 28 72 ontext failed (r 47f0: 65 74 75 72 6e 65 64 20 25 73 2f 25 6c 69 29 2c eturned %s/%li), 4800: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 returning in fa 4810: 69 6c 75 72 65 22 2c 20 43 41 43 4b 45 59 5f 44 ilure", CACKEY_D 4820: 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 EBUG_FUNC_SCARDE 4830: 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f RR_TO_STR(scard_ 4840: 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 29 est_context_ret) 4850: 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f 65 , (long) scard_e 4860: 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 29 3b st_context_ret); 4870: 0a 0a 09 09 09 66 72 65 65 28 63 61 63 6b 65 79 .....free(cackey 4880: 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 0a _pcsc_handle);.. 4890: 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f ...cackey_slots_ 48a0: 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 29 disconnect_all() 48b0: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 ;.....return(-1) 48c0: 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b 45 59 5f ;...}....CACKEY_ 48d0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 48 61 DEBUG_PRINTF("Ha 48e0: 6e 64 6c 65 20 68 61 73 20 62 65 65 6e 20 72 65 ndle has been re 48f0: 2d 65 73 74 61 62 6c 69 73 68 65 64 22 29 3b 0a -established");. 4900: 09 7d 0a 23 65 6e 64 69 66 0a 0a 09 43 41 43 4b .}.#endif...CACK 4910: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 4920: 22 53 75 63 65 73 73 66 75 6c 6c 79 20 63 6f 6e "Sucessfully con 4930: 6e 65 63 74 65 64 20 74 6f 20 50 43 2f 53 43 2c nected to PC/SC, 4940: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 returning in su 4950: 63 63 65 73 73 22 29 3b 0a 0a 09 72 65 74 75 72 ccess");...retur 4960: 6e 28 30 29 3b 0a 7d 0a 0a 2f 2a 20 41 50 44 55 n(0);.}../* APDU 4970: 20 52 65 6c 61 74 65 64 20 46 75 6e 63 74 69 6f Related Functio 4980: 6e 73 20 2a 2f 0a 2f 2a 2a 20 4c 65 20 3d 20 30 ns */./** Le = 0 4990: 78 30 30 20 74 6f 20 69 6e 64 69 63 61 74 65 20 x00 to indicate 49a0: 6e 6f 74 20 74 6f 20 73 65 6e 64 20 4c 65 20 2a not to send Le * 49b0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61 */.static int ca 49c0: 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 73 ckey_send_apdu(s 49d0: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f truct cackey_slo 49e0: 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 t *slot, unsigne 49f0: 64 20 63 68 61 72 20 63 6c 61 73 73 2c 20 75 6e d char class, un 4a00: 73 69 67 6e 65 64 20 63 68 61 72 20 69 6e 73 74 signed char inst 4a10: 72 75 63 74 69 6f 6e 2c 20 75 6e 73 69 67 6e 65 ruction, unsigne 4a20: 64 20 63 68 61 72 20 70 31 2c 20 75 6e 73 69 67 d char p1, unsig 4a30: 6e 65 64 20 63 68 61 72 20 70 32 2c 20 75 6e 73 ned char p2, uns 4a40: 69 67 6e 65 64 20 63 68 61 72 20 6c 63 2c 20 75 igned char lc, u 4a50: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 64 61 nsigned char *da 4a60: 74 61 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 ta, unsigned cha 4a70: 72 20 6c 65 2c 20 75 69 6e 74 31 36 5f 74 20 2a r le, uint16_t * 4a80: 72 65 73 70 63 6f 64 65 2c 20 75 6e 73 69 67 6e respcode, unsign 4a90: 65 64 20 63 68 61 72 20 2a 72 65 73 70 64 61 74 ed char *respdat 4aa0: 61 2c 20 73 69 7a 65 5f 74 20 2a 72 65 73 70 64 a, size_t *respd 4ab0: 61 74 61 5f 6c 65 6e 29 20 7b 0a 09 75 69 6e 74 ata_len) {..uint 4ac0: 38 5f 74 20 6d 61 6a 6f 72 5f 72 63 2c 20 6d 69 8_t major_rc, mi 4ad0: 6e 6f 72 5f 72 63 3b 0a 09 73 69 7a 65 5f 74 20 nor_rc;..size_t 4ae0: 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 2c 20 74 bytes_to_copy, t 4af0: 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 6e 3b mp_respdata_len; 4b00: 0a 09 44 57 4f 52 44 20 70 72 6f 74 6f 63 6f 6c ..DWORD protocol 4b10: 3b 0a 09 44 57 4f 52 44 20 78 6d 69 74 5f 6c 65 ;..DWORD xmit_le 4b20: 6e 2c 20 72 65 63 76 5f 6c 65 6e 3b 0a 09 4c 4f n, recv_len;..LO 4b30: 4e 47 20 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 NG scard_conn_re 4b40: 74 2c 20 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 t, scard_xmit_re 4b50: 74 2c 20 73 63 61 72 64 5f 72 65 63 6f 6e 6e 5f t, scard_reconn_ 4b60: 72 65 74 3b 0a 09 42 59 54 45 20 78 6d 69 74 5f ret;..BYTE xmit_ 4b70: 62 75 66 5b 31 30 32 34 5d 2c 20 72 65 63 76 5f buf[1024], recv_ 4b80: 62 75 66 5b 31 30 32 34 5d 3b 0a 09 69 6e 74 20 buf[1024];..int 4b90: 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 pcsc_connect_ret 4ba0: 2c 20 70 63 73 63 5f 67 65 74 72 65 73 70 5f 72 , pcsc_getresp_r 4bb0: 65 74 3b 0a 09 69 6e 74 20 69 64 78 3b 0a 0a 09 et;..int idx;... 4bc0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 4bd0: 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 4be0: 0a 09 69 66 20 28 21 73 6c 6f 74 29 20 7b 0a 09 ..if (!slot) {.. 4bf0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 4c00: 49 4e 54 46 28 22 49 6e 76 61 6c 69 64 20 73 6c INTF("Invalid sl 4c10: 6f 74 20 73 70 65 63 69 66 69 65 64 2e 22 29 3b ot specified."); 4c20: 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. 4c30: 09 7d 0a 0a 09 70 63 73 63 5f 63 6f 6e 6e 65 63 .}...pcsc_connec 4c40: 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 70 t_ret = cackey_p 4c50: 63 73 63 5f 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 csc_connect();.. 4c60: 69 66 20 28 70 63 73 63 5f 63 6f 6e 6e 65 63 74 if (pcsc_connect 4c70: 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 43 41 _ret < 0) {...CA 4c80: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 4c90: 46 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f F("Connection to 4ca0: 20 50 43 2f 53 43 20 66 61 69 6c 65 64 2c 20 72 PC/SC failed, r 4cb0: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail 4cc0: 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ure");....return 4cd0: 28 2d 31 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 43 6f (-1);..}.../* Co 4ce0: 6e 6e 65 63 74 20 74 6f 20 72 65 61 64 65 72 2c nnect to reader, 4cf0: 20 69 66 20 6e 65 65 64 65 64 20 2a 2f 0a 09 69 if needed */..i 4d00: 66 20 28 21 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 f (!slot->pcsc_c 4d10: 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 29 20 7b ard_connected) { 4d20: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 4d30: 50 52 49 4e 54 46 28 22 53 43 61 72 64 43 6f 6e PRINTF("SCardCon 4d40: 6e 65 63 74 28 25 73 29 20 63 61 6c 6c 65 64 22 nect(%s) called" 4d50: 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 , slot->pcsc_rea 4d60: 64 65 72 29 3b 0a 09 09 73 63 61 72 64 5f 63 6f der);...scard_co 4d70: 6e 6e 5f 72 65 74 20 3d 20 53 43 61 72 64 43 6f nn_ret = SCardCo 4d80: 6e 6e 65 63 74 28 2a 63 61 63 6b 65 79 5f 70 63 nnect(*cackey_pc 4d90: 73 63 5f 68 61 6e 64 6c 65 2c 20 73 6c 6f 74 2d sc_handle, slot- 4da0: 3e 70 63 73 63 5f 72 65 61 64 65 72 2c 20 53 43 >pcsc_reader, SC 4db0: 41 52 44 5f 53 48 41 52 45 5f 53 48 41 52 45 44 ARD_SHARE_SHARED 4dc0: 2c 20 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c , SCARD_PROTOCOL 4dd0: 5f 54 30 2c 20 26 73 6c 6f 74 2d 3e 70 63 73 63 _T0, &slot->pcsc 4de0: 5f 63 61 72 64 2c 20 26 70 72 6f 74 6f 63 6f 6c _card, &protocol 4df0: 29 3b 0a 0a 09 09 69 66 20 28 73 63 61 72 64 5f );....if (scard_ 4e00: 63 6f 6e 6e 5f 72 65 74 20 21 3d 20 53 43 41 52 conn_ret != SCAR 4e10: 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 D_S_SUCCESS) {.. 4e20: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 4e30: 52 49 4e 54 46 28 22 43 6f 6e 6e 65 63 74 69 6f RINTF("Connectio 4e40: 6e 20 74 6f 20 63 61 72 64 20 66 61 69 6c 65 64 n to card failed 4e50: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f 4e60: 61 69 6c 75 72 65 20 28 53 43 61 72 64 43 6f 6e ailure (SCardCon 4e70: 6e 65 63 74 28 29 20 3d 20 25 73 2f 25 6c 69 29 nect() = %s/%li) 4e80: 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ", CACKEY_DEBUG_ 4e90: 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f FUNC_SCARDERR_TO 4ea0: 5f 53 54 52 28 73 63 61 72 64 5f 63 6f 6e 6e 5f _STR(scard_conn_ 4eb0: 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 61 ret), (long) sca 4ec0: 72 64 5f 63 6f 6e 6e 5f 72 65 74 29 3b 0a 0a 09 rd_conn_ret);... 4ed0: 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 ..return(-1);... 4ee0: 7d 0a 0a 09 09 73 6c 6f 74 2d 3e 70 63 73 63 5f }....slot->pcsc_ 4ef0: 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d card_connected = 4f00: 20 31 3b 0a 09 7d 0a 0a 09 2f 2a 20 54 72 61 6e 1;..}.../* Tran 4f10: 73 6d 69 74 20 2a 2f 0a 09 78 6d 69 74 5f 6c 65 smit */..xmit_le 4f20: 6e 20 3d 20 30 3b 0a 09 78 6d 69 74 5f 62 75 66 n = 0;..xmit_buf 4f30: 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 63 [xmit_len++] = c 4f40: 6c 61 73 73 3b 0a 09 78 6d 69 74 5f 62 75 66 5b lass;..xmit_buf[ 4f50: 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 69 6e xmit_len++] = in 4f60: 73 74 72 75 63 74 69 6f 6e 3b 0a 09 78 6d 69 74 struction;..xmit 4f70: 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d _buf[xmit_len++] 4f80: 20 3d 20 70 31 3b 0a 09 78 6d 69 74 5f 62 75 66 = p1;..xmit_buf 4f90: 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 70 [xmit_len++] = p 4fa0: 32 3b 0a 09 69 66 20 28 64 61 74 61 29 20 7b 0a 2;..if (data) {. 4fb0: 09 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f ..xmit_buf[xmit_ 4fc0: 6c 65 6e 2b 2b 5d 20 3d 20 6c 63 3b 0a 09 09 66 len++] = lc;...f 4fd0: 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 or (idx = 0; idx 4fe0: 20 3c 20 6c 63 3b 20 69 64 78 2b 2b 29 20 7b 0a < lc; idx++) {. 4ff0: 09 09 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 ...xmit_buf[xmit 5000: 5f 6c 65 6e 2b 2b 5d 20 3d 20 64 61 74 61 5b 69 _len++] = data[i 5010: 64 78 5d 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 dx];...}..}...if 5020: 20 28 6c 65 20 21 3d 20 30 78 30 30 29 20 7b 0a (le != 0x00) {. 5030: 09 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f ..xmit_buf[xmit_ 5040: 6c 65 6e 2b 2b 5d 20 3d 20 6c 65 3b 0a 09 7d 0a len++] = le;..}. 5050: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 5060: 52 49 4e 54 42 55 46 28 22 53 65 6e 64 69 6e 67 RINTBUF("Sending 5070: 20 41 50 44 55 3a 22 2c 20 78 6d 69 74 5f 62 75 APDU:", xmit_bu 5080: 66 2c 20 78 6d 69 74 5f 6c 65 6e 29 3b 0a 0a 09 f, xmit_len);... 5090: 72 65 63 76 5f 6c 65 6e 20 3d 20 73 69 7a 65 6f recv_len = sizeo 50a0: 66 28 72 65 63 76 5f 62 75 66 29 3b 0a 09 73 63 f(recv_buf);..sc 50b0: 61 72 64 5f 78 6d 69 74 5f 72 65 74 20 3d 20 53 ard_xmit_ret = S 50c0: 43 61 72 64 54 72 61 6e 73 6d 69 74 28 73 6c 6f CardTransmit(slo 50d0: 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 t->pcsc_card, SC 50e0: 41 52 44 5f 50 43 49 5f 54 30 2c 20 78 6d 69 74 ARD_PCI_T0, xmit 50f0: 5f 62 75 66 2c 20 78 6d 69 74 5f 6c 65 6e 2c 20 _buf, xmit_len, 5100: 53 43 41 52 44 5f 50 43 49 5f 54 31 2c 20 72 65 SCARD_PCI_T1, re 5110: 63 76 5f 62 75 66 2c 20 26 72 65 63 76 5f 6c 65 cv_buf, &recv_le 5120: 6e 29 3b 0a 09 69 66 20 28 73 63 61 72 64 5f 78 n);..if (scard_x 5130: 6d 69 74 5f 72 65 74 20 21 3d 20 53 43 41 52 44 mit_ret != SCARD 5140: 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 _S_SUCCESS) {... 5150: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 5160: 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 73 NTF("Failed to s 5170: 65 6e 64 20 41 50 44 55 20 74 6f 20 63 61 72 64 end APDU to card 5180: 20 28 53 43 61 72 64 54 72 61 6e 73 6d 69 74 28 (SCardTransmit( 5190: 29 20 3d 20 25 73 2f 25 6c 78 29 22 2c 20 43 41 ) = %s/%lx)", CA 51a0: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 51b0: 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 SCARDERR_TO_STR( 51c0: 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 2c scard_xmit_ret), 51d0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 51e0: 20 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 scard_xmit_ret) 51f0: 3b 0a 0a 09 09 69 66 20 28 73 63 61 72 64 5f 78 ;....if (scard_x 5200: 6d 69 74 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 mit_ret == SCARD 5210: 5f 57 5f 52 45 53 45 54 5f 43 41 52 44 29 20 7b _W_RESET_CARD) { 5220: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 5230: 5f 50 52 49 4e 54 46 28 22 52 65 73 65 74 20 72 _PRINTF("Reset r 5240: 65 71 75 69 72 65 64 2c 20 70 6c 65 61 73 65 20 equired, please 5250: 68 6f 6c 64 2e 2e 2e 22 29 3b 0a 0a 09 09 09 73 hold...");.....s 5260: 63 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 20 card_reconn_ret 5270: 3d 20 53 43 61 72 64 52 65 63 6f 6e 6e 65 63 74 = SCardReconnect 5280: 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 (slot->pcsc_card 5290: 2c 20 53 43 41 52 44 5f 53 48 41 52 45 5f 53 48 , SCARD_SHARE_SH 52a0: 41 52 45 44 2c 20 53 43 41 52 44 5f 50 52 4f 54 ARED, SCARD_PROT 52b0: 4f 43 4f 4c 5f 54 30 2c 20 53 43 41 52 44 5f 52 OCOL_T0, SCARD_R 52c0: 45 53 45 54 5f 43 41 52 44 2c 20 26 70 72 6f 74 ESET_CARD, &prot 52d0: 6f 63 6f 6c 29 3b 0a 09 09 09 69 66 20 28 73 63 ocol);....if (sc 52e0: 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 20 3d ard_reconn_ret = 52f0: 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 = SCARD_S_SUCCES 5300: 53 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f S) {.....CACKEY_ 5310: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 5320: 73 65 74 20 73 75 63 63 65 73 73 66 75 6c 2c 20 set successful, 5330: 72 65 74 72 61 6e 73 6d 69 74 74 69 6e 67 22 29 retransmitting") 5340: 3b 0a 09 09 09 09 73 63 61 72 64 5f 78 6d 69 74 ;.....scard_xmit 5350: 5f 72 65 74 20 3d 20 53 43 61 72 64 54 72 61 6e _ret = SCardTran 5360: 73 6d 69 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f smit(slot->pcsc_ 5370: 63 61 72 64 2c 20 53 43 41 52 44 5f 50 43 49 5f card, SCARD_PCI_ 5380: 54 30 2c 20 78 6d 69 74 5f 62 75 66 2c 20 78 6d T0, xmit_buf, xm 5390: 69 74 5f 6c 65 6e 2c 20 53 43 41 52 44 5f 50 43 it_len, SCARD_PC 53a0: 49 5f 54 30 2c 20 72 65 63 76 5f 62 75 66 2c 20 I_T0, recv_buf, 53b0: 26 72 65 63 76 5f 6c 65 6e 29 3b 0a 0a 09 09 09 &recv_len);..... 53c0: 09 69 66 20 28 73 63 61 72 64 5f 78 6d 69 74 5f .if (scard_xmit_ 53d0: 72 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 ret != SCARD_S_S 53e0: 55 43 43 45 53 53 29 20 7b 0a 09 09 09 09 09 43 UCCESS) {......C 53f0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 5400: 54 46 28 22 52 65 74 72 61 6e 73 6d 69 74 20 66 TF("Retransmit f 5410: 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 69 6e 67 ailed, returning 5420: 20 69 6e 20 66 61 69 6c 75 72 65 20 61 66 74 65 in failure afte 5430: 72 20 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 r disconnecting 5440: 74 68 65 20 63 61 72 64 20 28 53 43 61 72 64 54 the card (SCardT 5450: 72 61 6e 73 6d 69 74 20 3d 20 25 73 2f 25 6c 69 ransmit = %s/%li 5460: 29 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 )", CACKEY_DEBUG 5470: 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 _FUNC_SCARDERR_T 5480: 4f 5f 53 54 52 28 73 63 61 72 64 5f 78 6d 69 74 O_STR(scard_xmit 5490: 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 _ret), (long) sc 54a0: 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 3b 0a 0a ard_xmit_ret);.. 54b0: 09 09 09 09 09 53 43 61 72 64 44 69 73 63 6f 6e .....SCardDiscon 54c0: 6e 65 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f nect(slot->pcsc_ 54d0: 63 61 72 64 2c 20 53 43 41 52 44 5f 52 45 53 45 card, SCARD_RESE 54e0: 54 5f 43 41 52 44 29 3b 0a 09 09 09 09 09 73 6c T_CARD);......sl 54f0: 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f 63 6f ot->pcsc_card_co 5500: 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a 0a 09 09 nnected = 0;.... 5510: 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. 5520: 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65 20 7b ...}....} else { 5530: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 5540: 47 5f 50 52 49 4e 54 46 28 22 44 69 73 63 6f 6e G_PRINTF("Discon 5550: 6e 65 63 74 69 6e 67 20 63 61 72 64 22 29 3b 0a necting card");. 5560: 0a 09 09 09 09 53 43 61 72 64 44 69 73 63 6f 6e .....SCardDiscon 5570: 6e 65 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f nect(slot->pcsc_ 5580: 63 61 72 64 2c 20 53 43 41 52 44 5f 52 45 53 45 card, SCARD_RESE 5590: 54 5f 43 41 52 44 29 3b 0a 09 09 09 09 73 6c 6f T_CARD);.....slo 55a0: 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e t->pcsc_card_con 55b0: 6e 65 63 74 65 64 20 3d 20 30 3b 0a 0a 09 09 09 nected = 0;..... 55c0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 55d0: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 55e0: 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 09 09 in failure");... 55f0: 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 ..return(-1);... 5600: 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 .}...} else {... 5610: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 5620: 49 4e 54 46 28 22 44 69 73 63 6f 6e 6e 65 63 74 INTF("Disconnect 5630: 69 6e 67 20 63 61 72 64 22 29 3b 0a 0a 09 09 09 ing card");..... 5640: 53 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 SCardDisconnect( 5650: 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c slot->pcsc_card, 5660: 20 53 43 41 52 44 5f 52 45 53 45 54 5f 43 41 52 SCARD_RESET_CAR 5670: 44 29 3b 0a 09 09 09 73 6c 6f 74 2d 3e 70 63 73 D);....slot->pcs 5680: 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 c_card_connected 5690: 20 3d 20 30 3b 0a 0a 09 09 09 43 41 43 4b 45 59 = 0;.....CACKEY 56a0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 56b0: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail 56c0: 75 72 65 22 29 3b 0a 09 09 09 72 65 74 75 72 6e ure");....return 56d0: 28 2d 31 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 43 (-1);...}..}...C 56e0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 56f0: 54 42 55 46 28 22 52 65 74 75 72 6e 65 64 20 56 TBUF("Returned V 5700: 61 6c 75 65 3a 22 2c 20 72 65 63 76 5f 62 75 66 alue:", recv_buf 5710: 2c 20 72 65 63 76 5f 6c 65 6e 29 3b 0a 0a 09 69 , recv_len);...i 5720: 66 20 28 72 65 63 76 5f 6c 65 6e 20 3c 20 32 29 f (recv_len < 2) 5730: 20 7b 0a 09 09 2f 2a 20 4d 69 6e 69 6d 61 6c 20 {.../* Minimal 5740: 72 65 73 70 6f 6e 73 65 20 6c 65 6e 67 74 68 20 response length 5750: 69 73 20 32 20 62 79 74 65 73 2c 20 72 65 74 75 is 2 bytes, retu 5760: 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 rning in failure 5770: 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 */...CACKEY_DEB 5780: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 73 70 6f UG_PRINTF("Respo 5790: 6e 73 65 20 74 6f 6f 20 73 6d 61 6c 6c 2c 20 72 nse too small, r 57a0: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail 57b0: 75 72 65 20 28 72 65 63 76 5f 6c 65 6e 20 3d 20 ure (recv_len = 57c0: 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 %lu)", (unsigned 57d0: 20 6c 6f 6e 67 29 20 72 65 63 76 5f 6c 65 6e 29 long) recv_len) 57e0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b ;....return(-1); 57f0: 0a 09 7d 0a 0a 09 2f 2a 20 44 65 74 65 72 6d 69 ..}.../* Determi 5800: 6e 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 2a ne result code * 5810: 2f 0a 09 6d 61 6a 6f 72 5f 72 63 20 3d 20 72 65 /..major_rc = re 5820: 63 76 5f 62 75 66 5b 72 65 63 76 5f 6c 65 6e 20 cv_buf[recv_len 5830: 2d 20 32 5d 3b 0a 09 6d 69 6e 6f 72 5f 72 63 20 - 2];..minor_rc 5840: 3d 20 72 65 63 76 5f 62 75 66 5b 72 65 63 76 5f = recv_buf[recv_ 5850: 6c 65 6e 20 2d 20 31 5d 3b 0a 09 69 66 20 28 72 len - 1];..if (r 5860: 65 73 70 63 6f 64 65 29 20 7b 0a 09 09 2a 72 65 espcode) {...*re 5870: 73 70 63 6f 64 65 20 3d 20 28 6d 61 6a 6f 72 5f spcode = (major_ 5880: 72 63 20 3c 3c 20 38 29 20 7c 20 6d 69 6e 6f 72 rc << 8) | minor 5890: 5f 72 63 3b 0a 09 7d 0a 0a 09 2f 2a 20 41 64 6a _rc;..}.../* Adj 58a0: 75 73 74 20 6d 65 73 73 61 67 65 20 62 75 66 66 ust message buff 58b0: 65 72 20 2a 2f 0a 09 72 65 63 76 5f 6c 65 6e 20 er */..recv_len 58c0: 2d 3d 20 32 3b 0a 0a 09 2f 2a 20 41 64 64 20 62 -= 2;.../* Add b 58d0: 79 74 65 73 20 74 6f 20 72 65 74 75 72 6e 20 76 ytes to return v 58e0: 61 6c 75 65 20 2a 2f 0a 09 74 6d 70 5f 72 65 73 alue */..tmp_res 58f0: 70 64 61 74 61 5f 6c 65 6e 20 3d 20 30 3b 0a 09 pdata_len = 0;.. 5900: 69 66 20 28 72 65 73 70 64 61 74 61 20 26 26 20 if (respdata && 5910: 72 65 73 70 64 61 74 61 5f 6c 65 6e 29 20 7b 0a respdata_len) {. 5920: 09 09 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c ..tmp_respdata_l 5930: 65 6e 20 3d 20 2a 72 65 73 70 64 61 74 61 5f 6c en = *respdata_l 5940: 65 6e 3b 0a 0a 09 09 62 79 74 65 73 5f 74 6f 5f en;....bytes_to_ 5950: 63 6f 70 79 20 3d 20 2a 72 65 73 70 64 61 74 61 copy = *respdata 5960: 5f 6c 65 6e 3b 0a 0a 09 09 69 66 20 28 72 65 63 _len;....if (rec 5970: 76 5f 6c 65 6e 20 3c 20 62 79 74 65 73 5f 74 6f v_len < bytes_to 5980: 5f 63 6f 70 79 29 20 7b 0a 09 09 09 62 79 74 65 _copy) {....byte 5990: 73 5f 74 6f 5f 63 6f 70 79 20 3d 20 72 65 63 76 s_to_copy = recv 59a0: 5f 6c 65 6e 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 _len;...}....CAC 59b0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 59c0: 28 22 43 6f 70 79 69 6e 67 20 25 6c 75 20 62 79 ("Copying %lu by 59d0: 74 65 73 20 74 6f 20 74 68 65 20 62 75 66 66 65 tes to the buffe 59e0: 72 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f r", (unsigned lo 59f0: 6e 67 29 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 ng) bytes_to_cop 5a00: 79 29 3b 0a 0a 09 09 6d 65 6d 63 70 79 28 72 65 y);....memcpy(re 5a10: 73 70 64 61 74 61 2c 20 72 65 63 76 5f 62 75 66 spdata, recv_buf 5a20: 2c 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 , bytes_to_copy) 5a30: 3b 0a 09 09 72 65 73 70 64 61 74 61 20 2b 3d 20 ;...respdata += 5a40: 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a 0a bytes_to_copy;.. 5a50: 09 09 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e 20 ..*respdata_len 5a60: 3d 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b = bytes_to_copy; 5a70: 0a 09 09 74 6d 70 5f 72 65 73 70 64 61 74 61 5f ...tmp_respdata_ 5a80: 6c 65 6e 20 2d 3d 20 62 79 74 65 73 5f 74 6f 5f len -= bytes_to_ 5a90: 63 6f 70 79 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a copy;..} else {. 5aa0: 09 09 69 66 20 28 72 65 63 76 5f 6c 65 6e 20 21 ..if (recv_len ! 5ab0: 3d 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 = 0) {....CACKEY 5ac0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 54 _DEBUG_PRINTF("T 5ad0: 68 72 6f 77 69 6e 67 20 61 77 61 79 20 25 6c 75 hrowing away %lu 5ae0: 20 62 79 74 65 73 2c 20 6e 6f 77 68 65 72 65 20 bytes, nowhere 5af0: 74 6f 20 70 75 74 20 74 68 65 6d 21 22 2c 20 28 to put them!", ( 5b00: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 72 unsigned long) r 5b10: 65 63 76 5f 6c 65 6e 29 3b 0a 09 09 7d 0a 09 7d ecv_len);...}..} 5b20: 0a 0a 09 69 66 20 28 6d 61 6a 6f 72 5f 72 63 20 ...if (major_rc 5b30: 3d 3d 20 30 78 36 31 29 20 7b 0a 09 09 2f 2a 20 == 0x61) {.../* 5b40: 57 65 20 6e 65 65 64 20 74 6f 20 52 45 41 44 20 We need to READ 5b50: 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 */...CACKEY_DEBU 5b60: 47 5f 50 52 49 4e 54 46 28 22 42 75 66 66 65 72 G_PRINTF("Buffer 5b70: 20 72 65 61 64 20 72 65 71 75 69 72 65 64 22 29 read required") 5b80: 3b 0a 0a 09 09 70 63 73 63 5f 67 65 74 72 65 73 ;....pcsc_getres 5b90: 70 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 p_ret = cackey_s 5ba0: 65 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c 20 47 end_apdu(slot, G 5bb0: 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 SCIS_CLASS_ISO78 5bc0: 31 36 2c 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 16, GSCIS_INSTR_ 5bd0: 47 45 54 5f 52 45 53 50 4f 4e 53 45 2c 20 30 78 GET_RESPONSE, 0x 5be0: 30 30 2c 20 30 78 30 30 2c 20 30 2c 20 4e 55 4c 00, 0x00, 0, NUL 5bf0: 4c 2c 20 6d 69 6e 6f 72 5f 72 63 2c 20 72 65 73 L, minor_rc, res 5c00: 70 63 6f 64 65 2c 20 72 65 73 70 64 61 74 61 2c pcode, respdata, 5c10: 20 26 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c &tmp_respdata_l 5c20: 65 6e 29 3b 0a 09 09 69 66 20 28 70 63 73 63 5f en);...if (pcsc_ 5c30: 67 65 74 72 65 73 70 5f 72 65 74 20 3c 20 30 29 getresp_ret < 0) 5c40: 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB 5c50: 55 47 5f 50 52 49 4e 54 46 28 22 42 75 66 66 65 UG_PRINTF("Buffe 5c60: 72 20 72 65 61 64 20 66 61 69 6c 65 64 21 20 20 r read failed! 5c70: 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 Returning in fai 5c80: 6c 75 72 65 22 29 3b 0a 0a 09 09 09 72 65 74 75 lure");.....retu 5c90: 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 69 rn(-1);...}....i 5ca0: 66 20 28 72 65 73 70 64 61 74 61 5f 6c 65 6e 29 f (respdata_len) 5cb0: 20 7b 0a 09 09 09 2a 72 65 73 70 64 61 74 61 5f {....*respdata_ 5cc0: 6c 65 6e 20 2b 3d 20 74 6d 70 5f 72 65 73 70 64 len += tmp_respd 5cd0: 61 74 61 5f 6c 65 6e 3b 0a 09 09 7d 0a 0a 09 09 ata_len;...}.... 5ce0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 5cf0: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 NTF("Returning i 5d00: 6e 20 73 75 63 63 65 73 73 20 28 62 75 66 66 65 n success (buffe 5d10: 72 20 72 65 61 64 20 63 6f 6d 70 6c 65 74 65 29 r read complete) 5d20: 22 29 3b 0a 09 09 72 65 74 75 72 6e 28 30 29 3b ");...return(0); 5d30: 0a 09 7d 0a 0a 09 69 66 20 28 6d 61 6a 6f 72 5f ..}...if (major_ 5d40: 72 63 20 3d 3d 20 30 78 39 30 29 20 7b 0a 09 09 rc == 0x90) {... 5d50: 2f 2a 20 53 75 63 63 65 73 73 20 2a 2f 0a 09 09 /* Success */... 5d60: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 5d70: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 NTF("Returning i 5d80: 6e 20 73 75 63 63 65 73 73 20 28 6d 61 6a 6f 72 n success (major 5d90: 5f 72 63 20 3d 20 30 78 39 30 29 22 29 3b 0a 0a _rc = 0x90)");.. 5da0: 09 09 72 65 74 75 72 6e 28 30 29 3b 0a 09 7d 0a ..return(0);..}. 5db0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 5dc0: 50 52 49 4e 54 46 28 22 41 50 44 55 20 52 65 74 PRINTF("APDU Ret 5dd0: 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 urned an error, 5de0: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai 5df0: 6c 75 72 65 22 29 3b 0a 0a 09 72 65 74 75 72 6e lure");...return 5e00: 28 2d 31 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 (-1);.}..static 5e10: 73 73 69 7a 65 5f 74 20 63 61 63 6b 65 79 5f 72 ssize_t cackey_r 5e20: 65 61 64 5f 62 75 66 66 65 72 28 73 74 72 75 63 ead_buffer(struc 5e30: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 t cackey_slot *s 5e40: 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 lot, unsigned ch 5e50: 61 72 20 2a 62 75 66 66 65 72 2c 20 73 69 7a 65 ar *buffer, size 5e60: 5f 74 20 63 6f 75 6e 74 2c 20 75 6e 73 69 67 6e _t count, unsign 5e70: 65 64 20 63 68 61 72 20 74 5f 6f 72 5f 76 2c 20 ed char t_or_v, 5e80: 73 69 7a 65 5f 74 20 69 6e 69 74 69 61 6c 5f 6f size_t initial_o 5e90: 66 66 73 65 74 29 20 7b 0a 09 73 69 7a 65 5f 74 ffset) {..size_t 5ea0: 20 6f 66 66 73 65 74 20 3d 20 30 2c 20 6d 61 78 offset = 0, max 5eb0: 5f 6f 66 66 73 65 74 2c 20 6d 61 78 5f 63 6f 75 _offset, max_cou 5ec0: 6e 74 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 nt;..unsigned ch 5ed0: 61 72 20 63 6d 64 5b 32 5d 3b 0a 09 75 69 6e 74 ar cmd[2];..uint 5ee0: 31 36 5f 74 20 72 65 73 70 63 6f 64 65 3b 0a 09 16_t respcode;.. 5ef0: 69 6e 74 20 73 65 6e 64 5f 72 65 74 3b 0a 0a 09 int send_ret;... 5f00: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 5f10: 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 5f20: 0a 09 6d 61 78 5f 6f 66 66 73 65 74 20 3d 20 63 ..max_offset = c 5f30: 6f 75 6e 74 3b 0a 09 6d 61 78 5f 63 6f 75 6e 74 ount;..max_count 5f40: 20 3d 20 32 35 32 3b 0a 0a 09 63 6d 64 5b 30 5d = 252;...cmd[0] 5f50: 20 3d 20 74 5f 6f 72 5f 76 3b 0a 0a 09 77 68 69 = t_or_v;...whi 5f60: 6c 65 20 28 31 29 20 7b 0a 09 09 69 66 20 28 6f le (1) {...if (o 5f70: 66 66 73 65 74 20 3e 3d 20 6d 61 78 5f 6f 66 66 ffset >= max_off 5f80: 73 65 74 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 set) {....CACKEY 5f90: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 42 _DEBUG_PRINTF("B 5fa0: 75 66 66 65 72 20 74 6f 6f 20 73 6d 61 6c 6c 2c uffer too small, 5fb0: 20 72 65 74 75 72 6e 69 6e 67 20 77 68 61 74 20 returning what 5fc0: 77 65 20 67 6f 74 2e 2e 2e 22 29 3b 0a 0a 09 09 we got...");.... 5fd0: 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09 63 .break;...}....c 5fe0: 6f 75 6e 74 20 3d 20 6d 61 78 5f 6f 66 66 73 65 ount = max_offse 5ff0: 74 20 2d 20 6f 66 66 73 65 74 3b 0a 09 09 69 66 t - offset;...if 6000: 20 28 63 6f 75 6e 74 20 3e 20 6d 61 78 5f 63 6f (count > max_co 6010: 75 6e 74 29 20 7b 0a 09 09 09 63 6f 75 6e 74 20 unt) {....count 6020: 3d 20 6d 61 78 5f 63 6f 75 6e 74 3b 0a 09 09 7d = max_count;...} 6030: 0a 0a 09 09 63 6d 64 5b 31 5d 20 3d 20 63 6f 75 ....cmd[1] = cou 6040: 6e 74 3b 0a 0a 09 09 73 65 6e 64 5f 72 65 74 20 nt;....send_ret 6050: 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 = cackey_send_ap 6060: 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 du(slot, GSCIS_C 6070: 4c 41 53 53 5f 47 4c 4f 42 41 4c 5f 50 4c 41 54 LASS_GLOBAL_PLAT 6080: 46 4f 52 4d 2c 20 47 53 43 49 53 5f 49 4e 53 54 FORM, GSCIS_INST 6090: 52 5f 52 45 41 44 5f 42 55 46 46 45 52 2c 20 28 R_READ_BUFFER, ( 60a0: 28 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 20 (initial_offset 60b0: 2b 20 6f 66 66 73 65 74 29 20 3e 3e 20 38 29 20 + offset) >> 8) 60c0: 26 20 30 78 66 66 2c 20 28 69 6e 69 74 69 61 6c & 0xff, (initial 60d0: 5f 6f 66 66 73 65 74 20 2b 20 6f 66 66 73 65 74 _offset + offset 60e0: 29 20 26 20 30 78 66 66 2c 20 73 69 7a 65 6f 66 ) & 0xff, sizeof 60f0: 28 63 6d 64 29 2c 20 63 6d 64 2c 20 30 78 30 30 (cmd), cmd, 0x00 6100: 2c 20 26 72 65 73 70 63 6f 64 65 2c 20 62 75 66 , &respcode, buf 6110: 66 65 72 20 2b 20 6f 66 66 73 65 74 2c 20 26 63 fer + offset, &c 6120: 6f 75 6e 74 29 3b 0a 09 09 69 66 20 28 73 65 6e ount);...if (sen 6130: 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 09 d_ret < 0) {.... 6140: 69 66 20 28 72 65 73 70 63 6f 64 65 20 3d 3d 20 if (respcode == 6150: 30 78 36 41 38 36 29 20 7b 0a 09 09 09 09 69 66 0x6A86) {.....if 6160: 20 28 6d 61 78 5f 63 6f 75 6e 74 20 3d 3d 20 31 (max_count == 1 6170: 29 20 7b 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a ) {......break;. 6180: 09 09 09 09 7d 0a 0a 09 09 09 09 6d 61 78 5f 63 ....}......max_c 6190: 6f 75 6e 74 20 3d 20 6d 61 78 5f 63 6f 75 6e 74 ount = max_count 61a0: 20 2f 20 32 3b 0a 0a 09 09 09 09 63 6f 6e 74 69 / 2;......conti 61b0: 6e 75 65 3b 0a 09 09 09 7d 0a 0a 09 09 09 43 41 nue;....}.....CA 61c0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 61d0: 46 28 22 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 F("cackey_send_a 61e0: 70 64 75 28 29 20 66 61 69 6c 65 64 2c 20 72 65 pdu() failed, re 61f0: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu 6200: 72 65 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e re");.....return 6210: 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 6f 66 66 (-1);...}....off 6220: 73 65 74 20 2b 3d 20 63 6f 75 6e 74 3b 0a 0a 09 set += count;... 6230: 09 69 66 20 28 63 6f 75 6e 74 20 3c 20 6d 61 78 .if (count < max 6240: 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09 43 41 43 _count) {....CAC 6250: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 6260: 28 22 53 68 6f 72 74 20 72 65 61 64 20 2d 2d 20 ("Short read -- 6270: 63 6f 75 6e 74 20 3d 20 25 69 2c 20 63 6d 64 5b count = %i, cmd[ 6280: 31 5d 20 3d 20 25 69 22 2c 20 63 6f 75 6e 74 2c 1] = %i", count, 6290: 20 63 6d 64 5b 31 5d 29 3b 0a 0a 09 09 09 62 72 cmd[1]);.....br 62a0: 65 61 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41 eak;...}..}...CA 62b0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 62c0: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 F("Returning in 62d0: 73 75 63 63 65 73 73 2c 20 72 65 61 64 20 25 6c success, read %l 62e0: 75 20 62 79 74 65 73 22 2c 20 28 75 6e 73 69 67 u bytes", (unsig 62f0: 6e 65 64 20 6c 6f 6e 67 29 20 6f 66 66 73 65 74 ned long) offset 6300: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 6f 66 66 73 );...return(offs 6310: 65 74 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 et);.}..static i 6320: 6e 74 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 nt cackey_select 6330: 5f 61 70 70 6c 65 74 28 73 74 72 75 63 74 20 63 _applet(struct c 6340: 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 ackey_slot *slot 6350: 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 , unsigned char 6360: 2a 61 69 64 2c 20 73 69 7a 65 5f 74 20 61 69 64 *aid, size_t aid 6370: 5f 6c 65 6e 29 20 7b 0a 09 69 6e 74 20 73 65 6e _len) {..int sen 6380: 64 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f d_ret;...CACKEY_ 6390: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 63a0: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 43 41 43 4b 45 lled.");...CACKE 63b0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 Y_DEBUG_PRINTBUF 63c0: 28 22 53 65 6c 65 63 74 69 6e 67 20 61 70 70 6c ("Selecting appl 63d0: 65 74 3a 22 2c 20 61 69 64 2c 20 61 69 64 5f 6c et:", aid, aid_l 63e0: 65 6e 29 3b 0a 0a 09 73 65 6e 64 5f 72 65 74 20 en);...send_ret 63f0: 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 = cackey_send_ap 6400: 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 du(slot, GSCIS_C 6410: 4c 41 53 53 5f 49 53 4f 37 38 31 36 2c 20 47 53 LASS_ISO7816, GS 6420: 43 49 53 5f 49 4e 53 54 52 5f 53 45 4c 45 43 54 CIS_INSTR_SELECT 6430: 2c 20 47 53 43 49 53 5f 50 41 52 41 4d 5f 53 45 , GSCIS_PARAM_SE 6440: 4c 45 43 54 5f 41 50 50 4c 45 54 2c 20 30 78 30 LECT_APPLET, 0x0 6450: 43 2c 20 61 69 64 5f 6c 65 6e 2c 20 61 69 64 2c C, aid_len, aid, 6460: 20 30 78 30 30 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 0x00, NULL, NUL 6470: 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 69 66 20 28 73 L, NULL);..if (s 6480: 65 6e 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 end_ret < 0) {.. 6490: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 64a0: 49 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 INTF("Failed to 64b0: 6f 70 65 6e 20 61 70 70 6c 65 74 2c 20 72 65 74 open applet, ret 64c0: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 64d0: 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d e");....return(- 64e0: 31 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 1);..}...CACKEY_ 64f0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 DEBUG_PRINTF("Su 6500: 63 63 65 73 73 66 75 6c 6c 79 20 73 65 6c 65 63 ccessfully selec 6510: 74 65 64 20 66 69 6c 65 22 29 3b 0a 0a 09 72 65 ted file");...re 6520: 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 73 74 61 74 turn(0);.}..stat 6530: 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 73 65 ic int cackey_se 6540: 6c 65 63 74 5f 66 69 6c 65 28 73 74 72 75 63 74 lect_file(struct 6550: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c cackey_slot *sl 6560: 6f 74 2c 20 75 69 6e 74 31 36 5f 74 20 65 66 29 ot, uint16_t ef) 6570: 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 {..unsigned cha 6580: 72 20 66 69 64 5f 62 75 66 5b 32 5d 3b 0a 09 69 r fid_buf[2];..i 6590: 6e 74 20 73 65 6e 64 5f 72 65 74 3b 0a 0a 09 43 nt send_ret;...C 65a0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 65b0: 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 65c0: 09 2f 2a 20 4f 70 65 6e 20 74 68 65 20 65 6c 65 ./* Open the ele 65d0: 6d 65 6e 74 61 72 79 20 66 69 6c 65 20 2a 2f 0a mentary file */. 65e0: 09 66 69 64 5f 62 75 66 5b 30 5d 20 3d 20 28 65 .fid_buf[0] = (e 65f0: 66 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a f >> 8) & 0xff;. 6600: 09 66 69 64 5f 62 75 66 5b 31 5d 20 3d 20 65 66 .fid_buf[1] = ef 6610: 20 26 20 30 78 66 66 3b 0a 0a 09 43 41 43 4b 45 & 0xff;...CACKE 6620: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 6630: 53 65 6c 65 63 74 69 6e 67 20 66 69 6c 65 3a 20 Selecting file: 6640: 25 30 34 6c 78 22 2c 20 28 75 6e 73 69 67 6e 65 %04lx", (unsigne 6650: 64 20 6c 6f 6e 67 29 20 65 66 29 3b 0a 0a 09 73 d long) ef);...s 6660: 65 6e 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 end_ret = cackey 6670: 5f 73 65 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c _send_apdu(slot, 6680: 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f GSCIS_CLASS_ISO 6690: 37 38 31 36 2c 20 47 53 43 49 53 5f 49 4e 53 54 7816, GSCIS_INST 66a0: 52 5f 53 45 4c 45 43 54 2c 20 30 78 30 32 2c 20 R_SELECT, 0x02, 66b0: 30 78 30 43 2c 20 73 69 7a 65 6f 66 28 66 69 64 0x0C, sizeof(fid 66c0: 5f 62 75 66 29 2c 20 66 69 64 5f 62 75 66 2c 20 _buf), fid_buf, 66d0: 30 78 30 30 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 0x00, NULL, NULL 66e0: 2c 20 4e 55 4c 4c 29 3b 0a 09 69 66 20 28 73 65 , NULL);..if (se 66f0: 6e 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 nd_ret < 0) {... 6700: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 6710: 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 6f NTF("Failed to o 6720: 70 65 6e 20 66 69 6c 65 2c 20 72 65 74 75 72 6e pen file, return 6730: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 6740: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b ;....return(-1); 6750: 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 6760: 55 47 5f 50 52 49 4e 54 46 28 22 53 75 63 63 65 UG_PRINTF("Succe 6770: 73 73 66 75 6c 6c 79 20 73 65 6c 65 63 74 65 64 ssfully selected 6780: 20 66 69 6c 65 22 29 3b 0a 0a 09 72 65 74 75 72 file");...retur 6790: 6e 28 30 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 n(0);.}..static 67a0: 76 6f 69 64 20 63 61 63 6b 65 79 5f 66 72 65 65 void cackey_free 67b0: 5f 74 6c 76 28 73 74 72 75 63 74 20 63 61 63 6b _tlv(struct cack 67c0: 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a 72 ey_tlv_entity *r 67d0: 6f 6f 74 29 20 7b 0a 09 73 74 72 75 63 74 20 63 oot) {..struct c 67e0: 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 ackey_tlv_entity 67f0: 20 2a 63 75 72 72 2c 20 2a 6e 65 78 74 3b 0a 0a *curr, *next;.. 6800: 09 69 66 20 28 72 6f 6f 74 20 3d 3d 20 4e 55 4c .if (root == NUL 6810: 4c 29 20 7b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 L) {...return;.. 6820: 7d 0a 0a 09 66 6f 72 20 28 63 75 72 72 20 3d 20 }...for (curr = 6830: 72 6f 6f 74 3b 20 63 75 72 72 3b 20 63 75 72 72 root; curr; curr 6840: 20 3d 20 6e 65 78 74 29 20 7b 0a 09 09 6e 65 78 = next) {...nex 6850: 74 20 3d 20 63 75 72 72 2d 3e 5f 6e 65 78 74 3b t = curr->_next; 6860: 0a 0a 09 09 73 77 69 74 63 68 20 28 63 75 72 72 ....switch (curr 6870: 2d 3e 74 61 67 29 20 7b 0a 09 09 09 63 61 73 65 ->tag) {....case 6880: 20 47 53 43 49 53 5f 54 41 47 5f 41 43 52 5f 54 GSCIS_TAG_ACR_T 6890: 41 42 4c 45 3a 0a 09 09 09 63 61 73 65 20 47 53 ABLE:....case GS 68a0: 43 49 53 5f 54 41 47 5f 43 45 52 54 49 46 49 43 CIS_TAG_CERTIFIC 68b0: 41 54 45 3a 0a 09 09 09 09 69 66 20 28 63 75 72 ATE:.....if (cur 68c0: 72 2d 3e 76 61 6c 75 65 29 20 7b 0a 09 09 09 09 r->value) {..... 68d0: 09 66 72 65 65 28 63 75 72 72 2d 3e 76 61 6c 75 .free(curr->valu 68e0: 65 29 3b 0a 09 09 09 09 7d 0a 09 09 09 09 62 72 e);.....}.....br 68f0: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 47 53 43 eak;....case GSC 6900: 49 53 5f 54 41 47 5f 43 41 52 44 55 52 4c 3a 0a IS_TAG_CARDURL:. 6910: 09 09 09 09 69 66 20 28 63 75 72 72 2d 3e 76 61 ....if (curr->va 6920: 6c 75 65 5f 63 61 72 64 75 72 6c 29 20 7b 0a 09 lue_cardurl) {.. 6930: 09 09 09 09 66 72 65 65 28 63 75 72 72 2d 3e 76 ....free(curr->v 6940: 61 6c 75 65 5f 63 61 72 64 75 72 6c 29 3b 0a 09 alue_cardurl);.. 6950: 09 09 09 7d 0a 09 09 09 09 62 72 65 61 6b 3b 0a ...}.....break;. 6960: 09 09 7d 0a 0a 09 09 66 72 65 65 28 63 75 72 72 ..}....free(curr 6970: 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 3b 0a );..}...return;. 6980: 7d 0a 0a 73 74 61 74 69 63 20 73 74 72 75 63 74 }..static struct 6990: 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 cackey_tlv_enti 69a0: 74 79 20 2a 63 61 63 6b 65 79 5f 72 65 61 64 5f ty *cackey_read_ 69b0: 74 6c 76 28 73 74 72 75 63 74 20 63 61 63 6b 65 tlv(struct cacke 69c0: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a y_slot *slot) {. 69d0: 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 .struct cackey_t 69e0: 6c 76 5f 65 6e 74 69 74 79 20 2a 63 75 72 72 5f lv_entity *curr_ 69f0: 65 6e 74 69 74 79 2c 20 2a 72 6f 6f 74 20 3d 20 entity, *root = 6a00: 4e 55 4c 4c 2c 20 2a 6c 61 73 74 20 3d 20 4e 55 NULL, *last = NU 6a10: 4c 4c 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 LL;..unsigned ch 6a20: 61 72 20 74 6c 65 6e 5f 62 75 66 5b 32 5d 2c 20 ar tlen_buf[2], 6a30: 74 76 61 6c 5f 62 75 66 5b 31 30 32 34 5d 2c 20 tval_buf[1024], 6a40: 2a 74 76 61 6c 3b 0a 09 75 6e 73 69 67 6e 65 64 *tval;..unsigned 6a50: 20 63 68 61 72 20 76 6c 65 6e 5f 62 75 66 5b 32 char vlen_buf[2 6a60: 5d 2c 20 76 76 61 6c 5f 62 75 66 5b 38 31 39 32 ], vval_buf[8192 6a70: 5d 2c 20 2a 76 76 61 6c 3b 0a 09 75 6e 73 69 67 ], *vval;..unsig 6a80: 6e 65 64 20 63 68 61 72 20 2a 74 6d 70 62 75 66 ned char *tmpbuf 6a90: 3b 0a 09 73 73 69 7a 65 5f 74 20 74 6c 65 6e 2c ;..ssize_t tlen, 6aa0: 20 76 6c 65 6e 3b 0a 09 73 73 69 7a 65 5f 74 20 vlen;..ssize_t 6ab0: 72 65 61 64 5f 72 65 74 3b 0a 09 73 69 7a 65 5f read_ret;..size_ 6ac0: 74 20 6f 66 66 73 65 74 5f 74 20 3d 20 30 2c 20 t offset_t = 0, 6ad0: 6f 66 66 73 65 74 5f 76 20 3d 20 30 3b 0a 09 75 offset_v = 0;..u 6ae0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 74 61 67 nsigned char tag 6af0: 3b 0a 09 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 ;..size_t length 6b00: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 6b10: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 6b20: 22 29 3b 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d ");...read_ret = 6b30: 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 cackey_read_buf 6b40: 66 65 72 28 73 6c 6f 74 2c 20 74 6c 65 6e 5f 62 fer(slot, tlen_b 6b50: 75 66 2c 20 73 69 7a 65 6f 66 28 74 6c 65 6e 5f uf, sizeof(tlen_ 6b60: 62 75 66 29 2c 20 31 2c 20 6f 66 66 73 65 74 5f buf), 1, offset_ 6b70: 74 29 3b 0a 09 69 66 20 28 72 65 61 64 5f 72 65 t);..if (read_re 6b80: 74 20 21 3d 20 73 69 7a 65 6f 66 28 74 6c 65 6e t != sizeof(tlen 6b90: 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 43 4b 45 _buf)) {...CACKE 6ba0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 6bb0: 52 65 61 64 20 66 61 69 6c 65 64 2c 20 72 65 74 Read failed, ret 6bc0: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 6bd0: 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e e");....return(N 6be0: 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 74 6c 65 6e 20 ULL);..}...tlen 6bf0: 3d 20 28 74 6c 65 6e 5f 62 75 66 5b 31 5d 20 3c = (tlen_buf[1] < 6c00: 3c 20 38 29 20 7c 20 74 6c 65 6e 5f 62 75 66 5b < 8) | tlen_buf[ 6c10: 30 5d 3b 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d 0];...read_ret = 6c20: 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 cackey_read_buf 6c30: 66 65 72 28 73 6c 6f 74 2c 20 76 6c 65 6e 5f 62 fer(slot, vlen_b 6c40: 75 66 2c 20 73 69 7a 65 6f 66 28 76 6c 65 6e 5f uf, sizeof(vlen_ 6c50: 62 75 66 29 2c 20 32 2c 20 6f 66 66 73 65 74 5f buf), 2, offset_ 6c60: 76 29 3b 0a 09 69 66 20 28 72 65 61 64 5f 72 65 v);..if (read_re 6c70: 74 20 21 3d 20 73 69 7a 65 6f 66 28 76 6c 65 6e t != sizeof(vlen 6c80: 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 43 4b 45 _buf)) {...CACKE 6c90: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 6ca0: 52 65 61 64 20 66 61 69 6c 65 64 2c 20 72 65 74 Read failed, ret 6cb0: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 6cc0: 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e e");....return(N 6cd0: 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 76 6c 65 6e 20 ULL);..}...vlen 6ce0: 3d 20 28 76 6c 65 6e 5f 62 75 66 5b 31 5d 20 3c = (vlen_buf[1] < 6cf0: 3c 20 38 29 20 7c 20 76 6c 65 6e 5f 62 75 66 5b < 8) | vlen_buf[ 6d00: 30 5d 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 0];...CACKEY_DEB 6d10: 55 47 5f 50 52 49 4e 54 46 28 22 54 61 67 20 4c UG_PRINTF("Tag L 6d20: 65 6e 67 74 68 20 3d 20 25 69 2c 20 56 61 6c 75 ength = %i, Valu 6d30: 65 20 4c 65 6e 67 74 68 20 3d 20 25 69 22 2c 20 e Length = %i", 6d40: 74 6c 65 6e 2c 20 76 6c 65 6e 29 3b 0a 0a 09 74 tlen, vlen);...t 6d50: 6c 65 6e 20 2d 3d 20 32 3b 0a 09 6f 66 66 73 65 len -= 2;..offse 6d60: 74 5f 74 20 2b 3d 20 32 3b 0a 0a 09 76 6c 65 6e t_t += 2;...vlen 6d70: 20 2d 3d 20 32 3b 0a 09 6f 66 66 73 65 74 5f 76 -= 2;..offset_v 6d80: 20 2b 3d 20 32 3b 0a 0a 09 69 66 20 28 74 6c 65 += 2;...if (tle 6d90: 6e 20 3e 20 73 69 7a 65 6f 66 28 74 76 61 6c 5f n > sizeof(tval_ 6da0: 62 75 66 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 buf)) {...CACKEY 6db0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 54 _DEBUG_PRINTF("T 6dc0: 61 67 20 6c 65 6e 67 74 68 20 69 73 20 74 6f 6f ag length is too 6dd0: 20 6c 61 72 67 65 2c 20 72 65 74 75 72 6e 69 6e large, returnin 6de0: 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a g in failure");. 6df0: 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b ...return(NULL); 6e00: 0a 09 7d 0a 0a 09 69 66 20 28 76 6c 65 6e 20 3e ..}...if (vlen > 6e10: 20 73 69 7a 65 6f 66 28 76 76 61 6c 5f 62 75 66 sizeof(vval_buf 6e20: 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE 6e30: 42 55 47 5f 50 52 49 4e 54 46 28 22 56 61 6c 75 BUG_PRINTF("Valu 6e40: 65 20 6c 65 6e 67 74 68 20 69 73 20 74 6f 6f 20 e length is too 6e50: 6c 61 72 67 65 2c 20 72 65 74 75 72 6e 69 6e 67 large, returning 6e60: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. 6e70: 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a ..return(NULL);. 6e80: 09 7d 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d 20 .}...read_ret = 6e90: 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 66 cackey_read_buff 6ea0: 65 72 28 73 6c 6f 74 2c 20 74 76 61 6c 5f 62 75 er(slot, tval_bu 6eb0: 66 2c 20 74 6c 65 6e 2c 20 31 2c 20 6f 66 66 73 f, tlen, 1, offs 6ec0: 65 74 5f 74 29 3b 0a 09 69 66 20 28 72 65 61 64 et_t);..if (read 6ed0: 5f 72 65 74 20 21 3d 20 74 6c 65 6e 29 20 7b 0a _ret != tlen) {. 6ee0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 6ef0: 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f RINTF("Unable to 6f00: 20 72 65 61 64 20 65 6e 74 69 72 65 20 54 2d 62 read entire T-b 6f10: 75 66 66 65 72 2c 20 72 65 74 75 72 6e 69 6e 67 uffer, returning 6f20: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. 6f30: 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a ..return(NULL);. 6f40: 09 7d 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d 20 .}...read_ret = 6f50: 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 66 cackey_read_buff 6f60: 65 72 28 73 6c 6f 74 2c 20 76 76 61 6c 5f 62 75 er(slot, vval_bu 6f70: 66 2c 20 76 6c 65 6e 2c 20 32 2c 20 6f 66 66 73 f, vlen, 2, offs 6f80: 65 74 5f 76 29 3b 0a 09 69 66 20 28 72 65 61 64 et_v);..if (read 6f90: 5f 72 65 74 20 21 3d 20 76 6c 65 6e 29 20 7b 0a _ret != vlen) {. 6fa0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 6fb0: 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f RINTF("Unable to 6fc0: 20 72 65 61 64 20 65 6e 74 69 72 65 20 56 2d 62 read entire V-b 6fd0: 75 66 66 65 72 2c 20 72 65 74 75 72 6e 69 6e 67 uffer, returning 6fe0: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. 6ff0: 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a ..return(NULL);. 7000: 09 7d 0a 0a 09 74 76 61 6c 20 3d 20 74 76 61 6c .}...tval = tval 7010: 5f 62 75 66 3b 0a 09 76 76 61 6c 20 3d 20 76 76 _buf;..vval = vv 7020: 61 6c 5f 62 75 66 3b 0a 09 77 68 69 6c 65 20 28 al_buf;..while ( 7030: 74 6c 65 6e 20 3e 20 30 20 26 26 20 76 6c 65 6e tlen > 0 && vlen 7040: 20 3e 20 30 29 20 7b 0a 09 09 74 61 67 20 3d 20 > 0) {...tag = 7050: 2a 74 76 61 6c 3b 0a 09 09 74 76 61 6c 2b 2b 3b *tval;...tval++; 7060: 0a 09 09 74 6c 65 6e 2d 2d 3b 0a 0a 09 09 69 66 ...tlen--;....if 7070: 20 28 2a 74 76 61 6c 20 3d 3d 20 30 78 66 66 29 (*tval == 0xff) 7080: 20 7b 0a 09 09 09 6c 65 6e 67 74 68 20 3d 20 28 {....length = ( 7090: 74 76 61 6c 5b 32 5d 20 3c 3c 20 38 29 20 7c 20 tval[2] << 8) | 70a0: 74 76 61 6c 5b 31 5d 3b 0a 09 09 09 74 76 61 6c tval[1];....tval 70b0: 20 2b 3d 20 33 3b 0a 09 09 09 74 6c 65 6e 20 2d += 3;....tlen - 70c0: 3d 20 33 3b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a = 3;...} else {. 70d0: 09 09 09 6c 65 6e 67 74 68 20 3d 20 2a 74 76 61 ...length = *tva 70e0: 6c 3b 0a 09 09 09 74 76 61 6c 2b 2b 3b 0a 09 09 l;....tval++;... 70f0: 09 74 6c 65 6e 2d 2d 3b 0a 09 09 7d 0a 0a 09 09 .tlen--;...}.... 7100: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 7110: 4e 54 46 28 22 54 61 67 3a 20 25 73 20 28 25 30 NTF("Tag: %s (%0 7120: 32 78 29 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 2x)", CACKEY_DEB 7130: 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54 4f 5f 53 UG_FUNC_TAG_TO_S 7140: 54 52 28 74 61 67 29 2c 20 28 75 6e 73 69 67 6e TR(tag), (unsign 7150: 65 64 20 69 6e 74 29 20 74 61 67 29 3b 0a 09 09 ed int) tag);... 7160: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 7170: 4e 54 42 55 46 28 22 56 61 6c 75 65 3a 22 2c 20 NTBUF("Value:", 7180: 76 76 61 6c 2c 20 6c 65 6e 67 74 68 29 3b 0a 09 vval, length);.. 7190: 09 76 76 61 6c 20 2b 3d 20 6c 65 6e 67 74 68 3b .vval += length; 71a0: 0a 09 09 76 6c 65 6e 20 2d 3d 20 6c 65 6e 67 74 ...vlen -= lengt 71b0: 68 3b 0a 0a 09 09 63 75 72 72 5f 65 6e 74 69 74 h;....curr_entit 71c0: 79 20 3d 20 4e 55 4c 4c 3b 0a 09 09 73 77 69 74 y = NULL;...swit 71d0: 63 68 20 28 74 61 67 29 20 7b 0a 09 09 09 63 61 ch (tag) {....ca 71e0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 se GSCIS_TAG_CAR 71f0: 44 55 52 4c 3a 0a 09 09 09 09 63 75 72 72 5f 65 DURL:.....curr_e 7200: 6e 74 69 74 79 20 3d 20 6d 61 6c 6c 6f 63 28 73 ntity = malloc(s 7210: 69 7a 65 6f 66 28 2a 63 75 72 72 5f 65 6e 74 69 izeof(*curr_enti 7220: 74 79 29 29 3b 0a 09 09 09 09 63 75 72 72 5f 65 ty));.....curr_e 7230: 6e 74 69 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 ntity->value_car 7240: 64 75 72 6c 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 durl = malloc(si 7250: 7a 65 6f 66 28 2a 63 75 72 72 5f 65 6e 74 69 74 zeof(*curr_entit 7260: 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c y->value_cardurl 7270: 29 29 3b 0a 0a 09 09 09 09 6d 65 6d 63 70 79 28 ));......memcpy( 7280: 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c curr_entity->val 7290: 75 65 5f 63 61 72 64 75 72 6c 2d 3e 72 69 64 2c ue_cardurl->rid, 72a0: 20 76 76 61 6c 2c 20 35 29 3b 0a 09 09 09 09 63 vval, 5);.....c 72b0: 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 urr_entity->valu 72c0: 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 74 79 e_cardurl->appty 72d0: 70 65 20 3d 20 76 76 61 6c 5b 35 5d 3b 0a 09 09 pe = vval[5];... 72e0: 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 ..curr_entity->v 72f0: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 alue_cardurl->ob 7300: 6a 65 63 74 69 64 20 3d 20 28 76 76 61 6c 5b 36 jectid = (vval[6 7310: 5d 20 3c 3c 20 38 29 20 7c 20 76 76 61 6c 5b 37 ] << 8) | vval[7 7320: 5d 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 ];.....curr_enti 7330: 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 ty->value_cardur 7340: 6c 2d 3e 61 70 70 69 64 20 3d 20 28 76 76 61 6c l->appid = (vval 7350: 5b 38 5d 20 3c 3c 20 38 29 20 7c 20 76 76 61 6c [8] << 8) | vval 7360: 5b 39 5d 3b 0a 0a 09 09 09 09 63 75 72 72 5f 65 [9];......curr_e 7370: 6e 74 69 74 79 2d 3e 74 61 67 20 3d 20 74 61 67 ntity->tag = tag 7380: 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 ;.....curr_entit 7390: 79 2d 3e 5f 6e 65 78 74 20 3d 20 4e 55 4c 4c 3b y->_next = NULL; 73a0: 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 73b0: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 41 case GSCIS_TAG_A 73c0: 43 52 5f 54 41 42 4c 45 3a 0a 09 09 09 09 63 75 CR_TABLE:.....cu 73d0: 72 72 5f 65 6e 74 69 74 79 20 3d 20 6d 61 6c 6c rr_entity = mall 73e0: 6f 63 28 73 69 7a 65 6f 66 28 2a 63 75 72 72 5f oc(sizeof(*curr_ 73f0: 65 6e 74 69 74 79 29 29 3b 0a 09 09 09 09 74 6d entity));.....tm 7400: 70 62 75 66 20 3d 20 6d 61 6c 6c 6f 63 28 6c 65 pbuf = malloc(le 7410: 6e 67 74 68 29 3b 0a 0a 09 09 09 09 6d 65 6d 63 ngth);......memc 7420: 70 79 28 74 6d 70 62 75 66 2c 20 76 76 61 6c 2c py(tmpbuf, vval, 7430: 20 6c 65 6e 67 74 68 29 3b 0a 0a 09 09 09 09 63 length);......c 7440: 75 72 72 5f 65 6e 74 69 74 79 2d 3e 74 61 67 20 urr_entity->tag 7450: 3d 20 74 61 67 3b 0a 09 09 09 09 63 75 72 72 5f = tag;.....curr_ 7460: 65 6e 74 69 74 79 2d 3e 6c 65 6e 67 74 68 20 3d entity->length = 7470: 20 6c 65 6e 67 74 68 3b 0a 09 09 09 09 63 75 72 length;.....cur 7480: 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 20 r_entity->value 7490: 3d 20 74 6d 70 62 75 66 3b 0a 09 09 09 09 63 75 = tmpbuf;.....cu 74a0: 72 72 5f 65 6e 74 69 74 79 2d 3e 5f 6e 65 78 74 rr_entity->_next 74b0: 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 09 62 72 = NULL;......br 74c0: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 47 53 43 eak;....case GSC 74d0: 49 53 5f 54 41 47 5f 43 45 52 54 49 46 49 43 41 IS_TAG_CERTIFICA 74e0: 54 45 3a 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 TE:.....curr_ent 74f0: 69 74 79 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a ity = malloc(siz 7500: 65 6f 66 28 2a 63 75 72 72 5f 65 6e 74 69 74 79 eof(*curr_entity 7510: 29 29 3b 0a 09 09 09 09 74 6d 70 62 75 66 20 3d ));.....tmpbuf = 7520: 20 6d 61 6c 6c 6f 63 28 6c 65 6e 67 74 68 29 3b malloc(length); 7530: 0a 0a 09 09 09 09 6d 65 6d 63 70 79 28 74 6d 70 ......memcpy(tmp 7540: 62 75 66 2c 20 76 76 61 6c 2c 20 6c 65 6e 67 74 buf, vval, lengt 7550: 68 29 3b 0a 0a 09 09 09 09 63 75 72 72 5f 65 6e h);......curr_en 7560: 74 69 74 79 2d 3e 74 61 67 20 3d 20 74 61 67 3b tity->tag = tag; 7570: 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 .....curr_entity 7580: 2d 3e 6c 65 6e 67 74 68 20 3d 20 6c 65 6e 67 74 ->length = lengt 7590: 68 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 h;.....curr_enti 75a0: 74 79 2d 3e 76 61 6c 75 65 20 3d 20 74 6d 70 62 ty->value = tmpb 75b0: 75 66 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 uf;.....curr_ent 75c0: 69 74 79 2d 3e 5f 6e 65 78 74 20 3d 20 4e 55 4c ity->_next = NUL 75d0: 4c 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 L;......break;.. 75e0: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 75f0: 5f 50 4b 43 53 31 35 3a 0a 09 09 09 09 63 75 72 _PKCS15:.....cur 7600: 72 5f 65 6e 74 69 74 79 20 3d 20 6d 61 6c 6c 6f r_entity = mallo 7610: 63 28 73 69 7a 65 6f 66 28 2a 63 75 72 72 5f 65 c(sizeof(*curr_e 7620: 6e 74 69 74 79 29 29 3b 0a 0a 09 09 09 09 63 75 ntity));......cu 7630: 72 72 5f 65 6e 74 69 74 79 2d 3e 74 61 67 20 3d rr_entity->tag = 7640: 20 74 61 67 3b 0a 09 09 09 09 63 75 72 72 5f 65 tag;.....curr_e 7650: 6e 74 69 74 79 2d 3e 76 61 6c 75 65 5f 62 79 74 ntity->value_byt 7660: 65 20 3d 20 76 76 61 6c 5b 30 5d 3b 0a 09 09 09 e = vval[0];.... 7670: 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 5f 6e .curr_entity->_n 7680: 65 78 74 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 ext = NULL;..... 7690: 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09 69 .break;...}....i 76a0: 66 20 28 63 75 72 72 5f 65 6e 74 69 74 79 20 21 f (curr_entity ! 76b0: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 69 66 20 = NULL) {....if 76c0: 28 72 6f 6f 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b (root == NULL) { 76d0: 0a 09 09 09 09 72 6f 6f 74 20 3d 20 63 75 72 72 .....root = curr 76e0: 5f 65 6e 74 69 74 79 3b 0a 09 09 09 7d 0a 0a 09 _entity;....}... 76f0: 09 09 69 66 20 28 6c 61 73 74 20 21 3d 20 4e 55 ..if (last != NU 7700: 4c 4c 29 20 7b 0a 09 09 09 09 6c 61 73 74 2d 3e LL) {.....last-> 7710: 5f 6e 65 78 74 20 3d 20 63 75 72 72 5f 65 6e 74 _next = curr_ent 7720: 69 74 79 3b 0a 09 09 09 7d 0a 0a 09 09 09 6c 61 ity;....}.....la 7730: 73 74 20 3d 20 63 75 72 72 5f 65 6e 74 69 74 79 st = curr_entity 7740: 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 ;...}..}...retur 7750: 6e 28 72 6f 6f 74 29 3b 0a 7d 0a 0a 73 74 61 74 n(root);.}..stat 7760: 69 63 20 76 6f 69 64 20 63 61 63 6b 65 79 5f 66 ic void cackey_f 7770: 72 65 65 5f 63 65 72 74 73 28 73 74 72 75 63 74 ree_certs(struct 7780: 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 cackey_pcsc_ide 7790: 6e 74 69 74 79 20 2a 73 74 61 72 74 2c 20 73 69 ntity *start, si 77a0: 7a 65 5f 74 20 63 6f 75 6e 74 2c 20 69 6e 74 20 ze_t count, int 77b0: 66 72 65 65 5f 73 74 61 72 74 29 20 7b 0a 09 73 free_start) {..s 77c0: 69 7a 65 5f 74 20 69 64 78 3b 0a 0a 09 66 6f 72 ize_t idx;...for 77d0: 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c (idx = 0; idx < 77e0: 20 63 6f 75 6e 74 3b 20 69 64 78 2b 2b 29 20 7b count; idx++) { 77f0: 0a 09 09 69 66 20 28 73 74 61 72 74 5b 69 64 78 ...if (start[idx 7800: 5d 2e 63 65 72 74 69 66 69 63 61 74 65 29 20 7b ].certificate) { 7810: 0a 09 09 09 66 72 65 65 28 73 74 61 72 74 5b 69 ....free(start[i 7820: 64 78 5d 2e 63 65 72 74 69 66 69 63 61 74 65 29 dx].certificate) 7830: 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 66 ;...}..}...if (f 7840: 72 65 65 5f 73 74 61 72 74 29 20 7b 0a 09 09 66 ree_start) {...f 7850: 72 65 65 28 73 74 61 72 74 29 3b 0a 09 7d 0a 0a ree(start);..}.. 7860: 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 73 74 61 74 .return;.}..stat 7870: 69 63 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 ic struct cackey 7880: 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 2a _pcsc_identity * 7890: 63 61 63 6b 65 79 5f 72 65 61 64 5f 63 65 72 74 cackey_read_cert 78a0: 73 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f s(struct cackey_ 78b0: 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 73 74 72 75 slot *slot, stru 78c0: 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 ct cackey_pcsc_i 78d0: 64 65 6e 74 69 74 79 20 2a 63 65 72 74 73 2c 20 dentity *certs, 78e0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 63 unsigned long *c 78f0: 6f 75 6e 74 29 20 7b 0a 09 73 74 72 75 63 74 20 ount) {..struct 7900: 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e cackey_pcsc_iden 7910: 74 69 74 79 20 2a 63 75 72 72 5f 69 64 3b 0a 09 tity *curr_id;.. 7920: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c struct cackey_tl 7930: 76 5f 65 6e 74 69 74 79 20 2a 63 63 63 5f 74 6c v_entity *ccc_tl 7940: 76 2c 20 2a 63 63 63 5f 63 75 72 72 2c 20 2a 61 v, *ccc_curr, *a 7950: 70 70 5f 74 6c 76 2c 20 2a 61 70 70 5f 63 75 72 pp_tlv, *app_cur 7960: 72 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 r;..unsigned cha 7970: 72 20 63 63 63 5f 61 69 64 5b 5d 20 3d 20 7b 47 r ccc_aid[] = {G 7980: 53 43 49 53 5f 41 49 44 5f 43 43 43 7d 3b 0a 09 SCIS_AID_CCC};.. 7990: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 75 unsigned char cu 79a0: 72 72 5f 61 69 64 5b 37 5d 3b 0a 09 75 6e 73 69 rr_aid[7];..unsi 79b0: 67 6e 65 64 20 6c 6f 6e 67 20 6f 75 74 69 64 78 gned long outidx 79c0: 20 3d 20 30 3b 0a 09 69 6e 74 20 63 65 72 74 73 = 0;..int certs 79d0: 5f 72 65 73 69 7a 61 62 6c 65 3b 0a 09 69 6e 74 _resizable;..int 79e0: 20 73 65 6e 64 5f 72 65 74 2c 20 73 65 6c 65 63 send_ret, selec 79f0: 74 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f t_ret;...CACKEY_ 7a00: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 7a10: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 63 lled.");...if (c 7a20: 6f 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a ount == NULL) {. 7a30: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 7a40: 52 49 4e 54 46 28 22 63 6f 75 6e 74 20 69 73 20 RINTF("count is 7a50: 4e 55 4c 4c 2c 20 72 65 74 75 72 6e 69 6e 67 20 NULL, returning 7a60: 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 in failure");... 7a70: 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 .return(NULL);.. 7a80: 7d 0a 0a 09 69 66 20 28 2a 63 6f 75 6e 74 20 3d }...if (*count = 7a90: 3d 20 30 29 20 7b 0a 09 09 69 66 20 28 63 65 72 = 0) {...if (cer 7aa0: 74 73 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 ts != NULL) {... 7ab0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 7ac0: 49 4e 54 46 28 22 52 65 71 75 65 73 74 65 64 20 INTF("Requested 7ad0: 77 65 20 72 65 74 75 72 6e 20 30 20 6f 62 6a 65 we return 0 obje 7ae0: 63 74 73 2c 20 73 68 6f 72 74 2d 63 69 72 63 75 cts, short-circu 7af0: 69 74 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e it");.....return 7b00: 28 63 65 72 74 73 29 3b 0a 09 09 7d 0a 09 7d 0a (certs);...}..}. 7b10: 0a 09 69 66 20 28 63 65 72 74 73 20 3d 3d 20 4e ..if (certs == N 7b20: 55 4c 4c 29 20 7b 0a 09 09 63 65 72 74 73 20 3d ULL) {...certs = 7b30: 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a malloc(sizeof(* 7b40: 63 65 72 74 73 29 20 2a 20 35 29 3b 0a 09 09 2a certs) * 5);...* 7b50: 63 6f 75 6e 74 20 3d 20 35 3b 0a 09 09 63 65 72 count = 5;...cer 7b60: 74 73 5f 72 65 73 69 7a 61 62 6c 65 20 3d 20 31 ts_resizable = 1 7b70: 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 63 65 ;..} else {...ce 7b80: 72 74 73 5f 72 65 73 69 7a 61 62 6c 65 20 3d 20 rts_resizable = 7b90: 30 3b 0a 09 7d 0a 0a 09 2f 2a 20 53 65 6c 65 63 0;..}.../* Selec 7ba0: 74 20 74 68 65 20 43 43 43 20 41 70 70 6c 65 74 t the CCC Applet 7bb0: 20 2a 2f 0a 09 73 65 6e 64 5f 72 65 74 20 3d 20 */..send_ret = 7bc0: 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 cackey_select_ap 7bd0: 70 6c 65 74 28 73 6c 6f 74 2c 20 63 63 63 5f 61 plet(slot, ccc_a 7be0: 69 64 2c 20 73 69 7a 65 6f 66 28 63 63 63 5f 61 id, sizeof(ccc_a 7bf0: 69 64 29 29 3b 0a 09 69 66 20 28 73 65 6e 64 5f id));..if (send_ 7c00: 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 43 41 43 ret < 0) {...CAC 7c10: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 7c20: 28 22 55 6e 61 62 6c 65 20 74 6f 20 73 65 6c 65 ("Unable to sele 7c30: 63 74 20 43 43 43 20 41 70 70 6c 65 74 2c 20 72 ct CCC Applet, r 7c40: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail 7c50: 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ure");....return 7c60: 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 (NULL);..}.../* 7c70: 52 65 61 64 20 61 6c 6c 20 74 68 65 20 61 70 70 Read all the app 7c80: 6c 65 74 73 20 66 72 6f 6d 20 74 68 65 20 43 43 lets from the CC 7c90: 43 27 73 20 54 4c 56 20 2a 2f 0a 09 63 63 63 5f C's TLV */..ccc_ 7ca0: 74 6c 76 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 tlv = cackey_rea 7cb0: 64 5f 74 6c 76 28 73 6c 6f 74 29 3b 0a 0a 09 2f d_tlv(slot);.../ 7cc0: 2a 20 4c 6f 6f 6b 20 66 6f 72 20 43 41 52 44 55 * Look for CARDU 7cd0: 52 4c 73 20 74 68 61 74 20 63 6f 6f 72 65 73 70 RLs that cooresp 7ce0: 6f 6e 64 20 74 6f 20 50 4b 49 20 61 70 70 6c 65 ond to PKI apple 7cf0: 74 73 20 2a 2f 0a 09 66 6f 72 20 28 63 63 63 5f ts */..for (ccc_ 7d00: 63 75 72 72 20 3d 20 63 63 63 5f 74 6c 76 3b 20 curr = ccc_tlv; 7d10: 63 63 63 5f 63 75 72 72 3b 20 63 63 63 5f 63 75 ccc_curr; ccc_cu 7d20: 72 72 20 3d 20 63 63 63 5f 63 75 72 72 2d 3e 5f rr = ccc_curr->_ 7d30: 6e 65 78 74 29 20 7b 0a 09 09 43 41 43 4b 45 59 next) {...CACKEY 7d40: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 _DEBUG_PRINTF("F 7d50: 6f 75 6e 64 20 74 61 67 3a 20 25 73 20 2e 2e 2e ound tag: %s ... 7d60: 20 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 ", CACKEY_DEBUG 7d70: 5f 46 55 4e 43 5f 54 41 47 5f 54 4f 5f 53 54 52 _FUNC_TAG_TO_STR 7d80: 28 63 63 63 5f 63 75 72 72 2d 3e 74 61 67 29 29 (ccc_curr->tag)) 7d90: 3b 0a 0a 09 09 69 66 20 28 63 63 63 5f 63 75 72 ;....if (ccc_cur 7da0: 72 2d 3e 74 61 67 20 21 3d 20 47 53 43 49 53 5f r->tag != GSCIS_ 7db0: 54 41 47 5f 43 41 52 44 55 52 4c 29 20 7b 0a 09 TAG_CARDURL) {.. 7dc0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 7dd0: 52 49 4e 54 46 28 22 20 20 2e 2e 2e 20 73 6b 69 RINTF(" ... ski 7de0: 70 70 69 6e 67 20 69 74 20 28 77 65 20 6f 6e 6c pping it (we onl 7df0: 79 20 63 61 72 65 20 61 62 6f 75 74 20 43 41 52 y care about CAR 7e00: 44 55 52 4c 73 29 22 29 3b 0a 0a 09 09 09 63 6f DURLs)");.....co 7e10: 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 69 ntinue;...}....i 7e20: 66 20 28 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 f ((ccc_curr->va 7e30: 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 lue_cardurl->app 7e40: 74 79 70 65 20 26 20 43 41 43 4b 45 59 5f 54 4c type & CACKEY_TL 7e50: 56 5f 41 50 50 5f 50 4b 49 29 20 21 3d 20 43 41 V_APP_PKI) != CA 7e60: 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 CKEY_TLV_APP_PKI 7e70: 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE 7e80: 42 55 47 5f 50 52 49 4e 54 46 28 22 20 20 2e 2e BUG_PRINTF(" .. 7e90: 2e 20 73 6b 69 70 70 69 6e 67 20 69 74 20 28 77 . skipping it (w 7ea0: 65 20 6f 6e 6c 79 20 63 61 72 65 20 61 62 6f 75 e only care abou 7eb0: 74 20 50 4b 49 20 61 70 70 6c 65 74 73 2c 20 74 t PKI applets, t 7ec0: 68 69 73 20 61 70 70 6c 65 74 20 73 75 70 70 6f his applet suppo 7ed0: 72 74 73 3a 20 25 73 2f 25 30 32 78 29 22 2c 20 rts: %s/%02x)", 7ee0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN 7ef0: 43 5f 41 50 50 54 59 50 45 5f 54 4f 5f 53 54 52 C_APPTYPE_TO_STR 7f00: 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 (ccc_curr->value 7f10: 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 74 79 70 _cardurl->apptyp 7f20: 65 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 69 6e e), (unsigned in 7f30: 74 29 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c t) ccc_curr->val 7f40: 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 74 ue_cardurl->appt 7f50: 79 70 65 29 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e ype);.....contin 7f60: 75 65 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b 45 ue;...}....CACKE 7f70: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 Y_DEBUG_PRINTBUF 7f80: 28 22 52 49 44 3a 22 2c 20 63 63 63 5f 63 75 72 ("RID:", ccc_cur 7f90: 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c r->value_cardurl 7fa0: 2d 3e 72 69 64 2c 20 73 69 7a 65 6f 66 28 63 63 ->rid, sizeof(cc 7fb0: 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 c_curr->value_ca 7fc0: 72 64 75 72 6c 2d 3e 72 69 64 29 29 3b 0a 09 09 rdurl->rid));... 7fd0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 7fe0: 4e 54 46 28 22 41 70 70 49 44 20 3d 20 25 73 2f NTF("AppID = %s/ 7ff0: 25 30 34 6c 78 22 2c 20 43 41 43 4b 45 59 5f 44 %04lx", CACKEY_D 8000: 45 42 55 47 5f 46 55 4e 43 5f 4f 42 4a 49 44 5f EBUG_FUNC_OBJID_ 8010: 54 4f 5f 53 54 52 28 63 63 63 5f 63 75 72 72 2d TO_STR(ccc_curr- 8020: 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e >value_cardurl-> 8030: 61 70 70 69 64 29 2c 20 28 75 6e 73 69 67 6e 65 appid), (unsigne 8040: 64 20 6c 6f 6e 67 29 20 63 63 63 5f 63 75 72 72 d long) ccc_curr 8050: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d ->value_cardurl- 8060: 3e 61 70 70 69 64 29 3b 0a 09 09 43 41 43 4b 45 >appid);...CACKE 8070: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 8080: 4f 62 6a 65 63 74 49 44 20 3d 20 25 73 2f 25 30 ObjectID = %s/%0 8090: 34 6c 78 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 4lx", CACKEY_DEB 80a0: 55 47 5f 46 55 4e 43 5f 4f 42 4a 49 44 5f 54 4f UG_FUNC_OBJID_TO 80b0: 5f 53 54 52 28 63 63 63 5f 63 75 72 72 2d 3e 76 _STR(ccc_curr->v 80c0: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 alue_cardurl->ob 80d0: 6a 65 63 74 69 64 29 2c 20 28 75 6e 73 69 67 6e jectid), (unsign 80e0: 65 64 20 6c 6f 6e 67 29 20 63 63 63 5f 63 75 72 ed long) ccc_cur 80f0: 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c r->value_cardurl 8100: 2d 3e 6f 62 6a 65 63 74 69 64 29 3b 0a 0a 09 09 ->objectid);.... 8110: 6d 65 6d 63 70 79 28 63 75 72 72 5f 61 69 64 2c memcpy(curr_aid, 8120: 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 ccc_curr->value 8130: 5f 63 61 72 64 75 72 6c 2d 3e 72 69 64 2c 20 73 _cardurl->rid, s 8140: 69 7a 65 6f 66 28 63 63 63 5f 63 75 72 72 2d 3e izeof(ccc_curr-> 8150: 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 72 value_cardurl->r 8160: 69 64 29 29 3b 0a 09 09 63 75 72 72 5f 61 69 64 id));...curr_aid 8170: 5b 73 69 7a 65 6f 66 28 63 75 72 72 5f 61 69 64 [sizeof(curr_aid 8180: 29 20 2d 20 32 5d 20 3d 20 28 63 63 63 5f 63 75 ) - 2] = (ccc_cu 8190: 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 rr->value_cardur 81a0: 6c 2d 3e 61 70 70 69 64 20 3e 3e 20 38 29 20 26 l->appid >> 8) & 81b0: 20 30 78 66 66 3b 0a 09 09 63 75 72 72 5f 61 69 0xff;...curr_ai 81c0: 64 5b 73 69 7a 65 6f 66 28 63 75 72 72 5f 61 69 d[sizeof(curr_ai 81d0: 64 29 20 2d 20 31 5d 20 3d 20 63 63 63 5f 63 75 d) - 1] = ccc_cu 81e0: 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 rr->value_cardur 81f0: 6c 2d 3e 61 70 70 69 64 20 26 20 30 78 66 66 3b l->appid & 0xff; 8200: 0a 0a 09 09 2f 2a 20 53 65 6c 65 63 74 20 66 6f ..../* Select fo 8210: 75 6e 64 20 61 70 70 6c 65 74 20 2e 2e 2e 20 2a und applet ... * 8220: 2f 0a 09 09 73 65 6c 65 63 74 5f 72 65 74 20 3d /...select_ret = 8230: 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 cackey_select_a 8240: 70 70 6c 65 74 28 73 6c 6f 74 2c 20 63 75 72 72 pplet(slot, curr 8250: 5f 61 69 64 2c 20 73 69 7a 65 6f 66 28 63 75 72 _aid, sizeof(cur 8260: 72 5f 61 69 64 29 29 3b 0a 09 09 69 66 20 28 73 r_aid));...if (s 8270: 65 6c 65 63 74 5f 72 65 74 20 3c 20 30 29 20 7b elect_ret < 0) { 8280: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 8290: 5f 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 _PRINTF("Failed 82a0: 74 6f 20 73 65 6c 65 63 74 20 61 70 70 6c 65 74 to select applet 82b0: 2c 20 73 6b 69 70 70 69 6e 67 20 70 72 6f 63 65 , skipping proce 82c0: 73 73 69 6e 67 20 6f 66 20 74 68 69 73 20 6f 62 ssing of this ob 82d0: 6a 65 63 74 22 29 3b 0a 0a 09 09 09 63 6f 6e 74 ject");.....cont 82e0: 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 2f 2a 20 inue;...}..../* 82f0: 2e 2e 2e 20 61 6e 64 20 6f 62 6a 65 63 74 20 28 ... and object ( 8300: 66 69 6c 65 29 20 2a 2f 0a 09 09 73 65 6c 65 63 file) */...selec 8310: 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 t_ret = cackey_s 8320: 65 6c 65 63 74 5f 66 69 6c 65 28 73 6c 6f 74 2c elect_file(slot, 8330: 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 ccc_curr->value 8340: 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 6a 65 63 74 _cardurl->object 8350: 69 64 29 3b 0a 09 09 69 66 20 28 73 65 6c 65 63 id);...if (selec 8360: 74 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 09 t_ret < 0) {.... 8370: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 8380: 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 73 NTF("Failed to s 8390: 65 6c 65 63 74 20 66 69 6c 65 2c 20 73 6b 69 70 elect file, skip 83a0: 70 69 6e 67 20 70 72 6f 63 65 73 73 69 6e 67 20 ping processing 83b0: 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 22 29 of this object") 83c0: 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a ;.....continue;. 83d0: 09 09 7d 0a 0a 09 09 2f 2a 20 50 72 6f 63 65 73 ..}..../* Proces 83e0: 73 20 74 68 69 73 20 66 69 6c 65 27 73 20 54 4c s this file's TL 83f0: 56 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 63 65 V looking for ce 8400: 72 74 69 66 69 63 61 74 65 73 20 2a 2f 0a 09 09 rtificates */... 8410: 61 70 70 5f 74 6c 76 20 3d 20 63 61 63 6b 65 79 app_tlv = cackey 8420: 5f 72 65 61 64 5f 74 6c 76 28 73 6c 6f 74 29 3b _read_tlv(slot); 8430: 0a 0a 09 09 66 6f 72 20 28 61 70 70 5f 63 75 72 ....for (app_cur 8440: 72 20 3d 20 61 70 70 5f 74 6c 76 3b 20 61 70 70 r = app_tlv; app 8450: 5f 63 75 72 72 3b 20 61 70 70 5f 63 75 72 72 20 _curr; app_curr 8460: 3d 20 61 70 70 5f 63 75 72 72 2d 3e 5f 6e 65 78 = app_curr->_nex 8470: 74 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 t) {....CACKEY_D 8480: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 6f 75 EBUG_PRINTF("Fou 8490: 6e 64 20 74 61 67 3a 20 25 73 22 2c 20 43 41 43 nd tag: %s", CAC 84a0: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 54 KEY_DEBUG_FUNC_T 84b0: 41 47 5f 54 4f 5f 53 54 52 28 61 70 70 5f 63 75 AG_TO_STR(app_cu 84c0: 72 72 2d 3e 74 61 67 29 29 3b 0a 09 09 09 69 66 rr->tag));....if 84d0: 20 28 61 70 70 5f 63 75 72 72 2d 3e 74 61 67 20 (app_curr->tag 84e0: 21 3d 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 != GSCIS_TAG_CER 84f0: 54 49 46 49 43 41 54 45 29 20 7b 0a 09 09 09 09 TIFICATE) {..... 8500: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 8510: 4e 54 46 28 22 20 20 2e 2e 2e 20 73 6b 69 70 70 NTF(" ... skipp 8520: 69 6e 67 20 69 74 20 28 77 65 20 6f 6e 6c 79 20 ing it (we only 8530: 63 61 72 65 20 61 62 6f 75 74 20 43 45 52 54 49 care about CERTI 8540: 46 49 43 41 54 45 73 29 22 29 3b 0a 0a 09 09 09 FICATEs)");..... 8550: 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 7d 0a .continue;....}. 8560: 0a 09 09 09 63 75 72 72 5f 69 64 20 3d 20 26 63 ....curr_id = &c 8570: 65 72 74 73 5b 6f 75 74 69 64 78 5d 3b 0a 09 09 erts[outidx];... 8580: 09 6f 75 74 69 64 78 2b 2b 3b 0a 0a 09 09 09 6d .outidx++;.....m 8590: 65 6d 63 70 79 28 63 75 72 72 5f 69 64 2d 3e 61 emcpy(curr_id->a 85a0: 70 70 6c 65 74 2c 20 63 75 72 72 5f 61 69 64 2c pplet, curr_aid, 85b0: 20 73 69 7a 65 6f 66 28 63 75 72 72 5f 69 64 2d sizeof(curr_id- 85c0: 3e 61 70 70 6c 65 74 29 29 3b 0a 09 09 09 63 75 >applet));....cu 85d0: 72 72 5f 69 64 2d 3e 66 69 6c 65 20 3d 20 63 63 rr_id->file = cc 85e0: 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 c_curr->value_ca 85f0: 72 64 75 72 6c 2d 3e 6f 62 6a 65 63 74 69 64 3b rdurl->objectid; 8600: 0a 09 09 09 63 75 72 72 5f 69 64 2d 3e 6c 61 62 ....curr_id->lab 8610: 65 6c 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 63 el = NULL;.....c 8620: 75 72 72 5f 69 64 2d 3e 63 65 72 74 69 66 69 63 urr_id->certific 8630: 61 74 65 5f 6c 65 6e 20 3d 20 61 70 70 5f 63 75 ate_len = app_cu 8640: 72 72 2d 3e 6c 65 6e 67 74 68 3b 0a 0a 09 09 09 rr->length;..... 8650: 63 75 72 72 5f 69 64 2d 3e 63 65 72 74 69 66 69 curr_id->certifi 8660: 63 61 74 65 20 3d 20 6d 61 6c 6c 6f 63 28 63 75 cate = malloc(cu 8670: 72 72 5f 69 64 2d 3e 63 65 72 74 69 66 69 63 61 rr_id->certifica 8680: 74 65 5f 6c 65 6e 29 3b 0a 09 09 09 6d 65 6d 63 te_len);....memc 8690: 70 79 28 63 75 72 72 5f 69 64 2d 3e 63 65 72 74 py(curr_id->cert 86a0: 69 66 69 63 61 74 65 2c 20 61 70 70 5f 63 75 72 ificate, app_cur 86b0: 72 2d 3e 76 61 6c 75 65 2c 20 63 75 72 72 5f 69 r->value, curr_i 86c0: 64 2d 3e 63 65 72 74 69 66 69 63 61 74 65 5f 6c d->certificate_l 86d0: 65 6e 29 3b 0a 0a 09 09 09 69 66 20 28 6f 75 74 en);.....if (out 86e0: 69 64 78 20 3e 3d 20 2a 63 6f 75 6e 74 29 20 7b idx >= *count) { 86f0: 0a 09 09 09 09 69 66 20 28 63 65 72 74 73 5f 72 .....if (certs_r 8700: 65 73 69 7a 61 62 6c 65 29 20 7b 0a 09 09 09 09 esizable) {..... 8710: 09 2a 63 6f 75 6e 74 20 2a 3d 20 32 3b 0a 09 09 .*count *= 2;... 8720: 09 09 09 63 65 72 74 73 20 3d 20 72 65 61 6c 6c ...certs = reall 8730: 6f 63 28 63 65 72 74 73 2c 20 73 69 7a 65 6f 66 oc(certs, sizeof 8740: 28 2a 63 65 72 74 73 29 20 2a 20 28 2a 63 6f 75 (*certs) * (*cou 8750: 6e 74 29 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 nt));.....} else 8760: 20 7b 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 {......break;.. 8770: 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 ...}....}...}... 8780: 09 63 61 63 6b 65 79 5f 66 72 65 65 5f 74 6c 76 .cackey_free_tlv 8790: 28 61 70 70 5f 74 6c 76 29 3b 0a 0a 09 09 69 66 (app_tlv);....if 87a0: 20 28 6f 75 74 69 64 78 20 3e 3d 20 2a 63 6f 75 (outidx >= *cou 87b0: 6e 74 29 20 7b 0a 09 09 09 62 72 65 61 6b 3b 0a nt) {....break;. 87c0: 09 09 7d 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f ..}..}...cackey_ 87d0: 66 72 65 65 5f 74 6c 76 28 63 63 63 5f 74 6c 76 free_tlv(ccc_tlv 87e0: 29 3b 0a 0a 09 2a 63 6f 75 6e 74 20 3d 20 6f 75 );...*count = ou 87f0: 74 69 64 78 3b 0a 0a 09 69 66 20 28 63 65 72 74 tidx;...if (cert 8800: 73 5f 72 65 73 69 7a 61 62 6c 65 29 20 7b 0a 09 s_resizable) {.. 8810: 09 63 65 72 74 73 20 3d 20 72 65 61 6c 6c 6f 63 .certs = realloc 8820: 28 63 65 72 74 73 2c 20 73 69 7a 65 6f 66 28 2a (certs, sizeof(* 8830: 63 65 72 74 73 29 20 2a 20 28 2a 63 6f 75 6e 74 certs) * (*count 8840: 29 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 ));..}...return( 8850: 63 65 72 74 73 29 3b 0a 7d 0a 0a 2f 2a 20 52 65 certs);.}../* Re 8860: 74 75 72 6e 73 20 31 20 69 66 20 61 20 74 6f 6b turns 1 if a tok 8870: 65 6e 20 69 73 20 69 6e 20 74 68 65 20 73 70 65 en is in the spe 8880: 63 69 66 69 65 64 20 73 6c 6f 74 2c 20 30 20 6f cified slot, 0 o 8890: 74 68 65 72 77 69 73 65 20 2a 2f 0a 73 74 61 74 therwise */.stat 88a0: 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 74 6f ic int cackey_to 88b0: 6b 65 6e 5f 70 72 65 73 65 6e 74 28 73 74 72 75 ken_present(stru 88c0: 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a ct cackey_slot * 88d0: 73 6c 6f 74 29 20 7b 0a 09 75 6e 73 69 67 6e 65 slot) {..unsigne 88e0: 64 20 63 68 61 72 20 63 63 63 5f 61 69 64 5b 5d d char ccc_aid[] 88f0: 20 3d 20 7b 47 53 43 49 53 5f 41 49 44 5f 43 43 = {GSCIS_AID_CC 8900: 43 7d 3b 0a 09 69 6e 74 20 73 65 6e 64 5f 72 65 C};..int send_re 8910: 74 3b 0a 0a 09 2f 2a 20 53 65 6c 65 63 74 20 74 t;.../* Select t 8920: 68 65 20 43 43 43 20 41 70 70 6c 65 74 20 2a 2f he CCC Applet */ 8930: 0a 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 61 63 ..send_ret = cac 8940: 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c 65 key_select_apple 8950: 74 28 73 6c 6f 74 2c 20 63 63 63 5f 61 69 64 2c t(slot, ccc_aid, 8960: 20 73 69 7a 65 6f 66 28 63 63 63 5f 61 69 64 29 sizeof(ccc_aid) 8970: 29 3b 0a 09 69 66 20 28 73 65 6e 64 5f 72 65 74 );..if (send_ret 8980: 20 3c 20 30 29 20 7b 0a 09 09 72 65 74 75 72 6e < 0) {...return 8990: 28 30 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e (0);..}...return 89a0: 28 31 29 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 (1);.}../* Retur 89b0: 6e 73 20 30 20 6f 6e 20 73 75 63 63 65 73 73 20 ns 0 on success 89c0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61 */.static int ca 89d0: 63 6b 65 79 5f 6d 75 74 65 78 5f 63 72 65 61 74 ckey_mutex_creat 89e0: 65 28 76 6f 69 64 20 2a 2a 6d 75 74 65 78 29 20 e(void **mutex) 89f0: 7b 0a 09 70 74 68 72 65 61 64 5f 6d 75 74 65 78 {..pthread_mutex 8a00: 5f 74 20 2a 70 74 68 72 65 61 64 5f 6d 75 74 65 _t *pthread_mute 8a10: 78 3b 0a 09 69 6e 74 20 70 74 68 72 65 61 64 5f x;..int pthread_ 8a20: 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 52 56 20 63 retval;..CK_RV c 8a30: 75 73 74 6f 6d 5f 72 65 74 76 61 6c 3b 0a 0a 09 ustom_retval;... 8a40: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 8a50: 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 8a60: 0a 09 69 66 20 28 28 63 61 63 6b 65 79 5f 61 72 ..if ((cackey_ar 8a70: 67 73 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 4f gs.flags & CKF_O 8a80: 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 3d 3d S_LOCKING_OK) == 8a90: 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f CKF_OS_LOCKING_ 8aa0: 4f 4b 29 20 7b 0a 09 09 70 74 68 72 65 61 64 5f OK) {...pthread_ 8ab0: 6d 75 74 65 78 20 3d 20 6d 61 6c 6c 6f 63 28 73 mutex = malloc(s 8ac0: 69 7a 65 6f 66 28 2a 70 74 68 72 65 61 64 5f 6d izeof(*pthread_m 8ad0: 75 74 65 78 29 29 3b 0a 09 09 69 66 20 28 21 70 utex));...if (!p 8ae0: 74 68 72 65 61 64 5f 6d 75 74 65 78 29 20 7b 0a thread_mutex) {. 8af0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 8b00: 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 74 PRINTF("Failed t 8b10: 6f 20 61 6c 6c 6f 63 61 74 65 20 6d 65 6d 6f 72 o allocate memor 8b20: 79 2e 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e y.");.....return 8b30: 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 70 74 68 (-1);...}....pth 8b40: 72 65 61 64 5f 72 65 74 76 61 6c 20 3d 20 70 74 read_retval = pt 8b50: 68 72 65 61 64 5f 6d 75 74 65 78 5f 69 6e 69 74 hread_mutex_init 8b60: 28 70 74 68 72 65 61 64 5f 6d 75 74 65 78 2c 20 (pthread_mutex, 8b70: 4e 55 4c 4c 29 3b 0a 09 09 69 66 20 28 70 74 68 NULL);...if (pth 8b80: 72 65 61 64 5f 72 65 74 76 61 6c 20 21 3d 20 30 read_retval != 0 8b90: 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE 8ba0: 42 55 47 5f 50 52 49 4e 54 46 28 22 70 74 68 72 BUG_PRINTF("pthr 8bb0: 65 61 64 5f 6d 75 74 65 78 5f 69 6e 69 74 28 29 ead_mutex_init() 8bc0: 20 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 returned error 8bd0: 28 25 69 29 2e 22 2c 20 70 74 68 72 65 61 64 5f (%i).", pthread_ 8be0: 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 72 65 74 retval);.....ret 8bf0: 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 urn(-1);...}.... 8c00: 2a 6d 75 74 65 78 20 3d 20 70 74 68 72 65 61 64 *mutex = pthread 8c10: 5f 6d 75 74 65 78 3b 0a 09 7d 20 65 6c 73 65 20 _mutex;..} else 8c20: 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 61 {...if (cackey_a 8c30: 72 67 73 2e 43 72 65 61 74 65 4d 75 74 65 78 29 rgs.CreateMutex) 8c40: 20 7b 0a 09 09 09 63 75 73 74 6f 6d 5f 72 65 74 {....custom_ret 8c50: 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 61 72 67 val = cackey_arg 8c60: 73 2e 43 72 65 61 74 65 4d 75 74 65 78 28 6d 75 s.CreateMutex(mu 8c70: 74 65 78 29 3b 0a 0a 09 09 09 69 66 20 28 63 75 tex);.....if (cu 8c80: 73 74 6f 6d 5f 72 65 74 76 61 6c 20 21 3d 20 43 stom_retval != C 8c90: 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 43 41 43 KR_OK) {.....CAC 8ca0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 8cb0: 28 22 63 61 63 6b 65 79 5f 61 72 67 73 2e 43 72 ("cackey_args.Cr 8cc0: 65 61 74 65 4d 75 74 65 78 28 29 20 72 65 74 75 eateMutex() retu 8cd0: 72 6e 65 64 20 65 72 72 6f 72 20 28 25 6c 69 29 rned error (%li) 8ce0: 2e 22 2c 20 28 6c 6f 6e 67 29 20 63 75 73 74 6f .", (long) custo 8cf0: 6d 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 09 m_retval);...... 8d00: 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 09 7d return(-1);....} 8d10: 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ...}..}...CACKEY 8d20: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 8d30: 65 74 75 72 6e 69 6e 67 20 73 75 63 65 73 73 66 eturning sucessf 8d40: 75 6c 6c 79 20 28 30 29 22 29 3b 0a 0a 09 72 65 ully (0)");...re 8d50: 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 2f 2a 20 52 turn(0);.}../* R 8d60: 65 74 75 72 6e 73 20 30 20 6f 6e 20 73 75 63 63 eturns 0 on succ 8d70: 65 73 73 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e ess */.static in 8d80: 74 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c t cackey_mutex_l 8d90: 6f 63 6b 28 76 6f 69 64 20 2a 6d 75 74 65 78 29 ock(void *mutex) 8da0: 20 7b 0a 09 70 74 68 72 65 61 64 5f 6d 75 74 65 {..pthread_mute 8db0: 78 5f 74 20 2a 70 74 68 72 65 61 64 5f 6d 75 74 x_t *pthread_mut 8dc0: 65 78 3b 0a 09 69 6e 74 20 70 74 68 72 65 61 64 ex;..int pthread 8dd0: 5f 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 52 56 20 _retval;..CK_RV 8de0: 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 3b 0a 0a custom_retval;.. 8df0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 8e00: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 8e10: 0a 0a 09 69 66 20 28 28 63 61 63 6b 65 79 5f 61 ...if ((cackey_a 8e20: 72 67 73 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f rgs.flags & CKF_ 8e30: 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 3d OS_LOCKING_OK) = 8e40: 3d 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 = CKF_OS_LOCKING 8e50: 5f 4f 4b 29 20 7b 0a 09 09 70 74 68 72 65 61 64 _OK) {...pthread 8e60: 5f 6d 75 74 65 78 20 3d 20 6d 75 74 65 78 3b 0a _mutex = mutex;. 8e70: 0a 09 09 70 74 68 72 65 61 64 5f 72 65 74 76 61 ...pthread_retva 8e80: 6c 20 3d 20 70 74 68 72 65 61 64 5f 6d 75 74 65 l = pthread_mute 8e90: 78 5f 6c 6f 63 6b 28 70 74 68 72 65 61 64 5f 6d x_lock(pthread_m 8ea0: 75 74 65 78 29 3b 0a 09 09 69 66 20 28 70 74 68 utex);...if (pth 8eb0: 72 65 61 64 5f 72 65 74 76 61 6c 20 21 3d 20 30 read_retval != 0 8ec0: 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE 8ed0: 42 55 47 5f 50 52 49 4e 54 46 28 22 70 74 68 72 BUG_PRINTF("pthr 8ee0: 65 61 64 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 29 ead_mutex_lock() 8ef0: 20 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 returned error 8f00: 28 25 69 29 2e 22 2c 20 70 74 68 72 65 61 64 5f (%i).", pthread_ 8f10: 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 72 65 74 retval);.....ret 8f20: 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09 7d 20 urn(-1);...}..} 8f30: 65 6c 73 65 20 7b 0a 09 09 69 66 20 28 63 61 63 else {...if (cac 8f40: 6b 65 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 key_args.LockMut 8f50: 65 78 29 20 7b 0a 09 09 09 63 75 73 74 6f 6d 5f ex) {....custom_ 8f60: 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 8f70: 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 28 6d args.LockMutex(m 8f80: 75 74 65 78 29 3b 0a 0a 09 09 09 69 66 20 28 63 utex);.....if (c 8f90: 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 21 3d 20 ustom_retval != 8fa0: 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 43 41 CKR_OK) {.....CA 8fb0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 8fc0: 46 28 22 63 61 63 6b 65 79 5f 61 72 67 73 2e 4c F("cackey_args.L 8fd0: 6f 63 6b 4d 75 74 65 78 28 29 20 72 65 74 75 72 ockMutex() retur 8fe0: 6e 65 64 20 65 72 72 6f 72 20 28 25 6c 69 29 2e ned error (%li). 8ff0: 22 2c 20 28 6c 6f 6e 67 29 20 63 75 73 74 6f 6d ", (long) custom 9000: 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 09 72 _retval);......r 9010: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 09 7d 0a eturn(-1);....}. 9020: 09 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f ..}..}...CACKEY_ 9030: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 9040: 74 75 72 6e 69 6e 67 20 73 75 63 65 73 73 66 75 turning sucessfu 9050: 6c 6c 79 20 28 30 29 22 29 3b 0a 0a 09 72 65 74 lly (0)");...ret 9060: 75 72 6e 28 30 29 3b 0a 7d 0a 0a 2f 2a 20 52 65 urn(0);.}../* Re 9070: 74 75 72 6e 73 20 30 20 6f 6e 20 73 75 63 63 65 turns 0 on succe 9080: 73 73 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 ss */.static int 9090: 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e cackey_mutex_un 90a0: 6c 6f 63 6b 28 76 6f 69 64 20 2a 6d 75 74 65 78 lock(void *mutex 90b0: 29 20 7b 0a 09 70 74 68 72 65 61 64 5f 6d 75 74 ) {..pthread_mut 90c0: 65 78 5f 74 20 2a 70 74 68 72 65 61 64 5f 6d 75 ex_t *pthread_mu 90d0: 74 65 78 3b 0a 09 69 6e 74 20 70 74 68 72 65 61 tex;..int pthrea 90e0: 64 5f 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 52 56 d_retval;..CK_RV 90f0: 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 3b 0a custom_retval;. 9100: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 9110: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 9120: 3b 0a 0a 09 69 66 20 28 28 63 61 63 6b 65 79 5f ;...if ((cackey_ 9130: 61 72 67 73 2e 66 6c 61 67 73 20 26 20 43 4b 46 args.flags & CKF 9140: 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 _OS_LOCKING_OK) 9150: 3d 3d 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e == CKF_OS_LOCKIN 9160: 47 5f 4f 4b 29 20 7b 0a 09 09 70 74 68 72 65 61 G_OK) {...pthrea 9170: 64 5f 6d 75 74 65 78 20 3d 20 6d 75 74 65 78 3b d_mutex = mutex; 9180: 0a 0a 09 09 70 74 68 72 65 61 64 5f 72 65 74 76 ....pthread_retv 9190: 61 6c 20 3d 20 70 74 68 72 65 61 64 5f 6d 75 74 al = pthread_mut 91a0: 65 78 5f 75 6e 6c 6f 63 6b 28 70 74 68 72 65 61 ex_unlock(pthrea 91b0: 64 5f 6d 75 74 65 78 29 3b 0a 09 09 69 66 20 28 d_mutex);...if ( 91c0: 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c 20 21 pthread_retval ! 91d0: 3d 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 = 0) {....CACKEY 91e0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 70 _DEBUG_PRINTF("p 91f0: 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 75 6e 6c thread_mutex_unl 9200: 6f 63 6b 28 29 20 72 65 74 75 72 6e 65 64 20 65 ock() returned e 9210: 72 72 6f 72 20 28 25 69 29 2e 22 2c 20 70 74 68 rror (%i).", pth 9220: 72 65 61 64 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 read_retval);... 9230: 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 ..return(-1);... 9240: 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 }..} else {...if 9250: 20 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 55 6e (cackey_args.Un 9260: 6c 6f 63 6b 4d 75 74 65 78 29 20 7b 0a 09 09 09 lockMutex) {.... 9270: 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 3d 20 custom_retval = 9280: 63 61 63 6b 65 79 5f 61 72 67 73 2e 55 6e 6c 6f cackey_args.Unlo 9290: 63 6b 4d 75 74 65 78 28 6d 75 74 65 78 29 3b 0a ckMutex(mutex);. 92a0: 0a 09 09 09 69 66 20 28 63 75 73 74 6f 6d 5f 72 ....if (custom_r 92b0: 65 74 76 61 6c 20 21 3d 20 43 4b 52 5f 4f 4b 29 etval != CKR_OK) 92c0: 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {.....CACKEY_DE 92d0: 42 55 47 5f 50 52 49 4e 54 46 28 22 63 61 63 6b BUG_PRINTF("cack 92e0: 65 79 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 ey_args.UnlockMu 92f0: 74 65 78 28 29 20 72 65 74 75 72 6e 65 64 20 65 tex() returned e 9300: 72 72 6f 72 20 28 25 6c 69 29 2e 22 2c 20 28 6c rror (%li).", (l 9310: 6f 6e 67 29 20 63 75 73 74 6f 6d 5f 72 65 74 76 ong) custom_retv 9320: 61 6c 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e al);......return 9330: 28 2d 31 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 (-1);....}...}.. 9340: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 9350: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 9360: 6e 67 20 73 75 63 65 73 73 66 75 6c 6c 79 20 28 ng sucessfully ( 9370: 30 29 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 30 0)");...return(0 9380: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 43 4b 5f );.}..static CK_ 9390: 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 63 61 ATTRIBUTE_PTR ca 93a0: 63 6b 65 79 5f 67 65 74 5f 61 74 74 72 69 62 75 ckey_get_attribu 93b0: 74 65 73 28 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c tes(CK_OBJECT_CL 93c0: 41 53 53 20 6f 62 6a 65 63 74 63 6c 61 73 73 2c ASS objectclass, 93d0: 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 70 struct cackey_p 93e0: 63 73 63 5f 69 64 65 6e 74 69 74 79 20 2a 69 64 csc_identity *id 93f0: 65 6e 74 69 74 79 2c 20 75 6e 73 69 67 6e 65 64 entity, unsigned 9400: 20 6c 6f 6e 67 20 69 64 65 6e 74 69 74 79 5f 6e long identity_n 9410: 75 6d 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 um, CK_ULONG_PTR 9420: 20 70 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 73 74 pulCount) {..st 9430: 61 74 69 63 20 43 4b 5f 42 42 4f 4f 4c 20 63 6b atic CK_BBOOL ck 9440: 5f 74 72 75 65 20 3d 20 31 3b 0a 09 73 74 61 74 _true = 1;..stat 9450: 69 63 20 43 4b 5f 42 42 4f 4f 4c 20 63 6b 5f 66 ic CK_BBOOL ck_f 9460: 61 6c 73 65 20 3d 20 30 3b 0a 09 43 4b 5f 55 4c alse = 0;..CK_UL 9470: 4f 4e 47 20 6e 75 6d 61 74 74 72 73 20 3d 20 30 ONG numattrs = 0 9480: 2c 20 72 65 74 76 61 6c 5f 63 6f 75 6e 74 3b 0a , retval_count;. 9490: 09 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 54 59 .CK_ATTRIBUTE_TY 94a0: 50 45 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 PE curr_attr_typ 94b0: 65 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 e;..CK_ATTRIBUTE 94c0: 20 63 75 72 72 5f 61 74 74 72 2c 20 2a 72 65 74 curr_attr, *ret 94d0: 76 61 6c 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 54 val;..CK_VOID_PT 94e0: 52 20 70 56 61 6c 75 65 3b 0a 09 43 4b 5f 55 4c R pValue;..CK_UL 94f0: 4f 4e 47 20 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a ONG ulValueLen;. 9500: 09 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 53 .CK_OBJECT_CLASS 9510: 20 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c 61 73 73 ck_object_class 9520: 3b 0a 09 43 4b 5f 43 45 52 54 49 46 49 43 41 54 ;..CK_CERTIFICAT 9530: 45 5f 54 59 50 45 20 63 6b 5f 63 65 72 74 69 66 E_TYPE ck_certif 9540: 69 63 61 74 65 5f 74 79 70 65 3b 0a 09 43 4b 5f icate_type;..CK_ 9550: 4b 45 59 5f 54 59 50 45 20 63 6b 5f 6b 65 79 5f KEY_TYPE ck_key_ 9560: 74 79 70 65 3b 0a 09 43 4b 5f 55 54 46 38 43 48 type;..CK_UTF8CH 9570: 41 52 20 75 63 54 6d 70 42 75 66 5b 31 30 32 34 AR ucTmpBuf[1024 9580: 5d 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 ];..unsigned cha 9590: 72 20 63 65 72 74 69 66 69 63 61 74 65 5b 31 36 r certificate[16 95a0: 33 38 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 20 63 384];..ssize_t c 95b0: 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3d ertificate_len = 95c0: 20 2d 31 2c 20 78 35 30 39 5f 72 65 61 64 5f 72 -1, x509_read_r 95d0: 65 74 3b 0a 09 69 6e 74 20 70 56 61 6c 75 65 5f et;..int pValue_ 95e0: 66 72 65 65 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 free;...CACKEY_D 95f0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 9600: 6c 65 64 20 28 6f 62 6a 65 63 74 43 6c 61 73 73 led (objectClass 9610: 20 3d 20 25 6c 75 2c 20 69 64 65 6e 74 69 74 79 = %lu, identity 9620: 5f 6e 75 6d 20 3d 20 25 6c 75 29 2e 22 2c 20 28 _num = %lu).", ( 9630: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6f unsigned long) o 9640: 62 6a 65 63 74 63 6c 61 73 73 2c 20 69 64 65 6e bjectclass, iden 9650: 74 69 74 79 5f 6e 75 6d 29 3b 0a 0a 09 69 66 20 tity_num);...if 9660: 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 (objectclass != 9670: 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 20 CKO_CERTIFICATE 9680: 26 26 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 && objectclass ! 9690: 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b 45 59 = CKO_PUBLIC_KEY 96a0: 20 26 26 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 && objectclass 96b0: 21 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b != CKO_PRIVATE_K 96c0: 45 59 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 EY) {...CACKEY_D 96d0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 96e0: 75 72 6e 69 6e 67 20 30 20 6f 62 6a 65 63 74 73 urning 0 objects 96f0: 20 28 4e 55 4c 4c 29 2c 20 69 6e 76 61 6c 69 64 (NULL), invalid 9700: 20 6f 62 6a 65 63 74 20 63 6c 61 73 73 22 29 3b object class"); 9710: 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 ....return(NULL) 9720: 3b 0a 09 7d 0a 0a 09 72 65 74 76 61 6c 5f 63 6f ;..}...retval_co 9730: 75 6e 74 20 3d 20 31 36 3b 0a 09 72 65 74 76 61 unt = 16;..retva 9740: 6c 20 3d 20 6d 61 6c 6c 6f 63 28 72 65 74 76 61 l = malloc(retva 9750: 6c 5f 63 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 l_count * sizeof 9760: 28 2a 72 65 74 76 61 6c 29 29 3b 0a 0a 09 2f 2a (*retval));.../* 9770: 20 58 58 58 3a 20 47 65 74 20 43 65 72 74 20 2a XXX: Get Cert * 9780: 2f 0a 09 63 65 72 74 69 66 69 63 61 74 65 5f 6c /..certificate_l 9790: 65 6e 20 3d 20 2d 31 3b 0a 0a 09 69 66 20 28 63 en = -1;...if (c 97a0: 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3d ertificate_len = 97b0: 3d 20 2d 31 29 20 7b 0a 09 09 43 41 43 4b 45 59 = -1) {...CACKEY 97c0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 97d0: 65 74 75 72 6e 69 6e 67 20 30 20 6f 62 6a 65 63 eturning 0 objec 97e0: 74 73 20 28 4e 55 4c 4c 29 2c 20 74 68 69 73 20 ts (NULL), this 97f0: 69 64 65 6e 74 69 74 79 20 64 6f 65 73 20 6e 6f identity does no 9800: 74 20 68 61 76 65 20 61 6e 20 58 2e 35 30 39 20 t have an X.509 9810: 63 65 72 74 69 66 69 63 61 74 65 20 61 73 73 6f certificate asso 9820: 63 69 61 74 65 64 20 77 69 74 68 20 69 74 20 61 ciated with it a 9830: 6e 64 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b nd will not work 9840: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 ");....return(NU 9850: 4c 4c 29 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 63 LL);..}...for (c 9860: 75 72 72 5f 61 74 74 72 5f 74 79 70 65 20 3d 20 urr_attr_type = 9870: 30 3b 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 0; curr_attr_typ 9880: 65 20 3c 20 30 78 63 65 35 33 36 33 35 66 3b 20 e < 0xce53635f; 9890: 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 2b 2b curr_attr_type++ 98a0: 29 20 7b 0a 09 09 69 66 20 28 63 75 72 72 5f 61 ) {...if (curr_a 98b0: 74 74 72 5f 74 79 70 65 20 3d 3d 20 30 78 38 30 ttr_type == 0x80 98c0: 30 29 20 7b 0a 09 09 09 63 75 72 72 5f 61 74 74 0) {....curr_att 98d0: 72 5f 74 79 70 65 20 3d 20 30 78 63 65 35 33 36 r_type = 0xce536 98e0: 33 30 30 3b 0a 09 09 7d 0a 0a 09 09 70 56 61 6c 300;...}....pVal 98f0: 75 65 5f 66 72 65 65 20 3d 20 30 3b 0a 09 09 70 ue_free = 0;...p 9900: 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 Value = NULL;... 9910: 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 28 43 4b ulValueLen = (CK 9920: 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 0a 09 09 73 77 _LONG) -1;....sw 9930: 69 74 63 68 20 28 63 75 72 72 5f 61 74 74 72 5f itch (curr_attr_ 9940: 74 79 70 65 29 20 7b 0a 09 09 09 63 61 73 65 20 type) {....case 9950: 43 4b 41 5f 43 4c 41 53 53 3a 0a 09 09 09 09 43 CKA_CLASS:.....C 9960: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 9970: 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 TF("Requesting a 9980: 74 74 72 69 62 75 74 65 20 43 4b 41 5f 43 4c 41 ttribute CKA_CLA 9990: 53 53 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e SS (0x%08lx) ... 99a0: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 99b0: 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 g) curr_attr_typ 99c0: 65 29 3b 0a 0a 09 09 09 09 63 6b 5f 6f 62 6a 65 e);......ck_obje 99d0: 63 74 5f 63 6c 61 73 73 20 3d 20 6f 62 6a 65 63 ct_class = objec 99e0: 74 63 6c 61 73 73 3b 0a 0a 09 09 09 09 70 56 61 tclass;......pVa 99f0: 6c 75 65 20 3d 20 26 63 6b 5f 6f 62 6a 65 63 74 lue = &ck_object 9a00: 5f 63 6c 61 73 73 3b 0a 09 09 09 09 75 6c 56 61 _class;.....ulVa 9a10: 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 lueLen = sizeof( 9a20: 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c 61 73 73 29 ck_object_class) 9a30: 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 ;......CACKEY_DE 9a40: 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... 9a50: 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 returning %lu ( 9a60: 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 %p/%lu)", (unsig 9a70: 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f ned long) *((CK_ 9a80: 4f 42 4a 45 43 54 5f 43 4c 41 53 53 20 2a 29 20 OBJECT_CLASS *) 9a90: 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c pValue), pValue, 9aa0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 9ab0: 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... 9ac0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas 9ad0: 65 20 43 4b 41 5f 54 4f 4b 45 4e 3a 0a 09 09 09 e CKA_TOKEN:.... 9ae0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 9af0: 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting 9b00: 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 54 attribute CKA_T 9b10: 4f 4b 45 4e 20 28 30 78 25 30 38 6c 78 29 20 2e OKEN (0x%08lx) . 9b20: 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 9b30: 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 9b40: 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75 ype);......pValu 9b50: 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 e = &ck_true;... 9b60: 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 ..ulValueLen = s 9b70: 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a izeof(ck_true);. 9b80: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 9b90: 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 G_PRINTF(" ... r 9ba0: 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 eturning %lu (%p 9bb0: 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 /%lu)", (unsigne 9bc0: 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 d long) *((CK_BB 9bd0: 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 OOL *) pValue), 9be0: 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 pValue, (unsigne 9bf0: 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c d long) ulValueL 9c00: 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b en);......break; 9c10: 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 4d 4f 44 ....case CKA_MOD 9c20: 49 46 49 41 42 4c 45 3a 0a 09 09 09 09 43 41 43 IFIABLE:.....CAC 9c30: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 9c40: 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 ("Requesting att 9c50: 72 69 62 75 74 65 20 43 4b 41 5f 4d 4f 44 49 46 ribute CKA_MODIF 9c60: 49 41 42 4c 45 20 28 30 78 25 30 38 6c 78 29 20 IABLE (0x%08lx) 9c70: 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 ...", (unsigned 9c80: 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f long) curr_attr_ 9c90: 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c type);......pVal 9ca0: 75 65 20 3d 20 26 63 6b 5f 66 61 6c 73 65 3b 0a ue = &ck_false;. 9cb0: 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = 9cc0: 20 73 69 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 65 sizeof(ck_false 9cd0: 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 );......CACKEY_D 9ce0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e EBUG_PRINTF(" .. 9cf0: 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 . returning %lu 9d00: 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 (%p/%lu)", (unsi 9d10: 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b gned long) *((CK 9d20: 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 _BBOOL *) pValue 9d30: 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 ), pValue, (unsi 9d40: 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c gned long) ulVal 9d50: 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 ueLen);......bre 9d60: 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f ak;....case CKA_ 9d70: 4c 41 42 45 4c 3a 0a 09 09 09 09 43 41 43 4b 45 LABEL:.....CACKE 9d80: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 9d90: 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri 9da0: 62 75 74 65 20 43 4b 41 5f 4c 41 42 45 4c 20 28 bute CKA_LABEL ( 9db0: 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 0x%08lx) ...", ( 9dc0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 unsigned long) c 9dd0: 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a urr_attr_type);. 9de0: 0a 09 09 09 09 2f 2a 20 58 58 58 3a 20 44 65 74 ...../* XXX: Det 9df0: 65 72 6d 69 6e 65 20 6e 61 6d 65 20 2a 2f 0a 0a ermine name */.. 9e00: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 9e10: 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 _PRINTF(" ... re 9e20: 74 75 72 6e 69 6e 67 20 25 73 20 28 25 70 2f 25 turning %s (%p/% 9e30: 6c 75 29 22 2c 20 28 63 68 61 72 20 2a 29 20 28 lu)", (char *) ( 9e40: 28 43 4b 5f 55 54 46 38 43 48 41 52 20 2a 29 20 (CK_UTF8CHAR *) 9e50: 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c pValue), pValue, 9e60: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 9e70: 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... 9e80: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas 9e90: 65 20 43 4b 41 5f 56 41 4c 55 45 3a 0a 09 09 09 e CKA_VALUE:.... 9ea0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 9eb0: 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting 9ec0: 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 56 attribute CKA_V 9ed0: 41 4c 55 45 20 28 30 78 25 30 38 6c 78 29 20 2e ALUE (0x%08lx) . 9ee0: 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 9ef0: 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 9f00: 79 70 65 29 3b 0a 0a 09 09 09 09 73 77 69 74 63 ype);......switc 9f10: 68 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 29 20 h (objectclass) 9f20: 7b 0a 09 09 09 09 09 63 61 73 65 20 43 4b 4f 5f {......case CKO_ 9f30: 50 52 49 56 41 54 45 5f 4b 45 59 3a 0a 09 09 09 PRIVATE_KEY:.... 9f40: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 9f50: 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 PRINTF(" ... but 9f60: 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 not getting it 9f70: 62 65 63 61 75 73 65 20 77 65 20 61 72 65 20 61 because we are a 9f80: 20 70 72 69 76 61 74 65 20 6b 65 79 2e 22 29 3b private key."); 9f90: 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 ........break;.. 9fa0: 09 09 09 09 63 61 73 65 20 43 4b 4f 5f 50 55 42 ....case CKO_PUB 9fb0: 4c 49 43 5f 4b 45 59 3a 0a 09 09 09 09 09 09 2f LIC_KEY:......./ 9fc0: 2a 20 58 58 58 3a 20 54 4f 44 4f 20 2a 2f 0a 0a * XXX: TODO */.. 9fd0: 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 9fe0: 09 09 63 61 73 65 20 43 4b 4f 5f 43 45 52 54 49 ..case CKO_CERTI 9ff0: 46 49 43 41 54 45 3a 0a 09 09 09 09 09 09 70 56 FICATE:.......pV a000: 61 6c 75 65 20 3d 20 63 65 72 74 69 66 69 63 61 alue = certifica a010: 74 65 3b 0a 09 09 09 09 09 09 75 6c 56 61 6c 75 te;.......ulValu a020: 65 4c 65 6e 20 3d 20 63 65 72 74 69 66 69 63 61 eLen = certifica a030: 74 65 5f 6c 65 6e 3b 0a 0a 09 09 09 09 09 09 62 te_len;........b a040: 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 reak;.....}..... a050: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR a060: 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 INTF(" ... retur a070: 6e 69 6e 67 20 25 70 2f 25 6c 75 22 2c 20 70 56 ning %p/%lu", pV a080: 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 alue, (unsigned a090: 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e long) ulValueLen a0a0: 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 );......break;.. a0b0: 09 09 63 61 73 65 20 43 4b 41 5f 49 53 53 55 45 ..case CKA_ISSUE a0c0: 52 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 R:.....CACKEY_DE a0d0: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 BUG_PRINTF("Requ a0e0: 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 esting attribute a0f0: 20 43 4b 41 5f 49 53 53 55 45 52 20 28 30 78 25 CKA_ISSUER (0x% a100: 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 08lx) ...", (uns a110: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 igned long) curr a120: 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 _attr_type);.... a130: 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 ..if (objectclas a140: 73 20 21 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 s != CKO_CERTIFI a150: 43 41 54 45 29 20 7b 0a 09 09 09 09 09 43 41 43 CATE) {......CAC a160: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF a170: 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 (" ... but not g a180: 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 etting it becaus a190: 65 20 77 65 20 61 72 65 20 6e 6f 74 20 61 20 63 e we are not a c a1a0: 65 72 74 69 66 69 63 61 74 65 2e 22 29 3b 0a 0a ertificate.");.. a1b0: 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 .....break;..... a1c0: 7d 0a 0a 09 09 09 09 69 66 20 28 63 65 72 74 69 }......if (certi a1d0: 66 69 63 61 74 65 5f 6c 65 6e 20 3e 3d 20 30 29 ficate_len >= 0) a1e0: 20 7b 0a 09 09 09 09 09 78 35 30 39 5f 72 65 61 {......x509_rea a1f0: 64 5f 72 65 74 20 3d 20 78 35 30 39 5f 74 6f 5f d_ret = x509_to_ a200: 69 73 73 75 65 72 28 63 65 72 74 69 66 69 63 61 issuer(certifica a210: 74 65 2c 20 63 65 72 74 69 66 69 63 61 74 65 5f te, certificate_ a220: 6c 65 6e 2c 20 26 70 56 61 6c 75 65 29 3b 0a 09 len, &pValue);.. a230: 09 09 09 09 69 66 20 28 78 35 30 39 5f 72 65 61 ....if (x509_rea a240: 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 09 d_ret < 0) {.... a250: 09 09 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c ...pValue = NULL a260: 3b 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a ;......} else {. a270: 09 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e ......ulValueLen a280: 20 3d 20 78 35 30 39 5f 72 65 61 64 5f 72 65 74 = x509_read_ret a290: 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 0a ;......}.....}.. a2a0: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG a2b0: 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 _PRINTF(" ... re a2c0: 74 75 72 6e 69 6e 67 20 25 70 2f 25 6c 75 22 2c turning %p/%lu", a2d0: 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e pValue, (unsign a2e0: 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 ed long) ulValue a2f0: 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b Len);......break a300: 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 53 45 ;....case CKA_SE a310: 52 49 41 4c 5f 4e 55 4d 42 45 52 3a 0a 09 09 09 RIAL_NUMBER:.... a320: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR a330: 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting a340: 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 53 attribute CKA_S a350: 45 52 49 41 4c 5f 4e 55 4d 42 45 52 20 28 30 78 ERIAL_NUMBER (0x a360: 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e %08lx) ...", (un a370: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 signed long) cur a380: 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 r_attr_type);... a390: 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 ...if (objectcla a3a0: 73 73 20 21 3d 20 43 4b 4f 5f 43 45 52 54 49 46 ss != CKO_CERTIF a3b0: 49 43 41 54 45 29 20 7b 0a 09 09 09 09 09 43 41 ICATE) {......CA a3c0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT a3d0: 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 F(" ... but not a3e0: 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 getting it becau a3f0: 73 65 20 77 65 20 61 72 65 20 6e 6f 74 20 61 20 se we are not a a400: 63 65 72 74 69 66 69 63 61 74 65 2e 22 29 3b 0a certificate.");. a410: 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... a420: 09 7d 0a 0a 09 09 09 09 69 66 20 28 63 65 72 74 .}......if (cert a430: 69 66 69 63 61 74 65 5f 6c 65 6e 20 3e 3d 20 30 ificate_len >= 0 a440: 29 20 7b 0a 09 09 09 09 09 78 35 30 39 5f 72 65 ) {......x509_re a450: 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f 74 6f ad_ret = x509_to a460: 5f 73 65 72 69 61 6c 28 63 65 72 74 69 66 69 63 _serial(certific a470: 61 74 65 2c 20 63 65 72 74 69 66 69 63 61 74 65 ate, certificate a480: 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 65 29 3b 0a _len, &pValue);. a490: 09 09 09 09 09 69 66 20 28 78 35 30 39 5f 72 65 .....if (x509_re a4a0: 61 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 ad_ret < 0) {... a4b0: 09 09 09 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c ....pValue = NUL a4c0: 4c 3b 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b L;......} else { a4d0: 0a 09 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 .......ulValueLe a4e0: 6e 20 3d 20 78 35 30 39 5f 72 65 61 64 5f 72 65 n = x509_read_re a4f0: 74 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a t;......}.....}. a500: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU a510: 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 G_PRINTF(" ... r a520: 65 74 75 72 6e 69 6e 67 20 28 25 70 2f 25 6c 75 eturning (%p/%lu a530: 29 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 )", pValue, (uns a540: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 igned long) ulVa a550: 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 lueLen);......br a560: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 eak;....case CKA a570: 5f 53 55 42 4a 45 43 54 3a 0a 09 09 09 09 43 41 _SUBJECT:.....CA a580: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT a590: 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 F("Requesting at a5a0: 74 72 69 62 75 74 65 20 43 4b 41 5f 53 55 42 4a tribute CKA_SUBJ a5b0: 45 43 54 20 28 30 78 25 30 38 6c 78 29 20 2e 2e ECT (0x%08lx) .. a5c0: 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f .", (unsigned lo a5d0: 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 ng) curr_attr_ty a5e0: 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 pe);......if (ob a5f0: 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f jectclass != CKO a600: 5f 43 45 52 54 49 46 49 43 41 54 45 29 20 7b 0a _CERTIFICATE) {. a610: 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU a620: 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 G_PRINTF(" ... b a630: 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 ut not getting i a640: 74 20 62 65 63 61 75 73 65 20 77 65 20 61 72 65 t because we are a650: 20 6e 6f 74 20 61 20 63 65 72 74 69 66 69 63 61 not a certifica a660: 74 65 2e 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 te.");.......bre a670: 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 ak;.....}......i a680: 66 20 28 63 65 72 74 69 66 69 63 61 74 65 5f 6c f (certificate_l a690: 65 6e 20 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 en >= 0) {...... a6a0: 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 x509_read_ret = a6b0: 78 35 30 39 5f 74 6f 5f 73 75 62 6a 65 63 74 28 x509_to_subject( a6c0: 63 65 72 74 69 66 69 63 61 74 65 2c 20 63 65 72 certificate, cer a6d0: 74 69 66 69 63 61 74 65 5f 6c 65 6e 2c 20 26 70 tificate_len, &p a6e0: 56 61 6c 75 65 29 3b 0a 09 09 09 09 09 69 66 20 Value);......if a6f0: 28 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3c (x509_read_ret < a700: 20 30 29 20 7b 0a 09 09 09 09 09 09 70 56 61 6c 0) {.......pVal a710: 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 ue = NULL;...... a720: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 75 } else {.......u a730: 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 lValueLen = x509 a740: 5f 72 65 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 _read_ret;...... a750: 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 }.....}......CAC a760: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF a770: 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 (" ... returning a780: 20 25 70 2f 25 6c 75 22 2c 20 70 56 61 6c 75 65 %p/%lu", pValue a790: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long a7a0: 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. a7b0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca a7c0: 73 65 20 43 4b 41 5f 49 44 3a 0a 09 09 09 09 43 se CKA_ID:.....C a7d0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN a7e0: 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 TF("Requesting a a7f0: 74 74 72 69 62 75 74 65 20 43 4b 41 5f 49 44 20 ttribute CKA_ID a800: 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 (0x%08lx) ...", a810: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) a820: 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b curr_attr_type); a830: 0a 0a 09 09 09 09 75 63 54 6d 70 42 75 66 5b 30 ......ucTmpBuf[0 a840: 5d 20 3d 20 28 28 69 64 65 6e 74 69 74 79 5f 6e ] = ((identity_n a850: 75 6d 20 2b 20 31 29 20 3e 3e 20 38 29 20 26 20 um + 1) >> 8) & a860: 30 78 66 66 3b 0a 09 09 09 09 75 63 54 6d 70 42 0xff;.....ucTmpB a870: 75 66 5b 31 5d 20 3d 20 20 28 69 64 65 6e 74 69 uf[1] = (identi a880: 74 79 5f 6e 75 6d 20 2b 20 31 29 20 26 20 30 78 ty_num + 1) & 0x a890: 66 66 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 ff;......pValue a8a0: 3d 20 26 75 63 54 6d 70 42 75 66 3b 0a 09 09 09 = &ucTmpBuf;.... a8b0: 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 32 3b .ulValueLen = 2; a8c0: 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB a8d0: 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... a8e0: 72 65 74 75 72 6e 69 6e 67 20 25 70 2f 25 6c 75 returning %p/%lu a8f0: 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 ", pValue, (unsi a900: 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c gned long) ulVal a910: 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 ueLen);......bre a920: 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f ak;....case CKA_ a930: 43 45 52 54 49 46 49 43 41 54 45 5f 54 59 50 45 CERTIFICATE_TYPE a940: 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB a950: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque a960: 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute a970: 43 4b 41 5f 43 45 52 54 49 46 49 43 41 54 45 5f CKA_CERTIFICATE_ a980: 54 59 50 45 20 28 30 78 25 30 38 6c 78 29 20 2e TYPE (0x%08lx) . a990: 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l a9a0: 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t a9b0: 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f ype);......if (o a9c0: 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b bjectclass != CK a9d0: 4f 5f 43 45 52 54 49 46 49 43 41 54 45 29 20 7b O_CERTIFICATE) { a9e0: 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB a9f0: 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... aa00: 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 but not getting aa10: 69 74 20 62 65 63 61 75 73 65 20 77 65 20 61 72 it because we ar aa20: 65 20 6e 6f 74 20 61 20 63 65 72 74 69 66 69 63 e not a certific aa30: 61 74 65 2e 22 29 3b 0a 0a 09 09 09 09 09 62 72 ate.");.......br aa40: 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 eak;.....}...... aa50: 2f 2a 20 57 65 20 6f 6e 6c 79 20 73 75 70 70 6f /* We only suppo aa60: 72 74 20 6f 6e 65 20 63 65 72 74 69 66 69 63 61 rt one certifica aa70: 74 65 20 74 79 70 65 20 2a 2f 0a 09 09 09 09 63 te type */.....c aa80: 6b 5f 63 65 72 74 69 66 69 63 61 74 65 5f 74 79 k_certificate_ty aa90: 70 65 20 3d 20 43 4b 43 5f 58 5f 35 30 39 3b 0a pe = CKC_X_509;. aaa0: 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 .....pValue = &c aab0: 6b 5f 63 65 72 74 69 66 69 63 61 74 65 5f 74 79 k_certificate_ty aac0: 70 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c pe;.....ulValueL aad0: 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 63 en = sizeof(ck_c aae0: 65 72 74 69 66 69 63 61 74 65 5f 74 79 70 65 29 ertificate_type) aaf0: 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 ;......CACKEY_DE ab00: 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... ab10: 20 72 65 74 75 72 6e 69 6e 67 20 43 4b 43 5f 58 returning CKC_X ab20: 5f 35 30 39 20 28 25 6c 75 29 20 28 25 70 2f 25 _509 (%lu) (%p/% ab30: 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 lu)", (unsigned ab40: 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 43 45 52 54 long) *((CK_CERT ab50: 49 46 49 43 41 54 45 5f 54 59 50 45 20 2a 29 20 IFICATE_TYPE *) ab60: 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c pValue), pValue, ab70: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) ab80: 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... ab90: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas aba0: 65 20 43 4b 41 5f 4b 45 59 5f 54 59 50 45 3a 0a e CKA_KEY_TYPE:. abb0: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG abc0: 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 _PRINTF("Request abd0: 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b ing attribute CK abe0: 41 5f 4b 45 59 5f 54 59 50 45 20 28 30 78 25 30 A_KEY_TYPE (0x%0 abf0: 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 8lx) ...", (unsi ac00: 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f gned long) curr_ ac10: 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 attr_type);..... ac20: 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 .if (objectclass ac30: 20 21 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f != CKO_PRIVATE_ ac40: 4b 45 59 20 26 26 20 6f 62 6a 65 63 74 63 6c 61 KEY && objectcla ac50: 73 73 20 21 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 ss != CKO_PUBLIC ac60: 5f 4b 45 59 29 20 7b 0a 09 09 09 09 09 43 41 43 _KEY) {......CAC ac70: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF ac80: 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 (" ... but not g ac90: 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 etting it becaus aca0: 65 20 77 65 20 61 72 65 20 6e 6f 74 20 61 20 6b e we are not a k acb0: 65 79 2e 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 ey.");.......bre acc0: 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 2f ak;.....}....../ acd0: 2a 20 57 65 20 6f 6e 6c 79 20 73 75 70 70 6f 72 * We only suppor ace0: 74 20 6f 6e 65 20 6b 65 79 20 74 79 70 65 20 2a t one key type * acf0: 2f 0a 09 09 09 09 63 6b 5f 6b 65 79 5f 74 79 70 /.....ck_key_typ ad00: 65 20 3d 20 43 4b 4b 5f 52 53 41 3b 0a 0a 09 09 e = CKK_RSA;.... ad10: 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 6b ..pValue = &ck_k ad20: 65 79 5f 74 79 70 65 3b 0a 09 09 09 09 75 6c 56 ey_type;.....ulV ad30: 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 alueLen = sizeof ad40: 28 63 6b 5f 6b 65 79 5f 74 79 70 65 29 3b 0a 0a (ck_key_type);.. ad50: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG ad60: 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 _PRINTF(" ... re ad70: 74 75 72 6e 69 6e 67 20 43 4b 4b 5f 52 53 41 20 turning CKK_RSA ad80: 28 25 6c 75 29 20 28 25 70 2f 25 6c 75 29 22 2c (%lu) (%p/%lu)", ad90: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) ada0: 20 2a 28 28 43 4b 5f 43 45 52 54 49 46 49 43 41 *((CK_CERTIFICA adb0: 54 45 5f 54 59 50 45 20 2a 29 20 70 56 61 6c 75 TE_TYPE *) pValu adc0: 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 e), pValue, (uns add0: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 igned long) ulVa ade0: 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 lueLen);......br adf0: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 eak;....case CKA ae00: 5f 53 49 47 4e 3a 0a 09 09 09 09 43 41 43 4b 45 _SIGN:.....CACKE ae10: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" ae20: 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri ae30: 62 75 74 65 20 43 4b 41 5f 53 49 47 4e 20 28 30 bute CKA_SIGN (0 ae40: 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 x%08lx) ...", (u ae50: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 nsigned long) cu ae60: 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a rr_attr_type);.. ae70: 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c ....if (objectcl ae80: 61 73 73 20 3d 3d 20 43 4b 4f 5f 50 52 49 56 41 ass == CKO_PRIVA ae90: 54 45 5f 4b 45 59 29 20 7b 0a 09 09 09 09 09 70 TE_KEY) {......p aea0: 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 Value = &ck_true aeb0: 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 ;......ulValueLe aec0: 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 n = sizeof(ck_tr aed0: 75 65 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 ue);.....} else aee0: 7b 0a 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 {......pValue = aef0: 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 09 09 &ck_false;...... af00: 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a ulValueLen = siz af10: 65 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 09 eof(ck_false);.. af20: 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 ...}......CACKEY af30: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" af40: 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c ... returning %l af50: 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e u (%p/%lu)", (un af60: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 signed long) *(( af70: 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c CK_BBOOL *) pVal af80: 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e ue), pValue, (un af90: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV afa0: 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b afb0: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK afc0: 41 5f 44 45 43 52 59 50 54 3a 0a 09 09 09 09 43 A_DECRYPT:.....C afd0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN afe0: 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 TF("Requesting a aff0: 74 74 72 69 62 75 74 65 20 43 4b 41 5f 44 45 43 ttribute CKA_DEC b000: 52 59 50 54 20 28 30 78 25 30 38 6c 78 29 20 2e RYPT (0x%08lx) . b010: 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l b020: 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t b030: 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f ype);......if (o b040: 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b bjectclass == CK b050: 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 20 7c 7c O_PRIVATE_KEY || b060: 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d 20 objectclass == b070: 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b 45 59 29 20 CKO_PUBLIC_KEY) b080: 7b 0a 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 {......pValue = b090: 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 09 75 &ck_true;......u b0a0: 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 lValueLen = size b0b0: 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a 09 09 09 of(ck_true);.... b0c0: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 70 .} else {......p b0d0: 56 61 6c 75 65 20 3d 20 26 63 6b 5f 66 61 6c 73 Value = &ck_fals b0e0: 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75 65 4c e;......ulValueL b0f0: 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 66 en = sizeof(ck_f b100: 61 6c 73 65 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 alse);.....}.... b110: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P b120: 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 RINTF(" ... retu b130: 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c rning %lu (%p/%l b140: 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c u)", (unsigned l b150: 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c ong) *((CK_BBOOL b160: 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 *) pValue), pVa b170: 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c lue, (unsigned l b180: 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 ong) ulValueLen) b190: 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 ;......break;... b1a0: 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f .case CKA_TRUST_ b1b0: 53 45 52 56 45 52 5f 41 55 54 48 3a 0a 09 09 09 SERVER_AUTH:.... b1c0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR b1d0: 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting b1e0: 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 54 attribute CKA_T b1f0: 52 55 53 54 5f 53 45 52 56 45 52 5f 41 55 54 48 RUST_SERVER_AUTH b200: 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", b210: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) b220: 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) b230: 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 ;......pValue = b240: 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 75 6c &ck_true;.....ul b250: 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f ValueLen = sizeo b260: 66 28 63 6b 5f 74 72 75 65 29 3b 0a 0a 09 09 09 f(ck_true);..... b270: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR b280: 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 INTF(" ... retur b290: 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 ning %lu (%p/%lu b2a0: 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f )", (unsigned lo b2b0: 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 ng) *((CK_BBOOL b2c0: 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c *) pValue), pVal b2d0: 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f ue, (unsigned lo b2e0: 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b ng) ulValueLen); b2f0: 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... b300: 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 43 case CKA_TRUST_C b310: 4c 49 45 4e 54 5f 41 55 54 48 3a 0a 09 09 09 09 LIENT_AUTH:..... b320: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI b330: 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 NTF("Requesting b340: 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 54 52 attribute CKA_TR b350: 55 53 54 5f 43 4c 49 45 4e 54 5f 41 55 54 48 20 UST_CLIENT_AUTH b360: 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 (0x%08lx) ...", b370: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) b380: 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b curr_attr_type); b390: 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 ......pValue = & b3a0: 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 75 6c 56 ck_true;.....ulV b3b0: 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 alueLen = sizeof b3c0: 28 63 6b 5f 74 72 75 65 29 3b 0a 0a 09 09 09 09 (ck_true);...... b3d0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI b3e0: 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e NTF(" ... return b3f0: 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 ing %lu (%p/%lu) b400: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon b410: 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a g) *((CK_BBOOL * b420: 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 ) pValue), pValu b430: 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e e, (unsigned lon b440: 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a g) ulValueLen);. b450: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c b460: 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 43 4f ase CKA_TRUST_CO b470: 44 45 5f 53 49 47 4e 49 4e 47 3a 0a 09 09 09 09 DE_SIGNING:..... b480: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI b490: 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 NTF("Requesting b4a0: 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 54 52 attribute CKA_TR b4b0: 55 53 54 5f 43 4f 44 45 5f 53 49 47 4e 49 4e 47 UST_CODE_SIGNING b4c0: 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", b4d0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) b4e0: 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) b4f0: 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 ;......pValue = b500: 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 75 6c &ck_true;.....ul b510: 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f ValueLen = sizeo b520: 66 28 63 6b 5f 74 72 75 65 29 3b 0a 0a 09 09 09 f(ck_true);..... b530: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR b540: 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 INTF(" ... retur b550: 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 ning %lu (%p/%lu b560: 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f )", (unsigned lo b570: 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 ng) *((CK_BBOOL b580: 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c *) pValue), pVal b590: 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f ue, (unsigned lo b5a0: 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b ng) ulValueLen); b5b0: 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... b5c0: 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 45 case CKA_TRUST_E b5d0: 4d 41 49 4c 5f 50 52 4f 54 45 43 54 49 4f 4e 3a MAIL_PROTECTION: b5e0: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU b5f0: 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 G_PRINTF("Reques b600: 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 ting attribute C b610: 4b 41 5f 54 52 55 53 54 5f 45 4d 41 49 4c 5f 50 KA_TRUST_EMAIL_P b620: 52 4f 54 45 43 54 49 4f 4e 20 28 30 78 25 30 38 ROTECTION (0x%08 b630: 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig b640: 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a b650: 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... b660: 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 pValue = &ck_tru b670: 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 e;.....ulValueLe b680: 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 n = sizeof(ck_tr b690: 75 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 ue);......CACKEY b6a0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" b6b0: 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c ... returning %l b6c0: 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e u (%p/%lu)", (un b6d0: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 signed long) *(( b6e0: 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c CK_BBOOL *) pVal b6f0: 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e ue), pValue, (un b700: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV b710: 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b b720: 72 65 61 6b 3b 0a 09 09 09 64 65 66 61 75 6c 74 reak;....default b730: 3a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 4e :.....pValue = N b740: 55 4c 4c 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 ULL;.....ulValue b750: 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47 29 20 Len = (CK_LONG) b760: 2d 31 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 -1;.....break;.. b770: 09 7d 0a 0a 09 09 69 66 20 28 28 28 43 4b 5f 4c .}....if (((CK_L b780: 4f 4e 47 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 ONG) ulValueLen) b790: 20 21 3d 20 28 28 43 4b 5f 4c 4f 4e 47 29 20 2d != ((CK_LONG) - b7a0: 31 29 29 20 7b 0a 09 09 09 2f 2a 20 50 75 73 68 1)) {..../* Push b7b0: 20 63 75 72 72 5f 61 74 74 72 20 6f 6e 74 6f 20 curr_attr onto b7c0: 74 68 65 20 73 74 61 63 6b 20 2a 2f 0a 09 09 09 the stack */.... b7d0: 63 75 72 72 5f 61 74 74 72 2e 74 79 70 65 20 3d curr_attr.type = b7e0: 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 3b curr_attr_type; b7f0: 0a 09 09 09 63 75 72 72 5f 61 74 74 72 2e 75 6c ....curr_attr.ul b800: 56 61 6c 75 65 4c 65 6e 20 3d 20 75 6c 56 61 6c ValueLen = ulVal b810: 75 65 4c 65 6e 3b 0a 0a 09 09 09 63 75 72 72 5f ueLen;.....curr_ b820: 61 74 74 72 2e 70 56 61 6c 75 65 20 3d 20 6d 61 attr.pValue = ma b830: 6c 6c 6f 63 28 63 75 72 72 5f 61 74 74 72 2e 75 lloc(curr_attr.u b840: 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 09 6d lValueLen);....m b850: 65 6d 63 70 79 28 63 75 72 72 5f 61 74 74 72 2e emcpy(curr_attr. b860: 70 56 61 6c 75 65 2c 20 70 56 61 6c 75 65 2c 20 pValue, pValue, b870: 63 75 72 72 5f 61 74 74 72 2e 75 6c 56 61 6c 75 curr_attr.ulValu b880: 65 4c 65 6e 29 3b 0a 0a 09 09 09 69 66 20 28 70 eLen);.....if (p b890: 56 61 6c 75 65 5f 66 72 65 65 20 26 26 20 70 56 Value_free && pV b8a0: 61 6c 75 65 29 20 7b 0a 09 09 09 09 66 72 65 65 alue) {.....free b8b0: 28 70 56 61 6c 75 65 29 3b 0a 09 09 09 7d 0a 0a (pValue);....}.. b8c0: 09 09 09 69 66 20 28 6e 75 6d 61 74 74 72 73 20 ...if (numattrs b8d0: 3e 3d 20 72 65 74 76 61 6c 5f 63 6f 75 6e 74 29 >= retval_count) b8e0: 20 7b 0a 09 09 09 09 72 65 74 76 61 6c 5f 63 6f {.....retval_co b8f0: 75 6e 74 20 2a 3d 20 32 3b 0a 09 09 09 09 72 65 unt *= 2;.....re b900: 74 76 61 6c 20 3d 20 72 65 61 6c 6c 6f 63 28 72 tval = realloc(r b910: 65 74 76 61 6c 2c 20 72 65 74 76 61 6c 5f 63 6f etval, retval_co b920: 75 6e 74 20 2a 20 73 69 7a 65 6f 66 28 2a 72 65 unt * sizeof(*re b930: 74 76 61 6c 29 29 3b 0a 09 09 09 7d 0a 0a 09 09 tval));....}.... b940: 09 6d 65 6d 63 70 79 28 26 72 65 74 76 61 6c 5b .memcpy(&retval[ b950: 6e 75 6d 61 74 74 72 73 5d 2c 20 26 63 75 72 72 numattrs], &curr b960: 5f 61 74 74 72 2c 20 73 69 7a 65 6f 66 28 63 75 _attr, sizeof(cu b970: 72 72 5f 61 74 74 72 29 29 3b 0a 09 09 09 6e 75 rr_attr));....nu b980: 6d 61 74 74 72 73 2b 2b 3b 0a 09 09 7d 0a 09 7d mattrs++;...}..} b990: 0a 0a 09 69 66 20 28 6e 75 6d 61 74 74 72 73 20 ...if (numattrs b9a0: 21 3d 20 30 29 20 7b 0a 09 09 72 65 74 76 61 6c != 0) {...retval b9b0: 5f 63 6f 75 6e 74 20 3d 20 6e 75 6d 61 74 74 72 _count = numattr b9c0: 73 3b 0a 09 09 72 65 74 76 61 6c 20 3d 20 72 65 s;...retval = re b9d0: 61 6c 6c 6f 63 28 72 65 74 76 61 6c 2c 20 72 65 alloc(retval, re b9e0: 74 76 61 6c 5f 63 6f 75 6e 74 20 2a 20 73 69 7a tval_count * siz b9f0: 65 6f 66 28 2a 72 65 74 76 61 6c 29 29 3b 0a 09 eof(*retval));.. ba00: 7d 20 65 6c 73 65 20 7b 0a 09 09 66 72 65 65 28 } else {...free( ba10: 72 65 74 76 61 6c 29 3b 0a 0a 09 09 72 65 74 76 retval);....retv ba20: 61 6c 20 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a 09 al = NULL;..}... ba30: 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 6e 75 6d 61 *pulCount = numa ba40: 74 74 72 73 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 ttrs;...CACKEY_D ba50: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret ba60: 75 72 6e 69 6e 67 20 25 6c 75 20 6f 62 6a 65 63 urning %lu objec ba70: 74 73 20 28 25 70 29 2e 22 2c 20 6e 75 6d 61 74 ts (%p).", numat ba80: 74 72 73 2c 20 72 65 74 76 61 6c 29 3b 0a 0a 09 trs, retval);... ba90: 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a return(retval);. baa0: 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN bab0: 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 49 CTION(CK_RV, C_I bac0: 6e 69 74 69 61 6c 69 7a 65 29 28 43 4b 5f 56 4f nitialize)(CK_VO bad0: 49 44 5f 50 54 52 20 70 49 6e 69 74 41 72 67 73 ID_PTR pInitArgs bae0: 29 20 7b 0a 09 43 4b 5f 43 5f 49 4e 49 54 49 41 ) {..CK_C_INITIA baf0: 4c 49 5a 45 5f 41 52 47 53 20 43 4b 5f 50 54 52 LIZE_ARGS CK_PTR bb00: 20 61 72 67 73 3b 0a 09 75 69 6e 74 33 32 5f 74 args;..uint32_t bb10: 20 69 64 78 3b 0a 09 69 6e 74 20 6d 75 74 65 78 idx;..int mutex bb20: 5f 69 6e 69 74 5f 72 65 74 3b 0a 0a 09 43 41 43 _init_ret;...CAC bb30: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF bb40: 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i bb50: 66 20 28 70 49 6e 69 74 41 72 67 73 20 21 3d 20 f (pInitArgs != bb60: 4e 55 4c 4c 29 20 7b 0a 09 09 61 72 67 73 20 3d NULL) {...args = bb70: 20 70 49 6e 69 74 41 72 67 73 3b 0a 09 09 6d 65 pInitArgs;...me bb80: 6d 63 70 79 28 26 63 61 63 6b 65 79 5f 61 72 67 mcpy(&cackey_arg bb90: 73 2c 20 61 72 67 73 2c 20 73 69 7a 65 6f 66 28 s, args, sizeof( bba0: 63 61 63 6b 65 79 5f 61 72 67 73 29 29 3b 0a 0a cackey_args));.. bbb0: 09 09 69 66 20 28 61 72 67 73 2d 3e 43 72 65 61 ..if (args->Crea bbc0: 74 65 4d 75 74 65 78 20 3d 3d 20 4e 55 4c 4c 20 teMutex == NULL bbd0: 7c 7c 20 61 72 67 73 2d 3e 44 65 73 74 72 6f 79 || args->Destroy bbe0: 4d 75 74 65 78 20 3d 3d 20 4e 55 4c 4c 20 7c 7c Mutex == NULL || bbf0: 20 61 72 67 73 2d 3e 4c 6f 63 6b 4d 75 74 65 78 args->LockMutex bc00: 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 == NULL || args bc10: 2d 3e 55 6e 6c 6f 63 6b 4d 75 74 65 78 20 3d 3d ->UnlockMutex == bc20: 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 69 66 20 28 NULL) {....if ( bc30: 61 72 67 73 2d 3e 43 72 65 61 74 65 4d 75 74 65 args->CreateMute bc40: 78 20 21 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 x != NULL || arg bc50: 73 2d 3e 44 65 73 74 72 6f 79 4d 75 74 65 78 20 s->DestroyMutex bc60: 21 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d != NULL || args- bc70: 3e 4c 6f 63 6b 4d 75 74 65 78 20 21 3d 20 4e 55 >LockMutex != NU bc80: 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 55 6e 6c 6f LL || args->Unlo bc90: 63 6b 4d 75 74 65 78 20 21 3d 20 4e 55 4c 4c 29 ckMutex != NULL) bca0: 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {.....CACKEY_DE bcb0: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro bcc0: 72 2e 20 53 6f 6d 65 2c 20 62 75 74 20 6e 6f 74 r. Some, but not bcd0: 20 41 6c 6c 20 74 68 72 65 61 64 69 6e 67 20 70 All threading p bce0: 72 69 6d 69 74 69 76 65 73 20 70 72 6f 76 69 64 rimitives provid bcf0: 65 64 2e 22 29 3b 0a 0a 09 09 09 09 72 65 74 75 ed.");......retu bd00: 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 rn(CKR_ARGUMENTS bd10: 5f 42 41 44 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a _BAD);....}...}. bd20: 0a 09 09 69 66 20 28 61 72 67 73 2d 3e 70 52 65 ...if (args->pRe bd30: 73 65 72 76 65 64 20 21 3d 20 4e 55 4c 4c 29 20 served != NULL) bd40: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU bd50: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. bd60: 20 70 52 65 73 65 72 76 65 64 20 69 73 20 6e 6f pReserved is no bd70: 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 09 72 t NULL.");.....r bd80: 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 eturn(CKR_ARGUME bd90: 4e 54 53 5f 42 41 44 29 3b 0a 09 09 7d 0a 09 7d NTS_BAD);...}..} bda0: 20 65 6c 73 65 20 7b 0a 09 09 63 61 63 6b 65 79 else {...cackey bdb0: 5f 61 72 67 73 2e 43 72 65 61 74 65 4d 75 74 65 _args.CreateMute bdc0: 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 6b x = NULL;...cack bdd0: 65 79 5f 61 72 67 73 2e 44 65 73 74 72 6f 79 4d ey_args.DestroyM bde0: 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 utex = NULL;...c bdf0: 61 63 6b 65 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d ackey_args.LockM be00: 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 utex = NULL;...c be10: 61 63 6b 65 79 5f 61 72 67 73 2e 55 6e 6c 6f 63 ackey_args.Unloc be20: 6b 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 kMutex = NULL;.. be30: 09 63 61 63 6b 65 79 5f 61 72 67 73 2e 66 6c 61 .cackey_args.fla be40: 67 73 20 3d 20 30 3b 0a 09 7d 0a 0a 09 69 66 20 gs = 0;..}...if be50: 28 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 (cackey_initiali be60: 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ be70: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er be80: 72 6f 72 2e 20 20 41 6c 72 65 61 64 79 20 69 6e ror. Already in be90: 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... bea0: 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP beb0: 54 4f 4b 49 5f 41 4c 52 45 41 44 59 5f 49 4e 49 TOKI_ALREADY_INI bec0: 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... bed0: 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 for (idx = 0; id bee0: 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b x < (sizeof(cack bef0: 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s bf00: 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses bf10: 73 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b sions[0])); idx+ bf20: 2b 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 73 65 +) {...cackey_se bf30: 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 63 74 69 ssions[idx].acti bf40: 76 65 20 3d 20 30 3b 0a 09 7d 0a 0a 09 66 6f 72 ve = 0;..}...for bf50: 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c (idx = 0; idx < bf60: 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ bf70: 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 slots) / sizeof( bf80: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 cackey_slots[0]) bf90: 29 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 63 61 ); idx++) {...ca bfa0: 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e ckey_slots[idx]. bfb0: 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 09 63 61 active = 0;...ca bfc0: 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e ckey_slots[idx]. bfd0: 70 63 73 63 5f 72 65 61 64 65 72 20 3d 20 4e 55 pcsc_reader = NU bfe0: 4c 4c 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f LL;..}...cackey_ bff0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d 20 31 3b initialized = 1; c000: 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 62 ...if (!cackey_b c010: 69 67 6c 6f 63 6b 5f 69 6e 69 74 29 20 7b 0a 09 iglock_init) {.. c020: 09 6d 75 74 65 78 5f 69 6e 69 74 5f 72 65 74 20 .mutex_init_ret c030: 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 63 = cackey_mutex_c c040: 72 65 61 74 65 28 26 63 61 63 6b 65 79 5f 62 69 reate(&cackey_bi c050: 67 6c 6f 63 6b 29 3b 0a 0a 09 09 69 66 20 28 6d glock);....if (m c060: 75 74 65 78 5f 69 6e 69 74 5f 72 65 74 20 21 3d utex_init_ret != c070: 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 0) {....CACKEY_ c080: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er c090: 72 6f 72 2e 20 20 4d 75 74 65 78 20 69 6e 69 74 ror. Mutex init c0a0: 69 61 6c 69 7a 61 74 69 6f 6e 20 66 61 69 6c 65 ialization faile c0b0: 64 2e 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e d.");.....return c0c0: 28 43 4b 52 5f 43 41 4e 54 5f 4c 4f 43 4b 29 3b (CKR_CANT_LOCK); c0d0: 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 62 ...}....cackey_b c0e0: 69 67 6c 6f 63 6b 5f 69 6e 69 74 20 3d 20 31 3b iglock_init = 1; c0f0: 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB c100: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur c110: 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) c120: 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re c130: 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. c140: 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT c150: 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 46 69 6e ION(CK_RV, C_Fin c160: 61 6c 69 7a 65 29 28 43 4b 5f 56 4f 49 44 5f 50 alize)(CK_VOID_P c170: 54 52 20 70 52 65 73 65 72 76 65 64 29 20 7b 0a TR pReserved) {. c180: 09 75 69 6e 74 33 32 5f 74 20 69 64 78 3b 0a 0a .uint32_t idx;.. c190: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR c1a0: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); c1b0: 0a 0a 09 69 66 20 28 70 52 65 73 65 72 76 65 64 ...if (pReserved c1c0: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 != NULL) {...CA c1d0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT c1e0: 46 28 22 45 72 72 6f 72 2e 20 70 52 65 73 65 72 F("Error. pReser c1f0: 76 65 64 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e ved is not NULL. c200: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK c210: 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 R_ARGUMENTS_BAD) c220: 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack c230: 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) c240: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG c250: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. c260: 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized c270: 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C c280: 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ c290: 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} c2a0: 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b ...for (idx = 0; c2b0: 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 idx < (sizeof(c c2c0: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 ackey_sessions) c2d0: 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ c2e0: 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 sessions[0])); i c2f0: 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63 61 dx++) {...if (ca c300: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 ckey_sessions[id c310: 78 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 09 x].active) {.... c320: 43 5f 43 6c 6f 73 65 53 65 73 73 69 6f 6e 28 69 C_CloseSession(i c330: 64 78 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 63 61 dx);...}..}...ca c340: 63 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f ckey_slots_disco c350: 6e 6e 65 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 66 nnect_all();...f c360: 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 or (idx = 0; idx c370: 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 < (sizeof(cacke c380: 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f y_slots) / sizeo c390: 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 f(cackey_slots[0 c3a0: 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 ])); idx++) {... c3b0: 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 if (cackey_slots c3c0: 5b 69 64 78 5d 2e 70 63 73 63 5f 72 65 61 64 65 [idx].pcsc_reade c3d0: 72 29 20 7b 0a 09 09 09 66 72 65 65 28 63 61 63 r) {....free(cac c3e0: 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 key_slots[idx].p c3f0: 63 73 63 5f 72 65 61 64 65 72 29 3b 0a 09 09 7d csc_reader);...} c400: 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 69 6e 69 ..}...cackey_ini c410: 74 69 61 6c 69 7a 65 64 20 3d 20 30 3b 0a 0a 09 tialized = 0;... c420: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI c430: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C c440: 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR c450: 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C c460: 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 KR_OK);.}..CK_DE c470: 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK c480: 5f 52 56 2c 20 43 5f 47 65 74 49 6e 66 6f 29 28 _RV, C_GetInfo)( c490: 43 4b 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 CK_INFO_PTR pInf c4a0: 6f 29 20 7b 0a 09 73 74 61 74 69 63 20 43 4b 5f o) {..static CK_ c4b0: 55 54 46 38 43 48 41 52 20 6d 61 6e 75 66 61 63 UTF8CHAR manufac c4c0: 74 75 72 65 72 49 44 5b 5d 20 3d 20 22 55 2e 53 turerID[] = "U.S c4d0: 2e 20 47 6f 76 65 72 6e 6d 65 6e 74 22 3b 0a 09 . Government";.. c4e0: 73 74 61 74 69 63 20 43 4b 5f 55 54 46 38 43 48 static CK_UTF8CH c4f0: 41 52 20 6c 69 62 72 61 72 79 44 65 73 63 72 69 AR libraryDescri c500: 70 74 69 6f 6e 5b 5d 20 3d 20 22 43 41 43 4b 65 ption[] = "CACKe c510: 79 22 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 y";...CACKEY_DEB c520: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle c530: 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 49 6e 66 d.");...if (pInf c540: 6f 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 o == NULL) {...C c550: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN c560: 54 46 28 22 45 72 72 6f 72 2e 20 70 49 6e 66 6f TF("Error. pInfo c570: 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 is NULL.");.... c580: 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM c590: 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 ENTS_BAD);..}... c5a0: 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init c5b0: 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC c5c0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF c5d0: 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in c5e0: 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... c5f0: 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP c600: 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL c610: 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 70 49 6e 66 IZED);..}...pInf c620: 6f 2d 3e 63 72 79 70 74 6f 6b 69 56 65 72 73 69 o->cryptokiVersi c630: 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 28 43 41 43 on.major = ((CAC c640: 4b 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 KEY_CRYPTOKI_VER c650: 53 49 4f 4e 5f 43 4f 44 45 29 20 3e 3e 20 31 36 SION_CODE) >> 16 c660: 29 20 26 20 30 78 66 66 3b 0a 09 70 49 6e 66 6f ) & 0xff;..pInfo c670: 2d 3e 63 72 79 70 74 6f 6b 69 56 65 72 73 69 6f ->cryptokiVersio c680: 6e 2e 6d 69 6e 6f 72 20 3d 20 28 28 43 41 43 4b n.minor = ((CACK c690: 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 53 EY_CRYPTOKI_VERS c6a0: 49 4f 4e 5f 43 4f 44 45 29 20 3e 3e 20 38 29 20 ION_CODE) >> 8) c6b0: 26 20 30 78 66 66 3b 0a 0a 09 6d 65 6d 73 65 74 & 0xff;...memset c6c0: 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 (pInfo->manufact c6d0: 75 72 65 72 49 44 2c 20 27 20 27 2c 20 73 69 7a urerID, ' ', siz c6e0: 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 eof(pInfo->manuf c6f0: 61 63 74 75 72 65 72 49 44 29 29 3b 0a 09 6d 65 acturerID));..me c700: 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 mcpy(pInfo->manu c710: 66 61 63 74 75 72 65 72 49 44 2c 20 6d 61 6e 75 facturerID, manu c720: 66 61 63 74 75 72 65 72 49 44 2c 20 73 69 7a 65 facturerID, size c730: 6f 66 28 6d 61 6e 75 66 61 63 74 75 72 65 72 49 of(manufacturerI c740: 44 29 20 2d 20 31 29 3b 0a 0a 09 70 49 6e 66 6f D) - 1);...pInfo c750: 2d 3e 66 6c 61 67 73 20 3d 20 30 78 30 30 3b 0a ->flags = 0x00;. c760: 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e ..memset(pInfo-> c770: 6c 69 62 72 61 72 79 44 65 73 63 72 69 70 74 69 libraryDescripti c780: 6f 6e 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 on, ' ', sizeof( c790: 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 44 65 pInfo->libraryDe c7a0: 73 63 72 69 70 74 69 6f 6e 29 29 3b 0a 09 6d 65 scription));..me c7b0: 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6c 69 62 72 mcpy(pInfo->libr c7c0: 61 72 79 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 aryDescription, c7d0: 6c 69 62 72 61 72 79 44 65 73 63 72 69 70 74 69 libraryDescripti c7e0: 6f 6e 2c 20 73 69 7a 65 6f 66 28 6c 69 62 72 61 on, sizeof(libra c7f0: 72 79 44 65 73 63 72 69 70 74 69 6f 6e 29 20 2d ryDescription) - c800: 20 31 29 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 6c 69 1);...pInfo->li c810: 62 72 61 72 79 56 65 72 73 69 6f 6e 2e 6d 61 6a braryVersion.maj c820: 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 65 74 or = (cackey_get c830: 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 31 36 29 version() >> 16) c840: 20 26 20 30 78 66 66 3b 0a 09 70 49 6e 66 6f 2d & 0xff;..pInfo- c850: 3e 6c 69 62 72 61 72 79 56 65 72 73 69 6f 6e 2e >libraryVersion. c860: 6d 69 6e 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f minor = (cackey_ c870: 67 65 74 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 getversion() >> c880: 38 29 20 26 20 30 78 66 66 3b 0a 0a 09 43 41 43 8) & 0xff;...CAC c890: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF c8a0: 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ c8b0: 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b OK (%i)", CKR_OK c8c0: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ c8d0: 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 50 72 OK);.}../*. * Pr c8e0: 6f 63 65 73 73 20 6c 69 73 74 20 6f 66 20 72 65 ocess list of re c8f0: 61 64 65 72 73 2c 20 61 6e 64 20 63 72 65 61 74 aders, and creat c900: 65 20 6d 61 70 70 69 6e 67 20 62 65 74 77 65 65 e mapping betwee c910: 6e 20 72 65 61 64 65 72 20 6e 61 6d 65 20 61 6e n reader name an c920: 64 20 73 6c 6f 74 20 49 44 0a 20 2a 2f 0a 43 4b d slot ID. */.CK c930: 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION c940: 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 53 6c 6f (CK_RV, C_GetSlo c950: 74 4c 69 73 74 29 28 43 4b 5f 42 42 4f 4f 4c 20 tList)(CK_BBOOL c960: 74 6f 6b 65 6e 50 72 65 73 65 6e 74 2c 20 43 4b tokenPresent, CK c970: 5f 53 4c 4f 54 5f 49 44 5f 50 54 52 20 70 53 6c _SLOT_ID_PTR pSl c980: 6f 74 4c 69 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 otList, CK_ULONG c990: 5f 50 54 52 20 70 75 6c 43 6f 75 6e 74 29 20 7b _PTR pulCount) { c9a0: 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 ..int mutex_retv c9b0: 61 6c 3b 0a 09 69 6e 74 20 70 63 73 63 5f 63 6f al;..int pcsc_co c9c0: 6e 6e 65 63 74 5f 72 65 74 3b 0a 09 43 4b 5f 55 nnect_ret;..CK_U c9d0: 4c 4f 4e 47 20 63 6f 75 6e 74 2c 20 73 6c 6f 74 LONG count, slot c9e0: 5f 63 6f 75 6e 74 20 3d 20 30 2c 20 63 75 72 72 _count = 0, curr c9f0: 73 6c 6f 74 3b 0a 09 63 68 61 72 20 2a 70 63 73 slot;..char *pcs ca00: 63 5f 72 65 61 64 65 72 73 2c 20 2a 70 63 73 63 c_readers, *pcsc ca10: 5f 72 65 61 64 65 72 73 5f 73 2c 20 2a 70 63 73 _readers_s, *pcs ca20: 63 5f 72 65 61 64 65 72 73 5f 65 3b 0a 09 44 57 c_readers_e;..DW ca30: 4f 52 44 20 70 63 73 63 5f 72 65 61 64 65 72 73 ORD pcsc_readers ca40: 5f 6c 65 6e 3b 0a 09 4c 4f 4e 47 20 73 63 61 72 _len;..LONG scar ca50: 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 d_listreaders_re ca60: 74 3b 0a 09 73 69 7a 65 5f 74 20 63 75 72 72 5f t;..size_t curr_ ca70: 72 65 61 64 65 72 5f 6c 65 6e 3b 0a 0a 09 43 41 reader_len;...CA ca80: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT ca90: 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... caa0: 69 66 20 28 70 75 6c 43 6f 75 6e 74 20 3d 3d 20 if (pulCount == cab0: 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY cac0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E cad0: 72 72 6f 72 2e 20 70 75 6c 43 6f 75 6e 74 20 69 rror. pulCount i cae0: 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 s NULL.");....re caf0: 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN cb00: 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if cb10: 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia cb20: 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE cb30: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" cb40: 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init cb50: 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r cb60: 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO cb70: 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ cb80: 45 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f ED);..}...mutex_ cb90: 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ cba0: 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 mutex_lock(cacke cbb0: 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if cbc0: 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != cbd0: 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D cbe0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err cbf0: 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 or. Locking fai cc00: 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur cc10: 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER cc20: 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 43 6c ROR);..}.../* Cl cc30: 65 61 72 20 6c 69 73 74 20 6f 66 20 73 6c 6f 74 ear list of slot cc40: 73 20 2a 2f 0a 09 69 66 20 28 70 53 6c 6f 74 4c s */..if (pSlotL cc50: 69 73 74 29 20 7b 0a 09 09 2f 2a 20 4f 6e 6c 79 ist) {.../* Only cc60: 20 75 70 64 61 74 65 20 74 68 65 20 6c 69 73 74 update the list cc70: 20 6f 66 20 73 6c 6f 74 73 20 69 66 20 77 65 20 of slots if we cc80: 61 72 65 20 61 63 74 75 61 6c 6c 79 20 62 65 69 are actually bei cc90: 6e 67 20 73 75 70 70 6c 79 20 74 68 65 20 73 6c ng supply the sl cca0: 6f 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a ot information * ccb0: 2f 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 /...cackey_slots ccc0: 5f 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 _disconnect_all( ccd0: 29 3b 0a 0a 09 09 66 6f 72 20 28 63 75 72 72 73 );....for (currs cce0: 6c 6f 74 20 3d 20 30 3b 20 63 75 72 72 73 6c 6f lot = 0; currslo ccf0: 74 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b t < (sizeof(cack cd00: 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 ey_slots) / size cd10: 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b of(cackey_slots[ cd20: 30 5d 29 29 3b 20 63 75 72 72 73 6c 6f 74 2b 2b 0])); currslot++ cd30: 29 20 7b 0a 09 09 09 69 66 20 28 63 61 63 6b 65 ) {....if (cacke cd40: 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 y_slots[currslot cd50: 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 29 20 7b ].pcsc_reader) { cd60: 0a 09 09 09 09 66 72 65 65 28 63 61 63 6b 65 79 .....free(cackey cd70: 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d _slots[currslot] cd80: 2e 70 63 73 63 5f 72 65 61 64 65 72 29 3b 0a 0a .pcsc_reader);.. cd90: 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 ....cackey_slots cda0: 5b 63 75 72 72 73 6c 6f 74 5d 2e 70 63 73 63 5f [currslot].pcsc_ cdb0: 72 65 61 64 65 72 20 3d 20 4e 55 4c 4c 3b 0a 09 reader = NULL;.. cdc0: 09 09 7d 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 ..}.....cackey_s cdd0: 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 61 lots[currslot].a cde0: 63 74 69 76 65 20 3d 20 30 3b 0a 09 09 7d 0a 09 ctive = 0;...}.. cdf0: 7d 0a 0a 09 2f 2a 20 44 65 74 65 72 6d 69 6e 65 }.../* Determine ce00: 20 6c 69 73 74 20 6f 66 20 72 65 61 64 65 72 73 list of readers ce10: 20 2a 2f 0a 09 70 63 73 63 5f 63 6f 6e 6e 65 63 */..pcsc_connec ce20: 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 70 t_ret = cackey_p ce30: 63 73 63 5f 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 csc_connect();.. ce40: 69 66 20 28 70 63 73 63 5f 63 6f 6e 6e 65 63 74 if (pcsc_connect ce50: 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 43 41 _ret < 0) {...CA ce60: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT ce70: 46 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f F("Connection to ce80: 20 50 43 2f 53 43 20 66 61 69 6c 65 64 2c 20 61 PC/SC failed, a ce90: 73 73 75 6d 69 6e 67 20 6e 6f 20 73 6c 6f 74 73 ssuming no slots cea0: 22 29 3b 0a 0a 09 09 73 6c 6f 74 5f 63 6f 75 6e ");....slot_coun ceb0: 74 20 3d 20 30 3b 0a 09 7d 20 65 6c 73 65 20 7b t = 0;..} else { cec0: 0a 09 09 70 63 73 63 5f 72 65 61 64 65 72 73 5f ...pcsc_readers_ ced0: 6c 65 6e 20 3d 20 30 3b 0a 0a 09 09 73 63 61 72 len = 0;....scar cee0: 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 d_listreaders_re cef0: 74 20 3d 20 53 43 61 72 64 4c 69 73 74 52 65 61 t = SCardListRea cf00: 64 65 72 73 28 2a 63 61 63 6b 65 79 5f 70 63 73 ders(*cackey_pcs cf10: 63 5f 68 61 6e 64 6c 65 2c 20 4e 55 4c 4c 2c 20 c_handle, NULL, cf20: 4e 55 4c 4c 2c 20 26 70 63 73 63 5f 72 65 61 64 NULL, &pcsc_read cf30: 65 72 73 5f 6c 65 6e 29 3b 0a 09 09 69 66 20 28 ers_len);...if ( cf40: 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 scard_listreader cf50: 73 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f 53 s_ret == SCARD_S cf60: 5f 53 55 43 43 45 53 53 20 26 26 20 70 63 73 63 _SUCCESS && pcsc cf70: 5f 72 65 61 64 65 72 73 5f 6c 65 6e 20 21 3d 20 _readers_len != cf80: 30 29 20 7b 0a 09 09 09 70 63 73 63 5f 72 65 61 0) {....pcsc_rea cf90: 64 65 72 73 20 3d 20 6d 61 6c 6c 6f 63 28 70 63 ders = malloc(pc cfa0: 73 63 5f 72 65 61 64 65 72 73 5f 6c 65 6e 29 3b sc_readers_len); cfb0: 0a 09 09 09 70 63 73 63 5f 72 65 61 64 65 72 73 ....pcsc_readers cfc0: 5f 73 20 3d 20 70 63 73 63 5f 72 65 61 64 65 72 _s = pcsc_reader cfd0: 73 3b 0a 0a 09 09 09 73 63 61 72 64 5f 6c 69 73 s;.....scard_lis cfe0: 74 72 65 61 64 65 72 73 5f 72 65 74 20 3d 20 53 treaders_ret = S cff0: 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 73 28 CardListReaders( d000: 2a 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e *cackey_pcsc_han d010: 64 6c 65 2c 20 4e 55 4c 4c 2c 20 70 63 73 63 5f dle, NULL, pcsc_ d020: 72 65 61 64 65 72 73 2c 20 26 70 63 73 63 5f 72 readers, &pcsc_r d030: 65 61 64 65 72 73 5f 6c 65 6e 29 3b 0a 09 09 09 eaders_len);.... d040: 69 66 20 28 73 63 61 72 64 5f 6c 69 73 74 72 65 if (scard_listre d050: 61 64 65 72 73 5f 72 65 74 20 3d 3d 20 53 43 41 aders_ret == SCA d060: 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a RD_S_SUCCESS) {. d070: 09 09 09 09 70 63 73 63 5f 72 65 61 64 65 72 73 ....pcsc_readers d080: 5f 65 20 3d 20 70 63 73 63 5f 72 65 61 64 65 72 _e = pcsc_reader d090: 73 20 2b 20 70 63 73 63 5f 72 65 61 64 65 72 73 s + pcsc_readers d0a0: 5f 6c 65 6e 3b 0a 0a 09 09 09 09 63 75 72 72 73 _len;......currs d0b0: 6c 6f 74 20 3d 20 30 3b 0a 09 09 09 09 77 68 69 lot = 0;.....whi d0c0: 6c 65 20 28 70 63 73 63 5f 72 65 61 64 65 72 73 le (pcsc_readers d0d0: 20 3c 20 70 63 73 63 5f 72 65 61 64 65 72 73 5f < pcsc_readers_ d0e0: 65 29 20 7b 0a 09 09 09 09 09 63 75 72 72 5f 72 e) {......curr_r d0f0: 65 61 64 65 72 5f 6c 65 6e 20 3d 20 73 74 72 6c eader_len = strl d100: 65 6e 28 70 63 73 63 5f 72 65 61 64 65 72 73 29 en(pcsc_readers) d110: 3b 0a 0a 09 09 09 09 09 69 66 20 28 28 70 63 73 ;.......if ((pcs d120: 63 5f 72 65 61 64 65 72 73 20 2b 20 63 75 72 72 c_readers + curr d130: 5f 72 65 61 64 65 72 5f 6c 65 6e 29 20 3e 20 70 _reader_len) > p d140: 63 73 63 5f 72 65 61 64 65 72 73 5f 65 29 20 7b csc_readers_e) { d150: 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 .......break;... d160: 09 09 09 7d 0a 0a 09 09 09 09 09 69 66 20 28 63 ...}.......if (c d170: 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e 20 3d urr_reader_len = d180: 3d 20 30 29 20 7b 0a 09 09 09 09 09 09 62 72 65 = 0) {.......bre d190: 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 ak;......}...... d1a0: 09 69 66 20 28 63 75 72 72 73 6c 6f 74 20 3e 3d .if (currslot >= d1b0: 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ d1c0: 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 slots) / sizeof( d1d0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 cackey_slots[0]) d1e0: 29 29 20 7b 0a 09 09 09 09 09 09 43 41 43 4b 45 )) {.......CACKE d1f0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" d200: 46 6f 75 6e 64 20 6d 6f 72 65 20 72 65 61 64 65 Found more reade d210: 72 73 20 74 68 61 6e 20 73 6c 6f 74 73 20 61 72 rs than slots ar d220: 65 20 61 76 61 69 6c 61 62 6c 65 21 22 29 3b 0a e available!");. d230: 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 .......break;... d240: 09 09 09 7d 0a 0a 09 09 09 09 09 43 41 43 4b 45 ...}.......CACKE d250: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" d260: 46 6f 75 6e 64 20 72 65 61 64 65 72 3a 20 25 73 Found reader: %s d270: 22 2c 20 70 63 73 63 5f 72 65 61 64 65 72 73 29 ", pcsc_readers) d280: 3b 0a 0a 09 09 09 09 09 2f 2a 20 4f 6e 6c 79 20 ;......./* Only d290: 75 70 64 61 74 65 20 74 68 65 20 6c 69 73 74 20 update the list d2a0: 6f 66 20 73 6c 6f 74 73 20 69 66 20 77 65 20 61 of slots if we a d2b0: 72 65 20 61 63 74 75 61 6c 6c 79 20 62 65 69 6e re actually bein d2c0: 67 20 73 75 70 70 6c 79 20 74 68 65 20 73 6c 6f g supply the slo d2d0: 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f t information */ d2e0: 0a 09 09 09 09 09 69 66 20 28 70 53 6c 6f 74 4c ......if (pSlotL d2f0: 69 73 74 29 20 7b 0a 09 09 09 09 09 09 63 61 63 ist) {.......cac d300: 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c key_slots[currsl d310: 6f 74 5d 2e 61 63 74 69 76 65 20 3d 20 31 3b 0a ot].active = 1;. d320: 09 09 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f ......cackey_slo d330: 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 70 63 73 ts[currslot].pcs d340: 63 5f 72 65 61 64 65 72 20 3d 20 73 74 72 64 75 c_reader = strdu d350: 70 28 70 63 73 63 5f 72 65 61 64 65 72 73 29 3b p(pcsc_readers); d360: 0a 09 09 09 09 09 09 63 61 63 6b 65 79 5f 73 6c .......cackey_sl d370: 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 70 63 ots[currslot].pc d380: 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 sc_card_connecte d390: 64 20 3d 20 30 3b 0a 09 09 09 09 09 7d 0a 09 09 d = 0;......}... d3a0: 09 09 09 63 75 72 72 73 6c 6f 74 2b 2b 3b 0a 0a ...currslot++;.. d3b0: 09 09 09 09 09 70 63 73 63 5f 72 65 61 64 65 72 .....pcsc_reader d3c0: 73 20 2b 3d 20 63 75 72 72 5f 72 65 61 64 65 72 s += curr_reader d3d0: 5f 6c 65 6e 20 2b 20 31 3b 0a 09 09 09 09 7d 0a _len + 1;.....}. d3e0: 0a 09 09 09 09 69 66 20 28 63 75 72 72 73 6c 6f .....if (currslo d3f0: 74 20 3e 20 30 29 20 7b 0a 09 09 09 09 09 73 6c t > 0) {......sl d400: 6f 74 5f 63 6f 75 6e 74 20 3d 20 63 75 72 72 73 ot_count = currs d410: 6c 6f 74 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 20 lot;.....}....} d420: 65 6c 73 65 20 7b 0a 09 09 09 09 43 41 43 4b 45 else {.....CACKE d430: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" d440: 53 65 63 6f 6e 64 20 63 61 6c 6c 20 74 6f 20 53 Second call to S d450: 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 73 20 CardListReaders d460: 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 20 25 failed, return % d470: 73 2f 25 6c 69 22 2c 20 43 41 43 4b 45 59 5f 44 s/%li", CACKEY_D d480: 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 EBUG_FUNC_SCARDE d490: 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f RR_TO_STR(scard_ d4a0: 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 29 listreaders_ret) d4b0: 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f 6c , (long) scard_l d4c0: 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 29 3b istreaders_ret); d4d0: 0a 09 09 09 7d 0a 0a 09 09 09 66 72 65 65 28 70 ....}.....free(p d4e0: 63 73 63 5f 72 65 61 64 65 72 73 5f 73 29 3b 0a csc_readers_s);. d4f0: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 43 41 ..} else {....CA d500: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT d510: 46 28 22 46 69 72 73 74 20 63 61 6c 6c 20 74 6f F("First call to d520: 20 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 SCardListReader d530: 73 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e s failed, return d540: 20 25 73 2f 25 6c 69 22 2c 20 43 41 43 4b 45 59 %s/%li", CACKEY d550: 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 _DEBUG_FUNC_SCAR d560: 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 DERR_TO_STR(scar d570: 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 d_listreaders_re d580: 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 t), (long) scard d590: 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 _listreaders_ret d5a0: 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 6d 75 74 65 );...}..}...mute d5b0: 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke d5c0: 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c d5d0: 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. d5e0: 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva d5f0: 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK d600: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( d610: 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 "Error. Unlocki d620: 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... d630: 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE d640: 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. d650: 09 69 66 20 28 70 53 6c 6f 74 4c 69 73 74 20 3d .if (pSlotList = d660: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 2a 70 75 6c = NULL) {...*pul d670: 43 6f 75 6e 74 20 3d 20 73 6c 6f 74 5f 63 6f 75 Count = slot_cou d680: 6e 74 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 nt;....CACKEY_DE d690: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu d6a0: 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i d6b0: 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 )", CKR_OK);.... d6c0: 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a return(CKR_OK);. d6d0: 09 7d 0a 0a 09 63 6f 75 6e 74 20 3d 20 2a 70 75 .}...count = *pu d6e0: 6c 43 6f 75 6e 74 3b 0a 09 69 66 20 28 63 6f 75 lCount;..if (cou d6f0: 6e 74 20 3c 20 73 6c 6f 74 5f 63 6f 75 6e 74 29 nt < slot_count) d700: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU d710: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. d720: 20 55 73 65 72 20 61 6c 6c 6f 63 61 74 65 64 20 User allocated d730: 25 6c 75 20 65 6e 74 72 69 65 73 2c 20 62 75 74 %lu entries, but d740: 20 77 65 20 68 61 76 65 20 25 6c 75 20 65 6e 74 we have %lu ent d750: 72 69 65 73 2e 22 2c 20 63 6f 75 6e 74 2c 20 73 ries.", count, s d760: 6c 6f 74 5f 63 6f 75 6e 74 29 3b 0a 0a 09 09 72 lot_count);....r d770: 65 74 75 72 6e 28 43 4b 52 5f 42 55 46 46 45 52 eturn(CKR_BUFFER d780: 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 3b 09 0a 09 7d _TOO_SMALL);...} d790: 0a 0a 09 66 6f 72 20 28 63 75 72 72 73 6c 6f 74 ...for (currslot d7a0: 20 3d 20 30 3b 20 63 75 72 72 73 6c 6f 74 20 3c = 0; currslot < d7b0: 20 73 6c 6f 74 5f 63 6f 75 6e 74 3b 20 63 75 72 slot_count; cur d7c0: 72 73 6c 6f 74 2b 2b 29 20 7b 0a 09 09 70 53 6c rslot++) {...pSl d7d0: 6f 74 4c 69 73 74 5b 63 75 72 72 73 6c 6f 74 5d otList[currslot] d7e0: 20 3d 20 63 75 72 72 73 6c 6f 74 3b 0a 09 7d 0a = currslot;..}. d7f0: 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 73 6c ..*pulCount = sl d800: 6f 74 5f 63 6f 75 6e 74 3b 0a 0a 09 43 41 43 4b ot_count;...CACK d810: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( d820: 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O d830: 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) d840: 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O d850: 4b 29 3b 0a 0a 09 74 6f 6b 65 6e 50 72 65 73 65 K);...tokenPrese d860: 6e 74 20 3d 20 74 6f 6b 65 6e 50 72 65 73 65 6e nt = tokenPresen d870: 74 3b 20 2f 2a 20 53 75 70 72 65 73 73 20 75 6e t; /* Supress un d880: 75 73 65 64 20 76 61 72 69 61 62 6c 65 20 77 61 used variable wa d890: 72 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 43 4b 5f 44 rning */.}..CK_D d8a0: 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C d8b0: 4b 5f 52 56 2c 20 43 5f 47 65 74 53 6c 6f 74 49 K_RV, C_GetSlotI d8c0: 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 nfo)(CK_SLOT_ID d8d0: 73 6c 6f 74 49 44 2c 20 43 4b 5f 53 4c 4f 54 5f slotID, CK_SLOT_ d8e0: 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 INFO_PTR pInfo) d8f0: 7b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 54 46 {..static CK_UTF d900: 38 43 48 41 52 20 73 6c 6f 74 44 65 73 63 72 69 8CHAR slotDescri d910: 70 74 69 6f 6e 5b 5d 20 3d 20 22 43 41 43 4b 65 ption[] = "CACKe d920: 79 20 53 6c 6f 74 22 3b 0a 09 69 6e 74 20 62 79 y Slot";..int by d930: 74 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a 0a 09 43 tes_to_copy;...C d940: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN d950: 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. d960: 09 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 .if (pInfo == NU d970: 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D d980: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err d990: 6f 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c or. pInfo is NUL d9a0: 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 L.");....return( d9b0: 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA d9c0: 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6c 6f D);..}...if (slo d9d0: 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 tID < 0 || slotI d9e0: 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 D >= (sizeof(cac d9f0: 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a key_slots) / siz da00: 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 eof(cackey_slots da10: 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE da20: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" da30: 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 Error. Invalid s da40: 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 lot requested (% da50: 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 lu), outside of da60: 76 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 6c valid range", sl da70: 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e otID);....return da80: 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 (CKR_SLOT_ID_INV da90: 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 ALID);..}...if ( daa0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo dab0: 74 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 tID].active == 0 dac0: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB dad0: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error dae0: 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 . Invalid slot r daf0: 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 equested (%lu), db00: 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 slot not current db10: 6c 79 20 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 ly active", slot db20: 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 ID);....return(C db30: 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c KR_SLOT_ID_INVAL db40: 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 ID);..}...if (!c db50: 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize db60: 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE db70: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro db80: 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali db90: 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur dba0: 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N dbb0: 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); dbc0: 0a 09 7d 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e ..}...memset(pIn dbd0: 66 6f 2d 3e 73 6c 6f 74 44 65 73 63 72 69 70 74 fo->slotDescript dbe0: 69 6f 6e 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 ion, ' ', sizeof dbf0: 28 70 49 6e 66 6f 2d 3e 73 6c 6f 74 44 65 73 63 (pInfo->slotDesc dc00: 72 69 70 74 69 6f 6e 29 29 3b 0a 09 6d 65 6d 63 ription));..memc dc10: 70 79 28 70 49 6e 66 6f 2d 3e 73 6c 6f 74 44 65 py(pInfo->slotDe dc20: 73 63 72 69 70 74 69 6f 6e 2c 20 73 6c 6f 74 44 scription, slotD dc30: 65 73 63 72 69 70 74 69 6f 6e 2c 20 73 69 7a 65 escription, size dc40: 6f 66 28 73 6c 6f 74 44 65 73 63 72 69 70 74 69 of(slotDescripti dc50: 6f 6e 29 20 2d 20 31 29 3b 0a 0a 09 6d 65 6d 73 on) - 1);...mems dc60: 65 74 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 et(pInfo->manufa dc70: 63 74 75 72 65 72 49 44 2c 20 27 20 27 2c 20 73 cturerID, ' ', s dc80: 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 61 6e izeof(pInfo->man dc90: 75 66 61 63 74 75 72 65 72 49 44 29 29 3b 0a 0a ufacturerID));.. dca0: 09 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 20 3d .bytes_to_copy = dcb0: 20 73 74 72 6c 65 6e 28 63 61 63 6b 65 79 5f 73 strlen(cackey_s dcc0: 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 70 63 73 lots[slotID].pcs dcd0: 63 5f 72 65 61 64 65 72 29 3b 0a 09 69 66 20 28 c_reader);..if ( dce0: 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 61 sizeof(pInfo->ma dcf0: 6e 75 66 61 63 74 75 72 65 72 49 44 29 20 3c 20 nufacturerID) < dd00: 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 20 7b bytes_to_copy) { dd10: 0a 09 09 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 ...bytes_to_copy dd20: 20 3d 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d = sizeof(pInfo- dd30: 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 >manufacturerID) dd40: 3b 0a 09 7d 0a 09 6d 65 6d 63 70 79 28 70 49 6e ;..}..memcpy(pIn dd50: 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 fo->manufacturer dd60: 49 44 2c 20 63 61 63 6b 65 79 5f 73 6c 6f 74 73 ID, cackey_slots dd70: 5b 73 6c 6f 74 49 44 5d 2e 70 63 73 63 5f 72 65 [slotID].pcsc_re dd80: 61 64 65 72 2c 20 62 79 74 65 73 5f 74 6f 5f 63 ader, bytes_to_c dd90: 6f 70 79 29 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66 opy);...pInfo->f dda0: 6c 61 67 73 20 3d 20 30 3b 0a 0a 09 69 66 20 28 lags = 0;...if ( ddb0: 63 61 63 6b 65 79 5f 74 6f 6b 65 6e 5f 70 72 65 cackey_token_pre ddc0: 73 65 6e 74 28 26 63 61 63 6b 65 79 5f 73 6c 6f sent(&cackey_slo ddd0: 74 73 5b 73 6c 6f 74 49 44 5d 29 29 20 7b 0a 09 ts[slotID])) {.. dde0: 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 7c 3d .pInfo->flags |= ddf0: 20 43 4b 46 5f 54 4f 4b 45 4e 5f 50 52 45 53 45 CKF_TOKEN_PRESE de00: 4e 54 3b 0a 09 7d 0a 0a 09 70 49 6e 66 6f 2d 3e NT;..}...pInfo-> de10: 68 61 72 64 77 61 72 65 56 65 72 73 69 6f 6e 2e hardwareVersion. de20: 6d 61 6a 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f major = (cackey_ de30: 67 65 74 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 getversion() >> de40: 31 36 29 20 26 20 30 78 66 66 3b 0a 09 70 49 6e 16) & 0xff;..pIn de50: 66 6f 2d 3e 68 61 72 64 77 61 72 65 56 65 72 73 fo->hardwareVers de60: 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 63 61 63 ion.minor = (cac de70: 6b 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 key_getversion() de80: 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a >> 8) & 0xff;.. de90: 09 70 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 72 65 .pInfo->firmware dea0: 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 Version.major = deb0: 30 78 30 30 3b 0a 09 70 49 6e 66 6f 2d 3e 66 69 0x00;..pInfo->fi dec0: 72 6d 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 rmwareVersion.mi ded0: 6e 6f 72 20 3d 20 30 78 30 30 3b 0a 0a 09 43 41 nor = 0x00;...CA dee0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT def0: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR df00: 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f _OK (%i)", CKR_O df10: 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 K);...return(CKR df20: 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 _OK);.}..CK_DEFI df30: 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R df40: 56 2c 20 43 5f 47 65 74 54 6f 6b 65 6e 49 6e 66 V, C_GetTokenInf df50: 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c o)(CK_SLOT_ID sl df60: 6f 74 49 44 2c 20 43 4b 5f 54 4f 4b 45 4e 5f 49 otID, CK_TOKEN_I df70: 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 7b NFO_PTR pInfo) { df80: 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 54 46 38 ..static CK_UTF8 df90: 43 48 41 52 20 6d 61 6e 75 66 61 63 74 75 72 65 CHAR manufacture dfa0: 72 49 44 5b 5d 20 3d 20 22 55 2e 53 2e 20 47 6f rID[] = "U.S. Go dfb0: 76 65 72 6e 6d 65 6e 74 22 3b 0a 09 73 74 61 74 vernment";..stat dfc0: 69 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20 64 ic CK_UTF8CHAR d dfd0: 65 66 61 75 6c 74 4c 61 62 65 6c 5b 5d 20 3d 20 efaultLabel[] = dfe0: 22 55 6e 6b 6e 6f 77 6e 20 54 6f 6b 65 6e 22 3b "Unknown Token"; dff0: 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 54 46 38 ..static CK_UTF8 e000: 43 48 41 52 20 6d 6f 64 65 6c 5b 5d 20 3d 20 22 CHAR model[] = " e010: 43 41 43 20 54 6f 6b 65 6e 22 3b 0a 0a 09 43 41 CAC Token";...CA e020: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT e030: 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... e040: 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c if (pInfo == NUL e050: 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 L) {...CACKEY_DE e060: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro e070: 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c r. pInfo is NULL e080: 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C e090: 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD e0a0: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6c 6f 74 );..}...if (slot e0b0: 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 ID < 0 || slotID e0c0: 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b >= (sizeof(cack e0d0: 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 ey_slots) / size e0e0: 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b of(cackey_slots[ e0f0: 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 0]))) {...CACKEY e100: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E e110: 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c rror. Invalid sl e120: 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c ot requested (%l e130: 75 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 76 u), outside of v e140: 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f alid range", slo e150: 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 tID);....return( e160: 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 CKR_SLOT_ID_INVA e170: 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 LID);..}...if (c e180: 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 ackey_slots[slot e190: 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 ID].active == 0) e1a0: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU e1b0: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. e1c0: 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 Invalid slot re e1d0: 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 73 quested (%lu), s e1e0: 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c lot not currentl e1f0: 79 20 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 y active", slotI e200: 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b D);....return(CK e210: 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 R_SLOT_ID_INVALI e220: 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 D);..}...if (!ca e230: 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized e240: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB e250: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error e260: 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ e270: 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return e280: 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO e290: 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. e2a0: 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey e2b0: 5f 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 28 26 _token_present(& e2c0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo e2d0: 74 49 44 5d 29 29 20 7b 0a 09 09 43 41 43 4b 45 tID])) {...CACKE e2e0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" e2f0: 4e 6f 20 74 6f 6b 65 6e 20 69 73 20 70 72 65 73 No token is pres e300: 65 6e 74 20 69 6e 20 73 6c 6f 74 49 44 20 3d 20 ent in slotID = e310: 25 6c 75 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a %lu", slotID);.. e320: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 54 4f 4b ..return(CKR_TOK e330: 45 4e 5f 4e 4f 54 5f 50 52 45 53 45 4e 54 29 3b EN_NOT_PRESENT); e340: 0a 09 7d 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e ..}...memset(pIn e350: 66 6f 2d 3e 6c 61 62 65 6c 2c 20 27 20 27 2c 20 fo->label, ' ', e360: 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6c 61 sizeof(pInfo->la e370: 62 65 6c 29 29 3b 0a 09 69 66 20 28 31 29 20 7b bel));..if (1) { e380: 0a 09 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d ...memcpy(pInfo- e390: 3e 6c 61 62 65 6c 2c 20 64 65 66 61 75 6c 74 4c >label, defaultL e3a0: 61 62 65 6c 2c 20 73 69 7a 65 6f 66 28 64 65 66 abel, sizeof(def e3b0: 61 75 6c 74 4c 61 62 65 6c 29 20 2d 20 31 29 3b aultLabel) - 1); e3c0: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 7d 0a 0a 09 ..} else {..}... e3d0: 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d 61 memset(pInfo->ma e3e0: 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 27 20 nufacturerID, ' e3f0: 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d ', sizeof(pInfo- e400: 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 >manufacturerID) e410: 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f );..memcpy(pInfo e420: 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 ->manufacturerID e430: 2c 20 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 , manufacturerID e440: 2c 20 73 69 7a 65 6f 66 28 6d 61 6e 75 66 61 63 , sizeof(manufac e450: 74 75 72 65 72 49 44 29 20 2d 20 31 29 3b 0a 0a turerID) - 1);.. e460: 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d .memset(pInfo->m e470: 6f 64 65 6c 2c 20 27 20 27 2c 20 73 69 7a 65 6f odel, ' ', sizeo e480: 66 28 70 49 6e 66 6f 2d 3e 6d 6f 64 65 6c 29 29 f(pInfo->model)) e490: 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d ;..memcpy(pInfo- e4a0: 3e 6d 6f 64 65 6c 2c 20 6d 6f 64 65 6c 2c 20 73 >model, model, s e4b0: 69 7a 65 6f 66 28 6d 6f 64 65 6c 29 20 2d 20 31 izeof(model) - 1 e4c0: 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 );...memset(pInf e4d0: 6f 2d 3e 73 65 72 69 61 6c 4e 75 6d 62 65 72 2c o->serialNumber, e4e0: 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e ' ', sizeof(pIn e4f0: 66 6f 2d 3e 73 65 72 69 61 6c 4e 75 6d 62 65 72 fo->serialNumber e500: 29 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e ));...memset(pIn e510: 66 6f 2d 3e 75 74 63 54 69 6d 65 2c 20 27 20 27 fo->utcTime, ' ' e520: 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e , sizeof(pInfo-> e530: 75 74 63 54 69 6d 65 29 29 3b 0a 0a 09 70 49 6e utcTime));...pIn e540: 66 6f 2d 3e 68 61 72 64 77 61 72 65 56 65 72 73 fo->hardwareVers e550: 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 61 63 ion.major = (cac e560: 6b 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 key_getversion() e570: 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a >> 16) & 0xff;. e580: 09 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 65 .pInfo->hardware e590: 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 Version.minor = e5a0: 28 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 (cackey_getversi e5b0: 6f 6e 28 29 20 3e 3e 20 38 29 20 26 20 30 78 66 on() >> 8) & 0xf e5c0: 66 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66 69 72 6d f;...pInfo->firm e5d0: 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f wareVersion.majo e5e0: 72 20 3d 20 30 78 30 30 3b 0a 09 70 49 6e 66 6f r = 0x00;..pInfo e5f0: 2d 3e 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f ->firmwareVersio e600: 6e 2e 6d 69 6e 6f 72 20 3d 20 30 78 30 30 3b 0a n.minor = 0x00;. e610: 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d ..pInfo->flags = e620: 20 43 4b 46 5f 57 52 49 54 45 5f 50 52 4f 54 45 CKF_WRITE_PROTE e630: 43 54 45 44 20 7c 20 43 4b 46 5f 55 53 45 52 5f CTED | CKF_USER_ e640: 50 49 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 44 20 PIN_INITIALIZED e650: 7c 20 43 4b 46 5f 54 4f 4b 45 4e 5f 49 4e 49 54 | CKF_TOKEN_INIT e660: 49 41 4c 49 5a 45 44 3b 0a 0a 09 70 49 6e 66 6f IALIZED;...pInfo e670: 2d 3e 75 6c 4d 61 78 53 65 73 73 69 6f 6e 43 6f ->ulMaxSessionCo e680: 75 6e 74 20 3d 20 28 73 69 7a 65 6f 66 28 63 61 unt = (sizeof(ca e690: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f ckey_sessions) / e6a0: 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s e6b0: 65 73 73 69 6f 6e 73 5b 30 5d 29 29 20 2d 20 31 essions[0])) - 1 e6c0: 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 53 65 73 73 ;..pInfo->ulSess e6d0: 69 6f 6e 43 6f 75 6e 74 20 3d 20 43 4b 5f 55 4e ionCount = CK_UN e6e0: 41 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d AVAILABLE_INFORM e6f0: 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 ATION;..pInfo->u e700: 6c 4d 61 78 52 77 53 65 73 73 69 6f 6e 43 6f 75 lMaxRwSessionCou e710: 6e 74 20 3d 20 30 3b 0a 09 70 49 6e 66 6f 2d 3e nt = 0;..pInfo-> e720: 75 6c 52 77 53 65 73 73 69 6f 6e 43 6f 75 6e 74 ulRwSessionCount e730: 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c = CK_UNAVAILABL e740: 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 E_INFORMATION;.. e750: 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 50 69 6e 4c pInfo->ulMaxPinL e760: 65 6e 20 3d 20 31 32 38 3b 0a 09 70 49 6e 66 6f en = 128;..pInfo e770: 2d 3e 75 6c 4d 69 6e 50 69 6e 4c 65 6e 20 3d 20 ->ulMinPinLen = e780: 30 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 54 6f 74 0;..pInfo->ulTot e790: 61 6c 50 75 62 6c 69 63 4d 65 6d 6f 72 79 20 3d alPublicMemory = e7a0: 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f CK_UNAVAILABLE_ e7b0: 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 INFORMATION;..pI e7c0: 6e 66 6f 2d 3e 75 6c 46 72 65 65 50 75 62 6c 69 nfo->ulFreePubli e7d0: 63 4d 65 6d 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 cMemory = CK_UNA e7e0: 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 VAILABLE_INFORMA e7f0: 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c TION;..pInfo->ul e800: 54 6f 74 61 6c 50 72 69 76 61 74 65 4d 65 6d 6f TotalPrivateMemo e810: 72 79 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 ry = CK_UNAVAILA e820: 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b BLE_INFORMATION; e830: 0a 09 70 49 6e 66 6f 2d 3e 75 6c 46 72 65 65 50 ..pInfo->ulFreeP e840: 72 69 76 61 74 65 4d 65 6d 6f 72 79 20 3d 20 43 rivateMemory = C e850: 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e K_UNAVAILABLE_IN e860: 46 4f 52 4d 41 54 49 4f 4e 3b 0a 0a 09 43 41 43 FORMATION;...CAC e870: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF e880: 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ e890: 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b OK (%i)", CKR_OK e8a0: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ e8b0: 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e OK);.}..CK_DEFIN e8c0: 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV e8d0: 2c 20 43 5f 57 61 69 74 46 6f 72 53 6c 6f 74 45 , C_WaitForSlotE e8e0: 76 65 6e 74 29 28 43 4b 5f 46 4c 41 47 53 20 66 vent)(CK_FLAGS f e8f0: 6c 61 67 73 2c 20 43 4b 5f 53 4c 4f 54 5f 49 44 lags, CK_SLOT_ID e900: 5f 50 54 52 20 70 53 6c 6f 74 49 44 2c 20 43 4b _PTR pSlotID, CK e910: 5f 56 4f 49 44 5f 50 54 52 20 70 52 65 73 65 72 _VOID_PTR pReser e920: 76 65 64 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 ved) {..CACKEY_D e930: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal e940: 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 52 led.");...if (pR e950: 65 73 65 72 76 65 64 20 21 3d 20 4e 55 4c 4c 29 eserved != NULL) e960: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU e970: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. e980: 20 70 52 65 73 65 72 76 65 64 20 69 73 20 6e 6f pReserved is no e990: 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 t NULL.");....re e9a0: 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN e9b0: 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if e9c0: 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia e9d0: 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE e9e0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" e9f0: 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init ea00: 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r ea10: 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO ea20: 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ ea30: 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY ea40: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R ea50: 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN ea60: 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR ea70: 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F ea80: 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP ea90: 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return eaa0: 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO eab0: 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. eac0: 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT ead0: 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 ION(CK_RV, C_Get eae0: 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 29 28 43 MechanismList)(C eaf0: 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 K_SLOT_ID slotID eb00: 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 , CK_MECHANISM_T eb10: 59 50 45 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 YPE_PTR pMechani eb20: 73 6d 4c 69 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 smList, CK_ULONG eb30: 5f 50 54 52 20 70 75 6c 43 6f 75 6e 74 29 20 7b _PTR pulCount) { eb40: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P eb50: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") eb60: 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ eb70: 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. eb80: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR eb90: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No eba0: 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") ebb0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ ebc0: 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI ebd0: 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... ebe0: 69 66 20 28 70 75 6c 43 6f 75 6e 74 20 3d 3d 20 if (pulCount == ebf0: 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY ec00: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E ec10: 72 72 6f 72 2e 20 20 70 75 6c 43 6f 75 6e 74 20 rror. pulCount ec20: 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 is NULL.");....r ec30: 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 eturn(CKR_ARGUME ec40: 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 NTS_BAD);..}...i ec50: 66 20 28 70 4d 65 63 68 61 6e 69 73 6d 4c 69 73 f (pMechanismLis ec60: 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 2a t == NULL) {...* ec70: 70 75 6c 43 6f 75 6e 74 20 3d 20 33 3b 0a 0a 09 pulCount = 3;... ec80: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR ec90: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning eca0: 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK ecb0: 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e R_OK);....return ecc0: 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 (CKR_OK);..}...i ecd0: 66 20 28 2a 70 75 6c 43 6f 75 6e 74 20 3c 20 33 f (*pulCount < 3 ece0: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB ecf0: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error ed00: 2e 20 20 42 75 66 66 65 72 20 74 6f 6f 20 73 6d . Buffer too sm ed10: 61 6c 6c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 all.");....retur ed20: 6e 28 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f n(CKR_BUFFER_TOO ed30: 5f 53 4d 41 4c 4c 29 3b 0a 09 7d 0a 0a 09 70 4d _SMALL);..}...pM ed40: 65 63 68 61 6e 69 73 6d 4c 69 73 74 5b 30 5d 20 echanismList[0] ed50: 3d 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 3b 0a = CKM_RSA_PKCS;. ed60: 09 70 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 5b .pMechanismList[ ed70: 31 5d 20 3d 20 43 4b 4d 5f 53 48 41 31 5f 52 53 1] = CKM_SHA1_RS ed80: 41 5f 50 4b 43 53 3b 0a 09 2a 70 75 6c 43 6f 75 A_PKCS;..*pulCou ed90: 6e 74 20 3d 20 32 3b 0a 0a 09 43 41 43 4b 45 59 nt = 2;...CACKEY eda0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R edb0: 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 eturning CKR_OK edc0: 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a (%i)", CKR_OK);. edd0: 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 ..return(CKR_OK) ede0: 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F edf0: 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C ee00: 5f 47 65 74 4d 65 63 68 61 6e 69 73 6d 49 6e 66 _GetMechanismInf ee10: 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c o)(CK_SLOT_ID sl ee20: 6f 74 49 44 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 otID, CK_MECHANI ee30: 53 4d 5f 54 59 50 45 20 74 79 70 65 2c 20 43 4b SM_TYPE type, CK ee40: 5f 4d 45 43 48 41 4e 49 53 4d 5f 49 4e 46 4f 5f _MECHANISM_INFO_ ee50: 50 54 52 20 70 49 6e 66 6f 29 20 7b 0a 09 43 41 PTR pInfo) {..CA ee60: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT ee70: 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... ee80: 69 66 20 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c if (slotID < 0 | ee90: 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a | slotID >= (siz eea0: 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 eof(cackey_slots eeb0: 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke eec0: 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a y_slots[0]))) {. eed0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P eee0: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e RINTF("Error. In eef0: 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 valid slot reque ef00: 73 74 65 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 sted (%lu), outs ef10: 69 64 65 20 6f 66 20 76 61 6c 69 64 20 72 61 6e ide of valid ran ef20: 67 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 ge", slotID);... ef30: 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 .return(CKR_SLOT ef40: 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d _ID_INVALID);..} ef50: 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c ...if (cackey_sl ef60: 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 ots[slotID].acti ef70: 76 65 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 ve == 0) {...CAC ef80: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF ef90: 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 ("Error. Invalid efa0: 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 slot requested efb0: 28 25 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 (%lu), slot not efc0: 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 currently active efd0: 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 ", slotID);....r efe0: 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 eturn(CKR_SLOT_I eff0: 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a D_INVALID);..}.. f000: 09 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 .if (pInfo == NU f010: 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D f020: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err f030: 6f 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c or. pInfo is NUL f040: 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 L.");....return( f050: 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA f060: 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 D);..}...if (!ca f070: 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized f080: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB f090: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error f0a0: 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ f0b0: 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return f0c0: 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO f0d0: 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. f0e0: 09 7d 0a 0a 09 2f 2a 20 58 58 58 3a 20 54 68 69 .}.../* XXX: Thi f0f0: 73 20 69 73 20 75 6e 74 65 73 74 65 64 2c 20 61 s is untested, a f100: 6e 64 20 66 75 72 74 68 65 72 20 49 27 6d 20 6e nd further I'm n f110: 6f 74 20 72 65 61 6c 6c 79 20 73 75 72 65 20 69 ot really sure i f120: 66 20 74 68 69 73 20 69 73 20 63 6f 72 72 65 63 f this is correc f130: 74 2e 20 2a 2f 0a 09 73 77 69 74 63 68 20 28 74 t. */..switch (t f140: 79 70 65 29 20 7b 0a 09 09 63 61 73 65 20 43 4b ype) {...case CK f150: 4d 5f 52 53 41 5f 50 4b 43 53 3a 0a 09 09 09 70 M_RSA_PKCS:....p f160: 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 53 69 Info->ulMinKeySi f170: 7a 65 20 3d 20 35 31 32 3b 0a 09 09 09 70 49 6e ze = 512;....pIn f180: 66 6f 2d 3e 75 6c 4d 61 78 4b 65 79 53 69 7a 65 fo->ulMaxKeySize f190: 20 3d 20 38 31 39 32 3b 0a 09 09 09 70 49 6e 66 = 8192;....pInf f1a0: 6f 2d 3e 66 6c 61 67 73 20 3d 20 43 4b 46 5f 48 o->flags = CKF_H f1b0: 57 20 7c 20 43 4b 46 5f 45 4e 43 52 59 50 54 20 W | CKF_ENCRYPT f1c0: 7c 20 43 4b 46 5f 44 45 43 52 59 50 54 20 7c 20 | CKF_DECRYPT | f1d0: 43 4b 46 5f 53 49 47 4e 20 7c 20 43 4b 46 5f 56 CKF_SIGN | CKF_V f1e0: 45 52 49 46 59 3b 0a 09 09 09 62 72 65 61 6b 3b ERIFY;....break; f1f0: 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 53 41 5f ...case CKM_RSA_ f200: 58 5f 35 30 39 3a 0a 09 09 09 70 49 6e 66 6f 2d X_509:....pInfo- f210: 3e 75 6c 4d 69 6e 4b 65 79 53 69 7a 65 20 3d 20 >ulMinKeySize = f220: 35 31 32 3b 0a 09 09 09 70 49 6e 66 6f 2d 3e 75 512;....pInfo->u f230: 6c 4d 61 78 4b 65 79 53 69 7a 65 20 3d 20 38 31 lMaxKeySize = 81 f240: 39 32 3b 0a 09 09 09 70 49 6e 66 6f 2d 3e 66 6c 92;....pInfo->fl f250: 61 67 73 20 3d 20 43 4b 46 5f 48 57 20 7c 20 43 ags = CKF_HW | C f260: 4b 46 5f 45 4e 43 52 59 50 54 20 7c 20 43 4b 46 KF_ENCRYPT | CKF f270: 5f 44 45 43 52 59 50 54 20 7c 20 43 4b 46 5f 53 _DECRYPT | CKF_S f280: 49 47 4e 20 7c 20 43 4b 46 5f 56 45 52 49 46 59 IGN | CKF_VERIFY f290: 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 ;....break;...ca f2a0: 73 65 20 43 4b 4d 5f 53 48 41 31 5f 52 53 41 5f se CKM_SHA1_RSA_ f2b0: 50 4b 43 53 3a 0a 09 09 09 70 49 6e 66 6f 2d 3e PKCS:....pInfo-> f2c0: 75 6c 4d 69 6e 4b 65 79 53 69 7a 65 20 3d 20 35 ulMinKeySize = 5 f2d0: 31 32 3b 0a 09 09 09 70 49 6e 66 6f 2d 3e 75 6c 12;....pInfo->ul f2e0: 4d 61 78 4b 65 79 53 69 7a 65 20 3d 20 38 31 39 MaxKeySize = 819 f2f0: 32 3b 0a 09 09 09 70 49 6e 66 6f 2d 3e 66 6c 61 2;....pInfo->fla f300: 67 73 20 3d 20 43 4b 46 5f 48 57 20 7c 20 43 4b gs = CKF_HW | CK f310: 46 5f 53 49 47 4e 20 7c 20 43 4b 46 5f 56 45 52 F_SIGN | CKF_VER f320: 49 46 59 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 IFY;....break;.. f330: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG f340: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni f350: 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c ng CKR_OK (%i)", f360: 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 CKR_OK);...retu f370: 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 2f rn(CKR_OK);.}../ f380: 2a 20 57 65 20 64 6f 6e 27 74 20 73 75 70 70 6f * We don't suppo f390: 72 74 20 74 68 69 73 20 6d 65 74 68 6f 64 2e 20 rt this method. f3a0: 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e */.CK_DEFINE_FUN f3b0: 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 49 CTION(CK_RV, C_I f3c0: 6e 69 74 54 6f 6b 65 6e 29 28 43 4b 5f 53 4c 4f nitToken)(CK_SLO f3d0: 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f T_ID slotID, CK_ f3e0: 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 50 69 UTF8CHAR_PTR pPi f3f0: 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 69 n, CK_ULONG ulPi f400: 6e 4c 65 6e 2c 20 43 4b 5f 55 54 46 38 43 48 41 nLen, CK_UTF8CHA f410: 52 5f 50 54 52 20 70 4c 61 62 65 6c 29 20 7b 0a R_PTR pLabel) {. f420: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR f430: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); f440: 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i f450: 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... f460: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI f470: 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not f480: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); f490: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C f4a0: 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT f4b0: 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C f4c0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN f4d0: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK f4e0: 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 R_TOKEN_WRITE_PR f4f0: 4f 54 45 43 54 45 44 20 28 25 69 29 22 2c 20 43 OTECTED (%i)", C f500: 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 KR_TOKEN_WRITE_P f510: 52 4f 54 45 43 54 45 44 29 3b 0a 0a 09 72 65 74 ROTECTED);...ret f520: 75 72 6e 28 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 urn(CKR_TOKEN_WR f530: 49 54 45 5f 50 52 4f 54 45 43 54 45 44 29 3b 0a ITE_PROTECTED);. f540: 7d 0a 0a 2f 2a 20 57 65 20 64 6f 6e 27 74 20 73 }../* We don't s f550: 75 70 70 6f 72 74 20 74 68 69 73 20 6d 65 74 68 upport this meth f560: 6f 64 2e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 od. */.CK_DEFINE f570: 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, f580: 20 43 5f 49 6e 69 74 50 49 4e 29 28 43 4b 5f 53 C_InitPIN)(CK_S f590: 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS f5a0: 65 73 73 69 6f 6e 2c 20 43 4b 5f 55 54 46 38 43 ession, CK_UTF8C f5b0: 48 41 52 5f 50 54 52 20 70 50 69 6e 2c 20 43 4b HAR_PTR pPin, CK f5c0: 5f 55 4c 4f 4e 47 20 75 6c 50 69 6e 4c 65 6e 29 _ULONG ulPinLen) f5d0: 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG f5e0: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. f5f0: 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke f600: 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { f610: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ f620: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. f630: 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. f640: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK f650: 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I f660: 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. f670: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P f680: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning f690: 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 45 CKR_TOKEN_WRITE f6a0: 5f 50 52 4f 54 45 43 54 45 44 20 28 25 69 29 22 _PROTECTED (%i)" f6b0: 2c 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 , CKR_TOKEN_WRIT f6c0: 45 5f 50 52 4f 54 45 43 54 45 44 29 3b 0a 0a 09 E_PROTECTED);... f6d0: 72 65 74 75 72 6e 28 43 4b 52 5f 54 4f 4b 45 4e return(CKR_TOKEN f6e0: 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 _WRITE_PROTECTED f6f0: 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 64 6f 6e 27 );.}../* We don' f700: 74 20 73 75 70 70 6f 72 74 20 74 68 69 73 20 6d t support this m f710: 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b 5f 44 45 46 ethod. */.CK_DEF f720: 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ f730: 52 56 2c 20 43 5f 53 65 74 50 49 4e 29 28 43 4b RV, C_SetPIN)(CK f740: 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE f750: 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 55 54 46 hSession, CK_UTF f760: 38 43 48 41 52 5f 50 54 52 20 70 4f 6c 64 50 69 8CHAR_PTR pOldPi f770: 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 4f 6c n, CK_ULONG ulOl f780: 64 50 69 6e 4c 65 6e 2c 20 43 4b 5f 55 54 46 38 dPinLen, CK_UTF8 f790: 43 48 41 52 5f 50 54 52 20 70 4e 65 77 50 69 6e CHAR_PTR pNewPin f7a0: 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 4e 65 77 , CK_ULONG ulNew f7b0: 50 69 6e 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 PinLen) {..CACKE f7c0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" f7d0: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if f7e0: 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial f7f0: 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY f800: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E f810: 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi f820: 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re f830: 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK f840: 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE f850: 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ f860: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re f870: 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 turning CKR_FUNC f880: 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT f890: 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 ED (%i)", CKR_FU f8a0: 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO f8b0: 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 RTED);...return( f8c0: 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT f8d0: 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a _SUPPORTED);.}.. f8e0: 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI f8f0: 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 4f 70 65 6e ON(CK_RV, C_Open f900: 53 65 73 73 69 6f 6e 29 28 43 4b 5f 53 4c 4f 54 Session)(CK_SLOT f910: 5f 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 46 _ID slotID, CK_F f920: 4c 41 47 53 20 66 6c 61 67 73 2c 20 43 4b 5f 56 LAGS flags, CK_V f930: 4f 49 44 5f 50 54 52 20 70 41 70 70 6c 69 63 61 OID_PTR pApplica f940: 74 69 6f 6e 2c 20 43 4b 5f 4e 4f 54 49 46 59 20 tion, CK_NOTIFY f950: 6e 6f 74 69 66 79 2c 20 43 4b 5f 53 45 53 53 49 notify, CK_SESSI f960: 4f 4e 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 ON_HANDLE_PTR ph f970: 53 65 73 73 69 6f 6e 29 20 7b 0a 09 73 74 72 75 Session) {..stru f980: 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 ct cackey_pcsc_i f990: 64 65 6e 74 69 74 79 20 2a 70 63 73 63 5f 69 64 dentity *pcsc_id f9a0: 65 6e 74 69 74 69 65 73 3b 0a 09 73 74 72 75 63 entities;..struc f9b0: 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 t cackey_identit f9c0: 79 20 2a 69 64 65 6e 74 69 74 69 65 73 3b 0a 09 y *identities;.. f9d0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 unsigned long id f9e0: 78 2c 20 6e 75 6d 5f 69 64 73 2c 20 69 64 5f 69 x, num_ids, id_i f9f0: 64 78 2c 20 63 75 72 72 5f 69 64 5f 74 79 70 65 dx, curr_id_type fa00: 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ;..unsigned long fa10: 20 6e 75 6d 5f 63 65 72 74 73 2c 20 63 65 72 74 num_certs, cert fa20: 5f 69 64 78 3b 0a 09 69 6e 74 20 6d 75 74 65 78 _idx;..int mutex fa30: 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 66 6f _retval;..int fo fa40: 75 6e 64 5f 73 65 73 73 69 6f 6e 20 3d 20 30 3b und_session = 0; fa50: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ fa60: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." fa70: 29 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 );...if (slotID fa80: 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d < 0 || slotID >= fa90: 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ faa0: 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 slots) / sizeof( fab0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 cackey_slots[0]) fac0: 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE fad0: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro fae0: 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 r. Invalid slot faf0: 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c requested (%lu), fb00: 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 outside of vali fb10: 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 d range", slotID fb20: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR fb30: 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 _SLOT_ID_INVALID fb40: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b );..}...if (cack fb50: 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d ey_slots[slotID] fb60: 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a .active == 0) {. fb70: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P fb80: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e RINTF("Error. In fb90: 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 valid slot reque fba0: 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 sted (%lu), slot fbb0: 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 not currently a fbc0: 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b ctive", slotID); fbd0: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S fbe0: 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b LOT_ID_INVALID); fbf0: 0a 09 7d 0a 0a 09 69 66 20 28 28 66 6c 61 67 73 ..}...if ((flags fc00: 20 26 20 43 4b 46 5f 53 45 52 49 41 4c 5f 53 45 & CKF_SERIAL_SE fc10: 53 53 49 4f 4e 29 20 21 3d 20 43 4b 46 5f 53 45 SSION) != CKF_SE fc20: 52 49 41 4c 5f 53 45 53 53 49 4f 4e 29 20 7b 0a RIAL_SESSION) {. fc30: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES fc40: 53 49 4f 4e 5f 50 41 52 41 4c 4c 45 4c 5f 4e 4f SION_PARALLEL_NO fc50: 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 09 7d T_SUPPORTED);..} fc60: 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i fc70: 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... fc80: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI fc90: 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not fca0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); fcb0: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C fcc0: 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT fcd0: 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 2f IALIZED);..}.../ fce0: 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 74 68 * Verify that th fcf0: 65 20 63 61 72 64 20 69 73 20 61 63 74 75 61 6c e card is actual fd00: 6c 79 20 69 6e 20 74 68 65 20 73 6c 6f 74 2e 20 ly in the slot. fd10: 2a 2f 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f */..if (!cackey_ fd20: 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 28 26 63 token_present(&c fd30: 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 ackey_slots[slot fd40: 49 44 5d 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 ID])) {...CACKEY fd50: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E fd60: 72 72 6f 72 2e 20 20 43 61 72 64 20 6e 6f 74 20 rror. Card not fd70: 70 72 65 73 65 6e 74 2e 20 20 52 65 74 75 72 6e present. Return fd80: 69 6e 67 20 43 4b 52 5f 44 45 56 49 43 45 5f 52 ing CKR_DEVICE_R fd90: 45 4d 4f 56 45 44 22 29 3b 0a 0a 09 09 72 65 74 EMOVED");....ret fda0: 75 72 6e 28 43 4b 52 5f 44 45 56 49 43 45 5f 52 urn(CKR_DEVICE_R fdb0: 45 4d 4f 56 45 44 29 3b 0a 09 7d 0a 0a 09 6d 75 EMOVED);..}...mu fdc0: 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac fdd0: 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 key_mutex_lock(c fde0: 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. fdf0: 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva fe00: 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK fe10: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( fe20: 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 "Error. Locking fe30: 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r fe40: 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA fe50: 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 66 L_ERROR);..}...f fe60: 6f 72 20 28 69 64 78 20 3d 20 31 3b 20 69 64 78 or (idx = 1; idx fe70: 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 < (sizeof(cacke fe80: 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 y_sessions) / si fe90: 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess fea0: 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b ions[0])); idx++ feb0: 29 20 7b 0a 09 09 69 66 20 28 21 63 61 63 6b 65 ) {...if (!cacke fec0: 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. fed0: 61 63 74 69 76 65 29 20 7b 0a 09 09 09 66 6f 75 active) {....fou fee0: 6e 64 5f 73 65 73 73 69 6f 6e 20 3d 20 31 3b 0a nd_session = 1;. fef0: 0a 09 09 09 2a 70 68 53 65 73 73 69 6f 6e 20 3d ....*phSession = ff00: 20 69 64 78 3b 0a 0a 09 09 09 63 61 63 6b 65 79 idx;.....cackey ff10: 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 _sessions[idx].a ff20: 63 74 69 76 65 20 3d 20 31 3b 0a 09 09 09 63 61 ctive = 1;....ca ff30: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 ckey_sessions[id ff40: 78 5d 2e 73 6c 6f 74 49 44 20 3d 20 73 6c 6f 74 x].slotID = slot ff50: 49 44 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 ID;....cackey_se ff60: 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 74 61 74 ssions[idx].stat ff70: 65 20 3d 20 43 4b 53 5f 52 4f 5f 50 55 42 4c 49 e = CKS_RO_PUBLI ff80: 43 5f 53 45 53 53 49 4f 4e 3b 0a 09 09 09 63 61 C_SESSION;....ca ff90: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 ckey_sessions[id ffa0: 78 5d 2e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 x].flags = flags ffb0: 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 ;....cackey_sess ffc0: 69 6f 6e 73 5b 69 64 78 5d 2e 75 6c 44 65 76 69 ions[idx].ulDevi ffd0: 63 65 45 72 72 6f 72 20 3d 20 30 3b 0a 09 09 09 ceError = 0;.... ffe0: 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ fff0: 69 64 78 5d 2e 70 41 70 70 6c 69 63 61 74 69 6f idx].pApplicatio 10000 6e 20 3d 20 70 41 70 70 6c 69 63 61 74 69 6f 6e n = pApplication 10010 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 ;....cackey_sess 10020 69 6f 6e 73 5b 69 64 78 5d 2e 4e 6f 74 69 66 79 ions[idx].Notify 10030 20 3d 20 6e 6f 74 69 66 79 3b 0a 0a 09 09 09 63 = notify;.....c 10040 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 ackey_sessions[i 10050 64 78 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 3d dx].identities = 10060 20 4e 55 4c 4c 3b 0a 09 09 09 63 61 63 6b 65 79 NULL;....cackey 10070 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 69 _sessions[idx].i 10080 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 20 dentities_count 10090 3d 20 30 3b 0a 0a 09 09 09 70 63 73 63 5f 69 64 = 0;.....pcsc_id 100a0 65 6e 74 69 74 69 65 73 20 3d 20 63 61 63 6b 65 entities = cacke 100b0 79 5f 72 65 61 64 5f 63 65 72 74 73 28 26 63 61 y_read_certs(&ca 100c0 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 ckey_slots[slotI 100d0 44 5d 2c 20 4e 55 4c 4c 2c 20 26 6e 75 6d 5f 63 D], NULL, &num_c 100e0 65 72 74 73 29 3b 0a 09 09 09 69 66 20 28 70 63 erts);....if (pc 100f0 73 63 5f 69 64 65 6e 74 69 74 69 65 73 20 21 3d sc_identities != 10100 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 2f 2a 20 NULL) {...../* 10110 43 6f 6e 76 65 72 74 20 6e 75 6d 62 65 72 20 6f Convert number o 10120 66 20 49 44 73 20 74 6f 20 6e 75 6d 62 65 72 20 f IDs to number 10130 6f 66 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 09 09 of objects */... 10140 09 09 6e 75 6d 5f 69 64 73 20 3d 20 28 43 4b 4f ..num_ids = (CKO 10150 5f 50 52 49 56 41 54 45 5f 4b 45 59 20 2d 20 43 _PRIVATE_KEY - C 10160 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 20 2b KO_CERTIFICATE + 10170 20 31 29 20 2a 20 6e 75 6d 5f 63 65 72 74 73 3b 1) * num_certs; 10180 0a 0a 09 09 09 09 69 64 65 6e 74 69 74 69 65 73 ......identities 10190 20 3d 20 6d 61 6c 6c 6f 63 28 6e 75 6d 5f 69 64 = malloc(num_id 101a0 73 20 2a 20 73 69 7a 65 6f 66 28 2a 69 64 65 6e s * sizeof(*iden 101b0 74 69 74 69 65 73 29 29 3b 0a 0a 09 09 09 09 69 tities));......i 101c0 64 5f 69 64 78 20 3d 20 30 3b 0a 09 09 09 09 66 d_idx = 0;.....f 101d0 6f 72 20 28 63 65 72 74 5f 69 64 78 20 3d 20 30 or (cert_idx = 0 101e0 3b 20 63 65 72 74 5f 69 64 78 20 3c 20 6e 75 6d ; cert_idx < num 101f0 5f 63 65 72 74 73 3b 20 63 65 72 74 5f 69 64 78 _certs; cert_idx 10200 2b 2b 29 20 7b 0a 09 09 09 09 09 66 6f 72 20 28 ++) {......for ( 10210 63 75 72 72 5f 69 64 5f 74 79 70 65 20 3d 20 43 curr_id_type = C 10220 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 3b 20 KO_CERTIFICATE; 10230 63 75 72 72 5f 69 64 5f 74 79 70 65 20 3c 3d 20 curr_id_type <= 10240 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 3b CKO_PRIVATE_KEY; 10250 20 63 75 72 72 5f 69 64 5f 74 79 70 65 2b 2b 29 curr_id_type++) 10260 20 7b 0a 09 09 09 09 09 09 69 64 65 6e 74 69 74 {.......identit 10270 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 ies[id_idx].attr 10280 69 62 75 74 65 73 20 3d 20 63 61 63 6b 65 79 5f ibutes = cackey_ 10290 67 65 74 5f 61 74 74 72 69 62 75 74 65 73 28 63 get_attributes(c 102a0 75 72 72 5f 69 64 5f 74 79 70 65 2c 20 26 70 63 urr_id_type, &pc 102b0 73 63 5f 69 64 65 6e 74 69 74 69 65 73 5b 63 65 sc_identities[ce 102c0 72 74 5f 69 64 78 5d 2c 20 2d 31 2c 20 26 69 64 rt_idx], -1, &id 102d0 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d entities[id_idx] 102e0 2e 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e .attributes_coun 102f0 74 29 3b 0a 0a 09 09 09 09 09 09 69 66 20 28 69 t);........if (i 10300 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 dentities[id_idx 10310 5d 2e 61 74 74 72 69 62 75 74 65 73 20 3d 3d 20 ].attributes == 10320 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 09 09 09 69 NULL) {........i 10330 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 dentities[id_idx 10340 5d 2e 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75 ].attributes_cou 10350 6e 74 20 3d 20 30 3b 0a 09 09 09 09 09 09 7d 0a nt = 0;.......}. 10360 0a 09 09 09 09 09 09 69 64 5f 69 64 78 2b 2b 3b .......id_idx++; 10370 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 ......}.....}... 10380 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio 10390 6e 73 5b 69 64 78 5d 2e 69 64 65 6e 74 69 74 69 ns[idx].identiti 103a0 65 73 20 3d 20 69 64 65 6e 74 69 74 69 65 73 3b es = identities; 103b0 0a 09 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 .....cackey_sess 103c0 69 6f 6e 73 5b 69 64 78 5d 2e 69 64 65 6e 74 69 ions[idx].identi 103d0 74 69 65 73 5f 63 6f 75 6e 74 20 3d 20 6e 75 6d ties_count = num 103e0 5f 69 64 73 3b 0a 0a 09 09 09 09 63 61 63 6b 65 _ids;......cacke 103f0 79 5f 66 72 65 65 5f 63 65 72 74 73 28 70 63 73 y_free_certs(pcs 10400 63 5f 69 64 65 6e 74 69 74 69 65 73 2c 20 6e 75 c_identities, nu 10410 6d 5f 63 65 72 74 73 2c 20 31 29 3b 0a 09 09 09 m_certs, 1);.... 10420 7d 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 }.....cackey_ses 10430 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 65 61 72 63 sions[idx].searc 10440 68 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a 0a 09 h_active = 0;... 10450 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 10460 73 5b 69 64 78 5d 2e 73 69 67 6e 5f 61 63 74 69 s[idx].sign_acti 10470 76 65 20 3d 20 30 3b 0a 0a 09 09 09 63 61 63 6b ve = 0;.....cack 10480 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d ey_sessions[idx] 10490 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 20 .decrypt_active 104a0 3d 20 30 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a = 0;.....break;. 104b0 09 09 7d 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 ..}..}...mutex_r 104c0 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 104d0 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 104e0 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 104f0 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 10500 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 10510 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 10520 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 ror. Unlocking 10530 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 10540 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 10550 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 _ERROR);..}...if 10560 20 28 21 66 6f 75 6e 64 5f 73 65 73 73 69 6f 6e (!found_session 10570 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 10580 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 10590 6e 69 6e 67 20 43 4b 52 5f 53 45 53 53 49 4f 4e ning CKR_SESSION 105a0 5f 43 4f 55 4e 54 20 28 25 69 29 22 2c 20 43 4b _COUNT (%i)", CK 105b0 52 5f 53 45 53 53 49 4f 4e 5f 43 4f 55 4e 54 29 R_SESSION_COUNT) 105c0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 105d0 53 45 53 53 49 4f 4e 5f 43 4f 55 4e 54 29 3b 0a SESSION_COUNT);. 105e0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 105f0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 10600 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 10610 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret 10620 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}.. 10630 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 10640 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 6c 6f 73 ON(CK_RV, C_Clos 10650 65 53 65 73 73 69 6f 6e 29 28 43 4b 5f 53 45 53 eSession)(CK_SES 10660 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 10670 73 69 6f 6e 29 20 7b 0a 09 43 4b 5f 41 54 54 52 sion) {..CK_ATTR 10680 49 42 55 54 45 20 2a 63 75 72 72 5f 61 74 74 72 IBUTE *curr_attr 10690 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ;..unsigned long 106a0 20 69 64 5f 69 64 78 2c 20 61 74 74 72 5f 69 64 id_idx, attr_id 106b0 78 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 x;..int mutex_re 106c0 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 tval;...CACKEY_D 106d0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 106e0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 106f0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 10700 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 10710 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 10720 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 10730 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 10740 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 10750 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 10760 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 ..}...if (hSessi 10770 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 on == 0 || hSess 10780 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 ion >= (sizeof(c 10790 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 ackey_sessions) 107a0 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ 107b0 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b sessions[0]))) { 107c0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 107d0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 107e0 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 Session out of r 107f0 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 ange.");......re 10800 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 10810 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 10820 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 10830 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 10840 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 ex_lock(cackey_b 10850 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 10860 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 10870 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 10880 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 10890 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Locking failed 108a0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 108b0 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 108c0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 108d0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 108e0 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b ssion].active) { 108f0 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 10900 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 10910 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 10920 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 10930 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 10940 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 not active.");.. 10950 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 10960 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 10970 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 VALID);..}...cac 10980 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 10990 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 20 3d 20 ssion].active = 109a0 30 3b 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 0;..if (cackey_s 109b0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 109c0 5d 2e 69 64 65 6e 74 69 74 69 65 73 29 20 7b 0a ].identities) {. 109d0 09 09 66 6f 72 20 28 69 64 5f 69 64 78 20 3d 20 ..for (id_idx = 109e0 30 3b 20 69 64 5f 69 64 78 20 3c 20 63 61 63 6b 0; id_idx < cack 109f0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 10a00 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 sion].identities 10a10 5f 63 6f 75 6e 74 3b 20 69 64 5f 69 64 78 2b 2b _count; id_idx++ 10a20 29 20 7b 0a 09 09 09 69 66 20 28 63 61 63 6b 65 ) {....if (cacke 10a30 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 10a40 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5b ion].identities[ 10a50 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 id_idx].attribut 10a60 65 73 29 20 7b 0a 09 09 09 09 66 6f 72 20 28 61 es) {.....for (a 10a70 74 74 72 5f 69 64 78 20 3d 20 30 3b 20 61 74 74 ttr_idx = 0; att 10a80 72 5f 69 64 78 20 3c 20 63 61 63 6b 65 79 5f 73 r_idx < cackey_s 10a90 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 10aa0 5d 2e 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f ].identities[id_ 10ab0 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 5f idx].attributes_ 10ac0 63 6f 75 6e 74 3b 20 61 74 74 72 5f 69 64 78 2b count; attr_idx+ 10ad0 2b 29 20 7b 0a 09 09 09 09 09 63 75 72 72 5f 61 +) {......curr_a 10ae0 74 74 72 20 3d 20 26 63 61 63 6b 65 79 5f 73 65 ttr = &cackey_se 10af0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 10b00 2e 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 .identities[id_i 10b10 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 5b 61 dx].attributes[a 10b20 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 09 09 09 ttr_idx];....... 10b30 69 66 20 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 if (curr_attr->p 10b40 56 61 6c 75 65 29 20 7b 0a 09 09 09 09 09 09 66 Value) {.......f 10b50 72 65 65 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 ree(curr_attr->p 10b60 56 61 6c 75 65 29 3b 0a 09 09 09 09 09 7d 0a 09 Value);......}.. 10b70 09 09 09 7d 0a 0a 09 09 09 09 66 72 65 65 28 63 ...}......free(c 10b80 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 10b90 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 Session].identit 10ba0 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 ies[id_idx].attr 10bb0 69 62 75 74 65 73 29 3b 0a 09 09 09 7d 0a 09 09 ibutes);....}... 10bc0 7d 0a 0a 09 09 66 72 65 65 28 63 61 63 6b 65 79 }....free(cackey 10bd0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 10be0 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 29 3b on].identities); 10bf0 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 10c00 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 10c10 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 10c20 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 10c30 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 10c40 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 10c50 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 10c60 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 . Unlocking fai 10c70 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 10c80 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 10c90 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ROR);..}...CACKE 10ca0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 10cb0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 10cc0 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b (%i)", CKR_OK); 10cd0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 10ce0 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 10cf0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 10d00 43 5f 43 6c 6f 73 65 41 6c 6c 53 65 73 73 69 6f C_CloseAllSessio 10d10 6e 73 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 ns)(CK_SLOT_ID s 10d20 6c 6f 74 49 44 29 20 7b 0a 09 75 69 6e 74 33 32 lotID) {..uint32 10d30 5f 74 20 69 64 78 3b 0a 09 69 6e 74 20 6d 75 74 _t idx;..int mut 10d40 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 ex_retval;...CAC 10d50 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 10d60 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 10d70 66 20 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c f (slotID < 0 || 10d80 20 73 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 slotID >= (size 10d90 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 of(cackey_slots) 10da0 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 10db0 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 _slots[0]))) {.. 10dc0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 10dd0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 INTF("Error. Inv 10de0 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 alid slot reques 10df0 74 65 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 ted (%lu), outsi 10e00 64 65 20 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 de of valid rang 10e10 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 e", slotID);.... 10e20 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f return(CKR_SLOT_ 10e30 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a ID_INVALID);..}. 10e40 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f ..if (cackey_slo 10e50 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 ts[slotID].activ 10e60 65 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b e == 0) {...CACK 10e70 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 10e80 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 "Error. Invalid 10e90 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 slot requested ( 10ea0 25 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 %lu), slot not c 10eb0 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 urrently active" 10ec0 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 , slotID);....re 10ed0 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 turn(CKR_SLOT_ID 10ee0 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 10ef0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 10f00 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 10f10 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 10f20 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 10f30 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 10f40 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 10f50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 10f60 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 IZED);..}...mute 10f70 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 10f80 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 y_mutex_lock(cac 10f90 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 10fa0 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 10fb0 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 10fc0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 10fd0 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 rror. Locking f 10fe0 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 ailed.");....ret 10ff0 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 11000 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 66 6f 72 ERROR);..}...for 11010 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c (idx = 0; idx < 11020 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 11030 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 11040 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 11050 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 ns[0])); idx++) 11060 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 {...if (cackey_s 11070 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 63 74 essions[idx].act 11080 69 76 65 29 20 7b 0a 09 09 09 69 66 20 28 63 61 ive) {....if (ca 11090 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 ckey_sessions[id 110a0 78 5d 2e 73 6c 6f 74 49 44 20 21 3d 20 73 6c 6f x].slotID != slo 110b0 74 49 44 29 20 7b 0a 09 09 09 09 63 6f 6e 74 69 tID) {.....conti 110c0 6e 75 65 3b 0a 09 09 09 7d 0a 0a 09 09 09 63 61 nue;....}.....ca 110d0 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 110e0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 110f0 29 3b 0a 09 09 09 43 5f 43 6c 6f 73 65 53 65 73 );....C_CloseSes 11100 73 69 6f 6e 28 69 64 78 29 3b 0a 09 09 09 63 61 sion(idx);....ca 11110 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( 11120 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 11130 0a 09 09 7d 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f ...}..}...mutex_ 11140 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 11150 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 11160 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 11170 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 11180 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 11190 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 111a0 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 111b0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 111c0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 111d0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 L_ERROR);..}...C 111e0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 111f0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 11200 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ 11210 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b OK);...return(CK 11220 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 R_OK);.}..CK_DEF 11230 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 11240 52 56 2c 20 43 5f 47 65 74 53 65 73 73 69 6f 6e RV, C_GetSession 11250 49 6e 66 6f 29 28 43 4b 5f 53 45 53 53 49 4f 4e Info)(CK_SESSION 11260 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 11270 2c 20 43 4b 5f 53 45 53 53 49 4f 4e 5f 49 4e 46 , CK_SESSION_INF 11280 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 7b 0a 09 O_PTR pInfo) {.. 11290 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c int mutex_retval 112a0 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 112b0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 112c0 22 29 3b 0a 0a 09 69 66 20 28 70 49 6e 66 6f 20 ");...if (pInfo 112d0 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 112e0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 112f0 28 22 45 72 72 6f 72 2e 20 70 49 6e 66 6f 20 69 ("Error. pInfo i 11300 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 s NULL.");....re 11310 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 11320 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if 11330 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 11340 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 11350 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 11360 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 11370 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 11380 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 11390 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 113a0 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 ED);..}...if (hS 113b0 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 ession == 0 || h 113c0 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 Session >= (size 113d0 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 113e0 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ns) / sizeof(cac 113f0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 key_sessions[0]) 11400 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE 11410 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 11420 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 r. Session out 11430 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a of range.");.... 11440 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES 11450 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 SION_HANDLE_INVA 11460 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 LID);..}...mutex 11470 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 11480 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b _mutex_lock(cack 11490 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 114a0 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 114b0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 114c0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 114d0 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 ror. Locking fa 114e0 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 114f0 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 11500 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 RROR);..}...if ( 11510 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 !cackey_sessions 11520 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 [hSession].activ 11530 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 e) {...cackey_mu 11540 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 11550 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....C 11560 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 11570 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 11580 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 ion not active." 11590 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 115a0 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 115b0 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 115c0 09 70 49 6e 66 6f 2d 3e 73 6c 6f 74 49 44 20 3d .pInfo->slotID = 115d0 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 115e0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f 74 49 [hSession].slotI 115f0 44 3b 0a 09 70 49 6e 66 6f 2d 3e 73 74 61 74 65 D;..pInfo->state 11600 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f = cackey_sessio 11610 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 74 61 ns[hSession].sta 11620 74 65 3b 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 te;..pInfo->flag 11630 73 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 s = cackey_sessi 11640 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 66 6c ons[hSession].fl 11650 61 67 73 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 44 ags;..pInfo->ulD 11660 65 76 69 63 65 45 72 72 6f 72 20 3d 20 63 61 63 eviceError = cac 11670 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 11680 73 73 69 6f 6e 5d 2e 75 6c 44 65 76 69 63 65 45 ssion].ulDeviceE 11690 72 72 6f 72 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 rror;...mutex_re 116a0 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 116b0 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 116c0 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 116d0 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 116e0 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 116f0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 11700 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 or. Unlocking f 11710 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 ailed.");....ret 11720 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 11730 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 ERROR);..}...CAC 11740 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 11750 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 11760 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b OK (%i)", CKR_OK 11770 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 11780 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e OK);.}..CK_DEFIN 11790 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 117a0 2c 20 43 5f 47 65 74 4f 70 65 72 61 74 69 6f 6e , C_GetOperation 117b0 53 74 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f State)(CK_SESSIO 117c0 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 117d0 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 117e0 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 2c 20 OperationState, 117f0 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 11800 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 4c 65 OperationStateLe 11810 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 n) {..CACKEY_DEB 11820 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 11830 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 11840 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 11850 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 11860 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 11870 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 11880 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 11890 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 118a0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 118b0 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 118c0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 118d0 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 118e0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 118f0 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 11900 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 11910 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 11920 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 11930 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 11940 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 11950 5f 52 56 2c 20 43 5f 53 65 74 4f 70 65 72 61 74 _RV, C_SetOperat 11960 69 6f 6e 53 74 61 74 65 29 28 43 4b 5f 53 45 53 ionState)(CK_SES 11970 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 11980 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 sion, CK_BYTE_PT 11990 52 20 70 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 R pOperationStat 119a0 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 4f 70 e, CK_ULONG ulOp 119b0 65 72 61 74 69 6f 6e 53 74 61 74 65 4c 65 6e 2c erationStateLen, 119c0 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL 119d0 45 20 68 45 6e 63 72 79 70 74 69 6f 6e 4b 65 79 E hEncryptionKey 119e0 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 119f0 4c 45 20 68 41 75 74 68 65 6e 74 69 63 61 74 69 LE hAuthenticati 11a00 6f 6e 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 onKey) {..CACKEY 11a10 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 11a20 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 11a30 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 11a40 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 11a50 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 11a60 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 11a70 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 11a80 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 11a90 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 11aa0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 11ab0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 11ac0 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 11ad0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 11ae0 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 11af0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 11b00 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 11b10 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 11b20 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 11b30 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 11b40 4e 28 43 4b 5f 52 56 2c 20 43 5f 4c 6f 67 69 6e N(CK_RV, C_Login 11b50 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 11b60 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 11b70 5f 55 53 45 52 5f 54 59 50 45 20 75 73 65 72 54 _USER_TYPE userT 11b80 79 70 65 2c 20 43 4b 5f 55 54 46 38 43 48 41 52 ype, CK_UTF8CHAR 11b90 5f 50 54 52 20 70 50 69 6e 2c 20 43 4b 5f 55 4c _PTR pPin, CK_UL 11ba0 4f 4e 47 20 75 6c 50 69 6e 4c 65 6e 29 20 7b 0a ONG ulPinLen) {. 11bb0 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 .int mutex_retva 11bc0 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 l;...CACKEY_DEBU 11bd0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 11be0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 11bf0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 11c00 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 11c10 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 11c20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 11c30 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 11c40 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 11c50 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 11c60 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 ...if (hSession 11c70 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e == 0 || hSession 11c80 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b >= (sizeof(cack 11c90 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 11ca0 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 11cb0 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 sions[0]))) {... 11cc0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 11cd0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 NTF("Error. Ses 11ce0 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 sion out of rang 11cf0 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 11d00 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 11d10 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 11d20 7d 0a 0a 09 69 66 20 28 75 73 65 72 54 79 70 65 }...if (userType 11d30 20 21 3d 20 43 4b 55 5f 55 53 45 52 29 20 7b 0a != CKU_USER) {. 11d40 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11d50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 57 RINTF("Error. W 11d60 65 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 55 e only support U 11d70 53 45 52 20 6d 6f 64 65 2c 20 61 73 6b 65 64 20 SER mode, asked 11d80 66 6f 72 20 25 6c 75 20 6d 6f 64 65 2e 22 2c 20 for %lu mode.", 11d90 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 11da0 75 73 65 72 54 79 70 65 29 0a 0a 09 09 72 65 74 userType)....ret 11db0 75 72 6e 28 43 4b 52 5f 55 53 45 52 5f 54 59 50 urn(CKR_USER_TYP 11dc0 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 11dd0 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 11de0 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 cackey_mutex_loc 11df0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 11e00 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 11e10 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 11e20 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 11e30 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b TF("Error. Lock 11e40 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 11e50 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 11e60 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 11e70 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 ..if (!cackey_se 11e80 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 11e90 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 .active) {...cac 11ea0 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 11eb0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 11ec0 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 11ed0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 11ee0 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 Session not ac 11ef0 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 11f00 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 11f10 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 11f20 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 ;..}...cackey_se 11f30 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 11f40 2e 73 74 61 74 65 20 3d 20 43 4b 53 5f 52 4f 5f .state = CKS_RO_ 11f50 55 53 45 52 5f 46 55 4e 43 54 49 4f 4e 53 3b 0a USER_FUNCTIONS;. 11f60 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 11f70 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e cackey_mutex_un 11f80 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 11f90 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 11fa0 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 11fb0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11fc0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 RINTF("Error. U 11fd0 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e nlocking failed. 11fe0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 11ff0 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 12000 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 12010 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 12020 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 12030 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 )", CKR_OK);...r 12040 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 12050 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 12060 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 4c 6f TION(CK_RV, C_Lo 12070 67 6f 75 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e gout)(CK_SESSION 12080 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 12090 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 ) {..int mutex_r 120a0 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f etval;...CACKEY_ 120b0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 120c0 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 120d0 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 120e0 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 120f0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 12100 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 12110 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 12120 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 12130 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 12140 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 ;..}...if (hSess 12150 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 ion == 0 || hSes 12160 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 sion >= (sizeof( 12170 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 12180 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 12190 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 _sessions[0]))) 121a0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 121b0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 121c0 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 Session out of 121d0 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 range.");......r 121e0 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 121f0 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 12200 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 );..}...mutex_re 12210 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 12220 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 12230 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 12240 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 12250 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 12260 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 12270 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 12280 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 12290 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 122a0 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 R);..}...if (!ca 122b0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 122c0 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 ession].active) 122d0 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 122e0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 122f0 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 12300 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 12310 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 12320 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 12330 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 12340 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 12350 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 NVALID);..}...ca 12360 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 12370 65 73 73 69 6f 6e 5d 2e 73 74 61 74 65 20 3d 20 ession].state = 12380 43 4b 53 5f 52 4f 5f 50 55 42 4c 49 43 5f 53 45 CKS_RO_PUBLIC_SE 12390 53 53 49 4f 4e 3b 0a 0a 09 6d 75 74 65 78 5f 72 SSION;...mutex_r 123a0 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 123b0 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 123c0 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 123d0 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 123e0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 123f0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 12400 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 ror. Unlocking 12410 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 12420 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 12430 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 _ERROR);..}...CA 12440 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 12450 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 12460 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f _OK (%i)", CKR_O 12470 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 K);...return(CKR 12480 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 _OK);.}..CK_DEFI 12490 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 124a0 56 2c 20 43 5f 43 72 65 61 74 65 4f 62 6a 65 63 V, C_CreateObjec 124b0 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 t)(CK_SESSION_HA 124c0 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 124d0 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 K_ATTRIBUTE_PTR 124e0 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c pTemplate, CK_UL 124f0 4f 4e 47 20 75 6c 43 6f 75 6e 74 2c 20 43 4b 5f ONG ulCount, CK_ 12500 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 OBJECT_HANDLE_PT 12510 52 20 70 68 4f 62 6a 65 63 74 29 20 7b 0a 09 43 R phObject) {..C 12520 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 12530 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 12540 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 12550 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 12560 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 12570 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 12580 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 12590 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 125a0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 125b0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 125c0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 125d0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 125e0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 125f0 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 12600 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 12610 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 12620 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 12630 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 12640 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 12650 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 12660 43 6f 70 79 4f 62 6a 65 63 74 29 28 43 4b 5f 53 CopyObject)(CK_S 12670 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 12680 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 ession, CK_OBJEC 12690 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 74 T_HANDLE hObject 126a0 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 , CK_ATTRIBUTE_P 126b0 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b TR pTemplate, CK 126c0 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 2c 20 _ULONG ulCount, 126d0 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 126e0 5f 50 54 52 20 70 68 4e 65 77 4f 62 6a 65 63 74 _PTR phNewObject 126f0 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 12700 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 12710 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 12720 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 12730 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 12740 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 12750 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 12760 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 12770 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 12780 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 12790 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 127a0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 127b0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 127c0 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 127d0 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 127e0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 127f0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 12800 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 12810 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 12820 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 12830 52 56 2c 20 43 5f 44 65 73 74 72 6f 79 4f 62 6a RV, C_DestroyObj 12840 65 63 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f ect)(CK_SESSION_ 12850 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 12860 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL 12870 45 20 68 4f 62 6a 65 63 74 29 20 7b 0a 09 43 41 E hObject) {..CA 12880 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 12890 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 128a0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 128b0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 128c0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 128d0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 128e0 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 128f0 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 12900 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 12910 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 12920 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 12930 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 12940 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 12950 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 12960 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 12970 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 12980 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 12990 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 129a0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 129b0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 CTION(CK_RV, C_G 129c0 65 74 4f 62 6a 65 63 74 53 69 7a 65 29 28 43 4b etObjectSize)(CK 129d0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 129e0 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a hSession, CK_OBJ 129f0 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 ECT_HANDLE hObje 12a00 63 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 ct, CK_ULONG_PTR 12a10 20 70 75 6c 53 69 7a 65 29 20 7b 0a 09 43 41 43 pulSize) {..CAC 12a20 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 12a30 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 12a40 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 12a50 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 12a60 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 12a70 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 12a80 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 12a90 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 12aa0 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 12ab0 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 12ac0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 12ad0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 12ae0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 12af0 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 12b00 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 12b10 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 12b20 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 12b30 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 12b40 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 12b50 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 TION(CK_RV, C_Ge 12b60 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 65 29 tAttributeValue) 12b70 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 12b80 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 12b90 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f OBJECT_HANDLE hO 12ba0 62 6a 65 63 74 2c 20 43 4b 5f 41 54 54 52 49 42 bject, CK_ATTRIB 12bb0 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 UTE_PTR pTemplat 12bc0 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f e, CK_ULONG ulCo 12bd0 75 6e 74 29 20 7b 0a 09 43 4b 5f 41 54 54 52 49 unt) {..CK_ATTRI 12be0 42 55 54 45 20 2a 63 75 72 72 5f 61 74 74 72 3b BUTE *curr_attr; 12bf0 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f ..struct cackey_ 12c00 69 64 65 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 identity *identi 12c10 74 79 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f ty;..unsigned lo 12c20 6e 67 20 69 64 65 6e 74 69 74 79 5f 69 64 78 2c ng identity_idx, 12c30 20 61 74 74 72 5f 69 64 78 2c 20 73 65 73 73 5f attr_idx, sess_ 12c40 61 74 74 72 5f 69 64 78 2c 20 6e 75 6d 5f 69 64 attr_idx, num_id 12c50 73 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 s;..int mutex_re 12c60 74 76 61 6c 3b 0a 09 43 4b 5f 52 56 20 72 65 74 tval;..CK_RV ret 12c70 76 61 6c 20 3d 20 43 4b 52 5f 4f 4b 3b 0a 09 43 val = CKR_OK;..C 12c80 4b 5f 56 4f 49 44 5f 50 54 52 20 70 56 61 6c 75 K_VOID_PTR pValu 12c90 65 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 75 6c 56 e;..CK_ULONG ulV 12ca0 61 6c 75 65 4c 65 6e 3b 0a 0a 09 43 41 43 4b 45 alueLen;...CACKE 12cb0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 12cc0 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 12cd0 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 12ce0 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 12cf0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 12d00 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 12d10 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 12d20 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 12d30 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 12d40 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 D);..}...if (hSe 12d50 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 ssion == 0 || hS 12d60 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f ession >= (sizeo 12d70 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 12d80 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 12d90 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 ey_sessions[0])) 12da0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 12db0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 12dc0 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f . Session out o 12dd0 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 f range.");..... 12de0 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 12df0 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 12e00 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 4f ID);..}...if (hO 12e10 62 6a 65 63 74 20 3d 3d 20 30 29 20 7b 0a 09 09 bject == 0) {... 12e20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 12e30 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4f 62 6a NTF("Error. Obj 12e40 65 63 74 20 68 61 6e 64 6c 65 20 6f 75 74 20 6f ect handle out o 12e50 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 f range.");..... 12e60 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 42 4a 45 .return(CKR_OBJE 12e70 43 54 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 CT_HANDLE_INVALI 12e80 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 6c 43 D);..}...if (ulC 12e90 6f 75 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 09 2f ount == 0) {.../ 12ea0 2a 20 53 68 6f 72 74 20 63 69 72 63 75 69 74 2c * Short circuit, 12eb0 20 69 66 20 7a 65 72 6f 20 6f 62 6a 65 63 74 73 if zero objects 12ec0 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64 20 were specified 12ed0 72 65 74 75 72 6e 20 7a 65 72 6f 20 69 74 65 6d return zero item 12ee0 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 2a 2f s immediately */ 12ef0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 12f00 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 12f10 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 20 28 73 g CKR_OK (%i) (s 12f20 68 6f 72 74 20 63 69 72 63 75 69 74 29 22 2c 20 hort circuit)", 12f30 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 CKR_OK);....retu 12f40 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a rn(CKR_OK);..}.. 12f50 09 69 66 20 28 70 54 65 6d 70 6c 61 74 65 20 3d .if (pTemplate = 12f60 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK 12f70 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 12f80 22 45 72 72 6f 72 2e 20 20 70 54 65 6d 70 6c 61 "Error. pTempla 12f90 74 65 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a te is NULL.");.. 12fa0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG 12fb0 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a UMENTS_BAD);..}. 12fc0 0a 09 69 64 65 6e 74 69 74 79 5f 69 64 78 20 3d ..identity_idx = 12fd0 20 68 4f 62 6a 65 63 74 20 2d 20 31 3b 0a 0a 09 hObject - 1;... 12fe0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 12ff0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b ackey_mutex_lock 13000 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 13010 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 13020 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 13030 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 13040 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 F("Error. Locki 13050 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 13060 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 13070 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 13080 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 .if (!cackey_ses 13090 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 130a0 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b active) {...cack 130b0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 130c0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 130d0 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 130e0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 130f0 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 Session not act 13100 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ive.");......ret 13110 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 13120 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 13130 0a 09 7d 0a 0a 09 6e 75 6d 5f 69 64 73 20 3d 20 ..}...num_ids = 13140 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 13150 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 hSession].identi 13160 74 69 65 73 5f 63 6f 75 6e 74 3b 0a 0a 09 69 66 ties_count;...if 13170 20 28 69 64 65 6e 74 69 74 79 5f 69 64 78 20 3e (identity_idx > 13180 3d 20 6e 75 6d 5f 69 64 73 29 20 7b 0a 09 09 63 = num_ids) {...c 13190 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 131a0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 131b0 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 131c0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 131d0 72 2e 20 20 4f 62 6a 65 63 74 20 68 61 6e 64 6c r. Object handl 131e0 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 20 e out of range. 131f0 20 69 64 65 6e 74 69 74 79 5f 69 64 78 20 3d 20 identity_idx = 13200 25 6c 75 2c 20 6e 75 6d 5f 69 64 73 20 3d 20 25 %lu, num_ids = % 13210 6c 75 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 lu.", (unsigned 13220 6c 6f 6e 67 29 20 69 64 65 6e 74 69 74 79 5f 69 long) identity_i 13230 64 78 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f dx, (unsigned lo 13240 6e 67 29 20 6e 75 6d 5f 69 64 73 29 3b 0a 0a 09 ng) num_ids);... 13250 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 42 4a 45 .return(CKR_OBJE 13260 43 54 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 CT_HANDLE_INVALI 13270 44 29 3b 0a 09 7d 0a 0a 09 69 64 65 6e 74 69 74 D);..}...identit 13280 79 20 3d 20 26 63 61 63 6b 65 79 5f 73 65 73 73 y = &cackey_sess 13290 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 ions[hSession].i 132a0 64 65 6e 74 69 74 69 65 73 5b 69 64 65 6e 74 69 dentities[identi 132b0 74 79 5f 69 64 78 5d 3b 0a 0a 09 66 6f 72 20 28 ty_idx];...for ( 132c0 61 74 74 72 5f 69 64 78 20 3d 20 30 3b 20 61 74 attr_idx = 0; at 132d0 74 72 5f 69 64 78 20 3c 20 75 6c 43 6f 75 6e 74 tr_idx < ulCount 132e0 3b 20 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a ; attr_idx++) {. 132f0 09 09 63 75 72 72 5f 61 74 74 72 20 3d 20 26 70 ..curr_attr = &p 13300 54 65 6d 70 6c 61 74 65 5b 61 74 74 72 5f 69 64 Template[attr_id 13310 78 5d 3b 0a 0a 09 09 70 56 61 6c 75 65 20 3d 20 x];....pValue = 13320 4e 55 4c 4c 3b 0a 09 09 75 6c 56 61 6c 75 65 4c NULL;...ulValueL 13330 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47 29 20 2d en = (CK_LONG) - 13340 31 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 1;....CACKEY_DEB 13350 55 47 5f 50 52 49 4e 54 46 28 22 4c 6f 6f 6b 69 UG_PRINTF("Looki 13360 6e 67 20 66 6f 72 20 61 74 74 72 69 62 75 74 65 ng for attribute 13370 20 30 78 25 30 38 6c 78 20 28 69 64 65 6e 74 69 0x%08lx (identi 13380 74 79 3a 25 6c 75 29 20 2e 2e 2e 22 2c 20 28 75 ty:%lu) ...", (u 13390 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 nsigned long) cu 133a0 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 2c 20 28 rr_attr->type, ( 133b0 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 69 unsigned long) i 133c0 64 65 6e 74 69 74 79 5f 69 64 78 29 3b 0a 0a 09 dentity_idx);... 133d0 09 66 6f 72 20 28 73 65 73 73 5f 61 74 74 72 5f .for (sess_attr_ 133e0 69 64 78 20 3d 20 30 3b 20 73 65 73 73 5f 61 74 idx = 0; sess_at 133f0 74 72 5f 69 64 78 20 3c 20 69 64 65 6e 74 69 74 tr_idx < identit 13400 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5f 63 6f y->attributes_co 13410 75 6e 74 3b 20 73 65 73 73 5f 61 74 74 72 5f 69 unt; sess_attr_i 13420 64 78 2b 2b 29 20 7b 0a 09 09 09 69 66 20 28 69 dx++) {....if (i 13430 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 75 dentity->attribu 13440 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 tes[sess_attr_id 13450 78 5d 2e 74 79 70 65 20 3d 3d 20 63 75 72 72 5f x].type == curr_ 13460 61 74 74 72 2d 3e 74 79 70 65 29 20 7b 0a 09 09 attr->type) {... 13470 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 13480 52 49 4e 54 46 28 22 20 2e 2e 2e 20 66 6f 75 6e RINTF(" ... foun 13490 64 20 69 74 2c 20 70 56 61 6c 75 65 20 3d 20 25 d it, pValue = % 134a0 70 2c 20 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 p, ulValueLen = 134b0 25 6c 75 22 2c 20 69 64 65 6e 74 69 74 79 2d 3e %lu", identity-> 134c0 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f attributes[sess_ 134d0 61 74 74 72 5f 69 64 78 5d 2e 70 56 61 6c 75 65 attr_idx].pValue 134e0 2c 20 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 , identity->attr 134f0 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 ibutes[sess_attr 13500 5f 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e _idx].ulValueLen 13510 29 3b 0a 09 09 09 09 0a 09 09 09 09 70 56 61 6c );..........pVal 13520 75 65 20 3d 20 69 64 65 6e 74 69 74 79 2d 3e 61 ue = identity->a 13530 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 ttributes[sess_a 13540 74 74 72 5f 69 64 78 5d 2e 70 56 61 6c 75 65 3b ttr_idx].pValue; 13550 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 .....ulValueLen 13560 3d 20 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 = identity->attr 13570 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 ibutes[sess_attr 13580 5f 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e _idx].ulValueLen 13590 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 69 66 ;....}...}....if 135a0 20 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 (curr_attr->pVa 135b0 6c 75 65 20 26 26 20 70 56 61 6c 75 65 29 20 7b lue && pValue) { 135c0 0a 09 09 09 69 66 20 28 63 75 72 72 5f 61 74 74 ....if (curr_att 135d0 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 20 3e 3d r->ulValueLen >= 135e0 20 75 6c 56 61 6c 75 65 4c 65 6e 29 20 7b 0a 09 ulValueLen) {.. 135f0 09 09 09 6d 65 6d 63 70 79 28 63 75 72 72 5f 61 ...memcpy(curr_a 13600 74 74 72 2d 3e 70 56 61 6c 75 65 2c 20 70 56 61 ttr->pValue, pVa 13610 6c 75 65 2c 20 75 6c 56 61 6c 75 65 4c 65 6e 29 lue, ulValueLen) 13620 3b 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 ;....} else {... 13630 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 28 ..ulValueLen = ( 13640 43 4b 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 0a 09 09 CK_LONG) -1;.... 13650 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 42 ..retval = CKR_B 13660 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b UFFER_TOO_SMALL; 13670 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 63 75 72 ....}...}....cur 13680 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c r_attr->ulValueL 13690 65 6e 20 3d 20 75 6c 56 61 6c 75 65 4c 65 6e 3b en = ulValueLen; 136a0 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 136b0 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 136c0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 136d0 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 136e0 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 136f0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 13700 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 13710 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 . Unlocking fai 13720 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 13730 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 13740 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 72 ROR);..}...if (r 13750 65 74 76 61 6c 20 3d 3d 20 43 4b 52 5f 41 54 54 etval == CKR_ATT 13760 52 49 42 55 54 45 5f 54 59 50 45 5f 49 4e 56 41 RIBUTE_TYPE_INVA 13770 4c 49 44 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f LID) {...CACKEY_ 13780 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 13790 74 75 72 6e 69 6e 67 20 43 4b 52 5f 41 54 54 52 turning CKR_ATTR 137a0 49 42 55 54 45 5f 54 59 50 45 5f 49 4e 56 41 4c IBUTE_TYPE_INVAL 137b0 49 44 20 28 25 69 29 22 2c 20 28 69 6e 74 29 20 ID (%i)", (int) 137c0 72 65 74 76 61 6c 29 3b 0a 09 7d 20 65 6c 73 65 retval);..} else 137d0 20 69 66 20 28 72 65 74 76 61 6c 20 3d 3d 20 43 if (retval == C 137e0 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d KR_BUFFER_TOO_SM 137f0 41 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ALL) {...CACKEY_ 13800 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 13810 74 75 72 6e 69 6e 67 20 43 4b 52 5f 42 55 46 46 turning CKR_BUFF 13820 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 20 28 25 69 ER_TOO_SMALL (%i 13830 29 22 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c )", (int) retval 13840 29 3b 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 72 );..} else if (r 13850 65 74 76 61 6c 20 3d 3d 20 43 4b 52 5f 4f 4b 29 etval == CKR_OK) 13860 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 13870 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 13880 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 13890 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c 29 3b , (int) retval); 138a0 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 43 41 43 ..} else {...CAC 138b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 138c0 28 22 52 65 74 75 72 6e 69 6e 67 20 25 69 22 2c ("Returning %i", 138d0 20 28 69 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a (int) retval);. 138e0 09 7d 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 .}...return(retv 138f0 61 6c 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e al);.}..CK_DEFIN 13900 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 13910 2c 20 43 5f 53 65 74 41 74 74 72 69 62 75 74 65 , C_SetAttribute 13920 56 61 6c 75 65 29 28 43 4b 5f 53 45 53 53 49 4f Value)(CK_SESSIO 13930 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 13940 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e n, CK_OBJECT_HAN 13950 44 4c 45 20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f DLE hObject, CK_ 13960 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 54 ATTRIBUTE_PTR pT 13970 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e emplate, CK_ULON 13980 47 20 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 43 41 G ulCount) {..CA 13990 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 139a0 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 139b0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 139c0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 139d0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 139e0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 139f0 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 13a00 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 13a10 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 13a20 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 13a30 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 13a40 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 13a50 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 13a60 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 13a70 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 13a80 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 13a90 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 13aa0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 13ab0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 13ac0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 46 CTION(CK_RV, C_F 13ad0 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 29 28 indObjectsInit)( 13ae0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 13af0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 41 E hSession, CK_A 13b00 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 54 65 TTRIBUTE_PTR pTe 13b10 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 mplate, CK_ULONG 13b20 20 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 69 6e 74 ulCount) {..int 13b30 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a mutex_retval;.. 13b40 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 13b50 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 13b60 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 13b70 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 13b80 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 13b90 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 13ba0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 13bb0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 13bc0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 13bd0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 IALIZED);..}...i 13be0 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 f (hSession == 0 13bf0 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 || hSession >= 13c00 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 (sizeof(cackey_s 13c10 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f essions) / sizeo 13c20 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 13c30 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b s[0]))) {...CACK 13c40 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 13c50 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 13c60 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 out of range.") 13c70 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 13c80 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 13c90 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 13ca0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 13cb0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b ackey_mutex_lock 13cc0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 13cd0 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 13ce0 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 13cf0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 13d00 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 F("Error. Locki 13d10 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 13d20 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 13d30 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 13d40 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 .if (!cackey_ses 13d50 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 13d60 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b active) {...cack 13d70 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 13d80 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 13d90 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 13da0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 13db0 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 Session not act 13dc0 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ive.");......ret 13dd0 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 13de0 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 13df0 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 ..}...if (cackey 13e00 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 13e10 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 74 69 76 on].search_activ 13e20 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 e) {...cackey_mu 13e30 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 13e40 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....C 13e50 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 13e60 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 61 72 TF("Error. Sear 13e70 63 68 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 ch already activ 13e80 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 13e90 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f n(CKR_OPERATION_ 13ea0 41 43 54 49 56 45 29 3b 0a 09 7d 0a 0a 09 69 66 ACTIVE);..}...if 13eb0 20 28 70 54 65 6d 70 6c 61 74 65 20 21 3d 20 4e (pTemplate != N 13ec0 55 4c 4c 29 20 7b 0a 09 09 69 66 20 28 75 6c 43 ULL) {...if (ulC 13ed0 6f 75 6e 74 20 21 3d 20 30 29 20 7b 0a 09 09 09 ount != 0) {.... 13ee0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 13ef0 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 hSession].search 13f00 5f 71 75 65 72 79 5f 63 6f 75 6e 74 20 3d 20 75 _query_count = u 13f10 6c 43 6f 75 6e 74 3b 0a 09 09 09 63 61 63 6b 65 lCount;....cacke 13f20 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 13f30 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 ion].search_quer 13f40 79 20 3d 20 6d 61 6c 6c 6f 63 28 75 6c 43 6f 75 y = malloc(ulCou 13f50 6e 74 20 2a 20 73 69 7a 65 6f 66 28 2a 70 54 65 nt * sizeof(*pTe 13f60 6d 70 6c 61 74 65 29 29 3b 0a 0a 09 09 09 6d 65 mplate));.....me 13f70 6d 63 70 79 28 63 61 63 6b 65 79 5f 73 65 73 73 mcpy(cackey_sess 13f80 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 13f90 65 61 72 63 68 5f 71 75 65 72 79 2c 20 70 54 65 earch_query, pTe 13fa0 6d 70 6c 61 74 65 2c 20 75 6c 43 6f 75 6e 74 20 mplate, ulCount 13fb0 2a 20 73 69 7a 65 6f 66 28 2a 70 54 65 6d 70 6c * sizeof(*pTempl 13fc0 61 74 65 29 29 3b 0a 09 09 7d 20 65 6c 73 65 20 ate));...} else 13fd0 7b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 {....cackey_sess 13fe0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 13ff0 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e earch_query_coun 14000 74 20 3d 20 30 3b 0a 09 09 09 63 61 63 6b 65 79 t = 0;....cackey 14010 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 14020 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 on].search_query 14030 20 3d 20 4e 55 4c 4c 3b 0a 09 09 7d 0a 09 7d 20 = NULL;...}..} 14040 65 6c 73 65 20 7b 0a 09 09 69 66 20 28 75 6c 43 else {...if (ulC 14050 6f 75 6e 74 20 21 3d 20 30 29 20 7b 0a 09 09 09 ount != 0) {.... 14060 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 14070 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 14080 63 6b 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f ck);.....CACKEY_ 14090 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 140a0 72 6f 72 2e 20 20 53 65 61 72 63 68 20 71 75 65 ror. Search que 140b0 72 79 20 73 70 65 63 69 66 69 65 64 20 61 73 20 ry specified as 140c0 4e 55 4c 4c 2c 20 62 75 74 20 6e 75 6d 62 65 72 NULL, but number 140d0 20 6f 66 20 71 75 65 72 79 20 74 65 72 6d 73 20 of query terms 140e0 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 61 73 not specified as 140f0 20 30 2e 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 0.");.....retur 14100 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f n(CKR_ARGUMENTS_ 14110 42 41 44 29 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 BAD);...}....cac 14120 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 14130 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 ssion].search_qu 14140 65 72 79 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 ery_count = 0;.. 14150 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 14160 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 14170 68 5f 71 75 65 72 79 20 3d 20 4e 55 4c 4c 3b 0a h_query = NULL;. 14180 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 .}...cackey_sess 14190 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 141a0 65 61 72 63 68 5f 61 63 74 69 76 65 20 3d 20 31 earch_active = 1 141b0 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ;..cackey_sessio 141c0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 ns[hSession].sea 141d0 72 63 68 5f 63 75 72 72 5f 69 64 20 3d 20 30 3b rch_curr_id = 0; 141e0 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 141f0 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 = cackey_mutex_u 14200 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 14210 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 14220 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 14230 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 14240 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 14250 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Unlocking failed 14260 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 14270 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 14280 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 14290 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 142a0 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 urning CKR_OK (% 142b0 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 i)", CKR_OK);... 142c0 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a return(CKR_OK);. 142d0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 142e0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 46 CTION(CK_RV, C_F 142f0 69 6e 64 4f 62 6a 65 63 74 73 29 28 43 4b 5f 53 indObjects)(CK_S 14300 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 14310 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 ession, CK_OBJEC 14320 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4f T_HANDLE_PTR phO 14330 62 6a 65 63 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 bject, CK_ULONG 14340 75 6c 4d 61 78 4f 62 6a 65 63 74 43 6f 75 6e 74 ulMaxObjectCount 14350 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 , CK_ULONG_PTR p 14360 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 29 20 7b ulObjectCount) { 14370 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f ..struct cackey_ 14380 69 64 65 6e 74 69 74 79 20 2a 63 75 72 72 5f 69 identity *curr_i 14390 64 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 d;..CK_ATTRIBUTE 143a0 20 2a 63 75 72 72 5f 61 74 74 72 3b 0a 09 43 4b *curr_attr;..CK 143b0 5f 55 4c 4f 4e 47 20 63 75 72 72 5f 69 64 5f 69 _ULONG curr_id_i 143c0 64 78 2c 20 63 75 72 72 5f 6f 75 74 5f 69 64 5f dx, curr_out_id_ 143d0 69 64 78 2c 20 63 75 72 72 5f 61 74 74 72 5f 69 idx, curr_attr_i 143e0 64 78 2c 20 73 65 73 73 5f 61 74 74 72 5f 69 64 dx, sess_attr_id 143f0 78 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 6d 61 74 x;..CK_ULONG mat 14400 63 68 65 64 5f 63 6f 75 6e 74 2c 20 70 72 65 76 ched_count, prev 14410 5f 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 3b 0a _matched_count;. 14420 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 .int mutex_retva 14430 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 l;...CACKEY_DEBU 14440 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 14450 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 14460 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 14470 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 14480 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 14490 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 144a0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 144b0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 144c0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 144d0 0a 0a 09 69 66 20 28 70 75 6c 4f 62 6a 65 63 74 ...if (pulObject 144e0 43 6f 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b Count == NULL) { 144f0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 14500 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 14510 70 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 69 pulObjectCount i 14520 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 s NULL.");....re 14530 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 14540 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if 14550 20 28 70 68 4f 62 6a 65 63 74 20 3d 3d 20 4e 55 (phObject == NU 14560 4c 4c 20 26 26 20 75 6c 4d 61 78 4f 62 6a 65 63 LL && ulMaxObjec 14570 74 43 6f 75 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 tCount == 0) {.. 14580 09 2f 2a 20 53 68 6f 72 74 20 63 69 72 63 75 69 ./* Short circui 14590 74 2c 20 69 66 20 7a 65 72 6f 20 6f 62 6a 65 63 t, if zero objec 145a0 74 73 20 77 65 72 65 20 73 70 65 63 69 66 69 65 ts were specifie 145b0 64 20 72 65 74 75 72 6e 20 7a 65 72 6f 20 69 74 d return zero it 145c0 65 6d 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 ems immediately 145d0 2a 2f 0a 09 09 2a 70 75 6c 4f 62 6a 65 63 74 43 */...*pulObjectC 145e0 6f 75 6e 74 20 3d 20 30 3b 0a 0a 09 09 43 41 43 ount = 0;....CAC 145f0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 14600 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 14610 4f 4b 20 28 25 69 29 20 28 73 68 6f 72 74 20 63 OK (%i) (short c 14620 69 72 63 75 69 74 29 22 2c 20 43 4b 52 5f 4f 4b ircuit)", CKR_OK 14630 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 14640 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 _OK);..}...if (p 14650 68 4f 62 6a 65 63 74 20 3d 3d 20 4e 55 4c 4c 29 hObject == NULL) 14660 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 14670 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 14680 20 20 70 68 4f 62 6a 65 63 74 20 69 73 20 4e 55 phObject is NU 14690 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 146a0 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 146b0 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 6c AD);..}...if (ul 146c0 4d 61 78 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d MaxObjectCount = 146d0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 146e0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 146f0 72 6f 72 2e 20 20 4d 61 78 69 6d 75 6d 20 6e 75 ror. Maximum nu 14700 6d 62 65 72 20 6f 66 20 6f 62 6a 65 63 74 73 20 mber of objects 14710 73 70 65 63 69 66 69 65 64 20 61 73 20 7a 65 72 specified as zer 14720 6f 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 o.");....return( 14730 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA 14740 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 D);..}...if (hSe 14750 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 ssion == 0 || hS 14760 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f ession >= (sizeo 14770 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 14780 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 14790 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 ey_sessions[0])) 147a0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 147b0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 147c0 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f . Session out o 147d0 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 f range.");..... 147e0 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 147f0 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 14800 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f ID);..}...mutex_ 14810 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 14820 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 mutex_lock(cacke 14830 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 14840 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 14850 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 14860 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 14870 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 or. Locking fai 14880 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 14890 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 148a0 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 ROR);..}...if (! 148b0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 148c0 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 hSession].active 148d0 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 148e0 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 148f0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 14900 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 14910 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 14920 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 on not active.") 14930 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 14940 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 14950 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 14960 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 if (!cackey_sess 14970 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 14980 65 61 72 63 68 5f 61 63 74 69 76 65 29 20 7b 0a earch_active) {. 14990 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 149a0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 149b0 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 lock);....CACKEY 149c0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 149d0 72 72 6f 72 2e 20 20 53 65 61 72 63 68 20 6e 6f rror. Search no 149e0 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a t active.");.... 149f0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 ..return(CKR_OPE 14a00 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 RATION_NOT_INITI 14a10 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 63 75 ALIZED);..}...cu 14a20 72 72 5f 69 64 5f 69 64 78 20 3d 20 30 3b 0a 09 rr_id_idx = 0;.. 14a30 63 75 72 72 5f 6f 75 74 5f 69 64 5f 69 64 78 20 curr_out_id_idx 14a40 3d 20 30 3b 0a 09 66 6f 72 20 28 63 75 72 72 5f = 0;..for (curr_ 14a50 69 64 5f 69 64 78 20 3d 20 63 61 63 6b 65 79 5f id_idx = cackey_ 14a60 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 14a70 6e 5d 2e 73 65 61 72 63 68 5f 63 75 72 72 5f 69 n].search_curr_i 14a80 64 3b 20 63 75 72 72 5f 69 64 5f 69 64 78 20 3c d; curr_id_idx < 14a90 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 14aa0 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 [hSession].ident 14ab0 69 74 69 65 73 5f 63 6f 75 6e 74 20 26 26 20 75 ities_count && u 14ac0 6c 4d 61 78 4f 62 6a 65 63 74 43 6f 75 6e 74 3b lMaxObjectCount; 14ad0 20 63 75 72 72 5f 69 64 5f 69 64 78 2b 2b 29 20 curr_id_idx++) 14ae0 7b 0a 09 09 63 75 72 72 5f 69 64 20 3d 20 26 63 {...curr_id = &c 14af0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 14b00 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 Session].identit 14b10 69 65 73 5b 63 75 72 72 5f 69 64 5f 69 64 78 5d ies[curr_id_idx] 14b20 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 14b30 47 5f 50 52 49 4e 54 46 28 22 50 72 6f 63 65 73 G_PRINTF("Proces 14b40 73 69 6e 67 20 69 64 65 6e 74 69 74 79 3a 25 6c sing identity:%l 14b50 75 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f u", (unsigned lo 14b60 6e 67 29 20 63 75 72 72 5f 69 64 5f 69 64 78 29 ng) curr_id_idx) 14b70 3b 0a 0a 09 09 6d 61 74 63 68 65 64 5f 63 6f 75 ;....matched_cou 14b80 6e 74 20 3d 20 30 3b 0a 0a 09 09 66 6f 72 20 28 nt = 0;....for ( 14b90 63 75 72 72 5f 61 74 74 72 5f 69 64 78 20 3d 20 curr_attr_idx = 14ba0 30 3b 20 63 75 72 72 5f 61 74 74 72 5f 69 64 78 0; curr_attr_idx 14bb0 20 3c 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f < cackey_sessio 14bc0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 ns[hSession].sea 14bd0 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 3b rch_query_count; 14be0 20 63 75 72 72 5f 61 74 74 72 5f 69 64 78 2b 2b curr_attr_idx++ 14bf0 29 20 7b 0a 09 09 09 70 72 65 76 5f 6d 61 74 63 ) {....prev_matc 14c00 68 65 64 5f 63 6f 75 6e 74 20 3d 20 6d 61 74 63 hed_count = matc 14c10 68 65 64 5f 63 6f 75 6e 74 3b 0a 0a 09 09 09 63 hed_count;.....c 14c20 75 72 72 5f 61 74 74 72 20 3d 20 26 63 61 63 6b urr_attr = &cack 14c30 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 14c40 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 sion].search_que 14c50 72 79 5b 63 75 72 72 5f 61 74 74 72 5f 69 64 78 ry[curr_attr_idx 14c60 5d 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ];.....CACKEY_DE 14c70 42 55 47 5f 50 52 49 4e 54 46 28 22 20 20 43 68 BUG_PRINTF(" Ch 14c80 65 63 6b 69 6e 67 20 66 6f 72 20 61 74 74 72 69 ecking for attri 14c90 62 75 74 65 20 30 78 25 30 38 6c 78 20 69 6e 20 bute 0x%08lx in 14ca0 69 64 65 6e 74 69 74 79 3a 25 69 2e 2e 2e 22 2c identity:%i...", 14cb0 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 14cc0 20 63 75 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 curr_attr->type 14cd0 2c 20 28 69 6e 74 29 20 63 75 72 72 5f 69 64 5f , (int) curr_id_ 14ce0 69 64 78 29 3b 0a 09 09 09 43 41 43 4b 45 59 5f idx);....CACKEY_ 14cf0 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 DEBUG_PRINTBUF(" 14d00 20 20 20 20 56 61 6c 75 65 20 6c 6f 6f 6b 69 6e Value lookin 14d10 67 20 66 6f 72 3a 22 2c 20 63 75 72 72 5f 61 74 g for:", curr_at 14d20 74 72 2d 3e 70 56 61 6c 75 65 2c 20 63 75 72 72 tr->pValue, curr 14d30 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 _attr->ulValueLe 14d40 6e 29 3b 0a 0a 09 09 09 66 6f 72 20 28 73 65 73 n);.....for (ses 14d50 73 5f 61 74 74 72 5f 69 64 78 20 3d 20 30 3b 20 s_attr_idx = 0; 14d60 73 65 73 73 5f 61 74 74 72 5f 69 64 78 20 3c 20 sess_attr_idx < 14d70 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 curr_id->attribu 14d80 74 65 73 5f 63 6f 75 6e 74 3b 20 73 65 73 73 5f tes_count; sess_ 14d90 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 attr_idx++) {... 14da0 09 09 69 66 20 28 63 75 72 72 5f 69 64 2d 3e 61 ..if (curr_id->a 14db0 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 ttributes[sess_a 14dc0 74 74 72 5f 69 64 78 5d 2e 74 79 70 65 20 3d 3d ttr_idx].type == 14dd0 20 63 75 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 curr_attr->type 14de0 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f ) {......CACKEY_ 14df0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 20 DEBUG_PRINTF(" 14e00 20 20 2e 2e 2e 20 66 6f 75 6e 64 20 6d 61 74 63 ... found matc 14e10 68 69 6e 67 20 74 79 70 65 20 2e 2e 2e 22 29 3b hing type ..."); 14e20 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 14e30 55 47 5f 50 52 49 4e 54 42 55 46 28 22 20 20 20 UG_PRINTBUF(" 14e40 20 2e 2e 2e 20 6f 75 72 20 76 61 6c 75 65 3a 22 ... our value:" 14e50 2c 20 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 69 , curr_id->attri 14e60 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f butes[sess_attr_ 14e70 69 64 78 5d 2e 70 56 61 6c 75 65 2c 20 63 75 72 idx].pValue, cur 14e80 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 74 65 73 r_id->attributes 14e90 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e [sess_attr_idx]. 14ea0 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 ulValueLen);.... 14eb0 09 09 09 69 66 20 28 63 75 72 72 5f 61 74 74 72 ...if (curr_attr 14ec0 2d 3e 70 56 61 6c 75 65 20 3d 3d 20 4e 55 4c 4c ->pValue == NULL 14ed0 29 20 7b 0a 09 09 09 09 09 09 43 41 43 4b 45 59 ) {.......CACKEY 14ee0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 14ef0 20 20 20 20 20 20 2e 2e 2e 20 66 6f 75 6e 64 20 ... found 14f00 77 69 6c 64 63 61 72 64 20 6d 61 74 63 68 22 29 wildcard match") 14f10 3b 0a 0a 09 09 09 09 09 09 6d 61 74 63 68 65 64 ;........matched 14f20 5f 63 6f 75 6e 74 2b 2b 3b 0a 0a 09 09 09 09 09 _count++;....... 14f30 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a .break;......}.. 14f40 20 09 09 09 09 09 69 66 20 28 63 75 72 72 5f 61 .....if (curr_a 14f50 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 20 ttr->ulValueLen 14f60 3d 3d 20 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 == curr_id->attr 14f70 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 ibutes[sess_attr 14f80 5f 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e _idx].ulValueLen 14f90 20 26 26 20 6d 65 6d 63 6d 70 28 63 75 72 72 5f && memcmp(curr_ 14fa0 61 74 74 72 2d 3e 70 56 61 6c 75 65 2c 20 63 75 attr->pValue, cu 14fb0 72 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 74 65 rr_id->attribute 14fc0 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d s[sess_attr_idx] 14fd0 2e 70 56 61 6c 75 65 2c 20 63 75 72 72 5f 69 64 .pValue, curr_id 14fe0 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 ->attributes[ses 14ff0 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c 56 61 s_attr_idx].ulVa 15000 6c 75 65 4c 65 6e 29 20 3d 3d 20 30 29 20 7b 0a lueLen) == 0) {. 15010 09 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 15020 55 47 5f 50 52 49 4e 54 46 28 22 20 20 20 20 20 UG_PRINTF(" 15030 20 20 2e 2e 2e 20 66 6f 75 6e 64 20 65 78 61 63 ... found exac 15040 74 20 6d 61 74 63 68 22 29 3b 0a 0a 09 09 09 09 t match");...... 15050 09 09 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 2b ..matched_count+ 15060 2b 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b +;........break; 15070 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 ......}.....}... 15080 09 7d 0a 0a 09 09 09 2f 2a 20 49 66 20 74 68 65 .}...../* If the 15090 20 61 74 74 72 69 62 75 74 65 20 63 6f 75 6c 64 attribute could 150a0 20 6e 6f 74 20 62 65 20 6d 61 74 63 68 65 64 2c not be matched, 150b0 20 64 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 6d do not try to m 150c0 61 74 63 68 20 61 64 64 69 74 69 6f 6e 61 6c 20 atch additional 150d0 61 74 74 72 69 62 75 74 65 73 20 2a 2f 0a 09 09 attributes */... 150e0 09 69 66 20 28 70 72 65 76 5f 6d 61 74 63 68 65 .if (prev_matche 150f0 64 5f 63 6f 75 6e 74 20 3d 3d 20 6d 61 74 63 68 d_count == match 15100 65 64 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09 09 ed_count) {..... 15110 62 72 65 61 6b 3b 0a 09 09 09 7d 0a 09 09 7d 0a break;....}...}. 15120 0a 09 09 69 66 20 28 6d 61 74 63 68 65 64 5f 63 ...if (matched_c 15130 6f 75 6e 74 20 3d 3d 20 63 61 63 6b 65 79 5f 73 ount == cackey_s 15140 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 15150 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63 ].search_query_c 15160 6f 75 6e 74 29 20 7b 0a 09 09 09 43 41 43 4b 45 ount) {....CACKE 15170 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15180 20 20 2e 2e 2e 20 41 6c 6c 20 25 69 20 61 74 74 ... All %i att 15190 72 69 62 75 74 65 73 20 63 68 65 63 6b 65 64 20 ributes checked 151a0 66 6f 72 20 66 6f 75 6e 64 2c 20 61 64 64 69 6e for found, addin 151b0 67 20 69 64 65 6e 74 69 74 79 3a 25 69 20 74 6f g identity:%i to 151c0 20 72 65 74 75 72 6e 65 64 20 6c 69 73 74 22 2c returned list", 151d0 20 28 69 6e 74 29 20 63 61 63 6b 65 79 5f 73 65 (int) cackey_se 151e0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 151f0 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f .search_query_co 15200 75 6e 74 2c 20 28 69 6e 74 29 20 63 75 72 72 5f unt, (int) curr_ 15210 69 64 5f 69 64 78 29 3b 0a 0a 09 09 09 70 68 4f id_idx);.....phO 15220 62 6a 65 63 74 5b 63 75 72 72 5f 6f 75 74 5f 69 bject[curr_out_i 15230 64 5f 69 64 78 5d 20 3d 20 63 75 72 72 5f 69 64 d_idx] = curr_id 15240 5f 69 64 78 20 2b 20 31 3b 0a 0a 09 09 09 75 6c _idx + 1;.....ul 15250 4d 61 78 4f 62 6a 65 63 74 43 6f 75 6e 74 2d 2d MaxObjectCount-- 15260 3b 0a 0a 09 09 09 63 75 72 72 5f 6f 75 74 5f 69 ;.....curr_out_i 15270 64 5f 69 64 78 2b 2b 3b 0a 09 09 7d 20 65 6c 73 d_idx++;...} els 15280 65 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 e {....CACKEY_DE 15290 42 55 47 5f 50 52 49 4e 54 46 28 22 20 20 2e 2e BUG_PRINTF(" .. 152a0 2e 20 4e 6f 74 20 61 6c 6c 20 25 69 20 28 6f 6e . Not all %i (on 152b0 6c 79 20 66 6f 75 6e 64 20 25 69 29 20 61 74 74 ly found %i) att 152c0 72 69 62 75 74 65 73 20 63 68 65 63 6b 65 64 20 ributes checked 152d0 66 6f 72 20 66 6f 75 6e 64 2c 20 6e 6f 74 20 61 for found, not a 152e0 64 64 69 6e 67 20 69 64 65 6e 74 69 74 79 3a 25 dding identity:% 152f0 69 22 2c 20 28 69 6e 74 29 20 63 61 63 6b 65 79 i", (int) cackey 15300 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 15310 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 on].search_query 15320 5f 63 6f 75 6e 74 2c 20 28 69 6e 74 29 20 6d 61 _count, (int) ma 15330 74 63 68 65 64 5f 63 6f 75 6e 74 2c 20 28 69 6e tched_count, (in 15340 74 29 20 63 75 72 72 5f 69 64 5f 69 64 78 29 3b t) curr_id_idx); 15350 0a 09 09 7d 0a 09 7d 0a 09 63 61 63 6b 65 79 5f ...}..}..cackey_ 15360 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 15370 6e 5d 2e 73 65 61 72 63 68 5f 63 75 72 72 5f 69 n].search_curr_i 15380 64 20 3d 20 63 75 72 72 5f 69 64 5f 69 64 78 3b d = curr_id_idx; 15390 0a 09 2a 70 75 6c 4f 62 6a 65 63 74 43 6f 75 6e ..*pulObjectCoun 153a0 74 20 3d 20 63 75 72 72 5f 6f 75 74 5f 69 64 5f t = curr_out_id_ 153b0 69 64 78 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 idx;...mutex_ret 153c0 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 153d0 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 153e0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 153f0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 15400 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 15410 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 15420 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 15430 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 15440 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 15450 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b RROR);..}...CACK 15460 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 15470 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 15480 4b 20 28 25 69 29 2c 20 6e 75 6d 20 6f 62 6a 65 K (%i), num obje 15490 63 74 73 20 3d 20 25 6c 75 22 2c 20 43 4b 52 5f cts = %lu", CKR_ 154a0 4f 4b 2c 20 2a 70 75 6c 4f 62 6a 65 63 74 43 6f OK, *pulObjectCo 154b0 75 6e 74 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 unt);...return(C 154c0 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 KR_OK);.}..CK_DE 154d0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 154e0 5f 52 56 2c 20 43 5f 46 69 6e 64 4f 62 6a 65 63 _RV, C_FindObjec 154f0 74 73 46 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 tsFinal)(CK_SESS 15500 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 15510 69 6f 6e 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 ion) {..int mute 15520 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b x_retval;...CACK 15530 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 15540 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 15550 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 15560 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 15570 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15580 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 15590 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 155a0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 155b0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 155c0 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 ED);..}...if (hS 155d0 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 ession == 0 || h 155e0 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 Session >= (size 155f0 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 15600 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ns) / sizeof(cac 15610 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 key_sessions[0]) 15620 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE 15630 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 15640 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 r. Session out 15650 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a of range.");.... 15660 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES 15670 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 SION_HANDLE_INVA 15680 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 LID);..}...mutex 15690 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 156a0 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b _mutex_lock(cack 156b0 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 156c0 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 156d0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 156e0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 156f0 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 ror. Locking fa 15700 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 15710 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 15720 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 RROR);..}...if ( 15730 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 !cackey_sessions 15740 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 [hSession].activ 15750 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 e) {...cackey_mu 15760 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 15770 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....C 15780 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 15790 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 157a0 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 ion not active." 157b0 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 157c0 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 157d0 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 157e0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 .if (!cackey_ses 157f0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 15800 73 65 61 72 63 68 5f 61 63 74 69 76 65 29 20 7b search_active) { 15810 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 15820 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 15830 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 15840 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15850 45 72 72 6f 72 2e 20 20 53 65 61 72 63 68 20 6e Error. Search n 15860 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 ot active.");... 15870 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 ...return(CKR_OP 15880 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 ERATION_NOT_INIT 15890 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 63 IALIZED);..}...c 158a0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 158b0 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 158c0 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 69 66 20 active = 0;..if 158d0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 158e0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 158f0 68 5f 71 75 65 72 79 29 20 7b 0a 09 09 66 72 65 h_query) {...fre 15900 65 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e e(cackey_session 15910 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 s[hSession].sear 15920 63 68 5f 71 75 65 72 79 29 3b 0a 09 7d 0a 0a 09 ch_query);..}... 15930 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 15940 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 15950 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 15960 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 15970 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 15980 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 15990 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c NTF("Error. Unl 159a0 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 159b0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 159c0 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 159d0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 159e0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 159f0 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 15a00 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret 15a10 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}.. 15a20 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 15a30 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 45 6e 63 72 ON(CK_RV, C_Encr 15a40 79 70 74 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 yptInit)(CK_SESS 15a50 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 15a60 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 ion, CK_MECHANIS 15a70 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d M_PTR pMechanism 15a80 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 15a90 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b LE hKey) {..CACK 15aa0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 15ab0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 15ac0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 15ad0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 15ae0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15af0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 15b00 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 15b10 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 15b20 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 15b30 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 15b40 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 15b50 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 15b60 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 15b70 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 15b80 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 15b90 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 15ba0 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 15bb0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 15bc0 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 15bd0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 45 6e 63 ION(CK_RV, C_Enc 15be0 72 79 70 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e rypt)(CK_SESSION 15bf0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 15c00 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 , CK_BYTE_PTR pD 15c10 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c ata, CK_ULONG ul 15c20 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 DataLen, CK_BYTE 15c30 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 64 44 _PTR pEncryptedD 15c40 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 ata, CK_ULONG_PT 15c50 52 20 70 75 6c 45 6e 63 72 79 70 74 65 64 44 61 R pulEncryptedDa 15c60 74 61 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 taLen) {..CACKEY 15c70 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 15c80 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 15c90 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 15ca0 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 15cb0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 15cc0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 15cd0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 15ce0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 15cf0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 15d00 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 15d10 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 15d20 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 15d30 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 15d40 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 15d50 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 15d60 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 15d70 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 15d80 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 15d90 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 15da0 4e 28 43 4b 5f 52 56 2c 20 43 5f 45 6e 63 72 79 N(CK_RV, C_Encry 15db0 70 74 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 ptUpdate)(CK_SES 15dc0 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 15dd0 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 sion, CK_BYTE_PT 15de0 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e R pPart, CK_ULON 15df0 47 20 75 6c 50 61 72 74 4c 65 6e 2c 20 43 4b 5f G ulPartLen, CK_ 15e00 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 BYTE_PTR pEncryp 15e10 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e tedPart, CK_ULON 15e20 47 5f 50 54 52 20 70 75 6c 45 6e 63 72 79 70 74 G_PTR pulEncrypt 15e30 65 64 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 edPartLen) {..CA 15e40 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 15e50 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 15e60 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 15e70 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 15e80 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 15e90 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 15ea0 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 15eb0 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 15ec0 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 15ed0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 15ee0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 15ef0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 15f00 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 15f10 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 15f20 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 15f30 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 15f40 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 15f50 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 15f60 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 15f70 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 45 CTION(CK_RV, C_E 15f80 6e 63 72 79 70 74 46 69 6e 61 6c 29 28 43 4b 5f ncryptFinal)(CK_ 15f90 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 15fa0 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 15fb0 5f 50 54 52 20 70 4c 61 73 74 45 6e 63 72 79 70 _PTR pLastEncryp 15fc0 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e tedPart, CK_ULON 15fd0 47 5f 50 54 52 20 70 75 6c 4c 61 73 74 45 6e 63 G_PTR pulLastEnc 15fe0 72 79 70 74 65 64 50 61 72 74 4c 65 6e 29 20 7b ryptedPartLen) { 15ff0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 16000 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 16010 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 16020 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 16030 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 16040 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 16050 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 16060 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 16070 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 16080 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 16090 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 160a0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 160b0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 160c0 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 160d0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 160e0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 160f0 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 16100 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 16110 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 16120 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 16130 20 43 5f 44 65 63 72 79 70 74 49 6e 69 74 29 28 C_DecryptInit)( 16140 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 16150 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d E hSession, CK_M 16160 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 ECHANISM_PTR pMe 16170 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 chanism, CK_OBJE 16180 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 CT_HANDLE hKey) 16190 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 {..int mutex_ret 161a0 76 61 6c 3b 0a 0a 09 68 4b 65 79 2d 2d 3b 0a 0a val;...hKey--;.. 161b0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 161c0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 161d0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 161e0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 161f0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 16200 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 16210 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 16220 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 16230 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 16240 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 IALIZED);..}...i 16250 66 20 28 70 4d 65 63 68 61 6e 69 73 6d 20 3d 3d f (pMechanism == 16260 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 NULL) {...CACKE 16270 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 16280 45 72 72 6f 72 2e 20 70 4d 65 63 68 61 6e 69 73 Error. pMechanis 16290 6d 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 m is NULL.");... 162a0 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 162b0 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 162c0 09 69 66 20 28 70 4d 65 63 68 61 6e 69 73 6d 2d .if (pMechanism- 162d0 3e 6d 65 63 68 61 6e 69 73 6d 20 21 3d 20 43 4b >mechanism != CK 162e0 4d 5f 52 53 41 5f 50 4b 43 53 29 20 7b 0a 09 09 M_RSA_PKCS) {... 162f0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 16300 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 4d 65 63 NTF("Error. pMec 16310 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 hanism->mechanis 16320 6d 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 m not specified 16330 61 73 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 22 as CKM_RSA_PKCS" 16340 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 16350 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 41 52 41 4d _MECHANISM_PARAM 16360 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 16370 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 if (hSession == 16380 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 0 || hSession >= 16390 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 163a0 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 163b0 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 163c0 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 ns[0]))) {...CAC 163d0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 163e0 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 163f0 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 n out of range." 16400 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 16410 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 16420 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 16430 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 16440 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 cackey_mutex_loc 16450 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 16460 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 16470 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 16480 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 16490 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b TF("Error. Lock 164a0 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 164b0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 164c0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 164d0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 ..if (!cackey_se 164e0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 164f0 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 .active) {...cac 16500 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 16510 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 16520 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 16530 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 16540 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 Session not ac 16550 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 16560 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 16570 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 16580 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 ;..}...if (cacke 16590 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 165a0 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 ion].decrypt_act 165b0 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ive) {...cackey_ 165c0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 165d0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 165e0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 165f0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 44 65 INTF("Error. De 16600 63 72 79 70 74 20 61 6c 72 65 61 64 79 20 69 6e crypt already in 16610 20 70 72 6f 67 72 65 73 73 2e 22 29 3b 0a 09 09 progress.");... 16620 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 ...return(CKR_OP 16630 45 52 41 54 49 4f 4e 5f 41 43 54 49 56 45 29 3b ERATION_ACTIVE); 16640 0a 09 7d 0a 0a 09 69 66 20 28 68 4b 65 79 20 3e ..}...if (hKey > 16650 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e = cackey_session 16660 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 16670 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 20 7b 0a tities_count) {. 16680 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 16690 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 166a0 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 lock);....CACKEY 166b0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 166c0 72 72 6f 72 2e 20 20 4b 65 79 20 68 61 6e 64 6c rror. Key handl 166d0 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 e out of range." 166e0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 166f0 5f 4b 45 59 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 _KEY_HANDLE_INVA 16700 4c 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 LID);..}...cacke 16710 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 16720 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 ion].decrypt_act 16730 69 76 65 20 3d 20 31 3b 0a 0a 09 63 61 63 6b 65 ive = 1;...cacke 16740 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 16750 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 6d 65 63 ion].decrypt_mec 16760 68 61 6e 69 73 6d 20 3d 20 70 4d 65 63 68 61 6e hanism = pMechan 16770 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 3b 0a ism->mechanism;. 16780 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 16790 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 [hSession].decry 167a0 70 74 5f 6d 65 63 68 5f 70 61 72 6d 20 3d 20 70 pt_mech_parm = p 167b0 4d 65 63 68 61 6e 69 73 6d 2d 3e 70 50 61 72 61 Mechanism->pPara 167c0 6d 65 74 65 72 3b 0a 09 63 61 63 6b 65 79 5f 73 meter;..cackey_s 167d0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 167e0 5d 2e 64 65 63 72 79 70 74 5f 6d 65 63 68 5f 70 ].decrypt_mech_p 167f0 61 72 6d 6c 65 6e 20 3d 20 70 4d 65 63 68 61 6e armlen = pMechan 16800 69 73 6d 2d 3e 75 6c 50 61 72 61 6d 65 74 65 72 ism->ulParameter 16810 4c 65 6e 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 Len;...mutex_ret 16820 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 16830 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 16840 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 16850 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 16860 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...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 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 16890 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 168a0 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 168b0 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b RROR);..}...CACK 168c0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 168d0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 168e0 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) 168f0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O 16900 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 K);.}..CK_DEFINE 16910 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 16920 20 43 5f 44 65 63 72 79 70 74 29 28 43 4b 5f 53 C_Decrypt)(CK_S 16930 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 16940 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f ession, CK_BYTE_ 16950 50 54 52 20 70 45 6e 63 72 79 70 74 65 64 44 61 PTR pEncryptedDa 16960 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 45 ta, CK_ULONG ulE 16970 6e 63 72 79 70 74 65 64 44 61 74 61 4c 65 6e 2c ncryptedDataLen, 16980 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 61 CK_BYTE_PTR pDa 16990 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 ta, CK_ULONG_PTR 169a0 20 70 75 6c 44 61 74 61 4c 65 6e 29 20 7b 0a 09 pulDataLen) {.. 169b0 43 4b 5f 55 4c 4f 4e 47 20 64 61 74 61 6c 65 6e CK_ULONG datalen 169c0 5f 75 70 64 61 74 65 2c 20 64 61 74 61 6c 65 6e _update, datalen 169d0 5f 66 69 6e 61 6c 3b 0a 09 43 4b 5f 52 56 20 64 _final;..CK_RV d 169e0 65 63 72 79 70 74 5f 72 65 74 3b 0a 0a 09 43 41 ecrypt_ret;...CA 169f0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 16a00 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 16a10 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 16a20 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 16a30 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 16a40 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 16a50 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 16a60 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 16a70 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 16a80 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 IZED);..}...if ( 16a90 70 75 6c 44 61 74 61 4c 65 6e 20 3d 3d 20 4e 55 pulDataLen == NU 16aa0 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 16ab0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 16ac0 6f 72 2e 20 70 75 6c 44 61 74 61 4c 65 6e 20 69 or. pulDataLen i 16ad0 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 s NULL.");....re 16ae0 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 16af0 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 64 61 TS_BAD);..}...da 16b00 74 61 6c 65 6e 5f 75 70 64 61 74 65 20 3d 20 2a talen_update = * 16b10 70 75 6c 44 61 74 61 4c 65 6e 3b 0a 0a 09 64 65 pulDataLen;...de 16b20 63 72 79 70 74 5f 72 65 74 20 3d 20 43 5f 44 65 crypt_ret = C_De 16b30 63 72 79 70 74 55 70 64 61 74 65 28 68 53 65 73 cryptUpdate(hSes 16b40 73 69 6f 6e 2c 20 70 45 6e 63 72 79 70 74 65 64 sion, pEncrypted 16b50 44 61 74 61 2c 20 75 6c 45 6e 63 72 79 70 74 65 Data, ulEncrypte 16b60 64 44 61 74 61 4c 65 6e 2c 20 70 44 61 74 61 2c dDataLen, pData, 16b70 20 26 64 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 &datalen_update 16b80 29 3b 0a 09 69 66 20 28 64 65 63 72 79 70 74 5f );..if (decrypt_ 16b90 72 65 74 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b ret != CKR_OK) { 16ba0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 16bb0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 16bc0 44 65 63 72 79 70 74 55 70 64 61 74 65 28 29 20 DecryptUpdate() 16bd0 72 65 74 75 72 6e 65 64 20 66 61 69 6c 75 72 65 returned failure 16be0 20 28 72 76 20 3d 20 25 6c 75 29 2e 22 2c 20 28 (rv = %lu).", ( 16bf0 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 64 unsigned long) d 16c00 65 63 72 79 70 74 5f 72 65 74 29 3b 0a 0a 09 09 ecrypt_ret);.... 16c10 72 65 74 75 72 6e 28 64 65 63 72 79 70 74 5f 72 return(decrypt_r 16c20 65 74 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 44 et);..}...if (pD 16c30 61 74 61 29 20 7b 0a 09 09 70 44 61 74 61 20 2b ata) {...pData + 16c40 3d 20 64 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 = datalen_update 16c50 3b 0a 09 7d 0a 09 64 61 74 61 6c 65 6e 5f 66 69 ;..}..datalen_fi 16c60 6e 61 6c 20 3d 20 2a 70 75 6c 44 61 74 61 4c 65 nal = *pulDataLe 16c70 6e 20 2d 20 64 61 74 61 6c 65 6e 5f 75 70 64 61 n - datalen_upda 16c80 74 65 3b 0a 0a 09 64 65 63 72 79 70 74 5f 72 65 te;...decrypt_re 16c90 74 20 3d 20 43 5f 44 65 63 72 79 70 74 46 69 6e t = C_DecryptFin 16ca0 61 6c 28 68 53 65 73 73 69 6f 6e 2c 20 70 44 61 al(hSession, pDa 16cb0 74 61 2c 20 26 64 61 74 61 6c 65 6e 5f 66 69 6e ta, &datalen_fin 16cc0 61 6c 29 3b 0a 09 69 66 20 28 64 65 63 72 79 70 al);..if (decryp 16cd0 74 5f 72 65 74 20 21 3d 20 43 4b 52 5f 4f 4b 29 t_ret != CKR_OK) 16ce0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 16cf0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 16d00 20 20 44 65 63 72 79 70 74 46 69 6e 61 6c 28 29 DecryptFinal() 16d10 20 72 65 74 75 72 6e 65 64 20 66 61 69 6c 75 72 returned failur 16d20 65 20 28 72 76 20 3d 20 25 6c 75 29 2e 22 2c 20 e (rv = %lu).", 16d30 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 16d40 64 65 63 72 79 70 74 5f 72 65 74 29 3b 0a 0a 09 decrypt_ret);... 16d50 09 72 65 74 75 72 6e 28 64 65 63 72 79 70 74 5f .return(decrypt_ 16d60 72 65 74 29 3b 0a 09 7d 0a 0a 09 2a 70 75 6c 44 ret);..}...*pulD 16d70 61 74 61 4c 65 6e 20 3d 20 64 61 74 61 6c 65 6e ataLen = datalen 16d80 5f 75 70 64 61 74 65 20 2b 20 64 61 74 61 6c 65 _update + datale 16d90 6e 5f 66 69 6e 61 6c 3b 0a 0a 09 43 41 43 4b 45 n_final;...CACKE 16da0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 16db0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 16dc0 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b (%i)", CKR_OK); 16dd0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 16de0 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 16df0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 16e00 43 5f 44 65 63 72 79 70 74 55 70 64 61 74 65 29 C_DecryptUpdate) 16e10 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 16e20 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 16e30 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 BYTE_PTR pEncryp 16e40 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e tedPart, CK_ULON 16e50 47 20 75 6c 45 6e 63 72 79 70 74 65 64 50 61 72 G ulEncryptedPar 16e60 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 tLen, CK_BYTE_PT 16e70 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e R pPart, CK_ULON 16e80 47 5f 50 54 52 20 70 75 6c 50 61 72 74 4c 65 6e G_PTR pulPartLen 16e90 29 20 7b 0a 09 73 74 61 74 69 63 20 43 4b 5f 42 ) {..static CK_B 16ea0 59 54 45 20 62 75 66 5b 31 36 33 38 34 5d 3b 0a YTE buf[16384];. 16eb0 09 73 73 69 7a 65 5f 74 20 62 75 66 6c 65 6e 3b .ssize_t buflen; 16ec0 0a 09 43 4b 5f 52 56 20 72 65 74 76 61 6c 20 3d ..CK_RV retval = 16ed0 20 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 CKR_GENERAL_ERR 16ee0 4f 52 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 OR;..int mutex_r 16ef0 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f etval;...CACKEY_ 16f00 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 16f10 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 16f20 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 16f30 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 16f40 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 16f50 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 16f60 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 16f70 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 16f80 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 16f90 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 ;..}...if (hSess 16fa0 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 ion == 0 || hSes 16fb0 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 sion >= (sizeof( 16fc0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 16fd0 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 16fe0 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 _sessions[0]))) 16ff0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 17000 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 17010 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 Session out of 17020 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 range.");......r 17030 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 17040 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 17050 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 45 6e 63 );..}...if (pEnc 17060 72 79 70 74 65 64 50 61 72 74 20 3d 3d 20 4e 55 ryptedPart == NU 17070 4c 4c 20 26 26 20 75 6c 45 6e 63 72 79 70 74 65 LL && ulEncrypte 17080 64 50 61 72 74 4c 65 6e 20 3d 3d 20 30 29 20 7b dPartLen == 0) { 17090 0a 09 09 2f 2a 20 53 68 6f 72 74 20 63 69 72 63 .../* Short circ 170a0 75 69 74 20 69 66 20 77 65 20 61 72 65 20 61 73 uit if we are as 170b0 6b 65 64 20 74 6f 20 64 65 63 72 79 70 74 20 6e ked to decrypt n 170c0 6f 74 68 69 6e 67 2e 2e 2e 20 2a 2f 0a 09 09 43 othing... */...C 170d0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 170e0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 170f0 52 5f 4f 4b 20 28 25 69 29 20 28 73 68 6f 72 74 R_OK (%i) (short 17100 20 63 69 72 63 75 69 74 29 22 2c 20 43 4b 52 5f circuit)", CKR_ 17110 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 OK);....return(C 17120 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 KR_OK);..}...if 17130 28 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 20 (pEncryptedPart 17140 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 17150 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 17160 28 22 45 72 72 6f 72 2e 20 70 45 6e 63 72 79 70 ("Error. pEncryp 17170 74 65 64 50 61 72 74 20 69 73 20 4e 55 4c 4c 2c tedPart is NULL, 17180 20 62 75 74 20 75 6c 45 6e 63 72 79 70 74 65 64 but ulEncrypted 17190 50 61 72 74 4c 65 6e 20 69 73 20 6e 6f 74 20 30 PartLen is not 0 171a0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 171b0 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD 171c0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 6c 45 6e );..}...if (ulEn 171d0 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 3d cryptedPartLen = 171e0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 171f0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 17200 72 6f 72 2e 20 75 6c 45 6e 63 72 79 70 74 65 64 ror. ulEncrypted 17210 50 61 72 74 4c 65 6e 20 69 73 20 30 2c 20 62 75 PartLen is 0, bu 17220 74 20 70 50 61 72 74 20 69 73 20 6e 6f 74 20 4e t pPart is not N 17230 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 ULL.");....retur 17240 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f n(CKR_ARGUMENTS_ 17250 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 BAD);..}...if (p 17260 75 6c 50 61 72 74 4c 65 6e 20 3d 3d 20 4e 55 4c ulPartLen == NUL 17270 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 L) {...CACKEY_DE 17280 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 17290 72 2e 20 70 75 6c 50 61 72 74 4c 65 6e 20 69 73 r. pulPartLen is 172a0 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 NULL.");....ret 172b0 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 urn(CKR_ARGUMENT 172c0 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 S_BAD);..}...mut 172d0 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 172e0 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 ey_mutex_lock(ca 172f0 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 17300 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 17310 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 17320 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 17330 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 Error. Locking 17340 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 17350 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 17360 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 _ERROR);..}...if 17370 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f (!cackey_sessio 17380 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 ns[hSession].act 17390 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ive) {...cackey_ 173a0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 173b0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 173c0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 173d0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 173e0 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 ssion not active 173f0 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 17400 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 17410 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 17420 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 ...if (!cackey_s 17430 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 17440 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 ].decrypt_active 17450 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 17460 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 17470 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 17480 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 17490 46 28 22 45 72 72 6f 72 2e 20 20 44 65 63 72 79 F("Error. Decry 174a0 70 74 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 pt not active.") 174b0 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 174c0 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f R_OPERATION_NOT_ 174d0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 174e0 0a 0a 09 73 77 69 74 63 68 20 28 63 61 63 6b 65 ...switch (cacke 174f0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 17500 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 6d 65 63 ion].decrypt_mec 17510 68 61 6e 69 73 6d 29 20 7b 0a 09 09 63 61 73 65 hanism) {...case 17520 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 3a 0a 09 CKM_RSA_PKCS:.. 17530 09 09 62 75 66 6c 65 6e 20 3d 20 2d 31 3b 0a 0a ..buflen = -1;.. 17540 09 09 09 2f 2a 20 58 58 58 3a 20 41 73 6b 20 63 .../* XXX: Ask c 17550 61 72 64 20 74 6f 20 64 65 63 72 79 70 74 20 2a ard to decrypt * 17560 2f 0a 0a 09 09 09 69 66 20 28 62 75 66 6c 65 6e /.....if (buflen 17570 20 3c 20 30 29 20 7b 0a 09 09 09 09 2f 2a 20 44 < 0) {...../* D 17580 65 63 72 79 70 74 69 6f 6e 20 66 61 69 6c 65 64 ecryption failed 17590 2e 20 2a 2f 0a 09 09 09 09 72 65 74 76 61 6c 20 . */.....retval 175a0 3d 20 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 = CKR_GENERAL_ER 175b0 52 4f 52 3b 0a 09 09 09 7d 20 65 6c 73 65 20 69 ROR;....} else i 175c0 66 20 28 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f f (((unsigned lo 175d0 6e 67 29 20 62 75 66 6c 65 6e 29 20 3e 20 2a 70 ng) buflen) > *p 175e0 75 6c 50 61 72 74 4c 65 6e 20 26 26 20 70 50 61 ulPartLen && pPa 175f0 72 74 29 20 7b 0a 09 09 09 09 2f 2a 20 44 65 63 rt) {...../* Dec 17600 72 79 70 74 65 64 20 64 61 74 61 20 74 6f 6f 20 rypted data too 17610 6c 61 72 67 65 20 2a 2f 0a 09 09 09 09 72 65 74 large */.....ret 17620 76 61 6c 20 3d 20 43 4b 52 5f 42 55 46 46 45 52 val = CKR_BUFFER 17630 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b 0a 09 09 09 7d _TOO_SMALL;....} 17640 20 65 6c 73 65 20 7b 0a 09 09 09 09 69 66 20 28 else {.....if ( 17650 70 50 61 72 74 29 20 7b 0a 09 09 09 09 09 6d 65 pPart) {......me 17660 6d 63 70 79 28 70 50 61 72 74 2c 20 62 75 66 2c mcpy(pPart, buf, 17670 20 62 75 66 6c 65 6e 29 3b 0a 09 09 09 09 7d 0a buflen);.....}. 17680 0a 09 09 09 09 2a 70 75 6c 50 61 72 74 4c 65 6e .....*pulPartLen 17690 20 3d 20 62 75 66 6c 65 6e 3b 0a 0a 09 09 09 09 = buflen;...... 176a0 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 4f 4b 3b retval = CKR_OK; 176b0 0a 09 09 09 7d 0a 0a 09 09 09 62 72 65 61 6b 3b ....}.....break; 176c0 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 176d0 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 176e0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 176f0 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 17700 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 17710 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 17720 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 17730 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 . Unlocking fai 17740 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 17750 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 17760 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ROR);..}...CACKE 17770 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 17780 52 65 74 75 72 6e 69 6e 67 20 25 69 22 2c 20 28 Returning %i", ( 17790 69 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a 0a 09 int) retval);... 177a0 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a return(retval);. 177b0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 177c0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 CTION(CK_RV, C_D 177d0 65 63 72 79 70 74 46 69 6e 61 6c 29 28 43 4b 5f ecryptFinal)(CK_ 177e0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 177f0 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 17800 5f 50 54 52 20 70 4c 61 73 74 50 61 72 74 2c 20 _PTR pLastPart, 17810 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 17820 4c 61 73 74 50 61 72 74 4c 65 6e 29 20 7b 0a 09 LastPartLen) {.. 17830 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c int mutex_retval 17840 3b 0a 09 69 6e 74 20 74 65 72 6d 69 6e 61 74 65 ;..int terminate 17850 5f 64 65 63 72 79 70 74 20 3d 20 31 3b 0a 0a 09 _decrypt = 1;... 17860 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 17870 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 17880 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 17890 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 178a0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 178b0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 178c0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 178d0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 178e0 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 178f0 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 17900 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 (hSession == 0 17910 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 || hSession >= ( 17920 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 17930 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 17940 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 17950 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE 17960 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 17970 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 17980 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b out of range."); 17990 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 179a0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 179b0 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 179c0 66 20 28 70 75 6c 4c 61 73 74 50 61 72 74 4c 65 f (pulLastPartLe 179d0 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 n == NULL) {...C 179e0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 179f0 54 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 4c 61 TF("Error. pulLa 17a00 73 74 50 61 72 74 4c 65 6e 20 69 73 20 4e 55 4c stPartLen is NUL 17a10 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 L.");....return( 17a20 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA 17a30 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 D);..}...mutex_r 17a40 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 17a50 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 utex_lock(cackey 17a60 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 17a70 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 17a80 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 17a90 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 17aa0 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c r. Locking fail 17ab0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 17ac0 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 17ad0 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 OR);..}...if (!c 17ae0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 17af0 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 Session].active) 17b00 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 17b10 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 17b20 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 17b30 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 17b40 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 17b50 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b n not active."); 17b60 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 17b70 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 17b80 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 17b90 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 17ba0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 ons[hSession].de 17bb0 63 72 79 70 74 5f 61 63 74 69 76 65 29 20 7b 0a crypt_active) {. 17bc0 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 17bd0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 17be0 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 lock);....CACKEY 17bf0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 17c00 72 72 6f 72 2e 20 20 44 65 63 72 79 70 74 20 6e rror. Decrypt n 17c10 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 ot active.");... 17c20 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 ...return(CKR_OP 17c30 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 ERATION_NOT_INIT 17c40 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 2a IALIZED);..}...* 17c50 70 75 6c 4c 61 73 74 50 61 72 74 4c 65 6e 20 3d pulLastPartLen = 17c60 20 30 3b 0a 0a 09 69 66 20 28 70 4c 61 73 74 50 0;...if (pLastP 17c70 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 art == NULL) {.. 17c80 09 74 65 72 6d 69 6e 61 74 65 5f 64 65 63 72 79 .terminate_decry 17c90 70 74 20 3d 20 30 3b 0a 09 7d 0a 0a 09 69 66 20 pt = 0;..}...if 17ca0 28 74 65 72 6d 69 6e 61 74 65 5f 64 65 63 72 79 (terminate_decry 17cb0 70 74 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 73 pt) {...cackey_s 17cc0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 17cd0 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 ].decrypt_active 17ce0 20 3d 20 30 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 = 0;..}...mutex 17cf0 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 17d00 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 17d10 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 17d20 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 17d30 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 17d40 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 17d50 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e Error. Unlockin 17d60 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 17d70 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 17d80 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 17d90 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 17da0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 17db0 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR 17dc0 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C 17dd0 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 KR_OK);.}..CK_DE 17de0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 17df0 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 49 6e 69 _RV, C_DigestIni 17e00 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 t)(CK_SESSION_HA 17e10 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 17e20 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 K_MECHANISM_PTR 17e30 70 4d 65 63 68 61 6e 69 73 6d 29 20 7b 0a 09 43 pMechanism) {..C 17e40 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 17e50 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 17e60 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 17e70 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 17e80 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 17e90 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 17ea0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 17eb0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 17ec0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 17ed0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 17ee0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 17ef0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 17f00 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 17f10 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 17f20 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 17f30 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 17f40 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 17f50 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 17f60 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 17f70 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 17f80 44 69 67 65 73 74 29 28 43 4b 5f 53 45 53 53 49 Digest)(CK_SESSI 17f90 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 17fa0 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 17fb0 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 pData, CK_ULONG 17fc0 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 ulDataLen, CK_BY 17fd0 54 45 5f 50 54 52 20 70 44 69 67 65 73 74 2c 20 TE_PTR pDigest, 17fe0 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 17ff0 44 69 67 65 73 74 4c 65 6e 29 20 7b 0a 09 43 41 DigestLen) {..CA 18000 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 18010 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 18020 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 18030 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 18040 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 18050 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 18060 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 18070 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 18080 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 18090 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 180a0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 180b0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 180c0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 180d0 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 180e0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 180f0 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 18100 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 18110 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 18120 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 18130 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 CTION(CK_RV, C_D 18140 69 67 65 73 74 55 70 64 61 74 65 29 28 43 4b 5f igestUpdate)(CK_ 18150 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 18160 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 18170 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 _PTR pPart, CK_U 18180 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 6e 29 20 LONG ulPartLen) 18190 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 181a0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 181b0 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 181c0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 181d0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 181e0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 181f0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 18200 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 18210 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 18220 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 18230 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 18240 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 18250 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 18260 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 18270 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 18280 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 18290 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 182a0 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 182b0 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN 182c0 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 182d0 2c 20 43 5f 44 69 67 65 73 74 4b 65 79 29 28 43 , C_DigestKey)(C 182e0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 182f0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 hSession, CK_OB 18300 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 JECT_HANDLE hKey 18310 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 18320 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 18330 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 18340 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 18350 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 18360 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 18370 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 18380 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 18390 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 183a0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 183b0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 183c0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 183d0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 183e0 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 183f0 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 18400 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 18410 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 18420 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 18430 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 18440 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 18450 52 56 2c 20 43 5f 44 69 67 65 73 74 46 69 6e 61 RV, C_DigestFina 18460 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 l)(CK_SESSION_HA 18470 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 18480 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 69 67 65 K_BYTE_PTR pDige 18490 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 st, CK_ULONG_PTR 184a0 20 70 75 6c 44 69 67 65 73 74 4c 65 6e 29 20 7b pulDigestLen) { 184b0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 184c0 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 184d0 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 184e0 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 184f0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 18500 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 18510 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 18520 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 18530 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 18540 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 18550 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 18560 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 18570 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 18580 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 18590 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 185a0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 185b0 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 185c0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 185d0 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 185e0 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 185f0 20 43 5f 53 69 67 6e 49 6e 69 74 29 28 43 4b 5f C_SignInit)(CK_ 18600 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 18610 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 Session, CK_MECH 18620 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 ANISM_PTR pMecha 18630 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f nism, CK_OBJECT_ 18640 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09 HANDLE hKey) {.. 18650 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c int mutex_retval 18660 3b 0a 0a 09 68 4b 65 79 2d 2d 3b 0a 0a 09 43 41 ;...hKey--;...CA 18670 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 18680 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 18690 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 186a0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 186b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 186c0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 186d0 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 186e0 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 186f0 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 18700 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 IZED);..}...if ( 18710 70 4d 65 63 68 61 6e 69 73 6d 20 3d 3d 20 4e 55 pMechanism == NU 18720 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 18730 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 18740 6f 72 2e 20 70 4d 65 63 68 61 6e 69 73 6d 20 69 or. pMechanism i 18750 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 s NULL.");....re 18760 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 18770 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if 18780 20 28 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 (pMechanism->me 18790 63 68 61 6e 69 73 6d 20 21 3d 20 43 4b 4d 5f 52 chanism != CKM_R 187a0 53 41 5f 50 4b 43 53 20 26 26 20 70 4d 65 63 68 SA_PKCS && pMech 187b0 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d anism->mechanism 187c0 20 21 3d 20 43 4b 4d 5f 53 48 41 31 5f 52 53 41 != CKM_SHA1_RSA 187d0 5f 50 4b 43 53 29 20 7b 0a 09 09 43 41 43 4b 45 _PKCS) {...CACKE 187e0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 187f0 45 72 72 6f 72 2e 20 70 4d 65 63 68 61 6e 69 73 Error. pMechanis 18800 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 20 6e 6f 74 m->mechanism not 18810 20 73 70 65 63 69 66 69 65 64 20 61 73 20 43 4b specified as CK 18820 4d 5f 52 53 41 5f 50 4b 43 53 20 6f 72 20 43 4b M_RSA_PKCS or CK 18830 4d 5f 53 48 41 31 5f 52 53 41 5f 50 4b 43 53 22 M_SHA1_RSA_PKCS" 18840 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 18850 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 41 52 41 4d _MECHANISM_PARAM 18860 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 18870 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 if (hSession == 18880 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 0 || hSession >= 18890 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 188a0 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 188b0 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 188c0 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 ns[0]))) {...CAC 188d0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 188e0 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 188f0 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 n out of range." 18900 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 18910 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 18920 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 18930 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 18940 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 cackey_mutex_loc 18950 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 18960 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 18970 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 18980 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 18990 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b TF("Error. Lock 189a0 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 189b0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 189c0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 189d0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 ..if (!cackey_se 189e0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 189f0 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 .active) {...cac 18a00 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 18a10 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 18a20 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 18a30 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 18a40 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 Session not ac 18a50 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 18a60 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 18a70 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 18a80 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 ;..}...if (cacke 18a90 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 18aa0 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 ion].sign_active 18ab0 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 18ac0 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 18ad0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 18ae0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 18af0 46 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 20 F("Error. Sign 18b00 61 6c 72 65 61 64 79 20 69 6e 20 70 72 6f 67 72 already in progr 18b10 65 73 73 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ess.");......ret 18b20 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f urn(CKR_OPERATIO 18b30 4e 5f 41 43 54 49 56 45 29 3b 0a 09 7d 0a 0a 09 N_ACTIVE);..}... 18b40 69 66 20 28 68 4b 65 79 20 3e 3d 20 63 61 63 6b if (hKey >= cack 18b50 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 18b60 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 sion].identities 18b70 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 63 61 63 6b _count) {...cack 18b80 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 18b90 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 18ba0 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 18bb0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 18bc0 20 4b 65 79 20 68 61 6e 64 6c 65 20 6f 75 74 20 Key handle out 18bd0 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 0a 09 09 of range.");.... 18be0 72 65 74 75 72 6e 28 43 4b 52 5f 4b 45 59 5f 48 return(CKR_KEY_H 18bf0 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a ANDLE_INVALID);. 18c00 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 .}...cackey_sess 18c10 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 18c20 69 67 6e 5f 61 63 74 69 76 65 20 3d 20 31 3b 0a ign_active = 1;. 18c30 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 18c40 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 18c50 5f 6d 65 63 68 61 6e 69 73 6d 20 3d 20 70 4d 65 _mechanism = pMe 18c60 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 chanism->mechani 18c70 73 6d 3b 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 sm;...cackey_ses 18c80 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 18c90 73 69 67 6e 5f 62 75 66 6c 65 6e 20 3d 20 31 32 sign_buflen = 12 18ca0 38 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 8;..cackey_sessi 18cb0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 18cc0 67 6e 5f 62 75 66 75 73 65 64 20 3d 20 30 3b 0a gn_bufused = 0;. 18cd0 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 18ce0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 18cf0 62 75 66 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a buf = malloc(siz 18d00 65 6f 66 28 2a 63 61 63 6b 65 79 5f 73 65 73 73 eof(*cackey_sess 18d10 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 18d20 69 67 6e 5f 62 75 66 29 20 2a 20 63 61 63 6b 65 ign_buf) * cacke 18d30 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 18d40 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c 65 6e ion].sign_buflen 18d50 29 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 );...mutex_retva 18d60 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 18d70 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 18d80 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 18d90 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 18da0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 18db0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 18dc0 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c Unlocking fail 18dd0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 18de0 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 18df0 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 OR);..}...CACKEY 18e00 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 18e10 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 eturning CKR_OK 18e20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a (%i)", CKR_OK);. 18e30 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 ..return(CKR_OK) 18e40 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 18e50 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 18e60 5f 53 69 67 6e 29 28 43 4b 5f 53 45 53 53 49 4f _Sign)(CK_SESSIO 18e70 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 18e80 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 18e90 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 Data, CK_ULONG u 18ea0 6c 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 lDataLen, CK_BYT 18eb0 45 5f 50 54 52 20 70 53 69 67 6e 61 74 75 72 65 E_PTR pSignature 18ec0 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 , CK_ULONG_PTR p 18ed0 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 29 20 ulSignatureLen) 18ee0 7b 0a 09 43 4b 5f 52 56 20 73 69 67 6e 5f 72 65 {..CK_RV sign_re 18ef0 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 t;...CACKEY_DEBU 18f00 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 18f10 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 18f20 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 18f30 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 18f40 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 18f50 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 18f60 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 18f70 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 18f80 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 18f90 0a 0a 09 73 69 67 6e 5f 72 65 74 20 3d 20 43 5f ...sign_ret = C_ 18fa0 53 69 67 6e 55 70 64 61 74 65 28 68 53 65 73 73 SignUpdate(hSess 18fb0 69 6f 6e 2c 20 70 44 61 74 61 2c 20 75 6c 44 61 ion, pData, ulDa 18fc0 74 61 4c 65 6e 29 3b 0a 09 69 66 20 28 73 69 67 taLen);..if (sig 18fd0 6e 5f 72 65 74 20 21 3d 20 43 4b 52 5f 4f 4b 29 n_ret != CKR_OK) 18fe0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 18ff0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 19000 20 20 53 69 67 6e 55 70 64 61 74 65 28 29 20 72 SignUpdate() r 19010 65 74 75 72 6e 65 64 20 66 61 69 6c 75 72 65 20 eturned failure 19020 28 72 76 20 3d 20 25 6c 75 29 2e 22 2c 20 28 75 (rv = %lu).", (u 19030 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 69 nsigned long) si 19040 67 6e 5f 72 65 74 29 3b 0a 0a 09 09 72 65 74 75 gn_ret);....retu 19050 72 6e 28 73 69 67 6e 5f 72 65 74 29 3b 0a 09 7d rn(sign_ret);..} 19060 0a 0a 09 73 69 67 6e 5f 72 65 74 20 3d 20 43 5f ...sign_ret = C_ 19070 53 69 67 6e 46 69 6e 61 6c 28 68 53 65 73 73 69 SignFinal(hSessi 19080 6f 6e 2c 20 70 53 69 67 6e 61 74 75 72 65 2c 20 on, pSignature, 19090 70 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 29 pulSignatureLen) 190a0 3b 0a 09 69 66 20 28 73 69 67 6e 5f 72 65 74 20 ;..if (sign_ret 190b0 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 != CKR_OK) {...C 190c0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 190d0 54 46 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e TF("Error. Sign 190e0 46 69 6e 61 6c 28 29 20 72 65 74 75 72 6e 65 64 Final() returned 190f0 20 66 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 failure (rv = % 19100 6c 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 lu).", (unsigned 19110 20 6c 6f 6e 67 29 20 73 69 67 6e 5f 72 65 74 29 long) sign_ret) 19120 3b 0a 0a 09 09 72 65 74 75 72 6e 28 73 69 67 6e ;....return(sign 19130 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b _ret);..}...CACK 19140 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 19150 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 19160 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) 19170 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O 19180 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 K);.}..CK_DEFINE 19190 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 191a0 20 43 5f 53 69 67 6e 55 70 64 61 74 65 29 28 43 C_SignUpdate)(C 191b0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 191c0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 191d0 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b TE_PTR pPart, CK 191e0 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 6e _ULONG ulPartLen 191f0 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 ) {..int mutex_r 19200 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f etval;...CACKEY_ 19210 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 19220 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 19230 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 19240 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 19250 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 19260 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 19270 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 19280 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 19290 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 192a0 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 ;..}...if (hSess 192b0 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 ion == 0 || hSes 192c0 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 sion >= (sizeof( 192d0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 192e0 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 192f0 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 _sessions[0]))) 19300 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 19310 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 19320 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 Session out of 19330 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 range.");......r 19340 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 19350 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 19360 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 50 61 72 );..}...if (pPar 19370 74 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c 50 t == NULL && ulP 19380 61 72 74 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 artLen == 0) {.. 19390 09 2f 2a 20 53 68 6f 72 74 20 63 69 72 63 75 69 ./* Short circui 193a0 74 20 69 66 20 77 65 20 61 72 65 20 61 73 6b 65 t if we are aske 193b0 64 20 74 6f 20 73 69 67 6e 20 6e 6f 74 68 69 6e d to sign nothin 193c0 67 2e 2e 2e 20 2a 2f 0a 09 09 43 41 43 4b 45 59 g... */...CACKEY 193d0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 193e0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 eturning CKR_OK 193f0 28 25 69 29 20 28 73 68 6f 72 74 20 63 69 72 63 (%i) (short circ 19400 75 69 74 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a uit)", CKR_OK);. 19410 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 19420 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 50 61 72 );..}...if (pPar 19430 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 t == NULL) {...C 19440 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 19450 54 46 28 22 45 72 72 6f 72 2e 20 70 50 61 72 74 TF("Error. pPart 19460 20 69 73 20 4e 55 4c 4c 2c 20 62 75 74 20 75 6c is NULL, but ul 19470 50 61 72 74 4c 65 6e 20 69 73 20 6e 6f 74 20 30 PartLen is not 0 19480 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 19490 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD 194a0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 6c 50 61 );..}...if (ulPa 194b0 72 74 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 rtLen == 0) {... 194c0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 194d0 4e 54 46 28 22 45 72 72 6f 72 2e 20 75 6c 50 61 NTF("Error. ulPa 194e0 72 74 4c 65 6e 20 69 73 20 30 2c 20 62 75 74 20 rtLen is 0, but 194f0 70 50 61 72 74 20 69 73 20 6e 6f 74 20 4e 55 4c pPart is not NUL 19500 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 L.");....return( 19510 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA 19520 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 D);..}...mutex_r 19530 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 19540 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 utex_lock(cackey 19550 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 19560 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 19570 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 19580 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 19590 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c r. Locking fail 195a0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 195b0 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 195c0 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 OR);..}...if (!c 195d0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 195e0 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 Session].active) 195f0 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 19600 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 19610 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 19620 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 19630 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 19640 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b n not active."); 19650 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 19660 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 19670 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 19680 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 19690 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 196a0 67 6e 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 gn_active) {...c 196b0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 196c0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 196d0 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 196e0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 196f0 72 2e 20 20 53 69 67 6e 20 6e 6f 74 20 61 63 74 r. Sign not act 19700 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ive.");......ret 19710 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f urn(CKR_OPERATIO 19720 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 N_NOT_INITIALIZE 19730 44 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 68 20 D);..}...switch 19740 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 19750 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 19760 6d 65 63 68 61 6e 69 73 6d 29 20 7b 0a 09 09 63 mechanism) {...c 19770 61 73 65 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 ase CKM_RSA_PKCS 19780 3a 0a 09 09 09 2f 2a 20 41 63 63 75 6d 75 6c 61 :..../* Accumula 19790 74 65 20 64 69 72 65 63 74 6c 79 20 2a 2f 0a 09 te directly */.. 197a0 09 09 69 66 20 28 28 63 61 63 6b 65 79 5f 73 65 ..if ((cackey_se 197b0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 197c0 2e 73 69 67 6e 5f 62 75 66 75 73 65 64 20 2b 20 .sign_bufused + 197d0 75 6c 50 61 72 74 4c 65 6e 29 20 3e 20 63 61 63 ulPartLen) > cac 197e0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 197f0 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c ssion].sign_bufl 19800 65 6e 29 20 7b 0a 09 09 09 09 63 61 63 6b 65 79 en) {.....cackey 19810 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 19820 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c 65 6e 20 on].sign_buflen 19830 2a 3d 20 32 3b 0a 0a 09 09 09 09 63 61 63 6b 65 *= 2;......cacke 19840 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 19850 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 20 3d 20 ion].sign_buf = 19860 72 65 61 6c 6c 6f 63 28 63 61 63 6b 65 79 5f 73 realloc(cackey_s 19870 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 19880 5d 2e 73 69 67 6e 5f 62 75 66 2c 20 73 69 7a 65 ].sign_buf, size 19890 6f 66 28 2a 63 61 63 6b 65 79 5f 73 65 73 73 69 of(*cackey_sessi 198a0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 198b0 67 6e 5f 62 75 66 29 20 2a 20 63 61 63 6b 65 79 gn_buf) * cackey 198c0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 198d0 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c 65 6e 29 on].sign_buflen) 198e0 3b 0a 09 09 09 7d 0a 0a 09 09 09 6d 65 6d 63 70 ;....}.....memcp 198f0 79 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e y(cackey_session 19900 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 19910 5f 62 75 66 20 2b 20 63 61 63 6b 65 79 5f 73 65 _buf + cackey_se 19920 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 19930 2e 73 69 67 6e 5f 62 75 66 75 73 65 64 2c 20 70 .sign_bufused, p 19940 50 61 72 74 2c 20 75 6c 50 61 72 74 4c 65 6e 29 Part, ulPartLen) 19950 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 ;.....cackey_ses 19960 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 19970 73 69 67 6e 5f 62 75 66 75 73 65 64 20 2b 3d 20 sign_bufused += 19980 75 6c 50 61 72 74 4c 65 6e 3b 0a 0a 09 09 09 62 ulPartLen;.....b 19990 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 43 4b 4d reak;...case CKM 199a0 5f 53 48 41 31 5f 52 53 41 5f 50 4b 43 53 3a 0a _SHA1_RSA_PKCS:. 199b0 09 09 09 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65 .../* Accumulate 199c0 20 69 6e 74 6f 20 61 20 53 48 41 31 20 68 61 73 into a SHA1 has 199d0 68 20 2a 2f 0a 09 09 09 63 61 63 6b 65 79 5f 6d h */....cackey_m 199e0 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 199f0 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 19a00 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 19a10 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 19a20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 19a30 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 19a40 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 19a50 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 19a60 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 19a70 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 19a80 52 54 45 44 29 3b 0a 09 09 09 62 72 65 61 6b 3b RTED);....break; 19a90 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 19aa0 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 19ab0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 19ac0 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 19ad0 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 19ae0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 19af0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 19b00 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 . Unlocking fai 19b10 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 19b20 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 19b30 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ROR);..}...CACKE 19b40 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 19b50 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 19b60 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b (%i)", CKR_OK); 19b70 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 19b80 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 19b90 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 19ba0 43 5f 53 69 67 6e 46 69 6e 61 6c 29 28 43 4b 5f C_SignFinal)(CK_ 19bb0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 19bc0 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 19bd0 5f 50 54 52 20 70 53 69 67 6e 61 74 75 72 65 2c _PTR pSignature, 19be0 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 CK_ULONG_PTR pu 19bf0 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 29 20 7b lSignatureLen) { 19c00 0a 09 73 74 61 74 69 63 20 43 4b 5f 42 59 54 45 ..static CK_BYTE 19c10 20 73 69 67 62 75 66 5b 31 30 32 34 5d 3b 0a 09 sigbuf[1024];.. 19c20 73 73 69 7a 65 5f 74 20 73 69 67 62 75 66 6c 65 ssize_t sigbufle 19c30 6e 3b 0a 09 43 4b 5f 52 56 20 72 65 74 76 61 6c n;..CK_RV retval 19c40 20 3d 20 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 = CKR_GENERAL_E 19c50 52 52 4f 52 3b 0a 09 69 6e 74 20 74 65 72 6d 69 RROR;..int termi 19c60 6e 61 74 65 5f 73 69 67 6e 20 3d 20 31 3b 0a 09 nate_sign = 1;.. 19c70 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c int mutex_retval 19c80 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 19c90 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 19ca0 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 19cb0 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 19cc0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 19cd0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 19ce0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 19cf0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 19d00 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 19d10 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 19d20 0a 09 69 66 20 28 70 75 6c 53 69 67 6e 61 74 75 ..if (pulSignatu 19d30 72 65 4c 65 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b reLen == NULL) { 19d40 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 19d50 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 PRINTF("Error. p 19d60 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 20 69 ulSignatureLen i 19d70 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 s NULL.");....re 19d80 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 19d90 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if 19da0 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 (hSession == 0 19db0 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 || hSession >= ( 19dc0 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 19dd0 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 19de0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 19df0 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE 19e00 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 19e10 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 19e20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b out of range."); 19e30 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 19e40 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 19e50 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d INVALID);..}...m 19e60 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 19e70 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( 19e80 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 19e90 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 19ea0 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 19eb0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 19ec0 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e ("Error. Lockin 19ed0 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 19ee0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 19ef0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 19f00 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 if (!cackey_sess 19f10 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 ions[hSession].a 19f20 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 ctive) {...cacke 19f30 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 19f40 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 19f50 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 19f60 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 19f70 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 Session not acti 19f80 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 ve.");......retu 19f90 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 rn(CKR_SESSION_H 19fa0 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a ANDLE_INVALID);. 19fb0 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 19fc0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 19fd0 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 29 on].sign_active) 19fe0 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 19ff0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 1a000 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 1a010 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1a020 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 20 6e ("Error. Sign n 1a030 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 ot active.");... 1a040 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 ...return(CKR_OP 1a050 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 ERATION_NOT_INIT 1a060 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 73 IALIZED);..}...s 1a070 77 69 74 63 68 20 28 63 61 63 6b 65 79 5f 73 65 witch (cackey_se 1a080 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 1a090 2e 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 6d 29 .sign_mechanism) 1a0a0 20 7b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 53 {...case CKM_RS 1a0b0 41 5f 50 4b 43 53 3a 0a 09 09 09 73 69 67 62 75 A_PKCS:....sigbu 1a0c0 66 6c 65 6e 20 3d 20 2d 31 3b 0a 0a 09 09 09 2f flen = -1;...../ 1a0d0 2a 20 58 58 58 3a 20 41 73 6b 20 63 61 72 64 20 * XXX: Ask card 1a0e0 74 6f 20 73 69 67 6e 20 2a 2f 0a 0a 09 09 09 69 to sign */.....i 1a0f0 66 20 28 73 69 67 62 75 66 6c 65 6e 20 3c 20 30 f (sigbuflen < 0 1a100 29 20 7b 0a 09 09 09 09 2f 2a 20 53 69 67 6e 69 ) {...../* Signi 1a110 6e 67 20 66 61 69 6c 65 64 2e 20 2a 2f 0a 09 09 ng failed. */... 1a120 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 47 ..retval = CKR_G 1a130 45 4e 45 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 09 ENERAL_ERROR;... 1a140 09 7d 20 65 6c 73 65 20 69 66 20 28 28 28 75 6e .} else if (((un 1a150 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 69 67 signed long) sig 1a160 62 75 66 6c 65 6e 29 20 3e 20 2a 70 75 6c 53 69 buflen) > *pulSi 1a170 67 6e 61 74 75 72 65 4c 65 6e 20 26 26 20 70 53 gnatureLen && pS 1a180 69 67 6e 61 74 75 72 65 29 20 7b 0a 09 09 09 09 ignature) {..... 1a190 2f 2a 20 53 69 67 6e 65 64 20 64 61 74 61 20 74 /* Signed data t 1a1a0 6f 6f 20 6c 61 72 67 65 20 2a 2f 0a 09 09 09 09 oo large */..... 1a1b0 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 42 55 46 retval = CKR_BUF 1a1c0 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b 0a 0a FER_TOO_SMALL;.. 1a1d0 09 09 09 09 74 65 72 6d 69 6e 61 74 65 5f 73 69 ....terminate_si 1a1e0 67 6e 20 3d 20 30 3b 0a 09 09 09 7d 20 65 6c 73 gn = 0;....} els 1a1f0 65 20 7b 0a 09 09 09 09 74 65 72 6d 69 6e 61 74 e {.....terminat 1a200 65 5f 73 69 67 6e 20 3d 20 30 3b 0a 0a 09 09 09 e_sign = 0;..... 1a210 09 69 66 20 28 70 53 69 67 6e 61 74 75 72 65 29 .if (pSignature) 1a220 20 7b 0a 09 09 09 09 09 6d 65 6d 63 70 79 28 70 {......memcpy(p 1a230 53 69 67 6e 61 74 75 72 65 2c 20 73 69 67 62 75 Signature, sigbu 1a240 66 2c 20 73 69 67 62 75 66 6c 65 6e 29 3b 0a 0a f, sigbuflen);.. 1a250 09 09 09 09 09 74 65 72 6d 69 6e 61 74 65 5f 73 .....terminate_s 1a260 69 67 6e 20 3d 20 31 3b 0a 09 09 09 09 7d 0a 0a ign = 1;.....}.. 1a270 09 09 09 09 2a 70 75 6c 53 69 67 6e 61 74 75 72 ....*pulSignatur 1a280 65 4c 65 6e 20 3d 20 73 69 67 62 75 66 6c 65 6e eLen = sigbuflen 1a290 3b 0a 0a 09 09 09 09 72 65 74 76 61 6c 20 3d 20 ;......retval = 1a2a0 43 4b 52 5f 4f 4b 3b 0a 09 09 09 7d 0a 0a 09 09 CKR_OK;....}.... 1a2b0 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 43 .break;...case C 1a2c0 4b 4d 5f 53 48 41 31 5f 52 53 41 5f 50 4b 43 53 KM_SHA1_RSA_PKCS 1a2d0 3a 0a 09 09 09 2f 2a 20 41 63 63 75 6d 75 6c 61 :..../* Accumula 1a2e0 74 65 20 69 6e 74 6f 20 61 20 53 48 41 31 20 68 te into a SHA1 h 1a2f0 61 73 68 20 2a 2f 0a 09 09 09 63 61 63 6b 65 79 ash */....cackey 1a300 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 1a310 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 1a320 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1a330 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1a340 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 1a350 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 1a360 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 1a370 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1a380 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 1a390 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1a3a0 50 4f 52 54 45 44 29 3b 0a 09 09 09 62 72 65 61 PORTED);....brea 1a3b0 6b 3b 0a 09 7d 0a 0a 09 69 66 20 28 74 65 72 6d k;..}...if (term 1a3c0 69 6e 61 74 65 5f 73 69 67 6e 29 20 7b 0a 09 09 inate_sign) {... 1a3d0 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 if (cackey_sessi 1a3e0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 1a3f0 67 6e 5f 62 75 66 29 20 7b 0a 09 09 09 66 72 65 gn_buf) {....fre 1a400 65 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e e(cackey_session 1a410 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 1a420 5f 62 75 66 29 3b 0a 09 09 7d 0a 0a 09 09 63 61 _buf);...}....ca 1a430 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1a440 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 ession].sign_act 1a450 69 76 65 20 3d 20 30 3b 0a 09 7d 0a 0a 09 6d 75 ive = 0;..}...mu 1a460 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 1a470 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1a480 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1a490 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 1a4a0 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 1a4b0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1a4c0 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 1a4d0 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 1a4e0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 1a4f0 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 1a500 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1a510 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1a520 67 20 25 69 22 2c 20 28 69 6e 74 29 20 72 65 74 g %i", (int) ret 1a530 76 61 6c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 val);...return(r 1a540 65 74 76 61 6c 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 etval);.}..CK_DE 1a550 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 1a560 5f 52 56 2c 20 43 5f 53 69 67 6e 52 65 63 6f 76 _RV, C_SignRecov 1a570 65 72 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 erInit)(CK_SESSI 1a580 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 1a590 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d on, CK_MECHANISM 1a5a0 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c _PTR pMechanism, 1a5b0 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL 1a5c0 45 20 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 E hKey) {..CACKE 1a5d0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1a5e0 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 1a5f0 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 1a600 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 1a610 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1a620 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 1a630 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 1a640 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 1a650 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 1a660 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ 1a670 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 1a680 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 turning CKR_FUNC 1a690 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1a6a0 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 ED (%i)", CKR_FU 1a6b0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1a6c0 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 RTED);...return( 1a6d0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1a6e0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a _SUPPORTED);.}.. 1a6f0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 1a700 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e ON(CK_RV, C_Sign 1a710 52 65 63 6f 76 65 72 29 28 43 4b 5f 53 45 53 53 Recover)(CK_SESS 1a720 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 1a730 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 1a740 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 pData, CK_ULONG 1a750 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 ulDataLen, CK_B 1a760 59 54 45 5f 50 54 52 20 70 53 69 67 6e 61 74 75 YTE_PTR pSignatu 1a770 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 re, CK_ULONG_PTR 1a780 20 70 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e pulSignatureLen 1a790 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 1a7a0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 1a7b0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 1a7c0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1a7d0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1a7e0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1a7f0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1a800 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1a810 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1a820 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1a830 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1a840 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1a850 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 1a860 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 1a870 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 1a880 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1a890 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 1a8a0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1a8b0 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 1a8c0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1a8d0 52 56 2c 20 43 5f 56 65 72 69 66 79 49 6e 69 74 RV, C_VerifyInit 1a8e0 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 1a8f0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 1a900 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 _MECHANISM_PTR p 1a910 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 Mechanism, CK_OB 1a920 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 JECT_HANDLE hKey 1a930 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 1a940 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 1a950 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 1a960 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1a970 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1a980 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1a990 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1a9a0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1a9b0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1a9c0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1a9d0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1a9e0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1a9f0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 1aa00 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 1aa10 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 1aa20 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1aa30 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 1aa40 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1aa50 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 1aa60 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1aa70 52 56 2c 20 43 5f 56 65 72 69 66 79 29 28 43 4b RV, C_Verify)(CK 1aa80 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 1aa90 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 hSession, CK_BYT 1aaa0 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f E_PTR pData, CK_ 1aab0 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c ULONG ulDataLen, 1aac0 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 CK_BYTE_PTR pSi 1aad0 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e gnature, CK_ULON 1aae0 47 20 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e G ulSignatureLen 1aaf0 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 1ab00 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 1ab10 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 1ab20 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1ab30 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1ab40 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1ab50 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1ab60 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1ab70 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1ab80 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1ab90 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1aba0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1abb0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 1abc0 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 1abd0 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 1abe0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1abf0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 1ac00 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1ac10 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 1ac20 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1ac30 52 56 2c 20 43 5f 56 65 72 69 66 79 55 70 64 61 RV, C_VerifyUpda 1ac40 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 te)(CK_SESSION_H 1ac50 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 1ac60 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 CK_BYTE_PTR pPar 1ac70 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 t, CK_ULONG ulPa 1ac80 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 rtLen) {..CACKEY 1ac90 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 1aca0 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 1acb0 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 1acc0 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 1acd0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1ace0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 1acf0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 1ad00 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 1ad10 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 1ad20 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 1ad30 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 1ad40 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 1ad50 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1ad60 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 1ad70 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 1ad80 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 1ad90 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 1ada0 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 1adb0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 1adc0 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66 N(CK_RV, C_Verif 1add0 79 46 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 yFinal)(CK_SESSI 1ade0 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 1adf0 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 1ae00 70 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 pSignature, CK_U 1ae10 4c 4f 4e 47 20 75 6c 53 69 67 6e 61 74 75 72 65 LONG ulSignature 1ae20 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Len) {..CACKEY_D 1ae30 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 1ae40 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 1ae50 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 1ae60 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 1ae70 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1ae80 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 1ae90 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 1aea0 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 1aeb0 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1aec0 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 1aed0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1aee0 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 1aef0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 1af00 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 1af10 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1af20 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 1af30 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1af40 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 1af50 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 1af60 43 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66 79 52 CK_RV, C_VerifyR 1af70 65 63 6f 76 65 72 49 6e 69 74 29 28 43 4b 5f 53 ecoverInit)(CK_S 1af80 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 1af90 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 ession, CK_MECHA 1afa0 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e NISM_PTR pMechan 1afb0 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 ism, CK_OBJECT_H 1afc0 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 ANDLE hKey) {..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 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 1aff0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 1b000 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 1b010 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1b020 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 1b030 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 1b040 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 1b050 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 1b060 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 1b070 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1b080 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1b090 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1b0a0 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 1b0b0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1b0c0 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 1b0d0 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 1b0e0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1b0f0 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 1b100 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 1b110 56 65 72 69 66 79 52 65 63 6f 76 65 72 29 28 43 VerifyRecover)(C 1b120 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 1b130 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 1b140 54 45 5f 50 54 52 20 70 53 69 67 6e 61 74 75 72 TE_PTR pSignatur 1b150 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 69 e, CK_ULONG ulSi 1b160 67 6e 61 74 75 72 65 4c 65 6e 2c 20 43 4b 5f 42 gnatureLen, CK_B 1b170 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 YTE_PTR pData, C 1b180 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 44 K_ULONG_PTR pulD 1b190 61 74 61 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 ataLen) {..CACKE 1b1a0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1b1b0 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 1b1c0 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 1b1d0 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 1b1e0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1b1f0 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 1b200 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 1b210 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 1b220 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 1b230 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ 1b240 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 1b250 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 turning CKR_FUNC 1b260 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1b270 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 ED (%i)", CKR_FU 1b280 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1b290 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 RTED);...return( 1b2a0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1b2b0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a _SUPPORTED);.}.. 1b2c0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 1b2d0 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 ON(CK_RV, C_Dige 1b2e0 73 74 45 6e 63 72 79 70 74 55 70 64 61 74 65 29 stEncryptUpdate) 1b2f0 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 1b300 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 1b310 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 BYTE_PTR pPart, 1b320 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c CK_ULONG ulPartL 1b330 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 en, CK_BYTE_PTR 1b340 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 pEncryptedPart, 1b350 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 1b360 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e EncryptedPartLen 1b370 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 1b380 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 1b390 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 1b3a0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1b3b0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1b3c0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1b3d0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1b3e0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1b3f0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1b400 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1b410 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1b420 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1b430 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 1b440 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 1b450 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 1b460 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1b470 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 1b480 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1b490 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 1b4a0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1b4b0 52 56 2c 20 43 5f 44 65 63 72 79 70 74 44 69 67 RV, C_DecryptDig 1b4c0 65 73 74 55 70 64 61 74 65 29 28 43 4b 5f 53 45 estUpdate)(CK_SE 1b4d0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 1b4e0 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 ssion, CK_BYTE_P 1b4f0 54 52 20 70 45 6e 63 72 79 70 74 65 64 50 61 72 TR pEncryptedPar 1b500 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 45 6e t, CK_ULONG ulEn 1b510 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 2c 20 cryptedPartLen, 1b520 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 CK_BYTE_PTR pPar 1b530 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 t, CK_ULONG_PTR 1b540 70 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 pulPartLen) {..C 1b550 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1b560 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 1b570 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 1b580 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 1b590 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1b5a0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 1b5b0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 1b5c0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 1b5d0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 1b5e0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 1b5f0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1b600 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1b610 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1b620 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 1b630 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1b640 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 1b650 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 1b660 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1b670 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 1b680 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 1b690 53 69 67 6e 45 6e 63 72 79 70 74 55 70 64 61 74 SignEncryptUpdat 1b6a0 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 e)(CK_SESSION_HA 1b6b0 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 1b6c0 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 K_BYTE_PTR pPart 1b6d0 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 , CK_ULONG ulPar 1b6e0 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 tLen, CK_BYTE_PT 1b6f0 52 20 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 R pEncryptedPart 1b700 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 , CK_ULONG_PTR p 1b710 75 6c 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c ulEncryptedPartL 1b720 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 en) {..CACKEY_DE 1b730 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 1b740 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 1b750 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 1b760 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1b770 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1b780 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 1b790 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1b7a0 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 1b7b0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 1b7c0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 1b7d0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 1b7e0 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 1b7f0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 1b800 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 1b810 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1b820 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 1b830 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1b840 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 1b850 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 1b860 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 74 56 K_RV, C_DecryptV 1b870 65 72 69 66 79 55 70 64 61 74 65 29 28 43 4b 5f erifyUpdate)(CK_ 1b880 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 1b890 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 1b8a0 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 64 50 _PTR pEncryptedP 1b8b0 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c art, CK_ULONG ul 1b8c0 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e EncryptedPartLen 1b8d0 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 , CK_BYTE_PTR pP 1b8e0 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 art, CK_ULONG_PT 1b8f0 52 20 70 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a R pulPartLen) {. 1b900 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1b910 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1b920 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1b930 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1b940 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1b950 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1b960 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1b970 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1b980 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1b990 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 1b9a0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1b9b0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1b9c0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1b9d0 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 1b9e0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1b9f0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 1ba00 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 1ba10 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1ba20 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1ba30 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1ba40 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 29 28 43 C_GenerateKey)(C 1ba50 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 1ba60 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 hSession, CK_ME 1ba70 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 CHANISM_PTR pMec 1ba80 68 61 6e 69 73 6d 2c 20 43 4b 5f 41 54 54 52 49 hanism, CK_ATTRI 1ba90 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 BUTE_PTR pTempla 1baa0 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 te, CK_ULONG ulC 1bab0 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f ount, CK_OBJECT_ 1bac0 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4b 65 79 HANDLE_PTR phKey 1bad0 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 1bae0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 1baf0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 1bb00 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1bb10 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1bb20 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1bb30 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1bb40 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1bb50 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1bb60 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1bb70 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1bb80 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1bb90 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 1bba0 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 1bbb0 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 1bbc0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1bbd0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 1bbe0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1bbf0 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 1bc00 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1bc10 52 56 2c 20 43 5f 47 65 6e 65 72 61 74 65 4b 65 RV, C_GenerateKe 1bc20 79 50 61 69 72 29 28 43 4b 5f 53 45 53 53 49 4f yPair)(CK_SESSIO 1bc30 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 1bc40 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f n, CK_MECHANISM_ 1bc50 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 PTR pMechanism, 1bc60 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 CK_ATTRIBUTE_PTR 1bc70 20 70 50 75 62 6c 69 63 4b 65 79 54 65 6d 70 6c pPublicKeyTempl 1bc80 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c ate, CK_ULONG ul 1bc90 50 75 62 6c 69 63 4b 65 79 41 74 74 72 69 62 75 PublicKeyAttribu 1bca0 74 65 43 6f 75 6e 74 2c 20 43 4b 5f 41 54 54 52 teCount, CK_ATTR 1bcb0 49 42 55 54 45 5f 50 54 52 20 70 50 72 69 76 61 IBUTE_PTR pPriva 1bcc0 74 65 4b 65 79 54 65 6d 70 6c 61 74 65 2c 20 43 teKeyTemplate, C 1bcd0 4b 5f 55 4c 4f 4e 47 20 75 6c 50 72 69 76 61 74 K_ULONG ulPrivat 1bce0 65 4b 65 79 41 74 74 72 69 62 75 74 65 43 6f 75 eKeyAttributeCou 1bcf0 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 nt, CK_OBJECT_HA 1bd00 4e 44 4c 45 5f 50 54 52 20 70 68 50 75 62 6c 69 NDLE_PTR phPubli 1bd10 63 4b 65 79 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f cKey, CK_OBJECT_ 1bd20 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 50 72 69 HANDLE_PTR phPri 1bd30 76 61 74 65 4b 65 79 29 20 7b 0a 09 43 41 43 4b vateKey) {..CACK 1bd40 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1bd50 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 1bd60 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 1bd70 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 1bd80 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1bd90 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 1bda0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 1bdb0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 1bdc0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 1bdd0 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 1bde0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 1bdf0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 1be00 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 1be10 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 1be20 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1be30 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 1be40 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 1be50 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 1be60 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 1be70 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 57 72 61 ION(CK_RV, C_Wra 1be80 70 4b 65 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e pKey)(CK_SESSION 1be90 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 1bea0 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 , CK_MECHANISM_P 1beb0 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 TR pMechanism, C 1bec0 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 K_OBJECT_HANDLE 1bed0 68 57 72 61 70 70 69 6e 67 4b 65 79 2c 20 43 4b hWrappingKey, CK 1bee0 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 _OBJECT_HANDLE h 1bef0 4b 65 79 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 Key, CK_BYTE_PTR 1bf00 20 70 57 72 61 70 70 65 64 4b 65 79 2c 20 43 4b pWrappedKey, CK 1bf10 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 57 72 _ULONG_PTR pulWr 1bf20 61 70 70 65 64 4b 65 79 4c 65 6e 29 20 7b 0a 09 appedKeyLen) {.. 1bf30 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1bf40 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 1bf50 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 1bf60 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 1bf70 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1bf80 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 1bf90 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 1bfa0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 1bfb0 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 1bfc0 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 1bfd0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1bfe0 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 1bff0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1c000 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C 1c010 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 1c020 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re 1c030 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO 1c040 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 1c050 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 1c060 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 1c070 5f 55 6e 77 72 61 70 4b 65 79 29 28 43 4b 5f 53 _UnwrapKey)(CK_S 1c080 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 1c090 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 ession, CK_MECHA 1c0a0 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e NISM_PTR pMechan 1c0b0 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 ism, CK_OBJECT_H 1c0c0 41 4e 44 4c 45 20 68 55 6e 77 72 61 70 70 69 6e ANDLE hUnwrappin 1c0d0 67 4b 65 79 2c 20 43 4b 5f 42 59 54 45 5f 50 54 gKey, CK_BYTE_PT 1c0e0 52 20 70 57 72 61 70 70 65 64 4b 65 79 2c 20 43 R pWrappedKey, C 1c0f0 4b 5f 55 4c 4f 4e 47 20 75 6c 57 72 61 70 70 65 K_ULONG ulWrappe 1c100 64 4b 65 79 4c 65 6e 2c 20 43 4b 5f 41 54 54 52 dKeyLen, CK_ATTR 1c110 49 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c IBUTE_PTR pTempl 1c120 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c ate, CK_ULONG ul 1c130 41 74 74 72 69 62 75 74 65 43 6f 75 6e 74 2c 20 AttributeCount, 1c140 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 1c150 5f 50 54 52 20 70 68 4b 65 79 29 20 7b 0a 09 43 _PTR phKey) {..C 1c160 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1c170 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 1c180 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 1c190 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 1c1a0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1c1b0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 1c1c0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 1c1d0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 1c1e0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 1c1f0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 1c200 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1c210 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1c220 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1c230 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 1c240 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1c250 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 1c260 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 1c270 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1c280 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 1c290 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 1c2a0 44 65 72 69 76 65 4b 65 79 29 28 43 4b 5f 53 45 DeriveKey)(CK_SE 1c2b0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 1c2c0 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e ssion, CK_MECHAN 1c2d0 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 ISM_PTR pMechani 1c2e0 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 sm, CK_OBJECT_HA 1c2f0 4e 44 4c 45 20 68 42 61 73 65 4b 65 79 2c 20 43 NDLE hBaseKey, C 1c300 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 K_ATTRIBUTE_PTR 1c310 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c pTemplate, CK_UL 1c320 4f 4e 47 20 75 6c 41 74 74 72 69 62 75 74 65 43 ONG ulAttributeC 1c330 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f ount, CK_OBJECT_ 1c340 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4b 65 79 HANDLE_PTR phKey 1c350 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 1c360 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 1c370 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 1c380 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1c390 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1c3a0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1c3b0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1c3c0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1c3d0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1c3e0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1c3f0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1c400 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1c410 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 1c420 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 1c430 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 1c440 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1c450 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 1c460 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1c470 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 1c480 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1c490 52 56 2c 20 43 5f 53 65 65 64 52 61 6e 64 6f 6d RV, C_SeedRandom 1c4a0 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 1c4b0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 1c4c0 5f 42 59 54 45 5f 50 54 52 20 70 53 65 65 64 2c _BYTE_PTR pSeed, 1c4d0 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 65 65 64 CK_ULONG ulSeed 1c4e0 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Len) {..CACKEY_D 1c4f0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 1c500 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 1c510 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 1c520 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 1c530 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1c540 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 1c550 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 1c560 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 1c570 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1c580 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 1c590 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1c5a0 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 1c5b0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 1c5c0 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 1c5d0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1c5e0 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 1c5f0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1c600 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 1c610 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 1c620 43 4b 5f 52 56 2c 20 43 5f 47 65 6e 65 72 61 74 CK_RV, C_Generat 1c630 65 52 61 6e 64 6f 6d 29 28 43 4b 5f 53 45 53 53 eRandom)(CK_SESS 1c640 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 1c650 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 1c660 20 70 52 61 6e 64 6f 6d 44 61 74 61 2c 20 43 4b pRandomData, CK 1c670 5f 55 4c 4f 4e 47 20 75 6c 52 61 6e 64 6f 6d 4c _ULONG ulRandomL 1c680 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 en) {..CACKEY_DE 1c690 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 1c6a0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 1c6b0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 1c6c0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1c6d0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1c6e0 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 1c6f0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1c700 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 1c710 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 1c720 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 1c730 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 1c740 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 1c750 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 1c760 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 1c770 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1c780 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 1c790 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1c7a0 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 44 PORTED);.}../* D 1c7b0 65 70 72 65 63 61 74 65 64 20 46 75 6e 63 74 69 eprecated Functi 1c7c0 6f 6e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f on */.CK_DEFINE_ 1c7d0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1c7e0 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 53 74 61 C_GetFunctionSta 1c7f0 74 75 73 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f tus)(CK_SESSION_ 1c800 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 HANDLE hSession) 1c810 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 1c820 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 1c830 22 29 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ");...CACKEY_DEB 1c840 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1c850 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 1c860 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 20 28 N_NOT_PARALLEL ( 1c870 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 1c880 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 ON_NOT_PARALLEL) 1c890 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 1c8a0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 UNCTION_NOT_PARA 1c8b0 4c 4c 45 4c 29 3b 0a 0a 09 68 53 65 73 73 69 6f LLEL);...hSessio 1c8c0 6e 20 3d 20 68 53 65 73 73 69 6f 6e 3b 20 2f 2a n = hSession; /* 1c8d0 20 53 75 70 72 65 73 73 20 75 6e 75 73 65 64 20 Supress unused 1c8e0 76 61 72 69 61 62 6c 65 20 77 61 72 6e 69 6e 67 variable warning 1c8f0 20 2a 2f 0a 7d 0a 0a 2f 2a 20 44 65 70 72 65 63 */.}../* Deprec 1c900 61 74 65 64 20 46 75 6e 63 74 69 6f 6e 20 2a 2f ated Function */ 1c910 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 1c920 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 61 6e ION(CK_RV, C_Can 1c930 63 65 6c 46 75 6e 63 74 69 6f 6e 29 28 43 4b 5f celFunction)(CK_ 1c940 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 1c950 53 65 73 73 69 6f 6e 29 20 7b 0a 09 43 41 43 4b Session) {..CACK 1c960 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1c970 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 43 41 "Called.");...CA 1c980 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1c990 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 1c9a0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 _FUNCTION_NOT_PA 1c9b0 52 41 4c 4c 45 4c 20 28 25 69 29 22 2c 20 43 4b RALLEL (%i)", CK 1c9c0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 R_FUNCTION_NOT_P 1c9d0 41 52 41 4c 4c 45 4c 29 3b 0a 0a 09 72 65 74 75 ARALLEL);...retu 1c9e0 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 1c9f0 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a NOT_PARALLEL);.. 1ca00 09 68 53 65 73 73 69 6f 6e 20 3d 20 68 53 65 73 .hSession = hSes 1ca10 73 69 6f 6e 3b 20 2f 2a 20 53 75 70 72 65 73 73 sion; /* Supress 1ca20 20 75 6e 75 73 65 64 20 76 61 72 69 61 62 6c 65 unused variable 1ca30 20 77 61 72 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 43 warning */.}..C 1ca40 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 1ca50 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 46 75 N(CK_RV, C_GetFu 1ca60 6e 63 74 69 6f 6e 4c 69 73 74 29 28 43 4b 5f 46 nctionList)(CK_F 1ca70 55 4e 43 54 49 4f 4e 5f 4c 49 53 54 5f 50 54 52 UNCTION_LIST_PTR 1ca80 5f 50 54 52 20 70 70 46 75 6e 63 74 69 6f 6e 4c _PTR ppFunctionL 1ca90 69 73 74 29 20 7b 0a 09 43 4b 5f 46 55 4e 43 54 ist) {..CK_FUNCT 1caa0 49 4f 4e 5f 4c 49 53 54 5f 50 54 52 20 70 46 75 ION_LIST_PTR pFu 1cab0 6e 63 74 69 6f 6e 4c 69 73 74 3b 0a 0a 09 43 41 nctionList;...CA 1cac0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1cad0 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 1cae0 69 66 20 28 70 70 46 75 6e 63 74 69 6f 6e 4c 69 if (ppFunctionLi 1caf0 73 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 st == NULL) {... 1cb00 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1cb10 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 70 46 75 NTF("Error. ppFu 1cb20 6e 63 74 69 6f 6e 4c 69 73 74 20 69 73 20 4e 55 nctionList is NU 1cb30 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 1cb40 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 1cb50 41 44 29 3b 0a 09 7d 0a 0a 09 70 46 75 6e 63 74 AD);..}...pFunct 1cb60 69 6f 6e 4c 69 73 74 20 3d 20 6d 61 6c 6c 6f 63 ionList = malloc 1cb70 28 73 69 7a 65 6f 66 28 2a 70 46 75 6e 63 74 69 (sizeof(*pFuncti 1cb80 6f 6e 4c 69 73 74 29 29 3b 0a 0a 09 70 46 75 6e onList));...pFun 1cb90 63 74 69 6f 6e 4c 69 73 74 2d 3e 76 65 72 73 69 ctionList->versi 1cba0 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 28 43 41 43 on.major = ((CAC 1cbb0 4b 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 KEY_CRYPTOKI_VER 1cbc0 53 49 4f 4e 5f 43 4f 44 45 29 20 3e 3e 20 31 36 SION_CODE) >> 16 1cbd0 29 20 26 20 30 78 66 66 3b 0a 09 70 46 75 6e 63 ) & 0xff;..pFunc 1cbe0 74 69 6f 6e 4c 69 73 74 2d 3e 76 65 72 73 69 6f tionList->versio 1cbf0 6e 2e 6d 69 6e 6f 72 20 3d 20 28 28 43 41 43 4b n.minor = ((CACK 1cc00 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 53 EY_CRYPTOKI_VERS 1cc10 49 4f 4e 5f 43 4f 44 45 29 20 3e 3e 20 38 29 20 ION_CODE) >> 8) 1cc20 26 20 30 78 66 66 3b 0a 0a 09 70 46 75 6e 63 74 & 0xff;...pFunct 1cc30 69 6f 6e 4c 69 73 74 2d 3e 43 5f 49 6e 69 74 69 ionList->C_Initi 1cc40 61 6c 69 7a 65 20 3d 20 43 5f 49 6e 69 74 69 61 alize = C_Initia 1cc50 6c 69 7a 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e lize;..pFunction 1cc60 4c 69 73 74 2d 3e 43 5f 46 69 6e 61 6c 69 7a 65 List->C_Finalize 1cc70 20 3d 20 43 5f 46 69 6e 61 6c 69 7a 65 3b 0a 09 = C_Finalize;.. 1cc80 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 1cc90 5f 47 65 74 49 6e 66 6f 20 3d 20 43 5f 47 65 74 _GetInfo = C_Get 1cca0 49 6e 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e Info;..pFunction 1ccb0 4c 69 73 74 2d 3e 43 5f 47 65 74 53 6c 6f 74 4c List->C_GetSlotL 1ccc0 69 73 74 20 3d 20 43 5f 47 65 74 53 6c 6f 74 4c ist = C_GetSlotL 1ccd0 69 73 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ist;..pFunctionL 1cce0 69 73 74 2d 3e 43 5f 47 65 74 53 6c 6f 74 49 6e ist->C_GetSlotIn 1ccf0 66 6f 20 3d 20 43 5f 47 65 74 53 6c 6f 74 49 6e fo = C_GetSlotIn 1cd00 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 fo;..pFunctionLi 1cd10 73 74 2d 3e 43 5f 47 65 74 54 6f 6b 65 6e 49 6e st->C_GetTokenIn 1cd20 66 6f 20 3d 20 43 5f 47 65 74 54 6f 6b 65 6e 49 fo = C_GetTokenI 1cd30 6e 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c nfo;..pFunctionL 1cd40 69 73 74 2d 3e 43 5f 57 61 69 74 46 6f 72 53 6c ist->C_WaitForSl 1cd50 6f 74 45 76 65 6e 74 20 3d 20 43 5f 57 61 69 74 otEvent = C_Wait 1cd60 46 6f 72 53 6c 6f 74 45 76 65 6e 74 3b 0a 09 70 ForSlotEvent;..p 1cd70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1cd80 47 65 74 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 GetMechanismList 1cd90 20 3d 20 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 = C_GetMechanis 1cda0 6d 4c 69 73 74 3b 0a 09 70 46 75 6e 63 74 69 6f mList;..pFunctio 1cdb0 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 4d 65 63 68 nList->C_GetMech 1cdc0 61 6e 69 73 6d 49 6e 66 6f 20 3d 20 43 5f 47 65 anismInfo = C_Ge 1cdd0 74 4d 65 63 68 61 6e 69 73 6d 49 6e 66 6f 3b 0a tMechanismInfo;. 1cde0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 1cdf0 43 5f 49 6e 69 74 54 6f 6b 65 6e 20 3d 20 43 5f C_InitToken = C_ 1ce00 49 6e 69 74 54 6f 6b 65 6e 3b 0a 09 70 46 75 6e InitToken;..pFun 1ce10 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 49 6e 69 ctionList->C_Ini 1ce20 74 50 49 4e 20 3d 20 43 5f 49 6e 69 74 50 49 4e tPIN = C_InitPIN 1ce30 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1ce40 2d 3e 43 5f 53 65 74 50 49 4e 20 3d 20 43 5f 53 ->C_SetPIN = C_S 1ce50 65 74 50 49 4e 3b 0a 09 70 46 75 6e 63 74 69 6f etPIN;..pFunctio 1ce60 6e 4c 69 73 74 2d 3e 43 5f 4f 70 65 6e 53 65 73 nList->C_OpenSes 1ce70 73 69 6f 6e 20 3d 20 43 5f 4f 70 65 6e 53 65 73 sion = C_OpenSes 1ce80 73 69 6f 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e sion;..pFunction 1ce90 4c 69 73 74 2d 3e 43 5f 43 6c 6f 73 65 53 65 73 List->C_CloseSes 1cea0 73 69 6f 6e 20 3d 20 43 5f 43 6c 6f 73 65 53 65 sion = C_CloseSe 1ceb0 73 73 69 6f 6e 3b 0a 09 70 46 75 6e 63 74 69 6f ssion;..pFunctio 1cec0 6e 4c 69 73 74 2d 3e 43 5f 43 6c 6f 73 65 41 6c nList->C_CloseAl 1ced0 6c 53 65 73 73 69 6f 6e 73 20 3d 20 43 5f 43 6c lSessions = C_Cl 1cee0 6f 73 65 41 6c 6c 53 65 73 73 69 6f 6e 73 3b 0a oseAllSessions;. 1cef0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 1cf00 43 5f 47 65 74 53 65 73 73 69 6f 6e 49 6e 66 6f C_GetSessionInfo 1cf10 20 3d 20 43 5f 47 65 74 53 65 73 73 69 6f 6e 49 = C_GetSessionI 1cf20 6e 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c nfo;..pFunctionL 1cf30 69 73 74 2d 3e 43 5f 47 65 74 4f 70 65 72 61 74 ist->C_GetOperat 1cf40 69 6f 6e 53 74 61 74 65 20 3d 20 43 5f 47 65 74 ionState = C_Get 1cf50 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 3b 0a OperationState;. 1cf60 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 1cf70 43 5f 53 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 C_SetOperationSt 1cf80 61 74 65 20 3d 20 43 5f 53 65 74 4f 70 65 72 61 ate = C_SetOpera 1cf90 74 69 6f 6e 53 74 61 74 65 3b 0a 09 70 46 75 6e tionState;..pFun 1cfa0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 4c 6f 67 ctionList->C_Log 1cfb0 69 6e 20 3d 20 43 5f 4c 6f 67 69 6e 3b 0a 09 70 in = C_Login;..p 1cfc0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1cfd0 4c 6f 67 6f 75 74 20 3d 20 43 5f 4c 6f 67 6f 75 Logout = C_Logou 1cfe0 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t;..pFunctionLis 1cff0 74 2d 3e 43 5f 43 72 65 61 74 65 4f 62 6a 65 63 t->C_CreateObjec 1d000 74 20 3d 20 43 5f 43 72 65 61 74 65 4f 62 6a 65 t = C_CreateObje 1d010 63 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 ct;..pFunctionLi 1d020 73 74 2d 3e 43 5f 43 6f 70 79 4f 62 6a 65 63 74 st->C_CopyObject 1d030 20 3d 20 43 5f 43 6f 70 79 4f 62 6a 65 63 74 3b = C_CopyObject; 1d040 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 1d050 3e 43 5f 44 65 73 74 72 6f 79 4f 62 6a 65 63 74 >C_DestroyObject 1d060 20 3d 20 43 5f 44 65 73 74 72 6f 79 4f 62 6a 65 = C_DestroyObje 1d070 63 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 ct;..pFunctionLi 1d080 73 74 2d 3e 43 5f 47 65 74 4f 62 6a 65 63 74 53 st->C_GetObjectS 1d090 69 7a 65 20 3d 20 43 5f 47 65 74 4f 62 6a 65 63 ize = C_GetObjec 1d0a0 74 53 69 7a 65 3b 0a 09 70 46 75 6e 63 74 69 6f tSize;..pFunctio 1d0b0 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 41 74 74 72 nList->C_GetAttr 1d0c0 69 62 75 74 65 56 61 6c 75 65 20 3d 20 43 5f 47 ibuteValue = C_G 1d0d0 65 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 65 etAttributeValue 1d0e0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1d0f0 2d 3e 43 5f 53 65 74 41 74 74 72 69 62 75 74 65 ->C_SetAttribute 1d100 56 61 6c 75 65 20 3d 20 43 5f 53 65 74 41 74 74 Value = C_SetAtt 1d110 72 69 62 75 74 65 56 61 6c 75 65 3b 0a 09 70 46 ributeValue;..pF 1d120 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 unctionList->C_F 1d130 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 20 3d indObjectsInit = 1d140 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e C_FindObjectsIn 1d150 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 it;..pFunctionLi 1d160 73 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 st->C_FindObject 1d170 73 20 3d 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 s = C_FindObject 1d180 73 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 s;..pFunctionLis 1d190 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 t->C_FindObjects 1d1a0 46 69 6e 61 6c 20 3d 20 43 5f 46 69 6e 64 4f 62 Final = C_FindOb 1d1b0 6a 65 63 74 73 46 69 6e 61 6c 3b 0a 09 70 46 75 jectsFinal;..pFu 1d1c0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e nctionList->C_En 1d1d0 63 72 79 70 74 49 6e 69 74 20 3d 20 43 5f 45 6e cryptInit = C_En 1d1e0 63 72 79 70 74 49 6e 69 74 3b 0a 09 70 46 75 6e cryptInit;..pFun 1d1f0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 ctionList->C_Enc 1d200 72 79 70 74 20 3d 20 43 5f 45 6e 63 72 79 70 74 rypt = C_Encrypt 1d210 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1d220 2d 3e 43 5f 45 6e 63 72 79 70 74 55 70 64 61 74 ->C_EncryptUpdat 1d230 65 20 3d 20 43 5f 45 6e 63 72 79 70 74 55 70 64 e = C_EncryptUpd 1d240 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ate;..pFunctionL 1d250 69 73 74 2d 3e 43 5f 45 6e 63 72 79 70 74 46 69 ist->C_EncryptFi 1d260 6e 61 6c 20 3d 20 43 5f 45 6e 63 72 79 70 74 46 nal = C_EncryptF 1d270 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e inal;..pFunction 1d280 4c 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 49 List->C_DecryptI 1d290 6e 69 74 20 3d 20 43 5f 44 65 63 72 79 70 74 49 nit = C_DecryptI 1d2a0 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c nit;..pFunctionL 1d2b0 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 20 3d ist->C_Decrypt = 1d2c0 20 43 5f 44 65 63 72 79 70 74 3b 0a 09 70 46 75 C_Decrypt;..pFu 1d2d0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 nctionList->C_De 1d2e0 63 72 79 70 74 55 70 64 61 74 65 20 3d 20 43 5f cryptUpdate = C_ 1d2f0 44 65 63 72 79 70 74 55 70 64 61 74 65 3b 0a 09 DecryptUpdate;.. 1d300 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 1d310 5f 44 65 63 72 79 70 74 46 69 6e 61 6c 20 3d 20 _DecryptFinal = 1d320 43 5f 44 65 63 72 79 70 74 46 69 6e 61 6c 3b 0a C_DecryptFinal;. 1d330 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 1d340 43 5f 44 69 67 65 73 74 49 6e 69 74 20 3d 20 43 C_DigestInit = C 1d350 5f 44 69 67 65 73 74 49 6e 69 74 3b 0a 09 70 46 _DigestInit;..pF 1d360 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 unctionList->C_D 1d370 69 67 65 73 74 20 3d 20 43 5f 44 69 67 65 73 74 igest = C_Digest 1d380 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1d390 2d 3e 43 5f 44 69 67 65 73 74 55 70 64 61 74 65 ->C_DigestUpdate 1d3a0 20 3d 20 43 5f 44 69 67 65 73 74 55 70 64 61 74 = C_DigestUpdat 1d3b0 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 e;..pFunctionLis 1d3c0 74 2d 3e 43 5f 44 69 67 65 73 74 4b 65 79 20 3d t->C_DigestKey = 1d3d0 20 43 5f 44 69 67 65 73 74 4b 65 79 3b 0a 09 70 C_DigestKey;..p 1d3e0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1d3f0 44 69 67 65 73 74 46 69 6e 61 6c 20 3d 20 43 5f DigestFinal = C_ 1d400 44 69 67 65 73 74 46 69 6e 61 6c 3b 0a 09 70 46 DigestFinal;..pF 1d410 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 unctionList->C_S 1d420 69 67 6e 49 6e 69 74 20 3d 20 43 5f 53 69 67 6e ignInit = C_Sign 1d430 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e Init;..pFunction 1d440 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 20 3d 20 43 List->C_Sign = C 1d450 5f 53 69 67 6e 3b 0a 09 70 46 75 6e 63 74 69 6f _Sign;..pFunctio 1d460 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 55 70 64 nList->C_SignUpd 1d470 61 74 65 20 3d 20 43 5f 53 69 67 6e 55 70 64 61 ate = C_SignUpda 1d480 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 te;..pFunctionLi 1d490 73 74 2d 3e 43 5f 53 69 67 6e 46 69 6e 61 6c 20 st->C_SignFinal 1d4a0 3d 20 43 5f 53 69 67 6e 46 69 6e 61 6c 3b 0a 09 = C_SignFinal;.. 1d4b0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 1d4c0 5f 53 69 67 6e 52 65 63 6f 76 65 72 49 6e 69 74 _SignRecoverInit 1d4d0 20 3d 20 43 5f 53 69 67 6e 52 65 63 6f 76 65 72 = C_SignRecover 1d4e0 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e Init;..pFunction 1d4f0 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 52 65 63 6f List->C_SignReco 1d500 76 65 72 20 3d 20 43 5f 53 69 67 6e 52 65 63 6f ver = C_SignReco 1d510 76 65 72 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ver;..pFunctionL 1d520 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 49 6e 69 ist->C_VerifyIni 1d530 74 20 3d 20 43 5f 56 65 72 69 66 79 49 6e 69 74 t = C_VerifyInit 1d540 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1d550 2d 3e 43 5f 56 65 72 69 66 79 20 3d 20 43 5f 56 ->C_Verify = C_V 1d560 65 72 69 66 79 3b 0a 09 70 46 75 6e 63 74 69 6f erify;..pFunctio 1d570 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 55 nList->C_VerifyU 1d580 70 64 61 74 65 20 3d 20 43 5f 56 65 72 69 66 79 pdate = C_Verify 1d590 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 Update;..pFuncti 1d5a0 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 onList->C_Verify 1d5b0 46 69 6e 61 6c 20 3d 20 43 5f 56 65 72 69 66 79 Final = C_Verify 1d5c0 46 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f Final;..pFunctio 1d5d0 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 52 nList->C_VerifyR 1d5e0 65 63 6f 76 65 72 49 6e 69 74 20 3d 20 43 5f 56 ecoverInit = C_V 1d5f0 65 72 69 66 79 52 65 63 6f 76 65 72 49 6e 69 74 erifyRecoverInit 1d600 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1d610 2d 3e 43 5f 56 65 72 69 66 79 52 65 63 6f 76 65 ->C_VerifyRecove 1d620 72 20 3d 20 43 5f 56 65 72 69 66 79 52 65 63 6f r = C_VerifyReco 1d630 76 65 72 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ver;..pFunctionL 1d640 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 45 6e 63 ist->C_DigestEnc 1d650 72 79 70 74 55 70 64 61 74 65 20 3d 20 43 5f 44 ryptUpdate = C_D 1d660 69 67 65 73 74 45 6e 63 72 79 70 74 55 70 64 61 igestEncryptUpda 1d670 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 te;..pFunctionLi 1d680 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 44 69 67 st->C_DecryptDig 1d690 65 73 74 55 70 64 61 74 65 20 3d 20 43 5f 44 65 estUpdate = C_De 1d6a0 63 72 79 70 74 44 69 67 65 73 74 55 70 64 61 74 cryptDigestUpdat 1d6b0 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 e;..pFunctionLis 1d6c0 74 2d 3e 43 5f 53 69 67 6e 45 6e 63 72 79 70 74 t->C_SignEncrypt 1d6d0 55 70 64 61 74 65 20 3d 20 43 5f 53 69 67 6e 45 Update = C_SignE 1d6e0 6e 63 72 79 70 74 55 70 64 61 74 65 3b 0a 09 70 ncryptUpdate;..p 1d6f0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1d700 44 65 63 72 79 70 74 56 65 72 69 66 79 55 70 64 DecryptVerifyUpd 1d710 61 74 65 20 3d 20 43 5f 44 65 63 72 79 70 74 56 ate = C_DecryptV 1d720 65 72 69 66 79 55 70 64 61 74 65 3b 0a 09 70 46 erifyUpdate;..pF 1d730 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 unctionList->C_G 1d740 65 6e 65 72 61 74 65 4b 65 79 20 3d 20 43 5f 47 enerateKey = C_G 1d750 65 6e 65 72 61 74 65 4b 65 79 3b 0a 09 70 46 75 enerateKey;..pFu 1d760 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge 1d770 6e 65 72 61 74 65 4b 65 79 50 61 69 72 20 3d 20 nerateKeyPair = 1d780 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 50 61 69 C_GenerateKeyPai 1d790 72 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 r;..pFunctionLis 1d7a0 74 2d 3e 43 5f 57 72 61 70 4b 65 79 20 3d 20 43 t->C_WrapKey = C 1d7b0 5f 57 72 61 70 4b 65 79 3b 0a 09 70 46 75 6e 63 _WrapKey;..pFunc 1d7c0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 55 6e 77 72 tionList->C_Unwr 1d7d0 61 70 4b 65 79 20 3d 20 43 5f 55 6e 77 72 61 70 apKey = C_Unwrap 1d7e0 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c Key;..pFunctionL 1d7f0 69 73 74 2d 3e 43 5f 44 65 72 69 76 65 4b 65 79 ist->C_DeriveKey 1d800 20 3d 20 43 5f 44 65 72 69 76 65 4b 65 79 3b 0a = C_DeriveKey;. 1d810 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 1d820 43 5f 53 65 65 64 52 61 6e 64 6f 6d 20 3d 20 43 C_SeedRandom = C 1d830 5f 53 65 65 64 52 61 6e 64 6f 6d 3b 0a 09 70 46 _SeedRandom;..pF 1d840 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 unctionList->C_G 1d850 65 6e 65 72 61 74 65 52 61 6e 64 6f 6d 20 3d 20 enerateRandom = 1d860 43 5f 47 65 6e 65 72 61 74 65 52 61 6e 64 6f 6d C_GenerateRandom 1d870 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1d880 2d 3e 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 53 ->C_GetFunctionS 1d890 74 61 74 75 73 20 3d 20 43 5f 47 65 74 46 75 6e tatus = C_GetFun 1d8a0 63 74 69 6f 6e 53 74 61 74 75 73 3b 0a 09 70 46 ctionStatus;..pF 1d8b0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 unctionList->C_C 1d8c0 61 6e 63 65 6c 46 75 6e 63 74 69 6f 6e 20 3d 20 ancelFunction = 1d8d0 43 5f 43 61 6e 63 65 6c 46 75 6e 63 74 69 6f 6e C_CancelFunction 1d8e0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1d8f0 2d 3e 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 4c ->C_GetFunctionL 1d900 69 73 74 20 3d 20 43 5f 47 65 74 46 75 6e 63 74 ist = C_GetFunct 1d910 69 6f 6e 4c 69 73 74 3b 0a 0a 09 2a 70 70 46 75 ionList;...*ppFu 1d920 6e 63 74 69 6f 6e 4c 69 73 74 20 3d 20 70 46 75 nctionList = pFu 1d930 6e 63 74 69 6f 6e 4c 69 73 74 3b 0a 0a 09 43 41 nctionList;...CA 1d940 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1d950 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 1d960 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f _OK (%i)", CKR_O 1d970 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 K);...return(CKR 1d980 5f 4f 4b 29 3b 0a 7d 0a 0a _OK);.}..