Artifact e9e3a1124184d1f4e133a5ef7a99602f075d6262:
- File
cackey.c
— part of check-in
[330efa4f3b]
at
2010-05-12 19:35:41
on branch trunk
— Updated ignores
Updated read_tlv to return a list
Added a free_tlv function
Updated value->str conversion functions to be more flexible/direct
Added sample code to select all PKI applets/files
Simplified TLV entity (user: rkeene, size: 117072) [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 23 64 65 66 69 nitions */.#defi 0510: 6e 65 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 ne GSCIS_CLASS_I 0520: 53 4f 37 38 31 36 20 20 20 20 20 20 20 20 20 20 SO7816 0530: 20 30 78 30 30 0a 23 64 65 66 69 6e 65 20 47 53 0x00.#define GS 0540: 43 49 53 5f 43 4c 41 53 53 5f 47 4c 4f 42 41 4c CIS_CLASS_GLOBAL 0550: 5f 50 4c 41 54 46 4f 52 4d 20 20 20 30 78 38 30 _PLATFORM 0x80 0560: 0a 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f ..#define GSCIS_ 0570: 49 4e 53 54 52 5f 47 45 54 5f 52 45 53 50 4f 4e INSTR_GET_RESPON 0580: 53 45 20 20 20 20 20 20 30 78 43 30 0a 23 64 65 SE 0xC0.#de 0590: 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 fine GSCIS_INSTR 05a0: 5f 52 45 41 44 5f 42 49 4e 41 52 59 20 20 20 20 _READ_BINARY 05b0: 20 20 20 30 78 42 30 0a 23 64 65 66 69 6e 65 20 0xB0.#define 05c0: 47 53 43 49 53 5f 49 4e 53 54 52 5f 55 50 44 41 GSCIS_INSTR_UPDA 05d0: 54 45 5f 42 49 4e 41 52 59 20 20 20 20 20 30 78 TE_BINARY 0x 05e0: 44 36 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 D6.#define GSCIS 05f0: 5f 49 4e 53 54 52 5f 53 45 4c 45 43 54 20 20 20 _INSTR_SELECT 0600: 20 20 20 20 20 20 20 20 20 30 78 41 34 0a 23 64 0xA4.#d 0610: 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 efine GSCIS_INST 0620: 52 5f 45 58 54 45 52 4e 41 4c 5f 41 55 54 48 20 R_EXTERNAL_AUTH 0630: 20 20 20 20 30 78 38 32 0a 23 64 65 66 69 6e 65 0x82.#define 0640: 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 47 45 54 GSCIS_INSTR_GET 0650: 5f 43 48 41 4c 4c 45 4e 47 45 20 20 20 20 20 30 _CHALLENGE 0 0660: 78 38 34 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x84.#define GSCI 0670: 53 5f 49 4e 53 54 52 5f 49 4e 54 45 52 4e 41 4c S_INSTR_INTERNAL 0680: 5f 41 55 54 48 20 20 20 20 20 30 78 38 38 0a 23 _AUTH 0x88.# 0690: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 define GSCIS_INS 06a0: 54 52 5f 56 45 52 49 46 59 20 20 20 20 20 20 20 TR_VERIFY 06b0: 20 20 20 20 20 30 78 32 30 0a 23 64 65 66 69 6e 0x20.#defin 06c0: 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 49 e GSCIS_INSTR_SI 06d0: 47 4e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 GN 06e0: 30 78 32 41 0a 23 64 65 66 69 6e 65 20 47 53 43 0x2A.#define GSC 06f0: 49 53 5f 49 4e 53 54 52 5f 47 45 54 5f 50 52 4f IS_INSTR_GET_PRO 0700: 50 20 20 20 20 20 20 20 20 20 20 30 78 35 36 0a P 0x56. 0710: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e #define GSCIS_IN 0720: 53 54 52 5f 47 45 54 5f 41 43 52 20 20 20 20 20 STR_GET_ACR 0730: 20 20 20 20 20 20 30 78 34 43 0a 23 64 65 66 69 0x4C.#defi 0740: 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 52 ne GSCIS_INSTR_R 0750: 45 41 44 5f 42 55 46 46 45 52 20 20 20 20 20 20 EAD_BUFFER 0760: 20 30 78 35 32 0a 23 64 65 66 69 6e 65 20 47 53 0x52.#define GS 0770: 43 49 53 5f 49 4e 53 54 52 5f 53 49 47 4e 44 45 CIS_INSTR_SIGNDE 0780: 43 52 59 50 54 20 20 20 20 20 20 20 30 78 34 32 CRYPT 0x42 0790: 0a 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f ..#define GSCIS_ 07a0: 50 41 52 41 4d 5f 53 45 4c 45 43 54 5f 41 50 50 PARAM_SELECT_APP 07b0: 4c 45 54 20 20 20 20 20 30 78 30 34 0a 0a 2f 2a LET 0x04../* 07c0: 20 43 43 43 20 2a 2f 0a 23 64 65 66 69 6e 65 20 CCC */.#define 07d0: 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44 GSCIS_TAG_CARDID 07e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 0x 07f0: 46 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 F0.#define GSCIS 0800: 5f 54 41 47 5f 43 43 43 5f 56 45 52 20 20 20 20 _TAG_CCC_VER 0810: 20 20 20 20 20 20 20 20 20 30 78 46 31 0a 23 64 0xF1.#d 0820: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0830: 43 43 47 5f 56 45 52 20 20 20 20 20 20 20 20 20 CCG_VER 0840: 20 20 20 20 30 78 46 32 0a 23 64 65 66 69 6e 65 0xF2.#define 0850: 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 55 GSCIS_TAG_CARDU 0860: 52 4c 20 20 20 20 20 20 20 20 20 20 20 20 20 30 RL 0 0870: 78 46 33 0a 23 64 65 66 69 6e 65 20 47 53 43 49 xF3.#define GSCI 0880: 53 5f 54 41 47 5f 50 4b 43 53 31 35 20 20 20 20 S_TAG_PKCS15 0890: 20 20 20 20 20 20 20 20 20 20 30 78 46 34 0a 23 0xF4.# 08a0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 08b0: 5f 52 45 47 5f 44 41 54 41 5f 4d 4f 44 45 4c 20 _REG_DATA_MODEL 08c0: 20 20 20 20 20 30 78 46 35 0a 23 64 65 66 69 6e 0xF5.#defin 08d0: 65 20 47 53 43 49 53 5f 54 41 47 5f 41 43 52 5f e GSCIS_TAG_ACR_ 08e0: 54 41 42 4c 45 20 20 20 20 20 20 20 20 20 20 20 TABLE 08f0: 30 78 46 36 0a 23 64 65 66 69 6e 65 20 47 53 43 0xF6.#define GSC 0900: 49 53 5f 54 41 47 5f 43 41 52 44 5f 41 50 44 55 IS_TAG_CARD_APDU 0910: 20 20 20 20 20 20 20 20 20 20 20 30 78 46 37 0a 0xF7. 0920: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0930: 47 5f 52 45 44 49 52 45 43 54 49 4f 4e 20 20 20 G_REDIRECTION 0940: 20 20 20 20 20 20 30 78 46 41 0a 23 64 65 66 69 0xFA.#defi 0950: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 54 20 ne GSCIS_TAG_CT 0960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0970: 20 30 78 46 42 0a 23 64 65 66 69 6e 65 20 47 53 0xFB.#define GS 0980: 43 49 53 5f 54 41 47 5f 53 54 20 20 20 20 20 20 CIS_TAG_ST 0990: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 46 43 0xFC 09a0: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 09b0: 41 47 5f 4e 45 58 54 43 43 43 20 20 20 20 20 20 AG_NEXTCCC 09c0: 20 20 20 20 20 20 20 30 78 46 44 0a 0a 2f 2a 20 0xFD../* 09d0: 47 65 6e 65 72 61 6c 20 2d 20 45 46 20 32 32 30 General - EF 220 09e0: 30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 43 0 */.#define GSC 09f0: 49 53 5f 54 41 47 5f 46 4e 41 4d 45 20 20 20 20 IS_TAG_FNAME 0a00: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 31 0a 0x01. 0a10: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0a20: 47 5f 4d 4e 41 4d 45 20 20 20 20 20 20 20 20 20 G_MNAME 0a30: 20 20 20 20 20 20 30 78 30 32 0a 23 64 65 66 69 0x02.#defi 0a40: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4c 4e 41 ne GSCIS_TAG_LNA 0a50: 4d 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ME 0a60: 20 30 78 30 33 0a 23 64 65 66 69 6e 65 20 47 53 0x03.#define GS 0a70: 43 49 53 5f 54 41 47 5f 53 55 46 46 49 58 20 20 CIS_TAG_SUFFIX 0a80: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30 34 0x04 0a90: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0aa0: 41 47 5f 47 4f 56 54 5f 41 47 45 4e 43 59 20 20 AG_GOVT_AGENCY 0ab0: 20 20 20 20 20 20 20 30 78 30 35 0a 23 64 65 66 0x05.#def 0ac0: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 ine GSCIS_TAG_BU 0ad0: 52 45 41 55 20 20 20 20 20 20 20 20 20 20 20 20 REAU 0ae0: 20 20 30 78 30 36 0a 23 64 65 66 69 6e 65 20 47 0x06.#define G 0af0: 53 43 49 53 5f 54 41 47 5f 42 55 52 45 41 55 5f SCIS_TAG_BUREAU_ 0b00: 43 4f 44 45 20 20 20 20 20 20 20 20 20 30 78 30 CODE 0x0 0b10: 37 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 7.#define GSCIS_ 0b20: 54 41 47 5f 44 45 50 54 5f 43 4f 44 45 20 20 20 TAG_DEPT_CODE 0b30: 20 20 20 20 20 20 20 20 30 78 30 38 0a 23 64 65 0x08.#de 0b40: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 54 fine GSCIS_TAG_T 0b50: 49 54 4c 45 20 20 20 20 20 20 20 20 20 20 20 20 ITLE 0b60: 20 20 20 30 78 30 39 0a 23 64 65 66 69 6e 65 20 0x09.#define 0b70: 47 53 43 49 53 5f 54 41 47 5f 42 55 49 4c 44 49 GSCIS_TAG_BUILDI 0b80: 4e 47 20 20 20 20 20 20 20 20 20 20 20 20 30 78 NG 0x 0b90: 31 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 10.#define GSCIS 0ba0: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 _TAG_OFFICE_ADDR 0bb0: 31 20 20 20 20 20 20 20 20 30 78 31 31 0a 23 64 1 0x11.#d 0bc0: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0bd0: 4f 46 46 49 43 45 5f 41 44 44 52 32 20 20 20 20 OFFICE_ADDR2 0be0: 20 20 20 20 30 78 31 32 0a 23 64 65 66 69 6e 65 0x12.#define 0bf0: 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 GSCIS_TAG_OFFIC 0c00: 45 5f 43 49 54 59 20 20 20 20 20 20 20 20 20 30 E_CITY 0 0c10: 78 31 33 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x13.#define GSCI 0c20: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 53 54 41 S_TAG_OFFICE_STA 0c30: 54 45 20 20 20 20 20 20 20 20 30 78 31 34 0a 23 TE 0x14.# 0c40: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0c50: 5f 4f 46 46 49 43 45 5f 5a 49 50 20 20 20 20 20 _OFFICE_ZIP 0c60: 20 20 20 20 20 30 78 31 35 0a 23 64 65 66 69 6e 0x15.#defin 0c70: 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 e GSCIS_TAG_OFFI 0c80: 43 45 5f 43 4f 55 4e 54 52 59 20 20 20 20 20 20 CE_COUNTRY 0c90: 30 78 31 36 0a 23 64 65 66 69 6e 65 20 47 53 43 0x16.#define GSC 0ca0: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 IS_TAG_OFFICE_PH 0cb0: 4f 4e 45 20 20 20 20 20 20 20 20 30 78 31 37 0a ONE 0x17. 0cc0: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0cd0: 47 5f 4f 46 46 49 43 45 5f 50 48 4f 4e 45 5f 45 G_OFFICE_PHONE_E 0ce0: 58 54 20 20 20 20 30 78 31 38 0a 23 64 65 66 69 XT 0x18.#defi 0cf0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 ne GSCIS_TAG_OFF 0d00: 49 43 45 5f 46 41 58 20 20 20 20 20 20 20 20 20 ICE_FAX 0d10: 20 30 78 31 39 0a 23 64 65 66 69 6e 65 20 47 53 0x19.#define GS 0d20: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 45 CIS_TAG_OFFICE_E 0d30: 4d 41 49 4c 20 20 20 20 20 20 20 20 30 78 31 41 MAIL 0x1A 0d40: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0d50: 41 47 5f 4f 46 46 49 43 45 5f 52 4f 4f 4d 20 20 AG_OFFICE_ROOM 0d60: 20 20 20 20 20 20 20 30 78 31 42 0a 23 64 65 66 0x1B.#def 0d70: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4e 4f ine GSCIS_TAG_NO 0d80: 4e 47 4f 56 5f 41 47 45 4e 43 59 20 20 20 20 20 NGOV_AGENCY 0d90: 20 20 30 78 31 43 0a 23 64 65 66 69 6e 65 20 47 0x1C.#define G 0da0: 53 43 49 53 5f 54 41 47 5f 53 53 4e 5f 44 45 53 SCIS_TAG_SSN_DES 0db0: 49 47 4e 41 54 4f 52 20 20 20 20 20 20 30 78 31 IGNATOR 0x1 0dc0: 44 0a 0a 2f 2a 20 50 49 49 20 2d 20 45 46 20 32 D../* PII - EF 2 0dd0: 31 30 30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 47 100 */.#define G 0de0: 53 43 49 53 5f 54 41 47 5f 53 53 4e 20 20 20 20 SCIS_TAG_SSN 0df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 32 0x2 0e00: 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 0.#define GSCIS_ 0e10: 54 41 47 5f 44 4f 42 20 20 20 20 20 20 20 20 20 TAG_DOB 0e20: 20 20 20 20 20 20 20 20 30 78 32 31 0a 23 64 65 0x21.#de 0e30: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 47 fine GSCIS_TAG_G 0e40: 45 4e 44 45 52 20 20 20 20 20 20 20 20 20 20 20 ENDER 0e50: 20 20 20 30 78 32 32 0a 0a 2f 2a 20 4c 6f 67 69 0x22../* Logi 0e60: 6e 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 2d 20 n Information - 0e70: 45 46 20 34 30 30 30 20 2a 2f 0a 23 64 65 66 69 EF 4000 */.#defi 0e80: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 55 53 45 ne GSCIS_TAG_USE 0e90: 52 49 44 20 20 20 20 20 20 20 20 20 20 20 20 20 RID 0ea0: 20 30 78 34 30 0a 23 64 65 66 69 6e 65 20 47 53 0x40.#define GS 0eb0: 43 49 53 5f 54 41 47 5f 44 4f 4d 41 49 4e 20 20 CIS_TAG_DOMAIN 0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 34 31 0x41 0ed0: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0ee0: 41 47 5f 50 41 53 53 57 4f 52 44 20 20 20 20 20 AG_PASSWORD 0ef0: 20 20 20 20 20 20 20 30 78 34 32 0a 0a 2f 2a 20 0x42../* 0f00: 43 61 72 64 20 49 6e 66 6f 72 6d 61 74 69 6f 6e Card Information 0f10: 20 2d 20 45 46 20 35 30 30 30 20 2a 2f 0a 23 64 - EF 5000 */.#d 0f20: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0f30: 49 53 53 55 45 52 49 44 20 20 20 20 20 20 20 20 ISSUERID 0f40: 20 20 20 20 30 78 35 30 0a 23 64 65 66 69 6e 65 0x50.#define 0f50: 20 47 53 43 49 53 5f 54 41 47 5f 53 45 52 4e 4f GSCIS_TAG_SERNO 0f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0 0f70: 78 35 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x51.#define GSCI 0f80: 53 5f 54 41 47 5f 49 53 53 55 45 5f 44 41 54 45 S_TAG_ISSUE_DATE 0f90: 20 20 20 20 20 20 20 20 20 20 30 78 35 32 0a 23 0x52.# 0fa0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0fb0: 5f 45 58 50 49 52 45 5f 44 41 54 45 20 20 20 20 _EXPIRE_DATE 0fc0: 20 20 20 20 20 30 78 35 33 0a 23 64 65 66 69 6e 0x53.#defin 0fd0: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 e GSCIS_TAG_CARD 0fe0: 5f 54 59 50 45 20 20 20 20 20 20 20 20 20 20 20 _TYPE 0ff0: 30 78 35 34 0a 23 64 65 66 69 6e 65 20 47 53 43 0x54.#define GSC 1000: 49 53 5f 54 41 47 5f 53 45 43 55 52 49 54 59 5f IS_TAG_SECURITY_ 1010: 43 4f 44 45 20 20 20 20 20 20 20 30 78 35 37 0a CODE 0x57. 1020: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 1030: 47 5f 43 41 52 44 49 44 5f 41 49 44 20 20 20 20 G_CARDID_AID 1040: 20 20 20 20 20 20 30 78 35 38 0a 0a 2f 2a 20 50 0x58../* P 1050: 4b 49 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 2d KI Information - 1060: 20 45 46 20 37 30 30 30 20 2a 2f 0a 23 64 65 66 EF 7000 */.#def 1070: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45 ine GSCIS_TAG_CE 1080: 52 54 49 46 49 43 41 54 45 20 20 20 20 20 20 20 RTIFICATE 1090: 20 20 30 78 37 30 0a 23 64 65 66 69 6e 65 20 47 0x70.#define G 10a0: 53 43 49 53 5f 54 41 47 5f 43 45 52 54 5f 49 53 SCIS_TAG_CERT_IS 10b0: 53 55 45 5f 44 41 54 45 20 20 20 20 20 30 78 37 SUE_DATE 0x7 10c0: 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 1.#define GSCIS_ 10d0: 54 41 47 5f 43 45 52 54 5f 45 58 50 49 52 45 5f TAG_CERT_EXPIRE_ 10e0: 44 41 54 45 20 20 20 20 30 78 37 32 0a 0a 23 69 DATE 0x72..#i 10f0: 66 64 65 66 20 43 41 43 4b 45 59 5f 44 45 42 55 fdef CACKEY_DEBU 1100: 47 0a 23 20 20 69 66 64 65 66 20 48 41 56 45 5f G.# ifdef HAVE_ 1110: 53 54 44 49 4f 5f 48 0a 23 20 20 20 20 69 6e 63 STDIO_H.# inc 1120: 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 lude <stdio.h>.# 1130: 20 20 65 6e 64 69 66 0a 0a 23 20 20 64 65 66 69 endif..# defi 1140: 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ne CACKEY_DEBUG_ 1150: 50 52 49 4e 54 46 28 78 2e 2e 2e 29 20 7b 20 66 PRINTF(x...) { f 1160: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 printf(stderr, " 1170: 25 73 28 29 3a 20 22 2c 20 5f 5f 66 75 6e 63 5f %s(): ", __func_ 1180: 5f 29 3b 20 66 70 72 69 6e 74 66 28 73 74 64 65 _); fprintf(stde 1190: 72 72 2c 20 78 29 3b 20 66 70 72 69 6e 74 66 28 rr, x); fprintf( 11a0: 73 74 64 65 72 72 2c 20 22 5c 6e 22 29 3b 20 7d stderr, "\n"); } 11b0: 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 .# define CACKE 11c0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 Y_DEBUG_PRINTBUF 11d0: 28 66 2c 20 78 2c 20 79 29 20 7b 20 75 6e 73 69 (f, x, y) { unsi 11e0: 67 6e 65 64 20 63 68 61 72 20 2a 62 75 66 3b 20 gned char *buf; 11f0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 unsigned long id 1200: 78 3b 20 62 75 66 20 3d 20 28 75 6e 73 69 67 6e x; buf = (unsign 1210: 65 64 20 63 68 61 72 20 2a 29 20 28 78 29 3b 20 ed char *) (x); 1220: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 fprintf(stderr, 1230: 22 25 73 28 29 3a 20 25 73 20 20 28 25 73 2f 25 "%s(): %s (%s/% 1240: 6c 75 20 3d 20 7b 25 30 32 78 22 2c 20 5f 5f 66 lu = {%02x", __f 1250: 75 6e 63 5f 5f 2c 20 66 2c 20 23 78 2c 20 28 75 unc__, f, #x, (u 1260: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 79 nsigned long) (y 1270: 29 2c 20 62 75 66 5b 30 5d 29 3b 20 66 6f 72 20 ), buf[0]); for 1280: 28 69 64 78 20 3d 20 31 3b 20 69 64 78 20 3c 20 (idx = 1; idx < 1290: 28 79 29 3b 20 69 64 78 2b 2b 29 20 7b 20 66 70 (y); idx++) { fp 12a0: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 2c rintf(stderr, ", 12b0: 20 25 30 32 78 22 2c 20 62 75 66 5b 69 64 78 5d %02x", buf[idx] 12c0: 29 3b 20 7d 3b 20 66 70 72 69 6e 74 66 28 73 74 ); }; fprintf(st 12d0: 64 65 72 72 2c 20 22 7d 29 5c 6e 22 29 3b 20 7d derr, "})\n"); } 12e0: 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 .# define CACKE 12f0: 59 5f 44 45 42 55 47 5f 50 45 52 52 4f 52 28 78 Y_DEBUG_PERROR(x 1300: 29 20 7b 20 66 70 72 69 6e 74 66 28 73 74 64 65 ) { fprintf(stde 1310: 72 72 2c 20 22 25 73 28 29 3a 20 22 2c 20 5f 5f rr, "%s(): ", __ 1320: 66 75 6e 63 5f 5f 29 3b 20 70 65 72 72 6f 72 28 func__); perror( 1330: 78 29 3b 20 7d 0a 23 20 20 64 65 66 69 6e 65 20 x); }.# define 1340: 66 72 65 65 28 78 29 20 7b 20 43 41 43 4b 45 59 free(x) { CACKEY 1350: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 _DEBUG_PRINTF("F 1360: 52 45 45 28 25 70 29 20 28 25 73 29 22 2c 20 78 REE(%p) (%s)", x 1370: 2c 20 23 78 29 3b 20 66 72 65 65 28 78 29 3b 20 , #x); free(x); 1380: 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 2a }..static void * 1390: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN 13a0: 43 5f 4d 41 4c 4c 4f 43 28 73 69 7a 65 5f 74 20 C_MALLOC(size_t 13b0: 73 69 7a 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 size, const char 13c0: 20 2a 66 75 6e 63 29 20 7b 0a 09 76 6f 69 64 20 *func) {..void 13d0: 2a 72 65 74 76 61 6c 3b 0a 0a 09 72 65 74 76 61 *retval;...retva 13e0: 6c 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 29 l = malloc(size) 13f0: 3b 0a 0a 09 66 70 72 69 6e 74 66 28 73 74 64 65 ;...fprintf(stde 1400: 72 72 2c 20 22 25 73 28 29 3a 20 22 2c 20 66 75 rr, "%s(): ", fu 1410: 6e 63 29 3b 0a 09 66 70 72 69 6e 74 66 28 73 74 nc);..fprintf(st 1420: 64 65 72 72 2c 20 22 4d 41 4c 4c 4f 43 28 29 20 derr, "MALLOC() 1430: 3d 20 25 70 22 2c 20 72 65 74 76 61 6c 29 3b 0a = %p", retval);. 1440: 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c .fprintf(stderr, 1450: 20 22 5c 6e 22 29 3b 0a 0a 09 72 65 74 75 72 6e "\n");...return 1460: 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61 (retval);.}..sta 1470: 74 69 63 20 76 6f 69 64 20 2a 43 41 43 4b 45 59 tic void *CACKEY 1480: 5f 44 45 42 55 47 5f 46 55 4e 43 5f 52 45 41 4c _DEBUG_FUNC_REAL 1490: 4c 4f 43 28 76 6f 69 64 20 2a 70 74 72 2c 20 73 LOC(void *ptr, s 14a0: 69 7a 65 5f 74 20 73 69 7a 65 2c 20 63 6f 6e 73 ize_t size, cons 14b0: 74 20 63 68 61 72 20 2a 66 75 6e 63 29 20 7b 0a t char *func) {. 14c0: 09 76 6f 69 64 20 2a 72 65 74 76 61 6c 3b 0a 0a .void *retval;.. 14d0: 09 72 65 74 76 61 6c 20 3d 20 72 65 61 6c 6c 6f .retval = reallo 14e0: 63 28 70 74 72 2c 20 73 69 7a 65 29 3b 0a 0a 09 c(ptr, size);... 14f0: 69 66 20 28 72 65 74 76 61 6c 20 21 3d 20 70 74 if (retval != pt 1500: 72 29 20 7b 0a 09 09 66 70 72 69 6e 74 66 28 73 r) {...fprintf(s 1510: 74 64 65 72 72 2c 20 22 25 73 28 29 3a 20 22 2c tderr, "%s(): ", 1520: 20 66 75 6e 63 29 3b 0a 09 09 66 70 72 69 6e 74 func);...fprint 1530: 66 28 73 74 64 65 72 72 2c 20 22 52 45 41 4c 4c f(stderr, "REALL 1540: 4f 43 28 25 70 29 20 3d 20 25 70 22 2c 20 70 74 OC(%p) = %p", pt 1550: 72 2c 20 72 65 74 76 61 6c 29 3b 0a 09 09 66 70 r, retval);...fp 1560: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 5c rintf(stderr, "\ 1570: 6e 22 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e n");..}...return 1580: 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61 (retval);.}..sta 1590: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a tic const char * 15a0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN 15b0: 43 5f 54 41 47 5f 54 4f 5f 53 54 52 28 75 6e 73 C_TAG_TO_STR(uns 15c0: 69 67 6e 65 64 20 63 68 61 72 20 74 61 67 29 20 igned char tag) 15d0: 7b 0a 09 73 77 69 74 63 68 20 28 74 61 67 29 20 {..switch (tag) 15e0: 7b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 {...case GSCIS_T 15f0: 41 47 5f 43 41 52 44 49 44 3a 0a 09 09 09 72 65 AG_CARDID:....re 1600: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1610: 43 41 52 44 49 44 22 29 3b 0a 09 09 63 61 73 65 CARDID");...case 1620: 20 47 53 43 49 53 5f 54 41 47 5f 43 43 43 5f 56 GSCIS_TAG_CCC_V 1630: 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 ER:....return("G 1640: 53 43 49 53 5f 54 41 47 5f 43 43 43 5f 56 45 52 SCIS_TAG_CCC_VER 1650: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 1660: 5f 54 41 47 5f 43 43 47 5f 56 45 52 3a 0a 09 09 _TAG_CCG_VER:... 1670: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 1680: 41 47 5f 43 43 47 5f 56 45 52 22 29 3b 0a 09 09 AG_CCG_VER");... 1690: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 case GSCIS_TAG_C 16a0: 41 52 44 55 52 4c 3a 0a 09 09 09 72 65 74 75 72 ARDURL:....retur 16b0: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 43 41 52 n("GSCIS_TAG_CAR 16c0: 44 55 52 4c 22 29 3b 0a 09 09 63 61 73 65 20 47 DURL");...case G 16d0: 53 43 49 53 5f 54 41 47 5f 50 4b 43 53 31 35 3a SCIS_TAG_PKCS15: 16e0: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 16f0: 53 5f 54 41 47 5f 50 4b 43 53 31 35 22 29 3b 0a S_TAG_PKCS15");. 1700: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 1710: 5f 52 45 47 5f 44 41 54 41 5f 4d 4f 44 45 4c 3a _REG_DATA_MODEL: 1720: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 1730: 53 5f 54 41 47 5f 52 45 47 5f 44 41 54 41 5f 4d S_TAG_REG_DATA_M 1740: 4f 44 45 4c 22 29 3b 0a 09 09 63 61 73 65 20 47 ODEL");...case G 1750: 53 43 49 53 5f 54 41 47 5f 41 43 52 5f 54 41 42 SCIS_TAG_ACR_TAB 1760: 4c 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 LE:....return("G 1770: 53 43 49 53 5f 54 41 47 5f 41 43 52 5f 54 41 42 SCIS_TAG_ACR_TAB 1780: 4c 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 LE");...case GSC 1790: 49 53 5f 54 41 47 5f 43 41 52 44 5f 41 50 44 55 IS_TAG_CARD_APDU 17a0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 17b0: 49 53 5f 54 41 47 5f 43 41 52 44 5f 41 50 44 55 IS_TAG_CARD_APDU 17c0: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 17d0: 5f 54 41 47 5f 52 45 44 49 52 45 43 54 49 4f 4e _TAG_REDIRECTION 17e0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 17f0: 49 53 5f 54 41 47 5f 52 45 44 49 52 45 43 54 49 IS_TAG_REDIRECTI 1800: 4f 4e 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 ON");...case GSC 1810: 49 53 5f 54 41 47 5f 43 54 3a 0a 09 09 09 72 65 IS_TAG_CT:....re 1820: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1830: 43 54 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 CT");...case GSC 1840: 49 53 5f 54 41 47 5f 53 54 3a 0a 09 09 09 72 65 IS_TAG_ST:....re 1850: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1860: 53 54 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 ST");...case GSC 1870: 49 53 5f 54 41 47 5f 4e 45 58 54 43 43 43 3a 0a IS_TAG_NEXTCCC:. 1880: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 1890: 5f 54 41 47 5f 4e 45 58 54 43 43 43 22 29 3b 0a _TAG_NEXTCCC");. 18a0: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 18b0: 5f 46 4e 41 4d 45 3a 0a 09 09 09 72 65 74 75 72 _FNAME:....retur 18c0: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 46 4e 41 n("GSCIS_TAG_FNA 18d0: 4d 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 ME");...case GSC 18e0: 49 53 5f 54 41 47 5f 4d 4e 41 4d 45 3a 0a 09 09 IS_TAG_MNAME:... 18f0: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 1900: 41 47 5f 4d 4e 41 4d 45 22 29 3b 0a 09 09 63 61 AG_MNAME");...ca 1910: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4c 4e 41 se GSCIS_TAG_LNA 1920: 4d 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 ME:....return("G 1930: 53 43 49 53 5f 54 41 47 5f 4c 4e 41 4d 45 22 29 SCIS_TAG_LNAME") 1940: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 1950: 41 47 5f 53 55 46 46 49 58 3a 0a 09 09 09 72 65 AG_SUFFIX:....re 1960: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1970: 53 55 46 46 49 58 22 29 3b 0a 09 09 63 61 73 65 SUFFIX");...case 1980: 20 47 53 43 49 53 5f 54 41 47 5f 47 4f 56 54 5f GSCIS_TAG_GOVT_ 1990: 41 47 45 4e 43 59 3a 0a 09 09 09 72 65 74 75 72 AGENCY:....retur 19a0: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 47 4f 56 n("GSCIS_TAG_GOV 19b0: 54 5f 41 47 45 4e 43 59 22 29 3b 0a 09 09 63 61 T_AGENCY");...ca 19c0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 52 se GSCIS_TAG_BUR 19d0: 45 41 55 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 EAU:....return(" 19e0: 47 53 43 49 53 5f 54 41 47 5f 42 55 52 45 41 55 GSCIS_TAG_BUREAU 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 42 55 52 45 41 55 5f 43 4f 44 45 _TAG_BUREAU_CODE 1a10: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 1a20: 49 53 5f 54 41 47 5f 42 55 52 45 41 55 5f 43 4f IS_TAG_BUREAU_CO 1a30: 44 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 DE");...case GSC 1a40: 49 53 5f 54 41 47 5f 44 45 50 54 5f 43 4f 44 45 IS_TAG_DEPT_CODE 1a50: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 1a60: 49 53 5f 54 41 47 5f 44 45 50 54 5f 43 4f 44 45 IS_TAG_DEPT_CODE 1a70: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 1a80: 5f 54 41 47 5f 54 49 54 4c 45 3a 0a 09 09 09 72 _TAG_TITLE:....r 1a90: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 1aa0: 5f 54 49 54 4c 45 22 29 3b 0a 09 09 63 61 73 65 _TITLE");...case 1ab0: 20 47 53 43 49 53 5f 54 41 47 5f 42 55 49 4c 44 GSCIS_TAG_BUILD 1ac0: 49 4e 47 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 ING:....return(" 1ad0: 47 53 43 49 53 5f 54 41 47 5f 42 55 49 4c 44 49 GSCIS_TAG_BUILDI 1ae0: 4e 47 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 NG");...case GSC 1af0: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 IS_TAG_OFFICE_AD 1b00: 44 52 31 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 DR1:....return(" 1b10: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 1b20: 5f 41 44 44 52 31 22 29 3b 0a 09 09 63 61 73 65 _ADDR1");...case 1b30: 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 GSCIS_TAG_OFFIC 1b40: 45 5f 41 44 44 52 32 3a 0a 09 09 09 72 65 74 75 E_ADDR2:....retu 1b50: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 rn("GSCIS_TAG_OF 1b60: 46 49 43 45 5f 41 44 44 52 32 22 29 3b 0a 09 09 FICE_ADDR2");... 1b70: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f case GSCIS_TAG_O 1b80: 46 46 49 43 45 5f 43 49 54 59 3a 0a 09 09 09 72 FFICE_CITY:....r 1b90: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 1ba0: 5f 4f 46 46 49 43 45 5f 43 49 54 59 22 29 3b 0a _OFFICE_CITY");. 1bb0: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 1bc0: 5f 4f 46 46 49 43 45 5f 53 54 41 54 45 3a 0a 09 _OFFICE_STATE:.. 1bd0: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 1be0: 54 41 47 5f 4f 46 46 49 43 45 5f 53 54 41 54 45 TAG_OFFICE_STATE 1bf0: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 1c00: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 5a 49 50 3a _TAG_OFFICE_ZIP: 1c10: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 1c20: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 5a 49 50 S_TAG_OFFICE_ZIP 1c30: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 1c40: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 43 4f 55 4e _TAG_OFFICE_COUN 1c50: 54 52 59 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 TRY:....return(" 1c60: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 1c70: 5f 43 4f 55 4e 54 52 59 22 29 3b 0a 09 09 63 61 _COUNTRY");...ca 1c80: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 se GSCIS_TAG_OFF 1c90: 49 43 45 5f 50 48 4f 4e 45 3a 0a 09 09 09 72 65 ICE_PHONE:....re 1ca0: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1cb0: 4f 46 46 49 43 45 5f 50 48 4f 4e 45 22 29 3b 0a OFFICE_PHONE");. 1cc0: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 1cd0: 5f 4f 46 46 49 43 45 5f 50 48 4f 4e 45 5f 45 58 _OFFICE_PHONE_EX 1ce0: 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 T:....return("GS 1cf0: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 CIS_TAG_OFFICE_P 1d00: 48 4f 4e 45 5f 45 58 54 22 29 3b 0a 09 09 63 61 HONE_EXT");...ca 1d10: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 se GSCIS_TAG_OFF 1d20: 49 43 45 5f 46 41 58 3a 0a 09 09 09 72 65 74 75 ICE_FAX:....retu 1d30: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 rn("GSCIS_TAG_OF 1d40: 46 49 43 45 5f 46 41 58 22 29 3b 0a 09 09 63 61 FICE_FAX");...ca 1d50: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 se GSCIS_TAG_OFF 1d60: 49 43 45 5f 45 4d 41 49 4c 3a 0a 09 09 09 72 65 ICE_EMAIL:....re 1d70: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1d80: 4f 46 46 49 43 45 5f 45 4d 41 49 4c 22 29 3b 0a OFFICE_EMAIL");. 1d90: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 1da0: 5f 4f 46 46 49 43 45 5f 52 4f 4f 4d 3a 0a 09 09 _OFFICE_ROOM:... 1db0: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 1dc0: 41 47 5f 4f 46 46 49 43 45 5f 52 4f 4f 4d 22 29 AG_OFFICE_ROOM") 1dd0: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 1de0: 41 47 5f 4e 4f 4e 47 4f 56 5f 41 47 45 4e 43 59 AG_NONGOV_AGENCY 1df0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 1e00: 49 53 5f 54 41 47 5f 4e 4f 4e 47 4f 56 5f 41 47 IS_TAG_NONGOV_AG 1e10: 45 4e 43 59 22 29 3b 0a 09 09 63 61 73 65 20 47 ENCY");...case G 1e20: 53 43 49 53 5f 54 41 47 5f 53 53 4e 5f 44 45 53 SCIS_TAG_SSN_DES 1e30: 49 47 4e 41 54 4f 52 3a 0a 09 09 09 72 65 74 75 IGNATOR:....retu 1e40: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 53 53 rn("GSCIS_TAG_SS 1e50: 4e 5f 44 45 53 49 47 4e 41 54 4f 52 22 29 3b 0a N_DESIGNATOR");. 1e60: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 1e70: 5f 53 53 4e 3a 0a 09 09 09 72 65 74 75 72 6e 28 _SSN:....return( 1e80: 22 47 53 43 49 53 5f 54 41 47 5f 53 53 4e 22 29 "GSCIS_TAG_SSN") 1e90: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 1ea0: 41 47 5f 44 4f 42 3a 0a 09 09 09 72 65 74 75 72 AG_DOB:....retur 1eb0: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 44 4f 42 n("GSCIS_TAG_DOB 1ec0: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 1ed0: 5f 54 41 47 5f 47 45 4e 44 45 52 3a 0a 09 09 09 _TAG_GENDER:.... 1ee0: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1ef0: 47 5f 47 45 4e 44 45 52 22 29 3b 0a 09 09 63 61 G_GENDER");...ca 1f00: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 55 53 45 se GSCIS_TAG_USE 1f10: 52 49 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 RID:....return(" 1f20: 47 53 43 49 53 5f 54 41 47 5f 55 53 45 52 49 44 GSCIS_TAG_USERID 1f30: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 1f40: 5f 54 41 47 5f 44 4f 4d 41 49 4e 3a 0a 09 09 09 _TAG_DOMAIN:.... 1f50: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1f60: 47 5f 44 4f 4d 41 49 4e 22 29 3b 0a 09 09 63 61 G_DOMAIN");...ca 1f70: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 50 41 53 se GSCIS_TAG_PAS 1f80: 53 57 4f 52 44 3a 0a 09 09 09 72 65 74 75 72 6e SWORD:....return 1f90: 28 22 47 53 43 49 53 5f 54 41 47 5f 50 41 53 53 ("GSCIS_TAG_PASS 1fa0: 57 4f 52 44 22 29 3b 0a 09 09 63 61 73 65 20 47 WORD");...case G 1fb0: 53 43 49 53 5f 54 41 47 5f 49 53 53 55 45 52 49 SCIS_TAG_ISSUERI 1fc0: 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 D:....return("GS 1fd0: 43 49 53 5f 54 41 47 5f 49 53 53 55 45 52 49 44 CIS_TAG_ISSUERID 1fe0: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 1ff0: 5f 54 41 47 5f 53 45 52 4e 4f 3a 0a 09 09 09 72 _TAG_SERNO:....r 2000: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 2010: 5f 53 45 52 4e 4f 22 29 3b 0a 09 09 63 61 73 65 _SERNO");...case 2020: 20 47 53 43 49 53 5f 54 41 47 5f 49 53 53 55 45 GSCIS_TAG_ISSUE 2030: 5f 44 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e _DATE:....return 2040: 28 22 47 53 43 49 53 5f 54 41 47 5f 49 53 53 55 ("GSCIS_TAG_ISSU 2050: 45 5f 44 41 54 45 22 29 3b 0a 09 09 63 61 73 65 E_DATE");...case 2060: 20 47 53 43 49 53 5f 54 41 47 5f 45 58 50 49 52 GSCIS_TAG_EXPIR 2070: 45 5f 44 41 54 45 3a 0a 09 09 09 72 65 74 75 72 E_DATE:....retur 2080: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 45 58 50 n("GSCIS_TAG_EXP 2090: 49 52 45 5f 44 41 54 45 22 29 3b 0a 09 09 63 61 IRE_DATE");...ca 20a0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 se GSCIS_TAG_CAR 20b0: 44 5f 54 59 50 45 3a 0a 09 09 09 72 65 74 75 72 D_TYPE:....retur 20c0: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 43 41 52 n("GSCIS_TAG_CAR 20d0: 44 5f 54 59 50 45 22 29 3b 0a 09 09 63 61 73 65 D_TYPE");...case 20e0: 20 47 53 43 49 53 5f 54 41 47 5f 53 45 43 55 52 GSCIS_TAG_SECUR 20f0: 49 54 59 5f 43 4f 44 45 3a 0a 09 09 09 72 65 74 ITY_CODE:....ret 2100: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 53 urn("GSCIS_TAG_S 2110: 45 43 55 52 49 54 59 5f 43 4f 44 45 22 29 3b 0a ECURITY_CODE");. 2120: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 2130: 5f 43 41 52 44 49 44 5f 41 49 44 3a 0a 09 09 09 _CARDID_AID:.... 2140: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 2150: 47 5f 43 41 52 44 49 44 5f 41 49 44 22 29 3b 0a G_CARDID_AID");. 2160: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 2170: 5f 43 45 52 54 49 46 49 43 41 54 45 3a 0a 09 09 _CERTIFICATE:... 2180: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 2190: 41 47 5f 43 45 52 54 49 46 49 43 41 54 45 22 29 AG_CERTIFICATE") 21a0: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 21b0: 41 47 5f 43 45 52 54 5f 49 53 53 55 45 5f 44 41 AG_CERT_ISSUE_DA 21c0: 54 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 TE:....return("G 21d0: 53 43 49 53 5f 54 41 47 5f 43 45 52 54 5f 49 53 SCIS_TAG_CERT_IS 21e0: 53 55 45 5f 44 41 54 45 22 29 3b 0a 09 09 63 61 SUE_DATE");...ca 21f0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 se GSCIS_TAG_CER 2200: 54 5f 45 58 50 49 52 45 5f 44 41 54 45 3a 0a 09 T_EXPIRE_DATE:.. 2210: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 2220: 54 41 47 5f 43 45 52 54 5f 45 58 50 49 52 45 5f TAG_CERT_EXPIRE_ 2230: 44 41 54 45 22 29 3b 0a 09 7d 0a 0a 09 72 65 74 DATE");..}...ret 2240: 75 72 6e 28 22 55 4e 4b 4e 4f 57 4e 22 29 3b 0a urn("UNKNOWN");. 2250: 7d 0a 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 }..static const 2260: 63 68 61 72 20 2a 43 41 43 4b 45 59 5f 44 45 42 char *CACKEY_DEB 2270: 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 UG_FUNC_SCARDERR 2280: 5f 54 4f 5f 53 54 52 28 4c 4f 4e 47 20 72 65 74 _TO_STR(LONG ret 2290: 63 6f 64 65 29 20 7b 0a 09 73 77 69 74 63 68 20 code) {..switch 22a0: 28 72 65 74 63 6f 64 65 29 20 7b 0a 09 09 63 61 (retcode) {...ca 22b0: 73 65 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 se SCARD_S_SUCCE 22c0: 53 53 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 SS:....return("S 22d0: 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 22 29 CARD_S_SUCCESS") 22e0: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 ;...case SCARD_E 22f0: 5f 43 41 4e 43 45 4c 4c 45 44 3a 0a 09 09 09 72 _CANCELLED:....r 2300: 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 43 eturn("SCARD_E_C 2310: 41 4e 43 45 4c 4c 45 44 22 29 3b 0a 09 09 63 61 ANCELLED");...ca 2320: 73 65 20 53 43 41 52 44 5f 45 5f 43 41 4e 54 5f se SCARD_E_CANT_ 2330: 44 49 53 50 4f 53 45 3a 0a 09 09 09 72 65 74 75 DISPOSE:....retu 2340: 72 6e 28 22 53 43 41 52 44 5f 45 5f 43 41 4e 54 rn("SCARD_E_CANT 2350: 5f 44 49 53 50 4f 53 45 22 29 3b 0a 09 09 63 61 _DISPOSE");...ca 2360: 73 65 20 53 43 41 52 44 5f 45 5f 49 4e 53 55 46 se SCARD_E_INSUF 2370: 46 49 43 49 45 4e 54 5f 42 55 46 46 45 52 3a 0a FICIENT_BUFFER:. 2380: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2390: 5f 45 5f 49 4e 53 55 46 46 49 43 49 45 4e 54 5f _E_INSUFFICIENT_ 23a0: 42 55 46 46 45 52 22 29 3b 0a 09 09 63 61 73 65 BUFFER");...case 23b0: 20 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 SCARD_E_INVALID 23c0: 5f 41 54 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 _ATR:....return( 23d0: 22 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 "SCARD_E_INVALID 23e0: 5f 41 54 52 22 29 3b 0a 09 09 63 61 73 65 20 53 _ATR");...case S 23f0: 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 48 CARD_E_INVALID_H 2400: 41 4e 44 4c 45 3a 0a 09 09 09 72 65 74 75 72 6e ANDLE:....return 2410: 28 22 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 ("SCARD_E_INVALI 2420: 44 5f 48 41 4e 44 4c 45 22 29 3b 0a 09 09 63 61 D_HANDLE");...ca 2430: 73 65 20 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c se SCARD_E_INVAL 2440: 49 44 5f 50 41 52 41 4d 45 54 45 52 3a 0a 09 09 ID_PARAMETER:... 2450: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 2460: 5f 49 4e 56 41 4c 49 44 5f 50 41 52 41 4d 45 54 _INVALID_PARAMET 2470: 45 52 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 ER");...case SCA 2480: 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 54 41 52 RD_E_INVALID_TAR 2490: 47 45 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 GET:....return(" 24a0: 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f SCARD_E_INVALID_ 24b0: 54 41 52 47 45 54 22 29 3b 0a 09 09 63 61 73 65 TARGET");...case 24c0: 20 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 SCARD_E_INVALID 24d0: 5f 56 41 4c 55 45 3a 0a 09 09 09 72 65 74 75 72 _VALUE:....retur 24e0: 6e 28 22 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c n("SCARD_E_INVAL 24f0: 49 44 5f 56 41 4c 55 45 22 29 3b 0a 09 09 63 61 ID_VALUE");...ca 2500: 73 65 20 53 43 41 52 44 5f 45 5f 4e 4f 5f 4d 45 se SCARD_E_NO_ME 2510: 4d 4f 52 59 3a 0a 09 09 09 72 65 74 75 72 6e 28 MORY:....return( 2520: 22 53 43 41 52 44 5f 45 5f 4e 4f 5f 4d 45 4d 4f "SCARD_E_NO_MEMO 2530: 52 59 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 RY");...case SCA 2540: 52 44 5f 45 5f 55 4e 4b 4e 4f 57 4e 5f 52 45 41 RD_E_UNKNOWN_REA 2550: 44 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 DER:....return(" 2560: 53 43 41 52 44 5f 45 5f 55 4e 4b 4e 4f 57 4e 5f SCARD_E_UNKNOWN_ 2570: 52 45 41 44 45 52 22 29 3b 0a 09 09 63 61 73 65 READER");...case 2580: 20 53 43 41 52 44 5f 45 5f 54 49 4d 45 4f 55 54 SCARD_E_TIMEOUT 2590: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 :....return("SCA 25a0: 52 44 5f 45 5f 54 49 4d 45 4f 55 54 22 29 3b 0a RD_E_TIMEOUT");. 25b0: 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 53 ..case SCARD_E_S 25c0: 48 41 52 49 4e 47 5f 56 49 4f 4c 41 54 49 4f 4e HARING_VIOLATION 25d0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 :....return("SCA 25e0: 52 44 5f 45 5f 53 48 41 52 49 4e 47 5f 56 49 4f RD_E_SHARING_VIO 25f0: 4c 41 54 49 4f 4e 22 29 3b 0a 09 09 63 61 73 65 LATION");...case 2600: 20 53 43 41 52 44 5f 45 5f 4e 4f 5f 53 4d 41 52 SCARD_E_NO_SMAR 2610: 54 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 6e TCARD:....return 2620: 28 22 53 43 41 52 44 5f 45 5f 4e 4f 5f 53 4d 41 ("SCARD_E_NO_SMA 2630: 52 54 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 RTCARD");...case 2640: 20 53 43 41 52 44 5f 45 5f 55 4e 4b 4e 4f 57 4e SCARD_E_UNKNOWN 2650: 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 6e _CARD:....return 2660: 28 22 53 43 41 52 44 5f 45 5f 55 4e 4b 4e 4f 57 ("SCARD_E_UNKNOW 2670: 4e 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 N_CARD");...case 2680: 20 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f 5f 4d SCARD_E_PROTO_M 2690: 49 53 4d 41 54 43 48 3a 0a 09 09 09 72 65 74 75 ISMATCH:....retu 26a0: 72 6e 28 22 53 43 41 52 44 5f 45 5f 50 52 4f 54 rn("SCARD_E_PROT 26b0: 4f 5f 4d 49 53 4d 41 54 43 48 22 29 3b 0a 09 09 O_MISMATCH");... 26c0: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 4e 4f 54 case SCARD_E_NOT 26d0: 5f 52 45 41 44 59 3a 0a 09 09 09 72 65 74 75 72 _READY:....retur 26e0: 6e 28 22 53 43 41 52 44 5f 45 5f 4e 4f 54 5f 52 n("SCARD_E_NOT_R 26f0: 45 41 44 59 22 29 3b 0a 09 09 63 61 73 65 20 53 EADY");...case S 2700: 43 41 52 44 5f 45 5f 53 59 53 54 45 4d 5f 43 41 CARD_E_SYSTEM_CA 2710: 4e 43 45 4c 4c 45 44 3a 0a 09 09 09 72 65 74 75 NCELLED:....retu 2720: 72 6e 28 22 53 43 41 52 44 5f 45 5f 53 59 53 54 rn("SCARD_E_SYST 2730: 45 4d 5f 43 41 4e 43 45 4c 4c 45 44 22 29 3b 0a EM_CANCELLED");. 2740: 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 4e ..case SCARD_E_N 2750: 4f 54 5f 54 52 41 4e 53 41 43 54 45 44 3a 0a 09 OT_TRANSACTED:.. 2760: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 2770: 45 5f 4e 4f 54 5f 54 52 41 4e 53 41 43 54 45 44 E_NOT_TRANSACTED 2780: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 2790: 5f 45 5f 52 45 41 44 45 52 5f 55 4e 41 56 41 49 _E_READER_UNAVAI 27a0: 4c 41 42 4c 45 3a 0a 09 09 09 72 65 74 75 72 6e LABLE:....return 27b0: 28 22 53 43 41 52 44 5f 45 5f 52 45 41 44 45 52 ("SCARD_E_READER 27c0: 5f 55 4e 41 56 41 49 4c 41 42 4c 45 22 29 3b 0a _UNAVAILABLE");. 27d0: 09 09 63 61 73 65 20 53 43 41 52 44 5f 57 5f 55 ..case SCARD_W_U 27e0: 4e 53 55 50 50 4f 52 54 45 44 5f 43 41 52 44 3a NSUPPORTED_CARD: 27f0: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 2800: 44 5f 57 5f 55 4e 53 55 50 50 4f 52 54 45 44 5f D_W_UNSUPPORTED_ 2810: 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 20 53 CARD");...case S 2820: 43 41 52 44 5f 57 5f 55 4e 52 45 53 50 4f 4e 53 CARD_W_UNRESPONS 2830: 49 56 45 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 IVE_CARD:....ret 2840: 75 72 6e 28 22 53 43 41 52 44 5f 57 5f 55 4e 52 urn("SCARD_W_UNR 2850: 45 53 50 4f 4e 53 49 56 45 5f 43 41 52 44 22 29 ESPONSIVE_CARD") 2860: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 57 ;...case SCARD_W 2870: 5f 55 4e 50 4f 57 45 52 45 44 5f 43 41 52 44 3a _UNPOWERED_CARD: 2880: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 2890: 44 5f 57 5f 55 4e 50 4f 57 45 52 45 44 5f 43 41 D_W_UNPOWERED_CA 28a0: 52 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 RD");...case SCA 28b0: 52 44 5f 57 5f 52 45 53 45 54 5f 43 41 52 44 3a RD_W_RESET_CARD: 28c0: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 28d0: 44 5f 57 5f 52 45 53 45 54 5f 43 41 52 44 22 29 D_W_RESET_CARD") 28e0: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 57 ;...case SCARD_W 28f0: 5f 52 45 4d 4f 56 45 44 5f 43 41 52 44 3a 0a 09 _REMOVED_CARD:.. 2900: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 2910: 57 5f 52 45 4d 4f 56 45 44 5f 43 41 52 44 22 29 W_REMOVED_CARD") 2920: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 ;...case SCARD_E 2930: 5f 50 43 49 5f 54 4f 4f 5f 53 4d 41 4c 4c 3a 0a _PCI_TOO_SMALL:. 2940: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2950: 5f 45 5f 50 43 49 5f 54 4f 4f 5f 53 4d 41 4c 4c _E_PCI_TOO_SMALL 2960: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 2970: 5f 45 5f 52 45 41 44 45 52 5f 55 4e 53 55 50 50 _E_READER_UNSUPP 2980: 4f 52 54 45 44 3a 0a 09 09 09 72 65 74 75 72 6e ORTED:....return 2990: 28 22 53 43 41 52 44 5f 45 5f 52 45 41 44 45 52 ("SCARD_E_READER 29a0: 5f 55 4e 53 55 50 50 4f 52 54 45 44 22 29 3b 0a _UNSUPPORTED");. 29b0: 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 44 ..case SCARD_E_D 29c0: 55 50 4c 49 43 41 54 45 5f 52 45 41 44 45 52 3a UPLICATE_READER: 29d0: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 29e0: 44 5f 45 5f 44 55 50 4c 49 43 41 54 45 5f 52 45 D_E_DUPLICATE_RE 29f0: 41 44 45 52 22 29 3b 0a 09 09 63 61 73 65 20 53 ADER");...case S 2a00: 43 41 52 44 5f 45 5f 43 41 52 44 5f 55 4e 53 55 CARD_E_CARD_UNSU 2a10: 50 50 4f 52 54 45 44 3a 0a 09 09 09 72 65 74 75 PPORTED:....retu 2a20: 72 6e 28 22 53 43 41 52 44 5f 45 5f 43 41 52 44 rn("SCARD_E_CARD 2a30: 5f 55 4e 53 55 50 50 4f 52 54 45 44 22 29 3b 0a _UNSUPPORTED");. 2a40: 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 4e ..case SCARD_E_N 2a50: 4f 5f 53 45 52 56 49 43 45 3a 0a 09 09 09 72 65 O_SERVICE:....re 2a60: 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 4e 4f turn("SCARD_E_NO 2a70: 5f 53 45 52 56 49 43 45 22 29 3b 0a 09 09 63 61 _SERVICE");...ca 2a80: 73 65 20 53 43 41 52 44 5f 45 5f 53 45 52 56 49 se SCARD_E_SERVI 2a90: 43 45 5f 53 54 4f 50 50 45 44 3a 0a 09 09 09 72 CE_STOPPED:....r 2aa0: 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 53 eturn("SCARD_E_S 2ab0: 45 52 56 49 43 45 5f 53 54 4f 50 50 45 44 22 29 ERVICE_STOPPED") 2ac0: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 57 ;...case SCARD_W 2ad0: 5f 49 4e 53 45 52 54 45 44 5f 43 41 52 44 3a 0a _INSERTED_CARD:. 2ae0: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2af0: 5f 57 5f 49 4e 53 45 52 54 45 44 5f 43 41 52 44 _W_INSERTED_CARD 2b00: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 2b10: 5f 45 5f 55 4e 53 55 50 50 4f 52 54 45 44 5f 46 _E_UNSUPPORTED_F 2b20: 45 41 54 55 52 45 3a 0a 09 09 09 72 65 74 75 72 EATURE:....retur 2b30: 6e 28 22 53 43 41 52 44 5f 45 5f 55 4e 53 55 50 n("SCARD_E_UNSUP 2b40: 50 4f 52 54 45 44 5f 46 45 41 54 55 52 45 22 29 PORTED_FEATURE") 2b50: 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 22 55 ;..}...return("U 2b60: 4e 4b 4e 4f 57 4e 22 29 3b 0a 7d 0a 0a 73 74 61 NKNOWN");.}..sta 2b70: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a tic const char * 2b80: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN 2b90: 43 5f 4f 42 4a 49 44 5f 54 4f 5f 53 54 52 28 75 C_OBJID_TO_STR(u 2ba0: 69 6e 74 31 36 5f 74 20 6f 62 6a 69 64 29 20 7b int16_t objid) { 2bb0: 0a 09 73 77 69 74 63 68 20 28 6f 62 6a 69 64 29 ..switch (objid) 2bc0: 20 7b 0a 09 09 63 61 73 65 20 30 78 32 30 30 30 {...case 0x2000 2bd0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 :....return("CAC 2be0: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 47 45 KEY_TLV_OBJID_GE 2bf0: 4e 45 52 41 4c 49 4e 46 4f 22 29 3b 0a 09 09 63 NERALINFO");...c 2c00: 61 73 65 20 30 78 32 31 30 30 3a 0a 09 09 09 72 ase 0x2100:....r 2c10: 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c eturn("CACKEY_TL 2c20: 56 5f 4f 42 4a 49 44 5f 50 52 4f 50 45 52 53 4f V_OBJID_PROPERSO 2c30: 4e 41 4c 49 4e 46 4f 22 29 3b 0a 09 09 63 61 73 NALINFO");...cas 2c40: 65 20 30 78 33 30 30 30 3a 0a 09 09 09 72 65 74 e 0x3000:....ret 2c50: 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f urn("CACKEY_TLV_ 2c60: 4f 42 4a 49 44 5f 41 43 43 45 53 53 43 4f 4e 54 OBJID_ACCESSCONT 2c70: 52 4f 4c 22 29 3b 0a 09 09 63 61 73 65 20 30 78 ROL");...case 0x 2c80: 34 30 30 30 3a 0a 09 09 09 72 65 74 75 72 6e 28 4000:....return( 2c90: 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 "CACKEY_TLV_OBJI 2ca0: 44 5f 4c 4f 47 49 4e 22 29 3b 0a 09 09 63 61 73 D_LOGIN");...cas 2cb0: 65 20 30 78 35 30 30 30 3a 0a 09 09 09 72 65 74 e 0x5000:....ret 2cc0: 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f urn("CACKEY_TLV_ 2cd0: 4f 42 4a 49 44 5f 43 41 52 44 49 4e 46 4f 22 29 OBJID_CARDINFO") 2ce0: 3b 0a 09 09 63 61 73 65 20 30 78 36 30 30 30 3a ;...case 0x6000: 2cf0: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b ....return("CACK 2d00: 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 42 49 4f EY_TLV_OBJID_BIO 2d10: 4d 45 54 52 49 43 53 22 29 3b 0a 09 09 63 61 73 METRICS");...cas 2d20: 65 20 30 78 37 30 30 30 3a 0a 09 09 09 72 65 74 e 0x7000:....ret 2d30: 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f urn("CACKEY_TLV_ 2d40: 4f 42 4a 49 44 5f 44 49 47 49 54 41 4c 53 49 47 OBJID_DIGITALSIG 2d50: 43 45 52 54 22 29 3b 0a 09 09 63 61 73 65 20 30 CERT");...case 0 2d60: 78 30 32 30 30 3a 0a 09 09 09 72 65 74 75 72 6e x0200:....return 2d70: 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a ("CACKEY_TLV_OBJ 2d80: 49 44 5f 43 41 43 5f 50 45 52 53 4f 4e 22 29 3b ID_CAC_PERSON"); 2d90: 0a 09 09 63 61 73 65 20 30 78 30 32 30 32 3a 0a ...case 0x0202:. 2da0: 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 ...return("CACKE 2db0: 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f Y_TLV_OBJID_CAC_ 2dc0: 42 45 4e 45 46 49 54 53 22 29 3b 0a 09 09 63 61 BENEFITS");...ca 2dd0: 73 65 20 30 78 30 32 30 33 3a 0a 09 09 09 72 65 se 0x0203:....re 2de0: 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 turn("CACKEY_TLV 2df0: 5f 4f 42 4a 49 44 5f 43 41 43 5f 4f 54 48 45 52 _OBJID_CAC_OTHER 2e00: 42 45 4e 45 46 49 54 53 22 29 3b 0a 09 09 63 61 BENEFITS");...ca 2e10: 73 65 20 30 78 30 32 30 31 3a 0a 09 09 09 72 65 se 0x0201:....re 2e20: 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 turn("CACKEY_TLV 2e30: 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 45 52 53 4f _OBJID_CAC_PERSO 2e40: 4e 4e 45 4c 22 29 3b 0a 09 09 63 61 73 65 20 30 NNEL");...case 0 2e50: 78 30 32 46 45 3a 0a 09 09 09 72 65 74 75 72 6e x02FE:....return 2e60: 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a ("CACKEY_TLV_OBJ 2e70: 49 44 5f 43 41 43 5f 50 4b 49 43 45 52 54 22 29 ID_CAC_PKICERT") 2e80: 3b 0a 09 7d 0a 09 0a 09 72 65 74 75 72 6e 28 22 ;..}....return(" 2e90: 55 4e 4b 4e 4f 57 4e 22 29 3b 0a 7d 0a 0a 73 74 UNKNOWN");.}..st 2ea0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 atic const char 2eb0: 2a 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 *CACKEY_DEBUG_FU 2ec0: 4e 43 5f 41 50 50 54 59 50 45 5f 54 4f 5f 53 54 NC_APPTYPE_TO_ST 2ed0: 52 28 75 69 6e 74 38 5f 74 20 61 70 70 74 79 70 R(uint8_t apptyp 2ee0: 65 29 20 7b 0a 09 73 77 69 74 63 68 20 28 61 70 e) {..switch (ap 2ef0: 70 74 79 70 65 29 20 7b 0a 09 09 63 61 73 65 20 ptype) {...case 2f00: 30 78 30 31 3a 0a 09 09 09 72 65 74 75 72 6e 28 0x01:....return( 2f10: 22 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f "CACKEY_TLV_APP_ 2f20: 47 45 4e 45 52 49 43 22 29 3b 0a 09 09 63 61 73 GENERIC");...cas 2f30: 65 20 30 78 30 32 3a 0a 09 09 09 72 65 74 75 72 e 0x02:....retur 2f40: 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 n("CACKEY_TLV_AP 2f50: 50 5f 53 4b 49 22 29 3b 0a 09 09 63 61 73 65 20 P_SKI");...case 2f60: 30 78 30 33 3a 0a 09 09 09 72 65 74 75 72 6e 28 0x03:....return( 2f70: 22 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f "CACKEY_TLV_APP_ 2f80: 47 45 4e 45 52 49 43 20 7c 20 43 41 43 4b 45 59 GENERIC | CACKEY 2f90: 5f 54 4c 56 5f 41 50 50 5f 53 4b 49 22 29 3b 0a _TLV_APP_SKI");. 2fa0: 09 09 63 61 73 65 20 30 78 30 34 3a 0a 09 09 09 ..case 0x04:.... 2fb0: 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 return("CACKEY_T 2fc0: 4c 56 5f 41 50 50 5f 50 4b 49 22 29 3b 0a 09 09 LV_APP_PKI");... 2fd0: 63 61 73 65 20 30 78 30 35 3a 0a 09 09 09 72 65 case 0x05:....re 2fe0: 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 turn("CACKEY_TLV 2ff0: 5f 41 50 50 5f 47 45 4e 45 52 49 43 20 7c 20 43 _APP_GENERIC | C 3000: 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b ACKEY_TLV_APP_PK 3010: 49 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 36 I");...case 0x06 3020: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 :....return("CAC 3030: 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 53 4b 49 20 KEY_TLV_APP_SKI 3040: 7c 20 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 | CACKEY_TLV_APP 3050: 5f 50 4b 49 22 29 3b 0a 09 09 63 61 73 65 20 30 _PKI");...case 0 3060: 78 30 37 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 x07:....return(" 3070: 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 47 CACKEY_TLV_APP_G 3080: 45 4e 45 52 49 43 20 7c 20 43 41 43 4b 45 59 5f ENERIC | CACKEY_ 3090: 54 4c 56 5f 41 50 50 5f 53 4b 49 20 7c 20 43 41 TLV_APP_SKI | CA 30a0: 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 CKEY_TLV_APP_PKI 30b0: 22 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 ");..}...return( 30c0: 22 49 4e 56 41 4c 49 44 22 29 3b 0a 7d 0a 0a 23 "INVALID");.}..# 30d0: 20 20 64 65 66 69 6e 65 20 6d 61 6c 6c 6f 63 28 define malloc( 30e0: 78 29 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f x) CACKEY_DEBUG_ 30f0: 46 55 4e 43 5f 4d 41 4c 4c 4f 43 28 78 2c 20 5f FUNC_MALLOC(x, _ 3100: 5f 66 75 6e 63 5f 5f 29 0a 23 20 20 64 65 66 69 _func__).# defi 3110: 6e 65 20 72 65 61 6c 6c 6f 63 28 78 2c 20 79 29 ne realloc(x, y) 3120: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 CACKEY_DEBUG_FU 3130: 4e 43 5f 52 45 41 4c 4c 4f 43 28 78 2c 20 79 2c NC_REALLOC(x, y, 3140: 20 5f 5f 66 75 6e 63 5f 5f 29 0a 23 65 6c 73 65 __func__).#else 3150: 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 .# define CACKE 3160: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 78 Y_DEBUG_PRINTF(x 3170: 2e 2e 2e 29 20 2f 2a 2a 2f 0a 23 20 20 64 65 66 ...) /**/.# def 3180: 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 ine CACKEY_DEBUG 3190: 5f 50 52 49 4e 54 42 55 46 28 66 2c 20 78 2c 20 _PRINTBUF(f, x, 31a0: 79 29 20 2f 2a 2a 2f 0a 23 20 20 64 65 66 69 6e y) /**/.# defin 31b0: 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 e CACKEY_DEBUG_P 31c0: 45 52 52 4f 52 28 78 29 20 2f 2a 2a 2f 0a 23 20 ERROR(x) /**/.# 31d0: 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 define CACKEY_D 31e0: 45 42 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54 4f EBUG_FUNC_TAG_TO 31f0: 5f 53 54 52 28 78 29 20 22 44 45 42 55 47 5f 44 _STR(x) "DEBUG_D 3200: 49 53 41 42 4c 45 44 22 0a 23 20 20 64 65 66 69 ISABLED".# defi 3210: 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ne CACKEY_DEBUG_ 3220: 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f FUNC_SCARDERR_TO 3230: 5f 53 54 52 28 78 29 20 22 44 45 42 55 47 5f 44 _STR(x) "DEBUG_D 3240: 49 53 41 42 4c 45 44 22 0a 23 20 20 64 65 66 69 ISABLED".# defi 3250: 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ne CACKEY_DEBUG_ 3260: 46 55 4e 43 5f 4f 42 4a 49 44 5f 54 4f 5f 53 54 FUNC_OBJID_TO_ST 3270: 52 28 78 29 20 22 44 45 42 55 47 5f 44 49 53 41 R(x) "DEBUG_DISA 3280: 42 4c 45 44 22 0a 23 20 20 64 65 66 69 6e 65 20 BLED".# define 3290: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN 32a0: 43 5f 41 50 50 54 59 50 45 5f 54 4f 5f 53 54 52 C_APPTYPE_TO_STR 32b0: 28 78 29 20 22 44 45 42 55 47 5f 44 49 53 41 42 (x) "DEBUG_DISAB 32c0: 4c 45 44 22 0a 23 65 6e 64 69 66 0a 0a 73 74 72 LED".#endif..str 32d0: 75 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 uct cackey_ident 32e0: 69 74 79 20 7b 0a 09 43 4b 5f 41 54 54 52 49 42 ity {..CK_ATTRIB 32f0: 55 54 45 20 2a 61 74 74 72 69 62 75 74 65 73 3b UTE *attributes; 3300: 0a 09 43 4b 5f 55 4c 4f 4e 47 20 61 74 74 72 69 ..CK_ULONG attri 3310: 62 75 74 65 73 5f 63 6f 75 6e 74 3b 0a 7d 3b 0a butes_count;.};. 3320: 0a 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 .struct cackey_s 3330: 65 73 73 69 6f 6e 20 7b 0a 09 69 6e 74 20 61 63 ession {..int ac 3340: 74 69 76 65 3b 0a 0a 09 43 4b 5f 53 4c 4f 54 5f tive;...CK_SLOT_ 3350: 49 44 20 73 6c 6f 74 49 44 3b 0a 0a 09 43 4b 5f ID slotID;...CK_ 3360: 53 54 41 54 45 20 73 74 61 74 65 3b 0a 09 43 4b STATE state;..CK 3370: 5f 46 4c 41 47 53 20 66 6c 61 67 73 3b 0a 09 43 _FLAGS flags;..C 3380: 4b 5f 55 4c 4f 4e 47 20 75 6c 44 65 76 69 63 65 K_ULONG ulDevice 3390: 45 72 72 6f 72 3b 0a 09 43 4b 5f 56 4f 49 44 5f Error;..CK_VOID_ 33a0: 50 54 52 20 70 41 70 70 6c 69 63 61 74 69 6f 6e PTR pApplication 33b0: 3b 0a 09 43 4b 5f 4e 4f 54 49 46 59 20 4e 6f 74 ;..CK_NOTIFY Not 33c0: 69 66 79 3b 0a 0a 09 73 74 72 75 63 74 20 63 61 ify;...struct ca 33d0: 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 69 ckey_identity *i 33e0: 64 65 6e 74 69 74 69 65 73 3b 0a 09 75 6e 73 69 dentities;..unsi 33f0: 67 6e 65 64 20 6c 6f 6e 67 20 69 64 65 6e 74 69 gned long identi 3400: 74 69 65 73 5f 63 6f 75 6e 74 3b 0a 0a 09 69 6e ties_count;...in 3410: 74 20 73 65 61 72 63 68 5f 61 63 74 69 76 65 3b t search_active; 3420: 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 ..CK_ATTRIBUTE_P 3430: 54 52 20 73 65 61 72 63 68 5f 71 75 65 72 79 3b TR search_query; 3440: 0a 09 43 4b 5f 55 4c 4f 4e 47 20 73 65 61 72 63 ..CK_ULONG searc 3450: 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 3b 0a 09 h_query_count;.. 3460: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 73 65 unsigned long se 3470: 61 72 63 68 5f 63 75 72 72 5f 69 64 3b 0a 0a 09 arch_curr_id;... 3480: 69 6e 74 20 73 69 67 6e 5f 61 63 74 69 76 65 3b int sign_active; 3490: 0a 09 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 ..CK_MECHANISM_T 34a0: 59 50 45 20 73 69 67 6e 5f 6d 65 63 68 61 6e 69 YPE sign_mechani 34b0: 73 6d 3b 0a 09 43 4b 5f 42 59 54 45 5f 50 54 52 sm;..CK_BYTE_PTR 34c0: 20 73 69 67 6e 5f 62 75 66 3b 0a 09 75 6e 73 69 sign_buf;..unsi 34d0: 67 6e 65 64 20 6c 6f 6e 67 20 73 69 67 6e 5f 62 gned long sign_b 34e0: 75 66 6c 65 6e 3b 0a 09 75 6e 73 69 67 6e 65 64 uflen;..unsigned 34f0: 20 6c 6f 6e 67 20 73 69 67 6e 5f 62 75 66 75 73 long sign_bufus 3500: 65 64 3b 0a 0a 09 69 6e 74 20 64 65 63 72 79 70 ed;...int decryp 3510: 74 5f 61 63 74 69 76 65 3b 0a 09 43 4b 5f 4d 45 t_active;..CK_ME 3520: 43 48 41 4e 49 53 4d 5f 54 59 50 45 20 64 65 63 CHANISM_TYPE dec 3530: 72 79 70 74 5f 6d 65 63 68 61 6e 69 73 6d 3b 0a rypt_mechanism;. 3540: 09 43 4b 5f 56 4f 49 44 5f 50 54 52 20 64 65 63 .CK_VOID_PTR dec 3550: 72 79 70 74 5f 6d 65 63 68 5f 70 61 72 6d 3b 0a rypt_mech_parm;. 3560: 09 43 4b 5f 55 4c 4f 4e 47 20 64 65 63 72 79 70 .CK_ULONG decryp 3570: 74 5f 6d 65 63 68 5f 70 61 72 6d 6c 65 6e 3b 0a t_mech_parmlen;. 3580: 0a 7d 3b 0a 0a 73 74 72 75 63 74 20 63 61 63 6b .};..struct cack 3590: 65 79 5f 73 6c 6f 74 20 7b 0a 09 69 6e 74 20 61 ey_slot {..int a 35a0: 63 74 69 76 65 3b 0a 0a 09 63 68 61 72 20 2a 70 ctive;...char *p 35b0: 63 73 63 5f 72 65 61 64 65 72 3b 0a 0a 09 69 6e csc_reader;...in 35c0: 74 20 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e t pcsc_card_conn 35d0: 65 63 74 65 64 3b 0a 09 53 43 41 52 44 48 41 4e ected;..SCARDHAN 35e0: 44 4c 45 20 70 63 73 63 5f 63 61 72 64 3b 0a 7d DLE pcsc_card;.} 35f0: 3b 0a 0a 74 79 70 65 64 65 66 20 65 6e 75 6d 20 ;..typedef enum 3600: 7b 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 {..CACKEY_TLV_AP 3610: 50 5f 47 45 4e 45 52 49 43 20 3d 20 30 78 30 31 P_GENERIC = 0x01 3620: 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 ,..CACKEY_TLV_AP 3630: 50 5f 53 4b 49 20 20 20 20 20 3d 20 30 78 30 32 P_SKI = 0x02 3640: 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 ,..CACKEY_TLV_AP 3650: 50 5f 50 4b 49 20 20 20 20 20 3d 20 30 78 30 34 P_PKI = 0x04 3660: 0a 7d 20 63 61 63 6b 65 79 5f 74 6c 76 5f 61 70 .} cackey_tlv_ap 3670: 70 74 79 70 65 3b 0a 0a 74 79 70 65 64 65 66 20 ptype;..typedef 3680: 65 6e 75 6d 20 7b 0a 09 43 41 43 4b 45 59 5f 54 enum {..CACKEY_T 3690: 4c 56 5f 4f 42 4a 49 44 5f 47 45 4e 45 52 41 4c LV_OBJID_GENERAL 36a0: 49 4e 46 4f 20 20 20 20 20 20 20 3d 20 30 78 32 INFO = 0x2 36b0: 30 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 000,..CACKEY_TLV 36c0: 5f 4f 42 4a 49 44 5f 50 52 4f 50 45 52 53 4f 4e _OBJID_PROPERSON 36d0: 41 4c 49 4e 46 4f 20 20 20 3d 20 30 78 32 31 30 ALINFO = 0x210 36e0: 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 0,..CACKEY_TLV_O 36f0: 42 4a 49 44 5f 41 43 43 45 53 53 43 4f 4e 54 52 BJID_ACCESSCONTR 3700: 4f 4c 20 20 20 20 20 3d 20 30 78 33 30 30 30 2c OL = 0x3000, 3710: 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a ..CACKEY_TLV_OBJ 3720: 49 44 5f 4c 4f 47 49 4e 20 20 20 20 20 20 20 20 ID_LOGIN 3730: 20 20 20 20 20 3d 20 30 78 34 30 30 30 2c 0a 09 = 0x4000,.. 3740: 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 CACKEY_TLV_OBJID 3750: 5f 43 41 52 44 49 4e 46 4f 20 20 20 20 20 20 20 _CARDINFO 3760: 20 20 20 3d 20 30 78 35 30 30 30 2c 0a 09 43 41 = 0x5000,..CA 3770: 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 42 CKEY_TLV_OBJID_B 3780: 49 4f 4d 45 54 52 49 43 53 20 20 20 20 20 20 20 IOMETRICS 3790: 20 3d 20 30 78 36 30 30 30 2c 0a 09 43 41 43 4b = 0x6000,..CACK 37a0: 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 44 49 47 EY_TLV_OBJID_DIG 37b0: 49 54 41 4c 53 49 47 43 45 52 54 20 20 20 20 3d ITALSIGCERT = 37c0: 20 30 78 37 30 30 30 2c 0a 09 43 41 43 4b 45 59 0x7000,..CACKEY 37d0: 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 _TLV_OBJID_CAC_P 37e0: 45 52 53 4f 4e 20 20 20 20 20 20 20 20 3d 20 30 ERSON = 0 37f0: 78 30 32 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 x0200,..CACKEY_T 3800: 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 42 45 4e LV_OBJID_CAC_BEN 3810: 45 46 49 54 53 20 20 20 20 20 20 3d 20 30 78 30 EFITS = 0x0 3820: 32 30 32 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 202,..CACKEY_TLV 3830: 5f 4f 42 4a 49 44 5f 43 41 43 5f 4f 54 48 45 52 _OBJID_CAC_OTHER 3840: 42 45 4e 45 46 49 54 53 20 3d 20 30 78 30 32 30 BENEFITS = 0x020 3850: 33 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 3,..CACKEY_TLV_O 3860: 42 4a 49 44 5f 43 41 43 5f 50 45 52 53 4f 4e 4e BJID_CAC_PERSONN 3870: 45 4c 20 20 20 20 20 3d 20 30 78 30 32 30 31 2c EL = 0x0201, 3880: 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a ..CACKEY_TLV_OBJ 3890: 49 44 5f 43 41 43 5f 50 4b 49 43 45 52 54 20 20 ID_CAC_PKICERT 38a0: 20 20 20 20 20 3d 20 30 78 30 32 46 45 0a 7d 20 = 0x02FE.} 38b0: 63 61 63 6b 65 79 5f 74 6c 76 5f 6f 62 6a 65 63 cackey_tlv_objec 38c0: 74 69 64 3b 0a 0a 73 74 72 75 63 74 20 63 61 63 tid;..struct cac 38d0: 6b 65 79 5f 74 6c 76 5f 63 61 72 64 75 72 6c 20 key_tlv_cardurl 38e0: 7b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 {..unsigned char 38f0: 20 20 20 20 20 20 20 20 72 69 64 5b 35 5d 3b 0a rid[5];. 3900: 09 63 61 63 6b 65 79 5f 74 6c 76 5f 61 70 70 74 .cackey_tlv_appt 3910: 79 70 65 20 20 20 61 70 70 74 79 70 65 3b 0a 09 ype apptype;.. 3920: 63 61 63 6b 65 79 5f 74 6c 76 5f 6f 62 6a 65 63 cackey_tlv_objec 3930: 74 69 64 20 20 6f 62 6a 65 63 74 69 64 3b 0a 09 tid objectid;.. 3940: 63 61 63 6b 65 79 5f 74 6c 76 5f 6f 62 6a 65 63 cackey_tlv_objec 3950: 74 69 64 20 20 61 70 70 69 64 3b 0a 09 75 6e 73 tid appid;..uns 3960: 69 67 6e 65 64 20 63 68 61 72 20 20 20 20 20 20 igned char 3970: 20 20 70 69 6e 69 64 3b 0a 7d 3b 0a 0a 73 74 72 pinid;.};..str 3980: 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 uct cackey_tlv_e 3990: 6e 74 69 74 79 3b 0a 73 74 72 75 63 74 20 63 61 ntity;.struct ca 39a0: 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 ckey_tlv_entity 39b0: 7b 0a 09 75 69 6e 74 38 5f 74 20 74 61 67 3b 0a {..uint8_t tag;. 39c0: 09 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 3b 0a .size_t length;. 39d0: 0a 09 75 6e 69 6f 6e 20 7b 0a 09 09 76 6f 69 64 ..union {...void 39e0: 20 2a 76 61 6c 75 65 3b 0a 09 09 73 74 72 75 63 *value;...struc 39f0: 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 63 61 72 t cackey_tlv_car 3a00: 64 75 72 6c 20 2a 76 61 6c 75 65 5f 63 61 72 64 durl *value_card 3a10: 75 72 6c 3b 0a 09 09 75 69 6e 74 38 5f 74 20 76 url;...uint8_t v 3a20: 61 6c 75 65 5f 62 79 74 65 3b 0a 09 7d 3b 0a 0a alue_byte;..};.. 3a30: 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 .struct cackey_t 3a40: 6c 76 5f 65 6e 74 69 74 79 20 2a 5f 6e 65 78 74 lv_entity *_next 3a50: 3b 0a 7d 3b 0a 0a 2f 2a 20 43 41 43 4b 45 59 20 ;.};../* CACKEY 3a60: 47 6c 6f 62 61 6c 20 48 61 6e 64 6c 65 73 20 2a Global Handles * 3a70: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 2a 63 /.static void *c 3a80: 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 20 3d 20 ackey_biglock = 3a90: 4e 55 4c 4c 3b 0a 73 74 61 74 69 63 20 73 74 72 NULL;.static str 3aa0: 75 63 74 20 63 61 63 6b 65 79 5f 73 65 73 73 69 uct cackey_sessi 3ab0: 6f 6e 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f on cackey_sessio 3ac0: 6e 73 5b 31 32 38 5d 3b 0a 73 74 61 74 69 63 20 ns[128];.static 3ad0: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl 3ae0: 6f 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ot cackey_slots[ 3af0: 31 32 38 5d 3b 0a 73 74 61 74 69 63 20 69 6e 74 128];.static int 3b00: 20 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 cackey_initiali 3b10: 7a 65 64 20 3d 20 30 3b 0a 73 74 61 74 69 63 20 zed = 0;.static 3b20: 69 6e 74 20 63 61 63 6b 65 79 5f 62 69 67 6c 6f int cackey_biglo 3b30: 63 6b 5f 69 6e 69 74 20 3d 20 30 3b 0a 43 4b 5f ck_init = 0;.CK_ 3b40: 43 5f 49 4e 49 54 49 41 4c 49 5a 45 5f 41 52 47 C_INITIALIZE_ARG 3b50: 53 20 63 61 63 6b 65 79 5f 61 72 67 73 3b 0a 0a S cackey_args;.. 3b60: 2f 2a 20 50 43 53 43 20 47 6c 6f 62 61 6c 20 48 /* PCSC Global H 3b70: 61 6e 64 6c 65 73 20 2a 2f 0a 73 74 61 74 69 63 andles */.static 3b80: 20 4c 50 53 43 41 52 44 43 4f 4e 54 45 58 54 20 LPSCARDCONTEXT 3b90: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 3ba0: 6c 65 20 3d 20 4e 55 4c 4c 3b 0a 0a 73 74 61 74 le = NULL;..stat 3bb0: 69 63 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ic unsigned long 3bc0: 20 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 cackey_getversi 3bd0: 6f 6e 28 76 6f 69 64 29 20 7b 0a 09 73 74 61 74 on(void) {..stat 3be0: 69 63 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ic unsigned long 3bf0: 20 72 65 74 76 61 6c 20 3d 20 32 35 35 3b 0a 09 retval = 255;.. 3c00: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6d 61 unsigned long ma 3c10: 6a 6f 72 20 3d 20 30 3b 0a 09 75 6e 73 69 67 6e jor = 0;..unsign 3c20: 65 64 20 6c 6f 6e 67 20 6d 69 6e 6f 72 20 3d 20 ed long minor = 3c30: 30 3b 0a 09 63 68 61 72 20 2a 6d 61 6a 6f 72 5f 0;..char *major_ 3c40: 73 74 72 20 3d 20 4e 55 4c 4c 3b 0a 09 63 68 61 str = NULL;..cha 3c50: 72 20 2a 6d 69 6e 6f 72 5f 73 74 72 20 3d 20 4e r *minor_str = N 3c60: 55 4c 4c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ULL;...CACKEY_DE 3c70: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 3c80: 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 72 65 74 ed.");...if (ret 3c90: 76 61 6c 20 21 3d 20 32 35 35 29 20 7b 0a 09 09 val != 255) {... 3ca0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 3cb0: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 30 NTF("Returning 0 3cc0: 78 25 6c 78 20 28 63 61 63 68 65 64 29 2e 22 2c x%lx (cached).", 3cd0: 20 72 65 74 76 61 6c 29 3b 0a 0a 09 09 72 65 74 retval);....ret 3ce0: 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 09 7d 0a urn(retval);..}. 3cf0: 0a 09 72 65 74 76 61 6c 20 3d 20 30 3b 0a 0a 23 ..retval = 0;..# 3d00: 69 66 64 65 66 20 50 41 43 4b 41 47 45 5f 56 45 ifdef PACKAGE_VE 3d10: 52 53 49 4f 4e 0a 20 20 20 20 20 20 20 20 6d 61 RSION. ma 3d20: 6a 6f 72 5f 73 74 72 20 3d 20 50 41 43 4b 41 47 jor_str = PACKAG 3d30: 45 5f 56 45 52 53 49 4f 4e 3b 0a 09 69 66 20 28 E_VERSION;..if ( 3d40: 6d 61 6a 6f 72 5f 73 74 72 29 20 7b 0a 09 20 20 major_str) {.. 3d50: 20 20 20 20 20 20 6d 61 6a 6f 72 20 3d 20 73 74 major = st 3d60: 72 74 6f 75 6c 28 6d 61 6a 6f 72 5f 73 74 72 2c rtoul(major_str, 3d70: 20 26 6d 69 6e 6f 72 5f 73 74 72 2c 20 31 30 29 &minor_str, 10) 3d80: 3b 0a 0a 09 09 69 66 20 28 6d 69 6e 6f 72 5f 73 ;....if (minor_s 3d90: 74 72 29 20 7b 0a 09 09 09 6d 69 6e 6f 72 20 3d tr) {....minor = 3da0: 20 73 74 72 74 6f 75 6c 28 6d 69 6e 6f 72 5f 73 strtoul(minor_s 3db0: 74 72 20 2b 20 31 2c 20 4e 55 4c 4c 2c 20 31 30 tr + 1, NULL, 10 3dc0: 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 72 65 74 76 );...}..}...retv 3dd0: 61 6c 20 3d 20 28 6d 61 6a 6f 72 20 3c 3c 20 31 al = (major << 1 3de0: 36 29 20 7c 20 28 6d 69 6e 6f 72 20 3c 3c 20 38 6) | (minor << 8 3df0: 29 3b 0a 23 65 6e 64 69 66 0a 0a 09 43 41 43 4b );.#endif...CACK 3e00: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 3e10: 22 52 65 74 75 72 6e 69 6e 67 20 30 78 25 6c 78 "Returning 0x%lx 3e20: 22 2c 20 72 65 74 76 61 6c 29 3b 0a 0a 09 72 65 ", retval);...re 3e30: 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a turn(retval);.}. 3e40: 0a 2f 2a 20 50 43 2f 53 43 20 52 65 6c 61 74 65 ./* PC/SC Relate 3e50: 64 20 46 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 73 d Functions */.s 3e60: 74 61 74 69 63 20 76 6f 69 64 20 63 61 63 6b 65 tatic void cacke 3e70: 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 y_slots_disconne 3e80: 63 74 5f 61 6c 6c 28 76 6f 69 64 29 20 7b 0a 09 ct_all(void) {.. 3e90: 75 69 6e 74 33 32 5f 74 20 69 64 78 3b 0a 0a 09 uint32_t idx;... 3ea0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 3eb0: 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 3ec0: 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 ..for (idx = 0; 3ed0: 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 idx < (sizeof(ca 3ee0: 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 ckey_slots) / si 3ef0: 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 3f00: 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b s[0])); idx++) { 3f10: 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c ...if (cackey_sl 3f20: 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 63 61 ots[idx].pcsc_ca 3f30: 72 64 5f 63 6f 6e 6e 65 63 74 65 64 29 20 7b 0a rd_connected) {. 3f40: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 3f50: 50 52 49 4e 54 46 28 22 53 43 61 72 64 44 69 73 PRINTF("SCardDis 3f60: 63 6f 6e 6e 65 63 74 28 25 6c 75 29 20 63 61 6c connect(%lu) cal 3f70: 6c 65 64 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 led", (unsigned 3f80: 6c 6f 6e 67 29 20 69 64 78 29 3b 0a 0a 09 09 09 long) idx);..... 3f90: 53 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 SCardDisconnect( 3fa0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx 3fb0: 5d 2e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 ].pcsc_card, SCA 3fc0: 52 44 5f 4c 45 41 56 45 5f 43 41 52 44 29 3b 0a RD_LEAVE_CARD);. 3fd0: 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 6c ..}....cackey_sl 3fe0: 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 63 61 ots[idx].pcsc_ca 3ff0: 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 rd_connected = 0 4000: 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 4010: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 4020: 72 6e 69 6e 67 22 29 3b 0a 0a 09 72 65 74 75 72 rning");...retur 4030: 6e 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 n;.}..static int 4040: 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 63 6f 6e cackey_pcsc_con 4050: 6e 65 63 74 28 76 6f 69 64 29 20 7b 0a 09 4c 4f nect(void) {..LO 4060: 4e 47 20 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e NG scard_est_con 4070: 74 65 78 74 5f 72 65 74 3b 0a 23 69 66 64 65 66 text_ret;.#ifdef 4080: 20 48 41 56 45 5f 53 43 41 52 44 49 53 56 41 4c HAVE_SCARDISVAL 4090: 49 44 43 4f 4e 54 45 58 54 0a 09 4c 4f 4e 47 20 IDCONTEXT..LONG 40a0: 73 63 61 72 64 5f 69 73 76 61 6c 69 64 5f 72 65 scard_isvalid_re 40b0: 74 3b 0a 23 65 6e 64 69 66 0a 0a 09 43 41 43 4b t;.#endif...CACK 40c0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 40d0: 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 40e0: 20 28 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 (cackey_pcsc_ha 40f0: 6e 64 6c 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a ndle == NULL) {. 4100: 09 09 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 ..cackey_pcsc_ha 4110: 6e 64 6c 65 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 ndle = malloc(si 4120: 7a 65 6f 66 28 2a 63 61 63 6b 65 79 5f 70 63 73 zeof(*cackey_pcs 4130: 63 5f 68 61 6e 64 6c 65 29 29 3b 0a 09 09 69 66 c_handle));...if 4140: 20 28 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 (cackey_pcsc_ha 4150: 6e 64 6c 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a ndle == NULL) {. 4160: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 4170: 50 52 49 4e 54 46 28 22 43 61 6c 6c 20 74 6f 20 PRINTF("Call to 4180: 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 65 64 2c malloc() failed, 4190: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 returning in fa 41a0: 69 6c 75 72 65 22 29 3b 0a 0a 09 09 09 63 61 63 ilure");.....cac 41b0: 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e key_slots_discon 41c0: 6e 65 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 09 nect_all();..... 41d0: 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a return(-1);...}. 41e0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 41f0: 50 52 49 4e 54 46 28 22 53 43 61 72 64 45 73 74 PRINTF("SCardEst 4200: 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 28 29 20 ablishContext() 4210: 63 61 6c 6c 65 64 22 29 3b 0a 09 09 73 63 61 72 called");...scar 4220: 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 d_est_context_re 4230: 74 20 3d 20 53 43 61 72 64 45 73 74 61 62 6c 69 t = SCardEstabli 4240: 73 68 43 6f 6e 74 65 78 74 28 53 43 41 52 44 5f shContext(SCARD_ 4250: 53 43 4f 50 45 5f 53 59 53 54 45 4d 2c 20 4e 55 SCOPE_SYSTEM, NU 4260: 4c 4c 2c 20 4e 55 4c 4c 2c 20 63 61 63 6b 65 79 LL, NULL, cackey 4270: 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 _pcsc_handle);.. 4280: 09 69 66 20 28 73 63 61 72 64 5f 65 73 74 5f 63 .if (scard_est_c 4290: 6f 6e 74 65 78 74 5f 72 65 74 20 21 3d 20 53 43 ontext_ret != SC 42a0: 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b ARD_S_SUCCESS) { 42b0: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 42c0: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 20 74 6f _PRINTF("Call to 42d0: 20 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 43 SCardEstablishC 42e0: 6f 6e 74 65 78 74 20 66 61 69 6c 65 64 20 28 72 ontext failed (r 42f0: 65 74 75 72 6e 65 64 20 25 73 2f 25 6c 69 29 2c eturned %s/%li), 4300: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 returning in fa 4310: 69 6c 75 72 65 22 2c 20 43 41 43 4b 45 59 5f 44 ilure", CACKEY_D 4320: 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 EBUG_FUNC_SCARDE 4330: 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f RR_TO_STR(scard_ 4340: 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 29 est_context_ret) 4350: 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f 65 , (long) scard_e 4360: 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 29 3b st_context_ret); 4370: 0a 0a 09 09 09 66 72 65 65 28 63 61 63 6b 65 79 .....free(cackey 4380: 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 0a _pcsc_handle);.. 4390: 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f ...cackey_slots_ 43a0: 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 29 disconnect_all() 43b0: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 ;.....return(-1) 43c0: 3b 0a 09 09 7d 0a 09 7d 0a 0a 23 69 66 64 65 66 ;...}..}..#ifdef 43d0: 20 48 41 56 45 5f 53 43 41 52 44 49 53 56 41 4c HAVE_SCARDISVAL 43e0: 49 44 43 4f 4e 54 45 58 54 0a 09 43 41 43 4b 45 IDCONTEXT..CACKE 43f0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 4400: 53 43 61 72 64 49 73 56 61 6c 69 64 43 6f 6e 74 SCardIsValidCont 4410: 65 78 74 28 29 20 63 61 6c 6c 65 64 22 29 3b 0a ext() called");. 4420: 09 73 63 61 72 64 5f 69 73 76 61 6c 69 64 5f 72 .scard_isvalid_r 4430: 65 74 20 3d 20 53 43 61 72 64 49 73 56 61 6c 69 et = SCardIsVali 4440: 64 43 6f 6e 74 65 78 74 28 2a 63 61 63 6b 65 79 dContext(*cackey 4450: 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 _pcsc_handle);.. 4460: 69 66 20 28 73 63 61 72 64 5f 69 73 76 61 6c 69 if (scard_isvali 4470: 64 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f 53 d_ret != SCARD_S 4480: 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 43 41 _SUCCESS) {...CA 4490: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 44a0: 46 28 22 48 61 6e 64 6c 65 20 68 61 73 20 62 65 F("Handle has be 44b0: 63 6f 6d 65 20 69 6e 76 61 6c 69 64 20 28 53 43 come invalid (SC 44c0: 61 72 64 49 73 56 61 6c 69 64 43 6f 6e 74 65 78 ardIsValidContex 44d0: 74 20 3d 20 25 73 2f 25 6c 69 29 2c 20 74 72 79 t = %s/%li), try 44e0: 69 6e 67 20 74 6f 20 72 65 2d 65 73 74 61 62 6c ing to re-establ 44f0: 69 73 68 2e 2e 2e 22 2c 20 43 41 43 4b 45 59 5f ish...", CACKEY_ 4500: 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 DEBUG_FUNC_SCARD 4510: 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 ERR_TO_STR(scard 4520: 5f 69 73 76 61 6c 69 64 5f 72 65 74 29 2c 20 28 _isvalid_ret), ( 4530: 6c 6f 6e 67 29 20 73 63 61 72 64 5f 69 73 76 61 long) scard_isva 4540: 6c 69 64 5f 72 65 74 29 3b 0a 0a 09 09 43 41 43 lid_ret);....CAC 4550: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 4560: 28 22 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 ("SCardEstablish 4570: 43 6f 6e 74 65 78 74 28 29 20 63 61 6c 6c 65 64 Context() called 4580: 22 29 3b 0a 09 09 73 63 61 72 64 5f 65 73 74 5f ");...scard_est_ 4590: 63 6f 6e 74 65 78 74 5f 72 65 74 20 3d 20 53 43 context_ret = SC 45a0: 61 72 64 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 ardEstablishCont 45b0: 65 78 74 28 53 43 41 52 44 5f 53 43 4f 50 45 5f ext(SCARD_SCOPE_ 45c0: 53 59 53 54 45 4d 2c 20 4e 55 4c 4c 2c 20 4e 55 SYSTEM, NULL, NU 45d0: 4c 4c 2c 20 63 61 63 6b 65 79 5f 70 63 73 63 5f LL, cackey_pcsc_ 45e0: 68 61 6e 64 6c 65 29 3b 0a 09 09 69 66 20 28 73 handle);...if (s 45f0: 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 card_est_context 4600: 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f _ret != SCARD_S_ 4610: 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 43 41 SUCCESS) {....CA 4620: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 4630: 46 28 22 43 61 6c 6c 20 74 6f 20 53 43 61 72 64 F("Call to SCard 4640: 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 EstablishContext 4650: 20 66 61 69 6c 65 64 20 28 72 65 74 75 72 6e 65 failed (returne 4660: 64 20 25 73 2f 25 6c 69 29 2c 20 72 65 74 75 72 d %s/%li), retur 4670: 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 ning in failure" 4680: 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F 4690: 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f UNC_SCARDERR_TO_ 46a0: 53 54 52 28 73 63 61 72 64 5f 65 73 74 5f 63 6f STR(scard_est_co 46b0: 6e 74 65 78 74 5f 72 65 74 29 2c 20 28 6c 6f 6e ntext_ret), (lon 46c0: 67 29 20 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e g) scard_est_con 46d0: 74 65 78 74 5f 72 65 74 29 3b 0a 0a 09 09 09 66 text_ret);.....f 46e0: 72 65 65 28 63 61 63 6b 65 79 5f 70 63 73 63 5f ree(cackey_pcsc_ 46f0: 68 61 6e 64 6c 65 29 3b 0a 0a 09 09 09 63 61 63 handle);.....cac 4700: 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e key_slots_discon 4710: 6e 65 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 09 nect_all();..... 4720: 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a return(-1);...}. 4730: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 4740: 50 52 49 4e 54 46 28 22 48 61 6e 64 6c 65 20 68 PRINTF("Handle h 4750: 61 73 20 62 65 65 6e 20 72 65 2d 65 73 74 61 62 as been re-estab 4760: 6c 69 73 68 65 64 22 29 3b 0a 09 7d 0a 23 65 6e lished");..}.#en 4770: 64 69 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 dif...CACKEY_DEB 4780: 55 47 5f 50 52 49 4e 54 46 28 22 53 75 63 65 73 UG_PRINTF("Suces 4790: 73 66 75 6c 6c 79 20 63 6f 6e 6e 65 63 74 65 64 sfully connected 47a0: 20 74 6f 20 50 43 2f 53 43 2c 20 72 65 74 75 72 to PC/SC, retur 47b0: 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 73 73 22 ning in success" 47c0: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 30 29 3b 0a );...return(0);. 47d0: 7d 0a 0a 2f 2a 20 41 50 44 55 20 52 65 6c 61 74 }../* APDU Relat 47e0: 65 64 20 46 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a ed Functions */. 47f0: 2f 2a 2a 20 4c 65 20 3d 20 30 78 30 30 20 74 6f /** Le = 0x00 to 4800: 20 69 6e 64 69 63 61 74 65 20 6e 6f 74 20 74 6f indicate not to 4810: 20 73 65 6e 64 20 4c 65 20 2a 2a 2f 0a 73 74 61 send Le **/.sta 4820: 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 73 tic int cackey_s 4830: 65 6e 64 5f 61 70 64 75 28 73 74 72 75 63 74 20 end_apdu(struct 4840: 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f cackey_slot *slo 4850: 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 t, unsigned char 4860: 20 63 6c 61 73 73 2c 20 75 6e 73 69 67 6e 65 64 class, unsigned 4870: 20 63 68 61 72 20 69 6e 73 74 72 75 63 74 69 6f char instructio 4880: 6e 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 n, unsigned char 4890: 20 70 31 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 p1, unsigned ch 48a0: 61 72 20 70 32 2c 20 75 6e 73 69 67 6e 65 64 20 ar p2, unsigned 48b0: 63 68 61 72 20 6c 63 2c 20 75 6e 73 69 67 6e 65 char lc, unsigne 48c0: 64 20 63 68 61 72 20 2a 64 61 74 61 2c 20 75 6e d char *data, un 48d0: 73 69 67 6e 65 64 20 63 68 61 72 20 6c 65 2c 20 signed char le, 48e0: 75 69 6e 74 31 36 5f 74 20 2a 72 65 73 70 63 6f uint16_t *respco 48f0: 64 65 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 de, unsigned cha 4900: 72 20 2a 72 65 73 70 64 61 74 61 2c 20 73 69 7a r *respdata, siz 4910: 65 5f 74 20 2a 72 65 73 70 64 61 74 61 5f 6c 65 e_t *respdata_le 4920: 6e 29 20 7b 0a 09 75 69 6e 74 38 5f 74 20 6d 61 n) {..uint8_t ma 4930: 6a 6f 72 5f 72 63 2c 20 6d 69 6e 6f 72 5f 72 63 jor_rc, minor_rc 4940: 3b 0a 09 73 69 7a 65 5f 74 20 62 79 74 65 73 5f ;..size_t bytes_ 4950: 74 6f 5f 63 6f 70 79 2c 20 74 6d 70 5f 72 65 73 to_copy, tmp_res 4960: 70 64 61 74 61 5f 6c 65 6e 3b 0a 09 44 57 4f 52 pdata_len;..DWOR 4970: 44 20 70 72 6f 74 6f 63 6f 6c 3b 0a 09 44 57 4f D protocol;..DWO 4980: 52 44 20 78 6d 69 74 5f 6c 65 6e 2c 20 72 65 63 RD xmit_len, rec 4990: 76 5f 6c 65 6e 3b 0a 09 4c 4f 4e 47 20 73 63 61 v_len;..LONG sca 49a0: 72 64 5f 63 6f 6e 6e 5f 72 65 74 2c 20 73 63 61 rd_conn_ret, sca 49b0: 72 64 5f 78 6d 69 74 5f 72 65 74 2c 20 73 63 61 rd_xmit_ret, sca 49c0: 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 3b 0a 09 rd_reconn_ret;.. 49d0: 42 59 54 45 20 78 6d 69 74 5f 62 75 66 5b 31 30 BYTE xmit_buf[10 49e0: 32 34 5d 2c 20 72 65 63 76 5f 62 75 66 5b 31 30 24], recv_buf[10 49f0: 32 34 5d 3b 0a 09 69 6e 74 20 70 63 73 63 5f 63 24];..int pcsc_c 4a00: 6f 6e 6e 65 63 74 5f 72 65 74 2c 20 70 63 73 63 onnect_ret, pcsc 4a10: 5f 67 65 74 72 65 73 70 5f 72 65 74 3b 0a 09 69 _getresp_ret;..i 4a20: 6e 74 20 69 64 78 3b 0a 0a 09 43 41 43 4b 45 59 nt idx;...CACKEY 4a30: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 4a40: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 4a50: 21 73 6c 6f 74 29 20 7b 0a 09 09 43 41 43 4b 45 !slot) {...CACKE 4a60: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 4a70: 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 73 70 65 Invalid slot spe 4a80: 63 69 66 69 65 64 2e 22 29 3b 0a 0a 09 09 72 65 cified.");....re 4a90: 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 70 turn(-1);..}...p 4aa0: 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 csc_connect_ret 4ab0: 3d 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 63 6f = cackey_pcsc_co 4ac0: 6e 6e 65 63 74 28 29 3b 0a 09 69 66 20 28 70 63 nnect();..if (pc 4ad0: 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 3c sc_connect_ret < 4ae0: 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 4af0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 6f 6e EBUG_PRINTF("Con 4b00: 6e 65 63 74 69 6f 6e 20 74 6f 20 50 43 2f 53 43 nection to PC/SC 4b10: 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 69 failed, returni 4b20: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b ng in failure"); 4b30: 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. 4b40: 09 7d 0a 0a 09 2f 2a 20 43 6f 6e 6e 65 63 74 20 .}.../* Connect 4b50: 74 6f 20 72 65 61 64 65 72 2c 20 69 66 20 6e 65 to reader, if ne 4b60: 65 64 65 64 20 2a 2f 0a 09 69 66 20 28 21 73 6c eded */..if (!sl 4b70: 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f 63 6f ot->pcsc_card_co 4b80: 6e 6e 65 63 74 65 64 29 20 7b 0a 09 09 43 41 43 nnected) {...CAC 4b90: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 4ba0: 28 22 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 25 ("SCardConnect(% 4bb0: 73 29 20 63 61 6c 6c 65 64 22 2c 20 73 6c 6f 74 s) called", slot 4bc0: 2d 3e 70 63 73 63 5f 72 65 61 64 65 72 29 3b 0a ->pcsc_reader);. 4bd0: 09 09 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 ..scard_conn_ret 4be0: 20 3d 20 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 = SCardConnect( 4bf0: 2a 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e *cackey_pcsc_han 4c00: 64 6c 65 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 5f dle, slot->pcsc_ 4c10: 72 65 61 64 65 72 2c 20 53 43 41 52 44 5f 53 48 reader, SCARD_SH 4c20: 41 52 45 5f 53 48 41 52 45 44 2c 20 53 43 41 52 ARE_SHARED, SCAR 4c30: 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 2c 20 26 D_PROTOCOL_T0, & 4c40: 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c slot->pcsc_card, 4c50: 20 26 70 72 6f 74 6f 63 6f 6c 29 3b 0a 0a 09 09 &protocol);.... 4c60: 69 66 20 28 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 if (scard_conn_r 4c70: 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 et != SCARD_S_SU 4c80: 43 43 45 53 53 29 20 7b 0a 09 09 09 43 41 43 4b CCESS) {....CACK 4c90: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 4ca0: 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 63 "Connection to c 4cb0: 61 72 64 20 66 61 69 6c 65 64 2c 20 72 65 74 75 ard failed, retu 4cc0: 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 rning in failure 4cd0: 20 28 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 29 (SCardConnect() 4ce0: 20 3d 20 25 73 2f 25 6c 69 29 22 2c 20 43 41 43 = %s/%li)", CAC 4cf0: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 KEY_DEBUG_FUNC_S 4d00: 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 CARDERR_TO_STR(s 4d10: 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 29 2c 20 card_conn_ret), 4d20: 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f 63 6f 6e (long) scard_con 4d30: 6e 5f 72 65 74 29 3b 0a 0a 09 09 09 72 65 74 75 n_ret);.....retu 4d40: 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 73 rn(-1);...}....s 4d50: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f 63 lot->pcsc_card_c 4d60: 6f 6e 6e 65 63 74 65 64 20 3d 20 31 3b 0a 09 7d onnected = 1;..} 4d70: 0a 0a 09 2f 2a 20 54 72 61 6e 73 6d 69 74 20 2a .../* Transmit * 4d80: 2f 0a 09 78 6d 69 74 5f 6c 65 6e 20 3d 20 30 3b /..xmit_len = 0; 4d90: 0a 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f ..xmit_buf[xmit_ 4da0: 6c 65 6e 2b 2b 5d 20 3d 20 63 6c 61 73 73 3b 0a len++] = class;. 4db0: 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c .xmit_buf[xmit_l 4dc0: 65 6e 2b 2b 5d 20 3d 20 69 6e 73 74 72 75 63 74 en++] = instruct 4dd0: 69 6f 6e 3b 0a 09 78 6d 69 74 5f 62 75 66 5b 78 ion;..xmit_buf[x 4de0: 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 70 31 3b mit_len++] = p1; 4df0: 0a 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f ..xmit_buf[xmit_ 4e00: 6c 65 6e 2b 2b 5d 20 3d 20 70 32 3b 0a 09 69 66 len++] = p2;..if 4e10: 20 28 64 61 74 61 29 20 7b 0a 09 09 78 6d 69 74 (data) {...xmit 4e20: 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d _buf[xmit_len++] 4e30: 20 3d 20 6c 63 3b 0a 09 09 66 6f 72 20 28 69 64 = lc;...for (id 4e40: 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 6c 63 3b x = 0; idx < lc; 4e50: 20 69 64 78 2b 2b 29 20 7b 0a 09 09 09 78 6d 69 idx++) {....xmi 4e60: 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b t_buf[xmit_len++ 4e70: 5d 20 3d 20 64 61 74 61 5b 69 64 78 5d 3b 0a 09 ] = data[idx];.. 4e80: 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 6c 65 20 21 .}..}...if (le ! 4e90: 3d 20 30 78 30 30 29 20 7b 0a 09 09 78 6d 69 74 = 0x00) {...xmit 4ea0: 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d _buf[xmit_len++] 4eb0: 20 3d 20 6c 65 3b 0a 09 7d 0a 0a 09 43 41 43 4b = le;..}...CACK 4ec0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 EY_DEBUG_PRINTBU 4ed0: 46 28 22 53 65 6e 64 69 6e 67 20 41 50 44 55 3a F("Sending APDU: 4ee0: 22 2c 20 78 6d 69 74 5f 62 75 66 2c 20 78 6d 69 ", xmit_buf, xmi 4ef0: 74 5f 6c 65 6e 29 3b 0a 0a 09 72 65 63 76 5f 6c t_len);...recv_l 4f00: 65 6e 20 3d 20 73 69 7a 65 6f 66 28 72 65 63 76 en = sizeof(recv 4f10: 5f 62 75 66 29 3b 0a 09 73 63 61 72 64 5f 78 6d _buf);..scard_xm 4f20: 69 74 5f 72 65 74 20 3d 20 53 43 61 72 64 54 72 it_ret = SCardTr 4f30: 61 6e 73 6d 69 74 28 73 6c 6f 74 2d 3e 70 63 73 ansmit(slot->pcs 4f40: 63 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 50 43 c_card, SCARD_PC 4f50: 49 5f 54 30 2c 20 78 6d 69 74 5f 62 75 66 2c 20 I_T0, xmit_buf, 4f60: 78 6d 69 74 5f 6c 65 6e 2c 20 53 43 41 52 44 5f xmit_len, SCARD_ 4f70: 50 43 49 5f 54 31 2c 20 72 65 63 76 5f 62 75 66 PCI_T1, recv_buf 4f80: 2c 20 26 72 65 63 76 5f 6c 65 6e 29 3b 0a 09 69 , &recv_len);..i 4f90: 66 20 28 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 f (scard_xmit_re 4fa0: 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 t != SCARD_S_SUC 4fb0: 43 45 53 53 29 20 7b 0a 09 09 43 41 43 4b 45 59 CESS) {...CACKEY 4fc0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 _DEBUG_PRINTF("F 4fd0: 61 69 6c 65 64 20 74 6f 20 73 65 6e 64 20 41 50 ailed to send AP 4fe0: 44 55 20 74 6f 20 63 61 72 64 20 28 53 43 61 72 DU to card (SCar 4ff0: 64 54 72 61 6e 73 6d 69 74 28 29 20 3d 20 25 73 dTransmit() = %s 5000: 2f 25 6c 78 29 22 2c 20 43 41 43 4b 45 59 5f 44 /%lx)", CACKEY_D 5010: 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 EBUG_FUNC_SCARDE 5020: 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f RR_TO_STR(scard_ 5030: 78 6d 69 74 5f 72 65 74 29 2c 20 28 75 6e 73 69 xmit_ret), (unsi 5040: 67 6e 65 64 20 6c 6f 6e 67 29 20 73 63 61 72 64 gned long) scard 5050: 5f 78 6d 69 74 5f 72 65 74 29 3b 0a 0a 09 09 69 _xmit_ret);....i 5060: 66 20 28 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 f (scard_xmit_re 5070: 74 20 3d 3d 20 53 43 41 52 44 5f 57 5f 52 45 53 t == SCARD_W_RES 5080: 45 54 5f 43 41 52 44 29 20 7b 0a 09 09 09 43 41 ET_CARD) {....CA 5090: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 50a0: 46 28 22 52 65 73 65 74 20 72 65 71 75 69 72 65 F("Reset require 50b0: 64 2c 20 70 6c 65 61 73 65 20 68 6f 6c 64 2e 2e d, please hold.. 50c0: 2e 22 29 3b 0a 0a 09 09 09 73 63 61 72 64 5f 72 .");.....scard_r 50d0: 65 63 6f 6e 6e 5f 72 65 74 20 3d 20 53 43 61 72 econn_ret = SCar 50e0: 64 52 65 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d dReconnect(slot- 50f0: 3e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 52 >pcsc_card, SCAR 5100: 44 5f 53 48 41 52 45 5f 53 48 41 52 45 44 2c 20 D_SHARE_SHARED, 5110: 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 SCARD_PROTOCOL_T 5120: 30 2c 20 53 43 41 52 44 5f 52 45 53 45 54 5f 43 0, SCARD_RESET_C 5130: 41 52 44 2c 20 26 70 72 6f 74 6f 63 6f 6c 29 3b ARD, &protocol); 5140: 0a 09 09 09 69 66 20 28 73 63 61 72 64 5f 72 65 ....if (scard_re 5150: 63 6f 6e 6e 5f 72 65 74 20 3d 3d 20 53 43 41 52 conn_ret == SCAR 5160: 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 D_S_SUCCESS) {.. 5170: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 5180: 50 52 49 4e 54 46 28 22 52 65 73 65 74 20 73 75 PRINTF("Reset su 5190: 63 63 65 73 73 66 75 6c 2c 20 72 65 74 72 61 6e ccessful, retran 51a0: 73 6d 69 74 74 69 6e 67 22 29 3b 0a 09 09 09 09 smitting");..... 51b0: 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 20 3d scard_xmit_ret = 51c0: 20 53 43 61 72 64 54 72 61 6e 73 6d 69 74 28 73 SCardTransmit(s 51d0: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 lot->pcsc_card, 51e0: 53 43 41 52 44 5f 50 43 49 5f 54 30 2c 20 78 6d SCARD_PCI_T0, xm 51f0: 69 74 5f 62 75 66 2c 20 78 6d 69 74 5f 6c 65 6e it_buf, xmit_len 5200: 2c 20 53 43 41 52 44 5f 50 43 49 5f 54 30 2c 20 , SCARD_PCI_T0, 5210: 72 65 63 76 5f 62 75 66 2c 20 26 72 65 63 76 5f recv_buf, &recv_ 5220: 6c 65 6e 29 3b 0a 0a 09 09 09 09 69 66 20 28 73 len);......if (s 5230: 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 20 21 3d card_xmit_ret != 5240: 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 SCARD_S_SUCCESS 5250: 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f ) {......CACKEY_ 5260: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 5270: 74 72 61 6e 73 6d 69 74 20 66 61 69 6c 65 64 2c transmit failed, 5280: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 returning in fa 5290: 69 6c 75 72 65 20 61 66 74 65 72 20 64 69 73 63 ilure after disc 52a0: 6f 6e 6e 65 63 74 69 6e 67 20 74 68 65 20 63 61 onnecting the ca 52b0: 72 64 20 28 53 43 61 72 64 54 72 61 6e 73 6d 69 rd (SCardTransmi 52c0: 74 20 3d 20 25 73 2f 25 6c 69 29 22 2c 20 43 41 t = %s/%li)", CA 52d0: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 52e0: 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 SCARDERR_TO_STR( 52f0: 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 2c scard_xmit_ret), 5300: 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f 78 6d (long) scard_xm 5310: 69 74 5f 72 65 74 29 3b 0a 0a 09 09 09 09 09 53 it_ret);.......S 5320: 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 73 CardDisconnect(s 5330: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 lot->pcsc_card, 5340: 53 43 41 52 44 5f 52 45 53 45 54 5f 43 41 52 44 SCARD_RESET_CARD 5350: 29 3b 0a 09 09 09 09 09 73 6c 6f 74 2d 3e 70 63 );......slot->pc 5360: 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 sc_card_connecte 5370: 64 20 3d 20 30 3b 0a 0a 09 09 09 09 09 72 65 74 d = 0;.......ret 5380: 75 72 6e 28 2d 31 29 3b 0a 09 09 09 09 7d 0a 09 urn(-1);.....}.. 5390: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 43 ..} else {.....C 53a0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 53b0: 54 46 28 22 44 69 73 63 6f 6e 6e 65 63 74 69 6e TF("Disconnectin 53c0: 67 20 63 61 72 64 22 29 3b 0a 0a 09 09 09 09 53 g card");......S 53d0: 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 73 CardDisconnect(s 53e0: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 lot->pcsc_card, 53f0: 53 43 41 52 44 5f 52 45 53 45 54 5f 43 41 52 44 SCARD_RESET_CARD 5400: 29 3b 0a 09 09 09 09 73 6c 6f 74 2d 3e 70 63 73 );.....slot->pcs 5410: 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 c_card_connected 5420: 20 3d 20 30 3b 0a 0a 09 09 09 09 43 41 43 4b 45 = 0;......CACKE 5430: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 5440: 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 Returning in fai 5450: 6c 75 72 65 22 29 3b 0a 09 09 09 09 72 65 74 75 lure");.....retu 5460: 72 6e 28 2d 31 29 3b 0a 09 09 09 7d 0a 09 09 7d rn(-1);....}...} 5470: 20 65 6c 73 65 20 7b 0a 09 09 09 43 41 43 4b 45 else {....CACKE 5480: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 5490: 44 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 63 61 Disconnecting ca 54a0: 72 64 22 29 3b 0a 0a 09 09 09 53 43 61 72 64 44 rd");.....SCardD 54b0: 69 73 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e isconnect(slot-> 54c0: 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 pcsc_card, SCARD 54d0: 5f 52 45 53 45 54 5f 43 41 52 44 29 3b 0a 09 09 _RESET_CARD);... 54e0: 09 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 .slot->pcsc_card 54f0: 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a _connected = 0;. 5500: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 5510: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 5520: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b ng in failure"); 5530: 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. 5540: 09 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f ..}..}...CACKEY_ 5550: 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 DEBUG_PRINTBUF(" 5560: 52 65 74 75 72 6e 65 64 20 56 61 6c 75 65 3a 22 Returned Value:" 5570: 2c 20 72 65 63 76 5f 62 75 66 2c 20 72 65 63 76 , recv_buf, recv 5580: 5f 6c 65 6e 29 3b 0a 0a 09 69 66 20 28 72 65 63 _len);...if (rec 5590: 76 5f 6c 65 6e 20 3c 20 32 29 20 7b 0a 09 09 2f v_len < 2) {.../ 55a0: 2a 20 4d 69 6e 69 6d 61 6c 20 72 65 73 70 6f 6e * Minimal respon 55b0: 73 65 20 6c 65 6e 67 74 68 20 69 73 20 32 20 62 se length is 2 b 55c0: 79 74 65 73 2c 20 72 65 74 75 72 6e 69 6e 67 20 ytes, returning 55d0: 69 6e 20 66 61 69 6c 75 72 65 20 2a 2f 0a 09 09 in failure */... 55e0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 55f0: 4e 54 46 28 22 52 65 73 70 6f 6e 73 65 20 74 6f NTF("Response to 5600: 6f 20 73 6d 61 6c 6c 2c 20 72 65 74 75 72 6e 69 o small, returni 5610: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 20 28 72 ng in failure (r 5620: 65 63 76 5f 6c 65 6e 20 3d 20 25 6c 75 29 22 2c ecv_len = %lu)", 5630: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 5640: 20 72 65 63 76 5f 6c 65 6e 29 3b 0a 0a 09 09 72 recv_len);....r 5650: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 eturn(-1);..}... 5660: 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 72 65 73 /* Determine res 5670: 75 6c 74 20 63 6f 64 65 20 2a 2f 0a 09 6d 61 6a ult code */..maj 5680: 6f 72 5f 72 63 20 3d 20 72 65 63 76 5f 62 75 66 or_rc = recv_buf 5690: 5b 72 65 63 76 5f 6c 65 6e 20 2d 20 32 5d 3b 0a [recv_len - 2];. 56a0: 09 6d 69 6e 6f 72 5f 72 63 20 3d 20 72 65 63 76 .minor_rc = recv 56b0: 5f 62 75 66 5b 72 65 63 76 5f 6c 65 6e 20 2d 20 _buf[recv_len - 56c0: 31 5d 3b 0a 09 69 66 20 28 72 65 73 70 63 6f 64 1];..if (respcod 56d0: 65 29 20 7b 0a 09 09 2a 72 65 73 70 63 6f 64 65 e) {...*respcode 56e0: 20 3d 20 28 6d 61 6a 6f 72 5f 72 63 20 3c 3c 20 = (major_rc << 56f0: 38 29 20 7c 20 6d 69 6e 6f 72 5f 72 63 3b 0a 09 8) | minor_rc;.. 5700: 7d 0a 0a 09 2f 2a 20 41 64 6a 75 73 74 20 6d 65 }.../* Adjust me 5710: 73 73 61 67 65 20 62 75 66 66 65 72 20 2a 2f 0a ssage buffer */. 5720: 09 72 65 63 76 5f 6c 65 6e 20 2d 3d 20 32 3b 0a .recv_len -= 2;. 5730: 0a 09 2f 2a 20 41 64 64 20 62 79 74 65 73 20 74 ../* Add bytes t 5740: 6f 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 2a o return value * 5750: 2f 0a 09 74 6d 70 5f 72 65 73 70 64 61 74 61 5f /..tmp_respdata_ 5760: 6c 65 6e 20 3d 20 30 3b 0a 09 69 66 20 28 72 65 len = 0;..if (re 5770: 73 70 64 61 74 61 20 26 26 20 72 65 73 70 64 61 spdata && respda 5780: 74 61 5f 6c 65 6e 29 20 7b 0a 09 09 74 6d 70 5f ta_len) {...tmp_ 5790: 72 65 73 70 64 61 74 61 5f 6c 65 6e 20 3d 20 2a respdata_len = * 57a0: 72 65 73 70 64 61 74 61 5f 6c 65 6e 3b 0a 0a 09 respdata_len;... 57b0: 09 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 20 3d .bytes_to_copy = 57c0: 20 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e 3b 0a *respdata_len;. 57d0: 0a 09 09 69 66 20 28 72 65 63 76 5f 6c 65 6e 20 ...if (recv_len 57e0: 3c 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 < bytes_to_copy) 57f0: 20 7b 0a 09 09 09 62 79 74 65 73 5f 74 6f 5f 63 {....bytes_to_c 5800: 6f 70 79 20 3d 20 72 65 63 76 5f 6c 65 6e 3b 0a opy = recv_len;. 5810: 09 09 7d 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 ..}....CACKEY_DE 5820: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 6f 70 79 BUG_PRINTF("Copy 5830: 69 6e 67 20 25 6c 75 20 62 79 74 65 73 20 74 6f ing %lu bytes to 5840: 20 74 68 65 20 62 75 66 66 65 72 22 2c 20 28 75 the buffer", (u 5850: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 62 79 nsigned long) by 5860: 74 65 73 5f 74 6f 5f 63 6f 70 79 29 3b 0a 0a 09 tes_to_copy);... 5870: 09 6d 65 6d 63 70 79 28 72 65 73 70 64 61 74 61 .memcpy(respdata 5880: 2c 20 72 65 63 76 5f 62 75 66 2c 20 62 79 74 65 , recv_buf, byte 5890: 73 5f 74 6f 5f 63 6f 70 79 29 3b 0a 09 09 72 65 s_to_copy);...re 58a0: 73 70 64 61 74 61 20 2b 3d 20 62 79 74 65 73 5f spdata += bytes_ 58b0: 74 6f 5f 63 6f 70 79 3b 0a 0a 09 09 2a 72 65 73 to_copy;....*res 58c0: 70 64 61 74 61 5f 6c 65 6e 20 3d 20 62 79 74 65 pdata_len = byte 58d0: 73 5f 74 6f 5f 63 6f 70 79 3b 0a 09 09 74 6d 70 s_to_copy;...tmp 58e0: 5f 72 65 73 70 64 61 74 61 5f 6c 65 6e 20 2d 3d _respdata_len -= 58f0: 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a bytes_to_copy;. 5900: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 28 .} else {...if ( 5910: 72 65 63 76 5f 6c 65 6e 20 21 3d 20 30 29 20 7b recv_len != 0) { 5920: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 5930: 5f 50 52 49 4e 54 46 28 22 54 68 72 6f 77 69 6e _PRINTF("Throwin 5940: 67 20 61 77 61 79 20 25 6c 75 20 62 79 74 65 73 g away %lu bytes 5950: 2c 20 6e 6f 77 68 65 72 65 20 74 6f 20 70 75 74 , nowhere to put 5960: 20 74 68 65 6d 21 22 2c 20 28 75 6e 73 69 67 6e them!", (unsign 5970: 65 64 20 6c 6f 6e 67 29 20 72 65 63 76 5f 6c 65 ed long) recv_le 5980: 6e 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 n);...}..}...if 5990: 28 6d 61 6a 6f 72 5f 72 63 20 3d 3d 20 30 78 36 (major_rc == 0x6 59a0: 31 29 20 7b 0a 09 09 2f 2a 20 57 65 20 6e 65 65 1) {.../* We nee 59b0: 64 20 74 6f 20 52 45 41 44 20 2a 2f 0a 09 09 43 d to READ */...C 59c0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 59d0: 54 46 28 22 42 75 66 66 65 72 20 72 65 61 64 20 TF("Buffer read 59e0: 72 65 71 75 69 72 65 64 22 29 3b 0a 0a 09 09 70 required");....p 59f0: 63 73 63 5f 67 65 74 72 65 73 70 5f 72 65 74 20 csc_getresp_ret 5a00: 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 = cackey_send_ap 5a10: 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 du(slot, GSCIS_C 5a20: 4c 41 53 53 5f 49 53 4f 37 38 31 36 2c 20 47 53 LASS_ISO7816, GS 5a30: 43 49 53 5f 49 4e 53 54 52 5f 47 45 54 5f 52 45 CIS_INSTR_GET_RE 5a40: 53 50 4f 4e 53 45 2c 20 30 78 30 30 2c 20 30 78 SPONSE, 0x00, 0x 5a50: 30 30 2c 20 30 2c 20 4e 55 4c 4c 2c 20 6d 69 6e 00, 0, NULL, min 5a60: 6f 72 5f 72 63 2c 20 72 65 73 70 63 6f 64 65 2c or_rc, respcode, 5a70: 20 72 65 73 70 64 61 74 61 2c 20 26 74 6d 70 5f respdata, &tmp_ 5a80: 72 65 73 70 64 61 74 61 5f 6c 65 6e 29 3b 0a 09 respdata_len);.. 5a90: 09 69 66 20 28 70 63 73 63 5f 67 65 74 72 65 73 .if (pcsc_getres 5aa0: 70 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 09 p_ret < 0) {.... 5ab0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 5ac0: 4e 54 46 28 22 42 75 66 66 65 72 20 72 65 61 64 NTF("Buffer read 5ad0: 20 66 61 69 6c 65 64 21 20 20 52 65 74 75 72 6e failed! Return 5ae0: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 5af0: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 ;.....return(-1) 5b00: 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 72 65 73 ;...}....if (res 5b10: 70 64 61 74 61 5f 6c 65 6e 29 20 7b 0a 09 09 09 pdata_len) {.... 5b20: 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e 20 2b 3d *respdata_len += 5b30: 20 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 tmp_respdata_le 5b40: 6e 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b 45 59 n;...}....CACKEY 5b50: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 5b60: 65 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 eturning in succ 5b70: 65 73 73 20 28 62 75 66 66 65 72 20 72 65 61 64 ess (buffer read 5b80: 20 63 6f 6d 70 6c 65 74 65 29 22 29 3b 0a 09 09 complete)");... 5b90: 72 65 74 75 72 6e 28 30 29 3b 0a 09 7d 0a 0a 09 return(0);..}... 5ba0: 69 66 20 28 6d 61 6a 6f 72 5f 72 63 20 3d 3d 20 if (major_rc == 5bb0: 30 78 39 30 29 20 7b 0a 09 09 2f 2a 20 53 75 63 0x90) {.../* Suc 5bc0: 63 65 73 73 20 2a 2f 0a 09 09 43 41 43 4b 45 59 cess */...CACKEY 5bd0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 5be0: 65 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 eturning in succ 5bf0: 65 73 73 20 28 6d 61 6a 6f 72 5f 72 63 20 3d 20 ess (major_rc = 5c00: 30 78 39 30 29 22 29 3b 0a 0a 09 09 72 65 74 75 0x90)");....retu 5c10: 72 6e 28 30 29 3b 0a 09 7d 0a 0a 0a 09 43 41 43 rn(0);..}....CAC 5c20: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 5c30: 28 22 41 50 44 55 20 52 65 74 75 72 6e 65 64 20 ("APDU Returned 5c40: 61 6e 20 65 72 72 6f 72 2c 20 72 65 74 75 72 6e an error, return 5c50: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 5c60: 3b 0a 0a 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ;...return(-1);. 5c70: 7d 0a 0a 73 74 61 74 69 63 20 73 73 69 7a 65 5f }..static ssize_ 5c80: 74 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 t cackey_read_bu 5c90: 66 66 65 72 28 73 74 72 75 63 74 20 63 61 63 6b ffer(struct cack 5ca0: 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 ey_slot *slot, u 5cb0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 75 nsigned char *bu 5cc0: 66 66 65 72 2c 20 73 69 7a 65 5f 74 20 63 6f 75 ffer, size_t cou 5cd0: 6e 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 nt, unsigned cha 5ce0: 72 20 74 5f 6f 72 5f 76 2c 20 73 69 7a 65 5f 74 r t_or_v, size_t 5cf0: 20 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 29 initial_offset) 5d00: 20 7b 0a 09 73 69 7a 65 5f 74 20 6f 66 66 73 65 {..size_t offse 5d10: 74 20 3d 20 30 2c 20 6d 61 78 5f 6f 66 66 73 65 t = 0, max_offse 5d20: 74 2c 20 6d 61 78 5f 63 6f 75 6e 74 3b 0a 09 75 t, max_count;..u 5d30: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 6d 64 nsigned char cmd 5d40: 5b 32 5d 3b 0a 09 75 69 6e 74 31 36 5f 74 20 72 [2];..uint16_t r 5d50: 65 73 70 63 6f 64 65 3b 0a 09 69 6e 74 20 73 65 espcode;..int se 5d60: 6e 64 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 nd_ret;...CACKEY 5d70: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 5d80: 61 6c 6c 65 64 22 29 3b 0a 0a 09 6d 61 78 5f 6f alled");...max_o 5d90: 66 66 73 65 74 20 3d 20 63 6f 75 6e 74 3b 0a 09 ffset = count;.. 5da0: 6d 61 78 5f 63 6f 75 6e 74 20 3d 20 36 34 3b 0a max_count = 64;. 5db0: 0a 09 63 6d 64 5b 30 5d 20 3d 20 74 5f 6f 72 5f ..cmd[0] = t_or_ 5dc0: 76 3b 0a 0a 09 77 68 69 6c 65 20 28 31 29 20 7b v;...while (1) { 5dd0: 0a 09 09 69 66 20 28 6f 66 66 73 65 74 20 3e 3d ...if (offset >= 5de0: 20 6d 61 78 5f 6f 66 66 73 65 74 29 20 7b 0a 09 max_offset) {.. 5df0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 5e00: 52 49 4e 54 46 28 22 42 75 66 66 65 72 20 74 6f RINTF("Buffer to 5e10: 6f 20 73 6d 61 6c 6c 2c 20 72 65 74 75 72 6e 69 o small, returni 5e20: 6e 67 20 77 68 61 74 20 77 65 20 67 6f 74 2e 2e ng what we got.. 5e30: 2e 22 29 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a .");.....break;. 5e40: 09 09 7d 0a 0a 09 09 63 6f 75 6e 74 20 3d 20 6d ..}....count = m 5e50: 61 78 5f 6f 66 66 73 65 74 20 2d 20 6f 66 66 73 ax_offset - offs 5e60: 65 74 3b 0a 09 09 69 66 20 28 63 6f 75 6e 74 20 et;...if (count 5e70: 3e 20 6d 61 78 5f 63 6f 75 6e 74 29 20 7b 0a 09 > max_count) {.. 5e80: 09 09 63 6f 75 6e 74 20 3d 20 6d 61 78 5f 63 6f ..count = max_co 5e90: 75 6e 74 3b 0a 09 09 7d 0a 0a 09 09 63 6d 64 5b unt;...}....cmd[ 5ea0: 31 5d 20 3d 20 63 6f 75 6e 74 3b 0a 0a 09 09 73 1] = count;....s 5eb0: 65 6e 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 end_ret = cackey 5ec0: 5f 73 65 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c _send_apdu(slot, 5ed0: 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 47 4c 4f GSCIS_CLASS_GLO 5ee0: 42 41 4c 5f 50 4c 41 54 46 4f 52 4d 2c 20 47 53 BAL_PLATFORM, GS 5ef0: 43 49 53 5f 49 4e 53 54 52 5f 52 45 41 44 5f 42 CIS_INSTR_READ_B 5f00: 55 46 46 45 52 2c 20 28 28 69 6e 69 74 69 61 6c UFFER, ((initial 5f10: 5f 6f 66 66 73 65 74 20 2b 20 6f 66 66 73 65 74 _offset + offset 5f20: 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66 2c 20 ) >> 8) & 0xff, 5f30: 28 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 20 (initial_offset 5f40: 2b 20 6f 66 66 73 65 74 29 20 26 20 30 78 66 66 + offset) & 0xff 5f50: 2c 20 73 69 7a 65 6f 66 28 63 6d 64 29 2c 20 63 , sizeof(cmd), c 5f60: 6d 64 2c 20 30 78 30 30 2c 20 26 72 65 73 70 63 md, 0x00, &respc 5f70: 6f 64 65 2c 20 62 75 66 66 65 72 20 2b 20 6f 66 ode, buffer + of 5f80: 66 73 65 74 2c 20 26 63 6f 75 6e 74 29 3b 0a 09 fset, &count);.. 5f90: 09 69 66 20 28 73 65 6e 64 5f 72 65 74 20 3c 20 .if (send_ret < 5fa0: 30 29 20 7b 0a 09 09 09 69 66 20 28 72 65 73 70 0) {....if (resp 5fb0: 63 6f 64 65 20 3d 3d 20 30 78 36 41 38 36 29 20 code == 0x6A86) 5fc0: 7b 0a 09 09 09 09 69 66 20 28 6d 61 78 5f 63 6f {.....if (max_co 5fd0: 75 6e 74 20 3d 3d 20 31 29 20 7b 0a 09 09 09 09 unt == 1) {..... 5fe0: 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 .break;.....}... 5ff0: 09 09 09 6d 61 78 5f 63 6f 75 6e 74 20 3d 20 6d ...max_count = m 6000: 61 78 5f 63 6f 75 6e 74 20 2f 20 32 3b 0a 0a 09 ax_count / 2;... 6010: 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 ...continue;.... 6020: 7d 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 }.....CACKEY_DEB 6030: 55 47 5f 50 52 49 4e 54 46 28 22 63 61 63 6b 65 UG_PRINTF("cacke 6040: 79 5f 73 65 6e 64 5f 61 70 64 75 28 29 20 66 61 y_send_apdu() fa 6050: 69 6c 65 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 iled, returning 6060: 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 in failure");... 6070: 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 ..return(-1);... 6080: 7d 0a 0a 09 09 6f 66 66 73 65 74 20 2b 3d 20 63 }....offset += c 6090: 6f 75 6e 74 3b 0a 0a 09 09 69 66 20 28 63 6f 75 ount;....if (cou 60a0: 6e 74 20 3c 20 6d 61 78 5f 63 6f 75 6e 74 29 20 nt < max_count) 60b0: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU 60c0: 47 5f 50 52 49 4e 54 46 28 22 53 68 6f 72 74 20 G_PRINTF("Short 60d0: 72 65 61 64 20 2d 2d 20 63 6f 75 6e 74 20 3d 20 read -- count = 60e0: 25 69 2c 20 63 6d 64 5b 31 5d 20 3d 20 25 69 22 %i, cmd[1] = %i" 60f0: 2c 20 63 6f 75 6e 74 2c 20 63 6d 64 5b 31 5d 29 , count, cmd[1]) 6100: 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d ;.....break;...} 6110: 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 6120: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 6130: 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 73 73 2c ning in success, 6140: 20 72 65 61 64 20 25 6c 75 20 62 79 74 65 73 22 read %lu bytes" 6150: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 6160: 29 20 6f 66 66 73 65 74 29 3b 0a 0a 09 72 65 74 ) offset);...ret 6170: 75 72 6e 28 6f 66 66 73 65 74 29 3b 0a 7d 0a 0a urn(offset);.}.. 6180: 73 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 static int cacke 6190: 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c 65 74 28 y_select_applet( 61a0: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl 61b0: 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 6e ot *slot, unsign 61c0: 65 64 20 63 68 61 72 20 2a 61 69 64 2c 20 73 69 ed char *aid, si 61d0: 7a 65 5f 74 20 61 69 64 5f 6c 65 6e 29 20 7b 0a ze_t aid_len) {. 61e0: 09 69 6e 74 20 73 65 6e 64 5f 72 65 74 3b 0a 0a .int send_ret;.. 61f0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 6200: 49 4e 54 46 28 22 43 61 6c 6c 65 64 22 29 3b 0a INTF("Called");. 6210: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 6220: 52 49 4e 54 42 55 46 28 22 53 65 6c 65 63 74 69 RINTBUF("Selecti 6230: 6e 67 20 61 70 70 6c 65 74 3a 22 2c 20 61 69 64 ng applet:", aid 6240: 2c 20 61 69 64 5f 6c 65 6e 29 3b 0a 0a 09 73 65 , aid_len);...se 6250: 6e 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f nd_ret = cackey_ 6260: 73 65 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c 20 send_apdu(slot, 6270: 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f 37 GSCIS_CLASS_ISO7 6280: 38 31 36 2c 20 47 53 43 49 53 5f 49 4e 53 54 52 816, GSCIS_INSTR 6290: 5f 53 45 4c 45 43 54 2c 20 47 53 43 49 53 5f 50 _SELECT, GSCIS_P 62a0: 41 52 41 4d 5f 53 45 4c 45 43 54 5f 41 50 50 4c ARAM_SELECT_APPL 62b0: 45 54 2c 20 30 78 30 43 2c 20 61 69 64 5f 6c 65 ET, 0x0C, aid_le 62c0: 6e 2c 20 61 69 64 2c 20 30 78 30 30 2c 20 4e 55 n, aid, 0x00, NU 62d0: 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b LL, NULL, NULL); 62e0: 0a 09 69 66 20 28 73 65 6e 64 5f 72 65 74 20 3c ..if (send_ret < 62f0: 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 6300: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 61 69 EBUG_PRINTF("Fai 6310: 6c 65 64 20 74 6f 20 6f 70 65 6e 20 61 70 70 6c led to open appl 6320: 65 74 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e et, returning in 6330: 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 failure");....r 6340: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 eturn(-1);..}... 6350: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 6360: 4e 54 46 28 22 53 75 63 63 65 73 73 66 75 6c 6c NTF("Successfull 6370: 79 20 73 65 6c 65 63 74 65 64 20 66 69 6c 65 22 y selected file" 6380: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 30 29 3b 0a );...return(0);. 6390: 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61 }..static int ca 63a0: 63 6b 65 79 5f 73 65 6c 65 63 74 5f 66 69 6c 65 ckey_select_file 63b0: 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 (struct cackey_s 63c0: 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 69 6e 74 31 lot *slot, uint1 63d0: 36 5f 74 20 65 66 29 20 7b 0a 09 75 6e 73 69 67 6_t ef) {..unsig 63e0: 6e 65 64 20 63 68 61 72 20 66 69 64 5f 62 75 66 ned char fid_buf 63f0: 5b 32 5d 3b 0a 09 69 6e 74 20 73 65 6e 64 5f 72 [2];..int send_r 6400: 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 et;...CACKEY_DEB 6410: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 6420: 64 22 29 3b 0a 0a 09 2f 2a 20 4f 70 65 6e 20 74 d");.../* Open t 6430: 68 65 20 65 6c 65 6d 65 6e 74 61 72 79 20 66 69 he elementary fi 6440: 6c 65 20 2a 2f 0a 09 66 69 64 5f 62 75 66 5b 30 le */..fid_buf[0 6450: 5d 20 3d 20 28 65 66 20 3e 3e 20 38 29 20 26 20 ] = (ef >> 8) & 6460: 30 78 66 66 3b 0a 09 66 69 64 5f 62 75 66 5b 31 0xff;..fid_buf[1 6470: 5d 20 3d 20 65 66 20 26 20 30 78 66 66 3b 0a 0a ] = ef & 0xff;.. 6480: 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 61 63 6b .send_ret = cack 6490: 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 73 6c 6f ey_send_apdu(slo 64a0: 74 2c 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 t, GSCIS_CLASS_I 64b0: 53 4f 37 38 31 36 2c 20 47 53 43 49 53 5f 49 4e SO7816, GSCIS_IN 64c0: 53 54 52 5f 53 45 4c 45 43 54 2c 20 30 78 30 32 STR_SELECT, 0x02 64d0: 2c 20 30 78 30 43 2c 20 73 69 7a 65 6f 66 28 66 , 0x0C, sizeof(f 64e0: 69 64 5f 62 75 66 29 2c 20 66 69 64 5f 62 75 66 id_buf), fid_buf 64f0: 2c 20 30 78 30 30 2c 20 4e 55 4c 4c 2c 20 4e 55 , 0x00, NULL, NU 6500: 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 69 66 20 28 LL, NULL);..if ( 6510: 73 65 6e 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a send_ret < 0) {. 6520: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 6530: 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f RINTF("Failed to 6540: 20 6f 70 65 6e 20 66 69 6c 65 2c 20 72 65 74 75 open file, retu 6550: 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 rning in failure 6560: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 ");....return(-1 6570: 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 6580: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 63 EBUG_PRINTF("Suc 6590: 63 65 73 73 66 75 6c 6c 79 20 73 65 6c 65 63 74 cessfully select 65a0: 65 64 20 66 69 6c 65 22 29 3b 0a 0a 09 72 65 74 ed file");...ret 65b0: 75 72 6e 28 30 29 3b 0a 7d 0a 0a 73 74 61 74 69 urn(0);.}..stati 65c0: 63 20 76 6f 69 64 20 63 61 63 6b 65 79 5f 66 72 c void cackey_fr 65d0: 65 65 5f 74 6c 76 28 73 74 72 75 63 74 20 63 61 ee_tlv(struct ca 65e0: 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 ckey_tlv_entity 65f0: 2a 72 6f 6f 74 29 20 7b 0a 09 73 74 72 75 63 74 *root) {..struct 6600: 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 cackey_tlv_enti 6610: 74 79 20 2a 63 75 72 72 2c 20 2a 6e 65 78 74 3b ty *curr, *next; 6620: 0a 0a 09 66 6f 72 20 28 63 75 72 72 20 3d 20 72 ...for (curr = r 6630: 6f 6f 74 3b 20 63 75 72 72 3b 20 63 75 72 72 20 oot; curr; curr 6640: 3d 20 6e 65 78 74 29 20 7b 0a 09 09 6e 65 78 74 = next) {...next 6650: 20 3d 20 63 75 72 72 2d 3e 5f 6e 65 78 74 3b 0a = curr->_next;. 6660: 0a 09 09 73 77 69 74 63 68 20 28 63 75 72 72 2d ...switch (curr- 6670: 3e 74 61 67 29 20 7b 0a 09 09 09 63 61 73 65 20 >tag) {....case 6680: 47 53 43 49 53 5f 54 41 47 5f 41 43 52 5f 54 41 GSCIS_TAG_ACR_TA 6690: 42 4c 45 3a 0a 09 09 09 09 69 66 20 28 63 75 72 BLE:.....if (cur 66a0: 72 2d 3e 76 61 6c 75 65 29 20 7b 0a 09 09 09 09 r->value) {..... 66b0: 09 66 72 65 65 28 63 75 72 72 2d 3e 76 61 6c 75 .free(curr->valu 66c0: 65 29 3b 0a 09 09 09 09 7d 0a 09 09 09 09 62 72 e);.....}.....br 66d0: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 47 53 43 eak;....case GSC 66e0: 49 53 5f 54 41 47 5f 43 41 52 44 55 52 4c 3a 0a IS_TAG_CARDURL:. 66f0: 09 09 09 09 69 66 20 28 63 75 72 72 2d 3e 76 61 ....if (curr->va 6700: 6c 75 65 5f 63 61 72 64 75 72 6c 29 20 7b 0a 09 lue_cardurl) {.. 6710: 09 09 09 09 66 72 65 65 28 63 75 72 72 2d 3e 76 ....free(curr->v 6720: 61 6c 75 65 5f 63 61 72 64 75 72 6c 29 3b 0a 09 alue_cardurl);.. 6730: 09 09 09 7d 0a 09 09 09 09 62 72 65 61 6b 3b 0a ...}.....break;. 6740: 09 09 7d 0a 0a 09 09 66 72 65 65 28 63 75 72 72 ..}....free(curr 6750: 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 3b 0a );..}...return;. 6760: 7d 0a 0a 73 74 61 74 69 63 20 73 74 72 75 63 74 }..static struct 6770: 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 cackey_tlv_enti 6780: 74 79 20 2a 63 61 63 6b 65 79 5f 72 65 61 64 5f ty *cackey_read_ 6790: 74 6c 76 28 73 74 72 75 63 74 20 63 61 63 6b 65 tlv(struct cacke 67a0: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a y_slot *slot) {. 67b0: 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 .struct cackey_t 67c0: 6c 76 5f 65 6e 74 69 74 79 20 2a 63 75 72 72 5f lv_entity *curr_ 67d0: 65 6e 74 69 74 79 2c 20 2a 72 6f 6f 74 20 3d 20 entity, *root = 67e0: 4e 55 4c 4c 2c 20 2a 6c 61 73 74 20 3d 20 4e 55 NULL, *last = NU 67f0: 4c 4c 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 LL;..unsigned ch 6800: 61 72 20 74 6c 65 6e 5f 62 75 66 5b 32 5d 2c 20 ar tlen_buf[2], 6810: 74 76 61 6c 5f 62 75 66 5b 31 30 32 34 5d 2c 20 tval_buf[1024], 6820: 2a 74 76 61 6c 3b 0a 09 75 6e 73 69 67 6e 65 64 *tval;..unsigned 6830: 20 63 68 61 72 20 76 6c 65 6e 5f 62 75 66 5b 32 char vlen_buf[2 6840: 5d 2c 20 76 76 61 6c 5f 62 75 66 5b 38 31 39 32 ], vval_buf[8192 6850: 5d 2c 20 2a 76 76 61 6c 3b 0a 09 75 6e 73 69 67 ], *vval;..unsig 6860: 6e 65 64 20 63 68 61 72 20 2a 74 6d 70 62 75 66 ned char *tmpbuf 6870: 3b 0a 09 73 73 69 7a 65 5f 74 20 74 6c 65 6e 2c ;..ssize_t tlen, 6880: 20 76 6c 65 6e 3b 0a 09 73 73 69 7a 65 5f 74 20 vlen;..ssize_t 6890: 72 65 61 64 5f 72 65 74 3b 0a 09 73 69 7a 65 5f read_ret;..size_ 68a0: 74 20 6f 66 66 73 65 74 5f 74 20 3d 20 30 2c 20 t offset_t = 0, 68b0: 6f 66 66 73 65 74 5f 76 20 3d 20 30 3b 0a 09 75 offset_v = 0;..u 68c0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 74 61 67 nsigned char tag 68d0: 3b 0a 09 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 ;..size_t length 68e0: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 68f0: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 22 _PRINTF("Called" 6900: 29 3b 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d 20 );...read_ret = 6910: 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 66 cackey_read_buff 6920: 65 72 28 73 6c 6f 74 2c 20 74 6c 65 6e 5f 62 75 er(slot, tlen_bu 6930: 66 2c 20 73 69 7a 65 6f 66 28 74 6c 65 6e 5f 62 f, sizeof(tlen_b 6940: 75 66 29 2c 20 31 2c 20 6f 66 66 73 65 74 5f 74 uf), 1, offset_t 6950: 29 3b 0a 09 69 66 20 28 72 65 61 64 5f 72 65 74 );..if (read_ret 6960: 20 21 3d 20 73 69 7a 65 6f 66 28 74 6c 65 6e 5f != sizeof(tlen_ 6970: 62 75 66 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 buf)) {...CACKEY 6980: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 6990: 65 61 64 20 66 61 69 6c 65 64 2c 20 72 65 74 75 ead failed, retu 69a0: 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 rning in failure 69b0: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 ");....return(NU 69c0: 4c 4c 29 3b 0a 09 7d 0a 0a 09 74 6c 65 6e 20 3d LL);..}...tlen = 69d0: 20 28 74 6c 65 6e 5f 62 75 66 5b 31 5d 20 3c 3c (tlen_buf[1] << 69e0: 20 38 29 20 7c 20 74 6c 65 6e 5f 62 75 66 5b 30 8) | tlen_buf[0 69f0: 5d 3b 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d 20 ];...read_ret = 6a00: 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 66 cackey_read_buff 6a10: 65 72 28 73 6c 6f 74 2c 20 76 6c 65 6e 5f 62 75 er(slot, vlen_bu 6a20: 66 2c 20 73 69 7a 65 6f 66 28 76 6c 65 6e 5f 62 f, sizeof(vlen_b 6a30: 75 66 29 2c 20 32 2c 20 6f 66 66 73 65 74 5f 76 uf), 2, offset_v 6a40: 29 3b 0a 09 69 66 20 28 72 65 61 64 5f 72 65 74 );..if (read_ret 6a50: 20 21 3d 20 73 69 7a 65 6f 66 28 76 6c 65 6e 5f != sizeof(vlen_ 6a60: 62 75 66 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 buf)) {...CACKEY 6a70: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 6a80: 65 61 64 20 66 61 69 6c 65 64 2c 20 72 65 74 75 ead failed, retu 6a90: 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 rning in failure 6aa0: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 ");....return(NU 6ab0: 4c 4c 29 3b 0a 09 7d 0a 0a 09 76 6c 65 6e 20 3d LL);..}...vlen = 6ac0: 20 28 76 6c 65 6e 5f 62 75 66 5b 31 5d 20 3c 3c (vlen_buf[1] << 6ad0: 20 38 29 20 7c 20 76 6c 65 6e 5f 62 75 66 5b 30 8) | vlen_buf[0 6ae0: 5d 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ];...CACKEY_DEBU 6af0: 47 5f 50 52 49 4e 54 46 28 22 54 61 67 20 4c 65 G_PRINTF("Tag Le 6b00: 6e 67 74 68 20 3d 20 25 69 2c 20 56 61 6c 75 65 ngth = %i, Value 6b10: 20 4c 65 6e 67 74 68 20 3d 20 25 69 22 2c 20 74 Length = %i", t 6b20: 6c 65 6e 2c 20 76 6c 65 6e 29 3b 0a 0a 09 74 6c len, vlen);...tl 6b30: 65 6e 20 2d 3d 20 32 3b 0a 09 6f 66 66 73 65 74 en -= 2;..offset 6b40: 5f 74 20 2b 3d 20 32 3b 0a 0a 09 76 6c 65 6e 20 _t += 2;...vlen 6b50: 2d 3d 20 32 3b 0a 09 6f 66 66 73 65 74 5f 76 20 -= 2;..offset_v 6b60: 2b 3d 20 32 3b 0a 0a 09 69 66 20 28 74 6c 65 6e += 2;...if (tlen 6b70: 20 3e 20 73 69 7a 65 6f 66 28 74 76 61 6c 5f 62 > sizeof(tval_b 6b80: 75 66 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f uf)) {...CACKEY_ 6b90: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 54 61 DEBUG_PRINTF("Ta 6ba0: 67 20 6c 65 6e 67 74 68 20 69 73 20 74 6f 6f 20 g length is too 6bb0: 6c 61 72 67 65 2c 20 72 65 74 75 72 6e 69 6e 67 large, returning 6bc0: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. 6bd0: 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a ..return(NULL);. 6be0: 09 7d 0a 0a 09 69 66 20 28 76 6c 65 6e 20 3e 20 .}...if (vlen > 6bf0: 73 69 7a 65 6f 66 28 76 76 61 6c 5f 62 75 66 29 sizeof(vval_buf) 6c00: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 6c10: 55 47 5f 50 52 49 4e 54 46 28 22 56 61 6c 75 65 UG_PRINTF("Value 6c20: 20 6c 65 6e 67 74 68 20 69 73 20 74 6f 6f 20 6c length is too l 6c30: 61 72 67 65 2c 20 72 65 74 75 72 6e 69 6e 67 20 arge, returning 6c40: 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 in failure");... 6c50: 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 .return(NULL);.. 6c60: 7d 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d 20 63 }...read_ret = c 6c70: 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 66 65 ackey_read_buffe 6c80: 72 28 73 6c 6f 74 2c 20 74 76 61 6c 5f 62 75 66 r(slot, tval_buf 6c90: 2c 20 74 6c 65 6e 2c 20 31 2c 20 6f 66 66 73 65 , tlen, 1, offse 6ca0: 74 5f 74 29 3b 0a 09 69 66 20 28 72 65 61 64 5f t_t);..if (read_ 6cb0: 72 65 74 20 21 3d 20 74 6c 65 6e 29 20 7b 0a 09 ret != tlen) {.. 6cc0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 6cd0: 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 INTF("Unable to 6ce0: 72 65 61 64 20 65 6e 74 69 72 65 20 54 2d 62 75 read entire T-bu 6cf0: 66 66 65 72 2c 20 72 65 74 75 72 6e 69 6e 67 20 ffer, returning 6d00: 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 in failure");... 6d10: 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 .return(NULL);.. 6d20: 7d 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d 20 63 }...read_ret = c 6d30: 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 66 65 ackey_read_buffe 6d40: 72 28 73 6c 6f 74 2c 20 76 76 61 6c 5f 62 75 66 r(slot, vval_buf 6d50: 2c 20 76 6c 65 6e 2c 20 32 2c 20 6f 66 66 73 65 , vlen, 2, offse 6d60: 74 5f 76 29 3b 0a 09 69 66 20 28 72 65 61 64 5f t_v);..if (read_ 6d70: 72 65 74 20 21 3d 20 76 6c 65 6e 29 20 7b 0a 09 ret != vlen) {.. 6d80: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 6d90: 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 INTF("Unable to 6da0: 72 65 61 64 20 65 6e 74 69 72 65 20 56 2d 62 75 read entire V-bu 6db0: 66 66 65 72 2c 20 72 65 74 75 72 6e 69 6e 67 20 ffer, returning 6dc0: 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 in failure");... 6dd0: 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 .return(NULL);.. 6de0: 7d 0a 0a 09 74 76 61 6c 20 3d 20 74 76 61 6c 5f }...tval = tval_ 6df0: 62 75 66 3b 0a 09 76 76 61 6c 20 3d 20 76 76 61 buf;..vval = vva 6e00: 6c 5f 62 75 66 3b 0a 09 77 68 69 6c 65 20 28 74 l_buf;..while (t 6e10: 6c 65 6e 20 3e 20 30 20 26 26 20 76 6c 65 6e 20 len > 0 && vlen 6e20: 3e 20 30 29 20 7b 0a 09 09 74 61 67 20 3d 20 2a > 0) {...tag = * 6e30: 74 76 61 6c 3b 0a 09 09 74 76 61 6c 2b 2b 3b 0a tval;...tval++;. 6e40: 09 09 74 6c 65 6e 2d 2d 3b 0a 0a 09 09 69 66 20 ..tlen--;....if 6e50: 28 2a 74 76 61 6c 20 3d 3d 20 30 78 66 66 29 20 (*tval == 0xff) 6e60: 7b 0a 09 09 09 6c 65 6e 67 74 68 20 3d 20 28 74 {....length = (t 6e70: 76 61 6c 5b 32 5d 20 3c 3c 20 38 29 20 7c 20 74 val[2] << 8) | t 6e80: 76 61 6c 5b 31 5d 3b 0a 09 09 09 74 76 61 6c 20 val[1];....tval 6e90: 2b 3d 20 33 3b 0a 09 09 09 74 6c 65 6e 20 2d 3d += 3;....tlen -= 6ea0: 20 33 3b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 3;...} else {.. 6eb0: 09 09 6c 65 6e 67 74 68 20 3d 20 2a 74 76 61 6c ..length = *tval 6ec0: 3b 0a 09 09 09 74 76 61 6c 2b 2b 3b 0a 09 09 09 ;....tval++;.... 6ed0: 74 6c 65 6e 2d 2d 3b 0a 09 09 7d 0a 0a 09 09 43 tlen--;...}....C 6ee0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 6ef0: 54 46 28 22 54 61 67 3a 20 25 73 20 28 25 30 32 TF("Tag: %s (%02 6f00: 78 29 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 x)", CACKEY_DEBU 6f10: 47 5f 46 55 4e 43 5f 54 41 47 5f 54 4f 5f 53 54 G_FUNC_TAG_TO_ST 6f20: 52 28 74 61 67 29 2c 20 28 75 6e 73 69 67 6e 65 R(tag), (unsigne 6f30: 64 20 69 6e 74 29 20 74 61 67 29 3b 0a 09 09 43 d int) tag);...C 6f40: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 6f50: 54 42 55 46 28 22 56 61 6c 75 65 3a 22 2c 20 76 TBUF("Value:", v 6f60: 76 61 6c 2c 20 6c 65 6e 67 74 68 29 3b 0a 09 09 val, length);... 6f70: 76 76 61 6c 20 2b 3d 20 6c 65 6e 67 74 68 3b 0a vval += length;. 6f80: 09 09 76 6c 65 6e 20 2d 3d 20 6c 65 6e 67 74 68 ..vlen -= length 6f90: 3b 0a 0a 09 09 63 75 72 72 5f 65 6e 74 69 74 79 ;....curr_entity 6fa0: 20 3d 20 4e 55 4c 4c 3b 0a 09 09 73 77 69 74 63 = NULL;...switc 6fb0: 68 20 28 74 61 67 29 20 7b 0a 09 09 09 63 61 73 h (tag) {....cas 6fc0: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 e GSCIS_TAG_CARD 6fd0: 55 52 4c 3a 0a 09 09 09 09 63 75 72 72 5f 65 6e URL:.....curr_en 6fe0: 74 69 74 79 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 tity = malloc(si 6ff0: 7a 65 6f 66 28 2a 63 75 72 72 5f 65 6e 74 69 74 zeof(*curr_entit 7000: 79 29 29 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e y));.....curr_en 7010: 74 69 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 tity->value_card 7020: 75 72 6c 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a url = malloc(siz 7030: 65 6f 66 28 2a 63 75 72 72 5f 65 6e 74 69 74 79 eof(*curr_entity 7040: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 29 ->value_cardurl) 7050: 29 3b 0a 0a 09 09 09 09 6d 65 6d 63 70 79 28 63 );......memcpy(c 7060: 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 urr_entity->valu 7070: 65 5f 63 61 72 64 75 72 6c 2d 3e 72 69 64 2c 20 e_cardurl->rid, 7080: 76 76 61 6c 2c 20 35 29 3b 0a 09 09 09 09 63 75 vval, 5);.....cu 7090: 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 rr_entity->value 70a0: 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 74 79 70 _cardurl->apptyp 70b0: 65 20 3d 20 76 76 61 6c 5b 35 5d 3b 0a 09 09 09 e = vval[5];.... 70c0: 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 .curr_entity->va 70d0: 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 6a lue_cardurl->obj 70e0: 65 63 74 69 64 20 3d 20 28 76 76 61 6c 5b 36 5d ectid = (vval[6] 70f0: 20 3c 3c 20 38 29 20 7c 20 76 76 61 6c 5b 37 5d << 8) | vval[7] 7100: 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 ;.....curr_entit 7110: 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c y->value_cardurl 7120: 2d 3e 61 70 70 69 64 20 3d 20 28 76 76 61 6c 5b ->appid = (vval[ 7130: 38 5d 20 3c 3c 20 38 29 20 7c 20 76 76 61 6c 5b 8] << 8) | vval[ 7140: 39 5d 3b 0a 0a 09 09 09 09 63 75 72 72 5f 65 6e 9];......curr_en 7150: 74 69 74 79 2d 3e 74 61 67 20 3d 20 74 61 67 3b tity->tag = tag; 7160: 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 .....curr_entity 7170: 2d 3e 5f 6e 65 78 74 20 3d 20 4e 55 4c 4c 3b 0a ->_next = NULL;. 7180: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c 7190: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 41 43 ase GSCIS_TAG_AC 71a0: 52 5f 54 41 42 4c 45 3a 0a 09 09 09 09 63 75 72 R_TABLE:.....cur 71b0: 72 5f 65 6e 74 69 74 79 20 3d 20 6d 61 6c 6c 6f r_entity = mallo 71c0: 63 28 73 69 7a 65 6f 66 28 2a 63 75 72 72 5f 65 c(sizeof(*curr_e 71d0: 6e 74 69 74 79 29 29 3b 0a 09 09 09 09 74 6d 70 ntity));.....tmp 71e0: 62 75 66 20 3d 20 6d 61 6c 6c 6f 63 28 6c 65 6e buf = malloc(len 71f0: 67 74 68 29 3b 0a 0a 09 09 09 09 6d 65 6d 63 70 gth);......memcp 7200: 79 28 74 6d 70 62 75 66 2c 20 76 76 61 6c 2c 20 y(tmpbuf, vval, 7210: 6c 65 6e 67 74 68 29 3b 0a 0a 09 09 09 09 63 75 length);......cu 7220: 72 72 5f 65 6e 74 69 74 79 2d 3e 74 61 67 20 3d rr_entity->tag = 7230: 20 74 61 67 3b 0a 09 09 09 09 63 75 72 72 5f 65 tag;.....curr_e 7240: 6e 74 69 74 79 2d 3e 6c 65 6e 67 74 68 20 3d 20 ntity->length = 7250: 6c 65 6e 67 74 68 3b 0a 09 09 09 09 63 75 72 72 length;.....curr 7260: 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 20 3d _entity->value = 7270: 20 74 6d 70 62 75 66 3b 0a 09 09 09 09 63 75 72 tmpbuf;.....cur 7280: 72 5f 65 6e 74 69 74 79 2d 3e 5f 6e 65 78 74 20 r_entity->_next 7290: 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 09 62 72 65 = NULL;......bre 72a0: 61 6b 3b 0a 09 09 09 63 61 73 65 20 47 53 43 49 ak;....case GSCI 72b0: 53 5f 54 41 47 5f 50 4b 43 53 31 35 3a 0a 09 09 S_TAG_PKCS15:... 72c0: 09 09 63 75 72 72 5f 65 6e 74 69 74 79 20 3d 20 ..curr_entity = 72d0: 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 malloc(sizeof(*c 72e0: 75 72 72 5f 65 6e 74 69 74 79 29 29 3b 0a 0a 09 urr_entity));... 72f0: 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e ...curr_entity-> 7300: 74 61 67 20 3d 20 74 61 67 3b 0a 09 09 09 09 63 tag = tag;.....c 7310: 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 urr_entity->valu 7320: 65 5f 62 79 74 65 20 3d 20 76 76 61 6c 5b 30 5d e_byte = vval[0] 7330: 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 ;.....curr_entit 7340: 79 2d 3e 5f 6e 65 78 74 20 3d 20 4e 55 4c 4c 3b y->_next = NULL; 7350: 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d ......break;...} 7360: 0a 0a 09 09 69 66 20 28 63 75 72 72 5f 65 6e 74 ....if (curr_ent 7370: 69 74 79 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 ity != NULL) {.. 7380: 09 09 69 66 20 28 72 6f 6f 74 20 3d 3d 20 4e 55 ..if (root == NU 7390: 4c 4c 29 20 7b 0a 09 09 09 09 72 6f 6f 74 20 3d LL) {.....root = 73a0: 20 63 75 72 72 5f 65 6e 74 69 74 79 3b 0a 09 09 curr_entity;... 73b0: 09 7d 0a 0a 09 09 09 69 66 20 28 6c 61 73 74 20 .}.....if (last 73c0: 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 6c != NULL) {.....l 73d0: 61 73 74 2d 3e 5f 6e 65 78 74 20 3d 20 63 75 72 ast->_next = cur 73e0: 72 5f 65 6e 74 69 74 79 3b 0a 09 09 09 7d 0a 0a r_entity;....}.. 73f0: 09 09 09 6c 61 73 74 20 3d 20 63 75 72 72 5f 65 ...last = curr_e 7400: 6e 74 69 74 79 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 ntity;...}..}... 7410: 72 65 74 75 72 6e 28 72 6f 6f 74 29 3b 0a 7d 0a return(root);.}. 7420: 0a 2f 2a 20 52 65 74 75 72 6e 73 20 31 20 69 66 ./* Returns 1 if 7430: 20 61 20 74 6f 6b 65 6e 20 69 73 20 69 6e 20 74 a token is in t 7440: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 6c 6f he specified slo 7450: 74 2c 20 30 20 6f 74 68 65 72 77 69 73 65 20 2a t, 0 otherwise * 7460: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61 63 /.static int cac 7470: 6b 65 79 5f 74 6f 6b 65 6e 5f 70 72 65 73 65 6e key_token_presen 7480: 74 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f t(struct cackey_ 7490: 73 6c 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a 09 73 slot *slot) {..s 74a0: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 truct cackey_tlv 74b0: 5f 65 6e 74 69 74 79 20 2a 74 6c 76 73 2c 20 2a _entity *tlvs, * 74c0: 63 75 72 72 3b 0a 09 75 6e 73 69 67 6e 65 64 20 curr;..unsigned 74d0: 63 68 61 72 20 63 63 63 5f 61 69 64 5b 5d 20 3d char ccc_aid[] = 74e0: 20 7b 30 78 61 30 2c 20 30 78 30 30 2c 20 30 78 {0xa0, 0x00, 0x 74f0: 30 30 2c 20 30 78 30 31 2c 20 30 78 31 36 2c 20 00, 0x01, 0x16, 7500: 30 78 64 62 2c 20 30 78 30 30 7d 3b 0a 09 75 6e 0xdb, 0x00};..un 7510: 73 69 67 6e 65 64 20 63 68 61 72 20 63 75 72 72 signed char curr 7520: 5f 61 69 64 5b 37 5d 3b 0a 09 69 6e 74 20 73 65 _aid[7];..int se 7530: 6e 64 5f 72 65 74 3b 0a 0a 09 2f 2a 20 53 65 6c nd_ret;.../* Sel 7540: 65 63 74 20 74 68 65 20 43 43 43 20 41 70 70 6c ect the CCC Appl 7550: 65 74 20 2a 2f 0a 09 73 65 6e 64 5f 72 65 74 20 et */..send_ret 7560: 3d 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f = cackey_select_ 7570: 61 70 70 6c 65 74 28 73 6c 6f 74 2c 20 63 63 63 applet(slot, ccc 7580: 5f 61 69 64 2c 20 73 69 7a 65 6f 66 28 63 63 63 _aid, sizeof(ccc 7590: 5f 61 69 64 29 29 3b 0a 09 69 66 20 28 73 65 6e _aid));..if (sen 75a0: 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 72 d_ret < 0) {...r 75b0: 65 74 75 72 6e 28 30 29 3b 0a 09 7d 0a 0a 09 74 eturn(0);..}...t 75c0: 6c 76 73 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 lvs = cackey_rea 75d0: 64 5f 74 6c 76 28 73 6c 6f 74 29 3b 0a 0a 09 66 d_tlv(slot);...f 75e0: 6f 72 20 28 63 75 72 72 20 3d 20 74 6c 76 73 3b or (curr = tlvs; 75f0: 20 63 75 72 72 3b 20 63 75 72 72 20 3d 20 63 75 curr; curr = cu 7600: 72 72 2d 3e 5f 6e 65 78 74 29 20 7b 0a 09 09 43 rr->_next) {...C 7610: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 7620: 54 46 28 22 46 6f 75 6e 64 20 74 61 67 3a 20 25 TF("Found tag: % 7630: 73 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 s", CACKEY_DEBUG 7640: 5f 46 55 4e 43 5f 54 41 47 5f 54 4f 5f 53 54 52 _FUNC_TAG_TO_STR 7650: 28 63 75 72 72 2d 3e 74 61 67 29 29 3b 0a 09 09 (curr->tag));... 7660: 73 77 69 74 63 68 20 28 63 75 72 72 2d 3e 74 61 switch (curr->ta 7670: 67 29 20 7b 0a 09 09 09 63 61 73 65 20 47 53 43 g) {....case GSC 7680: 49 53 5f 54 41 47 5f 43 41 52 44 55 52 4c 3a 0a IS_TAG_CARDURL:. 7690: 09 09 09 09 69 66 20 28 28 63 75 72 72 2d 3e 76 ....if ((curr->v 76a0: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 alue_cardurl->ap 76b0: 70 74 79 70 65 20 26 20 43 41 43 4b 45 59 5f 54 ptype & CACKEY_T 76c0: 4c 56 5f 41 50 50 5f 50 4b 49 29 20 3d 3d 20 43 LV_APP_PKI) == C 76d0: 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b ACKEY_TLV_APP_PK 76e0: 49 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 I) {......CACKEY 76f0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 _DEBUG_PRINTBUF( 7700: 22 52 49 44 3a 22 2c 20 63 75 72 72 2d 3e 76 61 "RID:", curr->va 7710: 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 72 69 64 lue_cardurl->rid 7720: 2c 20 73 69 7a 65 6f 66 28 63 75 72 72 2d 3e 76 , sizeof(curr->v 7730: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 72 69 alue_cardurl->ri 7740: 64 29 29 3b 0a 09 09 09 09 09 43 41 43 4b 45 59 d));......CACKEY 7750: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 41 _DEBUG_PRINTF("A 7760: 70 70 49 44 20 3d 20 25 73 2f 25 30 34 6c 78 22 ppID = %s/%04lx" 7770: 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F 7780: 55 4e 43 5f 4f 42 4a 49 44 5f 54 4f 5f 53 54 52 UNC_OBJID_TO_STR 7790: 28 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 (curr->value_car 77a0: 64 75 72 6c 2d 3e 61 70 70 69 64 29 2c 20 28 75 durl->appid), (u 77b0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 nsigned long) cu 77c0: 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 rr->value_cardur 77d0: 6c 2d 3e 61 70 70 69 64 29 3b 0a 09 09 09 09 09 l->appid);...... 77e0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 77f0: 4e 54 46 28 22 4f 62 6a 65 63 74 49 44 20 3d 20 NTF("ObjectID = 7800: 25 73 2f 25 30 34 6c 78 22 2c 20 43 41 43 4b 45 %s/%04lx", CACKE 7810: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 4f 42 4a Y_DEBUG_FUNC_OBJ 7820: 49 44 5f 54 4f 5f 53 54 52 28 63 75 72 72 2d 3e ID_TO_STR(curr-> 7830: 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 6f value_cardurl->o 7840: 62 6a 65 63 74 69 64 29 2c 20 28 75 6e 73 69 67 bjectid), (unsig 7850: 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 2d 3e ned long) curr-> 7860: 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 6f value_cardurl->o 7870: 62 6a 65 63 74 69 64 29 3b 0a 0a 09 09 09 09 09 bjectid);....... 7880: 6d 65 6d 63 70 79 28 63 75 72 72 5f 61 69 64 2c memcpy(curr_aid, 7890: 20 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 curr->value_car 78a0: 64 75 72 6c 2d 3e 72 69 64 2c 20 73 69 7a 65 6f durl->rid, sizeo 78b0: 66 28 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 f(curr->value_ca 78c0: 72 64 75 72 6c 2d 3e 72 69 64 29 29 3b 0a 09 09 rdurl->rid));... 78d0: 09 09 09 63 75 72 72 5f 61 69 64 5b 73 69 7a 65 ...curr_aid[size 78e0: 6f 66 28 63 75 72 72 5f 61 69 64 29 20 2d 20 32 of(curr_aid) - 2 78f0: 5d 20 3d 20 28 63 75 72 72 2d 3e 76 61 6c 75 65 ] = (curr->value 7900: 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 69 64 20 _cardurl->appid 7910: 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 09 09 >> 8) & 0xff;... 7920: 09 09 09 63 75 72 72 5f 61 69 64 5b 73 69 7a 65 ...curr_aid[size 7930: 6f 66 28 63 75 72 72 5f 61 69 64 29 20 2d 20 31 of(curr_aid) - 1 7940: 5d 20 3d 20 63 75 72 72 2d 3e 76 61 6c 75 65 5f ] = curr->value_ 7950: 63 61 72 64 75 72 6c 2d 3e 61 70 70 69 64 20 26 cardurl->appid & 7960: 20 30 78 66 66 3b 0a 0a 09 09 09 09 09 63 61 63 0xff;.......cac 7970: 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c 65 key_select_apple 7980: 74 28 73 6c 6f 74 2c 20 63 75 72 72 5f 61 69 64 t(slot, curr_aid 7990: 2c 20 73 69 7a 65 6f 66 28 63 75 72 72 5f 61 69 , sizeof(curr_ai 79a0: 64 29 29 3b 0a 09 09 09 09 09 63 61 63 6b 65 79 d));......cackey 79b0: 5f 73 65 6c 65 63 74 5f 66 69 6c 65 28 73 6c 6f _select_file(slo 79c0: 74 2c 20 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 t, curr->value_c 79d0: 61 72 64 75 72 6c 2d 3e 6f 62 6a 65 63 74 69 64 ardurl->objectid 79e0: 29 3b 0a 09 09 09 09 7d 0a 09 09 09 09 62 72 65 );.....}.....bre 79f0: 61 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 63 61 63 ak;...}..}...cac 7a00: 6b 65 79 5f 66 72 65 65 5f 74 6c 76 28 74 6c 76 key_free_tlv(tlv 7a10: 73 29 3b 0a 0a 09 72 65 74 75 72 6e 28 31 29 3b s);...return(1); 7a20: 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 73 20 30 .}../* Returns 0 7a30: 20 6f 6e 20 73 75 63 63 65 73 73 20 2a 2f 0a 73 on success */.s 7a40: 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 tatic int cackey 7a50: 5f 6d 75 74 65 78 5f 63 72 65 61 74 65 28 76 6f _mutex_create(vo 7a60: 69 64 20 2a 2a 6d 75 74 65 78 29 20 7b 0a 09 70 id **mutex) {..p 7a70: 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 74 20 2a thread_mutex_t * 7a80: 70 74 68 72 65 61 64 5f 6d 75 74 65 78 3b 0a 09 pthread_mutex;.. 7a90: 69 6e 74 20 70 74 68 72 65 61 64 5f 72 65 74 76 int pthread_retv 7aa0: 61 6c 3b 0a 09 43 4b 5f 52 56 20 63 75 73 74 6f al;..CK_RV custo 7ab0: 6d 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b m_retval;...CACK 7ac0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 7ad0: 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 7ae0: 20 28 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 66 ((cackey_args.f 7af0: 6c 61 67 73 20 26 20 43 4b 46 5f 4f 53 5f 4c 4f lags & CKF_OS_LO 7b00: 43 4b 49 4e 47 5f 4f 4b 29 20 3d 3d 20 43 4b 46 CKING_OK) == CKF 7b10: 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 _OS_LOCKING_OK) 7b20: 7b 0a 09 09 70 74 68 72 65 61 64 5f 6d 75 74 65 {...pthread_mute 7b30: 78 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f x = malloc(sizeo 7b40: 66 28 2a 70 74 68 72 65 61 64 5f 6d 75 74 65 78 f(*pthread_mutex 7b50: 29 29 3b 0a 09 09 69 66 20 28 21 70 74 68 72 65 ));...if (!pthre 7b60: 61 64 5f 6d 75 74 65 78 29 20 7b 0a 09 09 09 43 ad_mutex) {....C 7b70: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 7b80: 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 61 6c TF("Failed to al 7b90: 6c 6f 63 61 74 65 20 6d 65 6d 6f 72 79 2e 22 29 locate memory.") 7ba0: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 ;.....return(-1) 7bb0: 3b 0a 09 09 7d 0a 0a 09 09 70 74 68 72 65 61 64 ;...}....pthread 7bc0: 5f 72 65 74 76 61 6c 20 3d 20 70 74 68 72 65 61 _retval = pthrea 7bd0: 64 5f 6d 75 74 65 78 5f 69 6e 69 74 28 70 74 68 d_mutex_init(pth 7be0: 72 65 61 64 5f 6d 75 74 65 78 2c 20 4e 55 4c 4c read_mutex, NULL 7bf0: 29 3b 0a 09 09 69 66 20 28 70 74 68 72 65 61 64 );...if (pthread 7c00: 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 7c10: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 7c20: 50 52 49 4e 54 46 28 22 70 74 68 72 65 61 64 5f PRINTF("pthread_ 7c30: 6d 75 74 65 78 5f 69 6e 69 74 28 29 20 72 65 74 mutex_init() ret 7c40: 75 72 6e 65 64 20 65 72 72 6f 72 20 28 25 69 29 urned error (%i) 7c50: 2e 22 2c 20 70 74 68 72 65 61 64 5f 72 65 74 76 .", pthread_retv 7c60: 61 6c 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 al);.....return( 7c70: 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 2a 6d 75 74 -1);...}....*mut 7c80: 65 78 20 3d 20 70 74 68 72 65 61 64 5f 6d 75 74 ex = pthread_mut 7c90: 65 78 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 ex;..} else {... 7ca0: 69 66 20 28 63 61 63 6b 65 79 5f 61 72 67 73 2e if (cackey_args. 7cb0: 43 72 65 61 74 65 4d 75 74 65 78 29 20 7b 0a 09 CreateMutex) {.. 7cc0: 09 09 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 ..custom_retval 7cd0: 3d 20 63 61 63 6b 65 79 5f 61 72 67 73 2e 43 72 = cackey_args.Cr 7ce0: 65 61 74 65 4d 75 74 65 78 28 6d 75 74 65 78 29 eateMutex(mutex) 7cf0: 3b 0a 0a 09 09 09 69 66 20 28 63 75 73 74 6f 6d ;.....if (custom 7d00: 5f 72 65 74 76 61 6c 20 21 3d 20 43 4b 52 5f 4f _retval != CKR_O 7d10: 4b 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f K) {.....CACKEY_ 7d20: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 63 61 DEBUG_PRINTF("ca 7d30: 63 6b 65 79 5f 61 72 67 73 2e 43 72 65 61 74 65 ckey_args.Create 7d40: 4d 75 74 65 78 28 29 20 72 65 74 75 72 6e 65 64 Mutex() returned 7d50: 20 65 72 72 6f 72 20 28 25 6c 69 29 2e 22 2c 20 error (%li).", 7d60: 28 6c 6f 6e 67 29 20 63 75 73 74 6f 6d 5f 72 65 (long) custom_re 7d70: 74 76 61 6c 29 3b 0a 0a 09 09 09 09 72 65 74 75 tval);......retu 7d80: 72 6e 28 2d 31 29 3b 0a 09 09 09 7d 0a 09 09 7d rn(-1);....}...} 7d90: 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 7da0: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 7db0: 6e 69 6e 67 20 73 75 63 65 73 73 66 75 6c 6c 79 ning sucessfully 7dc0: 20 28 30 29 22 29 3b 0a 0a 09 72 65 74 75 72 6e (0)");...return 7dd0: 28 30 29 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 (0);.}../* Retur 7de0: 6e 73 20 30 20 6f 6e 20 73 75 63 63 65 73 73 20 ns 0 on success 7df0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61 */.static int ca 7e00: 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( 7e10: 76 6f 69 64 20 2a 6d 75 74 65 78 29 20 7b 0a 09 void *mutex) {.. 7e20: 70 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 74 20 pthread_mutex_t 7e30: 2a 70 74 68 72 65 61 64 5f 6d 75 74 65 78 3b 0a *pthread_mutex;. 7e40: 09 69 6e 74 20 70 74 68 72 65 61 64 5f 72 65 74 .int pthread_ret 7e50: 76 61 6c 3b 0a 09 43 4b 5f 52 56 20 63 75 73 74 val;..CK_RV cust 7e60: 6f 6d 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 om_retval;...CAC 7e70: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 7e80: 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 7e90: 66 20 28 28 63 61 63 6b 65 79 5f 61 72 67 73 2e f ((cackey_args. 7ea0: 66 6c 61 67 73 20 26 20 43 4b 46 5f 4f 53 5f 4c flags & CKF_OS_L 7eb0: 4f 43 4b 49 4e 47 5f 4f 4b 29 20 3d 3d 20 43 4b OCKING_OK) == CK 7ec0: 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 F_OS_LOCKING_OK) 7ed0: 20 7b 0a 09 09 70 74 68 72 65 61 64 5f 6d 75 74 {...pthread_mut 7ee0: 65 78 20 3d 20 6d 75 74 65 78 3b 0a 0a 09 09 70 ex = mutex;....p 7ef0: 74 68 72 65 61 64 5f 72 65 74 76 61 6c 20 3d 20 thread_retval = 7f00: 70 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 6c 6f pthread_mutex_lo 7f10: 63 6b 28 70 74 68 72 65 61 64 5f 6d 75 74 65 78 ck(pthread_mutex 7f20: 29 3b 0a 09 09 69 66 20 28 70 74 68 72 65 61 64 );...if (pthread 7f30: 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 7f40: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 7f50: 50 52 49 4e 54 46 28 22 70 74 68 72 65 61 64 5f PRINTF("pthread_ 7f60: 6d 75 74 65 78 5f 6c 6f 63 6b 28 29 20 72 65 74 mutex_lock() ret 7f70: 75 72 6e 65 64 20 65 72 72 6f 72 20 28 25 69 29 urned error (%i) 7f80: 2e 22 2c 20 70 74 68 72 65 61 64 5f 72 65 74 76 .", pthread_retv 7f90: 61 6c 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 al);.....return( 7fa0: 2d 31 29 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 -1);...}..} else 7fb0: 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f {...if (cackey_ 7fc0: 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 29 20 args.LockMutex) 7fd0: 7b 0a 09 09 09 63 75 73 74 6f 6d 5f 72 65 74 76 {....custom_retv 7fe0: 61 6c 20 3d 20 63 61 63 6b 65 79 5f 61 72 67 73 al = cackey_args 7ff0: 2e 4c 6f 63 6b 4d 75 74 65 78 28 6d 75 74 65 78 .LockMutex(mutex 8000: 29 3b 0a 0a 09 09 09 69 66 20 28 63 75 73 74 6f );.....if (custo 8010: 6d 5f 72 65 74 76 61 6c 20 21 3d 20 43 4b 52 5f m_retval != CKR_ 8020: 4f 4b 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 OK) {.....CACKEY 8030: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 63 _DEBUG_PRINTF("c 8040: 61 63 6b 65 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d ackey_args.LockM 8050: 75 74 65 78 28 29 20 72 65 74 75 72 6e 65 64 20 utex() returned 8060: 65 72 72 6f 72 20 28 25 6c 69 29 2e 22 2c 20 28 error (%li).", ( 8070: 6c 6f 6e 67 29 20 63 75 73 74 6f 6d 5f 72 65 74 long) custom_ret 8080: 76 61 6c 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 val);......retur 8090: 6e 28 2d 31 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a n(-1);....}...}. 80a0: 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 80b0: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 80c0: 69 6e 67 20 73 75 63 65 73 73 66 75 6c 6c 79 20 ing sucessfully 80d0: 28 30 29 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 (0)");...return( 80e0: 30 29 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 0);.}../* Return 80f0: 73 20 30 20 6f 6e 20 73 75 63 63 65 73 73 20 2a s 0 on success * 8100: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61 63 /.static int cac 8110: 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 8120: 28 76 6f 69 64 20 2a 6d 75 74 65 78 29 20 7b 0a (void *mutex) {. 8130: 09 70 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 74 .pthread_mutex_t 8140: 20 2a 70 74 68 72 65 61 64 5f 6d 75 74 65 78 3b *pthread_mutex; 8150: 0a 09 69 6e 74 20 70 74 68 72 65 61 64 5f 72 65 ..int pthread_re 8160: 74 76 61 6c 3b 0a 09 43 4b 5f 52 56 20 63 75 73 tval;..CK_RV cus 8170: 74 6f 6d 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 tom_retval;...CA 8180: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 8190: 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 81a0: 69 66 20 28 28 63 61 63 6b 65 79 5f 61 72 67 73 if ((cackey_args 81b0: 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 4f 53 5f .flags & CKF_OS_ 81c0: 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 3d 3d 20 43 LOCKING_OK) == C 81d0: 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b KF_OS_LOCKING_OK 81e0: 29 20 7b 0a 09 09 70 74 68 72 65 61 64 5f 6d 75 ) {...pthread_mu 81f0: 74 65 78 20 3d 20 6d 75 74 65 78 3b 0a 0a 09 09 tex = mutex;.... 8200: 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c 20 3d pthread_retval = 8210: 20 70 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 75 pthread_mutex_u 8220: 6e 6c 6f 63 6b 28 70 74 68 72 65 61 64 5f 6d 75 nlock(pthread_mu 8230: 74 65 78 29 3b 0a 09 09 69 66 20 28 70 74 68 72 tex);...if (pthr 8240: 65 61 64 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 ead_retval != 0) 8250: 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB 8260: 55 47 5f 50 52 49 4e 54 46 28 22 70 74 68 72 65 UG_PRINTF("pthre 8270: 61 64 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ad_mutex_unlock( 8280: 29 20 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 ) returned error 8290: 20 28 25 69 29 2e 22 2c 20 70 74 68 72 65 61 64 (%i).", pthread 82a0: 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 72 65 _retval);.....re 82b0: 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09 7d turn(-1);...}..} 82c0: 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 28 63 61 else {...if (ca 82d0: 63 6b 65 79 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b ckey_args.Unlock 82e0: 4d 75 74 65 78 29 20 7b 0a 09 09 09 63 75 73 74 Mutex) {....cust 82f0: 6f 6d 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b om_retval = cack 8300: 65 79 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 ey_args.UnlockMu 8310: 74 65 78 28 6d 75 74 65 78 29 3b 0a 0a 09 09 09 tex(mutex);..... 8320: 69 66 20 28 63 75 73 74 6f 6d 5f 72 65 74 76 61 if (custom_retva 8330: 6c 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 l != CKR_OK) {.. 8340: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 8350: 50 52 49 4e 54 46 28 22 63 61 63 6b 65 79 5f 61 PRINTF("cackey_a 8360: 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 28 rgs.UnlockMutex( 8370: 29 20 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 ) returned error 8380: 20 28 25 6c 69 29 2e 22 2c 20 28 6c 6f 6e 67 29 (%li).", (long) 8390: 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 29 3b custom_retval); 83a0: 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 2d 31 29 ......return(-1) 83b0: 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 ;....}...}..}... 83c0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 83d0: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 73 NTF("Returning s 83e0: 75 63 65 73 73 66 75 6c 6c 79 20 28 30 29 22 29 ucessfully (0)") 83f0: 3b 0a 0a 09 72 65 74 75 72 6e 28 30 29 3b 0a 7d ;...return(0);.} 8400: 0a 0a 73 74 61 74 69 63 20 43 4b 5f 41 54 54 52 ..static CK_ATTR 8410: 49 42 55 54 45 5f 50 54 52 20 63 61 63 6b 65 79 IBUTE_PTR cackey 8420: 5f 67 65 74 5f 61 74 74 72 69 62 75 74 65 73 28 _get_attributes( 8430: 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 53 20 CK_OBJECT_CLASS 8440: 6f 62 6a 65 63 74 63 6c 61 73 73 2c 20 76 6f 69 objectclass, voi 8450: 64 20 2a 69 64 65 6e 74 69 74 79 2c 20 75 6e 73 d *identity, uns 8460: 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 65 6e 74 igned long ident 8470: 69 74 79 5f 6e 75 6d 2c 20 43 4b 5f 55 4c 4f 4e ity_num, CK_ULON 8480: 47 5f 50 54 52 20 70 75 6c 43 6f 75 6e 74 29 20 G_PTR pulCount) 8490: 7b 0a 09 73 74 61 74 69 63 20 43 4b 5f 42 42 4f {..static CK_BBO 84a0: 4f 4c 20 63 6b 5f 74 72 75 65 20 3d 20 31 3b 0a OL ck_true = 1;. 84b0: 09 73 74 61 74 69 63 20 43 4b 5f 42 42 4f 4f 4c .static CK_BBOOL 84c0: 20 63 6b 5f 66 61 6c 73 65 20 3d 20 30 3b 0a 09 ck_false = 0;.. 84d0: 43 4b 5f 55 4c 4f 4e 47 20 6e 75 6d 61 74 74 72 CK_ULONG numattr 84e0: 73 20 3d 20 30 2c 20 72 65 74 76 61 6c 5f 63 6f s = 0, retval_co 84f0: 75 6e 74 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55 unt;..CK_ATTRIBU 8500: 54 45 5f 54 59 50 45 20 63 75 72 72 5f 61 74 74 TE_TYPE curr_att 8510: 72 5f 74 79 70 65 3b 0a 09 43 4b 5f 41 54 54 52 r_type;..CK_ATTR 8520: 49 42 55 54 45 20 63 75 72 72 5f 61 74 74 72 2c IBUTE curr_attr, 8530: 20 2a 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 56 4f *retval;..CK_VO 8540: 49 44 5f 50 54 52 20 70 56 61 6c 75 65 3b 0a 09 ID_PTR pValue;.. 8550: 43 4b 5f 55 4c 4f 4e 47 20 75 6c 56 61 6c 75 65 CK_ULONG ulValue 8560: 4c 65 6e 3b 0a 09 43 4b 5f 4f 42 4a 45 43 54 5f Len;..CK_OBJECT_ 8570: 43 4c 41 53 53 20 63 6b 5f 6f 62 6a 65 63 74 5f CLASS ck_object_ 8580: 63 6c 61 73 73 3b 0a 09 43 4b 5f 43 45 52 54 49 class;..CK_CERTI 8590: 46 49 43 41 54 45 5f 54 59 50 45 20 63 6b 5f 63 FICATE_TYPE ck_c 85a0: 65 72 74 69 66 69 63 61 74 65 5f 74 79 70 65 3b ertificate_type; 85b0: 0a 09 43 4b 5f 4b 45 59 5f 54 59 50 45 20 63 6b ..CK_KEY_TYPE ck 85c0: 5f 6b 65 79 5f 74 79 70 65 3b 0a 09 43 4b 5f 55 _key_type;..CK_U 85d0: 54 46 38 43 48 41 52 20 75 63 54 6d 70 42 75 66 TF8CHAR ucTmpBuf 85e0: 5b 31 30 32 34 5d 3b 0a 09 75 6e 73 69 67 6e 65 [1024];..unsigne 85f0: 64 20 63 68 61 72 20 63 65 72 74 69 66 69 63 61 d char certifica 8600: 74 65 5b 31 36 33 38 34 5d 3b 0a 09 73 73 69 7a te[16384];..ssiz 8610: 65 5f 74 20 63 65 72 74 69 66 69 63 61 74 65 5f e_t certificate_ 8620: 6c 65 6e 20 3d 20 2d 31 2c 20 78 35 30 39 5f 72 len = -1, x509_r 8630: 65 61 64 5f 72 65 74 3b 0a 09 69 6e 74 20 70 56 ead_ret;..int pV 8640: 61 6c 75 65 5f 66 72 65 65 3b 0a 0a 09 43 41 43 alue_free;...CAC 8650: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 8660: 28 22 43 61 6c 6c 65 64 20 28 6f 62 6a 65 63 74 ("Called (object 8670: 43 6c 61 73 73 20 3d 20 25 6c 75 2c 20 69 64 65 Class = %lu, ide 8680: 6e 74 69 74 79 5f 6e 75 6d 20 3d 20 25 6c 75 29 ntity_num = %lu) 8690: 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f .", (unsigned lo 86a0: 6e 67 29 20 6f 62 6a 65 63 74 63 6c 61 73 73 2c ng) objectclass, 86b0: 20 69 64 65 6e 74 69 74 79 5f 6e 75 6d 29 3b 0a identity_num);. 86c0: 0a 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 ..if (objectclas 86d0: 73 20 21 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 s != CKO_CERTIFI 86e0: 43 41 54 45 20 26 26 20 6f 62 6a 65 63 74 63 6c CATE && objectcl 86f0: 61 73 73 20 21 3d 20 43 4b 4f 5f 50 55 42 4c 49 ass != CKO_PUBLI 8700: 43 5f 4b 45 59 20 26 26 20 6f 62 6a 65 63 74 63 C_KEY && objectc 8710: 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 50 52 49 56 lass != CKO_PRIV 8720: 41 54 45 5f 4b 45 59 29 20 7b 0a 09 09 43 41 43 ATE_KEY) {...CAC 8730: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 8740: 28 22 52 65 74 75 72 6e 69 6e 67 20 30 20 6f 62 ("Returning 0 ob 8750: 6a 65 63 74 73 20 28 4e 55 4c 4c 29 2c 20 69 6e jects (NULL), in 8760: 76 61 6c 69 64 20 6f 62 6a 65 63 74 20 63 6c 61 valid object cla 8770: 73 73 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 ss");....return( 8780: 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 72 65 74 76 NULL);..}...retv 8790: 61 6c 5f 63 6f 75 6e 74 20 3d 20 31 36 3b 0a 09 al_count = 16;.. 87a0: 72 65 74 76 61 6c 20 3d 20 6d 61 6c 6c 6f 63 28 retval = malloc( 87b0: 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 2a 20 73 retval_count * s 87c0: 69 7a 65 6f 66 28 2a 72 65 74 76 61 6c 29 29 3b izeof(*retval)); 87d0: 0a 0a 09 2f 2a 20 58 58 58 3a 20 47 65 74 20 43 .../* XXX: Get C 87e0: 65 72 74 20 2a 2f 0a 09 63 65 72 74 69 66 69 63 ert */..certific 87f0: 61 74 65 5f 6c 65 6e 20 3d 20 2d 31 3b 0a 0a 09 ate_len = -1;... 8800: 69 66 20 28 63 65 72 74 69 66 69 63 61 74 65 5f if (certificate_ 8810: 6c 65 6e 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 43 len == -1) {...C 8820: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 8830: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 30 20 TF("Returning 0 8840: 6f 62 6a 65 63 74 73 20 28 4e 55 4c 4c 29 2c 20 objects (NULL), 8850: 74 68 69 73 20 69 64 65 6e 74 69 74 79 20 64 6f this identity do 8860: 65 73 20 6e 6f 74 20 68 61 76 65 20 61 6e 20 58 es not have an X 8870: 2e 35 30 39 20 63 65 72 74 69 66 69 63 61 74 65 .509 certificate 8880: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 associated with 8890: 20 69 74 20 61 6e 64 20 77 69 6c 6c 20 6e 6f 74 it and will not 88a0: 20 77 6f 72 6b 22 29 3b 0a 0a 09 09 72 65 74 75 work");....retu 88b0: 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 66 rn(NULL);..}...f 88c0: 6f 72 20 28 63 75 72 72 5f 61 74 74 72 5f 74 79 or (curr_attr_ty 88d0: 70 65 20 3d 20 30 3b 20 63 75 72 72 5f 61 74 74 pe = 0; curr_att 88e0: 72 5f 74 79 70 65 20 3c 20 30 78 63 65 35 33 36 r_type < 0xce536 88f0: 33 35 66 3b 20 63 75 72 72 5f 61 74 74 72 5f 74 35f; curr_attr_t 8900: 79 70 65 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63 ype++) {...if (c 8910: 75 72 72 5f 61 74 74 72 5f 74 79 70 65 20 3d 3d urr_attr_type == 8920: 20 30 78 38 30 30 29 20 7b 0a 09 09 09 63 75 72 0x800) {....cur 8930: 72 5f 61 74 74 72 5f 74 79 70 65 20 3d 20 30 78 r_attr_type = 0x 8940: 63 65 35 33 36 33 30 30 3b 0a 09 09 7d 0a 0a 09 ce536300;...}... 8950: 09 70 56 61 6c 75 65 5f 66 72 65 65 20 3d 20 30 .pValue_free = 0 8960: 3b 0a 09 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c ;...pValue = NUL 8970: 4c 3b 0a 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 L;...ulValueLen 8980: 3d 20 28 43 4b 5f 4c 4f 4e 47 29 20 2d 31 3b 0a = (CK_LONG) -1;. 8990: 0a 09 09 73 77 69 74 63 68 20 28 63 75 72 72 5f ...switch (curr_ 89a0: 61 74 74 72 5f 74 79 70 65 29 20 7b 0a 09 09 09 attr_type) {.... 89b0: 63 61 73 65 20 43 4b 41 5f 43 4c 41 53 53 3a 0a case CKA_CLASS:. 89c0: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 89d0: 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 _PRINTF("Request 89e0: 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b ing attribute CK 89f0: 41 5f 43 4c 41 53 53 20 28 30 78 25 30 38 6c 78 A_CLASS (0x%08lx 8a00: 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 ) ...", (unsigne 8a10: 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 d long) curr_att 8a20: 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 63 6b r_type);......ck 8a30: 5f 6f 62 6a 65 63 74 5f 63 6c 61 73 73 20 3d 20 _object_class = 8a40: 6f 62 6a 65 63 74 63 6c 61 73 73 3b 0a 0a 09 09 objectclass;.... 8a50: 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 6f ..pValue = &ck_o 8a60: 62 6a 65 63 74 5f 63 6c 61 73 73 3b 0a 09 09 09 bject_class;.... 8a70: 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 .ulValueLen = si 8a80: 7a 65 6f 66 28 63 6b 5f 6f 62 6a 65 63 74 5f 63 zeof(ck_object_c 8a90: 6c 61 73 73 29 3b 0a 0a 09 09 09 09 43 41 43 4b lass);......CACK 8aa0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 8ab0: 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning 8ac0: 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 %lu (%p/%lu)", ( 8ad0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a unsigned long) * 8ae0: 28 28 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 ((CK_OBJECT_CLAS 8af0: 53 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 S *) pValue), pV 8b00: 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 alue, (unsigned 8b10: 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e long) ulValueLen 8b20: 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 );......break;.. 8b30: 09 09 63 61 73 65 20 43 4b 41 5f 54 4f 4b 45 4e ..case CKA_TOKEN 8b40: 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB 8b50: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque 8b60: 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute 8b70: 43 4b 41 5f 54 4f 4b 45 4e 20 28 30 78 25 30 38 CKA_TOKEN (0x%08 8b80: 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig 8b90: 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a 8ba0: 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... 8bb0: 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 pValue = &ck_tru 8bc0: 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 e;.....ulValueLe 8bd0: 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 n = sizeof(ck_tr 8be0: 75 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 ue);......CACKEY 8bf0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 8c00: 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c ... returning %l 8c10: 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e u (%p/%lu)", (un 8c20: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 signed long) *(( 8c30: 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c CK_BBOOL *) pVal 8c40: 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e ue), pValue, (un 8c50: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV 8c60: 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b 8c70: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK 8c80: 41 5f 4d 4f 44 49 46 49 41 42 4c 45 3a 0a 09 09 A_MODIFIABLE:... 8c90: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 8ca0: 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e RINTF("Requestin 8cb0: 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f g attribute CKA_ 8cc0: 4d 4f 44 49 46 49 41 42 4c 45 20 28 30 78 25 30 MODIFIABLE (0x%0 8cd0: 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 8lx) ...", (unsi 8ce0: 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f gned long) curr_ 8cf0: 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 attr_type);..... 8d00: 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 66 61 .pValue = &ck_fa 8d10: 6c 73 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 lse;.....ulValue 8d20: 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f Len = sizeof(ck_ 8d30: 66 61 6c 73 65 29 3b 0a 0a 09 09 09 09 43 41 43 false);......CAC 8d40: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 8d50: 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 (" ... returning 8d60: 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 %lu (%p/%lu)", 8d70: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 8d80: 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 *((CK_BBOOL *) p 8d90: 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 Value), pValue, 8da0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 8db0: 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 ulValueLen);.... 8dc0: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 ..break;....case 8dd0: 20 43 4b 41 5f 4c 41 42 45 4c 3a 0a 09 09 09 09 CKA_LABEL:..... 8de0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 8df0: 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 NTF("Requesting 8e00: 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 4c 41 attribute CKA_LA 8e10: 42 45 4c 20 28 30 78 25 30 38 6c 78 29 20 2e 2e BEL (0x%08lx) .. 8e20: 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f .", (unsigned lo 8e30: 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 ng) curr_attr_ty 8e40: 70 65 29 3b 0a 0a 09 09 09 09 2f 2a 20 58 58 58 pe);....../* XXX 8e50: 3a 20 44 65 74 65 72 6d 69 6e 65 20 6e 61 6d 65 : Determine name 8e60: 20 2a 2f 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f */......CACKEY_ 8e70: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 8e80: 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 73 20 .. returning %s 8e90: 28 25 70 2f 25 6c 75 29 22 2c 20 28 63 68 61 72 (%p/%lu)", (char 8ea0: 20 2a 29 20 28 28 43 4b 5f 55 54 46 38 43 48 41 *) ((CK_UTF8CHA 8eb0: 52 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 R *) pValue), pV 8ec0: 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 alue, (unsigned 8ed0: 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e long) ulValueLen 8ee0: 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 );......break;.. 8ef0: 09 09 63 61 73 65 20 43 4b 41 5f 56 41 4c 55 45 ..case CKA_VALUE 8f00: 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB 8f10: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque 8f20: 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute 8f30: 43 4b 41 5f 56 41 4c 55 45 20 28 30 78 25 30 38 CKA_VALUE (0x%08 8f40: 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig 8f50: 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a 8f60: 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... 8f70: 73 77 69 74 63 68 20 28 6f 62 6a 65 63 74 63 6c switch (objectcl 8f80: 61 73 73 29 20 7b 0a 09 09 09 09 09 63 61 73 65 ass) {......case 8f90: 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 CKO_PRIVATE_KEY 8fa0: 3a 0a 09 09 09 09 09 09 43 41 43 4b 45 59 5f 44 :.......CACKEY_D 8fb0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e EBUG_PRINTF(" .. 8fc0: 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e . but not gettin 8fd0: 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20 g it because we 8fe0: 61 72 65 20 61 20 70 72 69 76 61 74 65 20 6b 65 are a private ke 8ff0: 79 2e 22 29 3b 0a 0a 09 09 09 09 09 09 62 72 65 y.");........bre 9000: 61 6b 3b 0a 09 09 09 09 09 63 61 73 65 20 43 4b ak;......case CK 9010: 4f 5f 50 55 42 4c 49 43 5f 4b 45 59 3a 0a 09 09 O_PUBLIC_KEY:... 9020: 09 09 09 09 2f 2a 20 58 58 58 3a 20 54 4f 44 4f ..../* XXX: TODO 9030: 20 2a 2f 0a 0a 09 09 09 09 09 09 62 72 65 61 6b */........break 9040: 3b 0a 09 09 09 09 09 63 61 73 65 20 43 4b 4f 5f ;......case CKO_ 9050: 43 45 52 54 49 46 49 43 41 54 45 3a 0a 09 09 09 CERTIFICATE:.... 9060: 09 09 09 70 56 61 6c 75 65 20 3d 20 63 65 72 74 ...pValue = cert 9070: 69 66 69 63 61 74 65 3b 0a 09 09 09 09 09 09 75 ificate;.......u 9080: 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 63 65 72 74 lValueLen = cert 9090: 69 66 69 63 61 74 65 5f 6c 65 6e 3b 0a 0a 09 09 ificate_len;.... 90a0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d ....break;.....} 90b0: 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 90c0: 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... 90d0: 72 65 74 75 72 6e 69 6e 67 20 25 70 2f 25 6c 75 returning %p/%lu 90e0: 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 ", pValue, (unsi 90f0: 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c gned long) ulVal 9100: 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 ueLen);......bre 9110: 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f ak;....case CKA_ 9120: 49 53 53 55 45 52 3a 0a 09 09 09 09 43 41 43 4b ISSUER:.....CACK 9130: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 9140: 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 "Requesting attr 9150: 69 62 75 74 65 20 43 4b 41 5f 49 53 53 55 45 52 ibute CKA_ISSUER 9160: 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", 9170: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 9180: 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) 9190: 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 ;......if (objec 91a0: 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43 45 tclass != CKO_CE 91b0: 52 54 49 46 49 43 41 54 45 29 20 7b 0a 09 09 09 RTIFICATE) {.... 91c0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 91d0: 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 RINTF(" ... but 91e0: 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 not getting it b 91f0: 65 63 61 75 73 65 20 77 65 20 61 72 65 20 6e 6f ecause we are no 9200: 74 20 61 20 63 65 72 74 69 66 69 63 61 74 65 2e t a certificate. 9210: 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b ");.......break; 9220: 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 .....}......if ( 9230: 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 certificate_len 9240: 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 78 35 30 >= 0) {......x50 9250: 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 30 9_read_ret = x50 9260: 39 5f 74 6f 5f 69 73 73 75 65 72 28 63 65 72 74 9_to_issuer(cert 9270: 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 66 69 ificate, certifi 9280: 63 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 cate_len, &pValu 9290: 65 29 3b 0a 09 09 09 09 09 69 66 20 28 78 35 30 e);......if (x50 92a0: 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 29 20 9_read_ret < 0) 92b0: 7b 0a 09 09 09 09 09 09 70 56 61 6c 75 65 20 3d {.......pValue = 92c0: 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 6c NULL;......} el 92d0: 73 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 6c se {.......ulVal 92e0: 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 ueLen = x509_rea 92f0: 64 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 09 d_ret;......}... 9300: 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f ..}......CACKEY_ 9310: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 9320: 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 70 2f .. returning %p/ 9330: 25 6c 75 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 %lu", pValue, (u 9340: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c nsigned long) ul 9350: 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 ValueLen);...... 9360: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 break;....case C 9370: 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52 KA_SERIAL_NUMBER 9380: 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB 9390: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque 93a0: 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute 93b0: 43 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 CKA_SERIAL_NUMBE 93c0: 52 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 R (0x%08lx) ..." 93d0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 93e0: 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 ) curr_attr_type 93f0: 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 );......if (obje 9400: 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43 ctclass != CKO_C 9410: 45 52 54 49 46 49 43 41 54 45 29 20 7b 0a 09 09 ERTIFICATE) {... 9420: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 9430: 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 PRINTF(" ... but 9440: 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 not getting it 9450: 62 65 63 61 75 73 65 20 77 65 20 61 72 65 20 6e because we are n 9460: 6f 74 20 61 20 63 65 72 74 69 66 69 63 61 74 65 ot a certificate 9470: 2e 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b .");.......break 9480: 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 ;.....}......if 9490: 28 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e (certificate_len 94a0: 20 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 78 35 >= 0) {......x5 94b0: 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 09_read_ret = x5 94c0: 30 39 5f 74 6f 5f 73 65 72 69 61 6c 28 63 65 72 09_to_serial(cer 94d0: 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 66 tificate, certif 94e0: 69 63 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c icate_len, &pVal 94f0: 75 65 29 3b 0a 09 09 09 09 09 69 66 20 28 78 35 ue);......if (x5 9500: 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 29 09_read_ret < 0) 9510: 20 7b 0a 09 09 09 09 09 09 70 56 61 6c 75 65 20 {.......pValue 9520: 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 = NULL;......} e 9530: 6c 73 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 lse {.......ulVa 9540: 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 lueLen = x509_re 9550: 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 ad_ret;......}.. 9560: 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 ...}......CACKEY 9570: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 9580: 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 28 25 ... returning (% 9590: 70 2f 25 6c 75 29 22 2c 20 70 56 61 6c 75 65 2c p/%lu)", pValue, 95a0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 95b0: 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... 95c0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas 95d0: 65 20 43 4b 41 5f 53 55 42 4a 45 43 54 3a 0a 09 e CKA_SUBJECT:.. 95e0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 95f0: 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti 9600: 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA 9610: 5f 53 55 42 4a 45 43 54 20 28 30 78 25 30 38 6c _SUBJECT (0x%08l 9620: 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e x) ...", (unsign 9630: 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 ed long) curr_at 9640: 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 tr_type);......i 9650: 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 f (objectclass ! 9660: 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 = CKO_CERTIFICAT 9670: 45 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 E) {......CACKEY 9680: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 9690: 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 ... but not gett 96a0: 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 ing it because w 96b0: 65 20 61 72 65 20 6e 6f 74 20 61 20 63 65 72 74 e are not a cert 96c0: 69 66 69 63 61 74 65 2e 22 29 3b 0a 0a 09 09 09 ificate.");..... 96d0: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a ..break;.....}.. 96e0: 09 09 09 09 69 66 20 28 63 65 72 74 69 66 69 63 ....if (certific 96f0: 61 74 65 5f 6c 65 6e 20 3e 3d 20 30 29 20 7b 0a ate_len >= 0) {. 9700: 09 09 09 09 09 78 35 30 39 5f 72 65 61 64 5f 72 .....x509_read_r 9710: 65 74 20 3d 20 78 35 30 39 5f 74 6f 5f 73 75 62 et = x509_to_sub 9720: 6a 65 63 74 28 63 65 72 74 69 66 69 63 61 74 65 ject(certificate 9730: 2c 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 , certificate_le 9740: 6e 2c 20 26 70 56 61 6c 75 65 29 3b 0a 09 09 09 n, &pValue);.... 9750: 09 09 69 66 20 28 78 35 30 39 5f 72 65 61 64 5f ..if (x509_read_ 9760: 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 09 09 09 ret < 0) {...... 9770: 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a .pValue = NULL;. 9780: 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 .....} else {... 9790: 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = 97a0: 20 78 35 30 39 5f 72 65 61 64 5f 72 65 74 3b 0a x509_read_ret;. 97b0: 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 .....}.....}.... 97c0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 97d0: 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 RINTF(" ... retu 97e0: 72 6e 69 6e 67 20 25 70 2f 25 6c 75 22 2c 20 70 rning %p/%lu", p 97f0: 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 Value, (unsigned 9800: 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 long) ulValueLe 9810: 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a n);......break;. 9820: 09 09 09 63 61 73 65 20 43 4b 41 5f 49 44 3a 0a ...case CKA_ID:. 9830: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 9840: 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 _PRINTF("Request 9850: 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b ing attribute CK 9860: 41 5f 49 44 20 28 30 78 25 30 38 6c 78 29 20 2e A_ID (0x%08lx) . 9870: 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 9880: 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 9890: 79 70 65 29 3b 0a 0a 09 09 09 09 75 63 54 6d 70 ype);......ucTmp 98a0: 42 75 66 5b 30 5d 20 3d 20 28 28 69 64 65 6e 74 Buf[0] = ((ident 98b0: 69 74 79 5f 6e 75 6d 20 2b 20 31 29 20 3e 3e 20 ity_num + 1) >> 98c0: 38 29 20 26 20 30 78 66 66 3b 0a 09 09 09 09 75 8) & 0xff;.....u 98d0: 63 54 6d 70 42 75 66 5b 31 5d 20 3d 20 20 28 69 cTmpBuf[1] = (i 98e0: 64 65 6e 74 69 74 79 5f 6e 75 6d 20 2b 20 31 29 dentity_num + 1) 98f0: 20 26 20 30 78 66 66 3b 0a 0a 09 09 09 09 70 56 & 0xff;......pV 9900: 61 6c 75 65 20 3d 20 26 75 63 54 6d 70 42 75 66 alue = &ucTmpBuf 9910: 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e ;.....ulValueLen 9920: 20 3d 20 32 3b 0a 0a 09 09 09 09 43 41 43 4b 45 = 2;......CACKE 9930: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 9940: 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 ... returning % 9950: 70 2f 25 6c 75 22 2c 20 70 56 61 6c 75 65 2c 20 p/%lu", pValue, 9960: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 9970: 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 ulValueLen);.... 9980: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 ..break;....case 9990: 20 43 4b 41 5f 43 45 52 54 49 46 49 43 41 54 45 CKA_CERTIFICATE 99a0: 5f 54 59 50 45 3a 0a 09 09 09 09 43 41 43 4b 45 _TYPE:.....CACKE 99b0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 99c0: 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri 99d0: 62 75 74 65 20 43 4b 41 5f 43 45 52 54 49 46 49 bute CKA_CERTIFI 99e0: 43 41 54 45 5f 54 59 50 45 20 28 30 78 25 30 38 CATE_TYPE (0x%08 99f0: 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig 9a00: 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a 9a10: 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... 9a20: 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 if (objectclass 9a30: 21 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 != CKO_CERTIFICA 9a40: 54 45 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 TE) {......CACKE 9a50: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 9a60: 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 ... but not get 9a70: 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 ting it because 9a80: 77 65 20 61 72 65 20 6e 6f 74 20 61 20 63 65 72 we are not a cer 9a90: 74 69 66 69 63 61 74 65 2e 22 29 3b 0a 0a 09 09 tificate.");.... 9aa0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a ...break;.....}. 9ab0: 0a 09 09 09 09 2f 2a 20 57 65 20 6f 6e 6c 79 20 ...../* We only 9ac0: 73 75 70 70 6f 72 74 20 6f 6e 65 20 63 65 72 74 support one cert 9ad0: 69 66 69 63 61 74 65 20 74 79 70 65 20 2a 2f 0a ificate type */. 9ae0: 09 09 09 09 63 6b 5f 63 65 72 74 69 66 69 63 61 ....ck_certifica 9af0: 74 65 5f 74 79 70 65 20 3d 20 43 4b 43 5f 58 5f te_type = CKC_X_ 9b00: 35 30 39 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 509;......pValue 9b10: 20 3d 20 26 63 6b 5f 63 65 72 74 69 66 69 63 61 = &ck_certifica 9b20: 74 65 5f 74 79 70 65 3b 0a 09 09 09 09 75 6c 56 te_type;.....ulV 9b30: 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 alueLen = sizeof 9b40: 28 63 6b 5f 63 65 72 74 69 66 69 63 61 74 65 5f (ck_certificate_ 9b50: 74 79 70 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b type);......CACK 9b60: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 9b70: 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning 9b80: 43 4b 43 5f 58 5f 35 30 39 20 28 25 6c 75 29 20 CKC_X_509 (%lu) 9b90: 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 (%p/%lu)", (unsi 9ba0: 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b gned long) *((CK 9bb0: 5f 43 45 52 54 49 46 49 43 41 54 45 5f 54 59 50 _CERTIFICATE_TYP 9bc0: 45 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 E *) pValue), pV 9bd0: 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 alue, (unsigned 9be0: 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e long) ulValueLen 9bf0: 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 );......break;.. 9c00: 09 09 63 61 73 65 20 43 4b 41 5f 4b 45 59 5f 54 ..case CKA_KEY_T 9c10: 59 50 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f YPE:.....CACKEY_ 9c20: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 9c30: 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 questing attribu 9c40: 74 65 20 43 4b 41 5f 4b 45 59 5f 54 59 50 45 20 te CKA_KEY_TYPE 9c50: 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 (0x%08lx) ...", 9c60: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 9c70: 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b curr_attr_type); 9c80: 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 ......if (object 9c90: 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 50 52 49 class != CKO_PRI 9ca0: 56 41 54 45 5f 4b 45 59 20 26 26 20 6f 62 6a 65 VATE_KEY && obje 9cb0: 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 50 ctclass != CKO_P 9cc0: 55 42 4c 49 43 5f 4b 45 59 29 20 7b 0a 09 09 09 UBLIC_KEY) {.... 9cd0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 9ce0: 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 RINTF(" ... but 9cf0: 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 not getting it b 9d00: 65 63 61 75 73 65 20 77 65 20 61 72 65 20 6e 6f ecause we are no 9d10: 74 20 61 20 6b 65 79 2e 22 29 3b 0a 0a 09 09 09 t a key.");..... 9d20: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a ..break;.....}.. 9d30: 09 09 09 09 2f 2a 20 57 65 20 6f 6e 6c 79 20 73 ..../* We only s 9d40: 75 70 70 6f 72 74 20 6f 6e 65 20 6b 65 79 20 74 upport one key t 9d50: 79 70 65 20 2a 2f 0a 09 09 09 09 63 6b 5f 6b 65 ype */.....ck_ke 9d60: 79 5f 74 79 70 65 20 3d 20 43 4b 4b 5f 52 53 41 y_type = CKK_RSA 9d70: 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 ;......pValue = 9d80: 26 63 6b 5f 6b 65 79 5f 74 79 70 65 3b 0a 09 09 &ck_key_type;... 9d90: 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 ..ulValueLen = s 9da0: 69 7a 65 6f 66 28 63 6b 5f 6b 65 79 5f 74 79 70 izeof(ck_key_typ 9db0: 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f e);......CACKEY_ 9dc0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 9dd0: 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 43 4b 4b .. returning CKK 9de0: 5f 52 53 41 20 28 25 6c 75 29 20 28 25 70 2f 25 _RSA (%lu) (%p/% 9df0: 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 lu)", (unsigned 9e00: 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 43 45 52 54 long) *((CK_CERT 9e10: 49 46 49 43 41 54 45 5f 54 59 50 45 20 2a 29 20 IFICATE_TYPE *) 9e20: 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c pValue), pValue, 9e30: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 9e40: 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... 9e50: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas 9e60: 65 20 43 4b 41 5f 53 49 47 4e 3a 0a 09 09 09 09 e CKA_SIGN:..... 9e70: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 9e80: 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 NTF("Requesting 9e90: 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 53 49 attribute CKA_SI 9ea0: 47 4e 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e GN (0x%08lx) ... 9eb0: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 9ec0: 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 g) curr_attr_typ 9ed0: 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a e);......if (obj 9ee0: 65 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f ectclass == CKO_ 9ef0: 50 52 49 56 41 54 45 5f 4b 45 59 29 20 7b 0a 09 PRIVATE_KEY) {.. 9f00: 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b ....pValue = &ck 9f10: 5f 74 72 75 65 3b 0a 09 09 09 09 09 75 6c 56 61 _true;......ulVa 9f20: 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 lueLen = sizeof( 9f30: 63 6b 5f 74 72 75 65 29 3b 0a 09 09 09 09 7d 20 ck_true);.....} 9f40: 65 6c 73 65 20 7b 0a 09 09 09 09 09 70 56 61 6c else {......pVal 9f50: 75 65 20 3d 20 26 63 6b 5f 66 61 6c 73 65 3b 0a ue = &ck_false;. 9f60: 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 .....ulValueLen 9f70: 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 = sizeof(ck_fals 9f80: 65 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 e);.....}......C 9f90: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 9fa0: 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 TF(" ... returni 9fb0: 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 ng %lu (%p/%lu)" 9fc0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 9fd0: 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 ) *((CK_BBOOL *) 9fe0: 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 pValue), pValue 9ff0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long a000: 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. a010: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca a020: 73 65 20 43 4b 41 5f 44 45 43 52 59 50 54 3a 0a se CKA_DECRYPT:. a030: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG a040: 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 _PRINTF("Request a050: 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b ing attribute CK a060: 41 5f 44 45 43 52 59 50 54 20 28 30 78 25 30 38 A_DECRYPT (0x%08 a070: 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig a080: 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a a090: 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... a0a0: 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 if (objectclass a0b0: 3d 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b == CKO_PRIVATE_K a0c0: 45 59 20 7c 7c 20 6f 62 6a 65 63 74 63 6c 61 73 EY || objectclas a0d0: 73 20 3d 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 5f s == CKO_PUBLIC_ a0e0: 4b 45 59 29 20 7b 0a 09 09 09 09 09 70 56 61 6c KEY) {......pVal a0f0: 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 ue = &ck_true;.. a100: 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = a110: 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 sizeof(ck_true) a120: 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 ;.....} else {.. a130: 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b ....pValue = &ck a140: 5f 66 61 6c 73 65 3b 0a 09 09 09 09 09 75 6c 56 _false;......ulV a150: 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 alueLen = sizeof a160: 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 09 09 09 09 (ck_false);..... a170: 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 }......CACKEY_DE a180: 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... a190: 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 returning %lu ( a1a0: 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 %p/%lu)", (unsig a1b0: 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f ned long) *((CK_ a1c0: 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 BBOOL *) pValue) a1d0: 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 , pValue, (unsig a1e0: 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 ned long) ulValu a1f0: 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 eLen);......brea a200: 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 k;....case CKA_T a210: 52 55 53 54 5f 53 45 52 56 45 52 5f 41 55 54 48 RUST_SERVER_AUTH a220: 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB a230: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque a240: 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute a250: 43 4b 41 5f 54 52 55 53 54 5f 53 45 52 56 45 52 CKA_TRUST_SERVER a260: 5f 41 55 54 48 20 28 30 78 25 30 38 6c 78 29 20 _AUTH (0x%08lx) a270: 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 ...", (unsigned a280: 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f long) curr_attr_ a290: 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c type);......pVal a2a0: 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 ue = &ck_true;.. a2b0: 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 ...ulValueLen = a2c0: 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b sizeof(ck_true); a2d0: 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB a2e0: 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... a2f0: 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 returning %lu (% a300: 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e p/%lu)", (unsign a310: 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 ed long) *((CK_B a320: 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c BOOL *) pValue), a330: 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e pValue, (unsign a340: 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 ed long) ulValue a350: 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b Len);......break a360: 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 ;....case CKA_TR a370: 55 53 54 5f 43 4c 49 45 4e 54 5f 41 55 54 48 3a UST_CLIENT_AUTH: a380: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU a390: 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 G_PRINTF("Reques a3a0: 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 ting attribute C a3b0: 4b 41 5f 54 52 55 53 54 5f 43 4c 49 45 4e 54 5f KA_TRUST_CLIENT_ a3c0: 41 55 54 48 20 28 30 78 25 30 38 6c 78 29 20 2e AUTH (0x%08lx) . a3d0: 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l a3e0: 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t a3f0: 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75 ype);......pValu a400: 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 e = &ck_true;... a410: 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 ..ulValueLen = s a420: 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a izeof(ck_true);. a430: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU a440: 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 G_PRINTF(" ... r a450: 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 eturning %lu (%p a460: 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 /%lu)", (unsigne a470: 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 d long) *((CK_BB a480: 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 OOL *) pValue), a490: 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 pValue, (unsigne a4a0: 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c d long) ulValueL a4b0: 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b en);......break; a4c0: 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 ....case CKA_TRU a4d0: 53 54 5f 43 4f 44 45 5f 53 49 47 4e 49 4e 47 3a ST_CODE_SIGNING: a4e0: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU a4f0: 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 G_PRINTF("Reques a500: 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 ting attribute C a510: 4b 41 5f 54 52 55 53 54 5f 43 4f 44 45 5f 53 49 KA_TRUST_CODE_SI a520: 47 4e 49 4e 47 20 28 30 78 25 30 38 6c 78 29 20 GNING (0x%08lx) a530: 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 ...", (unsigned a540: 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f long) curr_attr_ a550: 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c type);......pVal a560: 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 ue = &ck_true;.. a570: 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 ...ulValueLen = a580: 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b sizeof(ck_true); a590: 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB a5a0: 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... a5b0: 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 returning %lu (% a5c0: 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e p/%lu)", (unsign a5d0: 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 ed long) *((CK_B a5e0: 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c BOOL *) pValue), a5f0: 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e pValue, (unsign a600: 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 ed long) ulValue a610: 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b Len);......break a620: 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 ;....case CKA_TR a630: 55 53 54 5f 45 4d 41 49 4c 5f 50 52 4f 54 45 43 UST_EMAIL_PROTEC a640: 54 49 4f 4e 3a 0a 09 09 09 09 43 41 43 4b 45 59 TION:.....CACKEY a650: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R a660: 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 equesting attrib a670: 75 74 65 20 43 4b 41 5f 54 52 55 53 54 5f 45 4d ute CKA_TRUST_EM a680: 41 49 4c 5f 50 52 4f 54 45 43 54 49 4f 4e 20 28 AIL_PROTECTION ( a690: 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 0x%08lx) ...", ( a6a0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 unsigned long) c a6b0: 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a urr_attr_type);. a6c0: 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 .....pValue = &c a6d0: 6b 5f 74 72 75 65 3b 0a 09 09 09 09 75 6c 56 61 k_true;.....ulVa a6e0: 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 lueLen = sizeof( a6f0: 63 6b 5f 74 72 75 65 29 3b 0a 0a 09 09 09 09 43 ck_true);......C a700: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN a710: 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 TF(" ... returni a720: 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 ng %lu (%p/%lu)" a730: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long a740: 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 ) *((CK_BBOOL *) a750: 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 pValue), pValue a760: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long a770: 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. a780: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 64 65 ....break;....de a790: 66 61 75 6c 74 3a 0a 09 09 09 09 70 56 61 6c 75 fault:.....pValu a7a0: 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 75 6c e = NULL;.....ul a7b0: 56 61 6c 75 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c ValueLen = (CK_L a7c0: 4f 4e 47 29 20 2d 31 3b 0a 09 09 09 09 62 72 65 ONG) -1;.....bre a7d0: 61 6b 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 28 ak;...}....if (( a7e0: 28 43 4b 5f 4c 4f 4e 47 29 20 75 6c 56 61 6c 75 (CK_LONG) ulValu a7f0: 65 4c 65 6e 29 20 21 3d 20 28 28 43 4b 5f 4c 4f eLen) != ((CK_LO a800: 4e 47 29 20 2d 31 29 29 20 7b 0a 09 09 09 2f 2a NG) -1)) {..../* a810: 20 50 75 73 68 20 63 75 72 72 5f 61 74 74 72 20 Push curr_attr a820: 6f 6e 74 6f 20 74 68 65 20 73 74 61 63 6b 20 2a onto the stack * a830: 2f 0a 09 09 09 63 75 72 72 5f 61 74 74 72 2e 74 /....curr_attr.t a840: 79 70 65 20 3d 20 63 75 72 72 5f 61 74 74 72 5f ype = curr_attr_ a850: 74 79 70 65 3b 0a 09 09 09 63 75 72 72 5f 61 74 type;....curr_at a860: 74 72 2e 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 tr.ulValueLen = a870: 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a 0a 09 09 09 ulValueLen;..... a880: 63 75 72 72 5f 61 74 74 72 2e 70 56 61 6c 75 65 curr_attr.pValue a890: 20 3d 20 6d 61 6c 6c 6f 63 28 63 75 72 72 5f 61 = malloc(curr_a a8a0: 74 74 72 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 3b ttr.ulValueLen); a8b0: 0a 09 09 09 6d 65 6d 63 70 79 28 63 75 72 72 5f ....memcpy(curr_ a8c0: 61 74 74 72 2e 70 56 61 6c 75 65 2c 20 70 56 61 attr.pValue, pVa a8d0: 6c 75 65 2c 20 63 75 72 72 5f 61 74 74 72 2e 75 lue, curr_attr.u a8e0: 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 lValueLen);..... a8f0: 69 66 20 28 70 56 61 6c 75 65 5f 66 72 65 65 20 if (pValue_free a900: 26 26 20 70 56 61 6c 75 65 29 20 7b 0a 09 09 09 && pValue) {.... a910: 09 66 72 65 65 28 70 56 61 6c 75 65 29 3b 0a 09 .free(pValue);.. a920: 09 09 7d 0a 0a 09 09 09 69 66 20 28 6e 75 6d 61 ..}.....if (numa a930: 74 74 72 73 20 3e 3d 20 72 65 74 76 61 6c 5f 63 ttrs >= retval_c a940: 6f 75 6e 74 29 20 7b 0a 09 09 09 09 72 65 74 76 ount) {.....retv a950: 61 6c 5f 63 6f 75 6e 74 20 2a 3d 20 32 3b 0a 09 al_count *= 2;.. a960: 09 09 09 72 65 74 76 61 6c 20 3d 20 72 65 61 6c ...retval = real a970: 6c 6f 63 28 72 65 74 76 61 6c 2c 20 72 65 74 76 loc(retval, retv a980: 61 6c 5f 63 6f 75 6e 74 20 2a 20 73 69 7a 65 6f al_count * sizeo a990: 66 28 2a 72 65 74 76 61 6c 29 29 3b 0a 09 09 09 f(*retval));.... a9a0: 7d 0a 0a 09 09 09 6d 65 6d 63 70 79 28 26 72 65 }.....memcpy(&re a9b0: 74 76 61 6c 5b 6e 75 6d 61 74 74 72 73 5d 2c 20 tval[numattrs], a9c0: 26 63 75 72 72 5f 61 74 74 72 2c 20 73 69 7a 65 &curr_attr, size a9d0: 6f 66 28 63 75 72 72 5f 61 74 74 72 29 29 3b 0a of(curr_attr));. a9e0: 09 09 09 6e 75 6d 61 74 74 72 73 2b 2b 3b 0a 09 ...numattrs++;.. a9f0: 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 6e 75 6d 61 .}..}...if (numa aa00: 74 74 72 73 20 21 3d 20 30 29 20 7b 0a 09 09 72 ttrs != 0) {...r aa10: 65 74 76 61 6c 5f 63 6f 75 6e 74 20 3d 20 6e 75 etval_count = nu aa20: 6d 61 74 74 72 73 3b 0a 09 09 72 65 74 76 61 6c mattrs;...retval aa30: 20 3d 20 72 65 61 6c 6c 6f 63 28 72 65 74 76 61 = realloc(retva aa40: 6c 2c 20 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 l, retval_count aa50: 2a 20 73 69 7a 65 6f 66 28 2a 72 65 74 76 61 6c * sizeof(*retval aa60: 29 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 ));..} else {... aa70: 66 72 65 65 28 72 65 74 76 61 6c 29 3b 0a 0a 09 free(retval);... aa80: 09 72 65 74 76 61 6c 20 3d 20 4e 55 4c 4c 3b 0a .retval = NULL;. aa90: 09 7d 0a 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 3d .}...*pulCount = aaa0: 20 6e 75 6d 61 74 74 72 73 3b 0a 0a 09 43 41 43 numattrs;...CAC aab0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF aac0: 28 22 52 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 ("Returning %lu aad0: 6f 62 6a 65 63 74 73 20 28 25 70 29 2e 22 2c 20 objects (%p).", aae0: 6e 75 6d 61 74 74 72 73 2c 20 72 65 74 76 61 6c numattrs, retval aaf0: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 );...return(retv ab00: 61 6c 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e al);.}..CK_DEFIN ab10: 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV ab20: 2c 20 43 5f 49 6e 69 74 69 61 6c 69 7a 65 29 28 , C_Initialize)( ab30: 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 49 6e 69 CK_VOID_PTR pIni ab40: 74 41 72 67 73 29 20 7b 0a 09 43 4b 5f 43 5f 49 tArgs) {..CK_C_I ab50: 4e 49 54 49 41 4c 49 5a 45 5f 41 52 47 53 20 43 NITIALIZE_ARGS C ab60: 4b 5f 50 54 52 20 61 72 67 73 3b 0a 09 75 69 6e K_PTR args;..uin ab70: 74 33 32 5f 74 20 69 64 78 3b 0a 09 69 6e 74 20 t32_t idx;..int ab80: 6d 75 74 65 78 5f 69 6e 69 74 5f 72 65 74 3b 0a mutex_init_ret;. ab90: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P aba0: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") abb0: 3b 0a 0a 09 69 66 20 28 70 49 6e 69 74 41 72 67 ;...if (pInitArg abc0: 73 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 61 s != NULL) {...a abd0: 72 67 73 20 3d 20 70 49 6e 69 74 41 72 67 73 3b rgs = pInitArgs; abe0: 0a 09 09 6d 65 6d 63 70 79 28 26 63 61 63 6b 65 ...memcpy(&cacke abf0: 79 5f 61 72 67 73 2c 20 61 72 67 73 2c 20 73 69 y_args, args, si ac00: 7a 65 6f 66 28 63 61 63 6b 65 79 5f 61 72 67 73 zeof(cackey_args ac10: 29 29 3b 0a 0a 09 09 69 66 20 28 61 72 67 73 2d ));....if (args- ac20: 3e 43 72 65 61 74 65 4d 75 74 65 78 20 3d 3d 20 >CreateMutex == ac30: 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 44 65 NULL || args->De ac40: 73 74 72 6f 79 4d 75 74 65 78 20 3d 3d 20 4e 55 stroyMutex == NU ac50: 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 4c 6f 63 6b LL || args->Lock ac60: 4d 75 74 65 78 20 3d 3d 20 4e 55 4c 4c 20 7c 7c Mutex == NULL || ac70: 20 61 72 67 73 2d 3e 55 6e 6c 6f 63 6b 4d 75 74 args->UnlockMut ac80: 65 78 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 ex == NULL) {... ac90: 09 69 66 20 28 61 72 67 73 2d 3e 43 72 65 61 74 .if (args->Creat aca0: 65 4d 75 74 65 78 20 21 3d 20 4e 55 4c 4c 20 7c eMutex != NULL | acb0: 7c 20 61 72 67 73 2d 3e 44 65 73 74 72 6f 79 4d | args->DestroyM acc0: 75 74 65 78 20 21 3d 20 4e 55 4c 4c 20 7c 7c 20 utex != NULL || acd0: 61 72 67 73 2d 3e 4c 6f 63 6b 4d 75 74 65 78 20 args->LockMutex ace0: 21 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d != NULL || args- acf0: 3e 55 6e 6c 6f 63 6b 4d 75 74 65 78 20 21 3d 20 >UnlockMutex != ad00: 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 43 41 43 4b NULL) {.....CACK ad10: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( ad20: 22 45 72 72 6f 72 2e 20 53 6f 6d 65 2c 20 62 75 "Error. Some, bu ad30: 74 20 6e 6f 74 20 41 6c 6c 20 74 68 72 65 61 64 t not All thread ad40: 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 70 ing primitives p ad50: 72 6f 76 69 64 65 64 2e 22 29 3b 0a 0a 09 09 09 rovided.");..... ad60: 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU ad70: 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 09 09 7d MENTS_BAD);....} ad80: 0a 09 09 7d 0a 0a 09 09 69 66 20 28 61 72 67 73 ...}....if (args ad90: 2d 3e 70 52 65 73 65 72 76 65 64 20 21 3d 20 4e ->pReserved != N ada0: 55 4c 4c 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 ULL) {....CACKEY adb0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E adc0: 72 72 6f 72 2e 20 70 52 65 73 65 72 76 65 64 20 rror. pReserved add0: 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a is not NULL.");. ade0: 0a 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 ....return(CKR_A adf0: 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 RGUMENTS_BAD);.. ae00: 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 63 .}..} else {...c ae10: 61 63 6b 65 79 5f 61 72 67 73 2e 43 72 65 61 74 ackey_args.Creat ae20: 65 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 eMutex = NULL;.. ae30: 09 63 61 63 6b 65 79 5f 61 72 67 73 2e 44 65 73 .cackey_args.Des ae40: 74 72 6f 79 4d 75 74 65 78 20 3d 20 4e 55 4c 4c troyMutex = NULL ae50: 3b 0a 09 09 63 61 63 6b 65 79 5f 61 72 67 73 2e ;...cackey_args. ae60: 4c 6f 63 6b 4d 75 74 65 78 20 3d 20 4e 55 4c 4c LockMutex = NULL ae70: 3b 0a 09 09 63 61 63 6b 65 79 5f 61 72 67 73 2e ;...cackey_args. ae80: 55 6e 6c 6f 63 6b 4d 75 74 65 78 20 3d 20 4e 55 UnlockMutex = NU ae90: 4c 4c 3b 0a 09 09 63 61 63 6b 65 79 5f 61 72 67 LL;...cackey_arg aea0: 73 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 09 7d 0a s.flags = 0;..}. aeb0: 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 69 6e 69 ..if (cackey_ini aec0: 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA aed0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT aee0: 46 28 22 45 72 72 6f 72 2e 20 20 41 6c 72 65 61 F("Error. Alrea aef0: 64 79 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 dy initialized." af00: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR af10: 5f 43 52 59 50 54 4f 4b 49 5f 41 4c 52 45 41 44 _CRYPTOKI_ALREAD af20: 59 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a Y_INITIALIZED);. af30: 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 .}...for (idx = af40: 30 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 0; idx < (sizeof af50: 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions af60: 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke af70: 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 3b y_sessions[0])); af80: 20 69 64 78 2b 2b 29 20 7b 0a 09 09 63 61 63 6b idx++) {...cack af90: 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d ey_sessions[idx] afa0: 2e 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 7d 0a .active = 0;..}. afb0: 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 ..for (idx = 0; afc0: 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 idx < (sizeof(ca afd0: 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 ckey_slots) / si afe0: 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot aff0: 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b s[0])); idx++) { b000: 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ...cackey_slots[ b010: 69 64 78 5d 2e 61 63 74 69 76 65 20 3d 20 30 3b idx].active = 0; b020: 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ...cackey_slots[ b030: 69 64 78 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 idx].pcsc_reader b040: 20 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a 09 63 61 = NULL;..}...ca b050: 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized b060: 20 3d 20 31 3b 0a 0a 09 69 66 20 28 21 63 61 63 = 1;...if (!cac b070: 6b 65 79 5f 62 69 67 6c 6f 63 6b 5f 69 6e 69 74 key_biglock_init b080: 29 20 7b 0a 09 09 6d 75 74 65 78 5f 69 6e 69 74 ) {...mutex_init b090: 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 6d 75 _ret = cackey_mu b0a0: 74 65 78 5f 63 72 65 61 74 65 28 26 63 61 63 6b tex_create(&cack b0b0: 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... b0c0: 69 66 20 28 6d 75 74 65 78 5f 69 6e 69 74 5f 72 if (mutex_init_r b0d0: 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 09 43 41 et != 0) {....CA b0e0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT b0f0: 46 28 22 45 72 72 6f 72 2e 20 20 4d 75 74 65 78 F("Error. Mutex b100: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 initialization b110: 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 09 72 failed.");.....r b120: 65 74 75 72 6e 28 43 4b 52 5f 43 41 4e 54 5f 4c eturn(CKR_CANT_L b130: 4f 43 4b 29 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 OCK);...}....cac b140: 6b 65 79 5f 62 69 67 6c 6f 63 6b 5f 69 6e 69 74 key_biglock_init b150: 20 3d 20 31 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 = 1;..}...CACKE b160: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" b170: 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK b180: 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b (%i)", CKR_OK); b190: 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK b1a0: 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ b1b0: 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, b1c0: 43 5f 46 69 6e 61 6c 69 7a 65 29 28 43 4b 5f 56 C_Finalize)(CK_V b1d0: 4f 49 44 5f 50 54 52 20 70 52 65 73 65 72 76 65 OID_PTR pReserve b1e0: 64 29 20 7b 0a 09 75 69 6e 74 33 32 5f 74 20 69 d) {..uint32_t i b1f0: 64 78 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 dx;...CACKEY_DEB b200: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle b210: 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 52 65 73 d.");...if (pRes b220: 65 72 76 65 64 20 21 3d 20 4e 55 4c 4c 29 20 7b erved != NULL) { b230: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ b240: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 PRINTF("Error. p b250: 52 65 73 65 72 76 65 64 20 69 73 20 6e 6f 74 20 Reserved is not b260: 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 NULL.");....retu b270: 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 rn(CKR_ARGUMENTS b280: 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 _BAD);..}...if ( b290: 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali b2a0: 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ b2b0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er b2c0: 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia b2d0: 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret b2e0: 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI b2f0: 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED b300: 29 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 );..}...for (idx b310: 20 3d 20 30 3b 20 69 64 78 20 3c 20 28 73 69 7a = 0; idx < (siz b320: 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi b330: 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 ons) / sizeof(ca b340: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d ckey_sessions[0] b350: 29 29 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 )); idx++) {...i b360: 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f f (cackey_sessio b370: 6e 73 5b 69 64 78 5d 2e 61 63 74 69 76 65 29 20 ns[idx].active) b380: 7b 0a 09 09 09 43 5f 43 6c 6f 73 65 53 65 73 73 {....C_CloseSess b390: 69 6f 6e 28 69 64 78 29 3b 0a 09 09 7d 0a 09 7d ion(idx);...}..} b3a0: 0a 0a 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f ...cackey_slots_ b3b0: 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 29 disconnect_all() b3c0: 3b 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 ;...for (idx = 0 b3d0: 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 ; idx < (sizeof( b3e0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 cackey_slots) / b3f0: 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c sizeof(cackey_sl b400: 6f 74 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 ots[0])); idx++) b410: 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f {...if (cackey_ b420: 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f slots[idx].pcsc_ b430: 72 65 61 64 65 72 29 20 7b 0a 09 09 09 66 72 65 reader) {....fre b440: 65 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 e(cackey_slots[i b450: 64 78 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 29 dx].pcsc_reader) b460: 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 63 61 63 6b 65 ;...}..}...cacke b470: 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d 20 y_initialized = b480: 30 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 0;...CACKEY_DEBU b490: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return b4a0: 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" b4b0: 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret b4c0: 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}.. b4d0: 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI b4e0: 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 49 ON(CK_RV, C_GetI b4f0: 6e 66 6f 29 28 43 4b 5f 49 4e 46 4f 5f 50 54 52 nfo)(CK_INFO_PTR b500: 20 70 49 6e 66 6f 29 20 7b 0a 09 73 74 61 74 69 pInfo) {..stati b510: 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20 6d 61 c CK_UTF8CHAR ma b520: 6e 75 66 61 63 74 75 72 65 72 49 44 5b 5d 20 3d nufacturerID[] = b530: 20 22 55 2e 53 2e 20 47 6f 76 65 72 6e 6d 65 6e "U.S. Governmen b540: 74 22 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 t";..static CK_U b550: 54 46 38 43 48 41 52 20 6c 69 62 72 61 72 79 44 TF8CHAR libraryD b560: 65 73 63 72 69 70 74 69 6f 6e 5b 5d 20 3d 20 22 escription[] = " b570: 43 41 43 4b 65 79 22 3b 0a 0a 09 43 41 43 4b 45 CACKey";...CACKE b580: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" b590: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if b5a0: 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 20 (pInfo == NULL) b5b0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG b5c0: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. b5d0: 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 29 pInfo is NULL.") b5e0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ b5f0: 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. b600: 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey b610: 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. b620: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P b630: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N b640: 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." b650: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR b660: 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN b670: 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. b680: 09 70 49 6e 66 6f 2d 3e 63 72 79 70 74 6f 6b 69 .pInfo->cryptoki b690: 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 Version.major = b6a0: 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b ((CACKEY_CRYPTOK b6b0: 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 29 20 I_VERSION_CODE) b6c0: 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a 09 >> 16) & 0xff;.. b6d0: 70 49 6e 66 6f 2d 3e 63 72 79 70 74 6f 6b 69 56 pInfo->cryptokiV b6e0: 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 ersion.minor = ( b6f0: 28 43 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b 49 (CACKEY_CRYPTOKI b700: 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 29 20 3e _VERSION_CODE) > b710: 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a 09 6d > 8) & 0xff;...m b720: 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d 61 6e emset(pInfo->man b730: 75 66 61 63 74 75 72 65 72 49 44 2c 20 27 20 27 ufacturerID, ' ' b740: 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e , sizeof(pInfo-> b750: 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 29 manufacturerID)) b760: 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d ;..memcpy(pInfo- b770: 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c >manufacturerID, b780: 20 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c manufacturerID, b790: 20 73 69 7a 65 6f 66 28 6d 61 6e 75 66 61 63 74 sizeof(manufact b7a0: 75 72 65 72 49 44 29 20 2d 20 31 29 3b 0a 0a 09 urerID) - 1);... b7b0: 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 30 pInfo->flags = 0 b7c0: 78 30 30 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 x00;...memset(pI b7d0: 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 44 65 73 63 nfo->libraryDesc b7e0: 72 69 70 74 69 6f 6e 2c 20 27 20 27 2c 20 73 69 ription, ' ', si b7f0: 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6c 69 62 72 zeof(pInfo->libr b800: 61 72 79 44 65 73 63 72 69 70 74 69 6f 6e 29 29 aryDescription)) b810: 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d ;..memcpy(pInfo- b820: 3e 6c 69 62 72 61 72 79 44 65 73 63 72 69 70 74 >libraryDescript b830: 69 6f 6e 2c 20 6c 69 62 72 61 72 79 44 65 73 63 ion, libraryDesc b840: 72 69 70 74 69 6f 6e 2c 20 73 69 7a 65 6f 66 28 ription, sizeof( b850: 6c 69 62 72 61 72 79 44 65 73 63 72 69 70 74 69 libraryDescripti b860: 6f 6e 29 20 2d 20 31 29 3b 0a 0a 09 70 49 6e 66 on) - 1);...pInf b870: 6f 2d 3e 6c 69 62 72 61 72 79 56 65 72 73 69 6f o->libraryVersio b880: 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 61 63 6b 65 n.major = (cacke b890: 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 20 3e y_getversion() > b8a0: 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a 09 70 > 16) & 0xff;..p b8b0: 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 56 65 72 Info->libraryVer b8c0: 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 63 61 sion.minor = (ca b8d0: 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 ckey_getversion( b8e0: 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a ) >> 8) & 0xff;. b8f0: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P b900: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning b910: 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C b920: 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return b930: 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a (CKR_OK);.}../*. b940: 20 2a 20 50 72 6f 63 65 73 73 20 6c 69 73 74 20 * Process list b950: 6f 66 20 72 65 61 64 65 72 73 2c 20 61 6e 64 20 of readers, and b960: 63 72 65 61 74 65 20 6d 61 70 70 69 6e 67 20 62 create mapping b b970: 65 74 77 65 65 6e 20 72 65 61 64 65 72 20 6e 61 etween reader na b980: 6d 65 20 61 6e 64 20 73 6c 6f 74 20 49 44 0a 20 me and slot ID. b990: 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e */.CK_DEFINE_FUN b9a0: 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 CTION(CK_RV, C_G b9b0: 65 74 53 6c 6f 74 4c 69 73 74 29 28 43 4b 5f 42 etSlotList)(CK_B b9c0: 42 4f 4f 4c 20 74 6f 6b 65 6e 50 72 65 73 65 6e BOOL tokenPresen b9d0: 74 2c 20 43 4b 5f 53 4c 4f 54 5f 49 44 5f 50 54 t, CK_SLOT_ID_PT b9e0: 52 20 70 53 6c 6f 74 4c 69 73 74 2c 20 43 4b 5f R pSlotList, CK_ b9f0: 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 43 6f 75 ULONG_PTR pulCou ba00: 6e 74 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 nt) {..int mutex ba10: 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 70 63 _retval;..int pc ba20: 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 3b 0a sc_connect_ret;. ba30: 09 43 4b 5f 55 4c 4f 4e 47 20 63 6f 75 6e 74 2c .CK_ULONG count, ba40: 20 73 6c 6f 74 5f 63 6f 75 6e 74 20 3d 20 30 2c slot_count = 0, ba50: 20 63 75 72 72 73 6c 6f 74 3b 0a 09 63 68 61 72 currslot;..char ba60: 20 2a 70 63 73 63 5f 72 65 61 64 65 72 73 2c 20 *pcsc_readers, ba70: 2a 70 63 73 63 5f 72 65 61 64 65 72 73 5f 73 2c *pcsc_readers_s, ba80: 20 2a 70 63 73 63 5f 72 65 61 64 65 72 73 5f 65 *pcsc_readers_e ba90: 3b 0a 09 44 57 4f 52 44 20 70 63 73 63 5f 72 65 ;..DWORD pcsc_re baa0: 61 64 65 72 73 5f 6c 65 6e 3b 0a 09 4c 4f 4e 47 aders_len;..LONG bab0: 20 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 scard_listreade bac0: 72 73 5f 72 65 74 3b 0a 09 73 69 7a 65 5f 74 20 rs_ret;..size_t bad0: 63 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e 3b curr_reader_len; bae0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ baf0: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." bb00: 29 3b 0a 0a 09 69 66 20 28 70 75 6c 43 6f 75 6e );...if (pulCoun bb10: 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 t == NULL) {...C bb20: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN bb30: 54 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 43 6f TF("Error. pulCo bb40: 75 6e 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a unt is NULL.");. bb50: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR bb60: 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} bb70: 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i bb80: 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... bb90: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI bba0: 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not bbb0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); bbc0: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C bbd0: 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT bbe0: 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 6d IALIZED);..}...m bbf0: 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca bc00: 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( bc10: 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); bc20: 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv bc30: 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC bc40: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF bc50: 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e ("Error. Lockin bc60: 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... bc70: 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER bc80: 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... bc90: 2f 2a 20 43 6c 65 61 72 20 6c 69 73 74 20 6f 66 /* Clear list of bca0: 20 73 6c 6f 74 73 20 2a 2f 0a 09 69 66 20 28 70 slots */..if (p bcb0: 53 6c 6f 74 4c 69 73 74 29 20 7b 0a 09 09 2f 2a SlotList) {.../* bcc0: 20 4f 6e 6c 79 20 75 70 64 61 74 65 20 74 68 65 Only update the bcd0: 20 6c 69 73 74 20 6f 66 20 73 6c 6f 74 73 20 69 list of slots i bce0: 66 20 77 65 20 61 72 65 20 61 63 74 75 61 6c 6c f we are actuall bcf0: 79 20 62 65 69 6e 67 20 73 75 70 70 6c 79 20 74 y being supply t bd00: 68 65 20 73 6c 6f 74 20 69 6e 66 6f 72 6d 61 74 he slot informat bd10: 69 6f 6e 20 2a 2f 0a 09 09 63 61 63 6b 65 79 5f ion */...cackey_ bd20: 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 slots_disconnect bd30: 5f 61 6c 6c 28 29 3b 0a 0a 09 09 66 6f 72 20 28 _all();....for ( bd40: 63 75 72 72 73 6c 6f 74 20 3d 20 30 3b 20 63 75 currslot = 0; cu bd50: 72 72 73 6c 6f 74 20 3c 20 28 73 69 7a 65 6f 66 rrslot < (sizeof bd60: 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f (cackey_slots) / bd70: 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s bd80: 6c 6f 74 73 5b 30 5d 29 29 3b 20 63 75 72 72 73 lots[0])); currs bd90: 6c 6f 74 2b 2b 29 20 7b 0a 09 09 09 69 66 20 28 lot++) {....if ( bda0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 cackey_slots[cur bdb0: 72 73 6c 6f 74 5d 2e 70 63 73 63 5f 72 65 61 64 rslot].pcsc_read bdc0: 65 72 29 20 7b 0a 09 09 09 09 66 72 65 65 28 63 er) {.....free(c bdd0: 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 ackey_slots[curr bde0: 73 6c 6f 74 5d 2e 70 63 73 63 5f 72 65 61 64 65 slot].pcsc_reade bdf0: 72 29 3b 0a 0a 09 09 09 09 63 61 63 6b 65 79 5f r);......cackey_ be00: 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e slots[currslot]. be10: 70 63 73 63 5f 72 65 61 64 65 72 20 3d 20 4e 55 pcsc_reader = NU be20: 4c 4c 3b 0a 09 09 09 7d 0a 0a 09 09 09 63 61 63 LL;....}.....cac be30: 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c key_slots[currsl be40: 6f 74 5d 2e 61 63 74 69 76 65 20 3d 20 30 3b 0a ot].active = 0;. be50: 09 09 7d 0a 09 7d 0a 0a 09 2f 2a 20 44 65 74 65 ..}..}.../* Dete be60: 72 6d 69 6e 65 20 6c 69 73 74 20 6f 66 20 72 65 rmine list of re be70: 61 64 65 72 73 20 2a 2f 0a 09 70 63 73 63 5f 63 aders */..pcsc_c be80: 6f 6e 6e 65 63 74 5f 72 65 74 20 3d 20 63 61 63 onnect_ret = cac be90: 6b 65 79 5f 70 63 73 63 5f 63 6f 6e 6e 65 63 74 key_pcsc_connect bea0: 28 29 3b 0a 09 69 66 20 28 70 63 73 63 5f 63 6f ();..if (pcsc_co beb0: 6e 6e 65 63 74 5f 72 65 74 20 3c 20 30 29 20 7b nnect_ret < 0) { bec0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ bed0: 50 52 49 4e 54 46 28 22 43 6f 6e 6e 65 63 74 69 PRINTF("Connecti bee0: 6f 6e 20 74 6f 20 50 43 2f 53 43 20 66 61 69 6c on to PC/SC fail bef0: 65 64 2c 20 61 73 73 75 6d 69 6e 67 20 6e 6f 20 ed, assuming no bf00: 73 6c 6f 74 73 22 29 3b 0a 0a 09 09 73 6c 6f 74 slots");....slot bf10: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 7d 20 65 _count = 0;..} e bf20: 6c 73 65 20 7b 0a 09 09 70 63 73 63 5f 72 65 61 lse {...pcsc_rea bf30: 64 65 72 73 5f 6c 65 6e 20 3d 20 30 3b 0a 0a 09 ders_len = 0;... bf40: 09 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 .scard_listreade bf50: 72 73 5f 72 65 74 20 3d 20 53 43 61 72 64 4c 69 rs_ret = SCardLi bf60: 73 74 52 65 61 64 65 72 73 28 2a 63 61 63 6b 65 stReaders(*cacke bf70: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 4e y_pcsc_handle, N bf80: 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 26 70 63 73 63 ULL, NULL, &pcsc bf90: 5f 72 65 61 64 65 72 73 5f 6c 65 6e 29 3b 0a 09 _readers_len);.. bfa0: 09 69 66 20 28 73 63 61 72 64 5f 6c 69 73 74 72 .if (scard_listr bfb0: 65 61 64 65 72 73 5f 72 65 74 20 3d 3d 20 53 43 eaders_ret == SC bfc0: 41 52 44 5f 53 5f 53 55 43 43 45 53 53 20 26 26 ARD_S_SUCCESS && bfd0: 20 70 63 73 63 5f 72 65 61 64 65 72 73 5f 6c 65 pcsc_readers_le bfe0: 6e 20 21 3d 20 30 29 20 7b 0a 09 09 09 70 63 73 n != 0) {....pcs bff0: 63 5f 72 65 61 64 65 72 73 20 3d 20 6d 61 6c 6c c_readers = mall c000: 6f 63 28 70 63 73 63 5f 72 65 61 64 65 72 73 5f oc(pcsc_readers_ c010: 6c 65 6e 29 3b 0a 09 09 09 70 63 73 63 5f 72 65 len);....pcsc_re c020: 61 64 65 72 73 5f 73 20 3d 20 70 63 73 63 5f 72 aders_s = pcsc_r c030: 65 61 64 65 72 73 3b 0a 0a 09 09 09 73 63 61 72 eaders;.....scar c040: 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 d_listreaders_re c050: 74 20 3d 20 53 43 61 72 64 4c 69 73 74 52 65 61 t = SCardListRea c060: 64 65 72 73 28 2a 63 61 63 6b 65 79 5f 70 63 73 ders(*cackey_pcs c070: 63 5f 68 61 6e 64 6c 65 2c 20 4e 55 4c 4c 2c 20 c_handle, NULL, c080: 70 63 73 63 5f 72 65 61 64 65 72 73 2c 20 26 70 pcsc_readers, &p c090: 63 73 63 5f 72 65 61 64 65 72 73 5f 6c 65 6e 29 csc_readers_len) c0a0: 3b 0a 09 09 09 69 66 20 28 73 63 61 72 64 5f 6c ;....if (scard_l c0b0: 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 20 3d istreaders_ret = c0c0: 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 = SCARD_S_SUCCES c0d0: 53 29 20 7b 0a 09 09 09 09 70 63 73 63 5f 72 65 S) {.....pcsc_re c0e0: 61 64 65 72 73 5f 65 20 3d 20 70 63 73 63 5f 72 aders_e = pcsc_r c0f0: 65 61 64 65 72 73 20 2b 20 70 63 73 63 5f 72 65 eaders + pcsc_re c100: 61 64 65 72 73 5f 6c 65 6e 3b 0a 0a 09 09 09 09 aders_len;...... c110: 63 75 72 72 73 6c 6f 74 20 3d 20 30 3b 0a 09 09 currslot = 0;... c120: 09 09 77 68 69 6c 65 20 28 70 63 73 63 5f 72 65 ..while (pcsc_re c130: 61 64 65 72 73 20 3c 20 70 63 73 63 5f 72 65 61 aders < pcsc_rea c140: 64 65 72 73 5f 65 29 20 7b 0a 09 09 09 09 09 63 ders_e) {......c c150: 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e 20 3d urr_reader_len = c160: 20 73 74 72 6c 65 6e 28 70 63 73 63 5f 72 65 61 strlen(pcsc_rea c170: 64 65 72 73 29 3b 0a 0a 09 09 09 09 09 69 66 20 ders);.......if c180: 28 28 70 63 73 63 5f 72 65 61 64 65 72 73 20 2b ((pcsc_readers + c190: 20 63 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e curr_reader_len c1a0: 29 20 3e 20 70 63 73 63 5f 72 65 61 64 65 72 73 ) > pcsc_readers c1b0: 5f 65 29 20 7b 0a 09 09 09 09 09 09 62 72 65 61 _e) {.......brea c1c0: 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 k;......}....... c1d0: 69 66 20 28 63 75 72 72 5f 72 65 61 64 65 72 5f if (curr_reader_ c1e0: 6c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 09 09 len == 0) {..... c1f0: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a ..break;......}. c200: 0a 09 09 09 09 09 69 66 20 28 63 75 72 72 73 6c ......if (currsl c210: 6f 74 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 ot >= (sizeof(ca c220: 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 ckey_slots) / si c230: 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot c240: 73 5b 30 5d 29 29 29 20 7b 0a 09 09 09 09 09 09 s[0]))) {....... c250: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI c260: 4e 54 46 28 22 46 6f 75 6e 64 20 6d 6f 72 65 20 NTF("Found more c270: 72 65 61 64 65 72 73 20 74 68 61 6e 20 73 6c 6f readers than slo c280: 74 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 ts are available c290: 21 22 29 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 !");........brea c2a0: 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 k;......}....... c2b0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI c2c0: 4e 54 46 28 22 46 6f 75 6e 64 20 72 65 61 64 65 NTF("Found reade c2d0: 72 3a 20 25 73 22 2c 20 70 63 73 63 5f 72 65 61 r: %s", pcsc_rea c2e0: 64 65 72 73 29 3b 0a 0a 09 09 09 09 09 2f 2a 20 ders);......./* c2f0: 4f 6e 6c 79 20 75 70 64 61 74 65 20 74 68 65 20 Only update the c300: 6c 69 73 74 20 6f 66 20 73 6c 6f 74 73 20 69 66 list of slots if c310: 20 77 65 20 61 72 65 20 61 63 74 75 61 6c 6c 79 we are actually c320: 20 62 65 69 6e 67 20 73 75 70 70 6c 79 20 74 68 being supply th c330: 65 20 73 6c 6f 74 20 69 6e 66 6f 72 6d 61 74 69 e slot informati c340: 6f 6e 20 2a 2f 0a 09 09 09 09 09 69 66 20 28 70 on */......if (p c350: 53 6c 6f 74 4c 69 73 74 29 20 7b 0a 09 09 09 09 SlotList) {..... c360: 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 ..cackey_slots[c c370: 75 72 72 73 6c 6f 74 5d 2e 61 63 74 69 76 65 20 urrslot].active c380: 3d 20 31 3b 0a 09 09 09 09 09 09 63 61 63 6b 65 = 1;.......cacke c390: 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 y_slots[currslot c3a0: 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 20 3d 20 ].pcsc_reader = c3b0: 73 74 72 64 75 70 28 70 63 73 63 5f 72 65 61 64 strdup(pcsc_read c3c0: 65 72 73 29 3b 0a 09 09 09 09 09 09 63 61 63 6b ers);.......cack c3d0: 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f ey_slots[currslo c3e0: 74 5d 2e 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e t].pcsc_card_con c3f0: 6e 65 63 74 65 64 20 3d 20 30 3b 0a 09 09 09 09 nected = 0;..... c400: 09 7d 0a 09 09 09 09 09 63 75 72 72 73 6c 6f 74 .}......currslot c410: 2b 2b 3b 0a 0a 09 09 09 09 09 70 63 73 63 5f 72 ++;.......pcsc_r c420: 65 61 64 65 72 73 20 2b 3d 20 63 75 72 72 5f 72 eaders += curr_r c430: 65 61 64 65 72 5f 6c 65 6e 20 2b 20 31 3b 0a 09 eader_len + 1;.. c440: 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 63 75 ...}......if (cu c450: 72 72 73 6c 6f 74 20 3e 20 30 29 20 7b 0a 09 09 rrslot > 0) {... c460: 09 09 09 73 6c 6f 74 5f 63 6f 75 6e 74 20 3d 20 ...slot_count = c470: 63 75 72 72 73 6c 6f 74 3b 0a 09 09 09 09 7d 0a currslot;.....}. c480: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 ...} else {..... c490: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI c4a0: 4e 54 46 28 22 53 65 63 6f 6e 64 20 63 61 6c 6c NTF("Second call c4b0: 20 74 6f 20 53 43 61 72 64 4c 69 73 74 52 65 61 to SCardListRea c4c0: 64 65 72 73 20 66 61 69 6c 65 64 2c 20 72 65 74 ders failed, ret c4d0: 75 72 6e 20 25 73 2f 25 6c 69 22 2c 20 43 41 43 urn %s/%li", CAC c4e0: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 KEY_DEBUG_FUNC_S c4f0: 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 CARDERR_TO_STR(s c500: 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 card_listreaders c510: 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 _ret), (long) sc c520: 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f ard_listreaders_ c530: 72 65 74 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 66 ret);....}.....f c540: 72 65 65 28 70 63 73 63 5f 72 65 61 64 65 72 73 ree(pcsc_readers c550: 5f 73 29 3b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a _s);...} else {. c560: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ c570: 50 52 49 4e 54 46 28 22 46 69 72 73 74 20 63 61 PRINTF("First ca c580: 6c 6c 20 74 6f 20 53 43 61 72 64 4c 69 73 74 52 ll to SCardListR c590: 65 61 64 65 72 73 20 66 61 69 6c 65 64 2c 20 72 eaders failed, r c5a0: 65 74 75 72 6e 20 25 73 2f 25 6c 69 22 2c 20 43 eturn %s/%li", C c5b0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC c5c0: 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 _SCARDERR_TO_STR c5d0: 28 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 (scard_listreade c5e0: 72 73 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20 rs_ret), (long) c5f0: 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 scard_listreader c600: 73 5f 72 65 74 29 3b 0a 09 09 7d 0a 09 7d 0a 0a s_ret);...}..}.. c610: 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = c620: 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl c630: 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo c640: 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ c650: 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. c660: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR c670: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e INTF("Error. Un c680: 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 locking failed." c690: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR c6a0: 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); c6b0: 0a 09 7d 0a 0a 09 69 66 20 28 70 53 6c 6f 74 4c ..}...if (pSlotL c6c0: 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 ist == NULL) {.. c6d0: 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 73 6c 6f .*pulCount = slo c6e0: 74 5f 63 6f 75 6e 74 3b 0a 0a 09 09 43 41 43 4b t_count;....CACK c6f0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( c700: 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O c710: 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) c720: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ c730: 4f 4b 29 3b 0a 09 7d 0a 0a 09 63 6f 75 6e 74 20 OK);..}...count c740: 3d 20 2a 70 75 6c 43 6f 75 6e 74 3b 0a 09 69 66 = *pulCount;..if c750: 20 28 63 6f 75 6e 74 20 3c 20 73 6c 6f 74 5f 63 (count < slot_c c760: 6f 75 6e 74 29 20 7b 0a 09 09 43 41 43 4b 45 59 ount) {...CACKEY c770: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E c780: 72 72 6f 72 2e 20 55 73 65 72 20 61 6c 6c 6f 63 rror. User alloc c790: 61 74 65 64 20 25 6c 75 20 65 6e 74 72 69 65 73 ated %lu entries c7a0: 2c 20 62 75 74 20 77 65 20 68 61 76 65 20 25 6c , but we have %l c7b0: 75 20 65 6e 74 72 69 65 73 2e 22 2c 20 63 6f 75 u entries.", cou c7c0: 6e 74 2c 20 73 6c 6f 74 5f 63 6f 75 6e 74 29 3b nt, slot_count); c7d0: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 42 ....return(CKR_B c7e0: 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 UFFER_TOO_SMALL) c7f0: 3b 09 0a 09 7d 0a 0a 09 66 6f 72 20 28 63 75 72 ;...}...for (cur c800: 72 73 6c 6f 74 20 3d 20 30 3b 20 63 75 72 72 73 rslot = 0; currs c810: 6c 6f 74 20 3c 20 73 6c 6f 74 5f 63 6f 75 6e 74 lot < slot_count c820: 3b 20 63 75 72 72 73 6c 6f 74 2b 2b 29 20 7b 0a ; currslot++) {. c830: 09 09 70 53 6c 6f 74 4c 69 73 74 5b 63 75 72 72 ..pSlotList[curr c840: 73 6c 6f 74 5d 20 3d 20 63 75 72 72 73 6c 6f 74 slot] = currslot c850: 3b 0a 09 7d 0a 0a 09 2a 70 75 6c 43 6f 75 6e 74 ;..}...*pulCount c860: 20 3d 20 73 6c 6f 74 5f 63 6f 75 6e 74 3b 0a 0a = slot_count;.. c870: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR c880: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning c890: 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK c8a0: 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 R_OK);...return( c8b0: 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 74 6f 6b 65 6e CKR_OK);...token c8c0: 50 72 65 73 65 6e 74 20 3d 20 74 6f 6b 65 6e 50 Present = tokenP c8d0: 72 65 73 65 6e 74 3b 20 2f 2a 20 53 75 70 72 65 resent; /* Supre c8e0: 73 73 20 75 6e 75 73 65 64 20 76 61 72 69 61 62 ss unused variab c8f0: 6c 65 20 77 61 72 6e 69 6e 67 20 2a 2f 0a 7d 0a le warning */.}. c900: 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT c910: 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 ION(CK_RV, C_Get c920: 53 6c 6f 74 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f SlotInfo)(CK_SLO c930: 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f T_ID slotID, CK_ c940: 53 4c 4f 54 5f 49 4e 46 4f 5f 50 54 52 20 70 49 SLOT_INFO_PTR pI c950: 6e 66 6f 29 20 7b 0a 09 73 74 61 74 69 63 20 43 nfo) {..static C c960: 4b 5f 55 54 46 38 43 48 41 52 20 73 6c 6f 74 44 K_UTF8CHAR slotD c970: 65 73 63 72 69 70 74 69 6f 6e 5b 5d 20 3d 20 22 escription[] = " c980: 43 41 43 4b 65 79 20 53 6c 6f 74 22 3b 0a 09 69 CACKey Slot";..i c990: 6e 74 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 nt bytes_to_copy c9a0: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG c9b0: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. c9c0: 22 29 3b 0a 0a 09 69 66 20 28 70 49 6e 66 6f 20 ");...if (pInfo c9d0: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC c9e0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF c9f0: 28 22 45 72 72 6f 72 2e 20 70 49 6e 66 6f 20 69 ("Error. pInfo i ca00: 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 s NULL.");....re ca10: 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN ca20: 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if ca30: 20 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 (slotID < 0 || ca40: 73 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f slotID >= (sizeo ca50: 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 f(cackey_slots) ca60: 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ ca70: 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 slots[0]))) {... ca80: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI ca90: 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 NTF("Error. Inva caa0: 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 lid slot request cab0: 65 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 ed (%lu), outsid cac0: 65 20 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 e of valid range cad0: 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 ", slotID);....r cae0: 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 eturn(CKR_SLOT_I caf0: 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a D_INVALID);..}.. cb00: 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 .if (cackey_slot cb10: 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 s[slotID].active cb20: 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 == 0) {...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 49 6e 76 61 6c 69 64 20 73 Error. Invalid s cb50: 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 lot requested (% cb60: 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 lu), slot not cu cb70: 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c rrently active", cb80: 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 slotID);....ret cb90: 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f urn(CKR_SLOT_ID_ cba0: 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i cbb0: 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi cbc0: 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK cbd0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( cbe0: 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini cbf0: 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... cc00: 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT cc10: 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI cc20: 5a 45 44 29 3b 0a 09 7d 0a 0a 09 6d 65 6d 73 65 ZED);..}...memse cc30: 74 28 70 49 6e 66 6f 2d 3e 73 6c 6f 74 44 65 73 t(pInfo->slotDes cc40: 63 72 69 70 74 69 6f 6e 2c 20 27 20 27 2c 20 73 cription, ' ', s cc50: 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 73 6c 6f izeof(pInfo->slo cc60: 74 44 65 73 63 72 69 70 74 69 6f 6e 29 29 3b 0a tDescription));. cc70: 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 73 .memcpy(pInfo->s cc80: 6c 6f 74 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 lotDescription, cc90: 73 6c 6f 74 44 65 73 63 72 69 70 74 69 6f 6e 2c slotDescription, cca0: 20 73 69 7a 65 6f 66 28 73 6c 6f 74 44 65 73 63 sizeof(slotDesc ccb0: 72 69 70 74 69 6f 6e 29 20 2d 20 31 29 3b 0a 0a ription) - 1);.. ccc0: 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d .memset(pInfo->m ccd0: 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 27 anufacturerID, ' cce0: 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f ', sizeof(pInfo ccf0: 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 ->manufacturerID cd00: 29 29 3b 0a 0a 09 62 79 74 65 73 5f 74 6f 5f 63 ));...bytes_to_c cd10: 6f 70 79 20 3d 20 73 74 72 6c 65 6e 28 63 61 63 opy = strlen(cac cd20: 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 key_slots[slotID cd30: 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 29 3b 0a ].pcsc_reader);. cd40: 09 69 66 20 28 73 69 7a 65 6f 66 28 70 49 6e 66 .if (sizeof(pInf cd50: 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 o->manufacturerI cd60: 44 29 20 3c 20 62 79 74 65 73 5f 74 6f 5f 63 6f D) < bytes_to_co cd70: 70 79 29 20 7b 0a 09 09 62 79 74 65 73 5f 74 6f py) {...bytes_to cd80: 5f 63 6f 70 79 20 3d 20 73 69 7a 65 6f 66 28 70 _copy = sizeof(p cd90: 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 Info->manufactur cda0: 65 72 49 44 29 3b 0a 09 7d 0a 09 6d 65 6d 63 70 erID);..}..memcp cdb0: 79 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 y(pInfo->manufac cdc0: 74 75 72 65 72 49 44 2c 20 63 61 63 6b 65 79 5f turerID, cackey_ cdd0: 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 70 63 slots[slotID].pc cde0: 73 63 5f 72 65 61 64 65 72 2c 20 62 79 74 65 73 sc_reader, bytes cdf0: 5f 74 6f 5f 63 6f 70 79 29 3b 0a 0a 09 70 49 6e _to_copy);...pIn ce00: 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 30 3b 0a 0a fo->flags = 0;.. ce10: 09 69 66 20 28 63 61 63 6b 65 79 5f 74 6f 6b 65 .if (cackey_toke ce20: 6e 5f 70 72 65 73 65 6e 74 28 26 63 61 63 6b 65 n_present(&cacke ce30: 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 29 y_slots[slotID]) ce40: 29 20 7b 0a 09 09 70 49 6e 66 6f 2d 3e 66 6c 61 ) {...pInfo->fla ce50: 67 73 20 7c 3d 20 43 4b 46 5f 54 4f 4b 45 4e 5f gs |= CKF_TOKEN_ ce60: 50 52 45 53 45 4e 54 3b 0a 09 7d 0a 0a 09 70 49 PRESENT;..}...pI ce70: 6e 66 6f 2d 3e 68 61 72 64 77 61 72 65 56 65 72 nfo->hardwareVer ce80: 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 61 sion.major = (ca ce90: 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 ckey_getversion( cea0: 29 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b ) >> 16) & 0xff; ceb0: 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 ..pInfo->hardwar cec0: 65 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d eVersion.minor = ced0: 20 28 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 (cackey_getvers cee0: 69 6f 6e 28 29 20 3e 3e 20 38 29 20 26 20 30 78 ion() >> 8) & 0x cef0: 66 66 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66 69 72 ff;...pInfo->fir cf00: 6d 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a mwareVersion.maj cf10: 6f 72 20 3d 20 30 78 30 30 3b 0a 09 70 49 6e 66 or = 0x00;..pInf cf20: 6f 2d 3e 66 69 72 6d 77 61 72 65 56 65 72 73 69 o->firmwareVersi cf30: 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 30 78 30 30 3b on.minor = 0x00; cf40: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ cf50: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin cf60: 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", cf70: 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 CKR_OK);...retur cf80: 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b n(CKR_OK);.}..CK cf90: 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION cfa0: 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 54 6f 6b (CK_RV, C_GetTok cfb0: 65 6e 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f enInfo)(CK_SLOT_ cfc0: 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 54 4f ID slotID, CK_TO cfd0: 4b 45 4e 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e KEN_INFO_PTR pIn cfe0: 66 6f 29 20 7b 0a 09 73 74 61 74 69 63 20 43 4b fo) {..static CK cff0: 5f 55 54 46 38 43 48 41 52 20 6d 61 6e 75 66 61 _UTF8CHAR manufa d000: 63 74 75 72 65 72 49 44 5b 5d 20 3d 20 22 55 2e cturerID[] = "U. d010: 53 2e 20 47 6f 76 65 72 6e 6d 65 6e 74 22 3b 0a S. Government";. d020: 09 73 74 61 74 69 63 20 43 4b 5f 55 54 46 38 43 .static CK_UTF8C d030: 48 41 52 20 64 65 66 61 75 6c 74 4c 61 62 65 6c HAR defaultLabel d040: 5b 5d 20 3d 20 22 55 6e 6b 6e 6f 77 6e 20 54 6f [] = "Unknown To d050: 6b 65 6e 22 3b 0a 09 73 74 61 74 69 63 20 43 4b ken";..static CK d060: 5f 55 54 46 38 43 48 41 52 20 6d 6f 64 65 6c 5b _UTF8CHAR model[ d070: 5d 20 3d 20 22 43 41 43 20 54 6f 6b 65 6e 22 3b ] = "CAC Token"; d080: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ d090: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." d0a0: 29 3b 0a 0a 09 69 66 20 28 70 49 6e 66 6f 20 3d );...if (pInfo = d0b0: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK d0c0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( d0d0: 22 45 72 72 6f 72 2e 20 70 49 6e 66 6f 20 69 73 "Error. pInfo is d0e0: 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 NULL.");....ret d0f0: 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 urn(CKR_ARGUMENT d100: 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 S_BAD);..}...if d110: 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 (slotID < 0 || s d120: 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 lotID >= (sizeof d130: 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f (cackey_slots) / d140: 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s d150: 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 lots[0]))) {...C d160: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN d170: 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c TF("Error. Inval d180: 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 id slot requeste d190: 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 d (%lu), outside d1a0: 20 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 of valid range" d1b0: 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 , slotID);....re d1c0: 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 turn(CKR_SLOT_ID d1d0: 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... d1e0: 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 if (cackey_slots d1f0: 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 [slotID].active d200: 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 == 0) {...CACKEY d210: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E d220: 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c rror. Invalid sl d230: 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c ot requested (%l d240: 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 u), slot not cur d250: 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20 rently active", d260: 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 slotID);....retu d270: 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 rn(CKR_SLOT_ID_I d280: 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 NVALID);..}...if d290: 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia d2a0: 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE d2b0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" d2c0: 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init d2d0: 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r d2e0: 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO d2f0: 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ d300: 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 ED);..}...if (!c d310: 61 63 6b 65 79 5f 74 6f 6b 65 6e 5f 70 72 65 73 ackey_token_pres d320: 65 6e 74 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 ent(&cackey_slot d330: 73 5b 73 6c 6f 74 49 44 5d 29 29 20 7b 0a 09 09 s[slotID])) {... d340: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI d350: 4e 54 46 28 22 4e 6f 20 74 6f 6b 65 6e 20 69 73 NTF("No token is d360: 20 70 72 65 73 65 6e 74 20 69 6e 20 73 6c 6f 74 present in slot d370: 49 44 20 3d 20 25 6c 75 22 2c 20 73 6c 6f 74 49 ID = %lu", slotI d380: 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b D);....return(CK d390: 52 5f 54 4f 4b 45 4e 5f 4e 4f 54 5f 50 52 45 53 R_TOKEN_NOT_PRES d3a0: 45 4e 54 29 3b 0a 09 7d 0a 0a 09 6d 65 6d 73 65 ENT);..}...memse d3b0: 74 28 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20 t(pInfo->label, d3c0: 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 ' ', sizeof(pInf d3d0: 6f 2d 3e 6c 61 62 65 6c 29 29 3b 0a 09 69 66 20 o->label));..if d3e0: 28 31 29 20 7b 0a 09 09 6d 65 6d 63 70 79 28 70 (1) {...memcpy(p d3f0: 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20 64 65 66 Info->label, def d400: 61 75 6c 74 4c 61 62 65 6c 2c 20 73 69 7a 65 6f aultLabel, sizeo d410: 66 28 64 65 66 61 75 6c 74 4c 61 62 65 6c 29 20 f(defaultLabel) d420: 2d 20 31 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a - 1);..} else {. d430: 09 7d 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 .}...memset(pInf d440: 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 o->manufacturerI d450: 44 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 D, ' ', sizeof(p d460: 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 Info->manufactur d470: 65 72 49 44 29 29 3b 0a 09 6d 65 6d 63 70 79 28 erID));..memcpy( d480: 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 pInfo->manufactu d490: 72 65 72 49 44 2c 20 6d 61 6e 75 66 61 63 74 75 rerID, manufactu d4a0: 72 65 72 49 44 2c 20 73 69 7a 65 6f 66 28 6d 61 rerID, sizeof(ma d4b0: 6e 75 66 61 63 74 75 72 65 72 49 44 29 20 2d 20 nufacturerID) - d4c0: 31 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 1);...memset(pIn d4d0: 66 6f 2d 3e 6d 6f 64 65 6c 2c 20 27 20 27 2c 20 fo->model, ' ', d4e0: 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 6f sizeof(pInfo->mo d4f0: 64 65 6c 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 del));..memcpy(p d500: 49 6e 66 6f 2d 3e 6d 6f 64 65 6c 2c 20 6d 6f 64 Info->model, mod d510: 65 6c 2c 20 73 69 7a 65 6f 66 28 6d 6f 64 65 6c el, sizeof(model d520: 29 20 2d 20 31 29 3b 0a 0a 09 6d 65 6d 73 65 74 ) - 1);...memset d530: 28 70 49 6e 66 6f 2d 3e 73 65 72 69 61 6c 4e 75 (pInfo->serialNu d540: 6d 62 65 72 2c 20 27 20 27 2c 20 73 69 7a 65 6f mber, ' ', sizeo d550: 66 28 70 49 6e 66 6f 2d 3e 73 65 72 69 61 6c 4e f(pInfo->serialN d560: 75 6d 62 65 72 29 29 3b 0a 0a 09 6d 65 6d 73 65 umber));...memse d570: 74 28 70 49 6e 66 6f 2d 3e 75 74 63 54 69 6d 65 t(pInfo->utcTime d580: 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 , ' ', sizeof(pI d590: 6e 66 6f 2d 3e 75 74 63 54 69 6d 65 29 29 3b 0a nfo->utcTime));. d5a0: 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 ..pInfo->hardwar d5b0: 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d eVersion.major = d5c0: 20 28 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 (cackey_getvers d5d0: 69 6f 6e 28 29 20 3e 3e 20 31 36 29 20 26 20 30 ion() >> 16) & 0 d5e0: 78 66 66 3b 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 xff;..pInfo->har d5f0: 64 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e dwareVersion.min d600: 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 65 74 or = (cackey_get d610: 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 38 29 20 version() >> 8) d620: 26 20 30 78 66 66 3b 0a 0a 09 70 49 6e 66 6f 2d & 0xff;...pInfo- d630: 3e 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f 6e >firmwareVersion d640: 2e 6d 61 6a 6f 72 20 3d 20 30 78 30 30 3b 0a 09 .major = 0x00;.. d650: 70 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 72 65 56 pInfo->firmwareV d660: 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 30 ersion.minor = 0 d670: 78 30 30 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66 6c x00;...pInfo->fl d680: 61 67 73 20 3d 20 43 4b 46 5f 57 52 49 54 45 5f ags = CKF_WRITE_ d690: 50 52 4f 54 45 43 54 45 44 20 7c 20 43 4b 46 5f PROTECTED | CKF_ d6a0: 55 53 45 52 5f 50 49 4e 5f 49 4e 49 54 49 41 4c USER_PIN_INITIAL d6b0: 49 5a 45 44 20 7c 20 43 4b 46 5f 54 4f 4b 45 4e IZED | CKF_TOKEN d6c0: 5f 49 4e 49 54 49 41 4c 49 5a 45 44 3b 0a 0a 09 _INITIALIZED;... d6d0: 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 53 65 73 73 pInfo->ulMaxSess d6e0: 69 6f 6e 43 6f 75 6e 74 20 3d 20 28 73 69 7a 65 ionCount = (size d6f0: 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio d700: 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ns) / sizeof(cac d710: 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 key_sessions[0]) d720: 29 20 2d 20 31 3b 0a 09 70 49 6e 66 6f 2d 3e 75 ) - 1;..pInfo->u d730: 6c 53 65 73 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 lSessionCount = d740: 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 CK_UNAVAILABLE_I d750: 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e NFORMATION;..pIn d760: 66 6f 2d 3e 75 6c 4d 61 78 52 77 53 65 73 73 69 fo->ulMaxRwSessi d770: 6f 6e 43 6f 75 6e 74 20 3d 20 30 3b 0a 09 70 49 onCount = 0;..pI d780: 6e 66 6f 2d 3e 75 6c 52 77 53 65 73 73 69 6f 6e nfo->ulRwSession d790: 43 6f 75 6e 74 20 3d 20 43 4b 5f 55 4e 41 56 41 Count = CK_UNAVA d7a0: 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 ILABLE_INFORMATI d7b0: 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 ON;..pInfo->ulMa d7c0: 78 50 69 6e 4c 65 6e 20 3d 20 31 32 38 3b 0a 09 xPinLen = 128;.. d7d0: 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 50 69 6e 4c pInfo->ulMinPinL d7e0: 65 6e 20 3d 20 30 3b 0a 09 70 49 6e 66 6f 2d 3e en = 0;..pInfo-> d7f0: 75 6c 54 6f 74 61 6c 50 75 62 6c 69 63 4d 65 6d ulTotalPublicMem d800: 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c ory = CK_UNAVAIL d810: 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e ABLE_INFORMATION d820: 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 46 72 65 65 ;..pInfo->ulFree d830: 50 75 62 6c 69 63 4d 65 6d 6f 72 79 20 3d 20 43 PublicMemory = C d840: 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e K_UNAVAILABLE_IN d850: 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 FORMATION;..pInf d860: 6f 2d 3e 75 6c 54 6f 74 61 6c 50 72 69 76 61 74 o->ulTotalPrivat d870: 65 4d 65 6d 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 eMemory = CK_UNA d880: 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 VAILABLE_INFORMA d890: 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c TION;..pInfo->ul d8a0: 46 72 65 65 50 72 69 76 61 74 65 4d 65 6d 6f 72 FreePrivateMemor d8b0: 79 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 y = CK_UNAVAILAB d8c0: 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a LE_INFORMATION;. d8d0: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P d8e0: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning d8f0: 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C d900: 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return d910: 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f (CKR_OK);.}..CK_ d920: 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( d930: 43 4b 5f 52 56 2c 20 43 5f 57 61 69 74 46 6f 72 CK_RV, C_WaitFor d940: 53 6c 6f 74 45 76 65 6e 74 29 28 43 4b 5f 46 4c SlotEvent)(CK_FL d950: 41 47 53 20 66 6c 61 67 73 2c 20 43 4b 5f 53 4c AGS flags, CK_SL d960: 4f 54 5f 49 44 5f 50 54 52 20 70 53 6c 6f 74 49 OT_ID_PTR pSlotI d970: 44 2c 20 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 D, CK_VOID_PTR p d980: 52 65 73 65 72 76 65 64 29 20 7b 0a 09 43 41 43 Reserved) {..CAC d990: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF d9a0: 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i d9b0: 66 20 28 70 52 65 73 65 72 76 65 64 20 21 3d 20 f (pReserved != d9c0: 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY d9d0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E d9e0: 72 72 6f 72 2e 20 70 52 65 73 65 72 76 65 64 20 rror. pReserved d9f0: 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a is not NULL.");. da00: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR da10: 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} da20: 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i da30: 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... da40: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI da50: 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not da60: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); da70: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C da80: 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT da90: 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C daa0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN dab0: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK dac0: 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S dad0: 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", dae0: 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT daf0: 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r db00: 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI db10: 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED db20: 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ db30: 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, db40: 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 6d 4c 69 C_GetMechanismLi db50: 73 74 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 st)(CK_SLOT_ID s db60: 6c 6f 74 49 44 2c 20 43 4b 5f 4d 45 43 48 41 4e lotID, CK_MECHAN db70: 49 53 4d 5f 54 59 50 45 5f 50 54 52 20 70 4d 65 ISM_TYPE_PTR pMe db80: 63 68 61 6e 69 73 6d 4c 69 73 74 2c 20 43 4b 5f chanismList, CK_ db90: 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 43 6f 75 ULONG_PTR pulCou dba0: 6e 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 nt) {..CACKEY_DE dbb0: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call dbc0: 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca dbd0: 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized dbe0: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB dbf0: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error dc00: 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ dc10: 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return dc20: 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO dc30: 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. dc40: 09 7d 0a 0a 09 69 66 20 28 70 75 6c 43 6f 75 6e .}...if (pulCoun dc50: 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 t == NULL) {...C dc60: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN dc70: 54 46 28 22 45 72 72 6f 72 2e 20 20 70 75 6c 43 TF("Error. pulC dc80: 6f 75 6e 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b ount is NULL."); dc90: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 ....return(CKR_A dca0: 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 RGUMENTS_BAD);.. dcb0: 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 6e 69 }...if (pMechani dcc0: 73 6d 4c 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 20 smList == NULL) dcd0: 7b 0a 09 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 {...*pulCount = dce0: 33 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 3;....CACKEY_DEB dcf0: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur dd00: 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) dd10: 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 ", CKR_OK);....r dd20: 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 eturn(CKR_OK);.. dd30: 7d 0a 0a 09 69 66 20 28 2a 70 75 6c 43 6f 75 6e }...if (*pulCoun dd40: 74 20 3c 20 33 29 20 7b 0a 09 09 43 41 43 4b 45 t < 3) {...CACKE dd50: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" dd60: 45 72 72 6f 72 2e 20 20 42 75 66 66 65 72 20 74 Error. Buffer t dd70: 6f 6f 20 73 6d 61 6c 6c 2e 22 29 3b 0a 0a 09 09 oo small.");.... dd80: 72 65 74 75 72 6e 28 43 4b 52 5f 42 55 46 46 45 return(CKR_BUFFE dd90: 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 3b 0a 09 7d R_TOO_SMALL);..} dda0: 0a 0a 09 70 4d 65 63 68 61 6e 69 73 6d 4c 69 73 ...pMechanismLis ddb0: 74 5b 30 5d 20 3d 20 43 4b 4d 5f 52 53 41 5f 50 t[0] = CKM_RSA_P ddc0: 4b 43 53 3b 0a 09 70 4d 65 63 68 61 6e 69 73 6d KCS;..pMechanism ddd0: 4c 69 73 74 5b 31 5d 20 3d 20 43 4b 4d 5f 53 48 List[1] = CKM_SH dde0: 41 31 5f 52 53 41 5f 50 4b 43 53 3b 0a 09 2a 70 A1_RSA_PKCS;..*p ddf0: 75 6c 43 6f 75 6e 74 20 3d 20 32 3b 0a 0a 09 43 ulCount = 2;...C de00: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN de10: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK de20: 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ de30: 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b OK);...return(CK de40: 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 R_OK);.}..CK_DEF de50: 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ de60: 52 56 2c 20 43 5f 47 65 74 4d 65 63 68 61 6e 69 RV, C_GetMechani de70: 73 6d 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f smInfo)(CK_SLOT_ de80: 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 4d 45 ID slotID, CK_ME de90: 43 48 41 4e 49 53 4d 5f 54 59 50 45 20 74 79 70 CHANISM_TYPE typ dea0: 65 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f e, CK_MECHANISM_ deb0: 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 INFO_PTR pInfo) dec0: 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ ded0: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." dee0: 29 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 );...if (slotID def0: 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d < 0 || slotID >= df00: 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ df10: 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 slots) / sizeof( df20: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 cackey_slots[0]) df30: 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE df40: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro df50: 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 r. Invalid slot df60: 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c requested (%lu), df70: 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 outside of vali df80: 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 d range", slotID df90: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR dfa0: 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 _SLOT_ID_INVALID dfb0: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b );..}...if (cack dfc0: 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d ey_slots[slotID] dfd0: 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a .active == 0) {. dfe0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P dff0: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e RINTF("Error. In e000: 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 valid slot reque e010: 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 sted (%lu), slot e020: 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 not currently a e030: 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b ctive", slotID); e040: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S e050: 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b LOT_ID_INVALID); e060: 0a 09 7d 0a 0a 09 69 66 20 28 70 49 6e 66 6f 20 ..}...if (pInfo e070: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC e080: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF e090: 28 22 45 72 72 6f 72 2e 20 70 49 6e 66 6f 20 69 ("Error. pInfo i e0a0: 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 s NULL.");....re e0b0: 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN e0c0: 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if e0d0: 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia e0e0: 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE e0f0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" e100: 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init e110: 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r e120: 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO e130: 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ e140: 45 44 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 58 58 58 ED);..}.../* XXX e150: 3a 20 54 68 69 73 20 69 73 20 75 6e 74 65 73 74 : This is untest e160: 65 64 2c 20 61 6e 64 20 66 75 72 74 68 65 72 20 ed, and further e170: 49 27 6d 20 6e 6f 74 20 72 65 61 6c 6c 79 20 73 I'm not really s e180: 75 72 65 20 69 66 20 74 68 69 73 20 69 73 20 63 ure if this is c e190: 6f 72 72 65 63 74 2e 20 2a 2f 0a 09 73 77 69 74 orrect. */..swit e1a0: 63 68 20 28 74 79 70 65 29 20 7b 0a 09 09 63 61 ch (type) {...ca e1b0: 73 65 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 3a se CKM_RSA_PKCS: e1c0: 0a 09 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e ....pInfo->ulMin e1d0: 4b 65 79 53 69 7a 65 20 3d 20 35 31 32 3b 0a 09 KeySize = 512;.. e1e0: 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 4b 65 ..pInfo->ulMaxKe e1f0: 79 53 69 7a 65 20 3d 20 38 31 39 32 3b 0a 09 09 ySize = 8192;... e200: 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 .pInfo->flags = e210: 43 4b 46 5f 48 57 20 7c 20 43 4b 46 5f 45 4e 43 CKF_HW | CKF_ENC e220: 52 59 50 54 20 7c 20 43 4b 46 5f 44 45 43 52 59 RYPT | CKF_DECRY e230: 50 54 20 7c 20 43 4b 46 5f 53 49 47 4e 20 7c 20 PT | CKF_SIGN | e240: 43 4b 46 5f 56 45 52 49 46 59 3b 0a 09 09 09 62 CKF_VERIFY;....b e250: 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 43 4b 4d reak;...case CKM e260: 5f 52 53 41 5f 58 5f 35 30 39 3a 0a 09 09 09 70 _RSA_X_509:....p e270: 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 53 69 Info->ulMinKeySi e280: 7a 65 20 3d 20 35 31 32 3b 0a 09 09 09 70 49 6e ze = 512;....pIn e290: 66 6f 2d 3e 75 6c 4d 61 78 4b 65 79 53 69 7a 65 fo->ulMaxKeySize e2a0: 20 3d 20 38 31 39 32 3b 0a 09 09 09 70 49 6e 66 = 8192;....pInf e2b0: 6f 2d 3e 66 6c 61 67 73 20 3d 20 43 4b 46 5f 48 o->flags = CKF_H e2c0: 57 20 7c 20 43 4b 46 5f 45 4e 43 52 59 50 54 20 W | CKF_ENCRYPT e2d0: 7c 20 43 4b 46 5f 44 45 43 52 59 50 54 20 7c 20 | CKF_DECRYPT | e2e0: 43 4b 46 5f 53 49 47 4e 20 7c 20 43 4b 46 5f 56 CKF_SIGN | CKF_V e2f0: 45 52 49 46 59 3b 0a 09 09 09 62 72 65 61 6b 3b ERIFY;....break; e300: 0a 09 09 63 61 73 65 20 43 4b 4d 5f 53 48 41 31 ...case CKM_SHA1 e310: 5f 52 53 41 5f 50 4b 43 53 3a 0a 09 09 09 70 49 _RSA_PKCS:....pI e320: 6e 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 53 69 7a nfo->ulMinKeySiz e330: 65 20 3d 20 35 31 32 3b 0a 09 09 09 70 49 6e 66 e = 512;....pInf e340: 6f 2d 3e 75 6c 4d 61 78 4b 65 79 53 69 7a 65 20 o->ulMaxKeySize e350: 3d 20 38 31 39 32 3b 0a 09 09 09 70 49 6e 66 6f = 8192;....pInfo e360: 2d 3e 66 6c 61 67 73 20 3d 20 43 4b 46 5f 48 57 ->flags = CKF_HW e370: 20 7c 20 43 4b 46 5f 53 49 47 4e 20 7c 20 43 4b | CKF_SIGN | CK e380: 46 5f 56 45 52 49 46 59 3b 0a 09 09 09 62 72 65 F_VERIFY;....bre e390: 61 6b 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f ak;..}...CACKEY_ e3a0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re e3b0: 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 turning CKR_OK ( e3c0: 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a %i)", CKR_OK);.. e3d0: 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b .return(CKR_OK); e3e0: 0a 7d 0a 0a 2f 2a 20 57 65 20 64 6f 6e 27 74 20 .}../* We don't e3f0: 73 75 70 70 6f 72 74 20 74 68 69 73 20 6d 65 74 support this met e400: 68 6f 64 2e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e hod. */.CK_DEFIN e410: 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV e420: 2c 20 43 5f 49 6e 69 74 54 6f 6b 65 6e 29 28 43 , C_InitToken)(C e430: 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 K_SLOT_ID slotID e440: 2c 20 43 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 , CK_UTF8CHAR_PT e450: 52 20 70 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 R pPin, CK_ULONG e460: 20 75 6c 50 69 6e 4c 65 6e 2c 20 43 4b 5f 55 54 ulPinLen, CK_UT e470: 46 38 43 48 41 52 5f 50 54 52 20 70 4c 61 62 65 F8CHAR_PTR pLabe e480: 6c 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 l) {..CACKEY_DEB e490: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle e4a0: 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac e4b0: 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) e4c0: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU e4d0: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. e4e0: 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize e4f0: 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( e500: 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT e510: 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. e520: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG e530: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni e540: 6e 67 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49 ng CKR_TOKEN_WRI e550: 54 45 5f 50 52 4f 54 45 43 54 45 44 20 28 25 69 TE_PROTECTED (%i e560: 29 22 2c 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 )", CKR_TOKEN_WR e570: 49 54 45 5f 50 52 4f 54 45 43 54 45 44 29 3b 0a ITE_PROTECTED);. e580: 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 54 4f 4b ..return(CKR_TOK e590: 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 EN_WRITE_PROTECT e5a0: 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 64 6f ED);.}../* We do e5b0: 6e 27 74 20 73 75 70 70 6f 72 74 20 74 68 69 73 n't support this e5c0: 20 6d 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b 5f 44 method. */.CK_D e5d0: 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C e5e0: 4b 5f 52 56 2c 20 43 5f 49 6e 69 74 50 49 4e 29 K_RV, C_InitPIN) e5f0: 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND e600: 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ e610: 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 50 69 UTF8CHAR_PTR pPi e620: 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 69 n, CK_ULONG ulPi e630: 6e 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f nLen) {..CACKEY_ e640: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca e650: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! e660: 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ e670: 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D e680: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err e690: 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial e6a0: 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu e6b0: 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ e6c0: 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) e6d0: 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE e6e0: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu e6f0: 72 6e 69 6e 67 20 43 4b 52 5f 54 4f 4b 45 4e 5f rning CKR_TOKEN_ e700: 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 20 WRITE_PROTECTED e710: 28 25 69 29 22 2c 20 43 4b 52 5f 54 4f 4b 45 4e (%i)", CKR_TOKEN e720: 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 _WRITE_PROTECTED e730: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ e740: 54 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 TOKEN_WRITE_PROT e750: 45 43 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 ECTED);.}../* We e760: 20 64 6f 6e 27 74 20 73 75 70 70 6f 72 74 20 74 don't support t e770: 68 69 73 20 6d 65 74 68 6f 64 2e 20 2a 2f 0a 43 his method. */.C e780: 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO e790: 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 74 50 49 N(CK_RV, C_SetPI e7a0: 4e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 N)(CK_SESSION_HA e7b0: 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C e7c0: 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 K_UTF8CHAR_PTR p e7d0: 4f 6c 64 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 OldPin, CK_ULONG e7e0: 20 75 6c 4f 6c 64 50 69 6e 4c 65 6e 2c 20 43 4b ulOldPinLen, CK e7f0: 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 4e _UTF8CHAR_PTR pN e800: 65 77 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 ewPin, CK_ULONG e810: 75 6c 4e 65 77 50 69 6e 4c 65 6e 29 20 7b 0a 09 ulNewPinLen) {.. e820: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI e830: 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. e840: 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in e850: 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C e860: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN e870: 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not e880: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. e890: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR e8a0: 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI e8b0: 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA e8c0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT e8d0: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR e8e0: 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU e8f0: 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C e900: 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ e910: 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re e920: 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO e930: 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) e940: 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F e950: 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C e960: 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 29 28 43 4b _OpenSession)(CK e970: 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c _SLOT_ID slotID, e980: 20 43 4b 5f 46 4c 41 47 53 20 66 6c 61 67 73 2c CK_FLAGS flags, e990: 20 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 41 70 CK_VOID_PTR pAp e9a0: 70 6c 69 63 61 74 69 6f 6e 2c 20 43 4b 5f 4e 4f plication, CK_NO e9b0: 54 49 46 59 20 6e 6f 74 69 66 79 2c 20 43 4b 5f TIFY notify, CK_ e9c0: 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 50 SESSION_HANDLE_P e9d0: 54 52 20 70 68 53 65 73 73 69 6f 6e 29 20 7b 0a TR phSession) {. e9e0: 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 69 .struct cackey_i e9f0: 64 65 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 74 dentity *identit ea00: 69 65 73 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c ies;..unsigned l ea10: 6f 6e 67 20 69 64 78 2c 20 6e 75 6d 5f 69 64 73 ong idx, num_ids ea20: 2c 20 69 64 5f 69 64 78 2c 20 63 75 72 72 5f 69 , id_idx, curr_i ea30: 64 5f 74 79 70 65 3b 0a 23 69 66 20 30 0a 09 43 d_type;.#if 0..C ea40: 4b 5f 42 59 54 45 20 73 69 67 62 75 66 5b 31 30 K_BYTE sigbuf[10 ea50: 32 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 20 73 69 24];..ssize_t si ea60: 67 62 75 66 6c 65 6e 3b 0a 23 65 6e 64 69 66 0a gbuflen;.#endif. ea70: 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 .int mutex_retva ea80: 6c 3b 0a 09 69 6e 74 20 66 6f 75 6e 64 5f 73 65 l;..int found_se ea90: 73 73 69 6f 6e 20 3d 20 30 3b 0a 0a 09 43 41 43 ssion = 0;...CAC eaa0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF eab0: 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i eac0: 66 20 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c f (slotID < 0 || ead0: 20 73 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 slotID >= (size eae0: 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 of(cackey_slots) eaf0: 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey eb00: 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 _slots[0]))) {.. eb10: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR eb20: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 INTF("Error. Inv eb30: 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 alid slot reques eb40: 74 65 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 ted (%lu), outsi eb50: 64 65 20 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 de of valid rang eb60: 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 e", slotID);.... eb70: 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f return(CKR_SLOT_ eb80: 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a ID_INVALID);..}. eb90: 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f ..if (cackey_slo eba0: 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 ts[slotID].activ ebb0: 65 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b e == 0) {...CACK ebc0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( ebd0: 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 "Error. Invalid ebe0: 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 slot requested ( ebf0: 25 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 %lu), slot not c ec00: 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 urrently active" ec10: 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 , slotID);....re ec20: 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 turn(CKR_SLOT_ID ec30: 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... ec40: 69 66 20 28 28 66 6c 61 67 73 20 26 20 43 4b 46 if ((flags & CKF ec50: 5f 53 45 52 49 41 4c 5f 53 45 53 53 49 4f 4e 29 _SERIAL_SESSION) ec60: 20 21 3d 20 43 4b 46 5f 53 45 52 49 41 4c 5f 53 != CKF_SERIAL_S ec70: 45 53 53 49 4f 4e 29 20 7b 0a 09 09 72 65 74 75 ESSION) {...retu ec80: 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 50 rn(CKR_SESSION_P ec90: 41 52 41 4c 4c 45 4c 5f 4e 4f 54 5f 53 55 50 50 ARALLEL_NOT_SUPP eca0: 4f 52 54 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 ORTED);..}...if ecb0: 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial ecc0: 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY ecd0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E ece0: 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi ecf0: 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re ed00: 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK ed10: 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE ed20: 44 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 56 65 72 69 D);..}.../* Veri ed30: 66 79 20 74 68 61 74 20 74 68 65 20 63 61 72 64 fy that the card ed40: 20 69 73 20 61 63 74 75 61 6c 6c 79 20 69 6e 20 is actually in ed50: 74 68 65 20 73 6c 6f 74 2e 20 2a 2f 0a 09 2f 2a the slot. */../* ed60: 20 58 58 58 3a 20 54 61 6c 6b 20 74 6f 20 63 61 XXX: Talk to ca ed70: 72 64 20 2a 2f 0a 09 69 66 20 28 30 29 20 7b 0a rd */..if (0) {. ed80: 09 09 69 66 20 28 30 29 20 7b 0a 09 09 09 43 41 ..if (0) {....CA ed90: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT eda0: 46 28 22 45 72 72 6f 72 2e 20 20 43 61 72 64 20 F("Error. Card edb0: 6e 6f 74 20 70 72 65 73 65 6e 74 2e 20 20 52 65 not present. Re edc0: 74 75 72 6e 69 6e 67 20 43 4b 52 5f 44 45 56 49 turning CKR_DEVI edd0: 43 45 5f 52 45 4d 4f 56 45 44 22 29 3b 0a 0a 09 CE_REMOVED");... ede0: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 44 45 56 ..return(CKR_DEV edf0: 49 43 45 5f 52 45 4d 4f 56 45 44 29 3b 0a 09 09 ICE_REMOVED);... ee00: 7d 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 }..}...mutex_ret ee10: 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut ee20: 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 ex_lock(cackey_b ee30: 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu ee40: 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) ee50: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU ee60: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. ee70: 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Locking failed ee80: 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C ee90: 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR eea0: 29 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 );..}...for (idx eeb0: 20 3d 20 31 3b 20 69 64 78 20 3c 20 28 73 69 7a = 1; idx < (siz eec0: 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi eed0: 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 ons) / sizeof(ca eee0: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d ckey_sessions[0] eef0: 29 29 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 )); idx++) {...i ef00: 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi ef10: 6f 6e 73 5b 69 64 78 5d 2e 61 63 74 69 76 65 29 ons[idx].active) ef20: 20 7b 0a 09 09 09 66 6f 75 6e 64 5f 73 65 73 73 {....found_sess ef30: 69 6f 6e 20 3d 20 31 3b 0a 0a 09 09 09 2a 70 68 ion = 1;.....*ph ef40: 53 65 73 73 69 6f 6e 20 3d 20 69 64 78 3b 0a 0a Session = idx;.. ef50: 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio ef60: 6e 73 5b 69 64 78 5d 2e 61 63 74 69 76 65 20 3d ns[idx].active = ef70: 20 31 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 1;....cackey_se ef80: 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 6c 6f 74 ssions[idx].slot ef90: 49 44 20 3d 20 73 6c 6f 74 49 44 3b 0a 09 09 09 ID = slotID;.... efa0: 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ efb0: 69 64 78 5d 2e 73 74 61 74 65 20 3d 20 43 4b 53 idx].state = CKS efc0: 5f 52 4f 5f 50 55 42 4c 49 43 5f 53 45 53 53 49 _RO_PUBLIC_SESSI efd0: 4f 4e 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 ON;....cackey_se efe0: 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 66 6c 61 67 ssions[idx].flag eff0: 73 20 3d 20 66 6c 61 67 73 3b 0a 09 09 09 63 61 s = flags;....ca f000: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 ckey_sessions[id f010: 78 5d 2e 75 6c 44 65 76 69 63 65 45 72 72 6f 72 x].ulDeviceError f020: 20 3d 20 30 3b 0a 09 09 09 63 61 63 6b 65 79 5f = 0;....cackey_ f030: 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 70 41 sessions[idx].pA f040: 70 70 6c 69 63 61 74 69 6f 6e 20 3d 20 70 41 70 pplication = pAp f050: 70 6c 69 63 61 74 69 6f 6e 3b 0a 09 09 09 63 61 plication;....ca f060: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 ckey_sessions[id f070: 78 5d 2e 4e 6f 74 69 66 79 20 3d 20 6e 6f 74 69 x].Notify = noti f080: 66 79 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 fy;.....cackey_s f090: 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 69 64 65 essions[idx].ide f0a0: 6e 74 69 74 69 65 73 20 3d 20 4e 55 4c 4c 3b 0a ntities = NULL;. f0b0: 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio f0c0: 6e 73 5b 69 64 78 5d 2e 69 64 65 6e 74 69 74 69 ns[idx].identiti f0d0: 65 73 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 0a 09 es_count = 0;... f0e0: 09 09 69 66 20 28 30 29 20 7b 0a 09 09 09 09 6e ..if (0) {.....n f0f0: 75 6d 5f 69 64 73 20 3d 20 30 3b 0a 09 09 09 09 um_ids = 0;..... f100: 2f 2a 20 58 58 58 3a 20 44 65 74 65 72 6d 69 6e /* XXX: Determin f110: 65 20 6e 75 6d 62 65 72 20 6f 66 20 49 44 73 20 e number of IDs f120: 2a 2f 0a 0a 09 09 09 09 2f 2a 20 43 6f 6e 76 65 */....../* Conve f130: 72 74 20 6e 75 6d 62 65 72 20 6f 66 20 49 44 73 rt number of IDs f140: 20 74 6f 20 6e 75 6d 62 65 72 20 6f 66 20 6f 62 to number of ob f150: 6a 65 63 74 73 20 2a 2f 0a 09 09 09 09 6e 75 6d jects */.....num f160: 5f 69 64 73 20 3d 20 28 43 4b 4f 5f 50 52 49 56 _ids = (CKO_PRIV f170: 41 54 45 5f 4b 45 59 20 2d 20 43 4b 4f 5f 43 45 ATE_KEY - CKO_CE f180: 52 54 49 46 49 43 41 54 45 20 2b 20 31 29 20 2a RTIFICATE + 1) * f190: 20 6e 75 6d 5f 69 64 73 3b 0a 0a 09 09 09 09 69 num_ids;......i f1a0: 64 65 6e 74 69 74 69 65 73 20 3d 20 6d 61 6c 6c dentities = mall f1b0: 6f 63 28 6e 75 6d 5f 69 64 73 20 2a 20 73 69 7a oc(num_ids * siz f1c0: 65 6f 66 28 2a 69 64 65 6e 74 69 74 69 65 73 29 eof(*identities) f1d0: 29 3b 0a 0a 09 09 09 09 69 64 5f 69 64 78 20 3d );......id_idx = f1e0: 20 30 3b 0a 09 09 09 09 66 6f 72 20 28 3b 3b 29 0;.....for (;;) f1f0: 20 7b 0a 09 09 09 09 09 66 6f 72 20 28 63 75 72 {......for (cur f200: 72 5f 69 64 5f 74 79 70 65 20 3d 20 43 4b 4f 5f r_id_type = CKO_ f210: 43 45 52 54 49 46 49 43 41 54 45 3b 20 63 75 72 CERTIFICATE; cur f220: 72 5f 69 64 5f 74 79 70 65 20 3c 3d 20 43 4b 4f r_id_type <= CKO f230: 5f 50 52 49 56 41 54 45 5f 4b 45 59 3b 20 63 75 _PRIVATE_KEY; cu f240: 72 72 5f 69 64 5f 74 79 70 65 2b 2b 29 20 7b 0a rr_id_type++) {. f250: 09 09 09 09 09 09 2f 2a 20 58 58 58 3a 20 44 65 ....../* XXX: De f260: 74 65 72 6d 69 6e 65 20 62 61 73 65 20 69 6e 64 termine base ind f270: 65 78 20 2a 2f 0a 0a 09 09 09 09 09 09 69 64 65 ex */........ide f280: 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e ntities[id_idx]. f290: 61 74 74 72 69 62 75 74 65 73 20 3d 20 63 61 63 attributes = cac f2a0: 6b 65 79 5f 67 65 74 5f 61 74 74 72 69 62 75 74 key_get_attribut f2b0: 65 73 28 63 75 72 72 5f 69 64 5f 74 79 70 65 2c es(curr_id_type, f2c0: 20 4e 55 4c 4c 2c 20 2d 31 2c 20 26 69 64 65 6e NULL, -1, &iden f2d0: 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 tities[id_idx].a f2e0: 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 29 ttributes_count) f2f0: 3b 0a 0a 09 09 09 09 09 09 69 66 20 28 69 64 65 ;........if (ide f300: 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e ntities[id_idx]. f310: 61 74 74 72 69 62 75 74 65 73 20 3d 3d 20 4e 55 attributes == NU f320: 4c 4c 29 20 7b 0a 09 09 09 09 09 09 09 69 64 65 LL) {........ide f330: 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e ntities[id_idx]. f340: 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 attributes_count f350: 20 3d 20 30 3b 0a 09 09 09 09 09 09 7d 0a 0a 09 = 0;.......}... f360: 09 09 09 09 09 69 64 5f 69 64 78 2b 2b 3b 0a 09 .....id_idx++;.. f370: 09 09 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 ....}.....}..... f380: 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions f390: 5b 69 64 78 5d 2e 69 64 65 6e 74 69 74 69 65 73 [idx].identities f3a0: 20 3d 20 69 64 65 6e 74 69 74 69 65 73 3b 0a 09 = identities;.. f3b0: 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio f3c0: 6e 73 5b 69 64 78 5d 2e 69 64 65 6e 74 69 74 69 ns[idx].identiti f3d0: 65 73 5f 63 6f 75 6e 74 20 3d 20 6e 75 6d 5f 69 es_count = num_i f3e0: 64 73 3b 0a 09 09 09 7d 0a 0a 09 09 09 63 61 63 ds;....}.....cac f3f0: 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 key_sessions[idx f400: 5d 2e 73 65 61 72 63 68 5f 61 63 74 69 76 65 20 ].search_active f410: 3d 20 30 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f = 0;.....cackey_ f420: 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 69 sessions[idx].si f430: 67 6e 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a 0a gn_active = 0;.. f440: 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio f450: 6e 73 5b 69 64 78 5d 2e 64 65 63 72 79 70 74 5f ns[idx].decrypt_ f460: 61 63 74 69 76 65 20 3d 20 30 3b 0a 0a 09 09 09 active = 0;..... f470: 62 72 65 61 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 break;...}..}... f480: 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c f490: 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo f4a0: 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc f4b0: 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r f4c0: 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... f4d0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI f4e0: 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c NTF("Error. Unl f4f0: 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") f500: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ f510: 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. f520: 09 7d 0a 0a 09 69 66 20 28 21 66 6f 75 6e 64 5f .}...if (!found_ f530: 73 65 73 73 69 6f 6e 29 20 7b 0a 09 09 43 41 43 session) {...CAC f540: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF f550: 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ f560: 53 45 53 53 49 4f 4e 5f 43 4f 55 4e 54 20 28 25 SESSION_COUNT (% f570: 69 29 22 2c 20 43 4b 52 5f 53 45 53 53 49 4f 4e i)", CKR_SESSION f580: 5f 43 4f 55 4e 54 29 3b 0a 0a 09 09 72 65 74 75 _COUNT);....retu f590: 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 43 rn(CKR_SESSION_C f5a0: 4f 55 4e 54 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b OUNT);..}...CACK f5b0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( f5c0: 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O f5d0: 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) f5e0: 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O f5f0: 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 K);.}..CK_DEFINE f600: 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, f610: 20 43 5f 43 6c 6f 73 65 53 65 73 73 69 6f 6e 29 C_CloseSession) f620: 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND f630: 4c 45 20 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 LE hSession) {.. f640: 43 4b 5f 41 54 54 52 49 42 55 54 45 20 2a 63 75 CK_ATTRIBUTE *cu f650: 72 72 5f 61 74 74 72 3b 0a 09 75 6e 73 69 67 6e rr_attr;..unsign f660: 65 64 20 6c 6f 6e 67 20 69 64 5f 69 64 78 2c 20 ed long id_idx, f670: 61 74 74 72 5f 69 64 78 3b 0a 09 69 6e 74 20 6d attr_idx;..int m f680: 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 utex_retval;...C f690: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN f6a0: 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. f6b0: 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini f6c0: 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA f6d0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT f6e0: 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i f6f0: 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. f700: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY f710: 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA f720: 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 LIZED);..}...if f730: 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c (hSession == 0 | f740: 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 | hSession >= (s f750: 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses f760: 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 sions) / sizeof( f770: 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ f780: 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 0]))) {...CACKEY f790: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E f7a0: 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f rror. Session o f7b0: 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a ut of range.");. f7c0: 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ f7d0: 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I f7e0: 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 NVALID);..}...mu f7f0: 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac f800: 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 key_mutex_lock(c f810: 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. f820: 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva f830: 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK f840: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( f850: 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 "Error. Locking f860: 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r f870: 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA f880: 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i f890: 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi f8a0: 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 ons[hSession].ac f8b0: 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 tive) {...cackey f8c0: 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca f8d0: 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. f8e0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P f8f0: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S f900: 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 ession not activ f910: 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur f920: 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA f930: 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. f940: 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 }...cackey_sessi f950: 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 ons[hSession].ac f960: 74 69 76 65 20 3d 20 30 3b 0a 09 69 66 20 28 63 tive = 0;..if (c f970: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h f980: 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 Session].identit f990: 69 65 73 29 20 7b 0a 09 09 66 6f 72 20 28 69 64 ies) {...for (id f9a0: 5f 69 64 78 20 3d 20 30 3b 20 69 64 5f 69 64 78 _idx = 0; id_idx f9b0: 20 3c 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f < cackey_sessio f9c0: 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 ns[hSession].ide f9d0: 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 3b 20 69 ntities_count; i f9e0: 64 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 69 66 d_idx++) {....if f9f0: 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (cackey_session fa00: 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden fa10: 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 tities[id_idx].a fa20: 74 74 72 69 62 75 74 65 73 29 20 7b 0a 09 09 09 ttributes) {.... fa30: 09 66 6f 72 20 28 61 74 74 72 5f 69 64 78 20 3d .for (attr_idx = fa40: 20 30 3b 20 61 74 74 72 5f 69 64 78 20 3c 20 63 0; attr_idx < c fa50: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h fa60: 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 Session].identit fa70: 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 ies[id_idx].attr fa80: 69 62 75 74 65 73 5f 63 6f 75 6e 74 3b 20 61 74 ibutes_count; at fa90: 74 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 tr_idx++) {..... faa0: 09 63 75 72 72 5f 61 74 74 72 20 3d 20 26 63 61 .curr_attr = &ca fab0: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS fac0: 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 ession].identiti fad0: 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 es[id_idx].attri fae0: 62 75 74 65 73 5b 61 74 74 72 5f 69 64 78 5d 3b butes[attr_idx]; faf0: 0a 0a 09 09 09 09 09 69 66 20 28 63 75 72 72 5f .......if (curr_ fb00: 61 74 74 72 2d 3e 70 56 61 6c 75 65 29 20 7b 0a attr->pValue) {. fb10: 09 09 09 09 09 09 66 72 65 65 28 63 75 72 72 5f ......free(curr_ fb20: 61 74 74 72 2d 3e 70 56 61 6c 75 65 29 3b 0a 09 attr->pValue);.. fb30: 09 09 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 ....}.....}..... fb40: 09 66 72 65 65 28 63 61 63 6b 65 79 5f 73 65 73 .free(cackey_ses fb50: 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. fb60: 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 identities[id_id fb70: 78 5d 2e 61 74 74 72 69 62 75 74 65 73 29 3b 0a x].attributes);. fb80: 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 66 72 65 65 ...}...}....free fb90: 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions fba0: 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 [hSession].ident fbb0: 69 74 69 65 73 29 3b 0a 09 7d 0a 0a 09 6d 75 74 ities);..}...mut fbc0: 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack fbd0: 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( fbe0: 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); fbf0: 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv fc00: 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC fc10: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF fc20: 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b ("Error. Unlock fc30: 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. fc40: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN fc50: 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. fc60: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P fc70: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning fc80: 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C fc90: 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return fca0: 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f (CKR_OK);.}..CK_ fcb0: 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( fcc0: 43 4b 5f 52 56 2c 20 43 5f 43 6c 6f 73 65 41 6c CK_RV, C_CloseAl fcd0: 6c 53 65 73 73 69 6f 6e 73 29 28 43 4b 5f 53 4c lSessions)(CK_SL fce0: 4f 54 5f 49 44 20 73 6c 6f 74 49 44 29 20 7b 0a OT_ID slotID) {. fcf0: 09 75 69 6e 74 33 32 5f 74 20 69 64 78 3b 0a 09 .uint32_t idx;.. fd00: 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c int mutex_retval fd10: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG fd20: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. fd30: 22 29 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 ");...if (slotID fd40: 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e < 0 || slotID > fd50: 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 = (sizeof(cackey fd60: 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 _slots) / sizeof fd70: 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d (cackey_slots[0] fd80: 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ))) {...CACKEY_D fd90: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err fda0: 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 or. Invalid slot fdb0: 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 requested (%lu) fdc0: 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c , outside of val fdd0: 69 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 id range", slotI fde0: 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b D);....return(CK fdf0: 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 R_SLOT_ID_INVALI fe00: 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 D);..}...if (cac fe10: 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 key_slots[slotID fe20: 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b ].active == 0) { fe30: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ fe40: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 PRINTF("Error. I fe50: 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 nvalid slot requ fe60: 65 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f ested (%lu), slo fe70: 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 t not currently fe80: 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 active", slotID) fe90: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ fea0: 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 SLOT_ID_INVALID) feb0: 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack fec0: 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) fed0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG fee0: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. fef0: 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized ff00: 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C ff10: 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ ff20: 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} ff30: 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval ff40: 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c = cackey_mutex_l ff50: 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo ff60: 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ ff70: 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. ff80: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR ff90: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f INTF("Error. Lo ffa0: 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); ffb0: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G ffc0: 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. ffd0: 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 }...for (idx = 0 ffe0: 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 ; idx < (sizeof( fff0: 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 10000 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 10010 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 3b 20 _sessions[0])); 10020 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63 idx++) {...if (c 10030 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 ackey_sessions[i 10040 64 78 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 dx].active) {... 10050 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 .if (cackey_sess 10060 69 6f 6e 73 5b 69 64 78 5d 2e 73 6c 6f 74 49 44 ions[idx].slotID 10070 20 21 3d 20 73 6c 6f 74 49 44 29 20 7b 0a 09 09 != slotID) {... 10080 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 7d ..continue;....} 10090 0a 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 .....cackey_mute 100a0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 100b0 62 69 67 6c 6f 63 6b 29 3b 0a 09 09 09 43 5f 43 biglock);....C_C 100c0 6c 6f 73 65 53 65 73 73 69 6f 6e 28 69 64 78 29 loseSession(idx) 100d0 3b 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 ;....cackey_mute 100e0 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 x_lock(cackey_bi 100f0 67 6c 6f 63 6b 29 3b 0a 09 09 7d 0a 09 7d 0a 0a glock);...}..}.. 10100 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 10110 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 10120 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 10130 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 10140 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 10150 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 10160 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e INTF("Error. Un 10170 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 locking failed." 10180 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 10190 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 101a0 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 101b0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 101c0 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 101d0 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 101e0 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 101f0 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 10200 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 ION(CK_RV, C_Get 10210 53 65 73 73 69 6f 6e 49 6e 66 6f 29 28 43 4b 5f SessionInfo)(CK_ 10220 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 10230 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 53 45 53 53 Session, CK_SESS 10240 49 4f 4e 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e ION_INFO_PTR pIn 10250 66 6f 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 fo) {..int mutex 10260 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 _retval;...CACKE 10270 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 10280 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 10290 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 20 (pInfo == NULL) 102a0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 102b0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 102c0 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 29 pInfo is NULL.") 102d0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 102e0 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 102f0 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 10300 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 10310 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 10320 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 10330 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 10340 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 10350 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 10360 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 10370 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d .if (hSession == 10380 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 0 || hSession > 10390 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 = (sizeof(cackey 103a0 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a _sessions) / siz 103b0 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi 103c0 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 ons[0]))) {...CA 103d0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 103e0 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 103f0 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e on out of range. 10400 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 10410 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 CKR_SESSION_HAND 10420 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 10430 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 10440 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f cackey_mutex_lo 10450 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 10460 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 10470 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 10480 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 10490 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 NTF("Error. Loc 104a0 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 104b0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 104c0 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 104d0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 ...if (!cackey_s 104e0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 104f0 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 ].active) {...ca 10500 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 10510 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 10520 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 10530 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 10540 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 . Session not a 10550 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 ctive.");......r 10560 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 10570 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 10580 29 3b 0a 09 7d 0a 0a 09 70 49 6e 66 6f 2d 3e 73 );..}...pInfo->s 10590 6c 6f 74 49 44 20 3d 20 63 61 63 6b 65 79 5f 73 lotID = cackey_s 105a0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 105b0 5d 2e 73 6c 6f 74 49 44 3b 0a 09 70 49 6e 66 6f ].slotID;..pInfo 105c0 2d 3e 73 74 61 74 65 20 3d 20 63 61 63 6b 65 79 ->state = cackey 105d0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 105e0 6f 6e 5d 2e 73 74 61 74 65 3b 0a 09 70 49 6e 66 on].state;..pInf 105f0 6f 2d 3e 66 6c 61 67 73 20 3d 20 63 61 63 6b 65 o->flags = cacke 10600 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 10610 69 6f 6e 5d 2e 66 6c 61 67 73 3b 0a 09 70 49 6e ion].flags;..pIn 10620 66 6f 2d 3e 75 6c 44 65 76 69 63 65 45 72 72 6f fo->ulDeviceErro 10630 72 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 r = cackey_sessi 10640 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 75 6c ons[hSession].ul 10650 44 65 76 69 63 65 45 72 72 6f 72 3b 0a 0a 09 6d DeviceError;...m 10660 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 10670 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 10680 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 10690 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 106a0 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 106b0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 106c0 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f TF("Error. Unlo 106d0 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 106e0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 106f0 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 10700 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 10710 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 10720 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c ng CKR_OK (%i)", 10730 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 CKR_OK);...retu 10740 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 rn(CKR_OK);.}..C 10750 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 10760 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 4f 70 N(CK_RV, C_GetOp 10770 65 72 61 74 69 6f 6e 53 74 61 74 65 29 28 43 4b erationState)(CK 10780 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 10790 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 hSession, CK_BYT 107a0 45 5f 50 54 52 20 70 4f 70 65 72 61 74 69 6f 6e E_PTR pOperation 107b0 53 74 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 5f State, CK_ULONG_ 107c0 50 54 52 20 70 75 6c 4f 70 65 72 61 74 69 6f 6e PTR pulOperation 107d0 53 74 61 74 65 4c 65 6e 29 20 7b 0a 09 43 41 43 StateLen) {..CAC 107e0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 107f0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 10800 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 10810 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 10820 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 10830 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 10840 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 10850 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 10860 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 10870 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 10880 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 10890 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 108a0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 108b0 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 108c0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 108d0 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 108e0 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 108f0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 10900 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 10910 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 TION(CK_RV, C_Se 10920 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 29 tOperationState) 10930 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 10940 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 10950 42 59 54 45 5f 50 54 52 20 70 4f 70 65 72 61 74 BYTE_PTR pOperat 10960 69 6f 6e 53 74 61 74 65 2c 20 43 4b 5f 55 4c 4f ionState, CK_ULO 10970 4e 47 20 75 6c 4f 70 65 72 61 74 69 6f 6e 53 74 NG ulOperationSt 10980 61 74 65 4c 65 6e 2c 20 43 4b 5f 4f 42 4a 45 43 ateLen, CK_OBJEC 10990 54 5f 48 41 4e 44 4c 45 20 68 45 6e 63 72 79 70 T_HANDLE hEncryp 109a0 74 69 6f 6e 4b 65 79 2c 20 43 4b 5f 4f 42 4a 45 tionKey, CK_OBJE 109b0 43 54 5f 48 41 4e 44 4c 45 20 68 41 75 74 68 65 CT_HANDLE hAuthe 109c0 6e 74 69 63 61 74 69 6f 6e 4b 65 79 29 20 7b 0a nticationKey) {. 109d0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 109e0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 109f0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 10a00 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 10a10 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 10a20 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 10a30 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 10a40 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 10a50 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 10a60 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 10a70 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 10a80 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 10a90 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 10aa0 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 10ab0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 10ac0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 10ad0 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 10ae0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 10af0 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 10b00 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 10b10 43 5f 4c 6f 67 69 6e 29 28 43 4b 5f 53 45 53 53 C_Login)(CK_SESS 10b20 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 10b30 69 6f 6e 2c 20 43 4b 5f 55 53 45 52 5f 54 59 50 ion, CK_USER_TYP 10b40 45 20 75 73 65 72 54 79 70 65 2c 20 43 4b 5f 55 E userType, CK_U 10b50 54 46 38 43 48 41 52 5f 50 54 52 20 70 50 69 6e TF8CHAR_PTR pPin 10b60 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 69 6e , CK_ULONG ulPin 10b70 4c 65 6e 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 Len) {..int mute 10b80 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b x_retval;...CACK 10b90 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 10ba0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 10bb0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 10bc0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 10bd0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 10be0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 10bf0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 10c00 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 10c10 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 10c20 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 ED);..}...if (hS 10c30 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 ession == 0 || h 10c40 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 Session >= (size 10c50 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 10c60 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ns) / sizeof(cac 10c70 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 key_sessions[0]) 10c80 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE 10c90 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 10ca0 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 r. Session out 10cb0 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a of range.");.... 10cc0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES 10cd0 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 SION_HANDLE_INVA 10ce0 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 LID);..}...if (u 10cf0 73 65 72 54 79 70 65 20 21 3d 20 43 4b 55 5f 55 serType != CKU_U 10d00 53 45 52 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f SER) {...CACKEY_ 10d10 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 10d20 72 6f 72 2e 20 20 57 65 20 6f 6e 6c 79 20 73 75 ror. We only su 10d30 70 70 6f 72 74 20 55 53 45 52 20 6d 6f 64 65 2c pport USER mode, 10d40 20 61 73 6b 65 64 20 66 6f 72 20 25 6c 75 20 6d asked for %lu m 10d50 6f 64 65 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ode.", (unsigned 10d60 20 6c 6f 6e 67 29 20 75 73 65 72 54 79 70 65 29 long) userType) 10d70 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 55 ....return(CKR_U 10d80 53 45 52 5f 54 59 50 45 5f 49 4e 56 41 4c 49 44 SER_TYPE_INVALID 10d90 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 );..}...mutex_re 10da0 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 10db0 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 10dc0 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 10dd0 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 10de0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 10df0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 10e00 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 10e10 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 10e20 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 10e30 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 R);..}...if (!ca 10e40 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 10e50 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 ession].active) 10e60 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 10e70 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 10e80 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 10e90 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 10ea0 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 10eb0 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 10ec0 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 10ed0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 10ee0 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 NVALID);..}...ca 10ef0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 10f00 65 73 73 69 6f 6e 5d 2e 73 74 61 74 65 20 3d 20 ession].state = 10f10 43 4b 53 5f 52 4f 5f 55 53 45 52 5f 46 55 4e 43 CKS_RO_USER_FUNC 10f20 54 49 4f 4e 53 3b 0a 0a 09 6d 75 74 65 78 5f 72 TIONS;...mutex_r 10f30 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 10f40 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 10f50 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 10f60 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 10f70 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 10f80 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 10f90 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 ror. Unlocking 10fa0 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 10fb0 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 10fc0 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 _ERROR);..}...CA 10fd0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 10fe0 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 10ff0 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f _OK (%i)", CKR_O 11000 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 K);...return(CKR 11010 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 _OK);.}..CK_DEFI 11020 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 11030 56 2c 20 43 5f 4c 6f 67 6f 75 74 29 28 43 4b 5f V, C_Logout)(CK_ 11040 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 11050 53 65 73 73 69 6f 6e 29 20 7b 0a 09 69 6e 74 20 Session) {..int 11060 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 mutex_retval;... 11070 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 11080 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 11090 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 110a0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 110b0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 110c0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 110d0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 110e0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 110f0 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 11100 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 11110 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 (hSession == 0 11120 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 || hSession >= ( 11130 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 11140 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 11150 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 11160 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE 11170 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 11180 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 11190 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b out of range."); 111a0 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 111b0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 111c0 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d INVALID);..}...m 111d0 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 111e0 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( 111f0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 11200 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 11210 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 11220 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 11230 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e ("Error. Lockin 11240 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 11250 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 11260 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 11270 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 if (!cackey_sess 11280 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 ions[hSession].a 11290 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 ctive) {...cacke 112a0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 112b0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 112c0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 112d0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 112e0 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 Session not acti 112f0 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 ve.");......retu 11300 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 rn(CKR_SESSION_H 11310 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a ANDLE_INVALID);. 11320 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 .}...cackey_sess 11330 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 11340 74 61 74 65 20 3d 20 43 4b 53 5f 52 4f 5f 50 55 tate = CKS_RO_PU 11350 42 4c 49 43 5f 53 45 53 53 49 4f 4e 3b 0a 0a 09 BLIC_SESSION;... 11360 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 11370 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 11380 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 11390 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 113a0 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 113b0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 113c0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c NTF("Error. Unl 113d0 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 113e0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 113f0 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 11400 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 11410 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 11420 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 11430 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret 11440 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}.. 11450 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 11460 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 72 65 61 ON(CK_RV, C_Crea 11470 74 65 4f 62 6a 65 63 74 29 28 43 4b 5f 53 45 53 teObject)(CK_SES 11480 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 11490 73 69 6f 6e 2c 20 43 4b 5f 41 54 54 52 49 42 55 sion, CK_ATTRIBU 114a0 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 TE_PTR pTemplate 114b0 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 , CK_ULONG ulCou 114c0 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 nt, CK_OBJECT_HA 114d0 4e 44 4c 45 5f 50 54 52 20 70 68 4f 62 6a 65 63 NDLE_PTR phObjec 114e0 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 t) {..CACKEY_DEB 114f0 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 11500 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 11510 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 11520 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 11530 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 11540 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 11550 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 11560 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 11570 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 11580 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 11590 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 115a0 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 115b0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 115c0 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 115d0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 115e0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 115f0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 11600 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 11610 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 11620 5f 52 56 2c 20 43 5f 43 6f 70 79 4f 62 6a 65 63 _RV, C_CopyObjec 11630 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 t)(CK_SESSION_HA 11640 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 11650 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 K_OBJECT_HANDLE 11660 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 41 54 54 52 hObject, CK_ATTR 11670 49 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c IBUTE_PTR pTempl 11680 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c ate, CK_ULONG ul 11690 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 Count, CK_OBJECT 116a0 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4e 65 _HANDLE_PTR phNe 116b0 77 4f 62 6a 65 63 74 29 20 7b 0a 09 43 41 43 4b wObject) {..CACK 116c0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 116d0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 116e0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 116f0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 11700 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 11710 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 11720 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 11730 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 11740 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 11750 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 11760 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 11770 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 11780 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 11790 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 117a0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 117b0 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 117c0 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 117d0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 117e0 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 117f0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 73 ION(CK_RV, C_Des 11800 74 72 6f 79 4f 62 6a 65 63 74 29 28 43 4b 5f 53 troyObject)(CK_S 11810 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 11820 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 ession, CK_OBJEC 11830 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 74 T_HANDLE hObject 11840 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 11850 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 11860 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 11870 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 11880 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 11890 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 118a0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 118b0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 118c0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 118d0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 118e0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 118f0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 11900 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 11910 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 11920 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 11930 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 11940 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 11950 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 11960 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 11970 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 11980 52 56 2c 20 43 5f 47 65 74 4f 62 6a 65 63 74 53 RV, C_GetObjectS 11990 69 7a 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f ize)(CK_SESSION_ 119a0 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 119b0 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL 119c0 45 20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 55 4c E hObject, CK_UL 119d0 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 7a 65 29 ONG_PTR pulSize) 119e0 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 119f0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 11a00 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 11a10 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 11a20 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 11a30 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 11a40 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 11a50 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 11a60 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 11a70 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 11a80 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11a90 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 11aa0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 11ab0 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 11ac0 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 11ad0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 11ae0 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(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 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 11b10 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 11b20 56 2c 20 43 5f 47 65 74 41 74 74 72 69 62 75 74 V, C_GetAttribut 11b30 65 56 61 6c 75 65 29 28 43 4b 5f 53 45 53 53 49 eValue)(CK_SESSI 11b40 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 11b50 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 on, CK_OBJECT_HA 11b60 4e 44 4c 45 20 68 4f 62 6a 65 63 74 2c 20 43 4b NDLE hObject, CK 11b70 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 _ATTRIBUTE_PTR p 11b80 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f Template, CK_ULO 11b90 4e 47 20 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 43 NG ulCount) {..C 11ba0 4b 5f 41 54 54 52 49 42 55 54 45 20 2a 63 75 72 K_ATTRIBUTE *cur 11bb0 72 5f 61 74 74 72 3b 0a 09 73 74 72 75 63 74 20 r_attr;..struct 11bc0 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 cackey_identity 11bd0 2a 69 64 65 6e 74 69 74 79 3b 0a 09 75 6e 73 69 *identity;..unsi 11be0 67 6e 65 64 20 6c 6f 6e 67 20 69 64 65 6e 74 69 gned long identi 11bf0 74 79 5f 69 64 78 2c 20 61 74 74 72 5f 69 64 78 ty_idx, attr_idx 11c00 2c 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 2c , sess_attr_idx, 11c10 20 6e 75 6d 5f 69 64 73 3b 0a 09 69 6e 74 20 6d num_ids;..int m 11c20 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 09 43 4b utex_retval;..CK 11c30 5f 52 56 20 72 65 74 76 61 6c 20 3d 20 43 4b 52 _RV retval = CKR 11c40 5f 4f 4b 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 54 _OK;..CK_VOID_PT 11c50 52 20 70 56 61 6c 75 65 3b 0a 09 43 4b 5f 55 4c R pValue;..CK_UL 11c60 4f 4e 47 20 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a ONG ulValueLen;. 11c70 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11c80 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 11c90 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 11ca0 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 11cb0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 11cc0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 11cd0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 11ce0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 11cf0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 11d00 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 11d10 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 if (hSession == 11d20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 0 || hSession >= 11d30 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 11d40 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 11d50 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 11d60 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 ns[0]))) {...CAC 11d70 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 11d80 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 11d90 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 n out of range." 11da0 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 11db0 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 11dc0 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 11dd0 09 69 66 20 28 68 4f 62 6a 65 63 74 20 3d 3d 20 .if (hObject == 11de0 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 11df0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 11e00 72 2e 20 20 4f 62 6a 65 63 74 20 68 61 6e 64 6c r. Object handl 11e10 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 e out of range." 11e20 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 11e30 4b 52 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 KR_OBJECT_HANDLE 11e40 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 11e50 69 66 20 28 75 6c 43 6f 75 6e 74 20 3d 3d 20 30 if (ulCount == 0 11e60 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 74 20 63 ) {.../* Short c 11e70 69 72 63 75 69 74 2c 20 69 66 20 7a 65 72 6f 20 ircuit, if zero 11e80 6f 62 6a 65 63 74 73 20 77 65 72 65 20 73 70 65 objects were spe 11e90 63 69 66 69 65 64 20 72 65 74 75 72 6e 20 7a 65 cified return ze 11ea0 72 6f 20 69 74 65 6d 73 20 69 6d 6d 65 64 69 61 ro items immedia 11eb0 74 65 6c 79 20 2a 2f 0a 09 09 43 41 43 4b 45 59 tely */...CACKEY 11ec0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 11ed0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 eturning CKR_OK 11ee0 28 25 69 29 20 28 73 68 6f 72 74 20 63 69 72 63 (%i) (short circ 11ef0 75 69 74 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a uit)", CKR_OK);. 11f00 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 11f10 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 54 65 6d );..}...if (pTem 11f20 70 6c 61 74 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b plate == NULL) { 11f30 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 11f40 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 11f50 70 54 65 6d 70 6c 61 74 65 20 69 73 20 4e 55 4c pTemplate is NUL 11f60 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 L.");....return( 11f70 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA 11f80 44 29 3b 0a 09 7d 0a 0a 09 69 64 65 6e 74 69 74 D);..}...identit 11f90 79 5f 69 64 78 20 3d 20 68 4f 62 6a 65 63 74 20 y_idx = hObject 11fa0 2d 20 31 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 - 1;...mutex_ret 11fb0 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 11fc0 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 ex_lock(cackey_b 11fd0 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 11fe0 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 11ff0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 12000 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 12010 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Locking failed 12020 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 12030 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 12040 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 12050 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 12060 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b ssion].active) { 12070 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 12080 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 12090 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 120a0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 120b0 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 120c0 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 not active.");.. 120d0 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 120e0 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 120f0 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6e 75 6d VALID);..}...num 12100 5f 69 64 73 20 3d 20 63 61 63 6b 65 79 5f 73 65 _ids = cackey_se 12110 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 12120 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e .identities_coun 12130 74 3b 0a 0a 09 69 66 20 28 69 64 65 6e 74 69 74 t;...if (identit 12140 79 5f 69 64 78 20 3e 3d 20 6e 75 6d 5f 69 64 73 y_idx >= num_ids 12150 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 12160 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 12170 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 12180 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 12190 46 28 22 45 72 72 6f 72 2e 20 20 4f 62 6a 65 63 F("Error. Objec 121a0 74 20 68 61 6e 64 6c 65 20 6f 75 74 20 6f 66 20 t handle out of 121b0 72 61 6e 67 65 2e 20 20 69 64 65 6e 74 69 74 79 range. identity 121c0 5f 69 64 78 20 3d 20 25 6c 75 2c 20 6e 75 6d 5f _idx = %lu, num_ 121d0 69 64 73 20 3d 20 25 6c 75 2e 22 2c 20 28 75 6e ids = %lu.", (un 121e0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 69 64 65 signed long) ide 121f0 6e 74 69 74 79 5f 69 64 78 2c 20 28 75 6e 73 69 ntity_idx, (unsi 12200 67 6e 65 64 20 6c 6f 6e 67 29 20 6e 75 6d 5f 69 gned long) num_i 12210 64 73 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 ds);....return(C 12220 4b 52 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 KR_OBJECT_HANDLE 12230 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 12240 69 64 65 6e 74 69 74 79 20 3d 20 26 63 61 63 6b identity = &cack 12250 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 12260 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 sion].identities 12270 5b 69 64 65 6e 74 69 74 79 5f 69 64 78 5d 3b 0a [identity_idx];. 12280 0a 09 66 6f 72 20 28 61 74 74 72 5f 69 64 78 20 ..for (attr_idx 12290 3d 20 30 3b 20 61 74 74 72 5f 69 64 78 20 3c 20 = 0; attr_idx < 122a0 75 6c 43 6f 75 6e 74 3b 20 61 74 74 72 5f 69 64 ulCount; attr_id 122b0 78 2b 2b 29 20 7b 0a 09 09 63 75 72 72 5f 61 74 x++) {...curr_at 122c0 74 72 20 3d 20 26 70 54 65 6d 70 6c 61 74 65 5b tr = &pTemplate[ 122d0 61 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 70 56 attr_idx];....pV 122e0 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 75 alue = NULL;...u 122f0 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 28 43 4b 5f lValueLen = (CK_ 12300 4c 4f 4e 47 29 20 2d 31 3b 0a 0a 09 09 43 41 43 LONG) -1;....CAC 12310 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 12320 28 22 4c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 74 ("Looking for at 12330 74 72 69 62 75 74 65 20 30 78 25 30 38 6c 78 20 tribute 0x%08lx 12340 28 69 64 65 6e 74 69 74 79 3a 25 6c 75 29 20 2e (identity:%lu) . 12350 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 12360 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 2d 3e ong) curr_attr-> 12370 74 79 70 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 type, (unsigned 12380 6c 6f 6e 67 29 20 69 64 65 6e 74 69 74 79 5f 69 long) identity_i 12390 64 78 29 3b 0a 0a 09 09 66 6f 72 20 28 73 65 73 dx);....for (ses 123a0 73 5f 61 74 74 72 5f 69 64 78 20 3d 20 30 3b 20 s_attr_idx = 0; 123b0 73 65 73 73 5f 61 74 74 72 5f 69 64 78 20 3c 20 sess_attr_idx < 123c0 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 identity->attrib 123d0 75 74 65 73 5f 63 6f 75 6e 74 3b 20 73 65 73 73 utes_count; sess 123e0 5f 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 _attr_idx++) {.. 123f0 09 09 69 66 20 28 69 64 65 6e 74 69 74 79 2d 3e ..if (identity-> 12400 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f attributes[sess_ 12410 61 74 74 72 5f 69 64 78 5d 2e 74 79 70 65 20 3d attr_idx].type = 12420 3d 20 63 75 72 72 5f 61 74 74 72 2d 3e 74 79 70 = curr_attr->typ 12430 65 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f e) {.....CACKEY_ 12440 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 12450 2e 2e 20 66 6f 75 6e 64 20 69 74 2c 20 70 56 61 .. found it, pVa 12460 6c 75 65 20 3d 20 25 70 2c 20 75 6c 56 61 6c 75 lue = %p, ulValu 12470 65 4c 65 6e 20 3d 20 25 6c 75 22 2c 20 69 64 65 eLen = %lu", ide 12480 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 75 74 65 ntity->attribute 12490 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d s[sess_attr_idx] 124a0 2e 70 56 61 6c 75 65 2c 20 69 64 65 6e 74 69 74 .pValue, identit 124b0 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 y->attributes[se 124c0 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c 56 ss_attr_idx].ulV 124d0 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 09 09 0a 09 alueLen);....... 124e0 09 09 09 70 56 61 6c 75 65 20 3d 20 69 64 65 6e ...pValue = iden 124f0 74 69 74 79 2d 3e 61 74 74 72 69 62 75 74 65 73 tity->attributes 12500 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e [sess_attr_idx]. 12510 70 56 61 6c 75 65 3b 0a 09 09 09 09 75 6c 56 61 pValue;.....ulVa 12520 6c 75 65 4c 65 6e 20 3d 20 69 64 65 6e 74 69 74 lueLen = identit 12530 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 y->attributes[se 12540 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c 56 ss_attr_idx].ulV 12550 61 6c 75 65 4c 65 6e 3b 0a 09 09 09 7d 0a 09 09 alueLen;....}... 12560 7d 0a 0a 09 09 69 66 20 28 63 75 72 72 5f 61 74 }....if (curr_at 12570 74 72 2d 3e 70 56 61 6c 75 65 20 26 26 20 70 56 tr->pValue && pV 12580 61 6c 75 65 29 20 7b 0a 09 09 09 69 66 20 28 63 alue) {....if (c 12590 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 urr_attr->ulValu 125a0 65 4c 65 6e 20 3e 3d 20 75 6c 56 61 6c 75 65 4c eLen >= ulValueL 125b0 65 6e 29 20 7b 0a 09 09 09 09 6d 65 6d 63 70 79 en) {.....memcpy 125c0 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c (curr_attr->pVal 125d0 75 65 2c 20 70 56 61 6c 75 65 2c 20 75 6c 56 61 ue, pValue, ulVa 125e0 6c 75 65 4c 65 6e 29 3b 0a 09 09 09 7d 20 65 6c lueLen);....} el 125f0 73 65 20 7b 0a 09 09 09 09 75 6c 56 61 6c 75 65 se {.....ulValue 12600 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47 29 20 Len = (CK_LONG) 12610 2d 31 3b 0a 0a 09 09 09 09 72 65 74 76 61 6c 20 -1;......retval 12620 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f = CKR_BUFFER_TOO 12630 5f 53 4d 41 4c 4c 3b 0a 09 09 09 7d 0a 09 09 7d _SMALL;....}...} 12640 0a 0a 09 09 63 75 72 72 5f 61 74 74 72 2d 3e 75 ....curr_attr->u 12650 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 75 6c 56 61 lValueLen = ulVa 12660 6c 75 65 4c 65 6e 3b 0a 09 7d 0a 0a 09 6d 75 74 lueLen;..}...mut 12670 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 12680 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 12690 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 126a0 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 126b0 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 126c0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 126d0 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b ("Error. Unlock 126e0 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 126f0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 12700 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 12710 0a 09 69 66 20 28 72 65 74 76 61 6c 20 3d 3d 20 ..if (retval == 12720 43 4b 52 5f 41 54 54 52 49 42 55 54 45 5f 54 59 CKR_ATTRIBUTE_TY 12730 50 45 5f 49 4e 56 41 4c 49 44 29 20 7b 0a 09 09 PE_INVALID) {... 12740 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 12750 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 12760 4b 52 5f 41 54 54 52 49 42 55 54 45 5f 54 59 50 KR_ATTRIBUTE_TYP 12770 45 5f 49 4e 56 41 4c 49 44 20 28 25 69 29 22 2c E_INVALID (%i)", 12780 20 28 69 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a (int) retval);. 12790 09 7d 20 65 6c 73 65 20 69 66 20 28 72 65 74 76 .} else if (retv 127a0 61 6c 20 3d 3d 20 43 4b 52 5f 42 55 46 46 45 52 al == CKR_BUFFER 127b0 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a 09 09 _TOO_SMALL) {... 127c0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 127d0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 127e0 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d KR_BUFFER_TOO_SM 127f0 41 4c 4c 20 28 25 69 29 22 2c 20 28 69 6e 74 29 ALL (%i)", (int) 12800 20 72 65 74 76 61 6c 29 3b 0a 09 7d 20 65 6c 73 retval);..} els 12810 65 20 69 66 20 28 72 65 74 76 61 6c 20 3d 3d 20 e if (retval == 12820 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b CKR_OK) {...CACK 12830 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 12840 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 12850 4b 20 28 25 69 29 22 2c 20 28 69 6e 74 29 20 72 K (%i)", (int) r 12860 65 74 76 61 6c 29 3b 0a 09 7d 20 65 6c 73 65 20 etval);..} else 12870 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 12880 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 12890 6e 67 20 25 69 22 2c 20 28 69 6e 74 29 20 72 65 ng %i", (int) re 128a0 74 76 61 6c 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 tval);..}...retu 128b0 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 43 rn(retval);.}..C 128c0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 128d0 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 74 41 74 N(CK_RV, C_SetAt 128e0 74 72 69 62 75 74 65 56 61 6c 75 65 29 28 43 4b tributeValue)(CK 128f0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 12900 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a hSession, CK_OBJ 12910 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 ECT_HANDLE hObje 12920 63 74 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45 ct, CK_ATTRIBUTE 12930 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 _PTR pTemplate, 12940 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 CK_ULONG ulCount 12950 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 12960 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 12970 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 12980 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 12990 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 129a0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 129b0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 129c0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 129d0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 129e0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 129f0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 12a00 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 12a10 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 12a20 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 12a30 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 12a40 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 12a50 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 12a60 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 12a70 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 12a80 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 12a90 52 56 2c 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 RV, C_FindObject 12aa0 73 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f sInit)(CK_SESSIO 12ab0 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 12ac0 6e 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f n, CK_ATTRIBUTE_ 12ad0 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 PTR pTemplate, C 12ae0 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 29 K_ULONG ulCount) 12af0 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 {..int mutex_re 12b00 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 tval;...CACKEY_D 12b10 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 12b20 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 12b30 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 12b40 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 12b50 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 12b60 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 12b70 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 12b80 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 12b90 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 12ba0 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 ..}...if (hSessi 12bb0 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 on == 0 || hSess 12bc0 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 ion >= (sizeof(c 12bd0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 ackey_sessions) 12be0 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ 12bf0 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b sessions[0]))) { 12c00 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 12c10 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 12c20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 Session out of r 12c30 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 ange.");......re 12c40 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 12c50 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 12c60 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 12c70 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 12c80 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 ex_lock(cackey_b 12c90 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 12ca0 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 12cb0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 12cc0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 12cd0 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Locking failed 12ce0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 12cf0 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 12d00 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 12d10 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 12d20 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b ssion].active) { 12d30 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 12d40 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 12d50 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 12d60 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 12d70 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 12d80 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 not active.");.. 12d90 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 12da0 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 12db0 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 VALID);..}...if 12dc0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 12dd0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 12de0 68 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 h_active) {...ca 12df0 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 12e00 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 12e10 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 12e20 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 12e30 2e 20 20 53 65 61 72 63 68 20 61 6c 72 65 61 64 . Search alread 12e40 79 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a y active.");.... 12e50 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 ..return(CKR_OPE 12e60 52 41 54 49 4f 4e 5f 41 43 54 49 56 45 29 3b 0a RATION_ACTIVE);. 12e70 09 7d 0a 0a 09 69 66 20 28 70 54 65 6d 70 6c 61 .}...if (pTempla 12e80 74 65 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 te != NULL) {... 12e90 69 66 20 28 75 6c 43 6f 75 6e 74 20 21 3d 20 30 if (ulCount != 0 12ea0 29 20 7b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 ) {....cackey_se 12eb0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 12ec0 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f .search_query_co 12ed0 75 6e 74 20 3d 20 75 6c 43 6f 75 6e 74 3b 0a 09 unt = ulCount;.. 12ee0 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 12ef0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 s[hSession].sear 12f00 63 68 5f 71 75 65 72 79 20 3d 20 6d 61 6c 6c 6f ch_query = mallo 12f10 63 28 75 6c 43 6f 75 6e 74 20 2a 20 73 69 7a 65 c(ulCount * size 12f20 6f 66 28 2a 70 54 65 6d 70 6c 61 74 65 29 29 3b of(*pTemplate)); 12f30 0a 0a 09 09 09 6d 65 6d 63 70 79 28 63 61 63 6b .....memcpy(cack 12f40 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 12f50 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 sion].search_que 12f60 72 79 2c 20 70 54 65 6d 70 6c 61 74 65 2c 20 75 ry, pTemplate, u 12f70 6c 43 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 28 lCount * sizeof( 12f80 2a 70 54 65 6d 70 6c 61 74 65 29 29 3b 0a 09 09 *pTemplate));... 12f90 7d 20 65 6c 73 65 20 7b 0a 09 09 09 63 61 63 6b } else {....cack 12fa0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 12fb0 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 sion].search_que 12fc0 72 79 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 09 ry_count = 0;... 12fd0 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 12fe0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 12ff0 68 5f 71 75 65 72 79 20 3d 20 4e 55 4c 4c 3b 0a h_query = NULL;. 13000 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 ..}..} else {... 13010 69 66 20 28 75 6c 43 6f 75 6e 74 20 21 3d 20 30 if (ulCount != 0 13020 29 20 7b 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 ) {....cackey_mu 13030 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 13040 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 09 y_biglock);..... 13050 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 13060 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 61 NTF("Error. Sea 13070 72 63 68 20 71 75 65 72 79 20 73 70 65 63 69 66 rch query specif 13080 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 62 75 74 ied as NULL, but 13090 20 6e 75 6d 62 65 72 20 6f 66 20 71 75 65 72 79 number of query 130a0 20 74 65 72 6d 73 20 6e 6f 74 20 73 70 65 63 69 terms not speci 130b0 66 69 65 64 20 61 73 20 30 2e 22 29 3b 0a 0a 09 fied as 0.");... 130c0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG 130d0 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 09 7d UMENTS_BAD);...} 130e0 0a 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 ....cackey_sessi 130f0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 ons[hSession].se 13100 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 arch_query_count 13110 20 3d 20 30 3b 0a 09 09 63 61 63 6b 65 79 5f 73 = 0;...cackey_s 13120 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 13130 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 20 3d ].search_query = 13140 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a 09 63 61 63 6b NULL;..}...cack 13150 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 13160 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 74 sion].search_act 13170 69 76 65 20 3d 20 31 3b 0a 09 63 61 63 6b 65 79 ive = 1;..cackey 13180 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 13190 6f 6e 5d 2e 73 65 61 72 63 68 5f 63 75 72 72 5f on].search_curr_ 131a0 69 64 20 3d 20 30 3b 0a 0a 09 6d 75 74 65 78 5f id = 0;...mutex_ 131b0 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 131c0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 131d0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 131e0 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 131f0 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 13200 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 13210 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 13220 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 13230 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 13240 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 L_ERROR);..}...C 13250 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 13260 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 13270 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ 13280 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b OK);...return(CK 13290 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 R_OK);.}..CK_DEF 132a0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 132b0 52 56 2c 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 RV, C_FindObject 132c0 73 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 s)(CK_SESSION_HA 132d0 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 132e0 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f K_OBJECT_HANDLE_ 132f0 50 54 52 20 70 68 4f 62 6a 65 63 74 2c 20 43 4b PTR phObject, CK 13300 5f 55 4c 4f 4e 47 20 75 6c 4d 61 78 4f 62 6a 65 _ULONG ulMaxObje 13310 63 74 43 6f 75 6e 74 2c 20 43 4b 5f 55 4c 4f 4e ctCount, CK_ULON 13320 47 5f 50 54 52 20 70 75 6c 4f 62 6a 65 63 74 43 G_PTR pulObjectC 13330 6f 75 6e 74 29 20 7b 0a 09 73 74 72 75 63 74 20 ount) {..struct 13340 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 cackey_identity 13350 2a 63 75 72 72 5f 69 64 3b 0a 09 43 4b 5f 41 54 *curr_id;..CK_AT 13360 54 52 49 42 55 54 45 20 2a 63 75 72 72 5f 61 74 TRIBUTE *curr_at 13370 74 72 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 63 75 tr;..CK_ULONG cu 13380 72 72 5f 69 64 5f 69 64 78 2c 20 63 75 72 72 5f rr_id_idx, curr_ 13390 6f 75 74 5f 69 64 5f 69 64 78 2c 20 63 75 72 72 out_id_idx, curr 133a0 5f 61 74 74 72 5f 69 64 78 2c 20 73 65 73 73 5f _attr_idx, sess_ 133b0 61 74 74 72 5f 69 64 78 3b 0a 09 43 4b 5f 55 4c attr_idx;..CK_UL 133c0 4f 4e 47 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e ONG matched_coun 133d0 74 2c 20 70 72 65 76 5f 6d 61 74 63 68 65 64 5f t, prev_matched_ 133e0 63 6f 75 6e 74 3b 0a 09 69 6e 74 20 6d 75 74 65 count;..int mute 133f0 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b x_retval;...CACK 13400 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 13410 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 13420 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 13430 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 13440 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 13450 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 13460 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 13470 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 13480 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 13490 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 75 ED);..}...if (pu 134a0 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 3d 20 lObjectCount == 134b0 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY 134c0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 134d0 72 72 6f 72 2e 20 20 70 75 6c 4f 62 6a 65 63 74 rror. pulObject 134e0 43 6f 75 6e 74 20 69 73 20 4e 55 4c 4c 2e 22 29 Count is NULL.") 134f0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 13500 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 13510 09 7d 0a 0a 09 69 66 20 28 70 68 4f 62 6a 65 63 .}...if (phObjec 13520 74 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c 4d t == NULL && ulM 13530 61 78 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 3d axObjectCount == 13540 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 74 0) {.../* Short 13550 20 63 69 72 63 75 69 74 2c 20 69 66 20 7a 65 72 circuit, if zer 13560 6f 20 6f 62 6a 65 63 74 73 20 77 65 72 65 20 73 o objects were s 13570 70 65 63 69 66 69 65 64 20 72 65 74 75 72 6e 20 pecified return 13580 7a 65 72 6f 20 69 74 65 6d 73 20 69 6d 6d 65 64 zero items immed 13590 69 61 74 65 6c 79 20 2a 2f 0a 09 09 2a 70 75 6c iately */...*pul 135a0 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 20 30 3b ObjectCount = 0; 135b0 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 135c0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 135d0 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 20 28 ng CKR_OK (%i) ( 135e0 73 68 6f 72 74 20 63 69 72 63 75 69 74 29 22 2c short circuit)", 135f0 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 CKR_OK);....ret 13600 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a urn(CKR_OK);..}. 13610 0a 09 69 66 20 28 70 68 4f 62 6a 65 63 74 20 3d ..if (phObject = 13620 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK 13630 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 13640 22 45 72 72 6f 72 2e 20 20 70 68 4f 62 6a 65 63 "Error. phObjec 13650 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 t is NULL.");... 13660 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 13670 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 13680 09 69 66 20 28 75 6c 4d 61 78 4f 62 6a 65 63 74 .if (ulMaxObject 13690 43 6f 75 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 09 Count == 0) {... 136a0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 136b0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4d 61 78 NTF("Error. Max 136c0 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 6f imum number of o 136d0 62 6a 65 63 74 73 20 73 70 65 63 69 66 69 65 64 bjects specified 136e0 20 61 73 20 7a 65 72 6f 2e 22 29 3b 0a 0a 09 09 as zero.");.... 136f0 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM 13700 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 ENTS_BAD);..}... 13710 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 if (hSession == 13720 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 0 || hSession >= 13730 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 13740 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 13750 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 13760 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 ns[0]))) {...CAC 13770 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 13780 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 13790 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 n out of range." 137a0 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 137b0 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 137c0 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 137d0 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 137e0 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 cackey_mutex_loc 137f0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 13800 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 13810 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 13820 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 13830 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b TF("Error. Lock 13840 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 13850 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 13860 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 13870 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 ..if (!cackey_se 13880 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 13890 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 .active) {...cac 138a0 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 138b0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 138c0 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 138d0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 138e0 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 Session not ac 138f0 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 13900 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 13910 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 13920 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack 13930 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 13940 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 74 sion].search_act 13950 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ive) {...cackey_ 13960 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 13970 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 13980 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 13990 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 139a0 61 72 63 68 20 6e 6f 74 20 61 63 74 69 76 65 2e arch not active. 139b0 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 139c0 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f CKR_OPERATION_NO 139d0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 139e0 09 7d 0a 0a 09 63 75 72 72 5f 69 64 5f 69 64 78 .}...curr_id_idx 139f0 20 3d 20 30 3b 0a 09 63 75 72 72 5f 6f 75 74 5f = 0;..curr_out_ 13a00 69 64 5f 69 64 78 20 3d 20 30 3b 0a 09 66 6f 72 id_idx = 0;..for 13a10 20 28 63 75 72 72 5f 69 64 5f 69 64 78 20 3d 20 (curr_id_idx = 13a20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 13a30 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 hSession].search 13a40 5f 63 75 72 72 5f 69 64 3b 20 63 75 72 72 5f 69 _curr_id; curr_i 13a50 64 5f 69 64 78 20 3c 20 63 61 63 6b 65 79 5f 73 d_idx < cackey_s 13a60 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 13a70 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 ].identities_cou 13a80 6e 74 20 26 26 20 75 6c 4d 61 78 4f 62 6a 65 63 nt && ulMaxObjec 13a90 74 43 6f 75 6e 74 3b 20 63 75 72 72 5f 69 64 5f tCount; curr_id_ 13aa0 69 64 78 2b 2b 29 20 7b 0a 09 09 63 75 72 72 5f idx++) {...curr_ 13ab0 69 64 20 3d 20 26 63 61 63 6b 65 79 5f 73 65 73 id = &cackey_ses 13ac0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 13ad0 69 64 65 6e 74 69 74 69 65 73 5b 63 75 72 72 5f identities[curr_ 13ae0 69 64 5f 69 64 78 5d 3b 0a 0a 09 09 43 41 43 4b id_idx];....CACK 13af0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 13b00 22 50 72 6f 63 65 73 73 69 6e 67 20 69 64 65 6e "Processing iden 13b10 74 69 74 79 3a 25 6c 75 22 2c 20 28 75 6e 73 69 tity:%lu", (unsi 13b20 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f gned long) curr_ 13b30 69 64 5f 69 64 78 29 3b 0a 0a 09 09 6d 61 74 63 id_idx);....matc 13b40 68 65 64 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 0a hed_count = 0;.. 13b50 09 09 66 6f 72 20 28 63 75 72 72 5f 61 74 74 72 ..for (curr_attr 13b60 5f 69 64 78 20 3d 20 30 3b 20 63 75 72 72 5f 61 _idx = 0; curr_a 13b70 74 74 72 5f 69 64 78 20 3c 20 63 61 63 6b 65 79 ttr_idx < cackey 13b80 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 13b90 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 on].search_query 13ba0 5f 63 6f 75 6e 74 3b 20 63 75 72 72 5f 61 74 74 _count; curr_att 13bb0 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 70 72 r_idx++) {....pr 13bc0 65 76 5f 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 ev_matched_count 13bd0 20 3d 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 = matched_count 13be0 3b 0a 0a 09 09 09 63 75 72 72 5f 61 74 74 72 20 ;.....curr_attr 13bf0 3d 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f = &cackey_sessio 13c00 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 ns[hSession].sea 13c10 72 63 68 5f 71 75 65 72 79 5b 63 75 72 72 5f 61 rch_query[curr_a 13c20 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 09 43 41 ttr_idx];.....CA 13c30 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 13c40 46 28 22 20 20 43 68 65 63 6b 69 6e 67 20 66 6f F(" Checking fo 13c50 72 20 61 74 74 72 69 62 75 74 65 20 30 78 25 30 r attribute 0x%0 13c60 38 6c 78 20 69 6e 20 69 64 65 6e 74 69 74 79 3a 8lx in identity: 13c70 25 69 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 %i...", (unsigne 13c80 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 d long) curr_att 13c90 72 2d 3e 74 79 70 65 2c 20 28 69 6e 74 29 20 63 r->type, (int) c 13ca0 75 72 72 5f 69 64 5f 69 64 78 29 3b 0a 09 09 09 urr_id_idx);.... 13cb0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 13cc0 4e 54 42 55 46 28 22 20 20 20 20 56 61 6c 75 65 NTBUF(" Value 13cd0 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 3a 22 2c 20 looking for:", 13ce0 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 curr_attr->pValu 13cf0 65 2c 20 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c e, curr_attr->ul 13d00 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 66 ValueLen);.....f 13d10 6f 72 20 28 73 65 73 73 5f 61 74 74 72 5f 69 64 or (sess_attr_id 13d20 78 20 3d 20 30 3b 20 73 65 73 73 5f 61 74 74 72 x = 0; sess_attr 13d30 5f 69 64 78 20 3c 20 63 75 72 72 5f 69 64 2d 3e _idx < curr_id-> 13d40 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 attributes_count 13d50 3b 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 2b ; sess_attr_idx+ 13d60 2b 29 20 7b 0a 09 09 09 09 69 66 20 28 63 75 72 +) {.....if (cur 13d70 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 74 65 73 r_id->attributes 13d80 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e [sess_attr_idx]. 13d90 74 79 70 65 20 3d 3d 20 63 75 72 72 5f 61 74 74 type == curr_att 13da0 72 2d 3e 74 79 70 65 29 20 7b 0a 09 09 09 09 09 r->type) {...... 13db0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 13dc0 4e 54 46 28 22 20 20 20 20 2e 2e 2e 20 66 6f 75 NTF(" ... fou 13dd0 6e 64 20 6d 61 74 63 68 69 6e 67 20 74 79 70 65 nd matching type 13de0 20 2e 2e 2e 22 29 3b 0a 09 09 09 09 09 43 41 43 ...");......CAC 13df0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 KEY_DEBUG_PRINTB 13e00 55 46 28 22 20 20 20 20 2e 2e 2e 20 6f 75 72 20 UF(" ... our 13e10 76 61 6c 75 65 3a 22 2c 20 63 75 72 72 5f 69 64 value:", curr_id 13e20 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 ->attributes[ses 13e30 73 5f 61 74 74 72 5f 69 64 78 5d 2e 70 56 61 6c s_attr_idx].pVal 13e40 75 65 2c 20 63 75 72 72 5f 69 64 2d 3e 61 74 74 ue, curr_id->att 13e50 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 ributes[sess_att 13e60 72 5f 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 r_idx].ulValueLe 13e70 6e 29 3b 0a 0a 09 09 09 09 09 69 66 20 28 63 75 n);.......if (cu 13e80 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 20 rr_attr->pValue 13e90 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 09 == NULL) {...... 13ea0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 13eb0 49 4e 54 46 28 22 20 20 20 20 20 20 20 2e 2e 2e INTF(" ... 13ec0 20 66 6f 75 6e 64 20 77 69 6c 64 63 61 72 64 20 found wildcard 13ed0 6d 61 74 63 68 22 29 3b 0a 0a 09 09 09 09 09 09 match");........ 13ee0 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 2b 2b 3b matched_count++; 13ef0 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 ........break;.. 13f00 09 09 09 09 7d 0a 0a 20 09 09 09 09 09 69 66 20 ....}.. .....if 13f10 28 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 (curr_attr->ulVa 13f20 6c 75 65 4c 65 6e 20 3d 3d 20 63 75 72 72 5f 69 lueLen == curr_i 13f30 64 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 d->attributes[se 13f40 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c 56 ss_attr_idx].ulV 13f50 61 6c 75 65 4c 65 6e 20 26 26 20 6d 65 6d 63 6d alueLen && memcm 13f60 70 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 p(curr_attr->pVa 13f70 6c 75 65 2c 20 63 75 72 72 5f 69 64 2d 3e 61 74 lue, curr_id->at 13f80 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 tributes[sess_at 13f90 74 72 5f 69 64 78 5d 2e 70 56 61 6c 75 65 2c 20 tr_idx].pValue, 13fa0 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 curr_id->attribu 13fb0 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 tes[sess_attr_id 13fc0 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 20 3d x].ulValueLen) = 13fd0 3d 20 30 29 20 7b 0a 09 09 09 09 09 09 43 41 43 = 0) {.......CAC 13fe0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 13ff0 28 22 20 20 20 20 20 20 20 2e 2e 2e 20 66 6f 75 (" ... fou 14000 6e 64 20 65 78 61 63 74 20 6d 61 74 63 68 22 29 nd exact match") 14010 3b 0a 0a 09 09 09 09 09 09 6d 61 74 63 68 65 64 ;........matched 14020 5f 63 6f 75 6e 74 2b 2b 3b 0a 0a 09 09 09 09 09 _count++;....... 14030 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 09 .break;......}.. 14040 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 2f 2a ...}....}...../* 14050 20 49 66 20 74 68 65 20 61 74 74 72 69 62 75 74 If the attribut 14060 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 6d e could not be m 14070 61 74 63 68 65 64 2c 20 64 6f 20 6e 6f 74 20 74 atched, do not t 14080 72 79 20 74 6f 20 6d 61 74 63 68 20 61 64 64 69 ry to match addi 14090 74 69 6f 6e 61 6c 20 61 74 74 72 69 62 75 74 65 tional attribute 140a0 73 20 2a 2f 0a 09 09 09 69 66 20 28 70 72 65 76 s */....if (prev 140b0 5f 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 20 3d _matched_count = 140c0 3d 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 29 = matched_count) 140d0 20 7b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 {.....break;... 140e0 09 7d 0a 09 09 7d 0a 0a 09 09 69 66 20 28 6d 61 .}...}....if (ma 140f0 74 63 68 65 64 5f 63 6f 75 6e 74 20 3d 3d 20 63 tched_count == c 14100 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 14110 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 14120 71 75 65 72 79 5f 63 6f 75 6e 74 29 20 7b 0a 09 query_count) {.. 14130 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 14140 52 49 4e 54 46 28 22 20 20 2e 2e 2e 20 41 6c 6c RINTF(" ... All 14150 20 25 69 20 61 74 74 72 69 62 75 74 65 73 20 63 %i attributes c 14160 68 65 63 6b 65 64 20 66 6f 72 20 66 6f 75 6e 64 hecked for found 14170 2c 20 61 64 64 69 6e 67 20 69 64 65 6e 74 69 74 , adding identit 14180 79 3a 25 69 20 74 6f 20 72 65 74 75 72 6e 65 64 y:%i to returned 14190 20 6c 69 73 74 22 2c 20 28 69 6e 74 29 20 63 61 list", (int) ca 141a0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 141b0 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 ession].search_q 141c0 75 65 72 79 5f 63 6f 75 6e 74 2c 20 28 69 6e 74 uery_count, (int 141d0 29 20 63 75 72 72 5f 69 64 5f 69 64 78 29 3b 0a ) curr_id_idx);. 141e0 0a 09 09 09 70 68 4f 62 6a 65 63 74 5b 63 75 72 ....phObject[cur 141f0 72 5f 6f 75 74 5f 69 64 5f 69 64 78 5d 20 3d 20 r_out_id_idx] = 14200 63 75 72 72 5f 69 64 5f 69 64 78 20 2b 20 31 3b curr_id_idx + 1; 14210 0a 0a 09 09 09 75 6c 4d 61 78 4f 62 6a 65 63 74 .....ulMaxObject 14220 43 6f 75 6e 74 2d 2d 3b 0a 0a 09 09 09 63 75 72 Count--;.....cur 14230 72 5f 6f 75 74 5f 69 64 5f 69 64 78 2b 2b 3b 0a r_out_id_idx++;. 14240 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 43 41 ..} else {....CA 14250 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 14260 46 28 22 20 20 2e 2e 2e 20 4e 6f 74 20 61 6c 6c F(" ... Not all 14270 20 25 69 20 28 6f 6e 6c 79 20 66 6f 75 6e 64 20 %i (only found 14280 25 69 29 20 61 74 74 72 69 62 75 74 65 73 20 63 %i) attributes c 14290 68 65 63 6b 65 64 20 66 6f 72 20 66 6f 75 6e 64 hecked for found 142a0 2c 20 6e 6f 74 20 61 64 64 69 6e 67 20 69 64 65 , not adding ide 142b0 6e 74 69 74 79 3a 25 69 22 2c 20 28 69 6e 74 29 ntity:%i", (int) 142c0 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 142d0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 142e0 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 2c 20 28 h_query_count, ( 142f0 69 6e 74 29 20 6d 61 74 63 68 65 64 5f 63 6f 75 int) matched_cou 14300 6e 74 2c 20 28 69 6e 74 29 20 63 75 72 72 5f 69 nt, (int) curr_i 14310 64 5f 69 64 78 29 3b 0a 09 09 7d 0a 09 7d 0a 09 d_idx);...}..}.. 14320 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 14330 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 hSession].search 14340 5f 63 75 72 72 5f 69 64 20 3d 20 63 75 72 72 5f _curr_id = curr_ 14350 69 64 5f 69 64 78 3b 0a 09 2a 70 75 6c 4f 62 6a id_idx;..*pulObj 14360 65 63 74 43 6f 75 6e 74 20 3d 20 63 75 72 72 5f ectCount = curr_ 14370 6f 75 74 5f 69 64 5f 69 64 78 3b 0a 0a 09 6d 75 out_id_idx;...mu 14380 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 14390 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 143a0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 143b0 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 143c0 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 143d0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 143e0 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 143f0 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 14400 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 14410 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 14420 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 14430 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 14440 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 2c 20 6e g CKR_OK (%i), n 14450 75 6d 20 6f 62 6a 65 63 74 73 20 3d 20 25 6c 75 um objects = %lu 14460 22 2c 20 43 4b 52 5f 4f 4b 2c 20 2a 70 75 6c 4f ", CKR_OK, *pulO 14470 62 6a 65 63 74 43 6f 75 6e 74 29 3b 0a 0a 09 72 bjectCount);...r 14480 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 14490 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 144a0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 46 69 TION(CK_RV, C_Fi 144b0 6e 64 4f 62 6a 65 63 74 73 46 69 6e 61 6c 29 28 ndObjectsFinal)( 144c0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 144d0 45 20 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 69 E hSession) {..i 144e0 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b nt mutex_retval; 144f0 0a 0a 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 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 14510 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 14520 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 14530 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 14540 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 14550 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 14560 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 14570 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 14580 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 14590 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d .if (hSession == 145a0 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 0 || hSession > 145b0 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 = (sizeof(cackey 145c0 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a _sessions) / siz 145d0 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi 145e0 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 ons[0]))) {...CA 145f0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 14600 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 14610 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e on out of range. 14620 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 14630 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 CKR_SESSION_HAND 14640 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 14650 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 14660 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f cackey_mutex_lo 14670 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 14680 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 14690 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 146a0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 146b0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 NTF("Error. Loc 146c0 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 146d0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 146e0 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 146f0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 ...if (!cackey_s 14700 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 14710 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 ].active) {...ca 14720 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 14730 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 14740 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 14750 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 14760 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 . Session not a 14770 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 ctive.");......r 14780 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 14790 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 147a0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 147b0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 147c0 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 ssion].search_ac 147d0 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 tive) {...cackey 147e0 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 147f0 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 14800 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 14810 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 14820 65 61 72 63 68 20 6e 6f 74 20 61 63 74 69 76 65 earch not active 14830 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 14840 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e (CKR_OPERATION_N 14850 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 14860 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 ..}...cackey_ses 14870 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 14880 73 65 61 72 63 68 5f 61 63 74 69 76 65 20 3d 20 search_active = 14890 30 3b 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 0;..if (cackey_s 148a0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 148b0 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 29 20 ].search_query) 148c0 7b 0a 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f {...free(cackey_ 148d0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 148e0 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 29 n].search_query) 148f0 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 14900 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 14910 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 14920 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 14930 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 14940 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 14950 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 14960 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 14970 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 14980 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 14990 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b RROR);..}...CACK 149a0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 149b0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 149c0 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) 149d0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O 149e0 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 K);.}..CK_DEFINE 149f0 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 14a00 20 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 29 28 C_EncryptInit)( 14a10 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 14a20 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d E hSession, CK_M 14a30 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 ECHANISM_PTR pMe 14a40 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 chanism, CK_OBJE 14a50 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 CT_HANDLE hKey) 14a60 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 14a70 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 14a80 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 14a90 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 14aa0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 14ab0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 14ac0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 14ad0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 14ae0 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 14af0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 14b00 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 14b10 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 14b20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 14b30 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 14b40 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 14b50 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 14b60 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 14b70 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 14b80 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN 14b90 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 14ba0 2c 20 43 5f 45 6e 63 72 79 70 74 29 28 43 4b 5f , C_Encrypt)(CK_ 14bb0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 14bc0 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 14bd0 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 _PTR pData, CK_U 14be0 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c 20 LONG ulDataLen, 14bf0 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 CK_BYTE_PTR pEnc 14c00 72 79 70 74 65 64 44 61 74 61 2c 20 43 4b 5f 55 ryptedData, CK_U 14c10 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 45 6e 63 72 LONG_PTR pulEncr 14c20 79 70 74 65 64 44 61 74 61 4c 65 6e 29 20 7b 0a yptedDataLen) {. 14c30 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 14c40 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 14c50 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 14c60 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 14c70 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 14c80 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 14c90 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 14ca0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 14cb0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 14cc0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 14cd0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 14ce0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 14cf0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 14d00 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 14d10 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 14d20 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 14d30 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 14d40 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 14d50 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 14d60 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 14d70 43 5f 45 6e 63 72 79 70 74 55 70 64 61 74 65 29 C_EncryptUpdate) 14d80 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 14d90 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 14da0 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 BYTE_PTR pPart, 14db0 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c CK_ULONG ulPartL 14dc0 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 en, CK_BYTE_PTR 14dd0 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 pEncryptedPart, 14de0 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 14df0 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e EncryptedPartLen 14e00 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 14e10 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 14e20 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 14e30 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 14e40 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 14e50 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 14e60 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 14e70 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 14e80 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 14e90 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 14ea0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 14eb0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 14ec0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 14ed0 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 14ee0 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 14ef0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 14f00 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 14f10 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 14f20 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 14f30 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 14f40 52 56 2c 20 43 5f 45 6e 63 72 79 70 74 46 69 6e RV, C_EncryptFin 14f50 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 al)(CK_SESSION_H 14f60 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 14f70 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 4c 61 73 CK_BYTE_PTR pLas 14f80 74 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 tEncryptedPart, 14f90 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 14fa0 4c 61 73 74 45 6e 63 72 79 70 74 65 64 50 61 72 LastEncryptedPar 14fb0 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f tLen) {..CACKEY_ 14fc0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 14fd0 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 14fe0 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 14ff0 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 15000 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 15010 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 15020 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 15030 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 15040 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 15050 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 15060 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 15070 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 rning CKR_FUNCTI 15080 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 15090 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 (%i)", CKR_FUNC 150a0 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 150b0 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK 150c0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 150d0 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b UPPORTED);.}..CK 150e0 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 150f0 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 (CK_RV, C_Decryp 15100 74 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f tInit)(CK_SESSIO 15110 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 15120 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f n, CK_MECHANISM_ 15130 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 PTR pMechanism, 15140 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 15150 20 68 4b 65 79 29 20 7b 0a 09 69 6e 74 20 6d 75 hKey) {..int mu 15160 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 68 4b tex_retval;...hK 15170 65 79 2d 2d 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 ey--;...CACKEY_D 15180 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 15190 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 151a0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 151b0 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 151c0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 151d0 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 151e0 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 151f0 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 15200 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 15210 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 ..}...if (pMecha 15220 6e 69 73 6d 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a nism == NULL) {. 15230 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 15240 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 4d RINTF("Error. pM 15250 65 63 68 61 6e 69 73 6d 20 69 73 20 4e 55 4c 4c echanism is NULL 15260 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 15270 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD 15280 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63 );..}...if (pMec 15290 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 hanism->mechanis 152a0 6d 20 21 3d 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 m != CKM_RSA_PKC 152b0 53 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 S) {...CACKEY_DE 152c0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 152d0 72 2e 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d r. pMechanism->m 152e0 65 63 68 61 6e 69 73 6d 20 6e 6f 74 20 73 70 65 echanism not spe 152f0 63 69 66 69 65 64 20 61 73 20 43 4b 4d 5f 52 53 cified as CKM_RS 15300 41 5f 50 4b 43 53 22 29 3b 0a 0a 09 09 72 65 74 A_PKCS");....ret 15310 75 72 6e 28 43 4b 52 5f 4d 45 43 48 41 4e 49 53 urn(CKR_MECHANIS 15320 4d 5f 50 41 52 41 4d 5f 49 4e 56 41 4c 49 44 29 M_PARAM_INVALID) 15330 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 ;..}...if (hSess 15340 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 ion == 0 || hSes 15350 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 sion >= (sizeof( 15360 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 15370 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 15380 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 _sessions[0]))) 15390 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 153a0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 153b0 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 Session out of 153c0 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 range.");......r 153d0 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 153e0 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 153f0 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 );..}...mutex_re 15400 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 15410 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 15420 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 15430 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 15440 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 15450 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 15460 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 15470 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 15480 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 15490 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 R);..}...if (!ca 154a0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 154b0 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 ession].active) 154c0 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 154d0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 154e0 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 154f0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 15500 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 15510 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 15520 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 15530 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 15540 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 NVALID);..}...if 15550 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (cackey_session 15560 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 s[hSession].decr 15570 79 70 74 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 ypt_active) {... 15580 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 15590 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 155a0 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 155b0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 155c0 6f 72 2e 20 20 44 65 63 72 79 70 74 20 61 6c 72 or. Decrypt alr 155d0 65 61 64 79 20 69 6e 20 70 72 6f 67 72 65 73 73 eady in progress 155e0 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 155f0 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 41 (CKR_OPERATION_A 15600 43 54 49 56 45 29 3b 0a 09 7d 0a 0a 09 69 66 20 CTIVE);..}...if 15610 28 68 4b 65 79 20 3e 3d 20 63 61 63 6b 65 79 5f (hKey >= cackey_ 15620 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 15630 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f n].identities_co 15640 75 6e 74 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f unt) {...cackey_ 15650 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 15660 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 15670 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 15680 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4b 65 INTF("Error. Ke 15690 79 20 68 61 6e 64 6c 65 20 6f 75 74 20 6f 66 20 y handle out of 156a0 72 61 6e 67 65 2e 22 29 3b 0a 0a 09 09 72 65 74 range.");....ret 156b0 75 72 6e 28 43 4b 52 5f 4b 45 59 5f 48 41 4e 44 urn(CKR_KEY_HAND 156c0 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 156d0 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 156e0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 s[hSession].decr 156f0 79 70 74 5f 61 63 74 69 76 65 20 3d 20 31 3b 0a ypt_active = 1;. 15700 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 15710 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 s[hSession].decr 15720 79 70 74 5f 6d 65 63 68 61 6e 69 73 6d 20 3d 20 ypt_mechanism = 15730 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 pMechanism->mech 15740 61 6e 69 73 6d 3b 0a 09 63 61 63 6b 65 79 5f 73 anism;..cackey_s 15750 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 15760 5d 2e 64 65 63 72 79 70 74 5f 6d 65 63 68 5f 70 ].decrypt_mech_p 15770 61 72 6d 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d arm = pMechanism 15780 2d 3e 70 50 61 72 61 6d 65 74 65 72 3b 0a 09 63 ->pParameter;..c 15790 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 157a0 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 Session].decrypt 157b0 5f 6d 65 63 68 5f 70 61 72 6d 6c 65 6e 20 3d 20 _mech_parmlen = 157c0 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 75 6c 50 61 pMechanism->ulPa 157d0 72 61 6d 65 74 65 72 4c 65 6e 3b 0a 0a 09 6d 75 rameterLen;...mu 157e0 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 157f0 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 15800 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 15810 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 15820 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 15830 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 15840 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 15850 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 15860 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 15870 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 15880 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 15890 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 158a0 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", 158b0 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 CKR_OK);...retur 158c0 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b n(CKR_OK);.}..CK 158d0 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 158e0 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 (CK_RV, C_Decryp 158f0 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 t)(CK_SESSION_HA 15900 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 15910 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 K_BYTE_PTR pEncr 15920 79 70 74 65 64 44 61 74 61 2c 20 43 4b 5f 55 4c yptedData, CK_UL 15930 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64 44 ONG ulEncryptedD 15940 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f ataLen, CK_BYTE_ 15950 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c PTR pData, CK_UL 15960 4f 4e 47 5f 50 54 52 20 70 75 6c 44 61 74 61 4c ONG_PTR pulDataL 15970 65 6e 29 20 7b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 en) {..CK_ULONG 15980 64 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 2c 20 datalen_update, 15990 64 61 74 61 6c 65 6e 5f 66 69 6e 61 6c 3b 0a 09 datalen_final;.. 159a0 43 4b 5f 52 56 20 64 65 63 72 79 70 74 5f 72 65 CK_RV decrypt_re 159b0 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 t;...CACKEY_DEBU 159c0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 159d0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 159e0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 159f0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 15a00 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 15a10 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 15a20 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 15a30 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 15a40 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 15a50 0a 0a 09 69 66 20 28 70 75 6c 44 61 74 61 4c 65 ...if (pulDataLe 15a60 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 n == NULL) {...C 15a70 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 15a80 54 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 44 61 TF("Error. pulDa 15a90 74 61 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 taLen is NULL.") 15aa0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 15ab0 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 15ac0 09 7d 0a 0a 09 64 61 74 61 6c 65 6e 5f 75 70 64 .}...datalen_upd 15ad0 61 74 65 20 3d 20 2a 70 75 6c 44 61 74 61 4c 65 ate = *pulDataLe 15ae0 6e 3b 0a 0a 09 64 65 63 72 79 70 74 5f 72 65 74 n;...decrypt_ret 15af0 20 3d 20 43 5f 44 65 63 72 79 70 74 55 70 64 61 = C_DecryptUpda 15b00 74 65 28 68 53 65 73 73 69 6f 6e 2c 20 70 45 6e te(hSession, pEn 15b10 63 72 79 70 74 65 64 44 61 74 61 2c 20 75 6c 45 cryptedData, ulE 15b20 6e 63 72 79 70 74 65 64 44 61 74 61 4c 65 6e 2c ncryptedDataLen, 15b30 20 70 44 61 74 61 2c 20 26 64 61 74 61 6c 65 6e pData, &datalen 15b40 5f 75 70 64 61 74 65 29 3b 0a 09 69 66 20 28 64 _update);..if (d 15b50 65 63 72 79 70 74 5f 72 65 74 20 21 3d 20 43 4b ecrypt_ret != CK 15b60 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 R_OK) {...CACKEY 15b70 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 15b80 72 72 6f 72 2e 20 20 44 65 63 72 79 70 74 55 70 rror. DecryptUp 15b90 64 61 74 65 28 29 20 72 65 74 75 72 6e 65 64 20 date() returned 15ba0 66 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 6c failure (rv = %l 15bb0 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 u).", (unsigned 15bc0 6c 6f 6e 67 29 20 64 65 63 72 79 70 74 5f 72 65 long) decrypt_re 15bd0 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 64 65 t);....return(de 15be0 63 72 79 70 74 5f 72 65 74 29 3b 0a 09 7d 0a 0a crypt_ret);..}.. 15bf0 09 69 66 20 28 70 44 61 74 61 29 20 7b 0a 09 09 .if (pData) {... 15c00 70 44 61 74 61 20 2b 3d 20 64 61 74 61 6c 65 6e pData += datalen 15c10 5f 75 70 64 61 74 65 3b 0a 09 7d 0a 09 64 61 74 _update;..}..dat 15c20 61 6c 65 6e 5f 66 69 6e 61 6c 20 3d 20 2a 70 75 alen_final = *pu 15c30 6c 44 61 74 61 4c 65 6e 20 2d 20 64 61 74 61 6c lDataLen - datal 15c40 65 6e 5f 75 70 64 61 74 65 3b 0a 0a 09 64 65 63 en_update;...dec 15c50 72 79 70 74 5f 72 65 74 20 3d 20 43 5f 44 65 63 rypt_ret = C_Dec 15c60 72 79 70 74 46 69 6e 61 6c 28 68 53 65 73 73 69 ryptFinal(hSessi 15c70 6f 6e 2c 20 70 44 61 74 61 2c 20 26 64 61 74 61 on, pData, &data 15c80 6c 65 6e 5f 66 69 6e 61 6c 29 3b 0a 09 69 66 20 len_final);..if 15c90 28 64 65 63 72 79 70 74 5f 72 65 74 20 21 3d 20 (decrypt_ret != 15ca0 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b CKR_OK) {...CACK 15cb0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 15cc0 22 45 72 72 6f 72 2e 20 20 44 65 63 72 79 70 74 "Error. Decrypt 15cd0 46 69 6e 61 6c 28 29 20 72 65 74 75 72 6e 65 64 Final() returned 15ce0 20 66 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 failure (rv = % 15cf0 6c 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 lu).", (unsigned 15d00 20 6c 6f 6e 67 29 20 64 65 63 72 79 70 74 5f 72 long) decrypt_r 15d10 65 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 64 et);....return(d 15d20 65 63 72 79 70 74 5f 72 65 74 29 3b 0a 09 7d 0a ecrypt_ret);..}. 15d30 0a 09 2a 70 75 6c 44 61 74 61 4c 65 6e 20 3d 20 ..*pulDataLen = 15d40 64 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 20 2b datalen_update + 15d50 20 64 61 74 61 6c 65 6e 5f 66 69 6e 61 6c 3b 0a datalen_final;. 15d60 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 15d70 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 15d80 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C 15d90 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return 15da0 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f (CKR_OK);.}..CK_ 15db0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 15dc0 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 74 CK_RV, C_Decrypt 15dd0 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 Update)(CK_SESSI 15de0 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 15df0 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 15e00 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 pEncryptedPart, 15e10 43 4b 5f 55 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 CK_ULONG ulEncry 15e20 70 74 65 64 50 61 72 74 4c 65 6e 2c 20 43 4b 5f ptedPartLen, CK_ 15e30 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 BYTE_PTR pPart, 15e40 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 15e50 50 61 72 74 4c 65 6e 29 20 7b 0a 09 73 74 61 74 PartLen) {..stat 15e60 69 63 20 43 4b 5f 42 59 54 45 20 62 75 66 5b 31 ic CK_BYTE buf[1 15e70 36 33 38 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 20 6384];..ssize_t 15e80 62 75 66 6c 65 6e 3b 0a 09 43 4b 5f 52 56 20 72 buflen;..CK_RV r 15e90 65 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e 45 etval = CKR_GENE 15ea0 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 69 6e 74 20 RAL_ERROR;..int 15eb0 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 mutex_retval;... 15ec0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 15ed0 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 15ee0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 15ef0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 15f00 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 15f10 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 15f20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 15f30 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 15f40 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 15f50 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 15f60 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 (hSession == 0 15f70 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 || hSession >= ( 15f80 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 15f90 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 15fa0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 15fb0 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE 15fc0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15fd0 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 15fe0 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b out of range."); 15ff0 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 16000 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 16010 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 16020 66 20 28 70 45 6e 63 72 79 70 74 65 64 50 61 72 f (pEncryptedPar 16030 74 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c 45 t == NULL && ulE 16040 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 ncryptedPartLen 16050 3d 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f == 0) {.../* Sho 16060 72 74 20 63 69 72 63 75 69 74 20 69 66 20 77 65 rt circuit if we 16070 20 61 72 65 20 61 73 6b 65 64 20 74 6f 20 64 65 are asked to de 16080 63 72 79 70 74 20 6e 6f 74 68 69 6e 67 2e 2e 2e crypt nothing... 16090 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 */...CACKEY_DEB 160a0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 160b0 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 160c0 20 28 73 68 6f 72 74 20 63 69 72 63 75 69 74 29 (short circuit) 160d0 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 ", CKR_OK);....r 160e0 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 eturn(CKR_OK);.. 160f0 7d 0a 0a 09 69 66 20 28 70 45 6e 63 72 79 70 74 }...if (pEncrypt 16100 65 64 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 20 edPart == NULL) 16110 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 16120 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 16130 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 20 69 pEncryptedPart i 16140 73 20 4e 55 4c 4c 2c 20 62 75 74 20 75 6c 45 6e s NULL, but ulEn 16150 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 69 cryptedPartLen i 16160 73 20 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 09 72 s not 0.");....r 16170 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 eturn(CKR_ARGUME 16180 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 NTS_BAD);..}...i 16190 66 20 28 75 6c 45 6e 63 72 79 70 74 65 64 50 61 f (ulEncryptedPa 161a0 72 74 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 rtLen == 0) {... 161b0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 161c0 4e 54 46 28 22 45 72 72 6f 72 2e 20 75 6c 45 6e NTF("Error. ulEn 161d0 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 69 cryptedPartLen i 161e0 73 20 30 2c 20 62 75 74 20 70 50 61 72 74 20 69 s 0, but pPart i 161f0 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a s not NULL.");.. 16200 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG 16210 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a UMENTS_BAD);..}. 16220 0a 09 69 66 20 28 70 75 6c 50 61 72 74 4c 65 6e ..if (pulPartLen 16230 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 == NULL) {...CA 16240 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 16250 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 50 61 72 F("Error. pulPar 16260 74 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 3b tLen is NULL."); 16270 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 ....return(CKR_A 16280 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 RGUMENTS_BAD);.. 16290 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 162a0 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 162b0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 162c0 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 162d0 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 162e0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 162f0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 16300 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 16310 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 16320 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 16330 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 16340 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 16350 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 on].active) {... 16360 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 16370 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 16380 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 16390 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 163a0 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 or. Session not 163b0 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 active.");..... 163c0 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 163d0 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 163e0 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 ID);..}...if (!c 163f0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 16400 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 Session].decrypt 16410 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 _active) {...cac 16420 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 16430 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 16440 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 16450 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 16460 20 20 44 65 63 72 79 70 74 20 6e 6f 74 20 61 63 Decrypt not ac 16470 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 16480 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 turn(CKR_OPERATI 16490 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a ON_NOT_INITIALIZ 164a0 45 44 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 68 ED);..}...switch 164b0 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (cackey_session 164c0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 s[hSession].decr 164d0 79 70 74 5f 6d 65 63 68 61 6e 69 73 6d 29 20 7b ypt_mechanism) { 164e0 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 53 41 5f ...case CKM_RSA_ 164f0 50 4b 43 53 3a 0a 09 09 09 62 75 66 6c 65 6e 20 PKCS:....buflen 16500 3d 20 2d 31 3b 0a 0a 09 09 09 2f 2a 20 58 58 58 = -1;...../* XXX 16510 3a 20 41 73 6b 20 63 61 72 64 20 74 6f 20 64 65 : Ask card to de 16520 63 72 79 70 74 20 2a 2f 0a 0a 09 09 09 69 66 20 crypt */.....if 16530 28 62 75 66 6c 65 6e 20 3c 20 30 29 20 7b 0a 09 (buflen < 0) {.. 16540 09 09 09 2f 2a 20 44 65 63 72 79 70 74 69 6f 6e .../* Decryption 16550 20 66 61 69 6c 65 64 2e 20 2a 2f 0a 09 09 09 09 failed. */..... 16560 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e retval = CKR_GEN 16570 45 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 09 09 7d ERAL_ERROR;....} 16580 20 65 6c 73 65 20 69 66 20 28 28 28 75 6e 73 69 else if (((unsi 16590 67 6e 65 64 20 6c 6f 6e 67 29 20 62 75 66 6c 65 gned long) bufle 165a0 6e 29 20 3e 20 2a 70 75 6c 50 61 72 74 4c 65 6e n) > *pulPartLen 165b0 20 26 26 20 70 50 61 72 74 29 20 7b 0a 09 09 09 && pPart) {.... 165c0 09 2f 2a 20 44 65 63 72 79 70 74 65 64 20 64 61 ./* Decrypted da 165d0 74 61 20 74 6f 6f 20 6c 61 72 67 65 20 2a 2f 0a ta too large */. 165e0 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 ....retval = CKR 165f0 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c _BUFFER_TOO_SMAL 16600 4c 3b 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 L;....} else {.. 16610 09 09 09 69 66 20 28 70 50 61 72 74 29 20 7b 0a ...if (pPart) {. 16620 09 09 09 09 09 6d 65 6d 63 70 79 28 70 50 61 72 .....memcpy(pPar 16630 74 2c 20 62 75 66 2c 20 62 75 66 6c 65 6e 29 3b t, buf, buflen); 16640 0a 09 09 09 09 7d 0a 0a 09 09 09 09 2a 70 75 6c .....}......*pul 16650 50 61 72 74 4c 65 6e 20 3d 20 62 75 66 6c 65 6e PartLen = buflen 16660 3b 0a 0a 09 09 09 09 72 65 74 76 61 6c 20 3d 20 ;......retval = 16670 43 4b 52 5f 4f 4b 3b 0a 09 09 09 7d 0a 0a 09 09 CKR_OK;....}.... 16680 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 6d 75 74 .break;..}...mut 16690 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 166a0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 166b0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 166c0 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 166d0 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 166e0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 166f0 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b ("Error. Unlock 16700 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 16710 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 16720 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 16730 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 16740 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 16750 20 25 69 22 2c 20 28 69 6e 74 29 20 72 65 74 76 %i", (int) retv 16760 61 6c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 al);...return(re 16770 74 76 61 6c 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 tval);.}..CK_DEF 16780 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 16790 52 56 2c 20 43 5f 44 65 63 72 79 70 74 46 69 6e RV, C_DecryptFin 167a0 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 al)(CK_SESSION_H 167b0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 167c0 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 4c 61 73 CK_BYTE_PTR pLas 167d0 74 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f tPart, CK_ULONG_ 167e0 50 54 52 20 70 75 6c 4c 61 73 74 50 61 72 74 4c PTR pulLastPartL 167f0 65 6e 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 en) {..int mutex 16800 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 74 65 _retval;..int te 16810 72 6d 69 6e 61 74 65 5f 64 65 63 72 79 70 74 20 rminate_decrypt 16820 3d 20 31 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 = 1;...CACKEY_DE 16830 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 16840 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 16850 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 16860 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 16870 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 16880 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 16890 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 168a0 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 168b0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 168c0 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f .}...if (hSessio 168d0 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 n == 0 || hSessi 168e0 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 on >= (sizeof(ca 168f0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f ckey_sessions) / 16900 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s 16910 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a essions[0]))) {. 16920 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 16930 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 16940 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 ession out of ra 16950 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 nge.");......ret 16960 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 16970 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 16980 0a 09 7d 0a 0a 09 69 66 20 28 70 75 6c 4c 61 73 ..}...if (pulLas 16990 74 50 61 72 74 4c 65 6e 20 3d 3d 20 4e 55 4c 4c tPartLen == NULL 169a0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 169b0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 169c0 2e 20 70 75 6c 4c 61 73 74 50 61 72 74 4c 65 6e . pulLastPartLen 169d0 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 is NULL.");.... 169e0 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM 169f0 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 ENTS_BAD);..}... 16a00 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 16a10 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b ackey_mutex_lock 16a20 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 16a30 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 16a40 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 16a50 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 16a60 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 F("Error. Locki 16a70 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 16a80 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 16a90 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 16aa0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 .if (!cackey_ses 16ab0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 16ac0 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b active) {...cack 16ad0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 16ae0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 16af0 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 16b00 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 16b10 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 Session not act 16b20 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ive.");......ret 16b30 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 16b40 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 16b50 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ..}...if (!cacke 16b60 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 16b70 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 ion].decrypt_act 16b80 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ive) {...cackey_ 16b90 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 16ba0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 16bb0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 16bc0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 44 65 INTF("Error. De 16bd0 63 72 79 70 74 20 6e 6f 74 20 61 63 74 69 76 65 crypt not active 16be0 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 16bf0 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e (CKR_OPERATION_N 16c00 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 16c10 0a 09 7d 0a 0a 09 2a 70 75 6c 4c 61 73 74 50 61 ..}...*pulLastPa 16c20 72 74 4c 65 6e 20 3d 20 30 3b 0a 0a 09 69 66 20 rtLen = 0;...if 16c30 28 70 4c 61 73 74 50 61 72 74 20 3d 3d 20 4e 55 (pLastPart == NU 16c40 4c 4c 29 20 7b 0a 09 09 74 65 72 6d 69 6e 61 74 LL) {...terminat 16c50 65 5f 64 65 63 72 79 70 74 20 3d 20 30 3b 0a 09 e_decrypt = 0;.. 16c60 7d 0a 0a 09 69 66 20 28 74 65 72 6d 69 6e 61 74 }...if (terminat 16c70 65 5f 64 65 63 72 79 70 74 29 20 7b 0a 09 09 63 e_decrypt) {...c 16c80 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 16c90 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 Session].decrypt 16ca0 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 7d 0a _active = 0;..}. 16cb0 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 16cc0 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e cackey_mutex_un 16cd0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 16ce0 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 16cf0 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 16d00 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 16d10 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 RINTF("Error. U 16d20 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e nlocking failed. 16d30 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 16d40 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 16d50 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 16d60 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 16d70 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 16d80 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 )", CKR_OK);...r 16d90 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 16da0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 16db0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 69 TION(CK_RV, C_Di 16dc0 67 65 73 74 49 6e 69 74 29 28 43 4b 5f 53 45 53 gestInit)(CK_SES 16dd0 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 16de0 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 sion, CK_MECHANI 16df0 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 SM_PTR pMechanis 16e00 6d 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 m) {..CACKEY_DEB 16e10 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 16e20 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 16e30 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 16e40 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 16e50 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 16e60 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 16e70 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 16e80 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 16e90 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 16ea0 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 16eb0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 16ec0 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 16ed0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 16ee0 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 16ef0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 16f00 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 16f10 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 16f20 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 16f30 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 16f40 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 29 28 43 _RV, C_Digest)(C 16f50 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 16f60 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 16f70 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b TE_PTR pData, CK 16f80 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e _ULONG ulDataLen 16f90 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 , CK_BYTE_PTR pD 16fa0 69 67 65 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f igest, CK_ULONG_ 16fb0 50 54 52 20 70 75 6c 44 69 67 65 73 74 4c 65 6e PTR pulDigestLen 16fc0 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 16fd0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 16fe0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 16ff0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 17000 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 17010 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 17020 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 17030 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 17040 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 17050 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 17060 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 17070 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 17080 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 17090 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 170a0 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 170b0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 170c0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 170d0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 170e0 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 170f0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 17100 52 56 2c 20 43 5f 44 69 67 65 73 74 55 70 64 61 RV, C_DigestUpda 17110 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 te)(CK_SESSION_H 17120 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 17130 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 CK_BYTE_PTR pPar 17140 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 t, CK_ULONG ulPa 17150 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 rtLen) {..CACKEY 17160 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 17170 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 17180 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 17190 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 171a0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 171b0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 171c0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 171d0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 171e0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 171f0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 17200 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 17210 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 17220 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 17230 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 17240 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 17250 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 17260 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 17270 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 17280 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 17290 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 N(CK_RV, C_Diges 172a0 74 4b 65 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e tKey)(CK_SESSION 172b0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 172c0 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 172d0 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b LE hKey) {..CACK 172e0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 172f0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 17300 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 17310 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...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 4e 6f 74 20 69 6e 69 74 Error. Not init 17340 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 17350 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 17360 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 17370 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 17380 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 17390 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 173a0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 173b0 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 173c0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 173d0 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 173e0 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 173f0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 17400 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 17410 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 69 67 ION(CK_RV, C_Dig 17420 65 73 74 46 69 6e 61 6c 29 28 43 4b 5f 53 45 53 estFinal)(CK_SES 17430 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 17440 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 sion, CK_BYTE_PT 17450 52 20 70 44 69 67 65 73 74 2c 20 43 4b 5f 55 4c R pDigest, CK_UL 17460 4f 4e 47 5f 50 54 52 20 70 75 6c 44 69 67 65 73 ONG_PTR pulDiges 17470 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f tLen) {..CACKEY_ 17480 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 17490 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 174a0 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 174b0 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 174c0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 174d0 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 174e0 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 174f0 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 17500 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 17510 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 17520 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 17530 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 rning CKR_FUNCTI 17540 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 17550 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 (%i)", CKR_FUNC 17560 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 17570 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK 17580 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 17590 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b UPPORTED);.}..CK 175a0 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 175b0 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 49 6e (CK_RV, C_SignIn 175c0 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 it)(CK_SESSION_H 175d0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 175e0 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 CK_MECHANISM_PTR 175f0 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f pMechanism, CK_ 17600 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b OBJECT_HANDLE hK 17610 65 79 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 ey) {..int mutex 17620 5f 72 65 74 76 61 6c 3b 0a 0a 09 68 4b 65 79 2d _retval;...hKey- 17630 2d 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 -;...CACKEY_DEBU 17640 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 17650 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 17660 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 17670 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 17680 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 17690 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 176a0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 176b0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 176c0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 176d0 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 6e 69 73 ...if (pMechanis 176e0 6d 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 m == NULL) {...C 176f0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 17700 54 46 28 22 45 72 72 6f 72 2e 20 70 4d 65 63 68 TF("Error. pMech 17710 61 6e 69 73 6d 20 69 73 20 4e 55 4c 4c 2e 22 29 anism is NULL.") 17720 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 17730 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 17740 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 6e .}...if (pMechan 17750 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 20 21 ism->mechanism ! 17760 3d 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 20 26 = CKM_RSA_PKCS & 17770 26 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 & pMechanism->me 17780 63 68 61 6e 69 73 6d 20 21 3d 20 43 4b 4d 5f 53 chanism != CKM_S 17790 48 41 31 5f 52 53 41 5f 50 4b 43 53 29 20 7b 0a HA1_RSA_PKCS) {. 177a0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 177b0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 4d RINTF("Error. pM 177c0 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e echanism->mechan 177d0 69 73 6d 20 6e 6f 74 20 73 70 65 63 69 66 69 65 ism not specifie 177e0 64 20 61 73 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 d as CKM_RSA_PKC 177f0 53 20 6f 72 20 43 4b 4d 5f 53 48 41 31 5f 52 53 S or CKM_SHA1_RS 17800 41 5f 50 4b 43 53 22 29 3b 0a 0a 09 09 72 65 74 A_PKCS");....ret 17810 75 72 6e 28 43 4b 52 5f 4d 45 43 48 41 4e 49 53 urn(CKR_MECHANIS 17820 4d 5f 50 41 52 41 4d 5f 49 4e 56 41 4c 49 44 29 M_PARAM_INVALID) 17830 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 ;..}...if (hSess 17840 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 ion == 0 || hSes 17850 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 sion >= (sizeof( 17860 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 17870 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 17880 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 _sessions[0]))) 17890 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 178a0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 178b0 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 Session out of 178c0 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 range.");......r 178d0 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 178e0 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 178f0 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 );..}...mutex_re 17900 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 17910 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 17920 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 17930 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 17940 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 17950 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 17960 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 17970 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 17980 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 17990 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 R);..}...if (!ca 179a0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 179b0 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 ession].active) 179c0 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 179d0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 179e0 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 179f0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 17a00 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 17a10 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 17a20 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 17a30 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 17a40 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 NVALID);..}...if 17a50 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (cackey_session 17a60 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 17a70 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 _active) {...cac 17a80 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 17a90 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 17aa0 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 17ab0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 17ac0 20 20 53 69 67 6e 20 61 6c 72 65 61 64 79 20 69 Sign already i 17ad0 6e 20 70 72 6f 67 72 65 73 73 2e 22 29 3b 0a 09 n progress.");.. 17ae0 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ....return(CKR_O 17af0 50 45 52 41 54 49 4f 4e 5f 41 43 54 49 56 45 29 PERATION_ACTIVE) 17b00 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 4b 65 79 20 ;..}...if (hKey 17b10 3e 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f >= cackey_sessio 17b20 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 ns[hSession].ide 17b30 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 20 7b ntities_count) { 17b40 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 17b50 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 17b60 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 17b70 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 17b80 45 72 72 6f 72 2e 20 20 4b 65 79 20 68 61 6e 64 Error. Key hand 17b90 6c 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e le out of range. 17ba0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 17bb0 52 5f 4b 45 59 5f 48 41 4e 44 4c 45 5f 49 4e 56 R_KEY_HANDLE_INV 17bc0 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b ALID);..}...cack 17bd0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 17be0 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 sion].sign_activ 17bf0 65 20 3d 20 31 3b 0a 0a 09 63 61 63 6b 65 79 5f e = 1;...cackey_ 17c00 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 17c10 6e 5d 2e 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 n].sign_mechanis 17c20 6d 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e m = pMechanism-> 17c30 6d 65 63 68 61 6e 69 73 6d 3b 0a 0a 09 63 61 63 mechanism;...cac 17c40 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 17c50 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c ssion].sign_bufl 17c60 65 6e 20 3d 20 31 32 38 3b 0a 09 63 61 63 6b 65 en = 128;..cacke 17c70 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 17c80 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73 65 ion].sign_bufuse 17c90 64 20 3d 20 30 3b 0a 09 63 61 63 6b 65 79 5f 73 d = 0;..cackey_s 17ca0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 17cb0 5d 2e 73 69 67 6e 5f 62 75 66 20 3d 20 6d 61 6c ].sign_buf = mal 17cc0 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 61 63 6b loc(sizeof(*cack 17cd0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 17ce0 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20 sion].sign_buf) 17cf0 2a 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e * cackey_session 17d00 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 17d10 5f 62 75 66 6c 65 6e 29 3b 0a 0a 09 6d 75 74 65 _buflen);...mute 17d20 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 17d30 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 17d40 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 17d50 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 17d60 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 17d70 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 17d80 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 "Error. Unlocki 17d90 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 17da0 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 17db0 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 17dc0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 17dd0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 17de0 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK 17df0 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 R_OK);...return( 17e00 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 CKR_OK);.}..CK_D 17e10 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 17e20 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 29 28 43 4b K_RV, C_Sign)(CK 17e30 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 17e40 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 hSession, CK_BYT 17e50 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f E_PTR pData, CK_ 17e60 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c ULONG ulDataLen, 17e70 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 CK_BYTE_PTR pSi 17e80 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e gnature, CK_ULON 17e90 47 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 74 75 G_PTR pulSignatu 17ea0 72 65 4c 65 6e 29 20 7b 0a 09 43 4b 5f 52 56 20 reLen) {..CK_RV 17eb0 73 69 67 6e 5f 72 65 74 3b 0a 0a 09 43 41 43 4b sign_ret;...CACK 17ec0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 17ed0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 17ee0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 17ef0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 17f00 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 17f10 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 17f20 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 17f30 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 17f40 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 17f50 45 44 29 3b 0a 09 7d 0a 0a 09 73 69 67 6e 5f 72 ED);..}...sign_r 17f60 65 74 20 3d 20 43 5f 53 69 67 6e 55 70 64 61 74 et = C_SignUpdat 17f70 65 28 68 53 65 73 73 69 6f 6e 2c 20 70 44 61 74 e(hSession, pDat 17f80 61 2c 20 75 6c 44 61 74 61 4c 65 6e 29 3b 0a 09 a, ulDataLen);.. 17f90 69 66 20 28 73 69 67 6e 5f 72 65 74 20 21 3d 20 if (sign_ret != 17fa0 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b CKR_OK) {...CACK 17fb0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 17fc0 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 55 70 64 "Error. SignUpd 17fd0 61 74 65 28 29 20 72 65 74 75 72 6e 65 64 20 66 ate() returned f 17fe0 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 6c 75 ailure (rv = %lu 17ff0 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ).", (unsigned l 18000 6f 6e 67 29 20 73 69 67 6e 5f 72 65 74 29 3b 0a ong) sign_ret);. 18010 0a 09 09 72 65 74 75 72 6e 28 73 69 67 6e 5f 72 ...return(sign_r 18020 65 74 29 3b 0a 09 7d 0a 0a 09 73 69 67 6e 5f 72 et);..}...sign_r 18030 65 74 20 3d 20 43 5f 53 69 67 6e 46 69 6e 61 6c et = C_SignFinal 18040 28 68 53 65 73 73 69 6f 6e 2c 20 70 53 69 67 6e (hSession, pSign 18050 61 74 75 72 65 2c 20 70 75 6c 53 69 67 6e 61 74 ature, pulSignat 18060 75 72 65 4c 65 6e 29 3b 0a 09 69 66 20 28 73 69 ureLen);..if (si 18070 67 6e 5f 72 65 74 20 21 3d 20 43 4b 52 5f 4f 4b gn_ret != CKR_OK 18080 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 18090 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 180a0 2e 20 20 53 69 67 6e 46 69 6e 61 6c 28 29 20 72 . SignFinal() r 180b0 65 74 75 72 6e 65 64 20 66 61 69 6c 75 72 65 20 eturned failure 180c0 28 72 76 20 3d 20 25 6c 75 29 2e 22 2c 20 28 75 (rv = %lu).", (u 180d0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 69 nsigned long) si 180e0 67 6e 5f 72 65 74 29 3b 0a 0a 09 09 72 65 74 75 gn_ret);....retu 180f0 72 6e 28 73 69 67 6e 5f 72 65 74 29 3b 0a 09 7d rn(sign_ret);..} 18100 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 18110 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 18120 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", 18130 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 CKR_OK);...retur 18140 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b n(CKR_OK);.}..CK 18150 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 18160 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 55 70 (CK_RV, C_SignUp 18170 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e date)(CK_SESSION 18180 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 18190 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 , CK_BYTE_PTR pP 181a0 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c art, CK_ULONG ul 181b0 50 61 72 74 4c 65 6e 29 20 7b 0a 09 69 6e 74 20 PartLen) {..int 181c0 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 mutex_retval;... 181d0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 181e0 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 181f0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 18200 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 18210 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 18220 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 18230 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 18240 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 18250 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 18260 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 18270 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 (hSession == 0 18280 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 || hSession >= ( 18290 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 182a0 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 182b0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 182c0 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE 182d0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 182e0 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 182f0 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b out of range."); 18300 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 18310 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 18320 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 18330 66 20 28 70 50 61 72 74 20 3d 3d 20 4e 55 4c 4c f (pPart == NULL 18340 20 26 26 20 75 6c 50 61 72 74 4c 65 6e 20 3d 3d && ulPartLen == 18350 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 74 0) {.../* Short 18360 20 63 69 72 63 75 69 74 20 69 66 20 77 65 20 61 circuit if we a 18370 72 65 20 61 73 6b 65 64 20 74 6f 20 73 69 67 6e re asked to sign 18380 20 6e 6f 74 68 69 6e 67 2e 2e 2e 20 2a 2f 0a 09 nothing... */.. 18390 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 183a0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 183b0 43 4b 52 5f 4f 4b 20 28 25 69 29 20 28 73 68 6f CKR_OK (%i) (sho 183c0 72 74 20 63 69 72 63 75 69 74 29 22 2c 20 43 4b rt circuit)", CK 183d0 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e R_OK);....return 183e0 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 (CKR_OK);..}...i 183f0 66 20 28 70 50 61 72 74 20 3d 3d 20 4e 55 4c 4c f (pPart == NULL 18400 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 18410 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 18420 2e 20 70 50 61 72 74 20 69 73 20 4e 55 4c 4c 2c . pPart is NULL, 18430 20 62 75 74 20 75 6c 50 61 72 74 4c 65 6e 20 69 but ulPartLen i 18440 73 20 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 09 72 s not 0.");....r 18450 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 eturn(CKR_ARGUME 18460 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 NTS_BAD);..}...i 18470 66 20 28 75 6c 50 61 72 74 4c 65 6e 20 3d 3d 20 f (ulPartLen == 18480 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 18490 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 184a0 72 2e 20 75 6c 50 61 72 74 4c 65 6e 20 69 73 20 r. ulPartLen is 184b0 30 2c 20 62 75 74 20 70 50 61 72 74 20 69 73 20 0, but pPart is 184c0 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 not NULL.");.... 184d0 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM 184e0 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 ENTS_BAD);..}... 184f0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 18500 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b ackey_mutex_lock 18510 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 18520 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 18530 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 18540 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 18550 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 F("Error. Locki 18560 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 18570 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 18580 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 18590 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 .if (!cackey_ses 185a0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 185b0 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b active) {...cack 185c0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 185d0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 185e0 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 185f0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 18600 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 Session not act 18610 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ive.");......ret 18620 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 18630 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 18640 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ..}...if (!cacke 18650 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 18660 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 ion].sign_active 18670 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 18680 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 18690 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 186a0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 186b0 46 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 20 F("Error. Sign 186c0 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 not active.");.. 186d0 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ....return(CKR_O 186e0 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 PERATION_NOT_INI 186f0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 18700 73 77 69 74 63 68 20 28 63 61 63 6b 65 79 5f 73 switch (cackey_s 18710 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 18720 5d 2e 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 6d ].sign_mechanism 18730 29 20 7b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 ) {...case CKM_R 18740 53 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 SA_PKCS:..../* A 18750 63 63 75 6d 75 6c 61 74 65 20 64 69 72 65 63 74 ccumulate direct 18760 6c 79 20 2a 2f 0a 09 09 09 69 66 20 28 28 63 61 ly */....if ((ca 18770 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 18780 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 ession].sign_buf 18790 75 73 65 64 20 2b 20 75 6c 50 61 72 74 4c 65 6e used + ulPartLen 187a0 29 20 3e 20 63 61 63 6b 65 79 5f 73 65 73 73 69 ) > cackey_sessi 187b0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 187c0 67 6e 5f 62 75 66 6c 65 6e 29 20 7b 0a 09 09 09 gn_buflen) {.... 187d0 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 187e0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 187f0 62 75 66 6c 65 6e 20 2a 3d 20 32 3b 0a 0a 09 09 buflen *= 2;.... 18800 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 18810 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 18820 5f 62 75 66 20 3d 20 72 65 61 6c 6c 6f 63 28 63 _buf = realloc(c 18830 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 18840 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 Session].sign_bu 18850 66 2c 20 73 69 7a 65 6f 66 28 2a 63 61 63 6b 65 f, sizeof(*cacke 18860 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 18870 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20 2a ion].sign_buf) * 18880 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 18890 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 188a0 62 75 66 6c 65 6e 29 3b 0a 09 09 09 7d 0a 0a 09 buflen);....}... 188b0 09 09 6d 65 6d 63 70 79 28 63 61 63 6b 65 79 5f ..memcpy(cackey_ 188c0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 188d0 6e 5d 2e 73 69 67 6e 5f 62 75 66 20 2b 20 63 61 n].sign_buf + ca 188e0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 188f0 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 ession].sign_buf 18900 75 73 65 64 2c 20 70 50 61 72 74 2c 20 75 6c 50 used, pPart, ulP 18910 61 72 74 4c 65 6e 29 3b 0a 0a 09 09 09 63 61 63 artLen);.....cac 18920 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 18930 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 ssion].sign_bufu 18940 73 65 64 20 2b 3d 20 75 6c 50 61 72 74 4c 65 6e sed += ulPartLen 18950 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 ;.....break;...c 18960 61 73 65 20 43 4b 4d 5f 53 48 41 31 5f 52 53 41 ase CKM_SHA1_RSA 18970 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 63 63 _PKCS:..../* Acc 18980 75 6d 75 6c 61 74 65 20 69 6e 74 6f 20 61 20 53 umulate into a S 18990 48 41 31 20 68 61 73 68 20 2a 2f 0a 09 09 09 63 HA1 hash */....c 189a0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 189b0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 189c0 6b 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 k);.....CACKEY_D 189d0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 189e0 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 189f0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 18a00 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 18a10 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 18a20 54 45 44 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e TED);.....return 18a30 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 18a40 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 09 09 T_SUPPORTED);... 18a50 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 6d 75 74 .break;..}...mut 18a60 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 18a70 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 18a80 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 18a90 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 18aa0 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 18ab0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 18ac0 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b ("Error. Unlock 18ad0 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 18ae0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 18af0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 18b00 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 18b10 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 18b20 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C 18b30 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return 18b40 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f (CKR_OK);.}..CK_ 18b50 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 18b60 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 46 69 6e CK_RV, C_SignFin 18b70 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 al)(CK_SESSION_H 18b80 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 18b90 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 67 CK_BYTE_PTR pSig 18ba0 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 nature, CK_ULONG 18bb0 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 74 75 72 _PTR pulSignatur 18bc0 65 4c 65 6e 29 20 7b 0a 09 73 74 61 74 69 63 20 eLen) {..static 18bd0 43 4b 5f 42 59 54 45 20 73 69 67 62 75 66 5b 31 CK_BYTE sigbuf[1 18be0 30 32 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 20 73 024];..ssize_t s 18bf0 69 67 62 75 66 6c 65 6e 3b 0a 09 43 4b 5f 52 56 igbuflen;..CK_RV 18c00 20 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45 retval = CKR_GE 18c10 4e 45 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 69 6e NERAL_ERROR;..in 18c20 74 20 74 65 72 6d 69 6e 61 74 65 5f 73 69 67 6e t terminate_sign 18c30 20 3d 20 31 3b 0a 09 69 6e 74 20 6d 75 74 65 78 = 1;..int mutex 18c40 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 _retval;...CACKE 18c50 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 18c60 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 18c70 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 18c80 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 18c90 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 18ca0 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 18cb0 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 18cc0 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 18cd0 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 18ce0 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 75 6c D);..}...if (pul 18cf0 53 69 67 6e 61 74 75 72 65 4c 65 6e 20 3d 3d 20 SignatureLen == 18d00 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY 18d10 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 18d20 72 72 6f 72 2e 20 70 75 6c 53 69 67 6e 61 74 75 rror. pulSignatu 18d30 72 65 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 reLen is NULL.") 18d40 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 18d50 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 18d60 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f .}...if (hSessio 18d70 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 n == 0 || hSessi 18d80 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 on >= (sizeof(ca 18d90 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f ckey_sessions) / 18da0 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s 18db0 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a essions[0]))) {. 18dc0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 18dd0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 18de0 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 ession out of ra 18df0 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 nge.");......ret 18e00 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 18e10 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 18e20 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 18e30 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 18e40 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 x_lock(cackey_bi 18e50 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 glock);..if (mut 18e60 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 18e70 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 18e80 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 18e90 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e Locking failed. 18ea0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 18eb0 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 18ec0 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack 18ed0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 18ee0 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a sion].active) {. 18ef0 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 18f00 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 18f10 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 lock);....CACKEY 18f20 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 18f30 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e rror. Session n 18f40 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 ot active.");... 18f50 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 ...return(CKR_SE 18f60 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 SSION_HANDLE_INV 18f70 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 ALID);..}...if ( 18f80 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 !cackey_sessions 18f90 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 18fa0 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b active) {...cack 18fb0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 18fc0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 18fd0 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 18fe0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 18ff0 20 53 69 67 6e 20 6e 6f 74 20 61 63 74 69 76 65 Sign not active 19000 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 19010 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e (CKR_OPERATION_N 19020 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 19030 0a 09 7d 0a 0a 09 73 77 69 74 63 68 20 28 63 61 ..}...switch (ca 19040 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 19050 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 6d 65 63 ession].sign_mec 19060 68 61 6e 69 73 6d 29 20 7b 0a 09 09 63 61 73 65 hanism) {...case 19070 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 3a 0a 09 CKM_RSA_PKCS:.. 19080 09 09 73 69 67 62 75 66 6c 65 6e 20 3d 20 2d 31 ..sigbuflen = -1 19090 3b 0a 0a 09 09 09 2f 2a 20 58 58 58 3a 20 41 73 ;...../* XXX: As 190a0 6b 20 63 61 72 64 20 74 6f 20 73 69 67 6e 20 2a k card to sign * 190b0 2f 0a 0a 09 09 09 69 66 20 28 73 69 67 62 75 66 /.....if (sigbuf 190c0 6c 65 6e 20 3c 20 30 29 20 7b 0a 09 09 09 09 2f len < 0) {...../ 190d0 2a 20 53 69 67 6e 69 6e 67 20 66 61 69 6c 65 64 * Signing failed 190e0 2e 20 2a 2f 0a 09 09 09 09 72 65 74 76 61 6c 20 . */.....retval 190f0 3d 20 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 = CKR_GENERAL_ER 19100 52 4f 52 3b 0a 09 09 09 7d 20 65 6c 73 65 20 69 ROR;....} else i 19110 66 20 28 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f f (((unsigned lo 19120 6e 67 29 20 73 69 67 62 75 66 6c 65 6e 29 20 3e ng) sigbuflen) > 19130 20 2a 70 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 *pulSignatureLe 19140 6e 20 26 26 20 70 53 69 67 6e 61 74 75 72 65 29 n && pSignature) 19150 20 7b 0a 09 09 09 09 2f 2a 20 53 69 67 6e 65 64 {...../* Signed 19160 20 64 61 74 61 20 74 6f 6f 20 6c 61 72 67 65 20 data too large 19170 2a 2f 0a 09 09 09 09 72 65 74 76 61 6c 20 3d 20 */.....retval = 19180 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 CKR_BUFFER_TOO_S 19190 4d 41 4c 4c 3b 0a 0a 09 09 09 09 74 65 72 6d 69 MALL;......termi 191a0 6e 61 74 65 5f 73 69 67 6e 20 3d 20 30 3b 0a 09 nate_sign = 0;.. 191b0 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 74 ..} else {.....t 191c0 65 72 6d 69 6e 61 74 65 5f 73 69 67 6e 20 3d 20 erminate_sign = 191d0 30 3b 0a 0a 09 09 09 09 69 66 20 28 70 53 69 67 0;......if (pSig 191e0 6e 61 74 75 72 65 29 20 7b 0a 09 09 09 09 09 6d nature) {......m 191f0 65 6d 63 70 79 28 70 53 69 67 6e 61 74 75 72 65 emcpy(pSignature 19200 2c 20 73 69 67 62 75 66 2c 20 73 69 67 62 75 66 , sigbuf, sigbuf 19210 6c 65 6e 29 3b 0a 0a 09 09 09 09 09 74 65 72 6d len);.......term 19220 69 6e 61 74 65 5f 73 69 67 6e 20 3d 20 31 3b 0a inate_sign = 1;. 19230 09 09 09 09 7d 0a 0a 09 09 09 09 2a 70 75 6c 53 ....}......*pulS 19240 69 67 6e 61 74 75 72 65 4c 65 6e 20 3d 20 73 69 ignatureLen = si 19250 67 62 75 66 6c 65 6e 3b 0a 0a 09 09 09 09 72 65 gbuflen;......re 19260 74 76 61 6c 20 3d 20 43 4b 52 5f 4f 4b 3b 0a 09 tval = CKR_OK;.. 19270 09 09 7d 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 ..}.....break;.. 19280 09 63 61 73 65 20 43 4b 4d 5f 53 48 41 31 5f 52 .case CKM_SHA1_R 19290 53 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 SA_PKCS:..../* A 192a0 63 63 75 6d 75 6c 61 74 65 20 69 6e 74 6f 20 61 ccumulate into a 192b0 20 53 48 41 31 20 68 61 73 68 20 2a 2f 0a 09 09 SHA1 hash */... 192c0 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e .cackey_mutex_un 192d0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 192e0 6f 63 6b 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 ock);.....CACKEY 192f0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 19300 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 19310 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 19320 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 19330 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 19340 4f 52 54 45 44 29 3b 0a 0a 09 09 09 72 65 74 75 ORTED);.....retu 19350 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 19360 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 19370 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 69 ...break;..}...i 19380 66 20 28 74 65 72 6d 69 6e 61 74 65 5f 73 69 67 f (terminate_sig 19390 6e 29 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 n) {...if (cacke 193a0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 193b0 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20 7b ion].sign_buf) { 193c0 0a 09 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f ....free(cackey_ 193d0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 193e0 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 3b 0a 09 09 n].sign_buf);... 193f0 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 73 }....cackey_sess 19400 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 19410 69 67 6e 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a ign_active = 0;. 19420 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 .}...mutex_retva 19430 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 19440 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 19450 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 19460 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 19470 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 19480 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 19490 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c Unlocking fail 194a0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 194b0 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 194c0 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 OR);..}...CACKEY 194d0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 194e0 65 74 75 72 6e 69 6e 67 20 25 69 22 2c 20 28 69 eturning %i", (i 194f0 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a 0a 09 72 nt) retval);...r 19500 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d eturn(retval);.} 19510 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 19520 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 TION(CK_RV, C_Si 19530 67 6e 52 65 63 6f 76 65 72 49 6e 69 74 29 28 43 gnRecoverInit)(C 19540 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 19550 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 hSession, CK_ME 19560 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 CHANISM_PTR pMec 19570 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 hanism, CK_OBJEC 19580 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b T_HANDLE hKey) { 19590 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 195a0 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 195b0 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 195c0 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 195d0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 195e0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 195f0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 19600 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 19610 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 19620 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 19630 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 19640 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 19650 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 19660 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 19670 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 19680 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 19690 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 196a0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 196b0 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 196c0 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 196d0 20 43 5f 53 69 67 6e 52 65 63 6f 76 65 72 29 28 C_SignRecover)( 196e0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 196f0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 19700 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 YTE_PTR pData, C 19710 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 K_ULONG ulDataLe 19720 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 19730 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c Signature, CK_UL 19740 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 ONG_PTR pulSigna 19750 74 75 72 65 4c 65 6e 29 20 7b 0a 09 43 41 43 4b tureLen) {..CACK 19760 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 19770 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 19780 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 19790 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 197a0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 197b0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 197c0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 197d0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 197e0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 197f0 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 19800 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 19810 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 19820 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 19830 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 19840 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 19850 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 19860 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 19870 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 19880 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 19890 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 ION(CK_RV, C_Ver 198a0 69 66 79 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 ifyInit)(CK_SESS 198b0 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 198c0 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 ion, CK_MECHANIS 198d0 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d M_PTR pMechanism 198e0 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 198f0 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b LE hKey) {..CACK 19900 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 19910 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 19920 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 19930 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 19940 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 19950 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 19960 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 19970 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 19980 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 19990 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 199a0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 199b0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 199c0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 199d0 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 199e0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 199f0 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 19a00 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 19a10 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 19a20 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 19a30 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 ION(CK_RV, C_Ver 19a40 69 66 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f ify)(CK_SESSION_ 19a50 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 19a60 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 61 CK_BYTE_PTR pDa 19a70 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 ta, CK_ULONG ulD 19a80 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f ataLen, CK_BYTE_ 19a90 50 54 52 20 70 53 69 67 6e 61 74 75 72 65 2c 20 PTR pSignature, 19aa0 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 69 67 6e 61 CK_ULONG ulSigna 19ab0 74 75 72 65 4c 65 6e 29 20 7b 0a 09 43 41 43 4b tureLen) {..CACK 19ac0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 19ad0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 19ae0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 19af0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 19b00 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 19b10 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 19b20 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 19b30 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 19b40 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 19b50 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 19b60 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 19b70 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 19b80 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 19b90 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 19ba0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 19bb0 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 19bc0 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 19bd0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 19be0 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 19bf0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 ION(CK_RV, C_Ver 19c00 69 66 79 55 70 64 61 74 65 29 28 43 4b 5f 53 45 ifyUpdate)(CK_SE 19c10 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 19c20 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 ssion, CK_BYTE_P 19c30 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f TR pPart, CK_ULO 19c40 4e 47 20 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a NG ulPartLen) {. 19c50 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 19c60 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 19c70 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 19c80 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 19c90 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 19ca0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 19cb0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 19cc0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 19cd0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 19ce0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 19cf0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 19d00 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 19d10 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 19d20 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 19d30 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 19d40 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 19d50 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 19d60 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 19d70 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 19d80 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 19d90 43 5f 56 65 72 69 66 79 46 69 6e 61 6c 29 28 43 C_VerifyFinal)(C 19da0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 19db0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 19dc0 54 45 5f 50 54 52 20 70 53 69 67 6e 61 74 75 72 TE_PTR pSignatur 19dd0 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 69 e, CK_ULONG ulSi 19de0 67 6e 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09 43 gnatureLen) {..C 19df0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 19e00 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 19e10 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 19e20 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 19e30 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 19e40 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 19e50 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 19e60 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 19e70 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 19e80 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 19e90 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 19ea0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 19eb0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 19ec0 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 19ed0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 19ee0 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 19ef0 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 19f00 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 19f10 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 19f20 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 19f30 56 65 72 69 66 79 52 65 63 6f 76 65 72 49 6e 69 VerifyRecoverIni 19f40 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 t)(CK_SESSION_HA 19f50 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 19f60 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 K_MECHANISM_PTR 19f70 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f pMechanism, CK_O 19f80 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 BJECT_HANDLE hKe 19f90 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 y) {..CACKEY_DEB 19fa0 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 19fb0 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 19fc0 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 19fd0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 19fe0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 19ff0 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 1a000 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1a010 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 1a020 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 1a030 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 1a040 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1a050 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 1a060 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 1a070 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 1a080 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 1a090 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 1a0a0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1a0b0 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 1a0c0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 1a0d0 5f 52 56 2c 20 43 5f 56 65 72 69 66 79 52 65 63 _RV, C_VerifyRec 1a0e0 6f 76 65 72 29 28 43 4b 5f 53 45 53 53 49 4f 4e over)(CK_SESSION 1a0f0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 1a100 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 , CK_BYTE_PTR pS 1a110 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f ignature, CK_ULO 1a120 4e 47 20 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 NG ulSignatureLe 1a130 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 1a140 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 Data, CK_ULONG_P 1a150 54 52 20 70 75 6c 44 61 74 61 4c 65 6e 29 20 7b TR pulDataLen) { 1a160 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1a170 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 1a180 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 1a190 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 1a1a0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1a1b0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 1a1c0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 1a1d0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1a1e0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 1a1f0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 1a200 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1a210 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 1a220 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 1a230 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 1a240 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 1a250 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 1a260 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 1a270 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1a280 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 1a290 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 1a2a0 20 43 5f 44 69 67 65 73 74 45 6e 63 72 79 70 74 C_DigestEncrypt 1a2b0 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 Update)(CK_SESSI 1a2c0 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 1a2d0 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 1a2e0 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 pPart, CK_ULONG 1a2f0 75 6c 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 ulPartLen, CK_BY 1a300 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 TE_PTR pEncrypte 1a310 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f dPart, CK_ULONG_ 1a320 50 54 52 20 70 75 6c 45 6e 63 72 79 70 74 65 64 PTR pulEncrypted 1a330 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b PartLen) {..CACK 1a340 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1a350 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 1a360 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 1a370 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 1a380 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1a390 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 1a3a0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 1a3b0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 1a3c0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 1a3d0 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 1a3e0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 1a3f0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 1a400 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 1a410 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 1a420 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1a430 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 1a440 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 1a450 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 1a460 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 1a470 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 ION(CK_RV, C_Dec 1a480 72 79 70 74 44 69 67 65 73 74 55 70 64 61 74 65 ryptDigestUpdate 1a490 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 1a4a0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 1a4b0 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 _BYTE_PTR pEncry 1a4c0 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f ptedPart, CK_ULO 1a4d0 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64 50 61 NG ulEncryptedPa 1a4e0 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 rtLen, CK_BYTE_P 1a4f0 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f TR pPart, CK_ULO 1a500 4e 47 5f 50 54 52 20 70 75 6c 50 61 72 74 4c 65 NG_PTR pulPartLe 1a510 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 n) {..CACKEY_DEB 1a520 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 1a530 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 1a540 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 1a550 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1a560 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1a570 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 1a580 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1a590 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 1a5a0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 1a5b0 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 1a5c0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1a5d0 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 1a5e0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 1a5f0 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 1a600 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 1a610 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 1a620 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1a630 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 1a640 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 1a650 5f 52 56 2c 20 43 5f 53 69 67 6e 45 6e 63 72 79 _RV, C_SignEncry 1a660 70 74 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 ptUpdate)(CK_SES 1a670 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 1a680 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 sion, CK_BYTE_PT 1a690 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e R pPart, CK_ULON 1a6a0 47 20 75 6c 50 61 72 74 4c 65 6e 2c 20 43 4b 5f G ulPartLen, CK_ 1a6b0 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 BYTE_PTR pEncryp 1a6c0 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e tedPart, CK_ULON 1a6d0 47 5f 50 54 52 20 70 75 6c 45 6e 63 72 79 70 74 G_PTR pulEncrypt 1a6e0 65 64 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 edPartLen) {..CA 1a6f0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1a700 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 1a710 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 1a720 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 1a730 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1a740 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 1a750 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 1a760 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 1a770 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 1a780 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 1a790 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1a7a0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 1a7b0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1a7c0 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 1a7d0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1a7e0 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 1a7f0 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 1a800 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 1a810 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 1a820 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 CTION(CK_RV, C_D 1a830 65 63 72 79 70 74 56 65 72 69 66 79 55 70 64 61 ecryptVerifyUpda 1a840 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 te)(CK_SESSION_H 1a850 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 1a860 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 CK_BYTE_PTR pEnc 1a870 72 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 ryptedPart, CK_U 1a880 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64 LONG ulEncrypted 1a890 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 PartLen, CK_BYTE 1a8a0 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 _PTR pPart, CK_U 1a8b0 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 50 61 72 74 LONG_PTR pulPart 1a8c0 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Len) {..CACKEY_D 1a8d0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 1a8e0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 1a8f0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 1a900 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 1a910 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1a920 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 1a930 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 1a940 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 1a950 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1a960 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 1a970 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1a980 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 1a990 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 1a9a0 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 1a9b0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1a9c0 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 1a9d0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1a9e0 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 1a9f0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 1aa00 43 4b 5f 52 56 2c 20 43 5f 47 65 6e 65 72 61 74 CK_RV, C_Generat 1aa10 65 4b 65 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e eKey)(CK_SESSION 1aa20 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 1aa30 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 , CK_MECHANISM_P 1aa40 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 TR pMechanism, C 1aa50 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 K_ATTRIBUTE_PTR 1aa60 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c pTemplate, CK_UL 1aa70 4f 4e 47 20 75 6c 43 6f 75 6e 74 2c 20 43 4b 5f ONG ulCount, CK_ 1aa80 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 OBJECT_HANDLE_PT 1aa90 52 20 70 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b R phKey) {..CACK 1aaa0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1aab0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 1aac0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 1aad0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 1aae0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1aaf0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 1ab00 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 1ab10 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 1ab20 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 1ab30 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 1ab40 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 1ab50 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 1ab60 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 1ab70 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 1ab80 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1ab90 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 1aba0 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 1abb0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 1abc0 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 1abd0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 6e ION(CK_RV, C_Gen 1abe0 65 72 61 74 65 4b 65 79 50 61 69 72 29 28 43 4b erateKeyPair)(CK 1abf0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 1ac00 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 hSession, CK_MEC 1ac10 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 HANISM_PTR pMech 1ac20 61 6e 69 73 6d 2c 20 43 4b 5f 41 54 54 52 49 42 anism, CK_ATTRIB 1ac30 55 54 45 5f 50 54 52 20 70 50 75 62 6c 69 63 4b UTE_PTR pPublicK 1ac40 65 79 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 eyTemplate, CK_U 1ac50 4c 4f 4e 47 20 75 6c 50 75 62 6c 69 63 4b 65 79 LONG ulPublicKey 1ac60 41 74 74 72 69 62 75 74 65 43 6f 75 6e 74 2c 20 AttributeCount, 1ac70 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 CK_ATTRIBUTE_PTR 1ac80 20 70 50 72 69 76 61 74 65 4b 65 79 54 65 6d 70 pPrivateKeyTemp 1ac90 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 late, CK_ULONG u 1aca0 6c 50 72 69 76 61 74 65 4b 65 79 41 74 74 72 69 lPrivateKeyAttri 1acb0 62 75 74 65 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 buteCount, CK_OB 1acc0 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 JECT_HANDLE_PTR 1acd0 70 68 50 75 62 6c 69 63 4b 65 79 2c 20 43 4b 5f phPublicKey, CK_ 1ace0 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 OBJECT_HANDLE_PT 1acf0 52 20 70 68 50 72 69 76 61 74 65 4b 65 79 29 20 R phPrivateKey) 1ad00 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 1ad10 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 1ad20 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 1ad30 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 1ad40 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1ad50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 1ad60 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 1ad70 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1ad80 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 1ad90 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 1ada0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1adb0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 1adc0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1add0 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 1ade0 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 1adf0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 1ae00 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 1ae10 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1ae20 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN 1ae30 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 1ae40 2c 20 43 5f 57 72 61 70 4b 65 79 29 28 43 4b 5f , C_WrapKey)(CK_ 1ae50 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 1ae60 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 Session, CK_MECH 1ae70 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 ANISM_PTR pMecha 1ae80 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f nism, CK_OBJECT_ 1ae90 48 41 4e 44 4c 45 20 68 57 72 61 70 70 69 6e 67 HANDLE hWrapping 1aea0 4b 65 79 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 Key, CK_OBJECT_H 1aeb0 41 4e 44 4c 45 20 68 4b 65 79 2c 20 43 4b 5f 42 ANDLE hKey, CK_B 1aec0 59 54 45 5f 50 54 52 20 70 57 72 61 70 70 65 64 YTE_PTR pWrapped 1aed0 4b 65 79 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 Key, CK_ULONG_PT 1aee0 52 20 70 75 6c 57 72 61 70 70 65 64 4b 65 79 4c R pulWrappedKeyL 1aef0 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 en) {..CACKEY_DE 1af00 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 1af10 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 1af20 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 1af30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1af40 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1af50 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 1af60 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1af70 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 1af80 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 1af90 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 1afa0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 1afb0 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 1afc0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 1afd0 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 1afe0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1aff0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 1b000 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1b010 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 1b020 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 1b030 4b 5f 52 56 2c 20 43 5f 55 6e 77 72 61 70 4b 65 K_RV, C_UnwrapKe 1b040 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 y)(CK_SESSION_HA 1b050 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 1b060 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 K_MECHANISM_PTR 1b070 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f pMechanism, CK_O 1b080 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 55 6e BJECT_HANDLE hUn 1b090 77 72 61 70 70 69 6e 67 4b 65 79 2c 20 43 4b 5f wrappingKey, CK_ 1b0a0 42 59 54 45 5f 50 54 52 20 70 57 72 61 70 70 65 BYTE_PTR pWrappe 1b0b0 64 4b 65 79 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 dKey, CK_ULONG u 1b0c0 6c 57 72 61 70 70 65 64 4b 65 79 4c 65 6e 2c 20 lWrappedKeyLen, 1b0d0 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 CK_ATTRIBUTE_PTR 1b0e0 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 pTemplate, CK_U 1b0f0 4c 4f 4e 47 20 75 6c 41 74 74 72 69 62 75 74 65 LONG ulAttribute 1b100 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 Count, CK_OBJECT 1b110 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4b 65 _HANDLE_PTR phKe 1b120 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 y) {..CACKEY_DEB 1b130 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 1b140 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 1b150 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 1b160 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1b170 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1b180 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 1b190 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1b1a0 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 1b1b0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 1b1c0 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 1b1d0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1b1e0 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 1b1f0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 1b200 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 1b210 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 1b220 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 1b230 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1b240 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 1b250 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 1b260 5f 52 56 2c 20 43 5f 44 65 72 69 76 65 4b 65 79 _RV, C_DeriveKey 1b270 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 1b280 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 1b290 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 _MECHANISM_PTR p 1b2a0 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 Mechanism, CK_OB 1b2b0 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 42 61 73 JECT_HANDLE hBas 1b2c0 65 4b 65 79 2c 20 43 4b 5f 41 54 54 52 49 42 55 eKey, CK_ATTRIBU 1b2d0 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 TE_PTR pTemplate 1b2e0 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 41 74 74 , CK_ULONG ulAtt 1b2f0 72 69 62 75 74 65 43 6f 75 6e 74 2c 20 43 4b 5f ributeCount, CK_ 1b300 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 OBJECT_HANDLE_PT 1b310 52 20 70 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b R phKey) {..CACK 1b320 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1b330 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 1b340 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 1b350 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 1b360 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1b370 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 1b380 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 1b390 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 1b3a0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 1b3b0 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 1b3c0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 1b3d0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 1b3e0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 1b3f0 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 1b400 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1b410 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 1b420 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 1b430 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 1b440 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 1b450 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 65 ION(CK_RV, C_See 1b460 64 52 61 6e 64 6f 6d 29 28 43 4b 5f 53 45 53 53 dRandom)(CK_SESS 1b470 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 1b480 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 1b490 20 70 53 65 65 64 2c 20 43 4b 5f 55 4c 4f 4e 47 pSeed, CK_ULONG 1b4a0 20 75 6c 53 65 65 64 4c 65 6e 29 20 7b 0a 09 43 ulSeedLen) {..C 1b4b0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1b4c0 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 1b4d0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 1b4e0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 1b4f0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1b500 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 1b510 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 1b520 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 1b530 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 1b540 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 1b550 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1b560 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1b570 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1b580 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 1b590 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1b5a0 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 1b5b0 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 1b5c0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1b5d0 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 1b5e0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 1b5f0 47 65 6e 65 72 61 74 65 52 61 6e 64 6f 6d 29 28 GenerateRandom)( 1b600 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 1b610 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 1b620 59 54 45 5f 50 54 52 20 70 52 61 6e 64 6f 6d 44 YTE_PTR pRandomD 1b630 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c ata, CK_ULONG ul 1b640 52 61 6e 64 6f 6d 4c 65 6e 29 20 7b 0a 09 43 41 RandomLen) {..CA 1b650 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1b660 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 1b670 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 1b680 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 1b690 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1b6a0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 1b6b0 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 1b6c0 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 1b6d0 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 1b6e0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 1b6f0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1b700 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 1b710 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1b720 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 1b730 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1b740 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 1b750 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 1b760 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 1b770 7d 0a 0a 2f 2a 20 44 65 70 72 65 63 61 74 65 64 }../* Deprecated 1b780 20 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 43 4b 5f Function */.CK_ 1b790 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 1b7a0 43 4b 5f 52 56 2c 20 43 5f 47 65 74 46 75 6e 63 CK_RV, C_GetFunc 1b7b0 74 69 6f 6e 53 74 61 74 75 73 29 28 43 4b 5f 53 tionStatus)(CK_S 1b7c0 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 1b7d0 65 73 73 69 6f 6e 29 20 7b 0a 09 43 41 43 4b 45 ession) {..CACKE 1b7e0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1b7f0 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 43 41 43 Called.");...CAC 1b800 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1b810 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1b820 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 FUNCTION_NOT_PAR 1b830 41 4c 4c 45 4c 20 28 25 69 29 22 2c 20 43 4b 52 ALLEL (%i)", CKR 1b840 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 _FUNCTION_NOT_PA 1b850 52 41 4c 4c 45 4c 29 3b 0a 0a 09 72 65 74 75 72 RALLEL);...retur 1b860 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 1b870 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a 09 OT_PARALLEL);... 1b880 68 53 65 73 73 69 6f 6e 20 3d 20 68 53 65 73 73 hSession = hSess 1b890 69 6f 6e 3b 20 2f 2a 20 53 75 70 72 65 73 73 20 ion; /* Supress 1b8a0 75 6e 75 73 65 64 20 76 61 72 69 61 62 6c 65 20 unused variable 1b8b0 77 61 72 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f 2a warning */.}../* 1b8c0 20 44 65 70 72 65 63 61 74 65 64 20 46 75 6e 63 Deprecated Func 1b8d0 74 69 6f 6e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e tion */.CK_DEFIN 1b8e0 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 1b8f0 2c 20 43 5f 43 61 6e 63 65 6c 46 75 6e 63 74 69 , C_CancelFuncti 1b900 6f 6e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 on)(CK_SESSION_H 1b910 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 20 ANDLE hSession) 1b920 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 1b930 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 1b940 29 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 );...CACKEY_DEBU 1b950 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 1b960 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 1b970 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 20 28 25 _NOT_PARALLEL (% 1b980 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 1b990 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 3b N_NOT_PARALLEL); 1b9a0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 1b9b0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c NCTION_NOT_PARAL 1b9c0 4c 45 4c 29 3b 0a 0a 09 68 53 65 73 73 69 6f 6e LEL);...hSession 1b9d0 20 3d 20 68 53 65 73 73 69 6f 6e 3b 20 2f 2a 20 = hSession; /* 1b9e0 53 75 70 72 65 73 73 20 75 6e 75 73 65 64 20 76 Supress unused v 1b9f0 61 72 69 61 62 6c 65 20 77 61 72 6e 69 6e 67 20 ariable warning 1ba00 2a 2f 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f */.}..CK_DEFINE_ 1ba10 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1ba20 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 4c 69 73 C_GetFunctionLis 1ba30 74 29 28 43 4b 5f 46 55 4e 43 54 49 4f 4e 5f 4c t)(CK_FUNCTION_L 1ba40 49 53 54 5f 50 54 52 5f 50 54 52 20 70 70 46 75 IST_PTR_PTR ppFu 1ba50 6e 63 74 69 6f 6e 4c 69 73 74 29 20 7b 0a 09 43 nctionList) {..C 1ba60 4b 5f 46 55 4e 43 54 49 4f 4e 5f 4c 49 53 54 5f K_FUNCTION_LIST_ 1ba70 50 54 52 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 PTR pFunctionLis 1ba80 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 t;...CACKEY_DEBU 1ba90 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 1baa0 2e 22 29 3b 0a 0a 09 69 66 20 28 70 70 46 75 6e .");...if (ppFun 1bab0 63 74 69 6f 6e 4c 69 73 74 20 3d 3d 20 4e 55 4c ctionList == NUL 1bac0 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 L) {...CACKEY_DE 1bad0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1bae0 72 2e 20 70 70 46 75 6e 63 74 69 6f 6e 4c 69 73 r. ppFunctionLis 1baf0 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 t is NULL.");... 1bb00 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 1bb10 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 1bb20 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 20 3d .pFunctionList = 1bb30 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a malloc(sizeof(* 1bb40 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 29 29 3b pFunctionList)); 1bb50 0a 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ...pFunctionList 1bb60 2d 3e 76 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 ->version.major 1bb70 3d 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54 = ((CACKEY_CRYPT 1bb80 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 OKI_VERSION_CODE 1bb90 29 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b ) >> 16) & 0xff; 1bba0 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 1bbb0 3e 76 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d >version.minor = 1bbc0 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54 4f ((CACKEY_CRYPTO 1bbd0 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 29 KI_VERSION_CODE) 1bbe0 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a >> 8) & 0xff;.. 1bbf0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 1bc00 43 5f 49 6e 69 74 69 61 6c 69 7a 65 20 3d 20 43 C_Initialize = C 1bc10 5f 49 6e 69 74 69 61 6c 69 7a 65 3b 0a 09 70 46 _Initialize;..pF 1bc20 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 unctionList->C_F 1bc30 69 6e 61 6c 69 7a 65 20 3d 20 43 5f 46 69 6e 61 inalize = C_Fina 1bc40 6c 69 7a 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e lize;..pFunction 1bc50 4c 69 73 74 2d 3e 43 5f 47 65 74 49 6e 66 6f 20 List->C_GetInfo 1bc60 3d 20 43 5f 47 65 74 49 6e 66 6f 3b 0a 09 70 46 = C_GetInfo;..pF 1bc70 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 unctionList->C_G 1bc80 65 74 53 6c 6f 74 4c 69 73 74 20 3d 20 43 5f 47 etSlotList = C_G 1bc90 65 74 53 6c 6f 74 4c 69 73 74 3b 0a 09 70 46 75 etSlotList;..pFu 1bca0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge 1bcb0 74 53 6c 6f 74 49 6e 66 6f 20 3d 20 43 5f 47 65 tSlotInfo = C_Ge 1bcc0 74 53 6c 6f 74 49 6e 66 6f 3b 0a 09 70 46 75 6e tSlotInfo;..pFun 1bcd0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 ctionList->C_Get 1bce0 54 6f 6b 65 6e 49 6e 66 6f 20 3d 20 43 5f 47 65 TokenInfo = C_Ge 1bcf0 74 54 6f 6b 65 6e 49 6e 66 6f 3b 0a 09 70 46 75 tTokenInfo;..pFu 1bd00 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 57 61 nctionList->C_Wa 1bd10 69 74 46 6f 72 53 6c 6f 74 45 76 65 6e 74 20 3d itForSlotEvent = 1bd20 20 43 5f 57 61 69 74 46 6f 72 53 6c 6f 74 45 76 C_WaitForSlotEv 1bd30 65 6e 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ent;..pFunctionL 1bd40 69 73 74 2d 3e 43 5f 47 65 74 4d 65 63 68 61 6e ist->C_GetMechan 1bd50 69 73 6d 4c 69 73 74 20 3d 20 43 5f 47 65 74 4d ismList = C_GetM 1bd60 65 63 68 61 6e 69 73 6d 4c 69 73 74 3b 0a 09 70 echanismList;..p 1bd70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1bd80 47 65 74 4d 65 63 68 61 6e 69 73 6d 49 6e 66 6f GetMechanismInfo 1bd90 20 3d 20 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 = C_GetMechanis 1bda0 6d 49 6e 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f mInfo;..pFunctio 1bdb0 6e 4c 69 73 74 2d 3e 43 5f 49 6e 69 74 54 6f 6b nList->C_InitTok 1bdc0 65 6e 20 3d 20 43 5f 49 6e 69 74 54 6f 6b 65 6e en = C_InitToken 1bdd0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1bde0 2d 3e 43 5f 49 6e 69 74 50 49 4e 20 3d 20 43 5f ->C_InitPIN = C_ 1bdf0 49 6e 69 74 50 49 4e 3b 0a 09 70 46 75 6e 63 74 InitPIN;..pFunct 1be00 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 50 49 ionList->C_SetPI 1be10 4e 20 3d 20 43 5f 53 65 74 50 49 4e 3b 0a 09 70 N = C_SetPIN;..p 1be20 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1be30 4f 70 65 6e 53 65 73 73 69 6f 6e 20 3d 20 43 5f OpenSession = C_ 1be40 4f 70 65 6e 53 65 73 73 69 6f 6e 3b 0a 09 70 46 OpenSession;..pF 1be50 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 unctionList->C_C 1be60 6c 6f 73 65 53 65 73 73 69 6f 6e 20 3d 20 43 5f loseSession = C_ 1be70 43 6c 6f 73 65 53 65 73 73 69 6f 6e 3b 0a 09 70 CloseSession;..p 1be80 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1be90 43 6c 6f 73 65 41 6c 6c 53 65 73 73 69 6f 6e 73 CloseAllSessions 1bea0 20 3d 20 43 5f 43 6c 6f 73 65 41 6c 6c 53 65 73 = C_CloseAllSes 1beb0 73 69 6f 6e 73 3b 0a 09 70 46 75 6e 63 74 69 6f sions;..pFunctio 1bec0 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 53 65 73 73 nList->C_GetSess 1bed0 69 6f 6e 49 6e 66 6f 20 3d 20 43 5f 47 65 74 53 ionInfo = C_GetS 1bee0 65 73 73 69 6f 6e 49 6e 66 6f 3b 0a 09 70 46 75 essionInfo;..pFu 1bef0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge 1bf00 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 20 tOperationState 1bf10 3d 20 43 5f 47 65 74 4f 70 65 72 61 74 69 6f 6e = C_GetOperation 1bf20 53 74 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f State;..pFunctio 1bf30 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 4f 70 65 72 nList->C_SetOper 1bf40 61 74 69 6f 6e 53 74 61 74 65 20 3d 20 43 5f 53 ationState = C_S 1bf50 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 etOperationState 1bf60 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1bf70 2d 3e 43 5f 4c 6f 67 69 6e 20 3d 20 43 5f 4c 6f ->C_Login = C_Lo 1bf80 67 69 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c gin;..pFunctionL 1bf90 69 73 74 2d 3e 43 5f 4c 6f 67 6f 75 74 20 3d 20 ist->C_Logout = 1bfa0 43 5f 4c 6f 67 6f 75 74 3b 0a 09 70 46 75 6e 63 C_Logout;..pFunc 1bfb0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 72 65 61 tionList->C_Crea 1bfc0 74 65 4f 62 6a 65 63 74 20 3d 20 43 5f 43 72 65 teObject = C_Cre 1bfd0 61 74 65 4f 62 6a 65 63 74 3b 0a 09 70 46 75 6e ateObject;..pFun 1bfe0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 6f 70 ctionList->C_Cop 1bff0 79 4f 62 6a 65 63 74 20 3d 20 43 5f 43 6f 70 79 yObject = C_Copy 1c000 4f 62 6a 65 63 74 3b 0a 09 70 46 75 6e 63 74 69 Object;..pFuncti 1c010 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 73 74 72 6f onList->C_Destro 1c020 79 4f 62 6a 65 63 74 20 3d 20 43 5f 44 65 73 74 yObject = C_Dest 1c030 72 6f 79 4f 62 6a 65 63 74 3b 0a 09 70 46 75 6e royObject;..pFun 1c040 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 ctionList->C_Get 1c050 4f 62 6a 65 63 74 53 69 7a 65 20 3d 20 43 5f 47 ObjectSize = C_G 1c060 65 74 4f 62 6a 65 63 74 53 69 7a 65 3b 0a 09 70 etObjectSize;..p 1c070 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1c080 47 65 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 GetAttributeValu 1c090 65 20 3d 20 43 5f 47 65 74 41 74 74 72 69 62 75 e = C_GetAttribu 1c0a0 74 65 56 61 6c 75 65 3b 0a 09 70 46 75 6e 63 74 teValue;..pFunct 1c0b0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 41 74 ionList->C_SetAt 1c0c0 74 72 69 62 75 74 65 56 61 6c 75 65 20 3d 20 43 tributeValue = C 1c0d0 5f 53 65 74 41 74 74 72 69 62 75 74 65 56 61 6c _SetAttributeVal 1c0e0 75 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 ue;..pFunctionLi 1c0f0 73 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 st->C_FindObject 1c100 73 49 6e 69 74 20 3d 20 43 5f 46 69 6e 64 4f 62 sInit = C_FindOb 1c110 6a 65 63 74 73 49 6e 69 74 3b 0a 09 70 46 75 6e jectsInit;..pFun 1c120 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e ctionList->C_Fin 1c130 64 4f 62 6a 65 63 74 73 20 3d 20 43 5f 46 69 6e dObjects = C_Fin 1c140 64 4f 62 6a 65 63 74 73 3b 0a 09 70 46 75 6e 63 dObjects;..pFunc 1c150 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 tionList->C_Find 1c160 4f 62 6a 65 63 74 73 46 69 6e 61 6c 20 3d 20 43 ObjectsFinal = C 1c170 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 69 6e 61 _FindObjectsFina 1c180 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 l;..pFunctionLis 1c190 74 2d 3e 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 t->C_EncryptInit 1c1a0 20 3d 20 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 = C_EncryptInit 1c1b0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 1c1c0 2d 3e 43 5f 45 6e 63 72 79 70 74 20 3d 20 43 5f ->C_Encrypt = C_ 1c1d0 45 6e 63 72 79 70 74 3b 0a 09 70 46 75 6e 63 74 Encrypt;..pFunct 1c1e0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 72 79 ionList->C_Encry 1c1f0 70 74 55 70 64 61 74 65 20 3d 20 43 5f 45 6e 63 ptUpdate = C_Enc 1c200 72 79 70 74 55 70 64 61 74 65 3b 0a 09 70 46 75 ryptUpdate;..pFu 1c210 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e nctionList->C_En 1c220 63 72 79 70 74 46 69 6e 61 6c 20 3d 20 43 5f 45 cryptFinal = C_E 1c230 6e 63 72 79 70 74 46 69 6e 61 6c 3b 0a 09 70 46 ncryptFinal;..pF 1c240 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 unctionList->C_D 1c250 65 63 72 79 70 74 49 6e 69 74 20 3d 20 43 5f 44 ecryptInit = C_D 1c260 65 63 72 79 70 74 49 6e 69 74 3b 0a 09 70 46 75 ecryptInit;..pFu 1c270 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 nctionList->C_De 1c280 63 72 79 70 74 20 3d 20 43 5f 44 65 63 72 79 70 crypt = C_Decryp 1c290 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t;..pFunctionLis 1c2a0 74 2d 3e 43 5f 44 65 63 72 79 70 74 55 70 64 61 t->C_DecryptUpda 1c2b0 74 65 20 3d 20 43 5f 44 65 63 72 79 70 74 55 70 te = C_DecryptUp 1c2c0 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e date;..pFunction 1c2d0 4c 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 46 List->C_DecryptF 1c2e0 69 6e 61 6c 20 3d 20 43 5f 44 65 63 72 79 70 74 inal = C_Decrypt 1c2f0 46 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f Final;..pFunctio 1c300 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 49 nList->C_DigestI 1c310 6e 69 74 20 3d 20 43 5f 44 69 67 65 73 74 49 6e nit = C_DigestIn 1c320 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 it;..pFunctionLi 1c330 73 74 2d 3e 43 5f 44 69 67 65 73 74 20 3d 20 43 st->C_Digest = C 1c340 5f 44 69 67 65 73 74 3b 0a 09 70 46 75 6e 63 74 _Digest;..pFunct 1c350 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 73 ionList->C_Diges 1c360 74 55 70 64 61 74 65 20 3d 20 43 5f 44 69 67 65 tUpdate = C_Dige 1c370 73 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 stUpdate;..pFunc 1c380 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 tionList->C_Dige 1c390 73 74 4b 65 79 20 3d 20 43 5f 44 69 67 65 73 74 stKey = C_Digest 1c3a0 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c Key;..pFunctionL 1c3b0 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 46 69 6e ist->C_DigestFin 1c3c0 61 6c 20 3d 20 43 5f 44 69 67 65 73 74 46 69 6e al = C_DigestFin 1c3d0 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 al;..pFunctionLi 1c3e0 73 74 2d 3e 43 5f 53 69 67 6e 49 6e 69 74 20 3d st->C_SignInit = 1c3f0 20 43 5f 53 69 67 6e 49 6e 69 74 3b 0a 09 70 46 C_SignInit;..pF 1c400 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 unctionList->C_S 1c410 69 67 6e 20 3d 20 43 5f 53 69 67 6e 3b 0a 09 70 ign = C_Sign;..p 1c420 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1c430 53 69 67 6e 55 70 64 61 74 65 20 3d 20 43 5f 53 SignUpdate = C_S 1c440 69 67 6e 55 70 64 61 74 65 3b 0a 09 70 46 75 6e ignUpdate;..pFun 1c450 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 ctionList->C_Sig 1c460 6e 46 69 6e 61 6c 20 3d 20 43 5f 53 69 67 6e 46 nFinal = C_SignF 1c470 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e inal;..pFunction 1c480 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 52 65 63 6f List->C_SignReco 1c490 76 65 72 49 6e 69 74 20 3d 20 43 5f 53 69 67 6e verInit = C_Sign 1c4a0 52 65 63 6f 76 65 72 49 6e 69 74 3b 0a 09 70 46 RecoverInit;..pF 1c4b0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 unctionList->C_S 1c4c0 69 67 6e 52 65 63 6f 76 65 72 20 3d 20 43 5f 53 ignRecover = C_S 1c4d0 69 67 6e 52 65 63 6f 76 65 72 3b 0a 09 70 46 75 ignRecover;..pFu 1c4e0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 nctionList->C_Ve 1c4f0 72 69 66 79 49 6e 69 74 20 3d 20 43 5f 56 65 72 rifyInit = C_Ver 1c500 69 66 79 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 ifyInit;..pFunct 1c510 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 ionList->C_Verif 1c520 79 20 3d 20 43 5f 56 65 72 69 66 79 3b 0a 09 70 y = C_Verify;..p 1c530 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1c540 56 65 72 69 66 79 55 70 64 61 74 65 20 3d 20 43 VerifyUpdate = C 1c550 5f 56 65 72 69 66 79 55 70 64 61 74 65 3b 0a 09 _VerifyUpdate;.. 1c560 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 1c570 5f 56 65 72 69 66 79 46 69 6e 61 6c 20 3d 20 43 _VerifyFinal = C 1c580 5f 56 65 72 69 66 79 46 69 6e 61 6c 3b 0a 09 70 _VerifyFinal;..p 1c590 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 1c5a0 56 65 72 69 66 79 52 65 63 6f 76 65 72 49 6e 69 VerifyRecoverIni 1c5b0 74 20 3d 20 43 5f 56 65 72 69 66 79 52 65 63 6f t = C_VerifyReco 1c5c0 76 65 72 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 verInit;..pFunct 1c5d0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 ionList->C_Verif 1c5e0 79 52 65 63 6f 76 65 72 20 3d 20 43 5f 56 65 72 yRecover = C_Ver 1c5f0 69 66 79 52 65 63 6f 76 65 72 3b 0a 09 70 46 75 ifyRecover;..pFu 1c600 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 nctionList->C_Di 1c610 67 65 73 74 45 6e 63 72 79 70 74 55 70 64 61 74 gestEncryptUpdat 1c620 65 20 3d 20 43 5f 44 69 67 65 73 74 45 6e 63 72 e = C_DigestEncr 1c630 79 70 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e yptUpdate;..pFun 1c640 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 ctionList->C_Dec 1c650 72 79 70 74 44 69 67 65 73 74 55 70 64 61 74 65 ryptDigestUpdate 1c660 20 3d 20 43 5f 44 65 63 72 79 70 74 44 69 67 65 = C_DecryptDige 1c670 73 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 stUpdate;..pFunc 1c680 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e tionList->C_Sign 1c690 45 6e 63 72 79 70 74 55 70 64 61 74 65 20 3d 20 EncryptUpdate = 1c6a0 43 5f 53 69 67 6e 45 6e 63 72 79 70 74 55 70 64 C_SignEncryptUpd 1c6b0 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ate;..pFunctionL 1c6c0 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 56 65 ist->C_DecryptVe 1c6d0 72 69 66 79 55 70 64 61 74 65 20 3d 20 43 5f 44 rifyUpdate = C_D 1c6e0 65 63 72 79 70 74 56 65 72 69 66 79 55 70 64 61 ecryptVerifyUpda 1c6f0 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 te;..pFunctionLi 1c700 73 74 2d 3e 43 5f 47 65 6e 65 72 61 74 65 4b 65 st->C_GenerateKe 1c710 79 20 3d 20 43 5f 47 65 6e 65 72 61 74 65 4b 65 y = C_GenerateKe 1c720 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 y;..pFunctionLis 1c730 74 2d 3e 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 t->C_GenerateKey 1c740 50 61 69 72 20 3d 20 43 5f 47 65 6e 65 72 61 74 Pair = C_Generat 1c750 65 4b 65 79 50 61 69 72 3b 0a 09 70 46 75 6e 63 eKeyPair;..pFunc 1c760 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 57 72 61 70 tionList->C_Wrap 1c770 4b 65 79 20 3d 20 43 5f 57 72 61 70 4b 65 79 3b Key = C_WrapKey; 1c780 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 1c790 3e 43 5f 55 6e 77 72 61 70 4b 65 79 20 3d 20 43 >C_UnwrapKey = C 1c7a0 5f 55 6e 77 72 61 70 4b 65 79 3b 0a 09 70 46 75 _UnwrapKey;..pFu 1c7b0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 nctionList->C_De 1c7c0 72 69 76 65 4b 65 79 20 3d 20 43 5f 44 65 72 69 riveKey = C_Deri 1c7d0 76 65 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f veKey;..pFunctio 1c7e0 6e 4c 69 73 74 2d 3e 43 5f 53 65 65 64 52 61 6e nList->C_SeedRan 1c7f0 64 6f 6d 20 3d 20 43 5f 53 65 65 64 52 61 6e 64 dom = C_SeedRand 1c800 6f 6d 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 om;..pFunctionLi 1c810 73 74 2d 3e 43 5f 47 65 6e 65 72 61 74 65 52 61 st->C_GenerateRa 1c820 6e 64 6f 6d 20 3d 20 43 5f 47 65 6e 65 72 61 74 ndom = C_Generat 1c830 65 52 61 6e 64 6f 6d 3b 0a 09 70 46 75 6e 63 74 eRandom;..pFunct 1c840 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 46 75 ionList->C_GetFu 1c850 6e 63 74 69 6f 6e 53 74 61 74 75 73 20 3d 20 43 nctionStatus = C 1c860 5f 47 65 74 46 75 6e 63 74 69 6f 6e 53 74 61 74 _GetFunctionStat 1c870 75 73 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 us;..pFunctionLi 1c880 73 74 2d 3e 43 5f 43 61 6e 63 65 6c 46 75 6e 63 st->C_CancelFunc 1c890 74 69 6f 6e 20 3d 20 43 5f 43 61 6e 63 65 6c 46 tion = C_CancelF 1c8a0 75 6e 63 74 69 6f 6e 3b 0a 09 70 46 75 6e 63 74 unction;..pFunct 1c8b0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 46 75 ionList->C_GetFu 1c8c0 6e 63 74 69 6f 6e 4c 69 73 74 20 3d 20 43 5f 47 nctionList = C_G 1c8d0 65 74 46 75 6e 63 74 69 6f 6e 4c 69 73 74 3b 0a etFunctionList;. 1c8e0 0a 09 2a 70 70 46 75 6e 63 74 69 6f 6e 4c 69 73 ..*ppFunctionLis 1c8f0 74 20 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t = pFunctionLis 1c900 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 t;...CACKEY_DEBU 1c910 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 1c920 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 1c930 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret 1c940 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}..