Artifact e7404c7b1a1ac1d24458a4042d788111bace4a59:
- File
cackey.c
— part of check-in
[5027cbae9b]
at
2011-08-26 05:29:43
on branch trunk
— Updated to include DoD root CAs as objects in the PKCS#11 module
Updated to include Netscape Trust Objects (https://developer.mozilla.org/index.php?title=en/NSS/PKCS_%2311_Netscape_Trust) in PKCS#11 module
Added more attributes to scan for to test driver (user: rkeene, size: 176721) [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 57 49 4e .#ifdef HAVE_WIN 0040: 54 59 50 45 53 5f 48 0a 23 20 20 69 6e 63 6c 75 TYPES_H.# inclu 0050: 64 65 20 3c 77 69 6e 74 79 70 65 73 2e 68 3e 0a de <wintypes.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 50 43 53 43 4c 49 54 45 5f 48 0a 23 20 VE_PCSCLITE_H.# 0080: 20 69 6e 63 6c 75 64 65 20 3c 70 63 73 63 6c 69 include <pcscli 0090: 74 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 te.h>.#endif.#if 00a0: 64 65 66 20 48 41 56 45 5f 57 49 4e 53 43 41 52 def HAVE_WINSCAR 00b0: 44 5f 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c D_H.# include < 00c0: 77 69 6e 73 63 61 72 64 2e 68 3e 0a 23 65 6e 64 winscard.h>.#end 00d0: 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 if.#ifdef HAVE_S 00e0: 54 44 49 4e 54 5f 48 0a 23 20 20 69 6e 63 6c 75 TDINT_H.# inclu 00f0: 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 de <stdint.h>.#e 0100: 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 ndif.#ifdef HAVE 0110: 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 20 20 69 _INTTYPES_H.# i 0120: 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73 nclude <inttypes 0130: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 .h>.#endif.#ifde 0140: 66 20 48 41 56 45 5f 53 54 44 4c 49 42 5f 48 0a f HAVE_STDLIB_H. 0150: 23 20 20 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c # include <stdl 0160: 69 62 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 ib.h>.#endif.#if 0170: 64 65 66 20 48 41 56 45 5f 55 4e 49 53 54 44 5f def HAVE_UNISTD_ 0180: 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c 75 6e H.# include <un 0190: 69 73 74 64 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 istd.h>.#endif.# 01a0: 69 66 64 65 66 20 48 41 56 45 5f 53 54 52 49 4e ifdef HAVE_STRIN 01b0: 47 5f 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c G_H.# include < 01c0: 73 74 72 69 6e 67 2e 68 3e 0a 23 65 6e 64 69 66 string.h>.#endif 01d0: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 50 54 48 .#ifdef HAVE_PTH 01e0: 52 45 41 44 5f 48 0a 23 20 20 69 6e 63 6c 75 64 READ_H.# includ 01f0: 65 20 3c 70 74 68 72 65 61 64 2e 68 3e 0a 23 65 e <pthread.h>.#e 0200: 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 ndif.#ifdef HAVE 0210: 5f 4c 49 4d 49 54 53 5f 48 0a 23 20 20 69 6e 63 _LIMITS_H.# inc 0220: 6c 75 64 65 20 3c 6c 69 6d 69 74 73 2e 68 3e 0a lude <limits.h>. 0230: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 #endif.#ifdef HA 0240: 56 45 5f 53 54 44 49 4f 5f 48 0a 23 20 20 69 6e VE_STDIO_H.# in 0250: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a clude <stdio.h>. 0260: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 #endif.#ifdef HA 0270: 56 45 5f 5a 4c 49 42 5f 48 0a 23 20 20 69 66 64 VE_ZLIB_H.# ifd 0280: 65 66 20 48 41 56 45 5f 4c 49 42 5a 0a 23 20 20 ef HAVE_LIBZ.# 0290: 20 20 69 6e 63 6c 75 64 65 20 3c 7a 6c 69 62 2e include <zlib. 02a0: 68 3e 0a 23 20 20 65 6e 64 69 66 0a 23 65 6c 73 h>.# endif.#els 02b0: 65 0a 23 20 20 69 66 64 65 66 20 48 41 56 45 5f e.# ifdef HAVE_ 02c0: 4c 49 42 5a 0a 23 20 20 20 20 75 6e 64 65 66 20 LIBZ.# undef 02d0: 48 41 56 45 5f 4c 49 42 5a 0a 23 20 20 65 6e 64 HAVE_LIBZ.# end 02e0: 69 66 0a 23 65 6e 64 69 66 0a 0a 23 64 65 66 69 if.#endif..#defi 02f0: 6e 65 20 43 4b 5f 50 54 52 20 2a 0a 23 64 65 66 ne CK_PTR *.#def 0300: 69 6e 65 20 43 4b 5f 44 45 46 49 4e 45 5f 46 55 ine CK_DEFINE_FU 0310: 4e 43 54 49 4f 4e 28 72 65 74 75 72 6e 54 79 70 NCTION(returnTyp 0320: 65 2c 20 6e 61 6d 65 29 20 72 65 74 75 72 6e 54 e, name) returnT 0330: 79 70 65 20 6e 61 6d 65 0a 23 64 65 66 69 6e 65 ype name.#define 0340: 20 43 4b 5f 44 45 43 4c 41 52 45 5f 46 55 4e 43 CK_DECLARE_FUNC 0350: 54 49 4f 4e 28 72 65 74 75 72 6e 54 79 70 65 2c TION(returnType, 0360: 20 6e 61 6d 65 29 20 72 65 74 75 72 6e 54 79 70 name) returnTyp 0370: 65 20 6e 61 6d 65 0a 23 64 65 66 69 6e 65 20 43 e name.#define C 0380: 4b 5f 44 45 43 4c 41 52 45 5f 46 55 4e 43 54 49 K_DECLARE_FUNCTI 0390: 4f 4e 5f 50 4f 49 4e 54 45 52 28 72 65 74 75 72 ON_POINTER(retur 03a0: 6e 54 79 70 65 2c 20 6e 61 6d 65 29 20 72 65 74 nType, name) ret 03b0: 75 72 6e 54 79 70 65 20 28 2a 20 6e 61 6d 65 29 urnType (* name) 03c0: 0a 23 64 65 66 69 6e 65 20 43 4b 5f 43 41 4c 4c .#define CK_CALL 03d0: 42 41 43 4b 5f 46 55 4e 43 54 49 4f 4e 28 72 65 BACK_FUNCTION(re 03e0: 74 75 72 6e 54 79 70 65 2c 20 6e 61 6d 65 29 20 turnType, name) 03f0: 72 65 74 75 72 6e 54 79 70 65 20 28 2a 20 6e 61 returnType (* na 0400: 6d 65 29 0a 23 69 66 6e 64 65 66 20 4e 55 4c 4c me).#ifndef NULL 0410: 5f 50 54 52 0a 23 20 20 64 65 66 69 6e 65 20 4e _PTR.# define N 0420: 55 4c 4c 5f 50 54 52 20 30 0a 23 65 6e 64 69 66 ULL_PTR 0.#endif 0430: 0a 0a 23 69 6e 63 6c 75 64 65 20 22 70 6b 63 73 ..#include "pkcs 0440: 31 31 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 11.h".#include " 0450: 70 6b 63 73 31 31 6e 2e 68 22 0a 23 69 6e 63 6c pkcs11n.h".#incl 0460: 75 64 65 20 22 61 73 6e 31 2d 78 35 30 39 2e 68 ude "asn1-x509.h 0470: 22 0a 23 69 6e 63 6c 75 64 65 20 22 73 68 61 31 ".#include "sha1 0480: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 64 .h".#include "md 0490: 35 2e 68 22 0a 0a 23 69 66 6e 64 65 66 20 43 41 5.h"..#ifndef CA 04a0: 43 4b 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 CKEY_CRYPTOKI_VE 04b0: 52 53 49 4f 4e 5f 43 4f 44 45 0a 23 20 20 64 65 RSION_CODE.# de 04c0: 66 69 6e 65 20 43 41 43 4b 45 59 5f 43 52 59 50 fine CACKEY_CRYP 04d0: 54 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 TOKI_VERSION_COD 04e0: 45 20 30 78 30 32 31 65 30 30 0a 23 65 6e 64 69 E 0x021e00.#endi 04f0: 66 0a 0a 2f 2a 20 47 53 43 2d 49 53 20 76 32 2e f../* GSC-IS v2. 0500: 31 20 44 65 66 69 6e 69 74 69 6f 6e 73 20 2a 2f 1 Definitions */ 0510: 0a 2f 2a 2a 20 43 6c 61 73 73 65 73 20 2a 2a 2f ./** Classes **/ 0520: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 43 .#define GSCIS_C 0530: 4c 41 53 53 5f 49 53 4f 37 38 31 36 20 20 20 20 LASS_ISO7816 0540: 20 20 20 20 20 20 20 30 78 30 30 0a 23 64 65 66 0x00.#def 0550: 69 6e 65 20 47 53 43 49 53 5f 43 4c 41 53 53 5f ine GSCIS_CLASS_ 0560: 47 4c 4f 42 41 4c 5f 50 4c 41 54 46 4f 52 4d 20 GLOBAL_PLATFORM 0570: 20 20 30 78 38 30 0a 0a 2f 2a 2a 20 49 6e 73 74 0x80../** Inst 0580: 72 75 63 74 69 6f 6e 73 20 2a 2a 2f 0a 23 64 65 ructions **/.#de 0590: 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 fine GSCIS_INSTR 05a0: 5f 47 45 54 5f 52 45 53 50 4f 4e 53 45 20 20 20 _GET_RESPONSE 05b0: 20 20 20 30 78 43 30 0a 23 64 65 66 69 6e 65 20 0xC0.#define 05c0: 47 53 43 49 53 5f 49 4e 53 54 52 5f 52 45 41 44 GSCIS_INSTR_READ 05d0: 5f 42 49 4e 41 52 59 20 20 20 20 20 20 20 30 78 _BINARY 0x 05e0: 42 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 B0.#define GSCIS 05f0: 5f 49 4e 53 54 52 5f 55 50 44 41 54 45 5f 42 49 _INSTR_UPDATE_BI 0600: 4e 41 52 59 20 20 20 20 20 30 78 44 36 0a 23 64 NARY 0xD6.#d 0610: 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 efine GSCIS_INST 0620: 52 5f 53 45 4c 45 43 54 20 20 20 20 20 20 20 20 R_SELECT 0630: 20 20 20 20 30 78 41 34 0a 23 64 65 66 69 6e 65 0xA4.#define 0640: 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 45 58 54 GSCIS_INSTR_EXT 0650: 45 52 4e 41 4c 5f 41 55 54 48 20 20 20 20 20 30 ERNAL_AUTH 0 0660: 78 38 32 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x82.#define GSCI 0670: 53 5f 49 4e 53 54 52 5f 47 45 54 5f 43 48 41 4c S_INSTR_GET_CHAL 0680: 4c 45 4e 47 45 20 20 20 20 20 30 78 38 34 0a 23 LENGE 0x84.# 0690: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 define GSCIS_INS 06a0: 54 52 5f 49 4e 54 45 52 4e 41 4c 5f 41 55 54 48 TR_INTERNAL_AUTH 06b0: 20 20 20 20 20 30 78 38 38 0a 23 64 65 66 69 6e 0x88.#defin 06c0: 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 56 45 e GSCIS_INSTR_VE 06d0: 52 49 46 59 20 20 20 20 20 20 20 20 20 20 20 20 RIFY 06e0: 30 78 32 30 0a 23 64 65 66 69 6e 65 20 47 53 43 0x20.#define GSC 06f0: 49 53 5f 49 4e 53 54 52 5f 53 49 47 4e 20 20 20 IS_INSTR_SIGN 0700: 20 20 20 20 20 20 20 20 20 20 20 30 78 32 41 0a 0x2A. 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 50 52 4f 50 20 20 20 20 STR_GET_PROP 0730: 20 20 20 20 20 20 30 78 35 36 0a 23 64 65 66 69 0x56.#defi 0740: 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 47 ne GSCIS_INSTR_G 0750: 45 54 5f 41 43 52 20 20 20 20 20 20 20 20 20 20 ET_ACR 0760: 20 30 78 34 43 0a 23 64 65 66 69 6e 65 20 47 53 0x4C.#define GS 0770: 43 49 53 5f 49 4e 53 54 52 5f 52 45 41 44 5f 42 CIS_INSTR_READ_B 0780: 55 46 46 45 52 20 20 20 20 20 20 20 30 78 35 32 UFFER 0x52 0790: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 .#define GSCIS_I 07a0: 4e 53 54 52 5f 53 49 47 4e 44 45 43 52 59 50 54 NSTR_SIGNDECRYPT 07b0: 20 20 20 20 20 20 20 30 78 34 32 0a 0a 23 64 65 0x42..#de 07c0: 66 69 6e 65 20 47 53 43 49 53 5f 50 41 52 41 4d fine GSCIS_PARAM 07d0: 5f 53 45 4c 45 43 54 5f 41 50 50 4c 45 54 20 20 _SELECT_APPLET 07e0: 20 20 20 30 78 30 34 0a 0a 2f 2a 2a 20 54 61 67 0x04../** Tag 07f0: 73 20 2a 2a 2f 0a 2f 2a 2a 2a 20 43 43 43 20 54 s **/./*** CCC T 0800: 61 67 73 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 ags ***/.#define 0810: 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 49 GSCIS_TAG_CARDI 0820: 44 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 D 0 0830: 78 46 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 xF0.#define GSCI 0840: 53 5f 54 41 47 5f 43 43 43 5f 56 45 52 20 20 20 S_TAG_CCC_VER 0850: 20 20 20 20 20 20 20 20 20 20 30 78 46 31 0a 23 0xF1.# 0860: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0870: 5f 43 43 47 5f 56 45 52 20 20 20 20 20 20 20 20 _CCG_VER 0880: 20 20 20 20 20 30 78 46 32 0a 23 64 65 66 69 6e 0xF2.#defin 0890: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 e GSCIS_TAG_CARD 08a0: 55 52 4c 20 20 20 20 20 20 20 20 20 20 20 20 20 URL 08b0: 30 78 46 33 0a 23 64 65 66 69 6e 65 20 47 53 43 0xF3.#define GSC 08c0: 49 53 5f 54 41 47 5f 50 4b 43 53 31 35 20 20 20 IS_TAG_PKCS15 08d0: 20 20 20 20 20 20 20 20 20 20 20 30 78 46 34 0a 0xF4. 08e0: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 08f0: 47 5f 52 45 47 5f 44 41 54 41 5f 4d 4f 44 45 4c G_REG_DATA_MODEL 0900: 20 20 20 20 20 20 30 78 46 35 0a 23 64 65 66 69 0xF5.#defi 0910: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 41 43 52 ne GSCIS_TAG_ACR 0920: 5f 54 41 42 4c 45 20 20 20 20 20 20 20 20 20 20 _TABLE 0930: 20 30 78 46 36 0a 23 64 65 66 69 6e 65 20 47 53 0xF6.#define GS 0940: 43 49 53 5f 54 41 47 5f 43 41 52 44 5f 41 50 44 CIS_TAG_CARD_APD 0950: 55 20 20 20 20 20 20 20 20 20 20 20 30 78 46 37 U 0xF7 0960: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0970: 41 47 5f 52 45 44 49 52 45 43 54 49 4f 4e 20 20 AG_REDIRECTION 0980: 20 20 20 20 20 20 20 30 78 46 41 0a 23 64 65 66 0xFA.#def 0990: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 54 ine GSCIS_TAG_CT 09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 09b0: 20 20 30 78 46 42 0a 23 64 65 66 69 6e 65 20 47 0xFB.#define G 09c0: 53 43 49 53 5f 54 41 47 5f 53 54 20 20 20 20 20 SCIS_TAG_ST 09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 46 0xF 09e0: 43 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f C.#define GSCIS_ 09f0: 54 41 47 5f 4e 45 58 54 43 43 43 20 20 20 20 20 TAG_NEXTCCC 0a00: 20 20 20 20 20 20 20 20 30 78 46 44 0a 0a 2f 2a 0xFD../* 0a10: 2a 2a 20 47 65 6e 65 72 61 6c 20 2d 20 45 46 20 ** General - EF 0a20: 32 32 30 30 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 2200 ***/.#defin 0a30: 65 20 47 53 43 49 53 5f 54 41 47 5f 46 4e 41 4d e GSCIS_TAG_FNAM 0a40: 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 E 0a50: 30 78 30 31 0a 23 64 65 66 69 6e 65 20 47 53 43 0x01.#define GSC 0a60: 49 53 5f 54 41 47 5f 4d 4e 41 4d 45 20 20 20 20 IS_TAG_MNAME 0a70: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 32 0a 0x02. 0a80: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0a90: 47 5f 4c 4e 41 4d 45 20 20 20 20 20 20 20 20 20 G_LNAME 0aa0: 20 20 20 20 20 20 30 78 30 33 0a 23 64 65 66 69 0x03.#defi 0ab0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 53 55 46 ne GSCIS_TAG_SUF 0ac0: 46 49 58 20 20 20 20 20 20 20 20 20 20 20 20 20 FIX 0ad0: 20 30 78 30 34 0a 23 64 65 66 69 6e 65 20 47 53 0x04.#define GS 0ae0: 43 49 53 5f 54 41 47 5f 47 4f 56 54 5f 41 47 45 CIS_TAG_GOVT_AGE 0af0: 4e 43 59 20 20 20 20 20 20 20 20 20 30 78 30 35 NCY 0x05 0b00: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0b10: 41 47 5f 42 55 52 45 41 55 20 20 20 20 20 20 20 AG_BUREAU 0b20: 20 20 20 20 20 20 20 30 78 30 36 0a 23 64 65 66 0x06.#def 0b30: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 ine GSCIS_TAG_BU 0b40: 52 45 41 55 5f 43 4f 44 45 20 20 20 20 20 20 20 REAU_CODE 0b50: 20 20 30 78 30 37 0a 23 64 65 66 69 6e 65 20 47 0x07.#define G 0b60: 53 43 49 53 5f 54 41 47 5f 44 45 50 54 5f 43 4f SCIS_TAG_DEPT_CO 0b70: 44 45 20 20 20 20 20 20 20 20 20 20 20 30 78 30 DE 0x0 0b80: 38 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 8.#define GSCIS_ 0b90: 54 41 47 5f 54 49 54 4c 45 20 20 20 20 20 20 20 TAG_TITLE 0ba0: 20 20 20 20 20 20 20 20 30 78 30 39 0a 23 64 65 0x09.#de 0bb0: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 42 fine GSCIS_TAG_B 0bc0: 55 49 4c 44 49 4e 47 20 20 20 20 20 20 20 20 20 UILDING 0bd0: 20 20 20 30 78 31 30 0a 23 64 65 66 69 6e 65 20 0x10.#define 0be0: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 0bf0: 5f 41 44 44 52 31 20 20 20 20 20 20 20 20 30 78 _ADDR1 0x 0c00: 31 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 11.#define GSCIS 0c10: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 _TAG_OFFICE_ADDR 0c20: 32 20 20 20 20 20 20 20 20 30 78 31 32 0a 23 64 2 0x12.#d 0c30: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0c40: 4f 46 46 49 43 45 5f 43 49 54 59 20 20 20 20 20 OFFICE_CITY 0c50: 20 20 20 20 30 78 31 33 0a 23 64 65 66 69 6e 65 0x13.#define 0c60: 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 GSCIS_TAG_OFFIC 0c70: 45 5f 53 54 41 54 45 20 20 20 20 20 20 20 20 30 E_STATE 0 0c80: 78 31 34 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x14.#define GSCI 0c90: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 5a 49 50 S_TAG_OFFICE_ZIP 0ca0: 20 20 20 20 20 20 20 20 20 20 30 78 31 35 0a 23 0x15.# 0cb0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0cc0: 5f 4f 46 46 49 43 45 5f 43 4f 55 4e 54 52 59 20 _OFFICE_COUNTRY 0cd0: 20 20 20 20 20 30 78 31 36 0a 23 64 65 66 69 6e 0x16.#defin 0ce0: 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 e GSCIS_TAG_OFFI 0cf0: 43 45 5f 50 48 4f 4e 45 20 20 20 20 20 20 20 20 CE_PHONE 0d00: 30 78 31 37 0a 23 64 65 66 69 6e 65 20 47 53 43 0x17.#define GSC 0d10: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 IS_TAG_OFFICE_PH 0d20: 4f 4e 45 5f 45 58 54 20 20 20 20 30 78 31 38 0a ONE_EXT 0x18. 0d30: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0d40: 47 5f 4f 46 46 49 43 45 5f 46 41 58 20 20 20 20 G_OFFICE_FAX 0d50: 20 20 20 20 20 20 30 78 31 39 0a 23 64 65 66 69 0x19.#defi 0d60: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 ne GSCIS_TAG_OFF 0d70: 49 43 45 5f 45 4d 41 49 4c 20 20 20 20 20 20 20 ICE_EMAIL 0d80: 20 30 78 31 41 0a 23 64 65 66 69 6e 65 20 47 53 0x1A.#define GS 0d90: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 52 CIS_TAG_OFFICE_R 0da0: 4f 4f 4d 20 20 20 20 20 20 20 20 20 30 78 31 42 OOM 0x1B 0db0: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0dc0: 41 47 5f 4e 4f 4e 47 4f 56 5f 41 47 45 4e 43 59 AG_NONGOV_AGENCY 0dd0: 20 20 20 20 20 20 20 30 78 31 43 0a 23 64 65 66 0x1C.#def 0de0: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 53 53 ine GSCIS_TAG_SS 0df0: 4e 5f 44 45 53 49 47 4e 41 54 4f 52 20 20 20 20 N_DESIGNATOR 0e00: 20 20 30 78 31 44 0a 0a 2f 2a 2a 2a 20 50 49 49 0x1D../*** PII 0e10: 20 2d 20 45 46 20 32 31 30 30 20 2a 2a 2a 2f 0a - EF 2100 ***/. 0e20: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0e30: 47 5f 53 53 4e 20 20 20 20 20 20 20 20 20 20 20 G_SSN 0e40: 20 20 20 20 20 20 30 78 32 30 0a 23 64 65 66 69 0x20.#defi 0e50: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 44 4f 42 ne GSCIS_TAG_DOB 0e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0e70: 20 30 78 32 31 0a 23 64 65 66 69 6e 65 20 47 53 0x21.#define GS 0e80: 43 49 53 5f 54 41 47 5f 47 45 4e 44 45 52 20 20 CIS_TAG_GENDER 0e90: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 32 32 0x22 0ea0: 0a 0a 2f 2a 2a 2a 20 4c 6f 67 69 6e 20 49 6e 66 ../*** Login Inf 0eb0: 6f 72 6d 61 74 69 6f 6e 20 2d 20 45 46 20 34 30 ormation - EF 40 0ec0: 30 30 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 00 ***/.#define 0ed0: 47 53 43 49 53 5f 54 41 47 5f 55 53 45 52 49 44 GSCIS_TAG_USERID 0ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 0x 0ef0: 34 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 40.#define GSCIS 0f00: 5f 54 41 47 5f 44 4f 4d 41 49 4e 20 20 20 20 20 _TAG_DOMAIN 0f10: 20 20 20 20 20 20 20 20 20 30 78 34 31 0a 23 64 0x41.#d 0f20: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0f30: 50 41 53 53 57 4f 52 44 20 20 20 20 20 20 20 20 PASSWORD 0f40: 20 20 20 20 30 78 34 32 0a 0a 2f 2a 2a 2a 20 43 0x42../*** C 0f50: 61 72 64 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 ard Information 0f60: 2d 20 45 46 20 35 30 30 30 20 2a 2a 2a 2f 0a 23 - EF 5000 ***/.# 0f70: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0f80: 5f 49 53 53 55 45 52 49 44 20 20 20 20 20 20 20 _ISSUERID 0f90: 20 20 20 20 20 30 78 35 30 0a 23 64 65 66 69 6e 0x50.#defin 0fa0: 65 20 47 53 43 49 53 5f 54 41 47 5f 53 45 52 4e e GSCIS_TAG_SERN 0fb0: 4f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 O 0fc0: 30 78 35 31 0a 23 64 65 66 69 6e 65 20 47 53 43 0x51.#define GSC 0fd0: 49 53 5f 54 41 47 5f 49 53 53 55 45 5f 44 41 54 IS_TAG_ISSUE_DAT 0fe0: 45 20 20 20 20 20 20 20 20 20 20 30 78 35 32 0a E 0x52. 0ff0: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 1000: 47 5f 45 58 50 49 52 45 5f 44 41 54 45 20 20 20 G_EXPIRE_DATE 1010: 20 20 20 20 20 20 30 78 35 33 0a 23 64 65 66 69 0x53.#defi 1020: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 ne GSCIS_TAG_CAR 1030: 44 5f 54 59 50 45 20 20 20 20 20 20 20 20 20 20 D_TYPE 1040: 20 30 78 35 34 0a 23 64 65 66 69 6e 65 20 47 53 0x54.#define GS 1050: 43 49 53 5f 54 41 47 5f 53 45 43 55 52 49 54 59 CIS_TAG_SECURITY 1060: 5f 43 4f 44 45 20 20 20 20 20 20 20 30 78 35 37 _CODE 0x57 1070: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 1080: 41 47 5f 43 41 52 44 49 44 5f 41 49 44 20 20 20 AG_CARDID_AID 1090: 20 20 20 20 20 20 20 30 78 35 38 0a 0a 2f 2a 2a 0x58../** 10a0: 2a 20 50 4b 49 20 49 6e 66 6f 72 6d 61 74 69 6f * PKI Informatio 10b0: 6e 20 2d 20 45 46 20 37 30 30 30 20 2a 2a 2a 2f n - EF 7000 ***/ 10c0: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 10d0: 41 47 5f 43 45 52 54 49 46 49 43 41 54 45 20 20 AG_CERTIFICATE 10e0: 20 20 20 20 20 20 20 30 78 37 30 0a 23 64 65 66 0x70.#def 10f0: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45 ine GSCIS_TAG_CE 1100: 52 54 5f 49 53 53 55 45 5f 44 41 54 45 20 20 20 RT_ISSUE_DATE 1110: 20 20 30 78 37 31 0a 23 64 65 66 69 6e 65 20 47 0x71.#define G 1120: 53 43 49 53 5f 54 41 47 5f 43 45 52 54 5f 45 58 SCIS_TAG_CERT_EX 1130: 50 49 52 45 5f 44 41 54 45 20 20 20 20 30 78 37 PIRE_DATE 0x7 1140: 32 0a 0a 2f 2a 2a 20 41 70 70 6c 65 74 20 49 44 2../** Applet ID 1150: 73 20 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 s **/.#define GS 1160: 43 49 53 5f 41 49 44 5f 43 43 43 20 20 20 20 20 CIS_AID_CCC 1170: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 41 30 0xA0 1180: 2c 20 30 78 30 30 2c 20 30 78 30 30 2c 20 30 78 , 0x00, 0x00, 0x 1190: 30 31 2c 20 30 78 31 36 2c 20 30 78 44 42 2c 20 01, 0x16, 0xDB, 11a0: 30 78 30 30 0a 0a 2f 2a 20 4d 61 78 69 6d 75 6d 0x00../* Maximum 11b0: 20 73 69 7a 65 20 6f 66 20 64 61 74 61 20 70 6f size of data po 11c0: 72 74 69 6f 6e 20 6f 66 20 41 50 44 55 73 20 2a rtion of APDUs * 11d0: 2f 0a 2f 2a 2a 20 44 6f 20 6e 6f 74 20 73 65 74 /./** Do not set 11e0: 20 74 68 69 73 20 61 62 6f 76 65 20 32 35 30 20 this above 250 11f0: 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 41 43 4b **/.#define CACK 1200: 45 59 5f 41 50 44 55 5f 4d 54 55 20 20 20 20 20 EY_APDU_MTU 1210: 20 20 20 20 20 20 20 20 20 20 32 35 30 0a 0a 2f 250../ 1220: 2a 20 41 54 52 20 49 66 20 6e 6f 74 20 61 76 61 * ATR If not ava 1230: 69 6c 61 62 6c 65 20 2a 2f 0a 23 69 66 6e 64 65 ilable */.#ifnde 1240: 66 20 4d 41 58 5f 41 54 52 5f 53 49 5a 45 0a 23 f MAX_ATR_SIZE.# 1250: 64 65 66 69 6e 65 20 4d 41 58 5f 41 54 52 5f 53 define MAX_ATR_S 1260: 49 5a 45 20 31 30 32 34 0a 23 65 6e 64 69 66 0a IZE 1024.#endif. 1270: 0a 23 69 66 64 65 66 20 43 41 43 4b 45 59 5f 44 .#ifdef CACKEY_D 1280: 45 42 55 47 0a 23 20 20 69 66 64 65 66 20 48 41 EBUG.# ifdef HA 1290: 56 45 5f 54 49 4d 45 5f 48 0a 23 20 20 20 20 69 VE_TIME_H.# i 12a0: 6e 63 6c 75 64 65 20 3c 74 69 6d 65 2e 68 3e 0a nclude <time.h>. 12b0: 73 74 61 74 69 63 20 74 69 6d 65 5f 74 20 63 61 static time_t ca 12c0: 63 6b 65 79 5f 64 65 62 75 67 5f 73 74 61 72 74 ckey_debug_start 12d0: 5f 74 69 6d 65 20 3d 20 30 3b 0a 23 20 20 20 20 _time = 0;.# 12e0: 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 define CACKEY_DE 12f0: 42 55 47 5f 50 52 49 4e 54 54 49 4d 45 20 7b 20 BUG_PRINTTIME { 1300: 69 66 20 28 63 61 63 6b 65 79 5f 64 65 62 75 67 if (cackey_debug 1310: 5f 73 74 61 72 74 5f 74 69 6d 65 20 3d 3d 20 30 _start_time == 0 1320: 29 20 7b 20 63 61 63 6b 65 79 5f 64 65 62 75 67 ) { cackey_debug 1330: 5f 73 74 61 72 74 5f 74 69 6d 65 20 3d 20 74 69 _start_time = ti 1340: 6d 65 28 4e 55 4c 4c 29 3b 20 7d 3b 20 66 70 72 me(NULL); }; fpr 1350: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 5b 25 intf(stderr, "[% 1360: 6c 75 5d 3a 20 22 2c 20 28 75 6e 73 69 67 6e 65 lu]: ", (unsigne 1370: 64 20 6c 6f 6e 67 29 20 28 74 69 6d 65 28 4e 55 d long) (time(NU 1380: 4c 4c 29 20 2d 20 63 61 63 6b 65 79 5f 64 65 62 LL) - cackey_deb 1390: 75 67 5f 73 74 61 72 74 5f 74 69 6d 65 29 29 3b ug_start_time)); 13a0: 20 7d 0a 23 20 20 65 6c 73 65 0a 23 20 20 20 20 }.# else.# 13b0: 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 define CACKEY_DE 13c0: 42 55 47 5f 50 52 49 4e 54 54 49 4d 45 20 2f 2a BUG_PRINTTIME /* 13d0: 2a 2f 0a 23 20 20 65 6e 64 69 66 0a 0a 23 20 20 */.# endif..# 13e0: 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 define CACKEY_DE 13f0: 42 55 47 5f 50 52 49 4e 54 46 28 78 2e 2e 2e 29 BUG_PRINTF(x...) 1400: 20 7b 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f { CACKEY_DEBUG_ 1410: 50 52 49 4e 54 54 49 4d 45 3b 20 66 70 72 69 6e PRINTTIME; fprin 1420: 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 28 29 tf(stderr, "%s() 1430: 3a 25 69 3a 20 22 2c 20 5f 5f 66 75 6e 63 5f 5f :%i: ", __func__ 1440: 2c 20 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 66 70 72 , __LINE__); fpr 1450: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 78 29 3b intf(stderr, x); 1460: 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c fprintf(stderr, 1470: 20 22 5c 6e 22 29 3b 20 66 66 6c 75 73 68 28 73 "\n"); fflush(s 1480: 74 64 65 72 72 29 3b 20 7d 0a 23 20 20 64 65 66 tderr); }.# def 1490: 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 ine CACKEY_DEBUG 14a0: 5f 50 52 49 4e 54 42 55 46 28 66 2c 20 78 2c 20 _PRINTBUF(f, x, 14b0: 79 29 20 7b 20 75 6e 73 69 67 6e 65 64 20 63 68 y) { unsigned ch 14c0: 61 72 20 2a 54 4d 50 42 55 46 3b 20 75 6e 73 69 ar *TMPBUF; unsi 14d0: 67 6e 65 64 20 6c 6f 6e 67 20 69 64 78 3b 20 54 gned long idx; T 14e0: 4d 50 42 55 46 20 3d 20 28 75 6e 73 69 67 6e 65 MPBUF = (unsigne 14f0: 64 20 63 68 61 72 20 2a 29 20 28 78 29 3b 20 43 d char *) (x); C 1500: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1510: 54 54 49 4d 45 3b 20 66 70 72 69 6e 74 66 28 73 TTIME; fprintf(s 1520: 74 64 65 72 72 2c 20 22 25 73 28 29 3a 25 69 3a tderr, "%s():%i: 1530: 20 25 73 20 20 28 25 73 2f 25 6c 75 20 3d 20 7b %s (%s/%lu = { 1540: 25 30 32 78 22 2c 20 5f 5f 66 75 6e 63 5f 5f 2c %02x", __func__, 1550: 20 5f 5f 4c 49 4e 45 5f 5f 2c 20 66 2c 20 23 78 __LINE__, f, #x 1560: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 1570: 29 20 28 79 29 2c 20 54 4d 50 42 55 46 5b 30 5d ) (y), TMPBUF[0] 1580: 29 3b 20 66 6f 72 20 28 69 64 78 20 3d 20 31 3b ); for (idx = 1; 1590: 20 69 64 78 20 3c 20 28 79 29 3b 20 69 64 78 2b idx < (y); idx+ 15a0: 2b 29 20 7b 20 66 70 72 69 6e 74 66 28 73 74 64 +) { fprintf(std 15b0: 65 72 72 2c 20 22 2c 20 25 30 32 78 22 2c 20 54 err, ", %02x", T 15c0: 4d 50 42 55 46 5b 69 64 78 5d 29 3b 20 7d 3b 20 MPBUF[idx]); }; 15d0: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 fprintf(stderr, 15e0: 22 7d 29 5c 6e 22 29 3b 20 66 66 6c 75 73 68 28 "})\n"); fflush( 15f0: 73 74 64 65 72 72 29 3b 20 7d 0a 23 20 20 64 65 stderr); }.# de 1600: 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 fine CACKEY_DEBU 1610: 47 5f 50 45 52 52 4f 52 28 78 29 20 7b 20 66 70 G_PERROR(x) { fp 1620: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 rintf(stderr, "% 1630: 73 28 29 3a 25 69 3a 20 22 2c 20 5f 5f 66 75 6e s():%i: ", __fun 1640: 63 5f 5f 2c 20 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 c__, __LINE__); 1650: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1660: 4e 54 54 49 4d 45 3b 20 70 65 72 72 6f 72 28 78 NTTIME; perror(x 1670: 29 3b 20 66 66 6c 75 73 68 28 73 74 64 65 72 72 ); fflush(stderr 1680: 29 3b 20 7d 0a 23 20 20 64 65 66 69 6e 65 20 66 ); }.# define f 1690: 72 65 65 28 78 29 20 7b 20 43 41 43 4b 45 59 5f ree(x) { CACKEY_ 16a0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 52 DEBUG_PRINTF("FR 16b0: 45 45 28 25 70 29 20 28 25 73 29 22 2c 20 78 2c EE(%p) (%s)", x, 16c0: 20 23 78 29 3b 20 66 72 65 65 28 78 29 3b 20 7d #x); free(x); } 16d0: 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 2a 43 ..static void *C 16e0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC 16f0: 5f 4d 41 4c 4c 4f 43 28 73 69 7a 65 5f 74 20 73 _MALLOC(size_t s 1700: 69 7a 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 ize, const char 1710: 2a 66 75 6e 63 2c 20 69 6e 74 20 6c 69 6e 65 29 *func, int line) 1720: 20 7b 0a 09 76 6f 69 64 20 2a 72 65 74 76 61 6c {..void *retval 1730: 3b 0a 0a 09 72 65 74 76 61 6c 20 3d 20 6d 61 6c ;...retval = mal 1740: 6c 6f 63 28 73 69 7a 65 29 3b 0a 0a 09 43 41 43 loc(size);...CAC 1750: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 54 KEY_DEBUG_PRINTT 1760: 49 4d 45 3b 0a 09 66 70 72 69 6e 74 66 28 73 74 IME;..fprintf(st 1770: 64 65 72 72 2c 20 22 25 73 28 29 3a 25 69 3a 20 derr, "%s():%i: 1780: 22 2c 20 66 75 6e 63 2c 20 6c 69 6e 65 29 3b 0a ", func, line);. 1790: 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c .fprintf(stderr, 17a0: 20 22 4d 41 4c 4c 4f 43 28 29 20 3d 20 25 70 22 "MALLOC() = %p" 17b0: 2c 20 72 65 74 76 61 6c 29 3b 0a 09 66 70 72 69 , retval);..fpri 17c0: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 5c 6e 22 ntf(stderr, "\n" 17d0: 29 3b 0a 09 66 66 6c 75 73 68 28 73 74 64 65 72 );..fflush(stder 17e0: 72 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 r);...return(ret 17f0: 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 val);.}..static 1800: 76 6f 69 64 20 2a 43 41 43 4b 45 59 5f 44 45 42 void *CACKEY_DEB 1810: 55 47 5f 46 55 4e 43 5f 52 45 41 4c 4c 4f 43 28 UG_FUNC_REALLOC( 1820: 76 6f 69 64 20 2a 70 74 72 2c 20 73 69 7a 65 5f void *ptr, size_ 1830: 74 20 73 69 7a 65 2c 20 63 6f 6e 73 74 20 63 68 t size, const ch 1840: 61 72 20 2a 66 75 6e 63 2c 20 69 6e 74 20 6c 69 ar *func, int li 1850: 6e 65 29 20 7b 0a 09 76 6f 69 64 20 2a 72 65 74 ne) {..void *ret 1860: 76 61 6c 3b 0a 0a 09 72 65 74 76 61 6c 20 3d 20 val;...retval = 1870: 72 65 61 6c 6c 6f 63 28 70 74 72 2c 20 73 69 7a realloc(ptr, siz 1880: 65 29 3b 0a 0a 09 69 66 20 28 72 65 74 76 61 6c e);...if (retval 1890: 20 21 3d 20 70 74 72 29 20 7b 0a 09 09 43 41 43 != ptr) {...CAC 18a0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 54 KEY_DEBUG_PRINTT 18b0: 49 4d 45 3b 0a 09 09 66 70 72 69 6e 74 66 28 73 IME;...fprintf(s 18c0: 74 64 65 72 72 2c 20 22 25 73 28 29 3a 25 69 3a tderr, "%s():%i: 18d0: 20 22 2c 20 66 75 6e 63 2c 20 6c 69 6e 65 29 3b ", func, line); 18e0: 0a 09 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 ...fprintf(stder 18f0: 72 2c 20 22 52 45 41 4c 4c 4f 43 28 25 70 29 20 r, "REALLOC(%p) 1900: 3d 20 25 70 22 2c 20 70 74 72 2c 20 72 65 74 76 = %p", ptr, retv 1910: 61 6c 29 3b 0a 09 09 66 70 72 69 6e 74 66 28 73 al);...fprintf(s 1920: 74 64 65 72 72 2c 20 22 5c 6e 22 29 3b 0a 09 09 tderr, "\n");... 1930: 66 66 6c 75 73 68 28 73 74 64 65 72 72 29 3b 0a fflush(stderr);. 1940: 09 7d 0a 0a 09 69 66 20 28 72 65 74 76 61 6c 20 .}...if (retval 1950: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 1960: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1970: 28 22 20 2a 2a 2a 20 45 52 52 4f 52 20 2a 2a 2a (" *** ERROR *** 1980: 20 72 65 61 6c 6c 6f 63 20 72 65 74 75 72 6e 65 realloc returne 1990: 64 20 4e 55 4c 4c 20 28 73 69 7a 65 20 3d 20 25 d NULL (size = % 19a0: 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 lu)", (unsigned 19b0: 6c 6f 6e 67 29 20 73 69 7a 65 29 3b 0a 09 7d 0a long) size);..}. 19c0: 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 ..return(retval) 19d0: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63 68 61 72 ;.}..static char 19e0: 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 *CACKEY_DEBUG_F 19f0: 55 4e 43 5f 53 54 52 44 55 50 28 63 6f 6e 73 74 UNC_STRDUP(const 1a00: 20 63 68 61 72 20 2a 70 74 72 2c 20 63 6f 6e 73 char *ptr, cons 1a10: 74 20 63 68 61 72 20 2a 66 75 6e 63 2c 20 69 6e t char *func, in 1a20: 74 20 6c 69 6e 65 29 20 7b 0a 09 63 68 61 72 20 t line) {..char 1a30: 2a 72 65 74 76 61 6c 3b 0a 0a 09 72 65 74 76 61 *retval;...retva 1a40: 6c 20 3d 20 73 74 72 64 75 70 28 70 74 72 29 3b l = strdup(ptr); 1a50: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1a60: 50 52 49 4e 54 54 49 4d 45 3b 0a 09 66 70 72 69 PRINTTIME;..fpri 1a70: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 28 ntf(stderr, "%s( 1a80: 29 3a 25 69 3a 20 22 2c 20 66 75 6e 63 2c 20 6c ):%i: ", func, l 1a90: 69 6e 65 29 3b 0a 09 66 70 72 69 6e 74 66 28 73 ine);..fprintf(s 1aa0: 74 64 65 72 72 2c 20 22 53 54 52 44 55 50 5f 4d tderr, "STRDUP_M 1ab0: 41 4c 4c 4f 43 28 29 20 3d 20 25 70 22 2c 20 72 ALLOC() = %p", r 1ac0: 65 74 76 61 6c 29 3b 0a 09 66 70 72 69 6e 74 66 etval);..fprintf 1ad0: 28 73 74 64 65 72 72 2c 20 22 5c 6e 22 29 3b 0a (stderr, "\n");. 1ae0: 09 66 66 6c 75 73 68 28 73 74 64 65 72 72 29 3b .fflush(stderr); 1af0: 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c ...return(retval 1b00: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63 6f 6e );.}..static con 1b10: 73 74 20 63 68 61 72 20 2a 43 41 43 4b 45 59 5f st char *CACKEY_ 1b20: 44 45 42 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54 DEBUG_FUNC_TAG_T 1b30: 4f 5f 53 54 52 28 75 6e 73 69 67 6e 65 64 20 63 O_STR(unsigned c 1b40: 68 61 72 20 74 61 67 29 20 7b 0a 09 73 77 69 74 har tag) {..swit 1b50: 63 68 20 28 74 61 67 29 20 7b 0a 09 09 63 61 73 ch (tag) {...cas 1b60: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 e GSCIS_TAG_CARD 1b70: 49 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 ID:....return("G 1b80: 53 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44 22 SCIS_TAG_CARDID" 1b90: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 1ba0: 54 41 47 5f 43 43 43 5f 56 45 52 3a 0a 09 09 09 TAG_CCC_VER:.... 1bb0: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1bc0: 47 5f 43 43 43 5f 56 45 52 22 29 3b 0a 09 09 63 G_CCC_VER");...c 1bd0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 43 ase GSCIS_TAG_CC 1be0: 47 5f 56 45 52 3a 0a 09 09 09 72 65 74 75 72 6e G_VER:....return 1bf0: 28 22 47 53 43 49 53 5f 54 41 47 5f 43 43 47 5f ("GSCIS_TAG_CCG_ 1c00: 56 45 52 22 29 3b 0a 09 09 63 61 73 65 20 47 53 VER");...case GS 1c10: 43 49 53 5f 54 41 47 5f 43 41 52 44 55 52 4c 3a CIS_TAG_CARDURL: 1c20: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 1c30: 53 5f 54 41 47 5f 43 41 52 44 55 52 4c 22 29 3b S_TAG_CARDURL"); 1c40: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 1c50: 47 5f 50 4b 43 53 31 35 3a 0a 09 09 09 72 65 74 G_PKCS15:....ret 1c60: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 50 urn("GSCIS_TAG_P 1c70: 4b 43 53 31 35 22 29 3b 0a 09 09 63 61 73 65 20 KCS15");...case 1c80: 47 53 43 49 53 5f 54 41 47 5f 52 45 47 5f 44 41 GSCIS_TAG_REG_DA 1c90: 54 41 5f 4d 4f 44 45 4c 3a 0a 09 09 09 72 65 74 TA_MODEL:....ret 1ca0: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 52 urn("GSCIS_TAG_R 1cb0: 45 47 5f 44 41 54 41 5f 4d 4f 44 45 4c 22 29 3b EG_DATA_MODEL"); 1cc0: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 1cd0: 47 5f 41 43 52 5f 54 41 42 4c 45 3a 0a 09 09 09 G_ACR_TABLE:.... 1ce0: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1cf0: 47 5f 41 43 52 5f 54 41 42 4c 45 22 29 3b 0a 09 G_ACR_TABLE");.. 1d00: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 1d10: 43 41 52 44 5f 41 50 44 55 3a 0a 09 09 09 72 65 CARD_APDU:....re 1d20: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1d30: 43 41 52 44 5f 41 50 44 55 22 29 3b 0a 09 09 63 CARD_APDU");...c 1d40: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 52 45 ase GSCIS_TAG_RE 1d50: 44 49 52 45 43 54 49 4f 4e 3a 0a 09 09 09 72 65 DIRECTION:....re 1d60: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1d70: 52 45 44 49 52 45 43 54 49 4f 4e 22 29 3b 0a 09 REDIRECTION");.. 1d80: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 1d90: 43 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 CT:....return("G 1da0: 53 43 49 53 5f 54 41 47 5f 43 54 22 29 3b 0a 09 SCIS_TAG_CT");.. 1db0: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 1dc0: 53 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 ST:....return("G 1dd0: 53 43 49 53 5f 54 41 47 5f 53 54 22 29 3b 0a 09 SCIS_TAG_ST");.. 1de0: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 1df0: 4e 45 58 54 43 43 43 3a 0a 09 09 09 72 65 74 75 NEXTCCC:....retu 1e00: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4e 45 rn("GSCIS_TAG_NE 1e10: 58 54 43 43 43 22 29 3b 0a 09 09 63 61 73 65 20 XTCCC");...case 1e20: 47 53 43 49 53 5f 54 41 47 5f 46 4e 41 4d 45 3a GSCIS_TAG_FNAME: 1e30: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 1e40: 53 5f 54 41 47 5f 46 4e 41 4d 45 22 29 3b 0a 09 S_TAG_FNAME");.. 1e50: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 1e60: 4d 4e 41 4d 45 3a 0a 09 09 09 72 65 74 75 72 6e MNAME:....return 1e70: 28 22 47 53 43 49 53 5f 54 41 47 5f 4d 4e 41 4d ("GSCIS_TAG_MNAM 1e80: 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 E");...case GSCI 1e90: 53 5f 54 41 47 5f 4c 4e 41 4d 45 3a 0a 09 09 09 S_TAG_LNAME:.... 1ea0: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1eb0: 47 5f 4c 4e 41 4d 45 22 29 3b 0a 09 09 63 61 73 G_LNAME");...cas 1ec0: 65 20 47 53 43 49 53 5f 54 41 47 5f 53 55 46 46 e GSCIS_TAG_SUFF 1ed0: 49 58 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 IX:....return("G 1ee0: 53 43 49 53 5f 54 41 47 5f 53 55 46 46 49 58 22 SCIS_TAG_SUFFIX" 1ef0: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 1f00: 54 41 47 5f 47 4f 56 54 5f 41 47 45 4e 43 59 3a TAG_GOVT_AGENCY: 1f10: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 1f20: 53 5f 54 41 47 5f 47 4f 56 54 5f 41 47 45 4e 43 S_TAG_GOVT_AGENC 1f30: 59 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 Y");...case GSCI 1f40: 53 5f 54 41 47 5f 42 55 52 45 41 55 3a 0a 09 09 S_TAG_BUREAU:... 1f50: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 1f60: 41 47 5f 42 55 52 45 41 55 22 29 3b 0a 09 09 63 AG_BUREAU");...c 1f70: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 ase GSCIS_TAG_BU 1f80: 52 45 41 55 5f 43 4f 44 45 3a 0a 09 09 09 72 65 REAU_CODE:....re 1f90: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1fa0: 42 55 52 45 41 55 5f 43 4f 44 45 22 29 3b 0a 09 BUREAU_CODE");.. 1fb0: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 1fc0: 44 45 50 54 5f 43 4f 44 45 3a 0a 09 09 09 72 65 DEPT_CODE:....re 1fd0: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 1fe0: 44 45 50 54 5f 43 4f 44 45 22 29 3b 0a 09 09 63 DEPT_CODE");...c 1ff0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 54 49 ase GSCIS_TAG_TI 2000: 54 4c 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 TLE:....return(" 2010: 47 53 43 49 53 5f 54 41 47 5f 54 49 54 4c 45 22 GSCIS_TAG_TITLE" 2020: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 2030: 54 41 47 5f 42 55 49 4c 44 49 4e 47 3a 0a 09 09 TAG_BUILDING:... 2040: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 2050: 41 47 5f 42 55 49 4c 44 49 4e 47 22 29 3b 0a 09 AG_BUILDING");.. 2060: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 2070: 4f 46 46 49 43 45 5f 41 44 44 52 31 3a 0a 09 09 OFFICE_ADDR1:... 2080: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 2090: 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 31 22 AG_OFFICE_ADDR1" 20a0: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 20b0: 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 32 TAG_OFFICE_ADDR2 20c0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 20d0: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 IS_TAG_OFFICE_AD 20e0: 44 52 32 22 29 3b 0a 09 09 63 61 73 65 20 47 53 DR2");...case GS 20f0: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 43 CIS_TAG_OFFICE_C 2100: 49 54 59 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 ITY:....return(" 2110: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 2120: 5f 43 49 54 59 22 29 3b 0a 09 09 63 61 73 65 20 _CITY");...case 2130: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 2140: 5f 53 54 41 54 45 3a 0a 09 09 09 72 65 74 75 72 _STATE:....retur 2150: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 n("GSCIS_TAG_OFF 2160: 49 43 45 5f 53 54 41 54 45 22 29 3b 0a 09 09 63 ICE_STATE");...c 2170: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 ase GSCIS_TAG_OF 2180: 46 49 43 45 5f 5a 49 50 3a 0a 09 09 09 72 65 74 FICE_ZIP:....ret 2190: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f urn("GSCIS_TAG_O 21a0: 46 46 49 43 45 5f 5a 49 50 22 29 3b 0a 09 09 63 FFICE_ZIP");...c 21b0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 ase GSCIS_TAG_OF 21c0: 46 49 43 45 5f 43 4f 55 4e 54 52 59 3a 0a 09 09 FICE_COUNTRY:... 21d0: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 21e0: 41 47 5f 4f 46 46 49 43 45 5f 43 4f 55 4e 54 52 AG_OFFICE_COUNTR 21f0: 59 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 Y");...case GSCI 2200: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 4f S_TAG_OFFICE_PHO 2210: 4e 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 NE:....return("G 2220: 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f SCIS_TAG_OFFICE_ 2230: 50 48 4f 4e 45 22 29 3b 0a 09 09 63 61 73 65 20 PHONE");...case 2240: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 2250: 5f 50 48 4f 4e 45 5f 45 58 54 3a 0a 09 09 09 72 _PHONE_EXT:....r 2260: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 2270: 5f 4f 46 46 49 43 45 5f 50 48 4f 4e 45 5f 45 58 _OFFICE_PHONE_EX 2280: 54 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 T");...case GSCI 2290: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 46 41 58 S_TAG_OFFICE_FAX 22a0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 22b0: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 46 41 IS_TAG_OFFICE_FA 22c0: 58 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 X");...case GSCI 22d0: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 45 4d 41 S_TAG_OFFICE_EMA 22e0: 49 4c 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 IL:....return("G 22f0: 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f SCIS_TAG_OFFICE_ 2300: 45 4d 41 49 4c 22 29 3b 0a 09 09 63 61 73 65 20 EMAIL");...case 2310: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 2320: 5f 52 4f 4f 4d 3a 0a 09 09 09 72 65 74 75 72 6e _ROOM:....return 2330: 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 ("GSCIS_TAG_OFFI 2340: 43 45 5f 52 4f 4f 4d 22 29 3b 0a 09 09 63 61 73 CE_ROOM");...cas 2350: 65 20 47 53 43 49 53 5f 54 41 47 5f 4e 4f 4e 47 e GSCIS_TAG_NONG 2360: 4f 56 5f 41 47 45 4e 43 59 3a 0a 09 09 09 72 65 OV_AGENCY:....re 2370: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 2380: 4e 4f 4e 47 4f 56 5f 41 47 45 4e 43 59 22 29 3b NONGOV_AGENCY"); 2390: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 23a0: 47 5f 53 53 4e 5f 44 45 53 49 47 4e 41 54 4f 52 G_SSN_DESIGNATOR 23b0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 23c0: 49 53 5f 54 41 47 5f 53 53 4e 5f 44 45 53 49 47 IS_TAG_SSN_DESIG 23d0: 4e 41 54 4f 52 22 29 3b 0a 09 09 63 61 73 65 20 NATOR");...case 23e0: 47 53 43 49 53 5f 54 41 47 5f 53 53 4e 3a 0a 09 GSCIS_TAG_SSN:.. 23f0: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 2400: 54 41 47 5f 53 53 4e 22 29 3b 0a 09 09 63 61 73 TAG_SSN");...cas 2410: 65 20 47 53 43 49 53 5f 54 41 47 5f 44 4f 42 3a e GSCIS_TAG_DOB: 2420: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 2430: 53 5f 54 41 47 5f 44 4f 42 22 29 3b 0a 09 09 63 S_TAG_DOB");...c 2440: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 47 45 ase GSCIS_TAG_GE 2450: 4e 44 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 NDER:....return( 2460: 22 47 53 43 49 53 5f 54 41 47 5f 47 45 4e 44 45 "GSCIS_TAG_GENDE 2470: 52 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 R");...case GSCI 2480: 53 5f 54 41 47 5f 55 53 45 52 49 44 3a 0a 09 09 S_TAG_USERID:... 2490: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 24a0: 41 47 5f 55 53 45 52 49 44 22 29 3b 0a 09 09 63 AG_USERID");...c 24b0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 44 4f ase GSCIS_TAG_DO 24c0: 4d 41 49 4e 3a 0a 09 09 09 72 65 74 75 72 6e 28 MAIN:....return( 24d0: 22 47 53 43 49 53 5f 54 41 47 5f 44 4f 4d 41 49 "GSCIS_TAG_DOMAI 24e0: 4e 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 N");...case GSCI 24f0: 53 5f 54 41 47 5f 50 41 53 53 57 4f 52 44 3a 0a S_TAG_PASSWORD:. 2500: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 2510: 5f 54 41 47 5f 50 41 53 53 57 4f 52 44 22 29 3b _TAG_PASSWORD"); 2520: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 2530: 47 5f 49 53 53 55 45 52 49 44 3a 0a 09 09 09 72 G_ISSUERID:....r 2540: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 2550: 5f 49 53 53 55 45 52 49 44 22 29 3b 0a 09 09 63 _ISSUERID");...c 2560: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 53 45 ase GSCIS_TAG_SE 2570: 52 4e 4f 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 RNO:....return(" 2580: 47 53 43 49 53 5f 54 41 47 5f 53 45 52 4e 4f 22 GSCIS_TAG_SERNO" 2590: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 25a0: 54 41 47 5f 49 53 53 55 45 5f 44 41 54 45 3a 0a TAG_ISSUE_DATE:. 25b0: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 25c0: 5f 54 41 47 5f 49 53 53 55 45 5f 44 41 54 45 22 _TAG_ISSUE_DATE" 25d0: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 25e0: 54 41 47 5f 45 58 50 49 52 45 5f 44 41 54 45 3a TAG_EXPIRE_DATE: 25f0: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 2600: 53 5f 54 41 47 5f 45 58 50 49 52 45 5f 44 41 54 S_TAG_EXPIRE_DAT 2610: 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 E");...case GSCI 2620: 53 5f 54 41 47 5f 43 41 52 44 5f 54 59 50 45 3a S_TAG_CARD_TYPE: 2630: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 2640: 53 5f 54 41 47 5f 43 41 52 44 5f 54 59 50 45 22 S_TAG_CARD_TYPE" 2650: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 2660: 54 41 47 5f 53 45 43 55 52 49 54 59 5f 43 4f 44 TAG_SECURITY_COD 2670: 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 E:....return("GS 2680: 43 49 53 5f 54 41 47 5f 53 45 43 55 52 49 54 59 CIS_TAG_SECURITY 2690: 5f 43 4f 44 45 22 29 3b 0a 09 09 63 61 73 65 20 _CODE");...case 26a0: 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44 GSCIS_TAG_CARDID 26b0: 5f 41 49 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 _AID:....return( 26c0: 22 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 49 "GSCIS_TAG_CARDI 26d0: 44 5f 41 49 44 22 29 3b 0a 09 09 63 61 73 65 20 D_AID");...case 26e0: 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 49 46 GSCIS_TAG_CERTIF 26f0: 49 43 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e ICATE:....return 2700: 28 22 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 ("GSCIS_TAG_CERT 2710: 49 46 49 43 41 54 45 22 29 3b 0a 09 09 63 61 73 IFICATE");...cas 2720: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 e GSCIS_TAG_CERT 2730: 5f 49 53 53 55 45 5f 44 41 54 45 3a 0a 09 09 09 _ISSUE_DATE:.... 2740: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 2750: 47 5f 43 45 52 54 5f 49 53 53 55 45 5f 44 41 54 G_CERT_ISSUE_DAT 2760: 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 E");...case GSCI 2770: 53 5f 54 41 47 5f 43 45 52 54 5f 45 58 50 49 52 S_TAG_CERT_EXPIR 2780: 45 5f 44 41 54 45 3a 0a 09 09 09 72 65 74 75 72 E_DATE:....retur 2790: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 43 45 52 n("GSCIS_TAG_CER 27a0: 54 5f 45 58 50 49 52 45 5f 44 41 54 45 22 29 3b T_EXPIRE_DATE"); 27b0: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 22 55 4e ..}...return("UN 27c0: 4b 4e 4f 57 4e 22 29 3b 0a 7d 0a 0a 73 74 61 74 KNOWN");.}..stat 27d0: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 43 ic const char *C 27e0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC 27f0: 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 _SCARDERR_TO_STR 2800: 28 4c 4f 4e 47 20 72 65 74 63 6f 64 65 29 20 7b (LONG retcode) { 2810: 0a 09 73 77 69 74 63 68 20 28 72 65 74 63 6f 64 ..switch (retcod 2820: 65 29 20 7b 0a 09 09 63 61 73 65 20 53 43 41 52 e) {...case SCAR 2830: 44 5f 53 5f 53 55 43 43 45 53 53 3a 0a 09 09 09 D_S_SUCCESS:.... 2840: 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 53 5f return("SCARD_S_ 2850: 53 55 43 43 45 53 53 22 29 3b 0a 09 09 63 61 73 SUCCESS");...cas 2860: 65 20 53 43 41 52 44 5f 45 5f 43 41 4e 43 45 4c e SCARD_E_CANCEL 2870: 4c 45 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 LED:....return(" 2880: 53 43 41 52 44 5f 45 5f 43 41 4e 43 45 4c 4c 45 SCARD_E_CANCELLE 2890: 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 D");...case SCAR 28a0: 44 5f 45 5f 43 41 4e 54 5f 44 49 53 50 4f 53 45 D_E_CANT_DISPOSE 28b0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 :....return("SCA 28c0: 52 44 5f 45 5f 43 41 4e 54 5f 44 49 53 50 4f 53 RD_E_CANT_DISPOS 28d0: 45 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 E");...case SCAR 28e0: 44 5f 45 5f 49 4e 53 55 46 46 49 43 49 45 4e 54 D_E_INSUFFICIENT 28f0: 5f 42 55 46 46 45 52 3a 0a 09 09 09 72 65 74 75 _BUFFER:....retu 2900: 72 6e 28 22 53 43 41 52 44 5f 45 5f 49 4e 53 55 rn("SCARD_E_INSU 2910: 46 46 49 43 49 45 4e 54 5f 42 55 46 46 45 52 22 FFICIENT_BUFFER" 2920: 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f );...case SCARD_ 2930: 45 5f 49 4e 56 41 4c 49 44 5f 41 54 52 3a 0a 09 E_INVALID_ATR:.. 2940: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 2950: 45 5f 49 4e 56 41 4c 49 44 5f 41 54 52 22 29 3b E_INVALID_ATR"); 2960: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 2970: 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 3a 0a INVALID_HANDLE:. 2980: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2990: 5f 45 5f 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c _E_INVALID_HANDL 29a0: 45 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 E");...case SCAR 29b0: 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 50 41 52 41 D_E_INVALID_PARA 29c0: 4d 45 54 45 52 3a 0a 09 09 09 72 65 74 75 72 6e METER:....return 29d0: 28 22 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 ("SCARD_E_INVALI 29e0: 44 5f 50 41 52 41 4d 45 54 45 52 22 29 3b 0a 09 D_PARAMETER");.. 29f0: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 49 4e .case SCARD_E_IN 2a00: 56 41 4c 49 44 5f 54 41 52 47 45 54 3a 0a 09 09 VALID_TARGET:... 2a10: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 2a20: 5f 49 4e 56 41 4c 49 44 5f 54 41 52 47 45 54 22 _INVALID_TARGET" 2a30: 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f );...case SCARD_ 2a40: 45 5f 49 4e 56 41 4c 49 44 5f 56 41 4c 55 45 3a E_INVALID_VALUE: 2a50: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 2a60: 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 56 41 4c 55 D_E_INVALID_VALU 2a70: 45 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 E");...case SCAR 2a80: 44 5f 45 5f 4e 4f 5f 4d 45 4d 4f 52 59 3a 0a 09 D_E_NO_MEMORY:.. 2a90: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 2aa0: 45 5f 4e 4f 5f 4d 45 4d 4f 52 59 22 29 3b 0a 09 E_NO_MEMORY");.. 2ab0: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 55 4e .case SCARD_E_UN 2ac0: 4b 4e 4f 57 4e 5f 52 45 41 44 45 52 3a 0a 09 09 KNOWN_READER:... 2ad0: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 2ae0: 5f 55 4e 4b 4e 4f 57 4e 5f 52 45 41 44 45 52 22 _UNKNOWN_READER" 2af0: 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f );...case SCARD_ 2b00: 45 5f 54 49 4d 45 4f 55 54 3a 0a 09 09 09 72 65 E_TIMEOUT:....re 2b10: 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 54 49 turn("SCARD_E_TI 2b20: 4d 45 4f 55 54 22 29 3b 0a 09 09 63 61 73 65 20 MEOUT");...case 2b30: 53 43 41 52 44 5f 45 5f 53 48 41 52 49 4e 47 5f SCARD_E_SHARING_ 2b40: 56 49 4f 4c 41 54 49 4f 4e 3a 0a 09 09 09 72 65 VIOLATION:....re 2b50: 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 53 48 turn("SCARD_E_SH 2b60: 41 52 49 4e 47 5f 56 49 4f 4c 41 54 49 4f 4e 22 ARING_VIOLATION" 2b70: 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f );...case SCARD_ 2b80: 45 5f 4e 4f 5f 53 4d 41 52 54 43 41 52 44 3a 0a E_NO_SMARTCARD:. 2b90: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2ba0: 5f 45 5f 4e 4f 5f 53 4d 41 52 54 43 41 52 44 22 _E_NO_SMARTCARD" 2bb0: 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f );...case SCARD_ 2bc0: 45 5f 55 4e 4b 4e 4f 57 4e 5f 43 41 52 44 3a 0a E_UNKNOWN_CARD:. 2bd0: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2be0: 5f 45 5f 55 4e 4b 4e 4f 57 4e 5f 43 41 52 44 22 _E_UNKNOWN_CARD" 2bf0: 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f );...case SCARD_ 2c00: 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 E_PROTO_MISMATCH 2c10: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 :....return("SCA 2c20: 52 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 RD_E_PROTO_MISMA 2c30: 54 43 48 22 29 3b 0a 09 09 63 61 73 65 20 53 43 TCH");...case SC 2c40: 41 52 44 5f 45 5f 4e 4f 54 5f 52 45 41 44 59 3a ARD_E_NOT_READY: 2c50: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 2c60: 44 5f 45 5f 4e 4f 54 5f 52 45 41 44 59 22 29 3b D_E_NOT_READY"); 2c70: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 2c80: 53 59 53 54 45 4d 5f 43 41 4e 43 45 4c 4c 45 44 SYSTEM_CANCELLED 2c90: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 :....return("SCA 2ca0: 52 44 5f 45 5f 53 59 53 54 45 4d 5f 43 41 4e 43 RD_E_SYSTEM_CANC 2cb0: 45 4c 4c 45 44 22 29 3b 0a 09 09 63 61 73 65 20 ELLED");...case 2cc0: 53 43 41 52 44 5f 45 5f 4e 4f 54 5f 54 52 41 4e SCARD_E_NOT_TRAN 2cd0: 53 41 43 54 45 44 3a 0a 09 09 09 72 65 74 75 72 SACTED:....retur 2ce0: 6e 28 22 53 43 41 52 44 5f 45 5f 4e 4f 54 5f 54 n("SCARD_E_NOT_T 2cf0: 52 41 4e 53 41 43 54 45 44 22 29 3b 0a 09 09 63 RANSACTED");...c 2d00: 61 73 65 20 53 43 41 52 44 5f 45 5f 52 45 41 44 ase SCARD_E_READ 2d10: 45 52 5f 55 4e 41 56 41 49 4c 41 42 4c 45 3a 0a ER_UNAVAILABLE:. 2d20: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2d30: 5f 45 5f 52 45 41 44 45 52 5f 55 4e 41 56 41 49 _E_READER_UNAVAI 2d40: 4c 41 42 4c 45 22 29 3b 0a 09 09 63 61 73 65 20 LABLE");...case 2d50: 53 43 41 52 44 5f 57 5f 55 4e 53 55 50 50 4f 52 SCARD_W_UNSUPPOR 2d60: 54 45 44 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 TED_CARD:....ret 2d70: 75 72 6e 28 22 53 43 41 52 44 5f 57 5f 55 4e 53 urn("SCARD_W_UNS 2d80: 55 50 50 4f 52 54 45 44 5f 43 41 52 44 22 29 3b UPPORTED_CARD"); 2d90: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 57 5f ...case SCARD_W_ 2da0: 55 4e 52 45 53 50 4f 4e 53 49 56 45 5f 43 41 52 UNRESPONSIVE_CAR 2db0: 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 D:....return("SC 2dc0: 41 52 44 5f 57 5f 55 4e 52 45 53 50 4f 4e 53 49 ARD_W_UNRESPONSI 2dd0: 56 45 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 VE_CARD");...cas 2de0: 65 20 53 43 41 52 44 5f 57 5f 55 4e 50 4f 57 45 e SCARD_W_UNPOWE 2df0: 52 45 44 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 RED_CARD:....ret 2e00: 75 72 6e 28 22 53 43 41 52 44 5f 57 5f 55 4e 50 urn("SCARD_W_UNP 2e10: 4f 57 45 52 45 44 5f 43 41 52 44 22 29 3b 0a 09 OWERED_CARD");.. 2e20: 09 63 61 73 65 20 53 43 41 52 44 5f 57 5f 52 45 .case SCARD_W_RE 2e30: 53 45 54 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 SET_CARD:....ret 2e40: 75 72 6e 28 22 53 43 41 52 44 5f 57 5f 52 45 53 urn("SCARD_W_RES 2e50: 45 54 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 ET_CARD");...cas 2e60: 65 20 53 43 41 52 44 5f 57 5f 52 45 4d 4f 56 45 e SCARD_W_REMOVE 2e70: 44 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 D_CARD:....retur 2e80: 6e 28 22 53 43 41 52 44 5f 57 5f 52 45 4d 4f 56 n("SCARD_W_REMOV 2e90: 45 44 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 ED_CARD");...cas 2ea0: 65 20 53 43 41 52 44 5f 45 5f 50 43 49 5f 54 4f e SCARD_E_PCI_TO 2eb0: 4f 5f 53 4d 41 4c 4c 3a 0a 09 09 09 72 65 74 75 O_SMALL:....retu 2ec0: 72 6e 28 22 53 43 41 52 44 5f 45 5f 50 43 49 5f rn("SCARD_E_PCI_ 2ed0: 54 4f 4f 5f 53 4d 41 4c 4c 22 29 3b 0a 09 09 63 TOO_SMALL");...c 2ee0: 61 73 65 20 53 43 41 52 44 5f 45 5f 52 45 41 44 ase SCARD_E_READ 2ef0: 45 52 5f 55 4e 53 55 50 50 4f 52 54 45 44 3a 0a ER_UNSUPPORTED:. 2f00: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2f10: 5f 45 5f 52 45 41 44 45 52 5f 55 4e 53 55 50 50 _E_READER_UNSUPP 2f20: 4f 52 54 45 44 22 29 3b 0a 09 09 63 61 73 65 20 ORTED");...case 2f30: 53 43 41 52 44 5f 45 5f 44 55 50 4c 49 43 41 54 SCARD_E_DUPLICAT 2f40: 45 5f 52 45 41 44 45 52 3a 0a 09 09 09 72 65 74 E_READER:....ret 2f50: 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 44 55 50 urn("SCARD_E_DUP 2f60: 4c 49 43 41 54 45 5f 52 45 41 44 45 52 22 29 3b LICATE_READER"); 2f70: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 2f80: 43 41 52 44 5f 55 4e 53 55 50 50 4f 52 54 45 44 CARD_UNSUPPORTED 2f90: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 :....return("SCA 2fa0: 52 44 5f 45 5f 43 41 52 44 5f 55 4e 53 55 50 50 RD_E_CARD_UNSUPP 2fb0: 4f 52 54 45 44 22 29 3b 0a 09 09 63 61 73 65 20 ORTED");...case 2fc0: 53 43 41 52 44 5f 45 5f 4e 4f 5f 53 45 52 56 49 SCARD_E_NO_SERVI 2fd0: 43 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 CE:....return("S 2fe0: 43 41 52 44 5f 45 5f 4e 4f 5f 53 45 52 56 49 43 CARD_E_NO_SERVIC 2ff0: 45 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 E");...case SCAR 3000: 44 5f 45 5f 53 45 52 56 49 43 45 5f 53 54 4f 50 D_E_SERVICE_STOP 3010: 50 45 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 PED:....return(" 3020: 53 43 41 52 44 5f 45 5f 53 45 52 56 49 43 45 5f SCARD_E_SERVICE_ 3030: 53 54 4f 50 50 45 44 22 29 3b 0a 09 09 63 61 73 STOPPED");...cas 3040: 65 20 53 43 41 52 44 5f 45 5f 55 4e 53 55 50 50 e SCARD_E_UNSUPP 3050: 4f 52 54 45 44 5f 46 45 41 54 55 52 45 3a 0a 09 ORTED_FEATURE:.. 3060: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 3070: 45 5f 55 4e 53 55 50 50 4f 52 54 45 44 5f 46 45 E_UNSUPPORTED_FE 3080: 41 54 55 52 45 22 29 3b 0a 23 69 66 64 65 66 20 ATURE");.#ifdef 3090: 53 43 41 52 44 5f 57 5f 49 4e 53 45 52 54 45 44 SCARD_W_INSERTED 30a0: 5f 43 41 52 44 0a 09 09 63 61 73 65 20 53 43 41 _CARD...case SCA 30b0: 52 44 5f 57 5f 49 4e 53 45 52 54 45 44 5f 43 41 RD_W_INSERTED_CA 30c0: 52 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 RD:....return("S 30d0: 43 41 52 44 5f 57 5f 49 4e 53 45 52 54 45 44 5f CARD_W_INSERTED_ 30e0: 43 41 52 44 22 29 3b 0a 23 65 6e 64 69 66 0a 23 CARD");.#endif.# 30f0: 69 66 64 65 66 20 53 43 41 52 44 5f 45 5f 4e 4f ifdef SCARD_E_NO 3100: 5f 52 45 41 44 45 52 53 5f 41 56 41 49 4c 41 42 _READERS_AVAILAB 3110: 4c 45 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f LE...case SCARD_ 3120: 45 5f 4e 4f 5f 52 45 41 44 45 52 53 5f 41 56 41 E_NO_READERS_AVA 3130: 49 4c 41 42 4c 45 3a 0a 09 09 09 72 65 74 75 72 ILABLE:....retur 3140: 6e 28 22 53 43 41 52 44 5f 45 5f 4e 4f 5f 52 45 n("SCARD_E_NO_RE 3150: 41 44 45 52 53 5f 41 56 41 49 4c 41 42 4c 45 22 ADERS_AVAILABLE" 3160: 29 3b 0a 23 65 6e 64 69 66 0a 09 7d 0a 0a 09 72 );.#endif..}...r 3170: 65 74 75 72 6e 28 22 55 4e 4b 4e 4f 57 4e 22 29 eturn("UNKNOWN") 3180: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63 6f 6e 73 ;.}..static cons 3190: 74 20 63 68 61 72 20 2a 43 41 43 4b 45 59 5f 44 t char *CACKEY_D 31a0: 45 42 55 47 5f 46 55 4e 43 5f 4f 42 4a 49 44 5f EBUG_FUNC_OBJID_ 31b0: 54 4f 5f 53 54 52 28 75 69 6e 74 31 36 5f 74 20 TO_STR(uint16_t 31c0: 6f 62 6a 69 64 29 20 7b 0a 09 73 77 69 74 63 68 objid) {..switch 31d0: 20 28 6f 62 6a 69 64 29 20 7b 0a 09 09 63 61 73 (objid) {...cas 31e0: 65 20 30 78 32 30 30 30 3a 0a 09 09 09 72 65 74 e 0x2000:....ret 31f0: 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f urn("CACKEY_TLV_ 3200: 4f 42 4a 49 44 5f 47 45 4e 45 52 41 4c 49 4e 46 OBJID_GENERALINF 3210: 4f 22 29 3b 0a 09 09 63 61 73 65 20 30 78 32 31 O");...case 0x21 3220: 30 30 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 00:....return("C 3230: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 3240: 50 52 4f 50 45 52 53 4f 4e 41 4c 49 4e 46 4f 22 PROPERSONALINFO" 3250: 29 3b 0a 09 09 63 61 73 65 20 30 78 33 30 30 30 );...case 0x3000 3260: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 :....return("CAC 3270: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 41 43 KEY_TLV_OBJID_AC 3280: 43 45 53 53 43 4f 4e 54 52 4f 4c 22 29 3b 0a 09 CESSCONTROL");.. 3290: 09 63 61 73 65 20 30 78 34 30 30 30 3a 0a 09 09 .case 0x4000:... 32a0: 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f .return("CACKEY_ 32b0: 54 4c 56 5f 4f 42 4a 49 44 5f 4c 4f 47 49 4e 22 TLV_OBJID_LOGIN" 32c0: 29 3b 0a 09 09 63 61 73 65 20 30 78 35 30 30 30 );...case 0x5000 32d0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 :....return("CAC 32e0: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 KEY_TLV_OBJID_CA 32f0: 52 44 49 4e 46 4f 22 29 3b 0a 09 09 63 61 73 65 RDINFO");...case 3300: 20 30 78 36 30 30 30 3a 0a 09 09 09 72 65 74 75 0x6000:....retu 3310: 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f rn("CACKEY_TLV_O 3320: 42 4a 49 44 5f 42 49 4f 4d 45 54 52 49 43 53 22 BJID_BIOMETRICS" 3330: 29 3b 0a 09 09 63 61 73 65 20 30 78 37 30 30 30 );...case 0x7000 3340: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 :....return("CAC 3350: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 44 49 KEY_TLV_OBJID_DI 3360: 47 49 54 41 4c 53 49 47 43 45 52 54 22 29 3b 0a GITALSIGCERT");. 3370: 09 09 63 61 73 65 20 30 78 30 32 30 30 3a 0a 09 ..case 0x0200:.. 3380: 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 ..return("CACKEY 3390: 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 _TLV_OBJID_CAC_P 33a0: 45 52 53 4f 4e 22 29 3b 0a 09 09 63 61 73 65 20 ERSON");...case 33b0: 30 78 30 32 30 32 3a 0a 09 09 09 72 65 74 75 72 0x0202:....retur 33c0: 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 n("CACKEY_TLV_OB 33d0: 4a 49 44 5f 43 41 43 5f 42 45 4e 45 46 49 54 53 JID_CAC_BENEFITS 33e0: 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 32 30 ");...case 0x020 33f0: 33 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 3:....return("CA 3400: 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 CKEY_TLV_OBJID_C 3410: 41 43 5f 4f 54 48 45 52 42 45 4e 45 46 49 54 53 AC_OTHERBENEFITS 3420: 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 32 30 ");...case 0x020 3430: 31 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 1:....return("CA 3440: 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 CKEY_TLV_OBJID_C 3450: 41 43 5f 50 45 52 53 4f 4e 4e 45 4c 22 29 3b 0a AC_PERSONNEL");. 3460: 09 09 63 61 73 65 20 30 78 30 32 46 45 3a 0a 09 ..case 0x02FE:.. 3470: 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 ..return("CACKEY 3480: 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 _TLV_OBJID_CAC_P 3490: 4b 49 43 45 52 54 22 29 3b 0a 09 7d 0a 09 0a 09 KICERT");..}.... 34a0: 72 65 74 75 72 6e 28 22 55 4e 4b 4e 4f 57 4e 22 return("UNKNOWN" 34b0: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63 6f 6e );.}..static con 34c0: 73 74 20 63 68 61 72 20 2a 43 41 43 4b 45 59 5f st char *CACKEY_ 34d0: 44 45 42 55 47 5f 46 55 4e 43 5f 41 50 50 54 59 DEBUG_FUNC_APPTY 34e0: 50 45 5f 54 4f 5f 53 54 52 28 75 69 6e 74 38 5f PE_TO_STR(uint8_ 34f0: 74 20 61 70 70 74 79 70 65 29 20 7b 0a 09 73 77 t apptype) {..sw 3500: 69 74 63 68 20 28 61 70 70 74 79 70 65 29 20 7b itch (apptype) { 3510: 0a 09 09 63 61 73 65 20 30 78 30 30 3a 0a 09 09 ...case 0x00:... 3520: 09 72 65 74 75 72 6e 28 22 4e 4f 4e 45 22 29 3b .return("NONE"); 3530: 0a 09 09 63 61 73 65 20 30 78 30 31 3a 0a 09 09 ...case 0x01:... 3540: 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f .return("CACKEY_ 3550: 54 4c 56 5f 41 50 50 5f 47 45 4e 45 52 49 43 22 TLV_APP_GENERIC" 3560: 29 3b 0a 09 09 63 61 73 65 20 30 78 30 32 3a 0a );...case 0x02:. 3570: 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 ...return("CACKE 3580: 59 5f 54 4c 56 5f 41 50 50 5f 53 4b 49 22 29 3b Y_TLV_APP_SKI"); 3590: 0a 09 09 63 61 73 65 20 30 78 30 33 3a 0a 09 09 ...case 0x03:... 35a0: 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f .return("CACKEY_ 35b0: 54 4c 56 5f 41 50 50 5f 47 45 4e 45 52 49 43 20 TLV_APP_GENERIC 35c0: 7c 20 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 | CACKEY_TLV_APP 35d0: 5f 53 4b 49 22 29 3b 0a 09 09 63 61 73 65 20 30 _SKI");...case 0 35e0: 78 30 34 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 x04:....return(" 35f0: 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 CACKEY_TLV_APP_P 3600: 4b 49 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 KI");...case 0x0 3610: 35 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 5:....return("CA 3620: 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 47 45 4e CKEY_TLV_APP_GEN 3630: 45 52 49 43 20 7c 20 43 41 43 4b 45 59 5f 54 4c ERIC | CACKEY_TL 3640: 56 5f 41 50 50 5f 50 4b 49 22 29 3b 0a 09 09 63 V_APP_PKI");...c 3650: 61 73 65 20 30 78 30 36 3a 0a 09 09 09 72 65 74 ase 0x06:....ret 3660: 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f urn("CACKEY_TLV_ 3670: 41 50 50 5f 53 4b 49 20 7c 20 43 41 43 4b 45 59 APP_SKI | CACKEY 3680: 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 22 29 3b 0a _TLV_APP_PKI");. 3690: 09 09 63 61 73 65 20 30 78 30 37 3a 0a 09 09 09 ..case 0x07:.... 36a0: 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 return("CACKEY_T 36b0: 4c 56 5f 41 50 50 5f 47 45 4e 45 52 49 43 20 7c LV_APP_GENERIC | 36c0: 20 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f CACKEY_TLV_APP_ 36d0: 53 4b 49 20 7c 20 43 41 43 4b 45 59 5f 54 4c 56 SKI | CACKEY_TLV 36e0: 5f 41 50 50 5f 50 4b 49 22 29 3b 0a 09 7d 0a 0a _APP_PKI");..}.. 36f0: 09 72 65 74 75 72 6e 28 22 49 4e 56 41 4c 49 44 .return("INVALID 3700: 22 29 3b 0a 7d 0a 0a 23 20 20 64 65 66 69 6e 65 ");.}..# define 3710: 20 6d 61 6c 6c 6f 63 28 78 29 20 43 41 43 4b 45 malloc(x) CACKE 3720: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 4d 41 4c Y_DEBUG_FUNC_MAL 3730: 4c 4f 43 28 78 2c 20 5f 5f 66 75 6e 63 5f 5f 2c LOC(x, __func__, 3740: 20 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 20 64 65 __LINE__).# de 3750: 66 69 6e 65 20 72 65 61 6c 6c 6f 63 28 78 2c 20 fine realloc(x, 3760: 79 29 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f y) CACKEY_DEBUG_ 3770: 46 55 4e 43 5f 52 45 41 4c 4c 4f 43 28 78 2c 20 FUNC_REALLOC(x, 3780: 79 2c 20 5f 5f 66 75 6e 63 5f 5f 2c 20 5f 5f 4c y, __func__, __L 3790: 49 4e 45 5f 5f 29 0a 23 20 20 69 66 64 65 66 20 INE__).# ifdef 37a0: 73 74 72 64 75 70 0a 23 20 20 20 20 75 6e 64 65 strdup.# unde 37b0: 66 20 73 74 72 64 75 70 0a 23 20 20 65 6e 64 69 f strdup.# endi 37c0: 66 0a 23 20 20 64 65 66 69 6e 65 20 73 74 72 64 f.# define strd 37d0: 75 70 28 78 29 20 43 41 43 4b 45 59 5f 44 45 42 up(x) CACKEY_DEB 37e0: 55 47 5f 46 55 4e 43 5f 53 54 52 44 55 50 28 78 UG_FUNC_STRDUP(x 37f0: 2c 20 5f 5f 66 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 , __func__, __LI 3800: 4e 45 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 20 64 NE__).#else.# d 3810: 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 efine CACKEY_DEB 3820: 55 47 5f 50 52 49 4e 54 46 28 78 2e 2e 2e 29 20 UG_PRINTF(x...) 3830: 2f 2a 2a 2f 0a 23 20 20 64 65 66 69 6e 65 20 43 /**/.# define C 3840: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 3850: 54 42 55 46 28 66 2c 20 78 2c 20 79 29 20 2f 2a TBUF(f, x, y) /* 3860: 2a 2f 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 */.# define CAC 3870: 4b 45 59 5f 44 45 42 55 47 5f 50 45 52 52 4f 52 KEY_DEBUG_PERROR 3880: 28 78 29 20 2f 2a 2a 2f 0a 23 20 20 64 65 66 69 (x) /**/.# defi 3890: 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ne CACKEY_DEBUG_ 38a0: 46 55 4e 43 5f 54 41 47 5f 54 4f 5f 53 54 52 28 FUNC_TAG_TO_STR( 38b0: 78 29 20 22 44 45 42 55 47 5f 44 49 53 41 42 4c x) "DEBUG_DISABL 38c0: 45 44 22 0a 23 20 20 64 65 66 69 6e 65 20 43 41 ED".# define CA 38d0: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 38e0: 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 SCARDERR_TO_STR( 38f0: 78 29 20 22 44 45 42 55 47 5f 44 49 53 41 42 4c x) "DEBUG_DISABL 3900: 45 44 22 0a 23 20 20 64 65 66 69 6e 65 20 43 41 ED".# define CA 3910: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 3920: 4f 42 4a 49 44 5f 54 4f 5f 53 54 52 28 78 29 20 OBJID_TO_STR(x) 3930: 22 44 45 42 55 47 5f 44 49 53 41 42 4c 45 44 22 "DEBUG_DISABLED" 3940: 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 .# define CACKE 3950: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 41 50 50 Y_DEBUG_FUNC_APP 3960: 54 59 50 45 5f 54 4f 5f 53 54 52 28 78 29 20 22 TYPE_TO_STR(x) " 3970: 44 45 42 55 47 5f 44 49 53 41 42 4c 45 44 22 0a DEBUG_DISABLED". 3980: 23 65 6e 64 69 66 0a 0a 73 74 72 75 63 74 20 63 #endif..struct c 3990: 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 ackey_pcsc_ident 39a0: 69 74 79 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 ity {..unsigned 39b0: 63 68 61 72 20 61 70 70 6c 65 74 5b 37 5d 3b 0a char applet[7];. 39c0: 09 75 69 6e 74 31 36 5f 74 20 66 69 6c 65 3b 0a .uint16_t file;. 39d0: 0a 09 73 69 7a 65 5f 74 20 63 65 72 74 69 66 69 ..size_t certifi 39e0: 63 61 74 65 5f 6c 65 6e 3b 0a 09 75 6e 73 69 67 cate_len;..unsig 39f0: 6e 65 64 20 63 68 61 72 20 2a 63 65 72 74 69 66 ned char *certif 3a00: 69 63 61 74 65 3b 0a 0a 09 73 73 69 7a 65 5f 74 icate;...ssize_t 3a10: 20 6b 65 79 73 69 7a 65 3b 0a 7d 3b 0a 0a 73 74 keysize;.};..st 3a20: 72 75 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e ruct cackey_iden 3a30: 74 69 74 79 20 7b 0a 09 73 74 72 75 63 74 20 63 tity {..struct c 3a40: 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 ackey_pcsc_ident 3a50: 69 74 79 20 2a 70 63 73 63 5f 69 64 65 6e 74 69 ity *pcsc_identi 3a60: 74 79 3b 0a 0a 09 43 4b 5f 41 54 54 52 49 42 55 ty;...CK_ATTRIBU 3a70: 54 45 20 2a 61 74 74 72 69 62 75 74 65 73 3b 0a TE *attributes;. 3a80: 09 43 4b 5f 55 4c 4f 4e 47 20 61 74 74 72 69 62 .CK_ULONG attrib 3a90: 75 74 65 73 5f 63 6f 75 6e 74 3b 0a 7d 3b 0a 0a utes_count;.};.. 3aa0: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 65 struct cackey_se 3ab0: 73 73 69 6f 6e 20 7b 0a 09 69 6e 74 20 61 63 74 ssion {..int act 3ac0: 69 76 65 3b 0a 0a 09 43 4b 5f 53 4c 4f 54 5f 49 ive;...CK_SLOT_I 3ad0: 44 20 73 6c 6f 74 49 44 3b 0a 0a 09 43 4b 5f 53 D slotID;...CK_S 3ae0: 54 41 54 45 20 73 74 61 74 65 3b 0a 09 43 4b 5f TATE state;..CK_ 3af0: 46 4c 41 47 53 20 66 6c 61 67 73 3b 0a 09 43 4b FLAGS flags;..CK 3b00: 5f 55 4c 4f 4e 47 20 75 6c 44 65 76 69 63 65 45 _ULONG ulDeviceE 3b10: 72 72 6f 72 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 rror;..CK_VOID_P 3b20: 54 52 20 70 41 70 70 6c 69 63 61 74 69 6f 6e 3b TR pApplication; 3b30: 0a 09 43 4b 5f 4e 4f 54 49 46 59 20 4e 6f 74 69 ..CK_NOTIFY Noti 3b40: 66 79 3b 0a 0a 09 73 74 72 75 63 74 20 63 61 63 fy;...struct cac 3b50: 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 69 64 key_identity *id 3b60: 65 6e 74 69 74 69 65 73 3b 0a 09 75 6e 73 69 67 entities;..unsig 3b70: 6e 65 64 20 6c 6f 6e 67 20 69 64 65 6e 74 69 74 ned long identit 3b80: 69 65 73 5f 63 6f 75 6e 74 3b 0a 0a 09 69 6e 74 ies_count;...int 3b90: 20 73 65 61 72 63 68 5f 61 63 74 69 76 65 3b 0a search_active;. 3ba0: 09 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 .CK_ATTRIBUTE_PT 3bb0: 52 20 73 65 61 72 63 68 5f 71 75 65 72 79 3b 0a R search_query;. 3bc0: 09 43 4b 5f 55 4c 4f 4e 47 20 73 65 61 72 63 68 .CK_ULONG search 3bd0: 5f 71 75 65 72 79 5f 63 6f 75 6e 74 3b 0a 09 75 _query_count;..u 3be0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 73 65 61 nsigned long sea 3bf0: 72 63 68 5f 63 75 72 72 5f 69 64 3b 0a 0a 09 69 rch_curr_id;...i 3c00: 6e 74 20 73 69 67 6e 5f 61 63 74 69 76 65 3b 0a nt sign_active;. 3c10: 09 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 59 .CK_MECHANISM_TY 3c20: 50 45 20 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 PE sign_mechanis 3c30: 6d 3b 0a 09 43 4b 5f 42 59 54 45 5f 50 54 52 20 m;..CK_BYTE_PTR 3c40: 73 69 67 6e 5f 62 75 66 3b 0a 09 75 6e 73 69 67 sign_buf;..unsig 3c50: 6e 65 64 20 6c 6f 6e 67 20 73 69 67 6e 5f 62 75 ned long sign_bu 3c60: 66 6c 65 6e 3b 0a 09 75 6e 73 69 67 6e 65 64 20 flen;..unsigned 3c70: 6c 6f 6e 67 20 73 69 67 6e 5f 62 75 66 75 73 65 long sign_bufuse 3c80: 64 3b 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 d;..struct cacke 3c90: 79 5f 69 64 65 6e 74 69 74 79 20 2a 73 69 67 6e y_identity *sign 3ca0: 5f 69 64 65 6e 74 69 74 79 3b 0a 0a 09 69 6e 74 _identity;...int 3cb0: 20 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 3b decrypt_active; 3cc0: 0a 09 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 ..CK_MECHANISM_T 3cd0: 59 50 45 20 64 65 63 72 79 70 74 5f 6d 65 63 68 YPE decrypt_mech 3ce0: 61 6e 69 73 6d 3b 0a 09 43 4b 5f 56 4f 49 44 5f anism;..CK_VOID_ 3cf0: 50 54 52 20 64 65 63 72 79 70 74 5f 6d 65 63 68 PTR decrypt_mech 3d00: 5f 70 61 72 6d 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 _parm;..CK_ULONG 3d10: 20 64 65 63 72 79 70 74 5f 6d 65 63 68 5f 70 61 decrypt_mech_pa 3d20: 72 6d 6c 65 6e 3b 0a 09 73 74 72 75 63 74 20 63 rmlen;..struct c 3d30: 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 2a ackey_identity * 3d40: 64 65 63 72 79 70 74 5f 69 64 65 6e 74 69 74 79 decrypt_identity 3d50: 3b 0a 7d 3b 0a 0a 73 74 72 75 63 74 20 63 61 63 ;.};..struct cac 3d60: 6b 65 79 5f 73 6c 6f 74 20 7b 0a 09 69 6e 74 20 key_slot {..int 3d70: 61 63 74 69 76 65 3b 0a 0a 09 63 68 61 72 20 2a active;...char * 3d80: 70 63 73 63 5f 72 65 61 64 65 72 3b 0a 0a 09 69 pcsc_reader;...i 3d90: 6e 74 20 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e nt pcsc_card_con 3da0: 6e 65 63 74 65 64 3b 0a 09 53 43 41 52 44 48 41 nected;..SCARDHA 3db0: 4e 44 4c 45 20 70 63 73 63 5f 63 61 72 64 3b 0a NDLE pcsc_card;. 3dc0: 0a 09 69 6e 74 20 74 72 61 6e 73 61 63 74 69 6f ..int transactio 3dd0: 6e 5f 64 65 70 74 68 3b 0a 09 69 6e 74 20 74 72 n_depth;..int tr 3de0: 61 6e 73 61 63 74 69 6f 6e 5f 6e 65 65 64 5f 68 ansaction_need_h 3df0: 77 5f 6c 6f 63 6b 3b 0a 0a 09 69 6e 74 20 73 6c w_lock;...int sl 3e00: 6f 74 5f 72 65 73 65 74 3b 0a 0a 09 43 4b 5f 46 ot_reset;...CK_F 3e10: 4c 41 47 53 20 74 6f 6b 65 6e 5f 66 6c 61 67 73 LAGS token_flags 3e20: 3b 0a 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 ;...unsigned cha 3e30: 72 20 2a 6c 61 62 65 6c 3b 0a 0a 09 44 57 4f 52 r *label;...DWOR 3e40: 44 20 70 72 6f 74 6f 63 6f 6c 3b 0a 7d 3b 0a 0a D protocol;.};.. 3e50: 74 79 70 65 64 65 66 20 65 6e 75 6d 20 7b 0a 09 typedef enum {.. 3e60: 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 47 CACKEY_TLV_APP_G 3e70: 45 4e 45 52 49 43 20 3d 20 30 78 30 31 2c 0a 09 ENERIC = 0x01,.. 3e80: 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 53 CACKEY_TLV_APP_S 3e90: 4b 49 20 20 20 20 20 3d 20 30 78 30 32 2c 0a 09 KI = 0x02,.. 3ea0: 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 CACKEY_TLV_APP_P 3eb0: 4b 49 20 20 20 20 20 3d 20 30 78 30 34 0a 7d 20 KI = 0x04.} 3ec0: 63 61 63 6b 65 79 5f 74 6c 76 5f 61 70 70 74 79 cackey_tlv_appty 3ed0: 70 65 3b 0a 0a 74 79 70 65 64 65 66 20 65 6e 75 pe;..typedef enu 3ee0: 6d 20 7b 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f m {..CACKEY_TLV_ 3ef0: 4f 42 4a 49 44 5f 47 45 4e 45 52 41 4c 49 4e 46 OBJID_GENERALINF 3f00: 4f 20 20 20 20 20 20 20 3d 20 30 78 32 30 30 30 O = 0x2000 3f10: 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 ,..CACKEY_TLV_OB 3f20: 4a 49 44 5f 50 52 4f 50 45 52 53 4f 4e 41 4c 49 JID_PROPERSONALI 3f30: 4e 46 4f 20 20 20 3d 20 30 78 32 31 30 30 2c 0a NFO = 0x2100,. 3f40: 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 .CACKEY_TLV_OBJI 3f50: 44 5f 41 43 43 45 53 53 43 4f 4e 54 52 4f 4c 20 D_ACCESSCONTROL 3f60: 20 20 20 20 3d 20 30 78 33 30 30 30 2c 0a 09 43 = 0x3000,..C 3f70: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 3f80: 4c 4f 47 49 4e 20 20 20 20 20 20 20 20 20 20 20 LOGIN 3f90: 20 20 3d 20 30 78 34 30 30 30 2c 0a 09 43 41 43 = 0x4000,..CAC 3fa0: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 KEY_TLV_OBJID_CA 3fb0: 52 44 49 4e 46 4f 20 20 20 20 20 20 20 20 20 20 RDINFO 3fc0: 3d 20 30 78 35 30 30 30 2c 0a 09 43 41 43 4b 45 = 0x5000,..CACKE 3fd0: 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 42 49 4f 4d Y_TLV_OBJID_BIOM 3fe0: 45 54 52 49 43 53 20 20 20 20 20 20 20 20 3d 20 ETRICS = 3ff0: 30 78 36 30 30 30 2c 0a 09 43 41 43 4b 45 59 5f 0x6000,..CACKEY_ 4000: 54 4c 56 5f 4f 42 4a 49 44 5f 44 49 47 49 54 41 TLV_OBJID_DIGITA 4010: 4c 53 49 47 43 45 52 54 20 20 20 20 3d 20 30 78 LSIGCERT = 0x 4020: 37 30 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 7000,..CACKEY_TL 4030: 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 45 52 53 V_OBJID_CAC_PERS 4040: 4f 4e 20 20 20 20 20 20 20 20 3d 20 30 78 30 32 ON = 0x02 4050: 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 00,..CACKEY_TLV_ 4060: 4f 42 4a 49 44 5f 43 41 43 5f 42 45 4e 45 46 49 OBJID_CAC_BENEFI 4070: 54 53 20 20 20 20 20 20 3d 20 30 78 30 32 30 32 TS = 0x0202 4080: 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 ,..CACKEY_TLV_OB 4090: 4a 49 44 5f 43 41 43 5f 4f 54 48 45 52 42 45 4e JID_CAC_OTHERBEN 40a0: 45 46 49 54 53 20 3d 20 30 78 30 32 30 33 2c 0a EFITS = 0x0203,. 40b0: 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 .CACKEY_TLV_OBJI 40c0: 44 5f 43 41 43 5f 50 45 52 53 4f 4e 4e 45 4c 20 D_CAC_PERSONNEL 40d0: 20 20 20 20 3d 20 30 78 30 32 30 31 2c 0a 09 43 = 0x0201,..C 40e0: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 40f0: 43 41 43 5f 50 4b 49 43 45 52 54 20 20 20 20 20 CAC_PKICERT 4100: 20 20 3d 20 30 78 30 32 46 45 0a 7d 20 63 61 63 = 0x02FE.} cac 4110: 6b 65 79 5f 74 6c 76 5f 6f 62 6a 65 63 74 69 64 key_tlv_objectid 4120: 3b 0a 0a 74 79 70 65 64 65 66 20 65 6e 75 6d 20 ;..typedef enum 4130: 7b 0a 09 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 {..CACKEY_PCSC_S 4140: 5f 54 4f 4b 45 4e 50 52 45 53 45 4e 54 20 20 20 _TOKENPRESENT 4150: 20 3d 20 31 2c 0a 09 43 41 43 4b 45 59 5f 50 43 = 1,..CACKEY_PC 4160: 53 43 5f 53 5f 4f 4b 20 20 20 20 20 20 20 20 20 SC_S_OK 4170: 20 20 20 20 20 3d 20 30 2c 0a 09 43 41 43 4b 45 = 0,..CACKE 4180: 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 Y_PCSC_E_GENERIC 4190: 20 20 20 20 20 20 20 20 20 3d 20 2d 31 2c 0a 09 = -1,.. 41a0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 42 41 CACKEY_PCSC_E_BA 41b0: 44 50 49 4e 20 20 20 20 20 20 20 20 20 20 3d 20 DPIN = 41c0: 2d 32 2c 0a 09 43 41 43 4b 45 59 5f 50 43 53 43 -2,..CACKEY_PCSC 41d0: 5f 45 5f 4c 4f 43 4b 45 44 20 20 20 20 20 20 20 _E_LOCKED 41e0: 20 20 20 3d 20 2d 33 2c 0a 09 43 41 43 4b 45 59 = -3,..CACKEY 41f0: 5f 50 43 53 43 5f 45 5f 4e 45 45 44 4c 4f 47 49 _PCSC_E_NEEDLOGI 4200: 4e 20 20 20 20 20 20 20 3d 20 2d 34 2c 0a 09 43 N = -4,..C 4210: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b ACKEY_PCSC_E_TOK 4220: 45 4e 41 42 53 45 4e 54 20 20 20 20 20 3d 20 2d ENABSENT = - 4230: 36 2c 0a 09 43 41 43 4b 45 59 5f 50 43 53 43 5f 6,..CACKEY_PCSC_ 4240: 45 5f 52 45 54 52 59 20 20 20 20 20 20 20 20 20 E_RETRY 4250: 20 20 3d 20 2d 37 0a 7d 20 63 61 63 6b 65 79 5f = -7.} cackey_ 4260: 72 65 74 3b 0a 0a 73 74 72 75 63 74 20 63 61 63 ret;..struct cac 4270: 6b 65 79 5f 74 6c 76 5f 63 61 72 64 75 72 6c 20 key_tlv_cardurl 4280: 7b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 {..unsigned char 4290: 20 20 20 20 20 20 20 20 72 69 64 5b 35 5d 3b 0a rid[5];. 42a0: 09 63 61 63 6b 65 79 5f 74 6c 76 5f 61 70 70 74 .cackey_tlv_appt 42b0: 79 70 65 20 20 20 61 70 70 74 79 70 65 3b 0a 09 ype apptype;.. 42c0: 63 61 63 6b 65 79 5f 74 6c 76 5f 6f 62 6a 65 63 cackey_tlv_objec 42d0: 74 69 64 20 20 6f 62 6a 65 63 74 69 64 3b 0a 09 tid objectid;.. 42e0: 63 61 63 6b 65 79 5f 74 6c 76 5f 6f 62 6a 65 63 cackey_tlv_objec 42f0: 74 69 64 20 20 61 70 70 69 64 3b 0a 09 75 6e 73 tid appid;..uns 4300: 69 67 6e 65 64 20 63 68 61 72 20 20 20 20 20 20 igned char 4310: 20 20 70 69 6e 69 64 3b 0a 7d 3b 0a 0a 73 74 72 pinid;.};..str 4320: 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 uct cackey_tlv_e 4330: 6e 74 69 74 79 3b 0a 73 74 72 75 63 74 20 63 61 ntity;.struct ca 4340: 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 ckey_tlv_entity 4350: 7b 0a 09 75 69 6e 74 38 5f 74 20 74 61 67 3b 0a {..uint8_t tag;. 4360: 09 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 3b 0a .size_t length;. 4370: 0a 09 75 6e 69 6f 6e 20 7b 0a 09 09 76 6f 69 64 ..union {...void 4380: 20 2a 76 61 6c 75 65 3b 0a 09 09 73 74 72 75 63 *value;...struc 4390: 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 63 61 72 t cackey_tlv_car 43a0: 64 75 72 6c 20 2a 76 61 6c 75 65 5f 63 61 72 64 durl *value_card 43b0: 75 72 6c 3b 0a 09 09 75 69 6e 74 38 5f 74 20 76 url;...uint8_t v 43c0: 61 6c 75 65 5f 62 79 74 65 3b 0a 09 7d 3b 0a 0a alue_byte;..};.. 43d0: 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 .struct cackey_t 43e0: 6c 76 5f 65 6e 74 69 74 79 20 2a 5f 6e 65 78 74 lv_entity *_next 43f0: 3b 0a 7d 3b 0a 0a 2f 2a 20 43 41 43 4b 45 59 20 ;.};../* CACKEY 4400: 47 6c 6f 62 61 6c 20 48 61 6e 64 6c 65 73 20 2a Global Handles * 4410: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 2a 63 /.static void *c 4420: 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 20 3d 20 ackey_biglock = 4430: 4e 55 4c 4c 3b 0a 73 74 61 74 69 63 20 73 74 72 NULL;.static str 4440: 75 63 74 20 63 61 63 6b 65 79 5f 73 65 73 73 69 uct cackey_sessi 4450: 6f 6e 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f on cackey_sessio 4460: 6e 73 5b 31 32 38 5d 3b 0a 73 74 61 74 69 63 20 ns[128];.static 4470: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl 4480: 6f 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ot cackey_slots[ 4490: 31 32 38 5d 3b 0a 73 74 61 74 69 63 20 69 6e 74 128];.static int 44a0: 20 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 cackey_initiali 44b0: 7a 65 64 20 3d 20 30 3b 0a 73 74 61 74 69 63 20 zed = 0;.static 44c0: 69 6e 74 20 63 61 63 6b 65 79 5f 62 69 67 6c 6f int cackey_biglo 44d0: 63 6b 5f 69 6e 69 74 20 3d 20 30 3b 0a 43 4b 5f ck_init = 0;.CK_ 44e0: 43 5f 49 4e 49 54 49 41 4c 49 5a 45 5f 41 52 47 C_INITIALIZE_ARG 44f0: 53 20 63 61 63 6b 65 79 5f 61 72 67 73 3b 0a 0a S cackey_args;.. 4500: 2f 2a 2a 20 45 78 74 72 61 20 63 65 72 74 69 66 /** Extra certif 4510: 69 63 61 74 65 73 20 74 6f 20 69 6e 63 6c 75 64 icates to includ 4520: 65 20 69 6e 20 74 6f 6b 65 6e 20 2a 2a 2f 0a 73 e in token **/.s 4530: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 70 63 73 truct cackey_pcs 4540: 63 5f 69 64 65 6e 74 69 74 79 20 65 78 74 72 61 c_identity extra 4550: 5f 63 65 72 74 73 5b 5d 20 3d 20 7b 0a 23 69 6e _certs[] = {.#in 4560: 63 6c 75 64 65 20 22 63 61 63 6b 65 79 5f 62 75 clude "cackey_bu 4570: 69 6c 74 69 6e 5f 63 65 72 74 73 2e 68 22 0a 7d iltin_certs.h".} 4580: 3b 0a 0a 2f 2a 20 50 43 53 43 20 47 6c 6f 62 61 ;../* PCSC Globa 4590: 6c 20 48 61 6e 64 6c 65 73 20 2a 2f 0a 73 74 61 l Handles */.sta 45a0: 74 69 63 20 4c 50 53 43 41 52 44 43 4f 4e 54 45 tic LPSCARDCONTE 45b0: 58 54 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 XT cackey_pcsc_h 45c0: 61 6e 64 6c 65 20 3d 20 4e 55 4c 4c 3b 0a 0a 73 andle = NULL;..s 45d0: 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 6c tatic unsigned l 45e0: 6f 6e 67 20 63 61 63 6b 65 79 5f 67 65 74 76 65 ong cackey_getve 45f0: 72 73 69 6f 6e 28 76 6f 69 64 29 20 7b 0a 09 73 rsion(void) {..s 4600: 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 6c tatic unsigned l 4610: 6f 6e 67 20 72 65 74 76 61 6c 20 3d 20 32 35 35 ong retval = 255 4620: 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ;..unsigned long 4630: 20 6d 61 6a 6f 72 20 3d 20 30 3b 0a 09 75 6e 73 major = 0;..uns 4640: 69 67 6e 65 64 20 6c 6f 6e 67 20 6d 69 6e 6f 72 igned long minor 4650: 20 3d 20 30 3b 0a 09 63 68 61 72 20 2a 6d 61 6a = 0;..char *maj 4660: 6f 72 5f 73 74 72 20 3d 20 4e 55 4c 4c 3b 0a 09 or_str = NULL;.. 4670: 63 68 61 72 20 2a 6d 69 6e 6f 72 5f 73 74 72 20 char *minor_str 4680: 3d 20 4e 55 4c 4c 3b 0a 0a 09 43 41 43 4b 45 59 = NULL;...CACKEY 4690: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 46a0: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 46b0: 72 65 74 76 61 6c 20 21 3d 20 32 35 35 29 20 7b retval != 255) { 46c0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 46d0: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 46e0: 67 20 30 78 25 6c 78 20 28 63 61 63 68 65 64 29 g 0x%lx (cached) 46f0: 2e 22 2c 20 72 65 74 76 61 6c 29 3b 0a 0a 09 09 .", retval);.... 4700: 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a return(retval);. 4710: 09 7d 0a 0a 09 72 65 74 76 61 6c 20 3d 20 30 3b .}...retval = 0; 4720: 0a 0a 23 69 66 64 65 66 20 50 41 43 4b 41 47 45 ..#ifdef PACKAGE 4730: 5f 56 45 52 53 49 4f 4e 0a 20 20 20 20 20 20 20 _VERSION. 4740: 20 6d 61 6a 6f 72 5f 73 74 72 20 3d 20 50 41 43 major_str = PAC 4750: 4b 41 47 45 5f 56 45 52 53 49 4f 4e 3b 0a 09 69 KAGE_VERSION;..i 4760: 66 20 28 6d 61 6a 6f 72 5f 73 74 72 29 20 7b 0a f (major_str) {. 4770: 09 20 20 20 20 20 20 20 20 6d 61 6a 6f 72 20 3d . major = 4780: 20 73 74 72 74 6f 75 6c 28 6d 61 6a 6f 72 5f 73 strtoul(major_s 4790: 74 72 2c 20 26 6d 69 6e 6f 72 5f 73 74 72 2c 20 tr, &minor_str, 47a0: 31 30 29 3b 0a 0a 09 09 69 66 20 28 6d 69 6e 6f 10);....if (mino 47b0: 72 5f 73 74 72 29 20 7b 0a 09 09 09 6d 69 6e 6f r_str) {....mino 47c0: 72 20 3d 20 73 74 72 74 6f 75 6c 28 6d 69 6e 6f r = strtoul(mino 47d0: 72 5f 73 74 72 20 2b 20 31 2c 20 4e 55 4c 4c 2c r_str + 1, NULL, 47e0: 20 31 30 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 72 10);...}..}...r 47f0: 65 74 76 61 6c 20 3d 20 28 6d 61 6a 6f 72 20 3c etval = (major < 4800: 3c 20 31 36 29 20 7c 20 28 6d 69 6e 6f 72 20 3c < 16) | (minor < 4810: 3c 20 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 09 43 < 8);.#endif...C 4820: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 4830: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 30 78 TF("Returning 0x 4840: 25 6c 78 22 2c 20 72 65 74 76 61 6c 29 3b 0a 0a %lx", retval);.. 4850: 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b .return(retval); 4860: 0a 7d 0a 0a 2f 2a 20 50 43 2f 53 43 20 52 65 6c .}../* PC/SC Rel 4870: 61 74 65 64 20 46 75 6e 63 74 69 6f 6e 73 20 2a ated Functions * 4880: 2f 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 /./*. * SYNPOSIS 4890: 0a 20 2a 20 20 20 20 20 76 6f 69 64 20 63 61 63 . * void cac 48a0: 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e key_slots_discon 48b0: 6e 65 63 74 5f 61 6c 6c 28 76 6f 69 64 29 3b 0a nect_all(void);. 48c0: 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a *. * ARGUMENTS. 48d0: 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 * None. *. 48e0: 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 * RETURN VALUE. 48f0: 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a * None. *. * 4900: 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 54 68 NOTES. * Th 4910: 69 73 20 66 75 6e 63 74 69 6f 6e 20 64 69 73 63 is function disc 4920: 6f 6e 6e 65 63 74 73 20 66 72 6f 6d 20 61 6c 6c onnects from all 4930: 20 63 61 72 64 73 2e 0a 20 2a 0a 20 2a 2f 0a 73 cards.. *. */.s 4940: 74 61 74 69 63 20 76 6f 69 64 20 63 61 63 6b 65 tatic void cacke 4950: 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 y_slots_disconne 4960: 63 74 5f 61 6c 6c 28 76 6f 69 64 29 20 7b 0a 09 ct_all(void) {.. 4970: 75 69 6e 74 33 32 5f 74 20 69 64 78 3b 0a 0a 09 uint32_t idx;... 4980: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 4990: 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 49a0: 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 ..for (idx = 0; 49b0: 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 idx < (sizeof(ca 49c0: 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 ckey_slots) / si 49d0: 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 49e0: 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b s[0])); idx++) { 49f0: 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c ...if (cackey_sl 4a00: 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 63 61 ots[idx].pcsc_ca 4a10: 72 64 5f 63 6f 6e 6e 65 63 74 65 64 29 20 7b 0a rd_connected) {. 4a20: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 4a30: 50 52 49 4e 54 46 28 22 53 43 61 72 64 44 69 73 PRINTF("SCardDis 4a40: 63 6f 6e 6e 65 63 74 28 25 6c 75 29 20 63 61 6c connect(%lu) cal 4a50: 6c 65 64 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 led", (unsigned 4a60: 6c 6f 6e 67 29 20 69 64 78 29 3b 0a 0a 09 09 09 long) idx);..... 4a70: 53 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 SCardDisconnect( 4a80: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx 4a90: 5d 2e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 ].pcsc_card, SCA 4aa0: 52 44 5f 4c 45 41 56 45 5f 43 41 52 44 29 3b 0a RD_LEAVE_CARD);. 4ab0: 09 09 7d 0a 0a 09 09 69 66 20 28 63 61 63 6b 65 ..}....if (cacke 4ac0: 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 6c 61 62 y_slots[idx].lab 4ad0: 65 6c 29 20 7b 0a 09 09 09 66 72 65 65 28 63 61 el) {....free(ca 4ae0: 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e ckey_slots[idx]. 4af0: 6c 61 62 65 6c 29 3b 0a 0a 09 09 09 63 61 63 6b label);.....cack 4b00: 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 6c 61 ey_slots[idx].la 4b10: 62 65 6c 20 3d 20 4e 55 4c 4c 3b 0a 09 09 7d 0a bel = NULL;...}. 4b20: 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ...cackey_slots[ 4b30: 69 64 78 5d 2e 70 63 73 63 5f 63 61 72 64 5f 63 idx].pcsc_card_c 4b40: 6f 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a 09 09 onnected = 0;... 4b50: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx 4b60: 5d 2e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 ].transaction_de 4b70: 70 74 68 20 3d 20 30 3b 0a 09 09 63 61 63 6b 65 pth = 0;...cacke 4b80: 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 74 72 61 y_slots[idx].tra 4b90: 6e 73 61 63 74 69 6f 6e 5f 6e 65 65 64 5f 68 77 nsaction_need_hw 4ba0: 5f 6c 6f 63 6b 20 3d 20 30 3b 0a 0a 09 09 69 66 _lock = 0;....if 4bb0: 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 (cackey_slots[i 4bc0: 64 78 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 dx].active) {... 4bd0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 4be0: 49 4e 54 46 28 22 4d 61 72 6b 69 6e 67 20 61 63 INTF("Marking ac 4bf0: 74 69 76 65 20 73 6c 6f 74 20 25 6c 75 20 61 73 tive slot %lu as 4c00: 20 62 65 69 6e 67 20 72 65 73 65 74 22 2c 20 28 being reset", ( 4c10: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 69 unsigned long) i 4c20: 64 78 29 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 6b dx);...}....cack 4c30: 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 73 6c ey_slots[idx].sl 4c40: 6f 74 5f 72 65 73 65 74 20 3d 20 31 3b 0a 09 7d ot_reset = 1;..} 4c50: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 4c60: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 4c70: 67 22 29 3b 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d g");...return;.} 4c80: 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 ../*. * SYNPOSIS 4c90: 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 72 . * cackey_r 4ca0: 65 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 63 et cackey_pcsc_c 4cb0: 6f 6e 6e 65 63 74 28 76 6f 69 64 29 3b 0a 20 2a onnect(void);. * 4cc0: 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a . * ARGUMENTS. * 4cd0: 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a 20 None. *. * 4ce0: 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 RETURN VALUE. * 4cf0: 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f CACKEY_PCSC_ 4d00: 53 5f 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e 20 S_OK On 4d10: 73 75 63 63 65 73 73 0a 20 2a 20 20 20 20 20 43 success. * C 4d20: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e ACKEY_PCSC_E_GEN 4d30: 45 52 49 43 20 20 20 20 4f 6e 20 65 72 72 6f 72 ERIC On error 4d40: 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 . *. * NOTES. * 4d50: 20 20 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f This functio 4d60: 6e 20 63 6f 6e 6e 65 63 74 73 20 74 6f 20 74 68 n connects to th 4d70: 65 20 50 43 2f 53 43 20 43 6f 6e 6e 65 63 74 69 e PC/SC Connecti 4d80: 6f 6e 20 4d 61 6e 61 67 65 72 20 61 6e 64 20 75 on Manager and u 4d90: 70 64 61 74 65 73 20 74 68 65 0a 20 2a 20 20 20 pdates the. * 4da0: 20 20 67 6c 6f 62 61 6c 20 68 61 6e 64 6c 65 2e global handle. 4db0: 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63 . *. */.static c 4dc0: 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 ackey_ret cackey 4dd0: 5f 70 63 73 63 5f 63 6f 6e 6e 65 63 74 28 76 6f _pcsc_connect(vo 4de0: 69 64 29 20 7b 0a 09 4c 4f 4e 47 20 73 63 61 72 id) {..LONG scar 4df0: 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 d_est_context_re 4e00: 74 3b 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 t;.#ifdef HAVE_S 4e10: 43 41 52 44 49 53 56 41 4c 49 44 43 4f 4e 54 45 CARDISVALIDCONTE 4e20: 58 54 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f 69 XT..LONG scard_i 4e30: 73 76 61 6c 69 64 5f 72 65 74 3b 0a 23 65 6e 64 svalid_ret;.#end 4e40: 69 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 if...CACKEY_DEBU 4e50: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 4e60: 2e 22 29 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 .");...if (cacke 4e70: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 3d y_pcsc_handle == 4e80: 20 4e 55 4c 4c 29 20 7b 0a 09 09 63 61 63 6b 65 NULL) {...cacke 4e90: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 20 y_pcsc_handle = 4ea0: 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 malloc(sizeof(*c 4eb0: 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c ackey_pcsc_handl 4ec0: 65 29 29 3b 0a 09 09 69 66 20 28 63 61 63 6b 65 e));...if (cacke 4ed0: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 3d y_pcsc_handle == 4ee0: 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 43 41 43 4b NULL) {....CACK 4ef0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 4f00: 22 43 61 6c 6c 20 74 6f 20 6d 61 6c 6c 6f 63 28 "Call to malloc( 4f10: 29 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e ) failed, return 4f20: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 4f30: 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f ;.....cackey_slo 4f40: 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c ts_disconnect_al 4f50: 6c 28 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 l();.....return( 4f60: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 CACKEY_PCSC_E_GE 4f70: 4e 45 52 49 43 29 3b 0a 09 09 7d 0a 0a 09 09 43 NERIC);...}....C 4f80: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 4f90: 54 46 28 22 53 43 61 72 64 45 73 74 61 62 6c 69 TF("SCardEstabli 4fa0: 73 68 43 6f 6e 74 65 78 74 28 29 20 63 61 6c 6c shContext() call 4fb0: 65 64 22 29 3b 0a 09 09 73 63 61 72 64 5f 65 73 ed");...scard_es 4fc0: 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20 3d 20 t_context_ret = 4fd0: 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 43 6f SCardEstablishCo 4fe0: 6e 74 65 78 74 28 53 43 41 52 44 5f 53 43 4f 50 ntext(SCARD_SCOP 4ff0: 45 5f 53 59 53 54 45 4d 2c 20 4e 55 4c 4c 2c 20 E_SYSTEM, NULL, 5000: 4e 55 4c 4c 2c 20 63 61 63 6b 65 79 5f 70 63 73 NULL, cackey_pcs 5010: 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 09 69 66 20 c_handle);...if 5020: 28 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 (scard_est_conte 5030: 78 74 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f xt_ret != SCARD_ 5040: 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 S_SUCCESS) {.... 5050: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 5060: 4e 54 46 28 22 43 61 6c 6c 20 74 6f 20 53 43 61 NTF("Call to SCa 5070: 72 64 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 rdEstablishConte 5080: 78 74 20 66 61 69 6c 65 64 20 28 72 65 74 75 72 xt failed (retur 5090: 6e 65 64 20 25 73 2f 25 6c 69 29 2c 20 72 65 74 ned %s/%li), ret 50a0: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 50b0: 65 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 e", CACKEY_DEBUG 50c0: 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 _FUNC_SCARDERR_T 50d0: 4f 5f 53 54 52 28 73 63 61 72 64 5f 65 73 74 5f O_STR(scard_est_ 50e0: 63 6f 6e 74 65 78 74 5f 72 65 74 29 2c 20 28 6c context_ret), (l 50f0: 6f 6e 67 29 20 73 63 61 72 64 5f 65 73 74 5f 63 ong) scard_est_c 5100: 6f 6e 74 65 78 74 5f 72 65 74 29 3b 0a 0a 09 09 ontext_ret);.... 5110: 09 66 72 65 65 28 63 61 63 6b 65 79 5f 70 63 73 .free(cackey_pcs 5120: 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 09 09 63 61 c_handle);....ca 5130: 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 ckey_pcsc_handle 5140: 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 63 61 63 = NULL;.....cac 5150: 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e key_slots_discon 5160: 6e 65 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 09 nect_all();..... 5170: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 5180: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 5190: 09 7d 0a 09 7d 0a 0a 23 69 66 64 65 66 20 48 41 .}..}..#ifdef HA 51a0: 56 45 5f 53 43 41 52 44 49 53 56 41 4c 49 44 43 VE_SCARDISVALIDC 51b0: 4f 4e 54 45 58 54 0a 09 43 41 43 4b 45 59 5f 44 ONTEXT..CACKEY_D 51c0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 43 61 EBUG_PRINTF("SCa 51d0: 72 64 49 73 56 61 6c 69 64 43 6f 6e 74 65 78 74 rdIsValidContext 51e0: 28 29 20 63 61 6c 6c 65 64 22 29 3b 0a 09 73 63 () called");..sc 51f0: 61 72 64 5f 69 73 76 61 6c 69 64 5f 72 65 74 20 ard_isvalid_ret 5200: 3d 20 53 43 61 72 64 49 73 56 61 6c 69 64 43 6f = SCardIsValidCo 5210: 6e 74 65 78 74 28 2a 63 61 63 6b 65 79 5f 70 63 ntext(*cackey_pc 5220: 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 69 66 20 sc_handle);..if 5230: 28 73 63 61 72 64 5f 69 73 76 61 6c 69 64 5f 72 (scard_isvalid_r 5240: 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 et != SCARD_S_SU 5250: 43 43 45 53 53 29 20 7b 0a 09 09 43 41 43 4b 45 CCESS) {...CACKE 5260: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 5270: 48 61 6e 64 6c 65 20 68 61 73 20 62 65 63 6f 6d Handle has becom 5280: 65 20 69 6e 76 61 6c 69 64 20 28 53 43 61 72 64 e invalid (SCard 5290: 49 73 56 61 6c 69 64 43 6f 6e 74 65 78 74 20 3d IsValidContext = 52a0: 20 25 73 2f 25 6c 69 29 2c 20 74 72 79 69 6e 67 %s/%li), trying 52b0: 20 74 6f 20 72 65 2d 65 73 74 61 62 6c 69 73 68 to re-establish 52c0: 2e 2e 2e 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 ...", CACKEY_DEB 52d0: 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 UG_FUNC_SCARDERR 52e0: 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f 69 73 _TO_STR(scard_is 52f0: 76 61 6c 69 64 5f 72 65 74 29 2c 20 28 6c 6f 6e valid_ret), (lon 5300: 67 29 20 73 63 61 72 64 5f 69 73 76 61 6c 69 64 g) scard_isvalid 5310: 5f 72 65 74 29 3b 0a 0a 09 09 43 41 43 4b 45 59 _ret);....CACKEY 5320: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 _DEBUG_PRINTF("S 5330: 43 61 72 64 45 73 74 61 62 6c 69 73 68 43 6f 6e CardEstablishCon 5340: 74 65 78 74 28 29 20 63 61 6c 6c 65 64 22 29 3b text() called"); 5350: 0a 09 09 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e ...scard_est_con 5360: 74 65 78 74 5f 72 65 74 20 3d 20 53 43 61 72 64 text_ret = SCard 5370: 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 EstablishContext 5380: 28 53 43 41 52 44 5f 53 43 4f 50 45 5f 53 59 53 (SCARD_SCOPE_SYS 5390: 54 45 4d 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c TEM, NULL, NULL, 53a0: 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e cackey_pcsc_han 53b0: 64 6c 65 29 3b 0a 09 09 69 66 20 28 73 63 61 72 dle);...if (scar 53c0: 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 d_est_context_re 53d0: 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 t != SCARD_S_SUC 53e0: 43 45 53 53 29 20 7b 0a 09 09 09 43 41 43 4b 45 CESS) {....CACKE 53f0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 5400: 43 61 6c 6c 20 74 6f 20 53 43 61 72 64 45 73 74 Call to SCardEst 5410: 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 20 66 61 ablishContext fa 5420: 69 6c 65 64 20 28 72 65 74 75 72 6e 65 64 20 25 iled (returned % 5430: 73 2f 25 6c 69 29 2c 20 72 65 74 75 72 6e 69 6e s/%li), returnin 5440: 67 20 69 6e 20 66 61 69 6c 75 72 65 22 2c 20 43 g in failure", C 5450: 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC 5460: 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 _SCARDERR_TO_STR 5470: 28 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 (scard_est_conte 5480: 78 74 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20 xt_ret), (long) 5490: 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 scard_est_contex 54a0: 74 5f 72 65 74 29 3b 0a 0a 09 09 09 66 72 65 65 t_ret);.....free 54b0: 28 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e (cackey_pcsc_han 54c0: 64 6c 65 29 3b 0a 09 09 09 63 61 63 6b 65 79 5f dle);....cackey_ 54d0: 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 20 4e 55 pcsc_handle = NU 54e0: 4c 4c 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 LL;.....cackey_s 54f0: 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f lots_disconnect_ 5500: 61 6c 6c 28 29 3b 0a 0a 09 09 09 72 65 74 75 72 all();.....retur 5510: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f n(CACKEY_PCSC_E_ 5520: 47 45 4e 45 52 49 43 29 3b 0a 09 09 7d 0a 0a 09 GENERIC);...}... 5530: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 5540: 49 4e 54 46 28 22 48 61 6e 64 6c 65 20 68 61 73 INTF("Handle has 5550: 20 62 65 65 6e 20 72 65 2d 65 73 74 61 62 6c 69 been re-establi 5560: 73 68 65 64 22 29 3b 0a 09 7d 0a 23 65 6e 64 69 shed");..}.#endi 5570: 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 f...CACKEY_DEBUG 5580: 5f 50 52 49 4e 54 46 28 22 53 75 63 65 73 73 66 _PRINTF("Sucessf 5590: 75 6c 6c 79 20 63 6f 6e 6e 65 63 74 65 64 20 74 ully connected t 55a0: 6f 20 50 43 2f 53 43 2c 20 72 65 74 75 72 6e 69 o PC/SC, returni 55b0: 6e 67 20 69 6e 20 73 75 63 63 65 73 73 22 29 3b ng in success"); 55c0: 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 55d0: 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a 0a _PCSC_S_OK);.}.. 55e0: 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 /*. * SYNPOSIS. 55f0: 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 72 65 74 * cackey_ret 5600: 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 64 69 73 cackey_pcsc_dis 5610: 63 6f 6e 6e 65 63 74 28 76 6f 69 64 29 3b 0a 20 connect(void);. 5620: 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 *. * ARGUMENTS. 5630: 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a * None. *. * 5640: 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a RETURN VALUE. * 5650: 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 CACKEY_PCSC 5660: 5f 53 5f 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e _S_OK On 5670: 20 73 75 63 63 65 73 73 0a 20 2a 20 20 20 20 20 success. * 5680: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 CACKEY_PCSC_E_GE 5690: 4e 45 52 49 43 20 20 20 20 4f 6e 20 65 72 72 6f NERIC On erro 56a0: 72 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a r. *. * NOTES. * 56b0: 20 20 20 20 20 54 68 69 73 20 66 75 6e 63 74 69 This functi 56c0: 6f 6e 20 64 69 73 63 6f 6e 6e 65 63 74 73 20 66 on disconnects f 56d0: 72 6f 6d 20 74 68 65 20 50 43 2f 53 43 20 43 6f rom the PC/SC Co 56e0: 6e 6e 65 63 74 69 6f 6e 20 6d 61 6e 61 67 65 72 nnection manager 56f0: 20 61 6e 64 20 75 70 64 61 74 65 73 0a 20 2a 20 and updates. * 5700: 20 20 20 20 74 68 65 20 67 6c 6f 62 61 6c 20 68 the global h 5710: 61 6e 64 6c 65 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 andle.. *. */.st 5720: 61 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 atic cackey_ret 5730: 63 61 63 6b 65 79 5f 70 63 73 63 5f 64 69 73 63 cackey_pcsc_disc 5740: 6f 6e 6e 65 63 74 28 76 6f 69 64 29 20 7b 0a 09 onnect(void) {.. 5750: 4c 4f 4e 47 20 73 63 61 72 64 5f 72 65 6c 5f 63 LONG scard_rel_c 5760: 6f 6e 74 65 78 74 5f 72 65 74 3b 0a 0a 09 43 41 ontext_ret;...CA 5770: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 5780: 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 5790: 69 66 20 28 63 61 63 6b 65 79 5f 70 63 73 63 5f if (cackey_pcsc_ 57a0: 68 61 6e 64 6c 65 20 3d 3d 20 4e 55 4c 4c 29 20 handle == NULL) 57b0: 7b 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 {...return(CACKE 57c0: 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 09 7d Y_PCSC_S_OK);..} 57d0: 0a 0a 09 73 63 61 72 64 5f 72 65 6c 5f 63 6f 6e ...scard_rel_con 57e0: 74 65 78 74 5f 72 65 74 20 3d 20 53 43 61 72 64 text_ret = SCard 57f0: 52 65 6c 65 61 73 65 43 6f 6e 74 65 78 74 28 2a ReleaseContext(* 5800: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 5810: 6c 65 29 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 le);...if (cacke 5820: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 20 7b y_pcsc_handle) { 5830: 0a 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f 70 ...free(cackey_p 5840: 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 0a 09 csc_handle);.... 5850: 09 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e .cackey_pcsc_han 5860: 64 6c 65 20 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a dle = NULL;..}.. 5870: 09 69 66 20 28 73 63 61 72 64 5f 72 65 6c 5f 63 .if (scard_rel_c 5880: 6f 6e 74 65 78 74 5f 72 65 74 20 21 3d 20 53 43 ontext_ret != SC 5890: 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b ARD_S_SUCCESS) { 58a0: 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 58b0: 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 _PCSC_E_GENERIC) 58c0: 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 43 41 ;..}...return(CA 58d0: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b CKEY_PCSC_S_OK); 58e0: 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 .}../*. * SYNPOS 58f0: 49 53 0a 20 2a 20 20 20 20 20 76 6f 69 64 20 63 IS. * void c 5900: 61 63 6b 65 79 5f 6d 61 72 6b 5f 73 6c 6f 74 5f ackey_mark_slot_ 5910: 72 65 73 65 74 28 73 74 72 75 63 74 20 63 61 63 reset(struct cac 5920: 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 3b key_slot *slot); 5930: 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 . *. * ARGUMENTS 5940: 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a . * None. *. 5950: 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a * RETURN VALUE. 5960: 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 * None. *. 5970: 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 54 * NOTES. * T 5980: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 6d 61 72 his function mar 5990: 6b 73 20 61 20 73 6c 6f 74 20 68 61 73 20 68 61 ks a slot has ha 59a0: 76 69 6e 67 20 62 65 65 6e 20 72 65 73 65 74 2c ving been reset, 59b0: 20 74 6f 20 6c 61 74 65 72 20 62 65 20 63 6c 65 to later be cle 59c0: 61 6e 65 64 20 75 70 2e 0a 20 2a 20 20 20 20 20 aned up.. * 59d0: 43 6c 65 61 6e 75 70 20 6f 6e 6c 79 20 68 61 70 Cleanup only hap 59e0: 70 65 6e 73 20 77 68 65 6e 20 61 20 50 4b 43 53 pens when a PKCS 59f0: 23 31 31 20 63 6c 69 65 6e 74 20 63 61 6c 6c 73 #11 client calls 5a00: 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e C_FindObjectsIn 5a10: 69 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 it.. *. */.stati 5a20: 63 20 76 6f 69 64 20 63 61 63 6b 65 79 5f 6d 61 c void cackey_ma 5a30: 72 6b 5f 73 6c 6f 74 5f 72 65 73 65 74 28 73 74 rk_slot_reset(st 5a40: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ruct cackey_slot 5a50: 20 2a 73 6c 6f 74 29 20 7b 0a 09 69 66 20 28 73 *slot) {..if (s 5a60: 6c 6f 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 lot == NULL) {.. 5a70: 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 43 41 .return;..}...CA 5a80: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 5a90: 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 5aa0: 69 66 20 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 if (slot->pcsc_c 5ab0: 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 29 20 7b ard_connected) { 5ac0: 0a 09 09 53 43 61 72 64 44 69 73 63 6f 6e 6e 65 ...SCardDisconne 5ad0: 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 ct(slot->pcsc_ca 5ae0: 72 64 2c 20 53 43 41 52 44 5f 4c 45 41 56 45 5f rd, SCARD_LEAVE_ 5af0: 43 41 52 44 29 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 CARD);..}...slot 5b00: 2d 3e 73 6c 6f 74 5f 72 65 73 65 74 20 3d 20 31 ->slot_reset = 1 5b10: 3b 0a 09 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 ;..slot->pcsc_ca 5b20: 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 rd_connected = 0 5b30: 3b 0a 09 73 6c 6f 74 2d 3e 74 6f 6b 65 6e 5f 66 ;..slot->token_f 5b40: 6c 61 67 73 20 3d 20 43 4b 46 5f 4c 4f 47 49 4e lags = CKF_LOGIN 5b50: 5f 52 45 51 55 49 52 45 44 3b 0a 0a 09 43 41 43 _REQUIRED;...CAC 5b60: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 5b70: 28 22 52 65 74 75 72 6e 69 6e 67 2e 22 29 3b 0a ("Returning.");. 5b80: 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a ..return;.}../*. 5b90: 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 * SYNPOSIS. * 5ba0: 20 20 20 4c 4f 4e 47 20 63 61 63 6b 65 79 5f 72 LONG cackey_r 5bb0: 65 63 6f 6e 6e 65 63 74 5f 63 61 72 64 28 73 74 econnect_card(st 5bc0: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ruct cackey_slot 5bd0: 20 2a 73 6c 6f 74 2c 20 44 57 4f 52 44 20 64 65 *slot, DWORD de 5be0: 66 61 75 6c 74 5f 70 72 6f 74 6f 63 6f 6c 2c 20 fault_protocol, 5bf0: 4c 50 44 57 4f 52 44 20 73 65 6c 65 63 74 65 64 LPDWORD selected 5c00: 5f 70 72 6f 74 6f 63 6f 6c 29 3b 0a 20 2a 0a 20 _protocol);. *. 5c10: 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 * ARGUMENTS. * 5c20: 20 20 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a cackey_slot * 5c30: 73 6c 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 slot. * 5c40: 53 6c 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d Slot to send com 5c50: 6d 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 20 mands to. *. * 5c60: 20 20 20 44 57 4f 52 44 20 64 65 66 61 75 6c 74 DWORD default 5c70: 5f 70 72 6f 74 6f 63 6f 6c 0a 20 2a 20 20 20 20 _protocol. * 5c80: 20 20 20 20 20 50 72 6f 74 6f 63 6f 6c 20 74 6f Protocol to 5c90: 20 61 74 74 65 6d 70 74 20 66 69 72 73 74 0a 20 attempt first. 5ca0: 2a 0a 20 2a 20 20 20 20 20 4c 50 44 57 4f 52 44 *. * LPDWORD 5cb0: 20 73 65 6c 65 63 74 65 64 5f 70 72 6f 74 6f 63 selected_protoc 5cc0: 6f 6c 0a 20 2a 20 20 20 20 20 20 20 20 20 5b 4f ol. * [O 5cd0: 55 54 5d 20 50 72 6f 74 6f 63 6f 6c 20 73 65 6c UT] Protocol sel 5ce0: 65 63 74 65 64 0a 20 2a 0a 20 2a 20 52 45 54 55 ected. *. * RETU 5cf0: 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 RN VALUE. * 5d00: 54 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 The return value 5d10: 20 66 72 6f 6d 20 53 43 61 72 64 52 65 63 6f 6e from SCardRecon 5d20: 6e 65 63 74 28 29 0a 20 2a 0a 20 2a 20 4e 4f 54 nect(). *. * NOT 5d30: 45 53 0a 20 2a 20 20 20 20 20 54 68 69 73 20 66 ES. * This f 5d40: 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 unction is a wra 5d50: 70 70 65 72 20 61 72 6f 75 6e 64 20 53 43 61 72 pper around SCar 5d60: 64 52 65 63 6f 6e 6e 65 63 74 28 29 0a 20 2a 0a dReconnect(). *. 5d70: 20 2a 20 20 20 20 20 54 68 65 20 53 43 61 72 64 * The SCard 5d80: 52 65 63 6f 6e 6e 65 63 74 28 29 20 66 75 6e 63 Reconnect() func 5d90: 74 69 6f 6e 20 63 61 6c 6c 20 77 69 6c 6c 20 62 tion call will b 5da0: 65 20 63 61 6c 6c 65 64 20 66 69 72 73 74 20 77 e called first w 5db0: 69 74 68 20 74 68 65 0a 20 2a 20 20 20 20 20 64 ith the. * d 5dc0: 77 50 72 65 66 65 72 72 65 64 50 72 6f 74 6f 63 wPreferredProtoc 5dd0: 6f 6c 73 20 6f 66 20 22 64 65 66 61 75 6c 74 5f ols of "default_ 5de0: 70 72 6f 74 6f 63 6f 6c 22 2e 20 20 49 66 20 74 protocol". If t 5df0: 68 61 74 20 63 61 6c 6c 20 72 65 74 75 72 6e 73 hat call returns 5e00: 0a 20 2a 20 20 20 20 20 53 43 41 52 44 5f 45 5f . * SCARD_E_ 5e10: 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 20 74 PROTO_MISMATCH t 5e20: 72 79 20 61 67 61 69 6e 20 77 69 74 68 20 61 20 ry again with a 5e30: 70 72 6f 74 6f 63 6f 6c 20 6f 66 20 54 3d 30 2c protocol of T=0, 5e40: 20 61 6e 64 20 66 61 69 6c 69 6e 67 0a 20 2a 20 and failing. * 5e50: 20 20 20 20 74 68 61 74 20 54 3d 31 2e 0a 20 2a that T=1.. * 5e60: 0a 20 2a 2f 0a 73 74 61 74 69 63 20 4c 4f 4e 47 . */.static LONG 5e70: 20 63 61 63 6b 65 79 5f 72 65 63 6f 6e 6e 65 63 cackey_reconnec 5e80: 74 5f 63 61 72 64 28 73 74 72 75 63 74 20 63 61 t_card(struct ca 5e90: 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c ckey_slot *slot, 5ea0: 20 44 57 4f 52 44 20 64 65 66 61 75 6c 74 5f 70 DWORD default_p 5eb0: 72 6f 74 6f 63 6f 6c 2c 20 4c 50 44 57 4f 52 44 rotocol, LPDWORD 5ec0: 20 73 65 6c 65 63 74 65 64 5f 70 72 6f 74 6f 63 selected_protoc 5ed0: 6f 6c 29 20 7b 0a 09 4c 4f 4e 47 20 73 63 61 72 ol) {..LONG scar 5ee0: 64 5f 63 6f 6e 6e 5f 72 65 74 3b 0a 0a 09 73 63 d_conn_ret;...sc 5ef0: 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 53 ard_conn_ret = S 5f00: 43 61 72 64 52 65 63 6f 6e 6e 65 63 74 28 73 6c CardReconnect(sl 5f10: 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 53 ot->pcsc_card, S 5f20: 43 41 52 44 5f 53 48 41 52 45 5f 53 48 41 52 45 CARD_SHARE_SHARE 5f30: 44 2c 20 64 65 66 61 75 6c 74 5f 70 72 6f 74 6f D, default_proto 5f40: 63 6f 6c 2c 20 53 43 41 52 44 5f 52 45 53 45 54 col, SCARD_RESET 5f50: 5f 43 41 52 44 2c 20 73 65 6c 65 63 74 65 64 5f _CARD, selected_ 5f60: 70 72 6f 74 6f 63 6f 6c 29 3b 0a 0a 09 69 66 20 protocol);...if 5f70: 28 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 (scard_conn_ret 5f80: 3d 3d 20 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f == SCARD_E_PROTO 5f90: 5f 4d 49 53 4d 41 54 43 48 29 20 7b 0a 09 09 43 _MISMATCH) {...C 5fa0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 5fb0: 54 46 28 22 53 43 61 72 64 52 65 63 6f 6e 6e 65 TF("SCardReconne 5fc0: 63 74 28 29 20 72 65 74 75 72 6e 65 64 20 53 43 ct() returned SC 5fd0: 41 52 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d ARD_E_PROTO_MISM 5fe0: 41 54 43 48 2c 20 74 72 79 69 6e 67 20 77 69 74 ATCH, trying wit 5ff0: 68 20 6a 75 73 74 20 54 3d 30 22 29 0a 09 09 73 h just T=0")...s 6000: 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 card_conn_ret = 6010: 53 43 61 72 64 52 65 63 6f 6e 6e 65 63 74 28 73 SCardReconnect(s 6020: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 lot->pcsc_card, 6030: 53 43 41 52 44 5f 53 48 41 52 45 5f 53 48 41 52 SCARD_SHARE_SHAR 6040: 45 44 2c 20 53 43 41 52 44 5f 50 52 4f 54 4f 43 ED, SCARD_PROTOC 6050: 4f 4c 5f 54 30 2c 20 53 43 41 52 44 5f 52 45 53 OL_T0, SCARD_RES 6060: 45 54 5f 43 41 52 44 2c 20 73 65 6c 65 63 74 65 ET_CARD, selecte 6070: 64 5f 70 72 6f 74 6f 63 6f 6c 29 3b 0a 0a 09 09 d_protocol);.... 6080: 69 66 20 28 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 if (scard_conn_r 6090: 65 74 20 3d 3d 20 53 43 41 52 44 5f 45 5f 50 52 et == SCARD_E_PR 60a0: 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 29 20 7b 0a OTO_MISMATCH) {. 60b0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 60c0: 50 52 49 4e 54 46 28 22 53 43 61 72 64 52 65 63 PRINTF("SCardRec 60d0: 6f 6e 6e 65 63 74 28 29 20 72 65 74 75 72 6e 65 onnect() returne 60e0: 64 20 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f 5f d SCARD_E_PROTO_ 60f0: 4d 49 53 4d 41 54 43 48 2c 20 74 72 79 69 6e 67 MISMATCH, trying 6100: 20 77 69 74 68 20 6a 75 73 74 20 54 3d 31 22 29 with just T=1") 6110: 0a 09 09 09 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 ....scard_conn_r 6120: 65 74 20 3d 20 53 43 61 72 64 52 65 63 6f 6e 6e et = SCardReconn 6130: 65 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 ect(slot->pcsc_c 6140: 61 72 64 2c 20 53 43 41 52 44 5f 53 48 41 52 45 ard, SCARD_SHARE 6150: 5f 53 48 41 52 45 44 2c 20 53 43 41 52 44 5f 50 _SHARED, SCARD_P 6160: 52 4f 54 4f 43 4f 4c 5f 54 31 2c 20 53 43 41 52 ROTOCOL_T1, SCAR 6170: 44 5f 52 45 53 45 54 5f 43 41 52 44 2c 20 73 65 D_RESET_CARD, se 6180: 6c 65 63 74 65 64 5f 70 72 6f 74 6f 63 6f 6c 29 lected_protocol) 6190: 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 ;...}..}...retur 61a0: 6e 28 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 n(scard_conn_ret 61b0: 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 );.}../*. * SYNP 61c0: 4f 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b OSIS. * cack 61d0: 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 63 6f ey_ret cackey_co 61e0: 6e 6e 65 63 74 5f 63 61 72 64 28 73 74 72 75 63 nnect_card(struc 61f0: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 t cackey_slot *s 6200: 6c 6f 74 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 lot);. *. * ARGU 6210: 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 63 61 63 MENTS. * cac 6220: 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a 20 key_slot *slot. 6230: 2a 20 20 20 20 20 20 20 20 20 53 6c 6f 74 20 74 * Slot t 6240: 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 20 o send commands 6250: 74 6f 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 to. *. * RETURN 6260: 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 43 41 43 VALUE. * CAC 6270: 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 20 KEY_PCSC_S_OK 6280: 20 20 20 20 20 20 4f 6e 20 73 75 63 63 65 73 73 On success 6290: 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 5f 50 . * CACKEY_P 62a0: 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 20 20 20 CSC_E_GENERIC 62b0: 20 4f 6e 20 65 72 72 6f 72 0a 20 2a 0a 20 2a 20 On error. *. * 62c0: 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 4e 6f 6e NOTES. * Non 62d0: 65 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 e. *. */.static 62e0: 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 cackey_ret cacke 62f0: 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 72 64 28 73 y_connect_card(s 6300: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f truct cackey_slo 6310: 74 20 2a 73 6c 6f 74 29 20 7b 0a 09 63 61 63 6b t *slot) {..cack 6320: 65 79 5f 72 65 74 20 70 63 73 63 5f 63 6f 6e 6e ey_ret pcsc_conn 6330: 65 63 74 5f 72 65 74 3b 0a 09 44 57 4f 52 44 20 ect_ret;..DWORD 6340: 70 72 6f 74 6f 63 6f 6c 3b 0a 09 4c 4f 4e 47 20 protocol;..LONG 6350: 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 3b 0a scard_conn_ret;. 6360: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 6370: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 6380: 3b 0a 0a 09 69 66 20 28 21 73 6c 6f 74 29 20 7b ;...if (!slot) { 6390: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 63a0: 50 52 49 4e 54 46 28 22 49 6e 76 61 6c 69 64 20 PRINTF("Invalid 63b0: 73 6c 6f 74 20 73 70 65 63 69 66 69 65 64 2c 20 slot specified, 63c0: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai 63d0: 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 lure");....retur 63e0: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f n(CACKEY_PCSC_E_ 63f0: 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 70 GENERIC);..}...p 6400: 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 csc_connect_ret 6410: 3d 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 63 6f = cackey_pcsc_co 6420: 6e 6e 65 63 74 28 29 3b 0a 09 69 66 20 28 70 63 nnect();..if (pc 6430: 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 21 sc_connect_ret ! 6440: 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f = CACKEY_PCSC_S_ 6450: 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 OK) {...CACKEY_D 6460: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 6f 6e EBUG_PRINTF("Con 6470: 6e 65 63 74 69 6f 6e 20 74 6f 20 50 43 2f 53 43 nection to PC/SC 6480: 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 69 failed, returni 6490: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b ng in failure"); 64a0: 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 ....return(CACKE 64b0: 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 Y_PCSC_E_GENERIC 64c0: 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 43 6f 6e 6e 65 );..}.../* Conne 64d0: 63 74 20 74 6f 20 72 65 61 64 65 72 2c 20 69 66 ct to reader, if 64e0: 20 6e 65 65 64 65 64 20 2a 2f 0a 09 69 66 20 28 needed */..if ( 64f0: 21 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 !slot->pcsc_card 6500: 5f 63 6f 6e 6e 65 63 74 65 64 29 20 7b 0a 09 09 _connected) {... 6510: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 6520: 4e 54 46 28 22 53 43 61 72 64 43 6f 6e 6e 65 63 NTF("SCardConnec 6530: 74 28 25 73 29 20 63 61 6c 6c 65 64 22 2c 20 73 t(%s) called", s 6540: 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 72 lot->pcsc_reader 6550: 29 3b 0a 09 09 73 63 61 72 64 5f 63 6f 6e 6e 5f );...scard_conn_ 6560: 72 65 74 20 3d 20 53 43 61 72 64 43 6f 6e 6e 65 ret = SCardConne 6570: 63 74 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 5f ct(*cackey_pcsc_ 6580: 68 61 6e 64 6c 65 2c 20 73 6c 6f 74 2d 3e 70 63 handle, slot->pc 6590: 73 63 5f 72 65 61 64 65 72 2c 20 53 43 41 52 44 sc_reader, SCARD 65a0: 5f 53 48 41 52 45 5f 53 48 41 52 45 44 2c 20 53 _SHARE_SHARED, S 65b0: 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 CARD_PROTOCOL_T0 65c0: 20 7c 20 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f | SCARD_PROTOCO 65d0: 4c 5f 54 31 2c 20 26 73 6c 6f 74 2d 3e 70 63 73 L_T1, &slot->pcs 65e0: 63 5f 63 61 72 64 2c 20 26 70 72 6f 74 6f 63 6f c_card, &protoco 65f0: 6c 29 3b 0a 0a 09 09 69 66 20 28 73 63 61 72 64 l);....if (scard 6600: 5f 63 6f 6e 6e 5f 72 65 74 20 3d 3d 20 53 43 41 _conn_ret == SCA 6610: 52 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 RD_E_PROTO_MISMA 6620: 54 43 48 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 TCH) {....CACKEY 6630: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 _DEBUG_PRINTF("S 6640: 43 61 72 64 43 6f 6e 6e 65 63 74 28 29 20 72 65 CardConnect() re 6650: 74 75 72 6e 65 64 20 53 43 41 52 44 5f 45 5f 50 turned SCARD_E_P 6660: 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 2c 20 74 ROTO_MISMATCH, t 6670: 72 79 69 6e 67 20 77 69 74 68 20 6a 75 73 74 20 rying with just 6680: 54 3d 30 22 29 0a 09 09 09 73 63 61 72 64 5f 63 T=0")....scard_c 6690: 6f 6e 6e 5f 72 65 74 20 3d 20 53 43 61 72 64 43 onn_ret = SCardC 66a0: 6f 6e 6e 65 63 74 28 2a 63 61 63 6b 65 79 5f 70 onnect(*cackey_p 66b0: 63 73 63 5f 68 61 6e 64 6c 65 2c 20 73 6c 6f 74 csc_handle, slot 66c0: 2d 3e 70 63 73 63 5f 72 65 61 64 65 72 2c 20 53 ->pcsc_reader, S 66d0: 43 41 52 44 5f 53 48 41 52 45 5f 53 48 41 52 45 CARD_SHARE_SHARE 66e0: 44 2c 20 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f D, SCARD_PROTOCO 66f0: 4c 5f 54 30 2c 20 26 73 6c 6f 74 2d 3e 70 63 73 L_T0, &slot->pcs 6700: 63 5f 63 61 72 64 2c 20 26 70 72 6f 74 6f 63 6f c_card, &protoco 6710: 6c 29 3b 0a 0a 09 09 09 69 66 20 28 73 63 61 72 l);.....if (scar 6720: 64 5f 63 6f 6e 6e 5f 72 65 74 20 3d 3d 20 53 43 d_conn_ret == SC 6730: 41 52 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d ARD_E_PROTO_MISM 6740: 41 54 43 48 29 20 7b 0a 09 09 09 09 43 41 43 4b ATCH) {.....CACK 6750: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 6760: 22 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 29 20 "SCardConnect() 6770: 72 65 74 75 72 6e 65 64 20 53 43 41 52 44 5f 45 returned SCARD_E 6780: 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 2c _PROTO_MISMATCH, 6790: 20 74 72 79 69 6e 67 20 77 69 74 68 20 6a 75 73 trying with jus 67a0: 74 20 54 3d 31 22 29 0a 09 09 09 09 73 63 61 72 t T=1").....scar 67b0: 64 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 53 43 61 d_conn_ret = SCa 67c0: 72 64 43 6f 6e 6e 65 63 74 28 2a 63 61 63 6b 65 rdConnect(*cacke 67d0: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 73 y_pcsc_handle, s 67e0: 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 72 lot->pcsc_reader 67f0: 2c 20 53 43 41 52 44 5f 53 48 41 52 45 5f 53 48 , SCARD_SHARE_SH 6800: 41 52 45 44 2c 20 53 43 41 52 44 5f 50 52 4f 54 ARED, SCARD_PROT 6810: 4f 43 4f 4c 5f 54 31 2c 20 26 73 6c 6f 74 2d 3e OCOL_T1, &slot-> 6820: 70 63 73 63 5f 63 61 72 64 2c 20 26 70 72 6f 74 pcsc_card, &prot 6830: 6f 63 6f 6c 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a ocol);....}...}. 6840: 0a 09 09 69 66 20 28 73 63 61 72 64 5f 63 6f 6e ...if (scard_con 6850: 6e 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f 57 n_ret == SCARD_W 6860: 5f 55 4e 50 4f 57 45 52 45 44 5f 43 41 52 44 29 _UNPOWERED_CARD) 6870: 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB 6880: 55 47 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 UG_PRINTF("SCard 6890: 43 6f 6e 6e 65 63 74 28 29 20 72 65 74 75 72 6e Connect() return 68a0: 65 64 20 53 43 41 52 44 5f 57 5f 55 4e 50 4f 57 ed SCARD_W_UNPOW 68b0: 45 52 45 44 5f 43 41 52 44 2c 20 74 72 79 69 6e ERED_CARD, tryin 68c0: 67 20 74 6f 20 72 65 2d 63 6f 6e 6e 65 63 74 2e g to re-connect. 68d0: 2e 2e 22 29 3b 0a 0a 09 09 09 73 63 61 72 64 5f ..");.....scard_ 68e0: 63 6f 6e 6e 5f 72 65 74 20 3d 20 53 43 61 72 64 conn_ret = SCard 68f0: 43 6f 6e 6e 65 63 74 28 2a 63 61 63 6b 65 79 5f Connect(*cackey_ 6900: 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 73 6c 6f pcsc_handle, slo 6910: 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 72 2c 20 t->pcsc_reader, 6920: 53 43 41 52 44 5f 53 48 41 52 45 5f 44 49 52 45 SCARD_SHARE_DIRE 6930: 43 54 2c 20 53 43 41 52 44 5f 50 52 4f 54 4f 43 CT, SCARD_PROTOC 6940: 4f 4c 5f 54 30 20 7c 20 53 43 41 52 44 5f 50 52 OL_T0 | SCARD_PR 6950: 4f 54 4f 43 4f 4c 5f 54 31 2c 20 26 73 6c 6f 74 OTOCOL_T1, &slot 6960: 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 26 70 72 ->pcsc_card, &pr 6970: 6f 74 6f 63 6f 6c 29 3b 0a 0a 09 09 09 69 66 20 otocol);.....if 6980: 28 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 (scard_conn_ret 6990: 3d 3d 20 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f == SCARD_E_PROTO 69a0: 5f 4d 49 53 4d 41 54 43 48 29 20 7b 0a 09 09 09 _MISMATCH) {.... 69b0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 69c0: 49 4e 54 46 28 22 53 43 61 72 64 43 6f 6e 6e 65 INTF("SCardConne 69d0: 63 74 28 29 20 72 65 74 75 72 6e 65 64 20 53 43 ct() returned SC 69e0: 41 52 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d ARD_E_PROTO_MISM 69f0: 41 54 43 48 2c 20 74 72 79 69 6e 67 20 77 69 74 ATCH, trying wit 6a00: 68 20 6a 75 73 74 20 54 3d 30 22 29 0a 09 09 09 h just T=0").... 6a10: 09 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 .scard_conn_ret 6a20: 3d 20 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 2a = SCardConnect(* 6a30: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 6a40: 6c 65 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 le, slot->pcsc_r 6a50: 65 61 64 65 72 2c 20 53 43 41 52 44 5f 53 48 41 eader, SCARD_SHA 6a60: 52 45 5f 53 48 41 52 45 44 2c 20 53 43 41 52 44 RE_SHARED, SCARD 6a70: 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 2c 20 26 73 _PROTOCOL_T0, &s 6a80: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 lot->pcsc_card, 6a90: 26 70 72 6f 74 6f 63 6f 6c 29 3b 0a 0a 09 09 09 &protocol);..... 6aa0: 09 69 66 20 28 73 63 61 72 64 5f 63 6f 6e 6e 5f .if (scard_conn_ 6ab0: 72 65 74 20 3d 3d 20 53 43 41 52 44 5f 45 5f 50 ret == SCARD_E_P 6ac0: 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 29 20 7b ROTO_MISMATCH) { 6ad0: 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 6ae0: 55 47 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 UG_PRINTF("SCard 6af0: 43 6f 6e 6e 65 63 74 28 29 20 72 65 74 75 72 6e Connect() return 6b00: 65 64 20 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f ed SCARD_E_PROTO 6b10: 5f 4d 49 53 4d 41 54 43 48 2c 20 74 72 79 69 6e _MISMATCH, tryin 6b20: 67 20 77 69 74 68 20 6a 75 73 74 20 54 3d 31 22 g with just T=1" 6b30: 29 0a 09 09 09 09 09 73 63 61 72 64 5f 63 6f 6e )......scard_con 6b40: 6e 5f 72 65 74 20 3d 20 53 43 61 72 64 43 6f 6e n_ret = SCardCon 6b50: 6e 65 63 74 28 2a 63 61 63 6b 65 79 5f 70 63 73 nect(*cackey_pcs 6b60: 63 5f 68 61 6e 64 6c 65 2c 20 73 6c 6f 74 2d 3e c_handle, slot-> 6b70: 70 63 73 63 5f 72 65 61 64 65 72 2c 20 53 43 41 pcsc_reader, SCA 6b80: 52 44 5f 53 48 41 52 45 5f 53 48 41 52 45 44 2c RD_SHARE_SHARED, 6b90: 20 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f SCARD_PROTOCOL_ 6ba0: 54 31 2c 20 26 73 6c 6f 74 2d 3e 70 63 73 63 5f T1, &slot->pcsc_ 6bb0: 63 61 72 64 2c 20 26 70 72 6f 74 6f 63 6f 6c 29 card, &protocol) 6bc0: 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 ;.....}....}.... 6bd0: 09 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 .scard_conn_ret 6be0: 3d 20 63 61 63 6b 65 79 5f 72 65 63 6f 6e 6e 65 = cackey_reconne 6bf0: 63 74 5f 63 61 72 64 28 73 6c 6f 74 2c 20 70 72 ct_card(slot, pr 6c00: 6f 74 6f 63 6f 6c 2c 20 26 70 72 6f 74 6f 63 6f otocol, &protoco 6c10: 6c 29 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 73 l);...}....if (s 6c20: 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 21 3d card_conn_ret != 6c30: 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 SCARD_S_SUCCESS 6c40: 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE 6c50: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 6f 6e 6e BUG_PRINTF("Conn 6c60: 65 63 74 69 6f 6e 20 74 6f 20 63 61 72 64 20 66 ection to card f 6c70: 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 69 6e 67 ailed, returning 6c80: 20 69 6e 20 66 61 69 6c 75 72 65 20 28 53 43 61 in failure (SCa 6c90: 72 64 43 6f 6e 6e 65 63 74 28 29 20 3d 20 25 73 rdConnect() = %s 6ca0: 2f 25 6c 69 29 22 2c 20 43 41 43 4b 45 59 5f 44 /%li)", CACKEY_D 6cb0: 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 EBUG_FUNC_SCARDE 6cc0: 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f RR_TO_STR(scard_ 6cd0: 63 6f 6e 6e 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 conn_ret), (long 6ce0: 29 20 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 ) scard_conn_ret 6cf0: 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 41 );.....return(CA 6d00: 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 CKEY_PCSC_E_GENE 6d10: 52 49 43 29 3b 0a 09 09 7d 0a 0a 09 09 73 6c 6f RIC);...}....slo 6d20: 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e t->pcsc_card_con 6d30: 6e 65 63 74 65 64 20 3d 20 31 3b 0a 09 09 73 6c nected = 1;...sl 6d40: 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f ot->transaction_ 6d50: 64 65 70 74 68 20 3d 20 30 3b 0a 09 09 73 6c 6f depth = 0;...slo 6d60: 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 6e t->transaction_n 6d70: 65 65 64 5f 68 77 5f 6c 6f 63 6b 20 3d 20 30 3b eed_hw_lock = 0; 6d80: 0a 09 09 73 6c 6f 74 2d 3e 70 72 6f 74 6f 63 6f ...slot->protoco 6d90: 6c 20 3d 20 70 72 6f 74 6f 63 6f 6c 3b 0a 09 7d l = protocol;..} 6da0: 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 6db0: 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a 0a _PCSC_S_OK);.}.. 6dc0: 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 /*. * SYNPOSIS. 6dd0: 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 72 65 74 * cackey_ret 6de0: 20 63 61 63 6b 65 79 5f 62 65 67 69 6e 5f 74 72 cackey_begin_tr 6df0: 61 6e 73 61 63 74 69 6f 6e 28 73 74 72 75 63 74 ansaction(struct 6e00: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c cackey_slot *sl 6e10: 6f 74 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d ot);. *. * ARGUM 6e20: 45 4e 54 53 0a 20 2a 20 20 20 20 20 63 61 63 6b ENTS. * cack 6e30: 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a 20 2a ey_slot *slot. * 6e40: 20 20 20 20 20 20 20 20 20 53 6c 6f 74 20 74 6f Slot to 6e50: 20 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 20 74 send commands t 6e60: 6f 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 o. *. * RETURN V 6e70: 41 4c 55 45 0a 20 2a 20 20 20 20 20 43 41 43 4b ALUE. * CACK 6e80: 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 20 20 EY_PCSC_S_OK 6e90: 20 20 20 20 20 4f 6e 20 73 75 63 63 65 73 73 0a On success. 6ea0: 20 2a 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 * CACKEY_PC 6eb0: 53 43 5f 45 5f 47 45 4e 45 52 49 43 20 20 20 20 SC_E_GENERIC 6ec0: 4f 6e 20 65 72 72 6f 72 0a 20 2a 0a 20 2a 20 4e On error. *. * N 6ed0: 4f 54 45 53 0a 20 2a 20 20 20 20 20 54 68 65 20 OTES. * The 6ee0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 68 6f 75 transaction shou 6ef0: 6c 64 20 62 65 20 74 65 72 6d 69 6e 61 74 65 64 ld be terminated 6f00: 20 75 73 69 6e 67 20 22 63 61 63 6b 65 79 5f 65 using "cackey_e 6f10: 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 22 0a nd_transaction". 6f20: 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63 61 *. */.static ca 6f30: 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f ckey_ret cackey_ 6f40: 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f begin_transactio 6f50: 6e 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f n(struct cackey_ 6f60: 73 6c 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a 09 63 slot *slot) {..c 6f70: 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 ackey_ret cackey 6f80: 5f 63 6f 6e 6e 5f 72 65 74 3b 0a 09 4c 4f 4e 47 _conn_ret;..LONG 6f90: 20 73 63 61 72 64 5f 74 72 61 6e 73 5f 72 65 74 scard_trans_ret 6fa0: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 6fb0: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 6fc0: 22 29 3b 0a 0a 09 63 61 63 6b 65 79 5f 63 6f 6e ");...cackey_con 6fd0: 6e 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 63 n_ret = cackey_c 6fe0: 6f 6e 6e 65 63 74 5f 63 61 72 64 28 73 6c 6f 74 onnect_card(slot 6ff0: 29 3b 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 63 );..if (cackey_c 7000: 6f 6e 6e 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 onn_ret != CACKE 7010: 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 Y_PCSC_S_OK) {.. 7020: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 7030: 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 INTF("Unable to 7040: 63 6f 6e 6e 65 63 74 20 74 6f 20 63 61 72 64 2c connect to card, 7050: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 65 72 returning in er 7060: 72 6f 72 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ror");....return 7070: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 (CACKEY_PCSC_E_G 7080: 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 73 6c ENERIC);..}...sl 7090: 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f ot->transaction_ 70a0: 64 65 70 74 68 2b 2b 3b 0a 0a 09 69 66 20 28 73 depth++;...if (s 70b0: 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e lot->transaction 70c0: 5f 64 65 70 74 68 20 3e 20 31 20 26 26 20 21 73 _depth > 1 && !s 70d0: 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e lot->transaction 70e0: 5f 6e 65 65 64 5f 68 77 5f 6c 6f 63 6b 29 20 7b _need_hw_lock) { 70f0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 7100: 50 52 49 4e 54 46 28 22 41 6c 72 65 61 64 79 20 PRINTF("Already 7110: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e in a transaction 7120: 2c 20 70 65 72 66 6f 72 6d 69 6e 67 20 6e 6f 20 , performing no 7130: 61 63 74 69 6f 6e 20 28 6e 65 77 20 64 65 70 74 action (new dept 7140: 68 20 3d 20 25 69 29 22 2c 20 73 6c 6f 74 2d 3e h = %i)", slot-> 7150: 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 transaction_dept 7160: 68 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 h);....return(CA 7170: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b CKEY_PCSC_S_OK); 7180: 0a 09 7d 0a 0a 09 73 6c 6f 74 2d 3e 74 72 61 6e ..}...slot->tran 7190: 73 61 63 74 69 6f 6e 5f 6e 65 65 64 5f 68 77 5f saction_need_hw_ 71a0: 6c 6f 63 6b 20 3d 20 30 3b 0a 0a 09 73 63 61 72 lock = 0;...scar 71b0: 64 5f 74 72 61 6e 73 5f 72 65 74 20 3d 20 53 43 d_trans_ret = SC 71c0: 61 72 64 42 65 67 69 6e 54 72 61 6e 73 61 63 74 ardBeginTransact 71d0: 69 6f 6e 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 ion(slot->pcsc_c 71e0: 61 72 64 29 3b 0a 09 69 66 20 28 73 63 61 72 64 ard);..if (scard 71f0: 5f 74 72 61 6e 73 5f 72 65 74 20 21 3d 20 53 43 _trans_ret != SC 7200: 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b ARD_S_SUCCESS) { 7210: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 7220: 50 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 PRINTF("Unable t 7230: 6f 20 62 65 67 69 6e 20 74 72 61 6e 73 61 63 74 o begin transact 7240: 69 6f 6e 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 ion, returning i 7250: 6e 20 65 72 72 6f 72 22 29 3b 0a 0a 09 09 72 65 n error");....re 7260: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC 7270: 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a _E_GENERIC);..}. 7280: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 7290: 52 49 4e 54 46 28 22 53 75 63 65 73 73 66 75 6c RINTF("Sucessful 72a0: 6c 79 20 62 65 67 61 6e 20 74 72 61 6e 73 61 63 ly began transac 72b0: 74 69 6f 6e 20 6f 6e 20 73 6c 6f 74 20 28 25 73 tion on slot (%s 72c0: 29 22 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 )", slot->pcsc_r 72d0: 65 61 64 65 72 29 3b 0a 0a 09 72 65 74 75 72 6e eader);...return 72e0: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f (CACKEY_PCSC_S_O 72f0: 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e K);.}../*. * SYN 7300: 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 POSIS. * cac 7310: 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 65 key_ret cackey_e 7320: 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 nd_transaction(s 7330: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f truct cackey_slo 7340: 74 20 2a 73 6c 6f 74 29 3b 0a 20 2a 0a 20 2a 20 t *slot);. *. * 7350: 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 ARGUMENTS. * 7360: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c cackey_slot *sl 7370: 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 53 6c ot. * Sl 7380: 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 ot to send comma 7390: 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 52 45 54 nds to. *. * RET 73a0: 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 URN VALUE. * 73b0: 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f CACKEY_PCSC_S_O 73c0: 4b 20 20 20 20 20 20 20 20 20 4f 6e 20 73 75 63 K On suc 73d0: 63 65 73 73 0a 20 2a 20 20 20 20 20 43 41 43 4b cess. * CACK 73e0: 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 EY_PCSC_E_GENERI 73f0: 43 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 2a C On error. * 7400: 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 . * NOTES. * 7410: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 This function r 7420: 65 71 75 69 72 65 73 20 22 63 61 63 6b 65 79 5f equires "cackey_ 7430: 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f begin_transactio 7440: 6e 22 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 20 n" to be called 7450: 66 69 72 73 74 0a 20 2a 0a 20 2a 2f 0a 73 74 61 first. *. */.sta 7460: 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 63 tic cackey_ret c 7470: 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 ackey_end_transa 7480: 63 74 69 6f 6e 28 73 74 72 75 63 74 20 63 61 63 ction(struct cac 7490: 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 20 key_slot *slot) 74a0: 7b 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f 74 72 {..LONG scard_tr 74b0: 61 6e 73 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 ans_ret;...CACKE 74c0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 74d0: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 74e0: 28 21 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 (!slot->pcsc_car 74f0: 64 5f 63 6f 6e 6e 65 63 74 65 64 29 20 7b 0a 09 d_connected) {.. 7500: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 7510: 49 4e 54 46 28 22 43 61 72 64 20 69 73 20 6e 6f INTF("Card is no 7520: 74 20 63 6f 6e 6e 65 63 74 65 64 2c 20 75 6e 61 t connected, una 7530: 62 6c 65 20 74 6f 20 65 6e 64 20 74 72 61 6e 73 ble to end trans 7540: 61 63 74 69 6f 6e 20 6f 6e 20 63 61 72 64 22 29 action on card") 7550: 3b 0a 0a 09 09 69 66 20 28 73 6c 6f 74 2d 3e 74 ;....if (slot->t 7560: 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 ransaction_depth 7570: 20 3e 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 > 0) {....CACKE 7580: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 7590: 44 65 63 72 65 61 73 69 6e 67 20 74 72 61 6e 73 Decreasing trans 75a0: 61 63 74 69 6f 6e 20 64 65 70 74 68 20 61 6e 64 action depth and 75b0: 20 61 73 6b 69 6e 67 20 66 6f 72 20 61 20 68 61 asking for a ha 75c0: 72 64 77 61 72 65 20 6c 6f 63 6b 20 6f 6e 20 74 rdware lock on t 75d0: 68 65 20 6e 65 78 74 20 62 65 67 69 6e 20 74 72 he next begin tr 75e0: 61 6e 73 61 63 74 69 6f 6e 20 28 63 75 72 72 65 ansaction (curre 75f0: 6e 74 20 64 65 70 74 68 20 3d 20 25 69 29 22 2c nt depth = %i)", 7600: 20 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 slot->transacti 7610: 6f 6e 5f 64 65 70 74 68 29 3b 0a 0a 09 09 09 73 on_depth);.....s 7620: 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e lot->transaction 7630: 5f 64 65 70 74 68 2d 2d 3b 0a 0a 09 09 09 69 66 _depth--;.....if 7640: 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 (slot->transact 7650: 69 6f 6e 5f 64 65 70 74 68 20 3e 20 30 29 20 7b ion_depth > 0) { 7660: 0a 09 09 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 .....slot->trans 7670: 61 63 74 69 6f 6e 5f 6e 65 65 64 5f 68 77 5f 6c action_need_hw_l 7680: 6f 63 6b 20 3d 20 31 3b 0a 09 09 09 7d 0a 09 09 ock = 1;....}... 7690: 7d 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b }....return(CACK 76a0: 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 EY_PCSC_E_GENERI 76b0: 43 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6c 6f C);..}...if (slo 76c0: 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 t->transaction_d 76d0: 65 70 74 68 20 3d 3d 20 30 29 20 7b 0a 09 09 43 epth == 0) {...C 76e0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 76f0: 54 46 28 22 54 65 72 6d 69 6e 61 74 69 6e 67 20 TF("Terminating 7700: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 a transaction th 7710: 61 74 20 68 61 73 20 6e 6f 74 20 62 65 67 75 6e at has not begun 7720: 21 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 !");....return(C 7730: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e ACKEY_PCSC_E_GEN 7740: 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 ERIC);..}...slot 7750: 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 ->transaction_de 7760: 70 74 68 2d 2d 3b 0a 0a 09 69 66 20 28 73 6c 6f pth--;...if (slo 7770: 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 t->transaction_d 7780: 65 70 74 68 20 3e 20 30 29 20 7b 0a 09 09 43 41 epth > 0) {...CA 7790: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 77a0: 46 28 22 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 F("Transactions 77b0: 73 74 69 6c 6c 20 69 6e 20 70 72 6f 67 72 65 73 still in progres 77c0: 73 2c 20 6e 6f 74 20 74 65 72 6d 69 6e 61 74 69 s, not terminati 77d0: 6e 67 20 6f 6e 2d 63 61 72 64 20 54 72 61 6e 73 ng on-card Trans 77e0: 61 63 74 69 6f 6e 20 28 63 75 72 72 65 6e 74 20 action (current 77f0: 64 65 70 74 68 20 3d 20 25 69 29 22 2c 20 73 6c depth = %i)", sl 7800: 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f ot->transaction_ 7810: 64 65 70 74 68 29 3b 0a 0a 09 09 72 65 74 75 72 depth);....retur 7820: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f n(CACKEY_PCSC_S_ 7830: 4f 4b 29 3b 0a 09 7d 0a 0a 09 73 63 61 72 64 5f OK);..}...scard_ 7840: 74 72 61 6e 73 5f 72 65 74 20 3d 20 53 43 61 72 trans_ret = SCar 7850: 64 45 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e 28 dEndTransaction( 7860: 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c slot->pcsc_card, 7870: 20 53 43 41 52 44 5f 4c 45 41 56 45 5f 43 41 52 SCARD_LEAVE_CAR 7880: 44 29 3b 0a 09 69 66 20 28 73 63 61 72 64 5f 74 D);..if (scard_t 7890: 72 61 6e 73 5f 72 65 74 20 21 3d 20 53 43 41 52 rans_ret != SCAR 78a0: 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 D_S_SUCCESS) {.. 78b0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 78c0: 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 INTF("Unable to 78d0: 65 6e 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c end transaction, 78e0: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 65 72 returning in er 78f0: 72 6f 72 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ror");....return 7900: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 (CACKEY_PCSC_E_G 7910: 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 43 41 ENERIC);..}...CA 7920: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 7930: 46 28 22 53 75 63 65 73 73 66 75 6c 6c 79 20 74 F("Sucessfully t 7940: 65 72 6d 69 6e 61 74 65 64 20 74 72 61 6e 73 61 erminated transa 7950: 63 74 69 6f 6e 20 6f 6e 20 73 6c 6f 74 20 28 25 ction on slot (% 7960: 73 29 22 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 5f s)", slot->pcsc_ 7970: 72 65 61 64 65 72 29 3b 0a 0a 09 72 65 74 75 72 reader);...retur 7980: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f n(CACKEY_PCSC_S_ 7990: 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 20 41 50 44 55 20 OK);.}../* APDU 79a0: 52 65 6c 61 74 65 64 20 46 75 6e 63 74 69 6f 6e Related Function 79b0: 73 20 2a 2f 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f s */./*. * SYNPO 79c0: 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 SIS. * cacke 79d0: 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 73 65 6e y_ret cackey_sen 79e0: 64 5f 61 70 64 75 28 73 74 72 75 63 74 20 63 61 d_apdu(struct ca 79f0: 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c ckey_slot *slot, 7a00: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 unsigned char c 7a10: 6c 61 73 73 2c 20 75 6e 73 69 67 6e 65 64 20 63 lass, unsigned c 7a20: 68 61 72 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c har instruction, 7a30: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 70 unsigned char p 7a40: 31 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 1, unsigned char 7a50: 20 70 32 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 p2, unsigned ch 7a60: 61 72 20 6c 63 2c 20 75 6e 73 69 67 6e 65 64 20 ar lc, unsigned 7a70: 63 68 61 72 20 2a 64 61 74 61 2c 20 75 6e 73 69 char *data, unsi 7a80: 67 6e 65 64 20 63 68 61 72 20 6c 65 2c 20 75 69 gned char le, ui 7a90: 6e 74 31 36 5f 74 20 2a 72 65 73 70 63 6f 64 65 nt16_t *respcode 7aa0: 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 , unsigned char 7ab0: 2a 72 65 73 70 64 61 74 61 2c 20 73 69 7a 65 5f *respdata, size_ 7ac0: 74 20 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e 29 t *respdata_len) 7ad0: 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 ;. *. * ARGUMENT 7ae0: 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 79 5f S. * cackey_ 7af0: 73 6c 6f 74 20 2a 73 6c 6f 74 0a 20 2a 20 20 20 slot *slot. * 7b00: 20 20 20 20 20 20 53 6c 6f 74 20 74 6f 20 73 65 Slot to se 7b10: 6e 64 20 63 6f 6d 6d 61 6e 64 73 20 74 6f 0a 20 nd commands to. 7b20: 2a 0a 20 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 *. * unsigne 7b30: 64 20 63 68 61 72 20 63 6c 61 73 73 0a 20 2a 20 d char class. * 7b40: 20 20 20 20 20 20 20 20 41 50 44 55 20 43 6c 61 APDU Cla 7b50: 73 73 20 28 47 53 43 49 53 5f 43 4c 41 53 53 5f ss (GSCIS_CLASS_ 7b60: 49 53 4f 37 38 31 36 20 6f 72 20 47 53 43 49 53 ISO7816 or GSCIS 7b70: 5f 43 4c 41 53 53 5f 47 4c 4f 42 41 4c 5f 50 4c _CLASS_GLOBAL_PL 7b80: 41 54 46 4f 52 4d 0a 20 2a 20 20 20 20 20 20 20 ATFORM. * 7b90: 20 20 75 73 75 61 6c 6c 79 29 2c 20 28 43 4c 41 usually), (CLA 7ba0: 29 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e 73 69 ). *. * unsi 7bb0: 67 6e 65 64 20 63 68 61 72 20 69 6e 73 74 72 75 gned char instru 7bc0: 63 74 69 6f 6e 0a 20 2a 20 20 20 20 20 20 20 20 ction. * 7bd0: 20 41 50 44 55 20 49 6e 73 74 72 75 63 74 69 6f APDU Instructio 7be0: 6e 20 28 49 4e 53 29 0a 20 2a 0a 20 2a 20 20 20 n (INS). *. * 7bf0: 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 unsigned char 7c00: 70 31 0a 20 2a 20 20 20 20 20 20 20 20 20 41 50 p1. * AP 7c10: 44 55 20 50 61 72 61 6d 65 74 65 72 20 31 20 28 DU Parameter 1 ( 7c20: 50 31 29 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e P1). *. * un 7c30: 73 69 67 6e 65 64 20 63 68 61 72 20 70 32 0a 20 signed char p2. 7c40: 2a 20 20 20 20 20 20 20 20 20 41 50 44 55 20 50 * APDU P 7c50: 61 72 61 6d 65 74 65 72 20 32 20 28 50 32 29 0a arameter 2 (P2). 7c60: 20 2a 0a 20 2a 20 20 20 20 20 75 6e 73 69 67 6e *. * unsign 7c70: 65 64 20 63 68 61 72 20 6c 63 0a 20 2a 20 20 20 ed char lc. * 7c80: 20 20 20 20 20 20 41 50 44 55 20 4c 65 6e 67 74 APDU Lengt 7c90: 68 20 6f 66 20 43 6f 6e 74 65 6e 74 20 28 4c 63 h of Content (Lc 7ca0: 29 20 2d 2d 20 74 68 69 73 20 69 73 20 74 68 65 ) -- this is the 7cb0: 20 6c 65 6e 67 74 68 20 6f 66 20 22 64 61 74 61 length of "data 7cc0: 22 0a 20 2a 20 20 20 20 20 20 20 20 20 70 61 72 ". * par 7cd0: 61 6d 65 74 65 72 2e 20 20 49 66 20 22 64 61 74 ameter. If "dat 7ce0: 61 22 20 69 73 20 73 70 65 63 69 66 69 65 64 20 a" is specified 7cf0: 61 73 20 4e 55 4c 4c 2c 20 74 68 69 73 20 70 61 as NULL, this pa 7d00: 72 61 6d 65 74 65 72 20 77 69 6c 6c 0a 20 2a 20 rameter will. * 7d10: 20 20 20 20 20 20 20 20 62 65 20 69 67 6e 6f 72 be ignor 7d20: 65 64 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e ed.. *. * un 7d30: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 64 61 74 signed char *dat 7d40: 61 0a 20 2a 20 20 20 20 20 20 20 20 20 50 6f 69 a. * Poi 7d50: 6e 74 65 72 20 74 6f 20 62 75 66 66 65 72 20 74 nter to buffer t 7d60: 6f 20 73 65 6e 64 2e 20 20 49 74 20 73 68 6f 75 o send. It shou 7d70: 6c 64 20 62 65 20 22 4c 63 22 20 62 79 74 65 73 ld be "Lc" bytes 7d80: 20 6c 6f 6e 67 2e 20 20 49 66 0a 20 2a 20 20 20 long. If. * 7d90: 20 20 20 20 20 20 73 70 65 63 69 66 69 65 64 20 specified 7da0: 61 73 20 4e 55 4c 4c 2c 20 22 4c 63 22 20 77 69 as NULL, "Lc" wi 7db0: 6c 6c 20 6e 6f 74 20 62 65 20 73 65 6e 74 2c 20 ll not be sent, 7dc0: 61 6e 64 20 74 68 69 73 20 62 75 66 66 65 72 20 and this buffer 7dd0: 77 69 6c 6c 20 62 65 0a 20 2a 20 20 20 20 20 20 will be. * 7de0: 20 20 20 69 67 6e 6f 72 65 64 2e 0a 20 2a 0a 20 ignored.. *. 7df0: 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 * unsigned c 7e00: 68 61 72 20 6c 65 0a 20 2a 20 20 20 20 20 20 20 har le. * 7e10: 20 20 41 50 44 55 20 4c 65 6e 67 74 68 20 6f 66 APDU Length of 7e20: 20 45 78 70 65 63 74 61 74 69 6f 6e 20 28 4c 65 Expectation (Le 7e30: 29 20 2d 2d 20 74 68 69 73 20 69 73 20 74 68 65 ) -- this is the 7e40: 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 0a 20 length of the. 7e50: 2a 20 20 20 20 20 20 20 20 20 65 78 70 65 63 74 * expect 7e60: 65 64 20 72 65 70 6c 79 2e 20 20 49 66 20 74 68 ed reply. If th 7e70: 69 73 20 69 73 20 73 70 65 63 69 66 69 65 64 20 is is specified 7e80: 61 73 20 30 20 74 68 65 6e 20 69 74 20 77 69 6c as 0 then it wil 7e90: 6c 20 6e 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 l not. * 7ea0: 20 62 65 20 73 65 6e 74 2e 0a 20 2a 0a 20 2a 20 be sent.. *. * 7eb0: 20 20 20 20 75 69 6e 74 31 36 5f 74 20 2a 72 65 uint16_t *re 7ec0: 73 70 63 6f 64 65 0a 20 2a 20 20 20 20 20 20 20 spcode. * 7ed0: 20 20 5b 4f 55 54 5d 20 50 6f 69 6e 74 65 72 20 [OUT] Pointer 7ee0: 74 6f 20 73 74 6f 72 61 67 65 20 6f 66 20 41 50 to storage of AP 7ef0: 44 55 20 72 65 73 70 6f 6e 73 65 20 63 6f 64 65 DU response code 7f00: 2e 20 20 49 66 20 74 68 69 73 20 69 73 0a 20 2a . If this is. * 7f10: 20 20 20 20 20 20 20 20 20 73 70 65 63 69 66 69 specifi 7f20: 65 64 20 61 73 20 4e 55 4c 4c 2c 20 74 68 65 20 ed as NULL, the 7f30: 72 65 73 70 6f 6e 73 65 20 63 6f 64 65 20 77 69 response code wi 7f40: 6c 6c 20 62 65 20 64 69 73 63 61 72 64 65 64 2e ll be discarded. 7f50: 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e 73 69 67 . *. * unsig 7f60: 6e 65 64 20 63 68 61 72 20 2a 72 65 73 70 64 61 ned char *respda 7f70: 74 61 0a 20 2a 20 20 20 20 20 20 20 20 20 5b 4f ta. * [O 7f80: 55 54 5d 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 UT] Pointer to s 7f90: 74 6f 72 61 67 65 20 6f 66 20 41 50 44 55 20 72 torage of APDU r 7fa0: 65 73 70 6f 6e 73 65 20 64 61 74 61 2e 20 20 49 esponse data. I 7fb0: 66 20 74 68 69 73 20 69 73 0a 20 2a 20 20 20 20 f this is. * 7fc0: 20 20 20 20 20 73 70 65 63 69 66 69 65 64 20 61 specified a 7fd0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 70 s NULL, the resp 7fe0: 6f 6e 73 65 20 64 61 74 61 20 77 69 6c 6c 20 62 onse data will b 7ff0: 65 20 64 69 73 63 61 72 64 65 64 2e 20 20 49 66 e discarded. If 8000: 0a 20 2a 20 20 20 20 20 20 20 20 20 74 68 65 20 . * the 8010: 22 72 65 73 70 64 61 74 61 5f 6c 65 6e 22 20 70 "respdata_len" p 8020: 61 72 61 6d 65 74 65 72 20 69 73 20 73 70 65 63 arameter is spec 8030: 69 66 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 74 ified as NULL, t 8040: 68 69 73 20 62 75 66 66 65 72 0a 20 2a 20 20 20 his buffer. * 8050: 20 20 20 20 20 20 77 69 6c 6c 20 6e 6f 74 20 62 will not b 8060: 65 20 75 70 64 61 74 65 64 2e 0a 20 2a 0a 20 2a e updated.. *. * 8070: 20 20 20 20 20 73 69 7a 65 5f 74 20 2a 72 65 73 size_t *res 8080: 70 64 61 74 61 5f 6c 65 6e 0a 20 2a 20 20 20 20 pdata_len. * 8090: 20 20 20 20 20 5b 49 4e 2c 20 4f 55 54 5d 20 50 [IN, OUT] P 80a0: 6f 69 6e 74 65 72 20 69 6e 69 74 69 61 6c 69 6e ointer initialin 80b0: 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 g containing the 80c0: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 22 72 65 size of the "re 80d0: 73 70 64 61 74 61 22 0a 20 2a 20 20 20 20 20 20 spdata". * 80e0: 20 20 20 62 75 66 66 65 72 2e 20 20 42 65 66 6f buffer. Befo 80f0: 72 65 20 72 65 74 75 72 6e 69 6e 67 2c 20 74 68 re returning, th 8100: 65 20 70 6f 69 6e 74 65 64 20 74 6f 20 76 61 6c e pointed to val 8110: 75 65 20 69 73 20 75 70 64 61 74 65 64 20 74 6f ue is updated to 8120: 20 74 68 65 0a 20 2a 20 20 20 20 20 20 20 20 20 the. * 8130: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 number of bytes 8140: 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 62 written to the b 8150: 75 66 66 65 72 2e 20 20 49 66 20 74 68 69 73 20 uffer. If this 8160: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 0a is specified as. 8170: 20 2a 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 2c * NULL, 8180: 20 69 74 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 it will not be 8190: 75 70 64 61 74 65 64 2c 20 61 6e 64 20 22 72 65 updated, and "re 81a0: 73 70 64 61 74 61 22 20 77 69 6c 6c 20 62 65 20 spdata" will be 81b0: 69 67 6e 6f 72 65 64 20 63 61 75 73 69 6e 67 0a ignored causing. 81c0: 20 2a 20 20 20 20 20 20 20 20 20 74 68 65 20 72 * the r 81d0: 65 73 70 6f 6e 73 65 20 64 61 74 61 20 74 6f 20 esponse data to 81e0: 62 65 20 64 69 73 63 61 72 64 65 64 2e 0a 20 2a be discarded.. * 81f0: 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 . * RETURN VALUE 8200: 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 5f 50 . * CACKEY_P 8210: 43 53 43 5f 53 5f 4f 4b 20 20 20 20 20 20 20 20 CSC_S_OK 8220: 20 20 20 4f 6e 20 73 75 63 63 65 73 73 0a 20 2a On success. * 8230: 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 CACKEY_PCSC 8240: 5f 45 5f 47 45 4e 45 52 49 43 20 20 20 20 20 20 _E_GENERIC 8250: 4f 6e 20 65 72 72 6f 72 0a 20 2a 20 20 20 20 20 On error. * 8260: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 4f CACKEY_PCSC_E_TO 8270: 4b 45 4e 41 42 53 45 4e 54 20 20 49 66 20 74 68 KENABSENT If th 8280: 65 20 73 65 6e 64 69 6e 67 20 66 61 69 6c 65 64 e sending failed 8290: 20 62 65 63 61 75 73 65 20 74 68 65 20 74 6f 6b because the tok 82a0: 65 6e 20 69 73 0a 20 2a 20 20 20 20 20 20 20 20 en is. * 82b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 82c0: 20 20 20 20 20 20 20 20 61 62 73 65 6e 74 0a 20 absent. 82d0: 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 *. * NOTES. * 82e0: 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 This function 82f0: 77 69 6c 6c 20 63 6f 6e 6e 65 63 74 20 74 6f 20 will connect to 8300: 74 68 65 20 50 43 2f 53 43 20 43 6f 6e 6e 65 63 the PC/SC Connec 8310: 74 69 6f 6e 20 4d 61 6e 61 67 65 72 20 76 69 61 tion Manager via 8320: 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 70 . * cackey_p 8330: 63 73 63 5f 63 6f 6e 6e 65 63 74 28 29 20 69 66 csc_connect() if 8340: 20 6e 65 65 64 65 64 2e 0a 20 2a 0a 20 2a 20 20 needed.. *. * 8350: 20 20 20 49 74 20 77 69 6c 6c 20 63 6f 6e 6e 65 It will conne 8360: 63 74 20 74 6f 20 74 68 65 20 63 61 72 64 20 69 ct to the card i 8370: 6e 20 74 68 65 20 72 65 61 64 65 72 20 61 74 74 n the reader att 8380: 61 63 68 65 64 20 74 6f 20 74 68 65 20 73 6c 6f ached to the slo 8390: 74 0a 20 2a 20 20 20 20 20 73 70 65 63 69 66 69 t. * specifi 83a0: 65 64 2e 20 20 49 74 20 77 69 6c 6c 20 72 65 63 ed. It will rec 83b0: 6f 6e 6e 65 63 74 20 74 6f 20 74 68 65 20 63 61 onnect to the ca 83c0: 72 64 20 69 66 20 74 68 65 20 63 6f 6e 6e 65 63 rd if the connec 83d0: 74 69 6f 6e 0a 20 2a 20 20 20 20 20 67 6f 65 73 tion. * goes 83e0: 20 61 77 61 79 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 away.. *. */.st 83f0: 61 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 atic cackey_ret 8400: 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 cackey_send_apdu 8410: 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 (struct cackey_s 8420: 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 lot *slot, unsig 8430: 6e 65 64 20 63 68 61 72 20 63 6c 61 73 73 2c 20 ned char class, 8440: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 69 6e unsigned char in 8450: 73 74 72 75 63 74 69 6f 6e 2c 20 75 6e 73 69 67 struction, unsig 8460: 6e 65 64 20 63 68 61 72 20 70 31 2c 20 75 6e 73 ned char p1, uns 8470: 69 67 6e 65 64 20 63 68 61 72 20 70 32 2c 20 75 igned char p2, u 8480: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c 63 2c nsigned char lc, 8490: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a unsigned char * 84a0: 64 61 74 61 2c 20 75 6e 73 69 67 6e 65 64 20 63 data, unsigned c 84b0: 68 61 72 20 6c 65 2c 20 75 69 6e 74 31 36 5f 74 har le, uint16_t 84c0: 20 2a 72 65 73 70 63 6f 64 65 2c 20 75 6e 73 69 *respcode, unsi 84d0: 67 6e 65 64 20 63 68 61 72 20 2a 72 65 73 70 64 gned char *respd 84e0: 61 74 61 2c 20 73 69 7a 65 5f 74 20 2a 72 65 73 ata, size_t *res 84f0: 70 64 61 74 61 5f 6c 65 6e 29 20 7b 0a 09 75 69 pdata_len) {..ui 8500: 6e 74 38 5f 74 20 6d 61 6a 6f 72 5f 72 63 2c 20 nt8_t major_rc, 8510: 6d 69 6e 6f 72 5f 72 63 3b 0a 09 73 69 7a 65 5f minor_rc;..size_ 8520: 74 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 2c t bytes_to_copy, 8530: 20 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 tmp_respdata_le 8540: 6e 3b 0a 09 4c 50 43 53 43 41 52 44 5f 49 4f 5f n;..LPCSCARD_IO_ 8550: 52 45 51 55 45 53 54 20 70 69 6f 53 65 6e 64 50 REQUEST pioSendP 8560: 63 69 3b 0a 09 44 57 4f 52 44 20 70 72 6f 74 6f ci;..DWORD proto 8570: 63 6f 6c 3b 0a 09 44 57 4f 52 44 20 78 6d 69 74 col;..DWORD xmit 8580: 5f 6c 65 6e 2c 20 72 65 63 76 5f 6c 65 6e 3b 0a _len, recv_len;. 8590: 09 4c 4f 4e 47 20 73 63 61 72 64 5f 78 6d 69 74 .LONG scard_xmit 85a0: 5f 72 65 74 2c 20 73 63 61 72 64 5f 72 65 63 6f _ret, scard_reco 85b0: 6e 6e 5f 72 65 74 3b 0a 09 42 59 54 45 20 78 6d nn_ret;..BYTE xm 85c0: 69 74 5f 62 75 66 5b 31 30 32 34 5d 2c 20 72 65 it_buf[1024], re 85d0: 63 76 5f 62 75 66 5b 31 30 32 34 5d 3b 0a 09 69 cv_buf[1024];..i 85e0: 6e 74 20 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f nt pcsc_connect_ 85f0: 72 65 74 2c 20 70 63 73 63 5f 67 65 74 72 65 73 ret, pcsc_getres 8600: 70 5f 72 65 74 3b 0a 09 69 6e 74 20 69 64 78 3b p_ret;..int idx; 8610: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 8620: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 8630: 29 3b 0a 0a 09 69 66 20 28 21 73 6c 6f 74 29 20 );...if (!slot) 8640: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 8650: 5f 50 52 49 4e 54 46 28 22 49 6e 76 61 6c 69 64 _PRINTF("Invalid 8660: 20 73 6c 6f 74 20 73 70 65 63 69 66 69 65 64 2e slot specified. 8670: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 ");....return(CA 8680: 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 CKEY_PCSC_E_GENE 8690: 52 49 43 29 3b 0a 09 7d 0a 0a 09 70 63 73 63 5f RIC);..}...pcsc_ 86a0: 63 6f 6e 6e 65 63 74 5f 72 65 74 20 3d 20 63 61 connect_ret = ca 86b0: 63 6b 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 72 ckey_connect_car 86c0: 64 28 73 6c 6f 74 29 3b 0a 09 69 66 20 28 70 63 d(slot);..if (pc 86d0: 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 21 sc_connect_ret ! 86e0: 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f = CACKEY_PCSC_S_ 86f0: 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 OK) {...CACKEY_D 8700: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 EBUG_PRINTF("Una 8710: 62 6c 65 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 ble to connect t 8720: 6f 20 63 61 72 64 2c 20 72 65 74 75 72 6e 69 6e o card, returnin 8730: 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a g in failure");. 8740: 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 8750: 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 _PCSC_E_GENERIC) 8760: 3b 0a 09 7d 0a 0a 09 2f 2a 20 44 65 74 65 72 6d ;..}.../* Determ 8770: 69 6e 65 20 77 68 69 63 68 20 70 72 6f 74 6f 63 ine which protoc 8780: 6f 6c 20 74 6f 20 73 65 6e 64 20 75 73 69 6e 67 ol to send using 8790: 20 2a 2f 0a 09 73 77 69 74 63 68 20 28 73 6c 6f */..switch (slo 87a0: 74 2d 3e 70 72 6f 74 6f 63 6f 6c 29 20 7b 0a 09 t->protocol) {.. 87b0: 09 63 61 73 65 20 53 43 41 52 44 5f 50 52 4f 54 .case SCARD_PROT 87c0: 4f 43 4f 4c 5f 54 30 3a 0a 09 09 09 70 69 6f 53 OCOL_T0:....pioS 87d0: 65 6e 64 50 63 69 20 3d 20 53 43 41 52 44 5f 50 endPci = SCARD_P 87e0: 43 49 5f 54 30 3b 0a 0a 09 09 09 62 72 65 61 6b CI_T0;.....break 87f0: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 50 ;...case SCARD_P 8800: 52 4f 54 4f 43 4f 4c 5f 54 31 3a 0a 09 09 09 70 ROTOCOL_T1:....p 8810: 69 6f 53 65 6e 64 50 63 69 20 3d 20 53 43 41 52 ioSendPci = SCAR 8820: 44 5f 50 43 49 5f 54 31 3b 0a 0a 09 09 09 62 72 D_PCI_T1;.....br 8830: 65 61 6b 3b 0a 09 09 64 65 66 61 75 6c 74 3a 0a eak;...default:. 8840: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 8850: 50 52 49 4e 54 46 28 22 49 6e 76 61 6c 69 64 20 PRINTF("Invalid 8860: 70 72 6f 74 6f 63 6f 6c 20 66 6f 75 6e 64 2c 20 protocol found, 8870: 61 62 6f 72 74 69 6e 67 2e 22 29 3b 0a 0a 09 09 aborting.");.... 8880: 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 .return(CACKEY_P 8890: 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a CSC_E_GENERIC);. 88a0: 09 7d 0a 0a 09 2f 2a 20 54 72 61 6e 73 6d 69 74 .}.../* Transmit 88b0: 20 2a 2f 0a 09 78 6d 69 74 5f 6c 65 6e 20 3d 20 */..xmit_len = 88c0: 30 3b 0a 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 0;..xmit_buf[xmi 88d0: 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 63 6c 61 73 73 t_len++] = class 88e0: 3b 0a 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 ;..xmit_buf[xmit 88f0: 5f 6c 65 6e 2b 2b 5d 20 3d 20 69 6e 73 74 72 75 _len++] = instru 8900: 63 74 69 6f 6e 3b 0a 09 78 6d 69 74 5f 62 75 66 ction;..xmit_buf 8910: 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 70 [xmit_len++] = p 8920: 31 3b 0a 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 1;..xmit_buf[xmi 8930: 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 70 32 3b 0a 09 t_len++] = p2;.. 8940: 69 66 20 28 64 61 74 61 29 20 7b 0a 09 09 78 6d if (data) {...xm 8950: 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b it_buf[xmit_len+ 8960: 2b 5d 20 3d 20 6c 63 3b 0a 09 09 66 6f 72 20 28 +] = lc;...for ( 8970: 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 6c idx = 0; idx < l 8980: 63 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 09 78 c; idx++) {....x 8990: 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e mit_buf[xmit_len 89a0: 2b 2b 5d 20 3d 20 64 61 74 61 5b 69 64 78 5d 3b ++] = data[idx]; 89b0: 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 6c 65 ...}..}...if (le 89c0: 20 21 3d 20 30 78 30 30 29 20 7b 0a 09 09 78 6d != 0x00) {...xm 89d0: 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b it_buf[xmit_len+ 89e0: 2b 5d 20 3d 20 6c 65 3b 0a 09 7d 0a 0a 09 2f 2a +] = le;..}.../* 89f0: 20 42 65 67 69 6e 20 53 6d 61 72 74 63 61 72 64 Begin Smartcard 8a00: 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a Transaction */. 8a10: 09 63 61 63 6b 65 79 5f 62 65 67 69 6e 5f 74 72 .cackey_begin_tr 8a20: 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b ansaction(slot); 8a30: 0a 0a 09 69 66 20 28 63 6c 61 73 73 20 3d 3d 20 ...if (class == 8a40: 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f 37 GSCIS_CLASS_ISO7 8a50: 38 31 36 20 26 26 20 69 6e 73 74 72 75 63 74 69 816 && instructi 8a60: 6f 6e 20 3d 3d 20 47 53 43 49 53 5f 49 4e 53 54 on == GSCIS_INST 8a70: 52 5f 56 45 52 49 46 59 20 26 26 20 70 31 20 3d R_VERIFY && p1 = 8a80: 3d 20 30 78 30 30 20 26 26 20 70 32 20 3d 3d 20 = 0x00 && p2 == 8a90: 30 78 30 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 0x00) {...CACKEY 8aa0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 _DEBUG_PRINTF("S 8ab0: 65 6e 64 69 6e 67 20 41 50 44 55 3a 20 3c 3c 63 ending APDU: <<c 8ac0: 65 6e 73 6f 72 65 64 3e 3e 22 29 3b 0a 09 7d 20 ensored>>");..} 8ad0: 65 6c 73 65 20 7b 0a 09 09 43 41 43 4b 45 59 5f else {...CACKEY_ 8ae0: 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 DEBUG_PRINTBUF(" 8af0: 53 65 6e 64 69 6e 67 20 41 50 44 55 3a 22 2c 20 Sending APDU:", 8b00: 78 6d 69 74 5f 62 75 66 2c 20 78 6d 69 74 5f 6c xmit_buf, xmit_l 8b10: 65 6e 29 3b 0a 09 7d 0a 0a 09 72 65 63 76 5f 6c en);..}...recv_l 8b20: 65 6e 20 3d 20 73 69 7a 65 6f 66 28 72 65 63 76 en = sizeof(recv 8b30: 5f 62 75 66 29 3b 0a 09 73 63 61 72 64 5f 78 6d _buf);..scard_xm 8b40: 69 74 5f 72 65 74 20 3d 20 53 43 61 72 64 54 72 it_ret = SCardTr 8b50: 61 6e 73 6d 69 74 28 73 6c 6f 74 2d 3e 70 63 73 ansmit(slot->pcs 8b60: 63 5f 63 61 72 64 2c 20 70 69 6f 53 65 6e 64 50 c_card, pioSendP 8b70: 63 69 2c 20 78 6d 69 74 5f 62 75 66 2c 20 78 6d ci, xmit_buf, xm 8b80: 69 74 5f 6c 65 6e 2c 20 4e 55 4c 4c 2c 20 72 65 it_len, NULL, re 8b90: 63 76 5f 62 75 66 2c 20 26 72 65 63 76 5f 6c 65 cv_buf, &recv_le 8ba0: 6e 29 3b 0a 0a 09 69 66 20 28 73 63 61 72 64 5f n);...if (scard_ 8bb0: 78 6d 69 74 5f 72 65 74 20 3d 3d 20 53 43 41 52 xmit_ret == SCAR 8bc0: 44 5f 45 5f 4e 4f 54 5f 54 52 41 4e 53 41 43 54 D_E_NOT_TRANSACT 8bd0: 45 44 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ED) {...CACKEY_D 8be0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 61 69 EBUG_PRINTF("Fai 8bf0: 6c 65 64 20 74 6f 20 73 65 6e 64 20 41 50 44 55 led to send APDU 8c00: 20 74 6f 20 63 61 72 64 20 28 53 43 61 72 64 54 to card (SCardT 8c10: 72 61 6e 73 6d 69 74 28 29 20 3d 20 25 73 2f 25 ransmit() = %s/% 8c20: 6c 78 29 2c 20 77 69 6c 6c 20 61 73 6b 20 63 61 lx), will ask ca 8c30: 6c 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 74 lling function t 8c40: 6f 20 72 65 74 72 79 20 28 6e 6f 74 20 72 65 73 o retry (not res 8c50: 65 74 74 69 6e 67 20 63 61 72 64 29 2e 2e 2e 22 etting card)..." 8c60: 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F 8c70: 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f UNC_SCARDERR_TO_ 8c80: 53 54 52 28 73 63 61 72 64 5f 78 6d 69 74 5f 72 STR(scard_xmit_r 8c90: 65 74 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c et), (unsigned l 8ca0: 6f 6e 67 29 20 73 63 61 72 64 5f 78 6d 69 74 5f ong) scard_xmit_ 8cb0: 72 65 74 29 3b 0a 0a 09 09 2f 2a 20 42 65 67 69 ret);..../* Begi 8cc0: 6e 20 53 6d 61 72 74 63 61 72 64 20 54 72 61 6e n Smartcard Tran 8cd0: 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 63 61 63 saction */...cac 8ce0: 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 key_end_transact 8cf0: 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 72 65 ion(slot);....re 8d00: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC 8d10: 5f 45 5f 52 45 54 52 59 29 3b 0a 09 7d 0a 0a 09 _E_RETRY);..}... 8d20: 69 66 20 28 73 63 61 72 64 5f 78 6d 69 74 5f 72 if (scard_xmit_r 8d30: 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 et != SCARD_S_SU 8d40: 43 43 45 53 53 29 20 7b 0a 09 09 43 41 43 4b 45 CCESS) {...CACKE 8d50: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 8d60: 46 61 69 6c 65 64 20 74 6f 20 73 65 6e 64 20 41 Failed to send A 8d70: 50 44 55 20 74 6f 20 63 61 72 64 20 28 53 43 61 PDU to card (SCa 8d80: 72 64 54 72 61 6e 73 6d 69 74 28 29 20 3d 20 25 rdTransmit() = % 8d90: 73 2f 25 6c 78 29 22 2c 20 43 41 43 4b 45 59 5f s/%lx)", CACKEY_ 8da0: 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 DEBUG_FUNC_SCARD 8db0: 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 ERR_TO_STR(scard 8dc0: 5f 78 6d 69 74 5f 72 65 74 29 2c 20 28 75 6e 73 _xmit_ret), (uns 8dd0: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 63 61 72 igned long) scar 8de0: 64 5f 78 6d 69 74 5f 72 65 74 29 3b 0a 0a 09 09 d_xmit_ret);.... 8df0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 8e00: 4e 54 46 28 22 4d 61 72 6b 69 6e 67 20 73 6c 6f NTF("Marking slo 8e10: 74 20 61 73 20 68 61 76 69 6e 67 20 62 65 65 6e t as having been 8e20: 20 72 65 73 65 74 22 29 3b 0a 09 09 63 61 63 6b reset");...cack 8e30: 65 79 5f 6d 61 72 6b 5f 73 6c 6f 74 5f 72 65 73 ey_mark_slot_res 8e40: 65 74 28 73 6c 6f 74 29 3b 0a 0a 09 09 69 66 20 et(slot);....if 8e50: 28 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 20 (scard_xmit_ret 8e60: 3d 3d 20 53 43 41 52 44 5f 57 5f 52 45 53 45 54 == SCARD_W_RESET 8e70: 5f 43 41 52 44 29 20 7b 0a 09 09 09 43 41 43 4b _CARD) {....CACK 8e80: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 8e90: 22 52 65 73 65 74 20 72 65 71 75 69 72 65 64 2c "Reset required, 8ea0: 20 70 6c 65 61 73 65 20 68 6f 6c 64 2e 2e 2e 22 please hold..." 8eb0: 29 3b 0a 0a 09 09 09 73 63 61 72 64 5f 72 65 63 );.....scard_rec 8ec0: 6f 6e 6e 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 onn_ret = cackey 8ed0: 5f 72 65 63 6f 6e 6e 65 63 74 5f 63 61 72 64 28 _reconnect_card( 8ee0: 73 6c 6f 74 2c 20 53 43 41 52 44 5f 50 52 4f 54 slot, SCARD_PROT 8ef0: 4f 43 4f 4c 5f 54 30 20 7c 20 53 43 41 52 44 5f OCOL_T0 | SCARD_ 8f00: 50 52 4f 54 4f 43 4f 4c 5f 54 31 2c 20 26 70 72 PROTOCOL_T1, &pr 8f10: 6f 74 6f 63 6f 6c 29 3b 0a 0a 09 09 09 69 66 20 otocol);.....if 8f20: 28 73 63 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 (scard_reconn_re 8f30: 74 20 3d 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 t == SCARD_S_SUC 8f40: 43 45 53 53 29 20 7b 0a 09 09 09 09 2f 2a 20 55 CESS) {...../* U 8f50: 70 64 61 74 65 20 70 72 6f 74 6f 63 6f 6c 20 2a pdate protocol * 8f60: 2f 0a 09 09 09 09 73 6c 6f 74 2d 3e 70 72 6f 74 /.....slot->prot 8f70: 6f 63 6f 6c 20 3d 20 70 72 6f 74 6f 63 6f 6c 3b ocol = protocol; 8f80: 0a 09 09 09 09 73 77 69 74 63 68 20 28 73 6c 6f .....switch (slo 8f90: 74 2d 3e 70 72 6f 74 6f 63 6f 6c 29 20 7b 0a 09 t->protocol) {.. 8fa0: 09 09 09 09 63 61 73 65 20 53 43 41 52 44 5f 50 ....case SCARD_P 8fb0: 52 4f 54 4f 43 4f 4c 5f 54 30 3a 0a 09 09 09 09 ROTOCOL_T0:..... 8fc0: 09 09 70 69 6f 53 65 6e 64 50 63 69 20 3d 20 53 ..pioSendPci = S 8fd0: 43 41 52 44 5f 50 43 49 5f 54 30 3b 0a 0a 09 09 CARD_PCI_T0;.... 8fe0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 ....break;...... 8ff0: 63 61 73 65 20 53 43 41 52 44 5f 50 52 4f 54 4f case SCARD_PROTO 9000: 43 4f 4c 5f 54 31 3a 0a 09 09 09 09 09 09 70 69 COL_T1:.......pi 9010: 6f 53 65 6e 64 50 63 69 20 3d 20 53 43 41 52 44 oSendPci = SCARD 9020: 5f 50 43 49 5f 54 31 3b 0a 0a 09 09 09 09 09 09 _PCI_T1;........ 9030: 62 72 65 61 6b 3b 0a 09 09 09 09 09 64 65 66 61 break;......defa 9040: 75 6c 74 3a 0a 09 09 09 09 09 09 43 41 43 4b 45 ult:.......CACKE 9050: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 9060: 49 6e 76 61 6c 69 64 20 70 72 6f 74 6f 63 6f 6c Invalid protocol 9070: 20 66 6f 75 6e 64 2c 20 62 75 74 20 74 6f 6f 20 found, but too 9080: 6c 61 74 65 20 74 6f 20 64 6f 20 61 6e 79 74 68 late to do anyth 9090: 69 6e 67 20 61 62 6f 75 74 20 69 74 20 6e 6f 77 ing about it now 90a0: 20 2d 2d 20 74 72 79 69 6e 67 20 61 6e 79 77 61 -- trying anywa 90b0: 79 2e 22 29 3b 0a 0a 09 09 09 09 09 09 62 72 65 y.");........bre 90c0: 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 2f ak;.....}....../ 90d0: 2a 20 52 65 2d 65 73 74 61 62 6c 69 73 68 20 74 * Re-establish t 90e0: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 69 66 20 69 ransaction, if i 90f0: 74 20 77 61 73 20 70 72 65 73 65 6e 74 20 2a 2f t was present */ 9100: 0a 09 09 09 09 69 66 20 28 73 6c 6f 74 2d 3e 74 .....if (slot->t 9110: 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 ransaction_depth 9120: 20 3e 20 30 29 20 7b 0a 09 09 09 09 09 73 6c 6f > 0) {......slo 9130: 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 t->transaction_d 9140: 65 70 74 68 2d 2d 3b 0a 09 09 09 09 09 73 6c 6f epth--;......slo 9150: 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 6e t->transaction_n 9160: 65 65 64 5f 68 77 5f 6c 6f 63 6b 20 3d 20 31 3b eed_hw_lock = 1; 9170: 0a 09 09 09 09 09 63 61 63 6b 65 79 5f 62 65 67 ......cackey_beg 9180: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 in_transaction(s 9190: 6c 6f 74 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 lot);.....}..... 91a0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 91b0: 49 4e 54 46 28 22 52 65 73 65 74 20 73 75 63 63 INTF("Reset succ 91c0: 65 73 73 66 75 6c 2c 20 72 65 74 72 61 6e 73 6d essful, retransm 91d0: 69 74 74 69 6e 67 22 29 3b 0a 0a 09 09 09 09 72 itting");......r 91e0: 65 63 76 5f 6c 65 6e 20 3d 20 73 69 7a 65 6f 66 ecv_len = sizeof 91f0: 28 72 65 63 76 5f 62 75 66 29 3b 0a 09 09 09 09 (recv_buf);..... 9200: 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 20 3d scard_xmit_ret = 9210: 20 53 43 61 72 64 54 72 61 6e 73 6d 69 74 28 73 SCardTransmit(s 9220: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 lot->pcsc_card, 9230: 70 69 6f 53 65 6e 64 50 63 69 2c 20 78 6d 69 74 pioSendPci, xmit 9240: 5f 62 75 66 2c 20 78 6d 69 74 5f 6c 65 6e 2c 20 _buf, xmit_len, 9250: 4e 55 4c 4c 2c 20 72 65 63 76 5f 62 75 66 2c 20 NULL, recv_buf, 9260: 26 72 65 63 76 5f 6c 65 6e 29 3b 0a 0a 09 09 09 &recv_len);..... 9270: 09 69 66 20 28 73 63 61 72 64 5f 78 6d 69 74 5f .if (scard_xmit_ 9280: 72 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 ret != SCARD_S_S 9290: 55 43 43 45 53 53 29 20 7b 0a 09 09 09 09 09 43 UCCESS) {......C 92a0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 92b0: 54 46 28 22 52 65 74 72 61 6e 73 6d 69 74 20 66 TF("Retransmit f 92c0: 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 69 6e 67 ailed, returning 92d0: 20 69 6e 20 66 61 69 6c 75 72 65 20 61 66 74 65 in failure afte 92e0: 72 20 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 r disconnecting 92f0: 74 68 65 20 63 61 72 64 20 28 53 43 61 72 64 54 the card (SCardT 9300: 72 61 6e 73 6d 69 74 20 3d 20 25 73 2f 25 6c 69 ransmit = %s/%li 9310: 29 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 )", CACKEY_DEBUG 9320: 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 _FUNC_SCARDERR_T 9330: 4f 5f 53 54 52 28 73 63 61 72 64 5f 78 6d 69 74 O_STR(scard_xmit 9340: 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 _ret), (long) sc 9350: 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 3b 0a 0a ard_xmit_ret);.. 9360: 09 09 09 09 09 53 43 61 72 64 44 69 73 63 6f 6e .....SCardDiscon 9370: 6e 65 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f nect(slot->pcsc_ 9380: 63 61 72 64 2c 20 53 43 41 52 44 5f 4c 45 41 56 card, SCARD_LEAV 9390: 45 5f 43 41 52 44 29 3b 0a 09 09 09 09 09 73 6c E_CARD);......sl 93a0: 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f 63 6f ot->pcsc_card_co 93b0: 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a 0a 09 09 nnected = 0;.... 93c0: 09 09 09 2f 2a 20 45 6e 64 20 53 6d 61 72 74 63 .../* End Smartc 93d0: 61 72 64 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 ard Transaction 93e0: 2a 2f 0a 09 09 09 09 09 73 6c 6f 74 2d 3e 74 72 */......slot->tr 93f0: 61 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 ansaction_depth 9400: 3d 20 31 3b 0a 09 09 09 09 09 63 61 63 6b 65 79 = 1;......cackey 9410: 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e _end_transaction 9420: 28 73 6c 6f 74 29 3b 0a 0a 09 09 09 09 09 72 65 (slot);.......re 9430: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC 9440: 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 29 3b _E_TOKENABSENT); 9450: 0a 09 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65 .....}....} else 9460: 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {.....CACKEY_DE 9470: 42 55 47 5f 50 52 49 4e 54 46 28 22 44 69 73 63 BUG_PRINTF("Disc 9480: 6f 6e 6e 65 63 74 69 6e 67 20 63 61 72 64 22 29 onnecting card") 9490: 3b 0a 0a 09 09 09 09 53 43 61 72 64 44 69 73 63 ;......SCardDisc 94a0: 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e 70 63 73 onnect(slot->pcs 94b0: 63 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 4c 45 c_card, SCARD_LE 94c0: 41 56 45 5f 43 41 52 44 29 3b 0a 09 09 09 09 73 AVE_CARD);.....s 94d0: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f 63 lot->pcsc_card_c 94e0: 6f 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a 0a 09 onnected = 0;... 94f0: 09 09 09 2f 2a 20 45 6e 64 20 53 6d 61 72 74 63 .../* End Smartc 9500: 61 72 64 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 ard Transaction 9510: 2a 2f 0a 09 09 09 09 73 6c 6f 74 2d 3e 74 72 61 */.....slot->tra 9520: 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3d nsaction_depth = 9530: 20 31 3b 0a 09 09 09 09 63 61 63 6b 65 79 5f 65 1;.....cackey_e 9540: 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 nd_transaction(s 9550: 6c 6f 74 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 lot);......CACKE 9560: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 9570: 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 Returning in fai 9580: 6c 75 72 65 22 29 3b 0a 09 09 09 09 72 65 74 75 lure");.....retu 9590: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 95a0: 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 29 3b 0a 09 _TOKENABSENT);.. 95b0: 09 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 ..}...} else {.. 95c0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 95d0: 52 49 4e 54 46 28 22 44 69 73 63 6f 6e 6e 65 63 RINTF("Disconnec 95e0: 74 69 6e 67 20 63 61 72 64 22 29 3b 0a 0a 09 09 ting card");.... 95f0: 09 53 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 .SCardDisconnect 9600: 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 (slot->pcsc_card 9610: 2c 20 53 43 41 52 44 5f 4c 45 41 56 45 5f 43 41 , SCARD_LEAVE_CA 9620: 52 44 29 3b 0a 09 09 09 73 6c 6f 74 2d 3e 70 63 RD);....slot->pc 9630: 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 sc_card_connecte 9640: 64 20 3d 20 30 3b 0a 0a 09 09 09 2f 2a 20 45 6e d = 0;...../* En 9650: 64 20 53 6d 61 72 74 63 61 72 64 20 54 72 61 6e d Smartcard Tran 9660: 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 09 73 6c saction */....sl 9670: 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f ot->transaction_ 9680: 64 65 70 74 68 20 3d 20 31 3b 0a 09 09 09 63 61 depth = 1;....ca 9690: 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 ckey_end_transac 96a0: 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 09 tion(slot);..... 96b0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 96c0: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 NTF("Returning i 96d0: 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 09 09 09 n failure");.... 96e0: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 96f0: 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 SC_E_TOKENABSENT 9700: 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b );...}..}...CACK 9710: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 EY_DEBUG_PRINTBU 9720: 46 28 22 52 65 74 75 72 6e 65 64 20 56 61 6c 75 F("Returned Valu 9730: 65 3a 22 2c 20 72 65 63 76 5f 62 75 66 2c 20 72 e:", recv_buf, r 9740: 65 63 76 5f 6c 65 6e 29 3b 0a 0a 09 69 66 20 28 ecv_len);...if ( 9750: 72 65 63 76 5f 6c 65 6e 20 3c 20 32 29 20 7b 0a recv_len < 2) {. 9760: 09 09 2f 2a 20 4d 69 6e 69 6d 61 6c 20 72 65 73 ../* Minimal res 9770: 70 6f 6e 73 65 20 6c 65 6e 67 74 68 20 69 73 20 ponse length is 9780: 32 20 62 79 74 65 73 2c 20 72 65 74 75 72 6e 69 2 bytes, returni 9790: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 20 2a 2f ng in failure */ 97a0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 97b0: 50 52 49 4e 54 46 28 22 52 65 73 70 6f 6e 73 65 PRINTF("Response 97c0: 20 74 6f 6f 20 73 6d 61 6c 6c 2c 20 72 65 74 75 too small, retu 97d0: 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 rning in failure 97e0: 20 28 72 65 63 76 5f 6c 65 6e 20 3d 20 25 6c 75 (recv_len = %lu 97f0: 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f )", (unsigned lo 9800: 6e 67 29 20 72 65 63 76 5f 6c 65 6e 29 3b 0a 0a ng) recv_len);.. 9810: 09 09 2f 2a 20 45 6e 64 20 53 6d 61 72 74 63 61 ../* End Smartca 9820: 72 64 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 2a rd Transaction * 9830: 2f 0a 09 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 /...cackey_end_t 9840: 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 ransaction(slot) 9850: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b ;....return(CACK 9860: 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 EY_PCSC_E_GENERI 9870: 43 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 44 65 74 65 C);..}.../* Dete 9880: 72 6d 69 6e 65 20 72 65 73 75 6c 74 20 63 6f 64 rmine result cod 9890: 65 20 2a 2f 0a 09 6d 61 6a 6f 72 5f 72 63 20 3d e */..major_rc = 98a0: 20 72 65 63 76 5f 62 75 66 5b 72 65 63 76 5f 6c recv_buf[recv_l 98b0: 65 6e 20 2d 20 32 5d 3b 0a 09 6d 69 6e 6f 72 5f en - 2];..minor_ 98c0: 72 63 20 3d 20 72 65 63 76 5f 62 75 66 5b 72 65 rc = recv_buf[re 98d0: 63 76 5f 6c 65 6e 20 2d 20 31 5d 3b 0a 09 69 66 cv_len - 1];..if 98e0: 20 28 72 65 73 70 63 6f 64 65 29 20 7b 0a 09 09 (respcode) {... 98f0: 2a 72 65 73 70 63 6f 64 65 20 3d 20 28 6d 61 6a *respcode = (maj 9900: 6f 72 5f 72 63 20 3c 3c 20 38 29 20 7c 20 6d 69 or_rc << 8) | mi 9910: 6e 6f 72 5f 72 63 3b 0a 09 7d 0a 0a 09 2f 2a 20 nor_rc;..}.../* 9920: 41 64 6a 75 73 74 20 6d 65 73 73 61 67 65 20 62 Adjust message b 9930: 75 66 66 65 72 20 2a 2f 0a 09 72 65 63 76 5f 6c uffer */..recv_l 9940: 65 6e 20 2d 3d 20 32 3b 0a 0a 09 2f 2a 20 41 64 en -= 2;.../* Ad 9950: 64 20 62 79 74 65 73 20 74 6f 20 72 65 74 75 72 d bytes to retur 9960: 6e 20 76 61 6c 75 65 20 2a 2f 0a 09 74 6d 70 5f n value */..tmp_ 9970: 72 65 73 70 64 61 74 61 5f 6c 65 6e 20 3d 20 30 respdata_len = 0 9980: 3b 0a 09 69 66 20 28 72 65 73 70 64 61 74 61 20 ;..if (respdata 9990: 26 26 20 72 65 73 70 64 61 74 61 5f 6c 65 6e 29 && respdata_len) 99a0: 20 7b 0a 09 09 74 6d 70 5f 72 65 73 70 64 61 74 {...tmp_respdat 99b0: 61 5f 6c 65 6e 20 3d 20 2a 72 65 73 70 64 61 74 a_len = *respdat 99c0: 61 5f 6c 65 6e 3b 0a 0a 09 09 62 79 74 65 73 5f a_len;....bytes_ 99d0: 74 6f 5f 63 6f 70 79 20 3d 20 2a 72 65 73 70 64 to_copy = *respd 99e0: 61 74 61 5f 6c 65 6e 3b 0a 0a 09 09 69 66 20 28 ata_len;....if ( 99f0: 72 65 63 76 5f 6c 65 6e 20 3c 20 62 79 74 65 73 recv_len < bytes 9a00: 5f 74 6f 5f 63 6f 70 79 29 20 7b 0a 09 09 09 62 _to_copy) {....b 9a10: 79 74 65 73 5f 74 6f 5f 63 6f 70 79 20 3d 20 72 ytes_to_copy = r 9a20: 65 63 76 5f 6c 65 6e 3b 0a 09 09 7d 0a 0a 09 09 ecv_len;...}.... 9a30: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 9a40: 4e 54 46 28 22 43 6f 70 79 69 6e 67 20 25 6c 75 NTF("Copying %lu 9a50: 20 62 79 74 65 73 20 74 6f 20 74 68 65 20 62 75 bytes to the bu 9a60: 66 66 65 72 20 28 72 65 63 76 27 64 20 25 6c 75 ffer (recv'd %lu 9a70: 20 62 79 74 65 73 2c 20 62 75 74 20 6f 6e 6c 79 bytes, but only 9a80: 20 25 6c 75 20 62 79 74 65 73 20 6c 65 66 74 20 %lu bytes left 9a90: 69 6e 20 6f 75 72 20 62 75 66 66 65 72 29 22 2c in our buffer)", 9aa0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 9ab0: 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 2c 20 bytes_to_copy, 9ac0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 9ad0: 72 65 63 76 5f 6c 65 6e 2c 20 28 75 6e 73 69 67 recv_len, (unsig 9ae0: 6e 65 64 20 6c 6f 6e 67 29 20 2a 72 65 73 70 64 ned long) *respd 9af0: 61 74 61 5f 6c 65 6e 29 3b 0a 0a 09 09 6d 65 6d ata_len);....mem 9b00: 63 70 79 28 72 65 73 70 64 61 74 61 2c 20 72 65 cpy(respdata, re 9b10: 63 76 5f 62 75 66 2c 20 62 79 74 65 73 5f 74 6f cv_buf, bytes_to 9b20: 5f 63 6f 70 79 29 3b 0a 09 09 72 65 73 70 64 61 _copy);...respda 9b30: 74 61 20 2b 3d 20 62 79 74 65 73 5f 74 6f 5f 63 ta += bytes_to_c 9b40: 6f 70 79 3b 0a 0a 09 09 2a 72 65 73 70 64 61 74 opy;....*respdat 9b50: 61 5f 6c 65 6e 20 3d 20 62 79 74 65 73 5f 74 6f a_len = bytes_to 9b60: 5f 63 6f 70 79 3b 0a 09 09 74 6d 70 5f 72 65 73 _copy;...tmp_res 9b70: 70 64 61 74 61 5f 6c 65 6e 20 2d 3d 20 62 79 74 pdata_len -= byt 9b80: 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a 09 7d 20 65 es_to_copy;..} e 9b90: 6c 73 65 20 7b 0a 09 09 69 66 20 28 72 65 63 76 lse {...if (recv 9ba0: 5f 6c 65 6e 20 21 3d 20 30 29 20 7b 0a 09 09 09 _len != 0) {.... 9bb0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 9bc0: 4e 54 46 28 22 54 68 72 6f 77 69 6e 67 20 61 77 NTF("Throwing aw 9bd0: 61 79 20 25 6c 75 20 62 79 74 65 73 2c 20 6e 6f ay %lu bytes, no 9be0: 77 68 65 72 65 20 74 6f 20 70 75 74 20 74 68 65 where to put the 9bf0: 6d 21 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c m!", (unsigned l 9c00: 6f 6e 67 29 20 72 65 63 76 5f 6c 65 6e 29 3b 0a ong) recv_len);. 9c10: 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 6d 61 6a ..}..}...if (maj 9c20: 6f 72 5f 72 63 20 3d 3d 20 30 78 36 31 29 20 7b or_rc == 0x61) { 9c30: 0a 09 09 2f 2a 20 57 65 20 6e 65 65 64 20 74 6f .../* We need to 9c40: 20 52 45 41 44 20 2a 2f 0a 09 09 43 41 43 4b 45 READ */...CACKE 9c50: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 9c60: 42 75 66 66 65 72 20 72 65 61 64 20 72 65 71 75 Buffer read requ 9c70: 69 72 65 64 22 29 3b 0a 0a 09 09 69 66 20 28 6d ired");....if (m 9c80: 69 6e 6f 72 5f 72 63 20 3d 3d 20 30 78 30 30 29 inor_rc == 0x00) 9c90: 20 7b 0a 09 09 09 6d 69 6e 6f 72 5f 72 63 20 3d {....minor_rc = 9ca0: 20 43 41 43 4b 45 59 5f 41 50 44 55 5f 4d 54 55 CACKEY_APDU_MTU 9cb0: 3b 0a 09 09 7d 0a 0a 09 09 70 63 73 63 5f 67 65 ;...}....pcsc_ge 9cc0: 74 72 65 73 70 5f 72 65 74 20 3d 20 63 61 63 6b tresp_ret = cack 9cd0: 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 73 6c 6f ey_send_apdu(slo 9ce0: 74 2c 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 t, GSCIS_CLASS_I 9cf0: 53 4f 37 38 31 36 2c 20 47 53 43 49 53 5f 49 4e SO7816, GSCIS_IN 9d00: 53 54 52 5f 47 45 54 5f 52 45 53 50 4f 4e 53 45 STR_GET_RESPONSE 9d10: 2c 20 30 78 30 30 2c 20 30 78 30 30 2c 20 30 2c , 0x00, 0x00, 0, 9d20: 20 4e 55 4c 4c 2c 20 6d 69 6e 6f 72 5f 72 63 2c NULL, minor_rc, 9d30: 20 72 65 73 70 63 6f 64 65 2c 20 72 65 73 70 64 respcode, respd 9d40: 61 74 61 2c 20 26 74 6d 70 5f 72 65 73 70 64 61 ata, &tmp_respda 9d50: 74 61 5f 6c 65 6e 29 3b 0a 0a 09 09 69 66 20 28 ta_len);....if ( 9d60: 70 63 73 63 5f 67 65 74 72 65 73 70 5f 72 65 74 pcsc_getresp_ret 9d70: 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f != CACKEY_PCSC_ 9d80: 53 5f 4f 4b 29 20 7b 0a 09 09 09 43 41 43 4b 45 S_OK) {....CACKE 9d90: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 9da0: 42 75 66 66 65 72 20 72 65 61 64 20 66 61 69 6c Buffer read fail 9db0: 65 64 21 20 20 52 65 74 75 72 6e 69 6e 67 20 69 ed! Returning i 9dc0: 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 n failure");.... 9dd0: 09 2f 2a 20 45 6e 64 20 53 6d 61 72 74 63 61 72 ./* End Smartcar 9de0: 64 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f d Transaction */ 9df0: 0a 09 09 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 ....cackey_end_t 9e00: 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 ransaction(slot) 9e10: 3b 0a 0a 09 09 09 69 66 20 28 70 63 73 63 5f 67 ;.....if (pcsc_g 9e20: 65 74 72 65 73 70 5f 72 65 74 20 3d 3d 20 43 41 etresp_ret == CA 9e30: 43 4b 45 59 5f 50 43 53 43 5f 45 5f 52 45 54 52 CKEY_PCSC_E_RETR 9e40: 59 29 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 28 Y) {.....return( 9e50: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 52 45 CACKEY_PCSC_E_RE 9e60: 54 52 59 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 72 TRY);....}.....r 9e70: 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 eturn(CACKEY_PCS 9e80: 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 09 C_E_GENERIC);... 9e90: 7d 0a 0a 09 09 69 66 20 28 72 65 73 70 64 61 74 }....if (respdat 9ea0: 61 5f 6c 65 6e 29 20 7b 0a 09 09 09 2a 72 65 73 a_len) {....*res 9eb0: 70 64 61 74 61 5f 6c 65 6e 20 2b 3d 20 74 6d 70 pdata_len += tmp 9ec0: 5f 72 65 73 70 64 61 74 61 5f 6c 65 6e 3b 0a 09 _respdata_len;.. 9ed0: 09 7d 0a 0a 09 09 2f 2a 20 45 6e 64 20 53 6d 61 .}..../* End Sma 9ee0: 72 74 63 61 72 64 20 54 72 61 6e 73 61 63 74 69 rtcard Transacti 9ef0: 6f 6e 20 2a 2f 0a 09 09 63 61 63 6b 65 79 5f 65 on */...cackey_e 9f00: 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 nd_transaction(s 9f10: 6c 6f 74 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f lot);....CACKEY_ 9f20: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 9f30: 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 turning in succe 9f40: 73 73 20 28 62 75 66 66 65 72 20 72 65 61 64 20 ss (buffer read 9f50: 63 6f 6d 70 6c 65 74 65 29 22 29 3b 0a 09 09 72 complete)");...r 9f60: 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 eturn(CACKEY_PCS 9f70: 43 5f 53 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 2f 2a C_S_OK);..}.../* 9f80: 20 45 6e 64 20 53 6d 61 72 74 63 61 72 64 20 54 End Smartcard T 9f90: 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 63 ransaction */..c 9fa0: 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 ackey_end_transa 9fb0: 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 69 ction(slot);...i 9fc0: 66 20 28 6d 61 6a 6f 72 5f 72 63 20 3d 3d 20 30 f (major_rc == 0 9fd0: 78 39 30 29 20 7b 0a 09 09 2f 2a 20 53 75 63 63 x90) {.../* Succ 9fe0: 65 73 73 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f ess */...CACKEY_ 9ff0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re a000: 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 turning in succe a010: 73 73 20 28 6d 61 6a 6f 72 5f 72 63 20 3d 20 30 ss (major_rc = 0 a020: 78 39 30 29 22 29 3b 0a 0a 09 09 72 65 74 75 72 x90)");....retur a030: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f n(CACKEY_PCSC_S_ a040: 4f 4b 29 3b 0a 09 7d 0a 0a 0a 09 43 41 43 4b 45 OK);..}....CACKE a050: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" a060: 41 50 44 55 20 52 65 74 75 72 6e 65 64 20 61 6e APDU Returned an a070: 20 65 72 72 6f 72 2c 20 72 65 74 75 72 6e 69 6e error, returnin a080: 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a g in failure");. a090: 0a 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f ..return(CACKEY_ a0a0: 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b PCSC_E_GENERIC); a0b0: 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 .}../*. * SYNPOS a0c0: 49 53 0a 20 2a 20 20 20 20 20 73 73 69 7a 65 5f IS. * ssize_ a0d0: 74 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 t cackey_read_bu a0e0: 66 66 65 72 28 73 74 72 75 63 74 20 63 61 63 6b ffer(struct cack a0f0: 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 ey_slot *slot, u a100: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 75 nsigned char *bu a110: 66 66 65 72 2c 20 73 69 7a 65 5f 74 20 63 6f 75 ffer, size_t cou a120: 6e 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 nt, unsigned cha a130: 72 20 74 5f 6f 72 5f 76 2c 20 73 69 7a 65 5f 74 r t_or_v, size_t a140: 20 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 29 initial_offset) a150: 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 ;. *. * ARGUMENT a160: 53 0a 20 2a 20 20 20 20 20 73 74 72 75 63 74 20 S. * struct a170: 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f cackey_slot *slo a180: 74 0a 20 2a 20 20 20 20 20 20 20 20 20 53 6c 6f t. * Slo a190: 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 6e t to send comman a1a0: 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 20 20 20 20 ds to. *. * a1b0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 unsigned char *b a1c0: 75 66 66 65 72 0a 20 2a 20 20 20 20 20 20 20 20 uffer. * a1d0: 20 5b 4f 55 54 5d 20 42 75 66 66 65 72 0a 20 2a [OUT] Buffer. * a1e0: 0a 20 2a 20 20 20 20 20 73 69 7a 65 5f 74 20 63 . * size_t c a1f0: 6f 75 6e 74 0a 20 2a 20 20 20 20 20 20 20 20 20 ount. * a200: 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 Number of bytes a210: 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65 to attempt to re a220: 61 64 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e 73 ad. *. * uns a230: 69 67 6e 65 64 20 63 68 61 72 20 74 5f 6f 72 5f igned char t_or_ a240: 76 0a 20 2a 20 20 20 20 20 20 20 20 20 53 65 6c v. * Sel a250: 65 63 74 20 74 68 65 20 54 2d 62 75 66 66 65 72 ect the T-buffer a260: 20 28 30 31 29 20 6f 72 20 56 2d 62 75 66 66 65 (01) or V-buffe a270: 72 20 28 30 32 29 20 74 6f 20 72 65 61 64 20 66 r (02) to read f a280: 72 6f 6d 2e 20 20 0a 20 2a 0a 20 2a 20 20 20 20 rom. . *. * a290: 20 73 69 7a 65 5f 74 20 69 6e 69 74 69 61 6c 5f size_t initial_ a2a0: 6f 66 66 73 65 74 0a 20 2a 20 20 20 20 20 20 20 offset. * a2b0: 20 20 53 70 65 63 69 66 79 20 74 68 65 20 6f 66 Specify the of a2c0: 66 73 65 74 20 74 6f 20 62 65 67 69 6e 20 74 68 fset to begin th a2d0: 65 20 72 65 61 64 20 66 72 6f 6d 0a 20 2a 0a 20 e read from. *. a2e0: 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 *. * RETURN VALU a2f0: 45 0a 20 2a 20 20 20 20 20 54 68 69 73 20 66 75 E. * This fu a300: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 nction returns t a310: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 he number of byt a320: 65 73 20 61 63 74 75 61 6c 6c 79 20 72 65 61 64 es actually read a330: 2c 20 6f 72 20 2d 31 20 6f 6e 20 65 72 72 6f 72 , or -1 on error a340: 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a .. *. * NOTES. * a350: 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a 2f None. *. */ a360: 0a 73 74 61 74 69 63 20 73 73 69 7a 65 5f 74 20 .static ssize_t a370: 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 66 cackey_read_buff a380: 65 72 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 er(struct cackey a390: 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 _slot *slot, uns a3a0: 69 67 6e 65 64 20 63 68 61 72 20 2a 62 75 66 66 igned char *buff a3b0: 65 72 2c 20 73 69 7a 65 5f 74 20 63 6f 75 6e 74 er, size_t count a3c0: 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 , unsigned char a3d0: 74 5f 6f 72 5f 76 2c 20 73 69 7a 65 5f 74 20 69 t_or_v, size_t i a3e0: 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 29 20 7b nitial_offset) { a3f0: 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 ..unsigned char a400: 2a 69 6e 69 74 5f 62 75 66 66 65 72 3b 0a 09 73 *init_buffer;..s a410: 69 7a 65 5f 74 20 69 6e 69 74 5f 63 6f 75 6e 74 ize_t init_count a420: 3b 0a 09 73 69 7a 65 5f 74 20 69 6e 69 74 5f 69 ;..size_t init_i a430: 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 3b 0a 0a nitial_offset;.. a440: 09 73 69 7a 65 5f 74 20 6f 66 66 73 65 74 20 3d .size_t offset = a450: 20 30 2c 20 6d 61 78 5f 6f 66 66 73 65 74 2c 20 0, max_offset, a460: 6d 61 78 5f 63 6f 75 6e 74 3b 0a 09 75 6e 73 69 max_count;..unsi a470: 67 6e 65 64 20 63 68 61 72 20 63 6d 64 5b 32 5d gned char cmd[2] a480: 3b 0a 09 75 69 6e 74 31 36 5f 74 20 72 65 73 70 ;..uint16_t resp a490: 63 6f 64 65 3b 0a 09 69 6e 74 20 73 65 6e 64 5f code;..int send_ a4a0: 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ret;...CACKEY_DE a4b0: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call a4c0: 65 64 2e 22 29 3b 0a 0a 09 69 6e 69 74 5f 62 75 ed.");...init_bu a4d0: 66 66 65 72 20 3d 20 62 75 66 66 65 72 3b 0a 09 ffer = buffer;.. a4e0: 69 6e 69 74 5f 63 6f 75 6e 74 20 3d 20 63 6f 75 init_count = cou a4f0: 6e 74 3b 0a 09 69 6e 69 74 5f 69 6e 69 74 69 61 nt;..init_initia a500: 6c 5f 6f 66 66 73 65 74 20 3d 20 69 6e 69 74 69 l_offset = initi a510: 61 6c 5f 6f 66 66 73 65 74 3b 0a 0a 09 6d 61 78 al_offset;...max a520: 5f 6f 66 66 73 65 74 20 3d 20 63 6f 75 6e 74 3b _offset = count; a530: 0a 09 6d 61 78 5f 63 6f 75 6e 74 20 3d 20 43 41 ..max_count = CA a540: 43 4b 45 59 5f 41 50 44 55 5f 4d 54 55 3b 0a 0a CKEY_APDU_MTU;.. a550: 09 69 66 20 28 74 5f 6f 72 5f 76 20 21 3d 20 31 .if (t_or_v != 1 a560: 20 26 26 20 74 5f 6f 72 5f 76 20 21 3d 20 32 29 && t_or_v != 2) a570: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU a580: 47 5f 50 52 49 4e 54 46 28 22 49 6e 76 61 6c 69 G_PRINTF("Invali a590: 64 20 54 20 6f 72 20 56 20 70 61 72 61 6d 65 74 d T or V paramet a5a0: 65 72 20 73 70 65 63 69 66 69 65 64 2c 20 72 65 er specified, re a5b0: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu a5c0: 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 re");....return( a5d0: 2d 31 29 3b 0a 09 7d 0a 0a 09 63 6d 64 5b 30 5d -1);..}...cmd[0] a5e0: 20 3d 20 74 5f 6f 72 5f 76 3b 0a 0a 09 77 68 69 = t_or_v;...whi a5f0: 6c 65 20 28 31 29 20 7b 0a 09 09 69 66 20 28 6f le (1) {...if (o a600: 66 66 73 65 74 20 3e 3d 20 6d 61 78 5f 6f 66 66 ffset >= max_off a610: 73 65 74 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 set) {....CACKEY a620: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 42 _DEBUG_PRINTF("B a630: 75 66 66 65 72 20 74 6f 6f 20 73 6d 61 6c 6c 2c uffer too small, a640: 20 72 65 74 75 72 6e 69 6e 67 20 77 68 61 74 20 returning what a650: 77 65 20 67 6f 74 2e 2e 2e 22 29 3b 0a 0a 09 09 we got...");.... a660: 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09 63 .break;...}....c a670: 6f 75 6e 74 20 3d 20 6d 61 78 5f 6f 66 66 73 65 ount = max_offse a680: 74 20 2d 20 6f 66 66 73 65 74 3b 0a 09 09 69 66 t - offset;...if a690: 20 28 63 6f 75 6e 74 20 3e 20 6d 61 78 5f 63 6f (count > max_co a6a0: 75 6e 74 29 20 7b 0a 09 09 09 63 6f 75 6e 74 20 unt) {....count a6b0: 3d 20 6d 61 78 5f 63 6f 75 6e 74 3b 0a 09 09 7d = max_count;...} a6c0: 0a 0a 09 09 63 6d 64 5b 31 5d 20 3d 20 63 6f 75 ....cmd[1] = cou a6d0: 6e 74 3b 0a 0a 09 09 73 65 6e 64 5f 72 65 74 20 nt;....send_ret a6e0: 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 = cackey_send_ap a6f0: 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 du(slot, GSCIS_C a700: 4c 41 53 53 5f 47 4c 4f 42 41 4c 5f 50 4c 41 54 LASS_GLOBAL_PLAT a710: 46 4f 52 4d 2c 20 47 53 43 49 53 5f 49 4e 53 54 FORM, GSCIS_INST a720: 52 5f 52 45 41 44 5f 42 55 46 46 45 52 2c 20 28 R_READ_BUFFER, ( a730: 28 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 20 (initial_offset a740: 2b 20 6f 66 66 73 65 74 29 20 3e 3e 20 38 29 20 + offset) >> 8) a750: 26 20 30 78 66 66 2c 20 28 69 6e 69 74 69 61 6c & 0xff, (initial a760: 5f 6f 66 66 73 65 74 20 2b 20 6f 66 66 73 65 74 _offset + offset a770: 29 20 26 20 30 78 66 66 2c 20 73 69 7a 65 6f 66 ) & 0xff, sizeof a780: 28 63 6d 64 29 2c 20 63 6d 64 2c 20 30 78 30 30 (cmd), cmd, 0x00 a790: 2c 20 26 72 65 73 70 63 6f 64 65 2c 20 62 75 66 , &respcode, buf a7a0: 66 65 72 20 2b 20 6f 66 66 73 65 74 2c 20 26 63 fer + offset, &c a7b0: 6f 75 6e 74 29 3b 0a 0a 09 09 69 66 20 28 73 65 ount);....if (se a7c0: 6e 64 5f 72 65 74 20 3d 3d 20 43 41 43 4b 45 59 nd_ret == CACKEY a7d0: 5f 50 43 53 43 5f 45 5f 52 45 54 52 59 29 20 7b _PCSC_E_RETRY) { a7e0: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG a7f0: 5f 50 52 49 4e 54 46 28 22 41 44 50 55 20 53 65 _PRINTF("ADPU Se a800: 6e 64 69 6e 67 20 66 61 69 6c 65 64 2c 20 72 65 nding failed, re a810: 74 72 79 69 6e 67 20 72 65 61 64 20 62 75 66 66 trying read buff a820: 65 72 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e er");.....return a830: 28 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 (cackey_read_buf a840: 66 65 72 28 73 6c 6f 74 2c 20 69 6e 69 74 5f 62 fer(slot, init_b a850: 75 66 66 65 72 2c 20 69 6e 69 74 5f 63 6f 75 6e uffer, init_coun a860: 74 2c 20 74 5f 6f 72 5f 76 2c 20 69 6e 69 74 5f t, t_or_v, init_ a870: 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 29 29 initial_offset)) a880: 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 73 65 6e ;...}....if (sen a890: 64 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f d_ret != CACKEY_ a8a0: 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 09 PCSC_S_OK) {.... a8b0: 69 66 20 28 72 65 73 70 63 6f 64 65 20 3d 3d 20 if (respcode == a8c0: 30 78 36 41 38 36 29 20 7b 0a 09 09 09 09 69 66 0x6A86) {.....if a8d0: 20 28 6d 61 78 5f 63 6f 75 6e 74 20 3d 3d 20 31 (max_count == 1 a8e0: 29 20 7b 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a ) {......break;. a8f0: 09 09 09 09 7d 0a 0a 09 09 09 09 6d 61 78 5f 63 ....}......max_c a900: 6f 75 6e 74 20 3d 20 6d 61 78 5f 63 6f 75 6e 74 ount = max_count a910: 20 2f 20 32 3b 0a 0a 09 09 09 09 63 6f 6e 74 69 / 2;......conti a920: 6e 75 65 3b 0a 09 09 09 7d 0a 0a 09 09 09 43 41 nue;....}.....CA a930: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT a940: 46 28 22 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 F("cackey_send_a a950: 70 64 75 28 29 20 66 61 69 6c 65 64 2c 20 72 65 pdu() failed, re a960: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu a970: 72 65 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e re");.....return a980: 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 6f 66 66 (-1);...}....off a990: 73 65 74 20 2b 3d 20 63 6f 75 6e 74 3b 0a 0a 09 set += count;... a9a0: 09 69 66 20 28 63 6f 75 6e 74 20 3c 20 6d 61 78 .if (count < max a9b0: 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09 43 41 43 _count) {....CAC a9c0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF a9d0: 28 22 53 68 6f 72 74 20 72 65 61 64 20 2d 2d 20 ("Short read -- a9e0: 63 6f 75 6e 74 20 3d 20 25 69 2c 20 63 6d 64 5b count = %i, cmd[ a9f0: 31 5d 20 3d 20 25 69 22 2c 20 28 69 6e 74 29 20 1] = %i", (int) aa00: 63 6f 75 6e 74 2c 20 28 69 6e 74 29 20 63 6d 64 count, (int) cmd aa10: 5b 31 5d 29 3b 0a 0a 09 09 09 62 72 65 61 6b 3b [1]);.....break; aa20: 0a 09 09 7d 0a 09 7d 0a 0a 23 69 66 64 65 66 20 ...}..}..#ifdef aa30: 43 41 43 4b 45 59 5f 50 41 52 41 4e 4f 49 44 0a CACKEY_PARANOID. aa40: 23 20 20 69 66 64 65 66 20 5f 50 4f 53 49 58 5f # ifdef _POSIX_ aa50: 53 53 49 5a 45 5f 4d 41 58 0a 09 69 66 20 28 6f SSIZE_MAX..if (o aa60: 66 66 73 65 74 20 3e 20 5f 50 4f 53 49 58 5f 53 ffset > _POSIX_S aa70: 53 49 5a 45 5f 4d 41 58 29 20 7b 0a 09 09 43 41 SIZE_MAX) {...CA aa80: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT aa90: 46 28 22 4f 66 66 73 65 74 20 65 78 63 65 65 64 F("Offset exceed aaa0: 73 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c s maximum value, aab0: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 returning in fa aac0: 69 6c 75 72 65 2e 20 28 6d 61 78 20 3d 20 25 6c ilure. (max = %l aad0: 69 2c 20 6f 66 66 73 65 74 20 3d 20 25 6c 75 29 i, offset = %lu) aae0: 22 2c 20 28 6c 6f 6e 67 29 20 5f 50 4f 53 49 58 ", (long) _POSIX aaf0: 5f 53 53 49 5a 45 5f 4d 41 58 2c 20 28 75 6e 73 _SSIZE_MAX, (uns ab00: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6f 66 66 73 igned long) offs ab10: 65 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d et);....return(- ab20: 31 29 3b 0a 09 7d 0a 23 20 20 65 6e 64 69 66 0a 1);..}.# endif. ab30: 23 65 6e 64 69 66 0a 0a 09 43 41 43 4b 45 59 5f #endif...CACKEY_ ab40: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re ab50: 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 turning in succe ab60: 73 73 2c 20 72 65 61 64 20 25 6c 75 20 62 79 74 ss, read %lu byt ab70: 65 73 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c es", (unsigned l ab80: 6f 6e 67 29 20 6f 66 66 73 65 74 29 3b 0a 0a 09 ong) offset);... ab90: 72 65 74 75 72 6e 28 6f 66 66 73 65 74 29 3b 0a return(offset);. aba0: 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 }../*. * SYNPOSI abb0: 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 79 5f S. * cackey_ abc0: 72 65 74 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 ret cackey_selec abd0: 74 5f 61 70 70 6c 65 74 28 73 74 72 75 63 74 20 t_applet(struct abe0: 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f cackey_slot *slo abf0: 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 t, unsigned char ac00: 20 2a 61 69 64 2c 20 73 69 7a 65 5f 74 20 61 69 *aid, size_t ai ac10: 64 5f 6c 65 6e 29 3b 0a 20 2a 0a 20 2a 20 41 52 d_len);. *. * AR ac20: 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 73 GUMENTS. * s ac30: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f truct cackey_slo ac40: 74 20 2a 73 6c 6f 74 0a 20 2a 20 20 20 20 20 20 t *slot. * ac50: 20 20 20 53 6c 6f 74 20 74 6f 20 73 65 6e 64 20 Slot to send ac60: 63 6f 6d 6d 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 commands to. *. ac70: 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 * unsigned c ac80: 68 61 72 20 2a 61 69 64 0a 20 2a 20 20 20 20 20 har *aid. * ac90: 20 20 20 20 42 75 66 66 65 72 20 63 6f 6e 74 61 Buffer conta aca0: 69 6e 69 6e 67 20 41 70 70 6c 65 74 20 49 44 20 ining Applet ID acb0: 74 6f 20 73 65 6c 65 63 74 0a 20 2a 0a 20 2a 20 to select. *. * acc0: 20 20 20 20 73 69 7a 65 5f 74 20 61 69 64 5f 6c size_t aid_l acd0: 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 4e 75 en. * Nu ace0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e mber of bytes in acf0: 20 74 68 65 20 22 61 69 64 22 20 28 41 70 70 6c the "aid" (Appl ad00: 65 74 20 49 44 29 20 70 61 72 61 6d 65 74 65 72 et ID) parameter ad10: 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 . *. * RETURN VA ad20: 4c 55 45 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 LUE. * CACKE ad30: 59 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 20 20 20 Y_PCSC_S_OK ad40: 20 20 20 20 4f 6e 20 73 75 63 63 65 73 73 0a 20 On success. ad50: 2a 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 * CACKEY_PCS ad60: 43 5f 45 5f 47 45 4e 45 52 49 43 20 20 20 20 4f C_E_GENERIC O ad70: 6e 20 65 72 72 6f 72 0a 20 2a 0a 20 2a 20 4e 4f n error. *. * NO ad80: 54 45 53 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a TES. * None. ad90: 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63 61 *. */.static ca ada0: 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f ckey_ret cackey_ adb0: 73 65 6c 65 63 74 5f 61 70 70 6c 65 74 28 73 74 select_applet(st adc0: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ruct cackey_slot add0: 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 64 *slot, unsigned ade0: 20 63 68 61 72 20 2a 61 69 64 2c 20 73 69 7a 65 char *aid, size adf0: 5f 74 20 61 69 64 5f 6c 65 6e 29 20 7b 0a 09 69 _t aid_len) {..i ae00: 6e 74 20 73 65 6e 64 5f 72 65 74 3b 0a 0a 09 43 nt send_ret;...C ae10: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN ae20: 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. ae30: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR ae40: 49 4e 54 42 55 46 28 22 53 65 6c 65 63 74 69 6e INTBUF("Selectin ae50: 67 20 61 70 70 6c 65 74 3a 22 2c 20 61 69 64 2c g applet:", aid, ae60: 20 61 69 64 5f 6c 65 6e 29 3b 0a 0a 09 73 65 6e aid_len);...sen ae70: 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 d_ret = cackey_s ae80: 65 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c 20 47 end_apdu(slot, G ae90: 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 SCIS_CLASS_ISO78 aea0: 31 36 2c 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 16, GSCIS_INSTR_ aeb0: 53 45 4c 45 43 54 2c 20 47 53 43 49 53 5f 50 41 SELECT, GSCIS_PA aec0: 52 41 4d 5f 53 45 4c 45 43 54 5f 41 50 50 4c 45 RAM_SELECT_APPLE aed0: 54 2c 20 30 78 30 30 2c 20 61 69 64 5f 6c 65 6e T, 0x00, aid_len aee0: 2c 20 61 69 64 2c 20 30 78 30 30 2c 20 4e 55 4c , aid, 0x00, NUL aef0: 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a L, NULL, NULL);. af00: 0a 09 69 66 20 28 73 65 6e 64 5f 72 65 74 20 3d ..if (send_ret = af10: 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f = CACKEY_PCSC_E_ af20: 52 45 54 52 59 29 20 7b 0a 09 09 43 41 43 4b 45 RETRY) {...CACKE af30: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" af40: 41 44 50 55 20 53 65 6e 64 69 6e 67 20 66 61 69 ADPU Sending fai af50: 6c 65 64 2c 20 72 65 74 72 79 69 6e 67 20 73 65 led, retrying se af60: 6c 65 63 74 20 61 70 70 6c 65 74 22 29 3b 0a 0a lect applet");.. af70: 09 09 72 65 74 75 72 6e 28 63 61 63 6b 65 79 5f ..return(cackey_ af80: 73 65 6c 65 63 74 5f 61 70 70 6c 65 74 28 73 6c select_applet(sl af90: 6f 74 2c 20 61 69 64 2c 20 61 69 64 5f 6c 65 6e ot, aid, aid_len afa0: 29 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 65 6e ));..}...if (sen afb0: 64 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f d_ret != CACKEY_ afc0: 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 PCSC_S_OK) {...C afd0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN afe0: 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 6f 70 TF("Failed to op aff0: 65 6e 20 61 70 70 6c 65 74 2c 20 72 65 74 75 72 en applet, retur b000: 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 ning in failure" b010: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 );....return(CAC b020: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER b030: 49 43 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 IC);..}...CACKEY b040: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 _DEBUG_PRINTF("S b050: 75 63 63 65 73 73 66 75 6c 6c 79 20 73 65 6c 65 uccessfully sele b060: 63 74 65 64 20 66 69 6c 65 22 29 3b 0a 0a 09 72 cted file");...r b070: 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 eturn(CACKEY_PCS b080: 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 C_S_OK);.}../*. b090: 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 * SYNPOSIS. * b0a0: 20 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 cackey_ret cac b0b0: 6b 65 79 5f 73 65 6c 65 63 74 5f 66 69 6c 65 28 key_select_file( b0c0: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl b0d0: 6f 74 20 2a 73 6c 6f 74 2c 20 75 69 6e 74 31 36 ot *slot, uint16 b0e0: 5f 74 20 65 66 29 3b 0a 20 2a 0a 20 2a 20 41 52 _t ef);. *. * AR b0f0: 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 73 GUMENTS. * s b100: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f truct cackey_slo b110: 74 20 2a 73 6c 6f 74 0a 20 2a 20 20 20 20 20 20 t *slot. * b120: 20 20 20 53 6c 6f 74 20 74 6f 20 73 65 6e 64 20 Slot to send b130: 63 6f 6d 6d 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 commands to. *. b140: 2a 20 20 20 20 20 75 69 6e 74 31 36 5f 74 20 65 * uint16_t e b150: 66 0a 20 2a 20 20 20 20 20 20 20 20 20 45 6c 65 f. * Ele b160: 6d 65 6e 74 61 6c 20 46 69 6c 65 20 74 6f 20 73 mental File to s b170: 65 6c 65 63 74 0a 20 2a 0a 20 2a 20 52 45 54 55 elect. *. * RETU b180: 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 RN VALUE. * b190: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK b1a0: 20 20 20 20 20 20 20 20 20 4f 6e 20 73 75 63 63 On succ b1b0: 65 73 73 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 ess. * CACKE b1c0: 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 Y_PCSC_E_GENERIC b1d0: 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 2a 0a On error. *. b1e0: 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 * NOTES. * b1f0: 54 68 69 73 20 73 65 6c 65 63 74 73 20 61 6e 20 This selects an b200: 45 6c 65 6d 65 6e 74 61 72 79 20 46 69 6c 65 20 Elementary File b210: 28 45 46 29 20 75 6e 64 65 72 20 74 68 65 20 63 (EF) under the c b220: 75 72 72 65 6e 74 6c 79 20 73 65 6c 65 63 74 65 urrently selecte b230: 64 0a 20 2a 20 20 20 20 20 44 65 64 69 63 61 74 d. * Dedicat b240: 65 64 20 46 69 6c 65 20 28 44 46 29 0a 20 2a 0a ed File (DF). *. b250: 20 2a 20 20 20 20 20 54 79 70 69 63 61 6c 6c 79 * Typically b260: 20 74 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 this is called b270: 61 66 74 65 72 20 73 65 6c 65 63 74 69 6e 67 20 after selecting b280: 74 68 65 20 63 6f 72 72 65 63 74 20 41 70 70 6c the correct Appl b290: 65 74 20 28 75 73 69 6e 67 0a 20 2a 20 20 20 20 et (using. * b2a0: 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 cackey_select_a b2b0: 70 70 6c 65 74 29 20 66 6f 72 20 56 4d 20 63 61 pplet) for VM ca b2c0: 72 64 73 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 rds. *. */.stati b2d0: 63 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 c cackey_ret cac b2e0: 6b 65 79 5f 73 65 6c 65 63 74 5f 66 69 6c 65 28 key_select_file( b2f0: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl b300: 6f 74 20 2a 73 6c 6f 74 2c 20 75 69 6e 74 31 36 ot *slot, uint16 b310: 5f 74 20 65 66 29 20 7b 0a 09 75 6e 73 69 67 6e _t ef) {..unsign b320: 65 64 20 63 68 61 72 20 66 69 64 5f 62 75 66 5b ed char fid_buf[ b330: 32 5d 3b 0a 09 69 6e 74 20 73 65 6e 64 5f 72 65 2];..int send_re b340: 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 t;...CACKEY_DEBU b350: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called b360: 2e 22 29 3b 0a 0a 09 2f 2a 20 4f 70 65 6e 20 74 .");.../* Open t b370: 68 65 20 65 6c 65 6d 65 6e 74 61 72 79 20 66 69 he elementary fi b380: 6c 65 20 2a 2f 0a 09 66 69 64 5f 62 75 66 5b 30 le */..fid_buf[0 b390: 5d 20 3d 20 28 65 66 20 3e 3e 20 38 29 20 26 20 ] = (ef >> 8) & b3a0: 30 78 66 66 3b 0a 09 66 69 64 5f 62 75 66 5b 31 0xff;..fid_buf[1 b3b0: 5d 20 3d 20 65 66 20 26 20 30 78 66 66 3b 0a 0a ] = ef & 0xff;.. b3c0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR b3d0: 49 4e 54 46 28 22 53 65 6c 65 63 74 69 6e 67 20 INTF("Selecting b3e0: 66 69 6c 65 3a 20 25 30 34 6c 78 22 2c 20 28 75 file: %04lx", (u b3f0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 65 66 nsigned long) ef b400: 29 3b 0a 0a 09 73 65 6e 64 5f 72 65 74 20 3d 20 );...send_ret = b410: 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 cackey_send_apdu b420: 28 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 4c 41 (slot, GSCIS_CLA b430: 53 53 5f 49 53 4f 37 38 31 36 2c 20 47 53 43 49 SS_ISO7816, GSCI b440: 53 5f 49 4e 53 54 52 5f 53 45 4c 45 43 54 2c 20 S_INSTR_SELECT, b450: 30 78 30 32 2c 20 30 78 30 43 2c 20 73 69 7a 65 0x02, 0x0C, size b460: 6f 66 28 66 69 64 5f 62 75 66 29 2c 20 66 69 64 of(fid_buf), fid b470: 5f 62 75 66 2c 20 30 78 30 30 2c 20 4e 55 4c 4c _buf, 0x00, NULL b480: 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 , NULL, NULL);.. b490: 69 66 20 28 73 65 6e 64 5f 72 65 74 20 21 3d 20 if (send_ret != b4a0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK b4b0: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB b4c0: 55 47 5f 50 52 49 4e 54 46 28 22 46 61 69 6c 65 UG_PRINTF("Faile b4d0: 64 20 74 6f 20 6f 70 65 6e 20 66 69 6c 65 2c 20 d to open file, b4e0: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai b4f0: 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 lure");....retur b500: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f n(CACKEY_PCSC_E_ b510: 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 43 GENERIC);..}...C b520: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN b530: 54 46 28 22 53 75 63 63 65 73 73 66 75 6c 6c 79 TF("Successfully b540: 20 73 65 6c 65 63 74 65 64 20 66 69 6c 65 22 29 selected file") b550: 3b 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b 45 ;...return(CACKE b560: 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a Y_PCSC_S_OK);.}. b570: 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a ./*. * SYNPOSIS. b580: 20 2a 20 20 20 20 20 76 6f 69 64 20 63 61 63 6b * void cack b590: 65 79 5f 66 72 65 65 5f 74 6c 76 28 73 74 72 75 ey_free_tlv(stru b5a0: 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e ct cackey_tlv_en b5b0: 74 69 74 79 20 2a 72 6f 6f 74 29 3b 0a 20 2a 0a tity *root);. *. b5c0: 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 * ARGUMENTS. * b5d0: 20 20 20 20 73 74 72 75 63 74 20 63 61 63 6b 65 struct cacke b5e0: 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a 72 6f y_tlv_entity *ro b5f0: 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 52 6f ot. * Ro b600: 6f 74 20 6f 66 20 74 68 65 20 54 4c 56 20 6c 69 ot of the TLV li b610: 73 74 20 74 6f 20 73 74 61 72 74 20 66 72 65 65 st to start free b620: 69 6e 67 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e ing. *. * RETURN b630: 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 4e 6f VALUE. * No b640: 6e 65 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 ne. *. * NOTES. b650: 2a 20 20 20 20 20 54 68 69 73 20 66 75 6e 63 74 * This funct b660: 69 6f 6e 20 66 72 65 65 73 20 74 68 65 20 54 4c ion frees the TL b670: 56 20 6c 69 6e 6b 65 64 20 6c 69 73 74 65 64 20 V linked listed b680: 72 65 74 75 72 6e 65 64 20 66 72 6f 6d 0a 20 2a returned from. * b690: 20 20 20 20 20 22 63 61 63 6b 65 79 5f 72 65 61 "cackey_rea b6a0: 64 5f 74 6c 76 22 0a 20 2a 0a 20 2a 2f 0a 73 74 d_tlv". *. */.st b6b0: 61 74 69 63 20 76 6f 69 64 20 63 61 63 6b 65 79 atic void cackey b6c0: 5f 66 72 65 65 5f 74 6c 76 28 73 74 72 75 63 74 _free_tlv(struct b6d0: 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 cackey_tlv_enti b6e0: 74 79 20 2a 72 6f 6f 74 29 20 7b 0a 09 73 74 72 ty *root) {..str b6f0: 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 uct cackey_tlv_e b700: 6e 74 69 74 79 20 2a 63 75 72 72 2c 20 2a 6e 65 ntity *curr, *ne b710: 78 74 3b 0a 0a 09 69 66 20 28 72 6f 6f 74 20 3d xt;...if (root = b720: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 72 65 74 75 = NULL) {...retu b730: 72 6e 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 63 75 rn;..}...for (cu b740: 72 72 20 3d 20 72 6f 6f 74 3b 20 63 75 72 72 3b rr = root; curr; b750: 20 63 75 72 72 20 3d 20 6e 65 78 74 29 20 7b 0a curr = next) {. b760: 09 09 6e 65 78 74 20 3d 20 63 75 72 72 2d 3e 5f ..next = curr->_ b770: 6e 65 78 74 3b 0a 0a 09 09 73 77 69 74 63 68 20 next;....switch b780: 28 63 75 72 72 2d 3e 74 61 67 29 20 7b 0a 09 09 (curr->tag) {... b790: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ b7a0: 41 43 52 5f 54 41 42 4c 45 3a 0a 09 09 09 63 61 ACR_TABLE:....ca b7b0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 se GSCIS_TAG_CER b7c0: 54 49 46 49 43 41 54 45 3a 0a 09 09 09 09 69 66 TIFICATE:.....if b7d0: 20 28 63 75 72 72 2d 3e 76 61 6c 75 65 29 20 7b (curr->value) { b7e0: 0a 09 09 09 09 09 66 72 65 65 28 63 75 72 72 2d ......free(curr- b7f0: 3e 76 61 6c 75 65 29 3b 0a 09 09 09 09 7d 0a 09 >value);.....}.. b800: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas b810: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 e GSCIS_TAG_CARD b820: 55 52 4c 3a 0a 09 09 09 09 69 66 20 28 63 75 72 URL:.....if (cur b830: 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c r->value_cardurl b840: 29 20 7b 0a 09 09 09 09 09 66 72 65 65 28 63 75 ) {......free(cu b850: 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 rr->value_cardur b860: 6c 29 3b 0a 09 09 09 09 7d 0a 09 09 09 09 62 72 l);.....}.....br b870: 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09 66 72 65 65 eak;...}....free b880: 28 63 75 72 72 29 3b 0a 09 7d 0a 0a 09 72 65 74 (curr);..}...ret b890: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 urn;.}../*. * SY b8a0: 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 2e 2e NPOSIS. * .. b8b0: 2e 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 .. *. * ARGUMENT b8c0: 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a S. * .... *. b8d0: 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a * RETURN VALUE. b8e0: 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a * .... *. * b8f0: 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 2e 2e NOTES. * .. b900: 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 .. *. */.static b910: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c struct cackey_tl b920: 76 5f 65 6e 74 69 74 79 20 2a 63 61 63 6b 65 79 v_entity *cackey b930: 5f 72 65 61 64 5f 74 6c 76 28 73 74 72 75 63 74 _read_tlv(struct b940: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c cackey_slot *sl b950: 6f 74 29 20 7b 0a 09 73 74 72 75 63 74 20 63 61 ot) {..struct ca b960: 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 ckey_tlv_entity b970: 2a 63 75 72 72 5f 65 6e 74 69 74 79 2c 20 2a 72 *curr_entity, *r b980: 6f 6f 74 20 3d 20 4e 55 4c 4c 2c 20 2a 6c 61 73 oot = NULL, *las b990: 74 20 3d 20 4e 55 4c 4c 3b 0a 09 75 6e 73 69 67 t = NULL;..unsig b9a0: 6e 65 64 20 63 68 61 72 20 74 6c 65 6e 5f 62 75 ned char tlen_bu b9b0: 66 5b 32 5d 2c 20 74 76 61 6c 5f 62 75 66 5b 31 f[2], tval_buf[1 b9c0: 30 32 34 5d 2c 20 2a 74 76 61 6c 3b 0a 09 75 6e 024], *tval;..un b9d0: 73 69 67 6e 65 64 20 63 68 61 72 20 76 6c 65 6e signed char vlen b9e0: 5f 62 75 66 5b 32 5d 2c 20 76 76 61 6c 5f 62 75 _buf[2], vval_bu b9f0: 66 5b 38 31 39 32 5d 2c 20 2a 76 76 61 6c 3b 0a f[8192], *vval;. ba00: 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a .unsigned char * ba10: 74 6d 70 62 75 66 3b 0a 09 75 6e 73 69 67 6e 65 tmpbuf;..unsigne ba20: 64 20 6c 6f 6e 67 20 74 6d 70 62 75 66 6c 65 6e d long tmpbuflen ba30: 3b 0a 09 73 73 69 7a 65 5f 74 20 74 6c 65 6e 2c ;..ssize_t tlen, ba40: 20 76 6c 65 6e 3b 0a 09 73 73 69 7a 65 5f 74 20 vlen;..ssize_t ba50: 72 65 61 64 5f 72 65 74 3b 0a 09 73 69 7a 65 5f read_ret;..size_ ba60: 74 20 6f 66 66 73 65 74 5f 74 20 3d 20 30 2c 20 t offset_t = 0, ba70: 6f 66 66 73 65 74 5f 76 20 3d 20 30 3b 0a 09 75 offset_v = 0;..u ba80: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 74 61 67 nsigned char tag ba90: 3b 0a 09 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 ;..size_t length baa0: 3b 0a 23 69 66 64 65 66 20 48 41 56 45 5f 4c 49 ;.#ifdef HAVE_LI bab0: 42 5a 0a 09 69 6e 74 20 75 6e 63 6f 6d 70 72 65 BZ..int uncompre bac0: 73 73 5f 72 65 74 3b 0a 23 65 6e 64 69 66 0a 0a ss_ret;.#endif.. bad0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR bae0: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); baf0: 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d 20 63 61 ...read_ret = ca bb00: 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 66 65 72 ckey_read_buffer bb10: 28 73 6c 6f 74 2c 20 74 6c 65 6e 5f 62 75 66 2c (slot, tlen_buf, bb20: 20 73 69 7a 65 6f 66 28 74 6c 65 6e 5f 62 75 66 sizeof(tlen_buf bb30: 29 2c 20 31 2c 20 6f 66 66 73 65 74 5f 74 29 3b ), 1, offset_t); bb40: 0a 09 69 66 20 28 72 65 61 64 5f 72 65 74 20 21 ..if (read_ret ! bb50: 3d 20 73 69 7a 65 6f 66 28 74 6c 65 6e 5f 62 75 = sizeof(tlen_bu bb60: 66 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 f)) {...CACKEY_D bb70: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 61 EBUG_PRINTF("Rea bb80: 64 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e d failed, return bb90: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") bba0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c ;....return(NULL bbb0: 29 3b 0a 09 7d 0a 0a 09 74 6c 65 6e 20 3d 20 28 );..}...tlen = ( bbc0: 74 6c 65 6e 5f 62 75 66 5b 31 5d 20 3c 3c 20 38 tlen_buf[1] << 8 bbd0: 29 20 7c 20 74 6c 65 6e 5f 62 75 66 5b 30 5d 3b ) | tlen_buf[0]; bbe0: 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d 20 63 61 ...read_ret = ca bbf0: 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 66 65 72 ckey_read_buffer bc00: 28 73 6c 6f 74 2c 20 76 6c 65 6e 5f 62 75 66 2c (slot, vlen_buf, bc10: 20 73 69 7a 65 6f 66 28 76 6c 65 6e 5f 62 75 66 sizeof(vlen_buf bc20: 29 2c 20 32 2c 20 6f 66 66 73 65 74 5f 76 29 3b ), 2, offset_v); bc30: 0a 09 69 66 20 28 72 65 61 64 5f 72 65 74 20 21 ..if (read_ret ! bc40: 3d 20 73 69 7a 65 6f 66 28 76 6c 65 6e 5f 62 75 = sizeof(vlen_bu bc50: 66 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 f)) {...CACKEY_D bc60: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 61 EBUG_PRINTF("Rea bc70: 64 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e d failed, return bc80: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") bc90: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c ;....return(NULL bca0: 29 3b 0a 09 7d 0a 0a 09 76 6c 65 6e 20 3d 20 28 );..}...vlen = ( bcb0: 76 6c 65 6e 5f 62 75 66 5b 31 5d 20 3c 3c 20 38 vlen_buf[1] << 8 bcc0: 29 20 7c 20 76 6c 65 6e 5f 62 75 66 5b 30 5d 3b ) | vlen_buf[0]; bcd0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ bce0: 50 52 49 4e 54 46 28 22 54 61 67 20 4c 65 6e 67 PRINTF("Tag Leng bcf0: 74 68 20 3d 20 25 6c 75 2c 20 56 61 6c 75 65 20 th = %lu, Value bd00: 4c 65 6e 67 74 68 20 3d 20 25 6c 75 22 2c 20 28 Length = %lu", ( bd10: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 74 unsigned long) t bd20: 6c 65 6e 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c len, (unsigned l bd30: 6f 6e 67 29 20 76 6c 65 6e 29 3b 0a 0a 09 6f 66 ong) vlen);...of bd40: 66 73 65 74 5f 74 20 2b 3d 20 32 3b 0a 09 6f 66 fset_t += 2;..of bd50: 66 73 65 74 5f 76 20 2b 3d 20 32 3b 0a 0a 09 69 fset_v += 2;...i bd60: 66 20 28 74 6c 65 6e 20 3e 20 73 69 7a 65 6f 66 f (tlen > sizeof bd70: 28 74 76 61 6c 5f 62 75 66 29 29 20 7b 0a 09 09 (tval_buf)) {... bd80: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI bd90: 4e 54 46 28 22 54 61 67 20 6c 65 6e 67 74 68 20 NTF("Tag length bda0: 69 73 20 74 6f 6f 20 6c 61 72 67 65 2c 20 72 65 is too large, re bdb0: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu bdc0: 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 re");....return( bdd0: 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 NULL);..}...if ( bde0: 76 6c 65 6e 20 3e 20 73 69 7a 65 6f 66 28 76 76 vlen > sizeof(vv bdf0: 61 6c 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 43 al_buf)) {...CAC be00: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF be10: 28 22 56 61 6c 75 65 20 6c 65 6e 67 74 68 20 69 ("Value length i be20: 73 20 74 6f 6f 20 6c 61 72 67 65 2c 20 72 65 74 s too large, ret be30: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur be40: 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e e");....return(N be50: 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 72 65 61 64 5f ULL);..}...read_ be60: 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 ret = cackey_rea be70: 64 5f 62 75 66 66 65 72 28 73 6c 6f 74 2c 20 74 d_buffer(slot, t be80: 76 61 6c 5f 62 75 66 2c 20 74 6c 65 6e 2c 20 31 val_buf, tlen, 1 be90: 2c 20 6f 66 66 73 65 74 5f 74 29 3b 0a 09 69 66 , offset_t);..if bea0: 20 28 72 65 61 64 5f 72 65 74 20 21 3d 20 74 6c (read_ret != tl beb0: 65 6e 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 en) {...CACKEY_D bec0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 EBUG_PRINTF("Una bed0: 62 6c 65 20 74 6f 20 72 65 61 64 20 65 6e 74 69 ble to read enti bee0: 72 65 20 54 2d 62 75 66 66 65 72 2c 20 72 65 74 re T-buffer, ret bef0: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur bf00: 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e e");....return(N bf10: 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 72 65 61 64 5f ULL);..}...read_ bf20: 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 ret = cackey_rea bf30: 64 5f 62 75 66 66 65 72 28 73 6c 6f 74 2c 20 76 d_buffer(slot, v bf40: 76 61 6c 5f 62 75 66 2c 20 76 6c 65 6e 2c 20 32 val_buf, vlen, 2 bf50: 2c 20 6f 66 66 73 65 74 5f 76 29 3b 0a 09 69 66 , offset_v);..if bf60: 20 28 72 65 61 64 5f 72 65 74 20 21 3d 20 76 6c (read_ret != vl bf70: 65 6e 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 en) {...CACKEY_D bf80: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 EBUG_PRINTF("Una bf90: 62 6c 65 20 74 6f 20 72 65 61 64 20 65 6e 74 69 ble to read enti bfa0: 72 65 20 56 2d 62 75 66 66 65 72 2c 20 72 65 74 re V-buffer, ret bfb0: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur bfc0: 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e e");....return(N bfd0: 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 74 76 61 6c 20 ULL);..}...tval bfe0: 3d 20 74 76 61 6c 5f 62 75 66 3b 0a 09 76 76 61 = tval_buf;..vva bff0: 6c 20 3d 20 76 76 61 6c 5f 62 75 66 3b 0a 09 77 l = vval_buf;..w c000: 68 69 6c 65 20 28 74 6c 65 6e 20 3e 20 30 20 26 hile (tlen > 0 & c010: 26 20 76 6c 65 6e 20 3e 20 30 29 20 7b 0a 09 09 & vlen > 0) {... c020: 74 61 67 20 3d 20 2a 74 76 61 6c 3b 0a 09 09 74 tag = *tval;...t c030: 76 61 6c 2b 2b 3b 0a 09 09 74 6c 65 6e 2d 2d 3b val++;...tlen--; c040: 0a 0a 09 09 69 66 20 28 2a 74 76 61 6c 20 3d 3d ....if (*tval == c050: 20 30 78 66 66 29 20 7b 0a 09 09 09 6c 65 6e 67 0xff) {....leng c060: 74 68 20 3d 20 28 74 76 61 6c 5b 32 5d 20 3c 3c th = (tval[2] << c070: 20 38 29 20 7c 20 74 76 61 6c 5b 31 5d 3b 0a 09 8) | tval[1];.. c080: 09 09 74 76 61 6c 20 2b 3d 20 33 3b 0a 09 09 09 ..tval += 3;.... c090: 74 6c 65 6e 20 2d 3d 20 33 3b 0a 09 09 7d 20 65 tlen -= 3;...} e c0a0: 6c 73 65 20 7b 0a 09 09 09 6c 65 6e 67 74 68 20 lse {....length c0b0: 3d 20 2a 74 76 61 6c 3b 0a 09 09 09 74 76 61 6c = *tval;....tval c0c0: 2b 2b 3b 0a 09 09 09 74 6c 65 6e 2d 2d 3b 0a 09 ++;....tlen--;.. c0d0: 09 7d 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 .}....CACKEY_DEB c0e0: 55 47 5f 50 52 49 4e 54 46 28 22 54 61 67 3a 20 UG_PRINTF("Tag: c0f0: 25 73 20 28 25 30 32 78 29 22 2c 20 43 41 43 4b %s (%02x)", CACK c100: 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 54 41 EY_DEBUG_FUNC_TA c110: 47 5f 54 4f 5f 53 54 52 28 74 61 67 29 2c 20 28 G_TO_STR(tag), ( c120: 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 74 61 unsigned int) ta c130: 67 29 3b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 g);...CACKEY_DEB c140: 55 47 5f 50 52 49 4e 54 42 55 46 28 22 56 61 6c UG_PRINTBUF("Val c150: 75 65 3a 22 2c 20 76 76 61 6c 2c 20 6c 65 6e 67 ue:", vval, leng c160: 74 68 29 3b 0a 0a 09 09 63 75 72 72 5f 65 6e 74 th);....curr_ent c170: 69 74 79 20 3d 20 4e 55 4c 4c 3b 0a 09 09 73 77 ity = NULL;...sw c180: 69 74 63 68 20 28 74 61 67 29 20 7b 0a 09 09 09 itch (tag) {.... c190: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 case GSCIS_TAG_C c1a0: 41 52 44 55 52 4c 3a 0a 09 09 09 09 63 75 72 72 ARDURL:.....curr c1b0: 5f 65 6e 74 69 74 79 20 3d 20 6d 61 6c 6c 6f 63 _entity = malloc c1c0: 28 73 69 7a 65 6f 66 28 2a 63 75 72 72 5f 65 6e (sizeof(*curr_en c1d0: 74 69 74 79 29 29 3b 0a 09 09 09 09 63 75 72 72 tity));.....curr c1e0: 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 5f 63 _entity->value_c c1f0: 61 72 64 75 72 6c 20 3d 20 6d 61 6c 6c 6f 63 28 ardurl = malloc( c200: 73 69 7a 65 6f 66 28 2a 63 75 72 72 5f 65 6e 74 sizeof(*curr_ent c210: 69 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 ity->value_cardu c220: 72 6c 29 29 3b 0a 0a 09 09 09 09 6d 65 6d 63 70 rl));......memcp c230: 79 28 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 y(curr_entity->v c240: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 72 69 alue_cardurl->ri c250: 64 2c 20 76 76 61 6c 2c 20 35 29 3b 0a 09 09 09 d, vval, 5);.... c260: 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 .curr_entity->va c270: 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 lue_cardurl->app c280: 74 79 70 65 20 3d 20 76 76 61 6c 5b 35 5d 3b 0a type = vval[5];. c290: 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d ....curr_entity- c2a0: 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e >value_cardurl-> c2b0: 6f 62 6a 65 63 74 69 64 20 3d 20 28 76 76 61 6c objectid = (vval c2c0: 5b 36 5d 20 3c 3c 20 38 29 20 7c 20 76 76 61 6c [6] << 8) | vval c2d0: 5b 37 5d 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e [7];.....curr_en c2e0: 74 69 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 tity->value_card c2f0: 75 72 6c 2d 3e 61 70 70 69 64 20 3d 20 28 76 76 url->appid = (vv c300: 61 6c 5b 38 5d 20 3c 3c 20 38 29 20 7c 20 76 76 al[8] << 8) | vv c310: 61 6c 5b 39 5d 3b 0a 0a 09 09 09 09 63 75 72 72 al[9];......curr c320: 5f 65 6e 74 69 74 79 2d 3e 74 61 67 20 3d 20 74 _entity->tag = t c330: 61 67 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 ag;.....curr_ent c340: 69 74 79 2d 3e 5f 6e 65 78 74 20 3d 20 4e 55 4c ity->_next = NUL c350: 4c 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 L;......break;.. c360: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG c370: 5f 41 43 52 5f 54 41 42 4c 45 3a 0a 09 09 09 09 _ACR_TABLE:..... c380: 63 75 72 72 5f 65 6e 74 69 74 79 20 3d 20 6d 61 curr_entity = ma c390: 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 75 72 lloc(sizeof(*cur c3a0: 72 5f 65 6e 74 69 74 79 29 29 3b 0a 09 09 09 09 r_entity));..... c3b0: 74 6d 70 62 75 66 20 3d 20 6d 61 6c 6c 6f 63 28 tmpbuf = malloc( c3c0: 6c 65 6e 67 74 68 29 3b 0a 0a 09 09 09 09 6d 65 length);......me c3d0: 6d 63 70 79 28 74 6d 70 62 75 66 2c 20 76 76 61 mcpy(tmpbuf, vva c3e0: 6c 2c 20 6c 65 6e 67 74 68 29 3b 0a 0a 09 09 09 l, length);..... c3f0: 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 74 61 .curr_entity->ta c400: 67 20 3d 20 74 61 67 3b 0a 09 09 09 09 63 75 72 g = tag;.....cur c410: 72 5f 65 6e 74 69 74 79 2d 3e 6c 65 6e 67 74 68 r_entity->length c420: 20 3d 20 6c 65 6e 67 74 68 3b 0a 09 09 09 09 63 = length;.....c c430: 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 urr_entity->valu c440: 65 20 3d 20 74 6d 70 62 75 66 3b 0a 09 09 09 09 e = tmpbuf;..... c450: 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 5f 6e 65 curr_entity->_ne c460: 78 74 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 09 xt = NULL;...... c470: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 47 break;....case G c480: 53 43 49 53 5f 54 41 47 5f 43 45 52 54 49 46 49 SCIS_TAG_CERTIFI c490: 43 41 54 45 3a 0a 09 09 09 09 63 75 72 72 5f 65 CATE:.....curr_e c4a0: 6e 74 69 74 79 20 3d 20 6d 61 6c 6c 6f 63 28 73 ntity = malloc(s c4b0: 69 7a 65 6f 66 28 2a 63 75 72 72 5f 65 6e 74 69 izeof(*curr_enti c4c0: 74 79 29 29 3b 0a 0a 23 69 66 64 65 66 20 48 41 ty));..#ifdef HA c4d0: 56 45 5f 4c 49 42 5a 0a 09 09 09 09 74 6d 70 62 VE_LIBZ.....tmpb c4e0: 75 66 6c 65 6e 20 3d 20 6c 65 6e 67 74 68 20 2a uflen = length * c4f0: 20 32 3b 0a 09 09 09 09 74 6d 70 62 75 66 20 3d 2;.....tmpbuf = c500: 20 6d 61 6c 6c 6f 63 28 74 6d 70 62 75 66 6c 65 malloc(tmpbufle c510: 6e 29 3b 0a 0a 09 09 09 09 75 6e 63 6f 6d 70 72 n);......uncompr c520: 65 73 73 5f 72 65 74 20 3d 20 75 6e 63 6f 6d 70 ess_ret = uncomp c530: 72 65 73 73 28 74 6d 70 62 75 66 2c 20 26 74 6d ress(tmpbuf, &tm c540: 70 62 75 66 6c 65 6e 2c 20 76 76 61 6c 2c 20 6c pbuflen, vval, l c550: 65 6e 67 74 68 29 3b 0a 09 09 09 09 69 66 20 28 ength);.....if ( c560: 75 6e 63 6f 6d 70 72 65 73 73 5f 72 65 74 20 21 uncompress_ret ! c570: 3d 20 5a 5f 4f 4b 29 20 7b 0a 09 09 09 09 09 43 = Z_OK) {......C c580: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN c590: 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 64 65 TF("Failed to de c5a0: 63 6f 6d 70 72 65 73 73 2c 20 75 6e 63 6f 6d 70 compress, uncomp c5b0: 72 65 73 73 28 29 20 72 65 74 75 72 6e 65 64 20 ress() returned c5c0: 25 69 20 2d 2d 20 72 65 73 6f 72 74 69 6e 67 20 %i -- resorting c5d0: 74 6f 20 64 69 72 65 63 74 20 63 6f 70 79 22 2c to direct copy", c5e0: 20 75 6e 63 6f 6d 70 72 65 73 73 5f 72 65 74 29 uncompress_ret) c5f0: 3b 0a 0a 09 09 09 09 09 74 6d 70 62 75 66 6c 65 ;.......tmpbufle c600: 6e 20 3d 20 6c 65 6e 67 74 68 3b 0a 09 09 09 09 n = length;..... c610: 09 6d 65 6d 63 70 79 28 74 6d 70 62 75 66 2c 20 .memcpy(tmpbuf, c620: 76 76 61 6c 2c 20 6c 65 6e 67 74 68 29 3b 0a 09 vval, length);.. c630: 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 ...}......CACKEY c640: 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 _DEBUG_PRINTBUF( c650: 22 44 65 63 6f 6d 70 72 65 73 73 65 64 20 74 6f "Decompressed to c660: 3a 22 2c 20 74 6d 70 62 75 66 2c 20 74 6d 70 62 :", tmpbuf, tmpb c670: 75 66 6c 65 6e 29 3b 0a 23 65 6c 73 65 0a 09 09 uflen);.#else... c680: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P c690: 52 49 4e 54 46 28 22 4d 69 73 73 69 6e 67 20 5a RINTF("Missing Z c6a0: 4c 49 42 20 53 75 70 70 6f 72 74 2c 20 74 68 69 LIB Support, thi c6b0: 73 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 s certificate is c6c0: 20 6c 69 6b 65 6c 79 20 75 73 65 6c 65 73 73 2e likely useless. c6d0: 2e 2e 22 29 3b 0a 0a 09 09 09 09 74 6d 70 62 75 ..");......tmpbu c6e0: 66 6c 65 6e 20 3d 20 6c 65 6e 67 74 68 3b 0a 09 flen = length;.. c6f0: 09 09 09 6d 65 6d 63 70 79 28 74 6d 70 62 75 66 ...memcpy(tmpbuf c700: 2c 20 76 76 61 6c 2c 20 6c 65 6e 67 74 68 29 3b , vval, length); c710: 0a 23 65 6e 64 69 66 0a 0a 09 09 09 09 63 75 72 .#endif......cur c720: 72 5f 65 6e 74 69 74 79 2d 3e 74 61 67 20 3d 20 r_entity->tag = c730: 74 61 67 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e tag;.....curr_en c740: 74 69 74 79 2d 3e 6c 65 6e 67 74 68 20 3d 20 74 tity->length = t c750: 6d 70 62 75 66 6c 65 6e 3b 0a 09 09 09 09 63 75 mpbuflen;.....cu c760: 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 rr_entity->value c770: 20 3d 20 74 6d 70 62 75 66 3b 0a 09 09 09 09 63 = tmpbuf;.....c c780: 75 72 72 5f 65 6e 74 69 74 79 2d 3e 5f 6e 65 78 urr_entity->_nex c790: 74 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 09 62 t = NULL;......b c7a0: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 47 53 reak;....case GS c7b0: 43 49 53 5f 54 41 47 5f 50 4b 43 53 31 35 3a 0a CIS_TAG_PKCS15:. c7c0: 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 20 ....curr_entity c7d0: 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 = malloc(sizeof( c7e0: 2a 63 75 72 72 5f 65 6e 74 69 74 79 29 29 3b 0a *curr_entity));. c7f0: 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 .....curr_entity c800: 2d 3e 74 61 67 20 3d 20 74 61 67 3b 0a 09 09 09 ->tag = tag;.... c810: 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 .curr_entity->va c820: 6c 75 65 5f 62 79 74 65 20 3d 20 76 76 61 6c 5b lue_byte = vval[ c830: 30 5d 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 0];.....curr_ent c840: 69 74 79 2d 3e 5f 6e 65 78 74 20 3d 20 4e 55 4c ity->_next = NUL c850: 4c 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 L;......break;.. c860: 09 7d 0a 0a 09 09 76 76 61 6c 20 2b 3d 20 6c 65 .}....vval += le c870: 6e 67 74 68 3b 0a 09 09 76 6c 65 6e 20 2d 3d 20 ngth;...vlen -= c880: 6c 65 6e 67 74 68 3b 0a 0a 09 09 69 66 20 28 63 length;....if (c c890: 75 72 72 5f 65 6e 74 69 74 79 20 21 3d 20 4e 55 urr_entity != NU c8a0: 4c 4c 29 20 7b 0a 09 09 09 69 66 20 28 72 6f 6f LL) {....if (roo c8b0: 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 t == NULL) {.... c8c0: 09 72 6f 6f 74 20 3d 20 63 75 72 72 5f 65 6e 74 .root = curr_ent c8d0: 69 74 79 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 ity;....}.....if c8e0: 20 28 6c 61 73 74 20 21 3d 20 4e 55 4c 4c 29 20 (last != NULL) c8f0: 7b 0a 09 09 09 09 6c 61 73 74 2d 3e 5f 6e 65 78 {.....last->_nex c900: 74 20 3d 20 63 75 72 72 5f 65 6e 74 69 74 79 3b t = curr_entity; c910: 0a 09 09 09 7d 0a 0a 09 09 09 6c 61 73 74 20 3d ....}.....last = c920: 20 63 75 72 72 5f 65 6e 74 69 74 79 3b 0a 09 09 curr_entity;... c930: 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 72 6f }..}...return(ro c940: 6f 74 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 ot);.}../*. * SY c950: 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 2e 2e NPOSIS. * .. c960: 2e 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 .. *. * ARGUMENT c970: 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a S. * .... *. c980: 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a * RETURN VALUE. c990: 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a * .... *. * c9a0: 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 2e 2e NOTES. * .. c9b0: 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 .. *. */.static c9c0: 76 6f 69 64 20 63 61 63 6b 65 79 5f 66 72 65 65 void cackey_free c9d0: 5f 63 65 72 74 73 28 73 74 72 75 63 74 20 63 61 _certs(struct ca c9e0: 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 ckey_pcsc_identi c9f0: 74 79 20 2a 73 74 61 72 74 2c 20 73 69 7a 65 5f ty *start, size_ ca00: 74 20 63 6f 75 6e 74 2c 20 69 6e 74 20 66 72 65 t count, int fre ca10: 65 5f 73 74 61 72 74 29 20 7b 0a 09 73 69 7a 65 e_start) {..size ca20: 5f 74 20 69 64 78 3b 0a 0a 09 69 66 20 28 73 74 _t idx;...if (st ca30: 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 art == NULL) {.. ca40: 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 66 6f .return;..}...fo ca50: 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 r (idx = 0; idx ca60: 3c 20 63 6f 75 6e 74 3b 20 69 64 78 2b 2b 29 20 < count; idx++) ca70: 7b 0a 09 09 69 66 20 28 73 74 61 72 74 5b 69 64 {...if (start[id ca80: 78 5d 2e 63 65 72 74 69 66 69 63 61 74 65 29 20 x].certificate) ca90: 7b 0a 09 09 09 66 72 65 65 28 73 74 61 72 74 5b {....free(start[ caa0: 69 64 78 5d 2e 63 65 72 74 69 66 69 63 61 74 65 idx].certificate cab0: 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 );...}..}...if ( cac0: 66 72 65 65 5f 73 74 61 72 74 29 20 7b 0a 09 09 free_start) {... cad0: 66 72 65 65 28 73 74 61 72 74 29 3b 0a 09 7d 0a free(start);..}. cae0: 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a ..return;.}../*. caf0: 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 * SYNPOSIS. * cb00: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 .... *. * ARG cb10: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 2e 2e UMENTS. * .. cb20: 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 .. *. * RETURN V cb30: 41 4c 55 45 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a ALUE. * .... cb40: 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 *. * NOTES. * cb50: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 .... *. */.st cb60: 61 74 69 63 20 73 74 72 75 63 74 20 63 61 63 6b atic struct cack cb70: 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 ey_pcsc_identity cb80: 20 2a 63 61 63 6b 65 79 5f 72 65 61 64 5f 63 65 *cackey_read_ce cb90: 72 74 73 28 73 74 72 75 63 74 20 63 61 63 6b 65 rts(struct cacke cba0: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 73 74 y_slot *slot, st cbb0: 72 75 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 ruct cackey_pcsc cbc0: 5f 69 64 65 6e 74 69 74 79 20 2a 63 65 72 74 73 _identity *certs cbd0: 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 , unsigned long cbe0: 2a 63 6f 75 6e 74 29 20 7b 0a 09 73 74 72 75 63 *count) {..struc cbf0: 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 t cackey_pcsc_id cc00: 65 6e 74 69 74 79 20 2a 63 75 72 72 5f 69 64 3b entity *curr_id; cc10: 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f ..struct cackey_ cc20: 74 6c 76 5f 65 6e 74 69 74 79 20 2a 63 63 63 5f tlv_entity *ccc_ cc30: 74 6c 76 2c 20 2a 63 63 63 5f 63 75 72 72 2c 20 tlv, *ccc_curr, cc40: 2a 61 70 70 5f 74 6c 76 2c 20 2a 61 70 70 5f 63 *app_tlv, *app_c cc50: 75 72 72 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 urr;..unsigned c cc60: 68 61 72 20 63 63 63 5f 61 69 64 5b 5d 20 3d 20 har ccc_aid[] = cc70: 7b 47 53 43 49 53 5f 41 49 44 5f 43 43 43 7d 3b {GSCIS_AID_CCC}; cc80: 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 ..unsigned char cc90: 63 75 72 72 5f 61 69 64 5b 37 5d 3b 0a 09 75 6e curr_aid[7];..un cca0: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6f 75 74 69 signed long outi ccb0: 64 78 20 3d 20 30 3b 0a 09 63 61 63 6b 65 79 5f dx = 0;..cackey_ ccc0: 72 65 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 5f ret transaction_ ccd0: 72 65 74 3b 0a 09 69 6e 74 20 63 65 72 74 73 5f ret;..int certs_ cce0: 72 65 73 69 7a 61 62 6c 65 3b 0a 09 69 6e 74 20 resizable;..int ccf0: 73 65 6e 64 5f 72 65 74 2c 20 73 65 6c 65 63 74 send_ret, select cd00: 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 _ret;...CACKEY_D cd10: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal cd20: 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 63 6f led.");...if (co cd30: 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 unt == NULL) {.. cd40: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR cd50: 49 4e 54 46 28 22 63 6f 75 6e 74 20 69 73 20 4e INTF("count is N cd60: 55 4c 4c 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 ULL, returning i cd70: 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 n failure");.... cd80: 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d return(NULL);..} cd90: 0a 0a 09 69 66 20 28 63 65 72 74 73 20 21 3d 20 ...if (certs != cda0: 4e 55 4c 4c 29 20 7b 0a 09 09 69 66 20 28 2a 63 NULL) {...if (*c cdb0: 6f 75 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 09 09 ount == 0) {.... cdc0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI cdd0: 4e 54 46 28 22 52 65 71 75 65 73 74 65 64 20 77 NTF("Requested w cde0: 65 20 72 65 74 75 72 6e 20 30 20 6f 62 6a 65 63 e return 0 objec cdf0: 74 73 2c 20 73 68 6f 72 74 2d 63 69 72 63 75 69 ts, short-circui ce00: 74 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 t");.....return( ce10: 63 65 72 74 73 29 3b 0a 09 09 7d 0a 09 7d 0a 0a certs);...}..}.. ce20: 09 2f 2a 20 42 65 67 69 6e 20 61 20 53 6d 61 72 ./* Begin a Smar ce30: 74 43 61 72 64 20 74 72 61 6e 73 61 63 74 69 6f tCard transactio ce40: 6e 20 2a 2f 0a 09 74 72 61 6e 73 61 63 74 69 6f n */..transactio ce50: 6e 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 62 n_ret = cackey_b ce60: 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e egin_transaction ce70: 28 73 6c 6f 74 29 3b 0a 09 69 66 20 28 74 72 61 (slot);..if (tra ce80: 6e 73 61 63 74 69 6f 6e 5f 72 65 74 20 21 3d 20 nsaction_ret != ce90: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK cea0: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB ceb0: 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 6c UG_PRINTF("Unabl cec0: 65 20 62 65 67 69 6e 20 74 72 61 6e 73 61 63 74 e begin transact ced0: 69 6f 6e 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 ion, returning i cee0: 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 n failure");.... cef0: 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d return(NULL);..} cf00: 0a 0a 09 69 66 20 28 63 65 72 74 73 20 3d 3d 20 ...if (certs == cf10: 4e 55 4c 4c 29 20 7b 0a 09 09 63 65 72 74 73 20 NULL) {...certs cf20: 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 = malloc(sizeof( cf30: 2a 63 65 72 74 73 29 20 2a 20 35 29 3b 0a 09 09 *certs) * 5);... cf40: 2a 63 6f 75 6e 74 20 3d 20 35 3b 0a 09 09 63 65 *count = 5;...ce cf50: 72 74 73 5f 72 65 73 69 7a 61 62 6c 65 20 3d 20 rts_resizable = cf60: 31 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 63 1;..} else {...c cf70: 65 72 74 73 5f 72 65 73 69 7a 61 62 6c 65 20 3d erts_resizable = cf80: 20 30 3b 0a 09 7d 0a 0a 09 2f 2a 20 53 65 6c 65 0;..}.../* Sele cf90: 63 74 20 74 68 65 20 43 43 43 20 41 70 70 6c 65 ct the CCC Apple cfa0: 74 20 2a 2f 0a 09 73 65 6e 64 5f 72 65 74 20 3d t */..send_ret = cfb0: 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 cackey_select_a cfc0: 70 70 6c 65 74 28 73 6c 6f 74 2c 20 63 63 63 5f pplet(slot, ccc_ cfd0: 61 69 64 2c 20 73 69 7a 65 6f 66 28 63 63 63 5f aid, sizeof(ccc_ cfe0: 61 69 64 29 29 3b 0a 09 69 66 20 28 73 65 6e 64 aid));..if (send cff0: 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 _ret != CACKEY_P d000: 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 41 CSC_S_OK) {...CA d010: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT d020: 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 73 65 6c F("Unable to sel d030: 65 63 74 20 43 43 43 20 41 70 70 6c 65 74 2c 20 ect CCC Applet, d040: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai d050: 6c 75 72 65 22 29 3b 0a 0a 09 09 2f 2a 20 54 65 lure");..../* Te d060: 72 6d 69 6e 61 74 65 20 53 6d 61 72 74 43 61 72 rminate SmartCar d070: 64 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f d Transaction */ d080: 0a 09 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 ...cackey_end_tr d090: 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b ansaction(slot); d0a0: 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 ....return(NULL) d0b0: 3b 0a 09 7d 0a 0a 09 2f 2a 20 52 65 61 64 20 61 ;..}.../* Read a d0c0: 6c 6c 20 74 68 65 20 61 70 70 6c 65 74 73 20 66 ll the applets f d0d0: 72 6f 6d 20 74 68 65 20 43 43 43 27 73 20 54 4c rom the CCC's TL d0e0: 56 20 2a 2f 0a 09 63 63 63 5f 74 6c 76 20 3d 20 V */..ccc_tlv = d0f0: 63 61 63 6b 65 79 5f 72 65 61 64 5f 74 6c 76 28 cackey_read_tlv( d100: 73 6c 6f 74 29 3b 0a 0a 09 2f 2a 20 4c 6f 6f 6b slot);.../* Look d110: 20 66 6f 72 20 43 41 52 44 55 52 4c 73 20 74 68 for CARDURLs th d120: 61 74 20 63 6f 6f 72 65 73 70 6f 6e 64 20 74 6f at coorespond to d130: 20 50 4b 49 20 61 70 70 6c 65 74 73 20 2a 2f 0a PKI applets */. d140: 09 66 6f 72 20 28 63 63 63 5f 63 75 72 72 20 3d .for (ccc_curr = d150: 20 63 63 63 5f 74 6c 76 3b 20 63 63 63 5f 63 75 ccc_tlv; ccc_cu d160: 72 72 3b 20 63 63 63 5f 63 75 72 72 20 3d 20 63 rr; ccc_curr = c d170: 63 63 5f 63 75 72 72 2d 3e 5f 6e 65 78 74 29 20 cc_curr->_next) d180: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG d190: 5f 50 52 49 4e 54 46 28 22 46 6f 75 6e 64 20 74 _PRINTF("Found t d1a0: 61 67 3a 20 25 73 20 2e 2e 2e 20 22 2c 20 43 41 ag: %s ... ", CA d1b0: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ d1c0: 54 41 47 5f 54 4f 5f 53 54 52 28 63 63 63 5f 63 TAG_TO_STR(ccc_c d1d0: 75 72 72 2d 3e 74 61 67 29 29 3b 0a 0a 09 09 69 urr->tag));....i d1e0: 66 20 28 63 63 63 5f 63 75 72 72 2d 3e 74 61 67 f (ccc_curr->tag d1f0: 20 21 3d 20 47 53 43 49 53 5f 54 41 47 5f 43 41 != GSCIS_TAG_CA d200: 52 44 55 52 4c 29 20 7b 0a 09 09 09 43 41 43 4b RDURL) {....CACK d210: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( d220: 22 20 20 2e 2e 2e 20 73 6b 69 70 70 69 6e 67 20 " ... skipping d230: 69 74 20 28 77 65 20 6f 6e 6c 79 20 63 61 72 65 it (we only care d240: 20 61 62 6f 75 74 20 43 41 52 44 55 52 4c 73 29 about CARDURLs) d250: 22 29 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 65 ");.....continue d260: 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 28 63 63 ;...}....if ((cc d270: 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 c_curr->value_ca d280: 72 64 75 72 6c 2d 3e 61 70 70 74 79 70 65 20 26 rdurl->apptype & d290: 20 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f CACKEY_TLV_APP_ d2a0: 50 4b 49 29 20 21 3d 20 43 41 43 4b 45 59 5f 54 PKI) != CACKEY_T d2b0: 4c 56 5f 41 50 50 5f 50 4b 49 29 20 7b 0a 09 09 LV_APP_PKI) {... d2c0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR d2d0: 49 4e 54 46 28 22 20 20 2e 2e 2e 20 73 6b 69 70 INTF(" ... skip d2e0: 70 69 6e 67 20 69 74 20 28 77 65 20 6f 6e 6c 79 ping it (we only d2f0: 20 63 61 72 65 20 61 62 6f 75 74 20 50 4b 49 20 care about PKI d300: 61 70 70 6c 65 74 73 2c 20 74 68 69 73 20 61 70 applets, this ap d310: 70 6c 65 74 20 73 75 70 70 6f 72 74 73 3a 20 25 plet supports: % d320: 73 2f 25 30 32 78 29 22 2c 20 43 41 43 4b 45 59 s/%02x)", CACKEY d330: 5f 44 45 42 55 47 5f 46 55 4e 43 5f 41 50 50 54 _DEBUG_FUNC_APPT d340: 59 50 45 5f 54 4f 5f 53 54 52 28 63 63 63 5f 63 YPE_TO_STR(ccc_c d350: 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 urr->value_cardu d360: 72 6c 2d 3e 61 70 70 74 79 70 65 29 2c 20 28 75 rl->apptype), (u d370: 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 63 63 63 nsigned int) ccc d380: 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 _curr->value_car d390: 64 75 72 6c 2d 3e 61 70 70 74 79 70 65 29 3b 0a durl->apptype);. d3a0: 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 ....continue;... d3b0: 7d 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 }....CACKEY_DEBU d3c0: 47 5f 50 52 49 4e 54 42 55 46 28 22 52 49 44 3a G_PRINTBUF("RID: d3d0: 22 2c 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c ", ccc_curr->val d3e0: 75 65 5f 63 61 72 64 75 72 6c 2d 3e 72 69 64 2c ue_cardurl->rid, d3f0: 20 73 69 7a 65 6f 66 28 63 63 63 5f 63 75 72 72 sizeof(ccc_curr d400: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d ->value_cardurl- d410: 3e 72 69 64 29 29 3b 0a 09 09 43 41 43 4b 45 59 >rid));...CACKEY d420: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 41 _DEBUG_PRINTF("A d430: 70 70 49 44 20 3d 20 25 73 2f 25 30 34 6c 78 22 ppID = %s/%04lx" d440: 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F d450: 55 4e 43 5f 4f 42 4a 49 44 5f 54 4f 5f 53 54 52 UNC_OBJID_TO_STR d460: 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 (ccc_curr->value d470: 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 69 64 29 _cardurl->appid) d480: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long d490: 29 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 ) ccc_curr->valu d4a0: 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 69 64 e_cardurl->appid d4b0: 29 3b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 );...CACKEY_DEBU d4c0: 47 5f 50 52 49 4e 54 46 28 22 4f 62 6a 65 63 74 G_PRINTF("Object d4d0: 49 44 20 3d 20 25 73 2f 25 30 34 6c 78 22 2c 20 ID = %s/%04lx", d4e0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN d4f0: 43 5f 4f 42 4a 49 44 5f 54 4f 5f 53 54 52 28 63 C_OBJID_TO_STR(c d500: 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 cc_curr->value_c d510: 61 72 64 75 72 6c 2d 3e 6f 62 6a 65 63 74 69 64 ardurl->objectid d520: 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ), (unsigned lon d530: 67 29 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c g) ccc_curr->val d540: 75 65 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 6a 65 ue_cardurl->obje d550: 63 74 69 64 29 3b 0a 0a 09 09 6d 65 6d 63 70 79 ctid);....memcpy d560: 28 63 75 72 72 5f 61 69 64 2c 20 63 63 63 5f 63 (curr_aid, ccc_c d570: 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 urr->value_cardu d580: 72 6c 2d 3e 72 69 64 2c 20 73 69 7a 65 6f 66 28 rl->rid, sizeof( d590: 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f ccc_curr->value_ d5a0: 63 61 72 64 75 72 6c 2d 3e 72 69 64 29 29 3b 0a cardurl->rid));. d5b0: 09 09 63 75 72 72 5f 61 69 64 5b 73 69 7a 65 6f ..curr_aid[sizeo d5c0: 66 28 63 75 72 72 5f 61 69 64 29 20 2d 20 32 5d f(curr_aid) - 2] d5d0: 20 3d 20 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 = (ccc_curr->va d5e0: 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 lue_cardurl->app d5f0: 69 64 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b id >> 8) & 0xff; d600: 0a 09 09 63 75 72 72 5f 61 69 64 5b 73 69 7a 65 ...curr_aid[size d610: 6f 66 28 63 75 72 72 5f 61 69 64 29 20 2d 20 31 of(curr_aid) - 1 d620: 5d 20 3d 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 ] = ccc_curr->va d630: 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 lue_cardurl->app d640: 69 64 20 26 20 30 78 66 66 3b 0a 0a 09 09 2f 2a id & 0xff;..../* d650: 20 53 65 6c 65 63 74 20 66 6f 75 6e 64 20 61 70 Select found ap d660: 70 6c 65 74 20 2e 2e 2e 20 2a 2f 0a 09 09 73 65 plet ... */...se d670: 6c 65 63 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 lect_ret = cacke d680: 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c 65 74 28 y_select_applet( d690: 73 6c 6f 74 2c 20 63 75 72 72 5f 61 69 64 2c 20 slot, curr_aid, d6a0: 73 69 7a 65 6f 66 28 63 75 72 72 5f 61 69 64 29 sizeof(curr_aid) d6b0: 29 3b 0a 09 09 69 66 20 28 73 65 6c 65 63 74 5f );...if (select_ d6c0: 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 ret != CACKEY_PC d6d0: 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 09 43 41 SC_S_OK) {....CA d6e0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT d6f0: 46 28 22 46 61 69 6c 65 64 20 74 6f 20 73 65 6c F("Failed to sel d700: 65 63 74 20 61 70 70 6c 65 74 2c 20 73 6b 69 70 ect applet, skip d710: 70 69 6e 67 20 70 72 6f 63 65 73 73 69 6e 67 20 ping processing d720: 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 22 29 of this object") d730: 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a ;.....continue;. d740: 09 09 7d 0a 0a 09 09 2f 2a 20 2e 2e 2e 20 61 6e ..}..../* ... an d750: 64 20 6f 62 6a 65 63 74 20 28 66 69 6c 65 29 20 d object (file) d760: 2a 2f 0a 09 09 73 65 6c 65 63 74 5f 72 65 74 20 */...select_ret d770: 3d 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f = cackey_select_ d780: 66 69 6c 65 28 73 6c 6f 74 2c 20 63 63 63 5f 63 file(slot, ccc_c d790: 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 urr->value_cardu d7a0: 72 6c 2d 3e 6f 62 6a 65 63 74 69 64 29 3b 0a 09 rl->objectid);.. d7b0: 09 69 66 20 28 73 65 6c 65 63 74 5f 72 65 74 20 .if (select_ret d7c0: 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 != CACKEY_PCSC_S d7d0: 5f 4f 4b 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 _OK) {....CACKEY d7e0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 _DEBUG_PRINTF("F d7f0: 61 69 6c 65 64 20 74 6f 20 73 65 6c 65 63 74 20 ailed to select d800: 66 69 6c 65 2c 20 73 6b 69 70 70 69 6e 67 20 70 file, skipping p d810: 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 74 68 69 rocessing of thi d820: 73 20 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 s object");..... d830: 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 continue;...}... d840: 09 2f 2a 20 50 72 6f 63 65 73 73 20 74 68 69 73 ./* Process this d850: 20 66 69 6c 65 27 73 20 54 4c 56 20 6c 6f 6f 6b file's TLV look d860: 69 6e 67 20 66 6f 72 20 63 65 72 74 69 66 69 63 ing for certific d870: 61 74 65 73 20 2a 2f 0a 09 09 61 70 70 5f 74 6c ates */...app_tl d880: 76 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f v = cackey_read_ d890: 74 6c 76 28 73 6c 6f 74 29 3b 0a 0a 09 09 66 6f tlv(slot);....fo d8a0: 72 20 28 61 70 70 5f 63 75 72 72 20 3d 20 61 70 r (app_curr = ap d8b0: 70 5f 74 6c 76 3b 20 61 70 70 5f 63 75 72 72 3b p_tlv; app_curr; d8c0: 20 61 70 70 5f 63 75 72 72 20 3d 20 61 70 70 5f app_curr = app_ d8d0: 63 75 72 72 2d 3e 5f 6e 65 78 74 29 20 7b 0a 09 curr->_next) {.. d8e0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P d8f0: 52 49 4e 54 46 28 22 46 6f 75 6e 64 20 74 61 67 RINTF("Found tag d900: 3a 20 25 73 22 2c 20 43 41 43 4b 45 59 5f 44 45 : %s", CACKEY_DE d910: 42 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54 4f 5f BUG_FUNC_TAG_TO_ d920: 53 54 52 28 61 70 70 5f 63 75 72 72 2d 3e 74 61 STR(app_curr->ta d930: 67 29 29 3b 0a 09 09 09 69 66 20 28 61 70 70 5f g));....if (app_ d940: 63 75 72 72 2d 3e 74 61 67 20 21 3d 20 47 53 43 curr->tag != GSC d950: 49 53 5f 54 41 47 5f 43 45 52 54 49 46 49 43 41 IS_TAG_CERTIFICA d960: 54 45 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 TE) {.....CACKEY d970: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" d980: 20 2e 2e 2e 20 73 6b 69 70 70 69 6e 67 20 69 74 ... skipping it d990: 20 28 77 65 20 6f 6e 6c 79 20 63 61 72 65 20 61 (we only care a d9a0: 62 6f 75 74 20 43 45 52 54 49 46 49 43 41 54 45 bout CERTIFICATE d9b0: 73 29 22 29 3b 0a 0a 09 09 09 09 63 6f 6e 74 69 s)");......conti d9c0: 6e 75 65 3b 0a 09 09 09 7d 0a 0a 09 09 09 63 75 nue;....}.....cu d9d0: 72 72 5f 69 64 20 3d 20 26 63 65 72 74 73 5b 6f rr_id = &certs[o d9e0: 75 74 69 64 78 5d 3b 0a 09 09 09 6f 75 74 69 64 utidx];....outid d9f0: 78 2b 2b 3b 0a 0a 09 09 09 6d 65 6d 63 70 79 28 x++;.....memcpy( da00: 63 75 72 72 5f 69 64 2d 3e 61 70 70 6c 65 74 2c curr_id->applet, da10: 20 63 75 72 72 5f 61 69 64 2c 20 73 69 7a 65 6f curr_aid, sizeo da20: 66 28 63 75 72 72 5f 69 64 2d 3e 61 70 70 6c 65 f(curr_id->apple da30: 74 29 29 3b 0a 09 09 09 63 75 72 72 5f 69 64 2d t));....curr_id- da40: 3e 66 69 6c 65 20 3d 20 63 63 63 5f 63 75 72 72 >file = ccc_curr da50: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d ->value_cardurl- da60: 3e 6f 62 6a 65 63 74 69 64 3b 0a 09 09 09 63 75 >objectid;....cu da70: 72 72 5f 69 64 2d 3e 6b 65 79 73 69 7a 65 20 3d rr_id->keysize = da80: 20 2d 31 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f -1;.....CACKEY_ da90: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 69 DEBUG_PRINTF("Fi daa0: 6c 6c 69 6e 67 20 63 75 72 72 5f 69 64 2d 3e 61 lling curr_id->a dab0: 70 70 6c 65 74 20 28 25 70 29 20 77 69 74 68 20 pplet (%p) with dac0: 25 6c 75 20 62 79 74 65 73 3a 22 2c 20 63 75 72 %lu bytes:", cur dad0: 72 5f 69 64 2d 3e 61 70 70 6c 65 74 2c 20 28 75 r_id->applet, (u dae0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 69 nsigned long) si daf0: 7a 65 6f 66 28 63 75 72 72 5f 69 64 2d 3e 61 70 zeof(curr_id->ap db00: 70 6c 65 74 29 29 3b 0a 09 09 09 43 41 43 4b 45 plet));....CACKE db10: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 Y_DEBUG_PRINTBUF db20: 28 22 56 41 4c 3a 22 2c 20 63 75 72 72 5f 69 64 ("VAL:", curr_id db30: 2d 3e 61 70 70 6c 65 74 2c 20 73 69 7a 65 6f 66 ->applet, sizeof db40: 28 63 75 72 72 5f 69 64 2d 3e 61 70 70 6c 65 74 (curr_id->applet db50: 29 29 3b 0a 0a 09 09 09 63 75 72 72 5f 69 64 2d ));.....curr_id- db60: 3e 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e >certificate_len db70: 20 3d 20 61 70 70 5f 63 75 72 72 2d 3e 6c 65 6e = app_curr->len db80: 67 74 68 3b 0a 0a 09 09 09 63 75 72 72 5f 69 64 gth;.....curr_id db90: 2d 3e 63 65 72 74 69 66 69 63 61 74 65 20 3d 20 ->certificate = dba0: 6d 61 6c 6c 6f 63 28 63 75 72 72 5f 69 64 2d 3e malloc(curr_id-> dbb0: 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 29 certificate_len) dbc0: 3b 0a 09 09 09 6d 65 6d 63 70 79 28 63 75 72 72 ;....memcpy(curr dbd0: 5f 69 64 2d 3e 63 65 72 74 69 66 69 63 61 74 65 _id->certificate dbe0: 2c 20 61 70 70 5f 63 75 72 72 2d 3e 76 61 6c 75 , app_curr->valu dbf0: 65 2c 20 63 75 72 72 5f 69 64 2d 3e 63 65 72 74 e, curr_id->cert dc00: 69 66 69 63 61 74 65 5f 6c 65 6e 29 3b 0a 0a 09 ificate_len);... dc10: 09 09 69 66 20 28 6f 75 74 69 64 78 20 3e 3d 20 ..if (outidx >= dc20: 2a 63 6f 75 6e 74 29 20 7b 0a 09 09 09 09 69 66 *count) {.....if dc30: 20 28 63 65 72 74 73 5f 72 65 73 69 7a 61 62 6c (certs_resizabl dc40: 65 29 20 7b 0a 09 09 09 09 09 2a 63 6f 75 6e 74 e) {......*count dc50: 20 2a 3d 20 32 3b 0a 09 09 09 09 09 63 65 72 74 *= 2;......cert dc60: 73 20 3d 20 72 65 61 6c 6c 6f 63 28 63 65 72 74 s = realloc(cert dc70: 73 2c 20 73 69 7a 65 6f 66 28 2a 63 65 72 74 73 s, sizeof(*certs dc80: 29 20 2a 20 28 2a 63 6f 75 6e 74 29 29 3b 0a 09 ) * (*count));.. dc90: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 ...} else {..... dca0: 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 09 09 .break;.....}... dcb0: 09 7d 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 .}...}....cackey dcc0: 5f 66 72 65 65 5f 74 6c 76 28 61 70 70 5f 74 6c _free_tlv(app_tl dcd0: 76 29 3b 0a 0a 09 09 69 66 20 28 6f 75 74 69 64 v);....if (outid dce0: 78 20 3e 3d 20 2a 63 6f 75 6e 74 29 20 7b 0a 09 x >= *count) {.. dcf0: 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 09 7d 0a ..break;...}..}. dd00: 0a 09 63 61 63 6b 65 79 5f 66 72 65 65 5f 74 6c ..cackey_free_tl dd10: 76 28 63 63 63 5f 74 6c 76 29 3b 0a 0a 09 2a 63 v(ccc_tlv);...*c dd20: 6f 75 6e 74 20 3d 20 6f 75 74 69 64 78 3b 0a 0a ount = outidx;.. dd30: 09 69 66 20 28 63 65 72 74 73 5f 72 65 73 69 7a .if (certs_resiz dd40: 61 62 6c 65 29 20 7b 0a 09 09 63 65 72 74 73 20 able) {...certs dd50: 3d 20 72 65 61 6c 6c 6f 63 28 63 65 72 74 73 2c = realloc(certs, dd60: 20 73 69 7a 65 6f 66 28 2a 63 65 72 74 73 29 20 sizeof(*certs) dd70: 2a 20 28 2a 63 6f 75 6e 74 29 29 3b 0a 09 7d 0a * (*count));..}. dd80: 0a 09 2f 2a 20 54 65 72 6d 69 6e 61 74 65 20 53 ../* Terminate S dd90: 6d 61 72 74 43 61 72 64 20 54 72 61 6e 73 61 63 martCard Transac dda0: 74 69 6f 6e 20 2a 2f 0a 09 63 61 63 6b 65 79 5f tion */..cackey_ ddb0: 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 end_transaction( ddc0: 73 6c 6f 74 29 3b 0a 0a 09 72 65 74 75 72 6e 28 slot);...return( ddd0: 63 65 72 74 73 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a certs);.}../*. * dde0: 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 SYNPOSIS. * ddf0: 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 55 4d .... *. * ARGUM de00: 45 4e 54 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a ENTS. * .... de10: 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c *. * RETURN VAL de20: 55 45 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a UE. * .... * de30: 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 . * NOTES. * de40: 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 .... *. */.stat de50: 69 63 20 73 73 69 7a 65 5f 74 20 63 61 63 6b 65 ic ssize_t cacke de60: 79 5f 73 69 67 6e 64 65 63 72 79 70 74 28 73 74 y_signdecrypt(st de70: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ruct cackey_slot de80: 20 2a 73 6c 6f 74 2c 20 73 74 72 75 63 74 20 63 *slot, struct c de90: 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 2a ackey_identity * dea0: 69 64 65 6e 74 69 74 79 2c 20 75 6e 73 69 67 6e identity, unsign deb0: 65 64 20 63 68 61 72 20 2a 62 75 66 2c 20 73 69 ed char *buf, si dec0: 7a 65 5f 74 20 62 75 66 6c 65 6e 2c 20 75 6e 73 ze_t buflen, uns ded0: 69 67 6e 65 64 20 63 68 61 72 20 2a 6f 75 74 62 igned char *outb dee0: 75 66 2c 20 73 69 7a 65 5f 74 20 6f 75 74 62 75 uf, size_t outbu def0: 66 6c 65 6e 2c 20 69 6e 74 20 70 61 64 49 6e 70 flen, int padInp df00: 75 74 2c 20 69 6e 74 20 75 6e 70 61 64 4f 75 74 ut, int unpadOut df10: 70 75 74 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 put) {..unsigned df20: 20 63 68 61 72 20 2a 74 6d 70 62 75 66 2c 20 2a char *tmpbuf, * df30: 74 6d 70 62 75 66 5f 73 2c 20 2a 6f 75 74 62 75 tmpbuf_s, *outbu df40: 66 5f 73 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 f_s;..unsigned c df50: 68 61 72 20 62 79 74 65 73 5f 74 6f 5f 73 65 6e har bytes_to_sen df60: 64 2c 20 70 31 3b 0a 09 75 6e 73 69 67 6e 65 64 d, p1;..unsigned df70: 20 63 68 61 72 20 62 6c 6f 63 6b 74 79 70 65 3b char blocktype; df80: 0a 09 63 61 63 6b 65 79 5f 72 65 74 20 73 65 6e ..cackey_ret sen df90: 64 5f 72 65 74 3b 0a 09 75 69 6e 74 31 36 5f 74 d_ret;..uint16_t dfa0: 20 72 65 73 70 63 6f 64 65 3b 0a 09 73 73 69 7a respcode;..ssiz dfb0: 65 5f 74 20 72 65 74 76 61 6c 20 3d 20 30 2c 20 e_t retval = 0, dfc0: 75 6e 70 61 64 6f 66 66 73 65 74 3b 0a 09 73 69 unpadoffset;..si dfd0: 7a 65 5f 74 20 74 6d 70 62 75 66 6c 65 6e 2c 20 ze_t tmpbuflen, dfe0: 70 61 64 6c 65 6e 2c 20 74 6d 70 6f 75 74 62 75 padlen, tmpoutbu dff0: 66 6c 65 6e 3b 0a 09 69 6e 74 20 66 72 65 65 5f flen;..int free_ e000: 74 6d 70 62 75 66 20 3d 20 30 3b 0a 09 69 6e 74 tmpbuf = 0;..int e010: 20 6c 65 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 le;...CACKEY_DE e020: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call e030: 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 73 6c 6f ed.");...if (slo e040: 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 t == NULL) {...C e050: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN e060: 54 46 28 22 45 72 72 6f 72 2e 20 20 73 6c 6f 74 TF("Error. slot e070: 20 69 73 20 4e 55 4c 4c 22 29 3b 0a 0a 09 09 72 is NULL");....r e080: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 eturn(-1);..}... e090: 69 66 20 28 62 75 66 20 3d 3d 20 4e 55 4c 4c 29 if (buf == NULL) e0a0: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU e0b0: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. e0c0: 20 20 62 75 66 20 69 73 20 4e 55 4c 4c 22 29 3b buf is NULL"); e0d0: 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. e0e0: 09 7d 0a 0a 09 69 66 20 28 6f 75 74 62 75 66 20 .}...if (outbuf e0f0: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC e100: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF e110: 28 22 45 72 72 6f 72 2e 20 20 6f 75 74 62 75 66 ("Error. outbuf e120: 20 69 73 20 4e 55 4c 4c 22 29 3b 0a 0a 09 09 72 is NULL");....r e130: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 eturn(-1);..}... e140: 69 66 20 28 69 64 65 6e 74 69 74 79 20 3d 3d 20 if (identity == e150: 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY e160: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E e170: 72 72 6f 72 2e 20 20 69 64 65 6e 74 69 74 79 20 rror. identity e180: 69 73 20 4e 55 4c 4c 22 29 3b 0a 0a 09 09 72 65 is NULL");....re e190: 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 69 turn(-1);..}...i e1a0: 66 20 28 69 64 65 6e 74 69 74 79 2d 3e 70 63 73 f (identity->pcs e1b0: 63 5f 69 64 65 6e 74 69 74 79 20 3d 3d 20 4e 55 c_identity == NU e1c0: 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D e1d0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err e1e0: 6f 72 2e 20 20 69 64 65 6e 74 69 74 79 2d 3e 70 or. identity->p e1f0: 63 73 63 5f 69 64 65 6e 74 69 74 79 20 69 73 20 csc_identity is e200: 4e 55 4c 4c 22 29 3b 0a 0a 09 09 72 65 74 75 72 NULL");....retur e210: 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 44 n(-1);..}.../* D e220: 65 74 65 72 6d 69 6e 65 20 69 64 65 6e 74 69 74 etermine identit e230: 79 20 4b 65 79 20 73 69 7a 65 20 2a 2f 0a 09 69 y Key size */..i e240: 66 20 28 69 64 65 6e 74 69 74 79 2d 3e 70 63 73 f (identity->pcs e250: 63 5f 69 64 65 6e 74 69 74 79 2d 3e 6b 65 79 73 c_identity->keys e260: 69 7a 65 20 3c 20 30 29 20 7b 0a 09 09 69 64 65 ize < 0) {...ide e270: 6e 74 69 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e ntity->pcsc_iden e280: 74 69 74 79 2d 3e 6b 65 79 73 69 7a 65 20 3d 20 tity->keysize = e290: 78 35 30 39 5f 74 6f 5f 6b 65 79 73 69 7a 65 28 x509_to_keysize( e2a0: 69 64 65 6e 74 69 74 79 2d 3e 70 63 73 63 5f 69 identity->pcsc_i e2b0: 64 65 6e 74 69 74 79 2d 3e 63 65 72 74 69 66 69 dentity->certifi e2c0: 63 61 74 65 2c 20 69 64 65 6e 74 69 74 79 2d 3e cate, identity-> e2d0: 70 63 73 63 5f 69 64 65 6e 74 69 74 79 2d 3e 63 pcsc_identity->c e2e0: 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 29 3b ertificate_len); e2f0: 0a 09 7d 0a 0a 09 2f 2a 20 50 61 64 20 6d 65 73 ..}.../* Pad mes e300: 73 61 67 65 20 74 6f 20 6b 65 79 20 73 69 7a 65 sage to key size e310: 20 2a 2f 0a 09 69 66 20 28 70 61 64 49 6e 70 75 */..if (padInpu e320: 74 29 20 7b 0a 09 09 69 66 20 28 69 64 65 6e 74 t) {...if (ident e330: 69 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 ity->pcsc_identi e340: 74 79 2d 3e 6b 65 79 73 69 7a 65 20 3e 20 30 29 ty->keysize > 0) e350: 20 7b 0a 09 09 09 69 66 20 28 62 75 66 6c 65 6e {....if (buflen e360: 20 21 3d 20 69 64 65 6e 74 69 74 79 2d 3e 70 63 != identity->pc e370: 73 63 5f 69 64 65 6e 74 69 74 79 2d 3e 6b 65 79 sc_identity->key e380: 73 69 7a 65 29 20 7b 0a 09 09 09 09 69 66 20 28 size) {.....if ( e390: 62 75 66 6c 65 6e 20 3e 20 28 69 64 65 6e 74 69 buflen > (identi e3a0: 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 74 ty->pcsc_identit e3b0: 79 2d 3e 6b 65 79 73 69 7a 65 20 2b 20 33 29 29 y->keysize + 3)) e3c0: 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 {......CACKEY_D e3d0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err e3e0: 6f 72 2e 20 20 4d 65 73 73 61 67 65 20 69 73 20 or. Message is e3f0: 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 73 69 67 too large to sig e400: 6e 2f 64 65 63 72 79 70 74 22 29 3b 0a 0a 09 09 n/decrypt");.... e410: 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. e420: 09 09 09 7d 0a 0a 09 09 09 09 74 6d 70 62 75 66 ...}......tmpbuf e430: 6c 65 6e 20 3d 20 69 64 65 6e 74 69 74 79 2d 3e len = identity-> e440: 70 63 73 63 5f 69 64 65 6e 74 69 74 79 2d 3e 6b pcsc_identity->k e450: 65 79 73 69 7a 65 3b 0a 09 09 09 09 74 6d 70 62 eysize;.....tmpb e460: 75 66 20 3d 20 6d 61 6c 6c 6f 63 28 74 6d 70 62 uf = malloc(tmpb e470: 75 66 6c 65 6e 29 3b 0a 09 09 09 09 66 72 65 65 uflen);.....free e480: 5f 74 6d 70 62 75 66 20 3d 20 31 3b 0a 0a 09 09 _tmpbuf = 1;.... e490: 09 09 70 61 64 6c 65 6e 20 3d 20 74 6d 70 62 75 ..padlen = tmpbu e4a0: 66 6c 65 6e 20 2d 20 62 75 66 6c 65 6e 20 2d 20 flen - buflen - e4b0: 33 3b 0a 0a 09 09 09 09 2f 2a 20 52 53 41 20 50 3;....../* RSA P e4c0: 4b 43 53 23 31 20 45 4d 53 41 2d 50 4b 43 53 31 KCS#1 EMSA-PKCS1 e4d0: 2d 76 31 5f 35 20 50 61 64 64 69 6e 67 20 2a 2f -v1_5 Padding */ e4e0: 0a 09 09 09 09 74 6d 70 62 75 66 5b 30 5d 20 3d .....tmpbuf[0] = e4f0: 20 30 78 30 30 3b 0a 09 09 09 09 74 6d 70 62 75 0x00;.....tmpbu e500: 66 5b 31 5d 20 3d 20 30 78 30 31 3b 0a 09 09 09 f[1] = 0x01;.... e510: 09 6d 65 6d 73 65 74 28 26 74 6d 70 62 75 66 5b .memset(&tmpbuf[ e520: 32 5d 2c 20 30 78 46 46 2c 20 70 61 64 6c 65 6e 2], 0xFF, padlen e530: 29 3b 0a 09 09 09 09 74 6d 70 62 75 66 5b 70 61 );.....tmpbuf[pa e540: 64 6c 65 6e 20 2b 20 32 5d 3d 20 30 78 30 30 3b dlen + 2]= 0x00; e550: 0a 09 09 09 09 6d 65 6d 63 70 79 28 26 74 6d 70 .....memcpy(&tmp e560: 62 75 66 5b 70 61 64 6c 65 6e 20 2b 20 33 5d 2c buf[padlen + 3], e570: 20 62 75 66 2c 20 62 75 66 6c 65 6e 29 3b 0a 0a buf, buflen);.. e580: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG e590: 5f 50 52 49 4e 54 42 55 46 28 22 55 6e 70 61 64 _PRINTBUF("Unpad e5a0: 64 65 64 3a 22 2c 20 62 75 66 2c 20 62 75 66 6c ded:", buf, bufl e5b0: 65 6e 29 3b 0a 09 09 09 09 43 41 43 4b 45 59 5f en);.....CACKEY_ e5c0: 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 DEBUG_PRINTBUF(" e5d0: 50 61 64 64 65 64 3a 22 2c 20 74 6d 70 62 75 66 Padded:", tmpbuf e5e0: 2c 20 74 6d 70 62 75 66 6c 65 6e 29 3b 0a 09 09 , tmpbuflen);... e5f0: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 74 6d .} else {.....tm e600: 70 62 75 66 20 3d 20 62 75 66 3b 0a 09 09 09 09 pbuf = buf;..... e610: 74 6d 70 62 75 66 6c 65 6e 20 3d 20 62 75 66 6c tmpbuflen = bufl e620: 65 6e 3b 0a 09 09 09 09 66 72 65 65 5f 74 6d 70 en;.....free_tmp e630: 62 75 66 20 3d 20 30 3b 0a 09 09 09 09 70 61 64 buf = 0;.....pad e640: 6c 65 6e 20 3d 20 30 3b 0a 09 09 09 7d 0a 09 09 len = 0;....}... e650: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 43 41 43 4b } else {....CACK e660: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( e670: 22 55 6e 61 62 6c 65 20 74 6f 20 64 65 74 65 72 "Unable to deter e680: 6d 69 6e 65 20 6b 65 79 20 73 69 7a 65 2c 20 68 mine key size, h e690: 6f 70 69 6e 67 20 74 68 65 20 6d 65 73 73 61 67 oping the messag e6a0: 65 20 69 73 20 70 72 6f 70 65 72 6c 79 20 70 61 e is properly pa e6b0: 64 64 65 64 21 22 29 3b 0a 0a 09 09 09 74 6d 70 dded!");.....tmp e6c0: 62 75 66 20 3d 20 62 75 66 3b 0a 09 09 09 74 6d buf = buf;....tm e6d0: 70 62 75 66 6c 65 6e 20 3d 20 62 75 66 6c 65 6e pbuflen = buflen e6e0: 3b 0a 09 09 09 66 72 65 65 5f 74 6d 70 62 75 66 ;....free_tmpbuf e6f0: 20 3d 20 30 3b 0a 09 09 09 70 61 64 6c 65 6e 20 = 0;....padlen e700: 3d 20 30 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 = 0;...}..} else e710: 20 7b 0a 09 09 74 6d 70 62 75 66 20 3d 20 62 75 {...tmpbuf = bu e720: 66 3b 0a 09 09 74 6d 70 62 75 66 6c 65 6e 20 3d f;...tmpbuflen = e730: 20 62 75 66 6c 65 6e 3b 0a 09 09 66 72 65 65 5f buflen;...free_ e740: 74 6d 70 62 75 66 20 3d 20 30 3b 0a 09 09 70 61 tmpbuf = 0;...pa e750: 64 6c 65 6e 20 3d 20 30 3b 0a 09 7d 0a 0a 09 2f dlen = 0;..}.../ e760: 2a 20 42 65 67 69 6e 20 74 72 61 6e 73 61 63 74 * Begin transact e770: 69 6f 6e 20 2a 2f 0a 09 63 61 63 6b 65 79 5f 62 ion */..cackey_b e780: 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e egin_transaction e790: 28 73 6c 6f 74 29 3b 0a 0a 09 2f 2a 20 53 65 6c (slot);.../* Sel e7a0: 65 63 74 20 63 6f 72 72 65 63 74 20 61 70 70 6c ect correct appl e7b0: 65 74 20 2a 2f 0a 09 43 41 43 4b 45 59 5f 44 45 et */..CACKEY_DE e7c0: 42 55 47 5f 50 52 49 4e 54 46 28 22 53 65 6c 65 BUG_PRINTF("Sele e7d0: 63 74 69 6e 67 20 61 70 70 6c 65 74 20 66 6f 75 cting applet fou e7e0: 6e 64 20 61 74 20 25 70 20 2e 2e 2e 22 2c 20 69 nd at %p ...", i e7f0: 64 65 6e 74 69 74 79 2d 3e 70 63 73 63 5f 69 64 dentity->pcsc_id e800: 65 6e 74 69 74 79 2d 3e 61 70 70 6c 65 74 29 3b entity->applet); e810: 0a 09 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f ..cackey_select_ e820: 61 70 70 6c 65 74 28 73 6c 6f 74 2c 20 69 64 65 applet(slot, ide e830: 6e 74 69 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e ntity->pcsc_iden e840: 74 69 74 79 2d 3e 61 70 70 6c 65 74 2c 20 73 69 tity->applet, si e850: 7a 65 6f 66 28 69 64 65 6e 74 69 74 79 2d 3e 70 zeof(identity->p e860: 63 73 63 5f 69 64 65 6e 74 69 74 79 2d 3e 61 70 csc_identity->ap e870: 70 6c 65 74 29 29 3b 0a 0a 09 2f 2a 20 53 65 6c plet));.../* Sel e880: 65 63 74 20 63 6f 72 72 65 63 74 20 66 69 6c 65 ect correct file e890: 20 2a 2f 0a 09 63 61 63 6b 65 79 5f 73 65 6c 65 */..cackey_sele e8a0: 63 74 5f 66 69 6c 65 28 73 6c 6f 74 2c 20 69 64 ct_file(slot, id e8b0: 65 6e 74 69 74 79 2d 3e 70 63 73 63 5f 69 64 65 entity->pcsc_ide e8c0: 6e 74 69 74 79 2d 3e 66 69 6c 65 29 3b 0a 0a 09 ntity->file);... e8d0: 74 6d 70 62 75 66 5f 73 20 3d 20 74 6d 70 62 75 tmpbuf_s = tmpbu e8e0: 66 3b 0a 09 6f 75 74 62 75 66 5f 73 20 3d 20 6f f;..outbuf_s = o e8f0: 75 74 62 75 66 3b 0a 09 77 68 69 6c 65 20 28 74 utbuf;..while (t e900: 6d 70 62 75 66 6c 65 6e 29 20 7b 0a 09 09 69 66 mpbuflen) {...if e910: 20 28 74 6d 70 62 75 66 6c 65 6e 20 3e 20 32 34 (tmpbuflen > 24 e920: 35 29 20 7b 0a 09 09 09 62 79 74 65 73 5f 74 6f 5) {....bytes_to e930: 5f 73 65 6e 64 20 3d 20 32 34 35 3b 0a 09 09 09 _send = 245;.... e940: 70 31 20 3d 20 30 78 38 30 3b 0a 09 09 09 6c 65 p1 = 0x80;....le e950: 20 3d 20 30 78 30 30 3b 0a 09 09 7d 20 65 6c 73 = 0x00;...} els e960: 65 20 7b 0a 09 09 09 62 79 74 65 73 5f 74 6f 5f e {....bytes_to_ e970: 73 65 6e 64 20 3d 20 74 6d 70 62 75 66 6c 65 6e send = tmpbuflen e980: 3b 0a 09 09 09 70 31 20 3d 20 30 78 30 30 3b 0a ;....p1 = 0x00;. e990: 09 09 09 6c 65 20 3d 20 30 78 30 30 3b 0a 09 09 ...le = 0x00;... e9a0: 7d 0a 0a 09 09 74 6d 70 6f 75 74 62 75 66 6c 65 }....tmpoutbufle e9b0: 6e 20 3d 20 6f 75 74 62 75 66 6c 65 6e 3b 0a 0a n = outbuflen;.. e9c0: 09 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 61 63 ..send_ret = cac e9d0: 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 73 6c key_send_apdu(sl e9e0: 6f 74 2c 20 47 53 43 49 53 5f 43 4c 41 53 53 5f ot, GSCIS_CLASS_ e9f0: 47 4c 4f 42 41 4c 5f 50 4c 41 54 46 4f 52 4d 2c GLOBAL_PLATFORM, ea00: 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 49 47 GSCIS_INSTR_SIG ea10: 4e 44 45 43 52 59 50 54 2c 20 70 31 2c 20 30 78 NDECRYPT, p1, 0x ea20: 30 30 2c 20 62 79 74 65 73 5f 74 6f 5f 73 65 6e 00, bytes_to_sen ea30: 64 2c 20 74 6d 70 62 75 66 2c 20 6c 65 2c 20 26 d, tmpbuf, le, & ea40: 72 65 73 70 63 6f 64 65 2c 20 6f 75 74 62 75 66 respcode, outbuf ea50: 2c 20 26 74 6d 70 6f 75 74 62 75 66 6c 65 6e 29 , &tmpoutbuflen) ea60: 3b 0a 09 09 69 66 20 28 73 65 6e 64 5f 72 65 74 ;...if (send_ret ea70: 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f != CACKEY_PCSC_ ea80: 53 5f 4f 4b 29 20 7b 0a 09 09 09 43 41 43 4b 45 S_OK) {....CACKE ea90: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" eaa0: 41 44 50 55 20 53 65 6e 64 69 6e 67 20 46 61 69 ADPU Sending Fai eab0: 6c 65 64 20 2d 2d 20 72 65 74 75 72 6e 69 6e 67 led -- returning eac0: 20 69 6e 20 65 72 72 6f 72 2e 22 29 3b 0a 0a 09 in error.");... ead0: 09 09 69 66 20 28 66 72 65 65 5f 74 6d 70 62 75 ..if (free_tmpbu eae0: 66 29 20 7b 0a 09 09 09 09 69 66 20 28 74 6d 70 f) {.....if (tmp eaf0: 62 75 66 5f 73 29 20 7b 0a 09 09 09 09 09 66 72 buf_s) {......fr eb00: 65 65 28 74 6d 70 62 75 66 5f 73 29 3b 0a 09 09 ee(tmpbuf_s);... eb10: 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 2f 2a 20 ..}....}...../* eb20: 45 6e 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 End transaction eb30: 2a 2f 0a 09 09 09 63 61 63 6b 65 79 5f 65 6e 64 */....cackey_end eb40: 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f _transaction(slo eb50: 74 29 3b 0a 0a 09 09 09 69 66 20 28 72 65 73 70 t);.....if (resp eb60: 63 6f 64 65 20 3d 3d 20 30 78 36 39 38 32 29 20 code == 0x6982) eb70: 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {.....CACKEY_DEB eb80: 55 47 5f 50 52 49 4e 54 46 28 22 53 65 63 75 72 UG_PRINTF("Secur eb90: 69 74 79 20 73 74 61 74 75 73 20 6e 6f 74 20 73 ity status not s eba0: 61 74 69 73 69 66 69 65 64 2e 20 20 52 65 74 75 atisified. Retu ebb0: 72 6e 69 6e 67 20 4e 45 45 44 4c 4f 47 49 4e 22 rning NEEDLOGIN" ebc0: 29 3b 0a 0a 09 09 09 09 63 61 63 6b 65 79 5f 6d );......cackey_m ebd0: 61 72 6b 5f 73 6c 6f 74 5f 72 65 73 65 74 28 73 ark_slot_reset(s ebe0: 6c 6f 74 29 3b 0a 09 09 09 09 73 6c 6f 74 2d 3e lot);.....slot-> ebf0: 74 6f 6b 65 6e 5f 66 6c 61 67 73 20 3d 20 43 4b token_flags = CK ec00: 46 5f 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 F_LOGIN_REQUIRED ec10: 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 43 41 ;......return(CA ec20: 43 4b 45 59 5f 50 43 53 43 5f 45 5f 4e 45 45 44 CKEY_PCSC_E_NEED ec30: 4c 4f 47 49 4e 29 3b 0a 09 09 09 7d 0a 0a 09 09 LOGIN);....}.... ec40: 09 69 66 20 28 73 65 6e 64 5f 72 65 74 20 3d 3d .if (send_ret == ec50: 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 CACKEY_PCSC_E_T ec60: 4f 4b 45 4e 41 42 53 45 4e 54 29 20 7b 0a 09 09 OKENABSENT) {... ec70: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P ec80: 52 49 4e 54 46 28 22 54 6f 6b 65 6e 20 61 62 73 RINTF("Token abs ec90: 65 6e 74 2e 20 20 52 65 74 75 72 6e 69 6e 67 20 ent. Returning eca0: 54 4f 4b 45 4e 41 42 53 45 4e 54 22 29 3b 0a 0a TOKENABSENT");.. ecb0: 09 09 09 09 63 61 63 6b 65 79 5f 6d 61 72 6b 5f ....cackey_mark_ ecc0: 73 6c 6f 74 5f 72 65 73 65 74 28 73 6c 6f 74 29 slot_reset(slot) ecd0: 3b 0a 09 09 09 09 73 6c 6f 74 2d 3e 74 6f 6b 65 ;.....slot->toke ece0: 6e 5f 66 6c 61 67 73 20 3d 20 43 4b 46 5f 4c 4f n_flags = CKF_LO ecf0: 47 49 4e 5f 52 45 51 55 49 52 45 44 3b 0a 0a 09 GIN_REQUIRED;... ed00: 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY ed10: 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 _PCSC_E_TOKENABS ed20: 45 4e 54 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 72 ENT);....}.....r ed30: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a eturn(-1);...}.. ed40: 09 09 74 6d 70 62 75 66 20 2b 3d 20 62 79 74 65 ..tmpbuf += byte ed50: 73 5f 74 6f 5f 73 65 6e 64 3b 0a 09 09 74 6d 70 s_to_send;...tmp ed60: 62 75 66 6c 65 6e 20 2d 3d 20 62 79 74 65 73 5f buflen -= bytes_ ed70: 74 6f 5f 73 65 6e 64 3b 0a 0a 09 09 6f 75 74 62 to_send;....outb ed80: 75 66 20 2b 3d 20 74 6d 70 6f 75 74 62 75 66 6c uf += tmpoutbufl ed90: 65 6e 3b 0a 09 09 6f 75 74 62 75 66 6c 65 6e 20 en;...outbuflen eda0: 2d 3d 20 74 6d 70 6f 75 74 62 75 66 6c 65 6e 3b -= tmpoutbuflen; edb0: 0a 09 09 72 65 74 76 61 6c 20 2b 3d 20 74 6d 70 ...retval += tmp edc0: 6f 75 74 62 75 66 6c 65 6e 3b 0a 09 7d 0a 0a 09 outbuflen;..}... edd0: 69 66 20 28 66 72 65 65 5f 74 6d 70 62 75 66 29 if (free_tmpbuf) ede0: 20 7b 0a 09 09 69 66 20 28 74 6d 70 62 75 66 5f {...if (tmpbuf_ edf0: 73 29 20 7b 0a 09 09 09 66 72 65 65 28 74 6d 70 s) {....free(tmp ee00: 62 75 66 5f 73 29 3b 0a 09 09 7d 0a 09 7d 0a 0a buf_s);...}..}.. ee10: 09 6f 75 74 62 75 66 20 3d 20 6f 75 74 62 75 66 .outbuf = outbuf ee20: 5f 73 3b 0a 0a 09 2f 2a 20 45 6e 64 20 74 72 61 _s;.../* End tra ee30: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 63 61 63 nsaction */..cac ee40: 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 key_end_transact ee50: 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 23 69 66 64 ion(slot);..#ifd ee60: 65 66 20 43 41 43 4b 45 59 5f 50 41 52 41 4e 4f ef CACKEY_PARANO ee70: 49 44 0a 23 20 20 69 66 64 65 66 20 5f 50 4f 53 ID.# ifdef _POS ee80: 49 58 5f 53 53 49 5a 45 5f 4d 41 58 0a 09 69 66 IX_SSIZE_MAX..if ee90: 20 28 6f 75 74 62 75 66 6c 65 6e 20 3e 20 5f 50 (outbuflen > _P eea0: 4f 53 49 58 5f 53 53 49 5a 45 5f 4d 41 58 29 20 OSIX_SSIZE_MAX) eeb0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG eec0: 5f 50 52 49 4e 54 46 28 22 4f 75 74 62 75 66 6c _PRINTF("Outbufl eed0: 65 6e 20 65 78 63 65 65 64 73 20 6d 61 78 69 6d en exceeds maxim eee0: 75 6d 20 76 61 6c 75 65 2c 20 72 65 74 75 72 6e um value, return eef0: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 2e 20 ing in failure. ef00: 28 6d 61 78 20 3d 20 25 6c 69 2c 20 6f 75 74 62 (max = %li, outb ef10: 75 66 6c 65 6e 20 3d 20 25 6c 75 29 22 2c 20 28 uflen = %lu)", ( ef20: 6c 6f 6e 67 29 20 5f 50 4f 53 49 58 5f 53 53 49 long) _POSIX_SSI ef30: 5a 45 5f 4d 41 58 2c 20 28 75 6e 73 69 67 6e 65 ZE_MAX, (unsigne ef40: 64 20 6c 6f 6e 67 29 20 6f 75 74 62 75 66 6c 65 d long) outbufle ef50: 6e 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 n);....return(-1 ef60: 29 3b 0a 09 7d 0a 23 20 20 65 6e 64 69 66 0a 23 );..}.# endif.# ef70: 65 6e 64 69 66 0a 0a 09 2f 2a 20 55 6e 70 61 64 endif.../* Unpad ef80: 20 72 65 70 6c 79 20 2a 2f 0a 09 69 66 20 28 75 reply */..if (u ef90: 6e 70 61 64 4f 75 74 70 75 74 29 20 7b 0a 09 09 npadOutput) {... efa0: 69 66 20 28 72 65 74 76 61 6c 20 3c 20 33 29 20 if (retval < 3) efb0: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU efc0: 47 5f 50 52 49 4e 54 46 28 22 52 65 70 6c 79 20 G_PRINTF("Reply efd0: 69 73 20 74 6f 6f 20 73 6d 61 6c 6c 2c 20 77 65 is too small, we efe0: 20 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f are not able to eff0: 20 75 6e 70 61 64 20 2d 2d 20 70 61 73 73 69 6e unpad -- passin f000: 67 20 62 61 63 6b 20 61 6e 64 20 68 6f 70 69 6e g back and hopin f010: 67 20 66 6f 72 20 74 68 65 20 62 65 73 74 21 22 g for the best!" f020: 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 );.....CACKEY_DE f030: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu f040: 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 73 73 rning in success f050: 2c 20 72 65 74 76 61 6c 20 3d 20 25 6c 69 20 28 , retval = %li ( f060: 62 79 74 65 73 29 22 2c 20 28 6c 6f 6e 67 29 20 bytes)", (long) f070: 72 65 74 76 61 6c 29 3b 0a 09 09 09 72 65 74 75 retval);....retu f080: 72 6e 28 72 65 74 76 61 6c 29 3b 0a 09 09 7d 0a rn(retval);...}. f090: 0a 09 09 69 66 20 28 6f 75 74 62 75 66 5b 30 5d ...if (outbuf[0] f0a0: 20 21 3d 20 30 78 30 30 29 20 7b 0a 09 09 09 43 != 0x00) {....C f0b0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN f0c0: 54 46 28 22 55 6e 72 65 63 6f 67 6e 69 7a 65 64 TF("Unrecognized f0d0: 20 70 61 64 64 69 6e 67 20 73 63 68 65 6d 65 20 padding scheme f0e0: 2d 2d 20 70 61 73 73 69 6e 67 20 62 61 63 6b 20 -- passing back f0f0: 61 6e 64 20 68 6f 70 69 6e 67 20 66 6f 72 20 74 and hoping for t f100: 68 65 20 62 65 73 74 21 22 29 3b 0a 0a 09 09 09 he best!");..... f110: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI f120: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 NTF("Returning i f130: 6e 20 73 75 63 63 65 73 73 2c 20 72 65 74 76 61 n success, retva f140: 6c 20 3d 20 25 6c 69 20 28 62 79 74 65 73 29 22 l = %li (bytes)" f150: 2c 20 28 6c 6f 6e 67 29 20 72 65 74 76 61 6c 29 , (long) retval) f160: 3b 0a 09 09 09 72 65 74 75 72 6e 28 72 65 74 76 ;....return(retv f170: 61 6c 29 3b 0a 09 09 7d 0a 0a 09 09 62 6c 6f 63 al);...}....bloc f180: 6b 74 79 70 65 20 3d 20 6f 75 74 62 75 66 5b 31 ktype = outbuf[1 f190: 5d 3b 0a 09 09 75 6e 70 61 64 6f 66 66 73 65 74 ];...unpadoffset f1a0: 20 3d 20 30 3b 0a 0a 09 09 73 77 69 74 63 68 20 = 0;....switch f1b0: 28 62 6c 6f 63 6b 74 79 70 65 29 20 7b 0a 09 09 (blocktype) {... f1c0: 09 63 61 73 65 20 30 78 30 30 3a 0a 09 09 09 09 .case 0x00:..... f1d0: 2f 2a 20 50 61 64 64 69 6e 67 20 53 63 68 65 6d /* Padding Schem f1e0: 65 20 31 2c 20 74 68 65 20 66 69 72 73 74 20 6e e 1, the first n f1f0: 6f 6e 2d 7a 65 72 6f 20 62 79 74 65 20 69 73 20 on-zero byte is f200: 74 68 65 20 73 74 61 72 74 20 6f 66 20 64 61 74 the start of dat f210: 61 20 2a 2f 0a 09 09 09 09 66 6f 72 20 28 75 6e a */.....for (un f220: 70 61 64 6f 66 66 73 65 74 20 3d 20 32 3b 20 75 padoffset = 2; u f230: 6e 70 61 64 6f 66 66 73 65 74 20 3c 20 72 65 74 npadoffset < ret f240: 76 61 6c 3b 20 75 6e 70 61 64 6f 66 66 73 65 74 val; unpadoffset f250: 2b 2b 29 20 7b 0a 09 09 09 09 09 69 66 20 28 6f ++) {......if (o f260: 75 74 62 75 66 5b 75 6e 70 61 64 6f 66 66 73 65 utbuf[unpadoffse f270: 74 5d 20 21 3d 20 30 78 30 30 29 20 7b 0a 09 09 t] != 0x00) {... f280: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 ....break;...... f290: 7d 0a 09 09 09 09 7d 0a 09 09 09 09 62 72 65 61 }.....}.....brea f2a0: 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 30 31 3a k;....case 0x01: f2b0: 0a 09 09 09 09 2f 2a 20 50 61 64 64 69 6e 67 20 ...../* Padding f2c0: 53 63 68 65 6d 65 20 32 2c 20 70 61 64 20 62 79 Scheme 2, pad by f2d0: 74 65 73 20 61 72 65 20 30 78 46 46 20 66 6f 6c tes are 0xFF fol f2e0: 6c 6f 77 65 64 20 62 79 20 30 78 30 30 20 2a 2f lowed by 0x00 */ f2f0: 0a 09 09 09 09 66 6f 72 20 28 75 6e 70 61 64 6f .....for (unpado f300: 66 66 73 65 74 20 3d 20 32 3b 20 75 6e 70 61 64 ffset = 2; unpad f310: 6f 66 66 73 65 74 20 3c 20 72 65 74 76 61 6c 3b offset < retval; f320: 20 75 6e 70 61 64 6f 66 66 73 65 74 2b 2b 29 20 unpadoffset++) f330: 7b 0a 09 09 09 09 09 69 66 20 28 6f 75 74 62 75 {......if (outbu f340: 66 5b 75 6e 70 61 64 6f 66 66 73 65 74 5d 20 21 f[unpadoffset] ! f350: 3d 20 30 78 46 46 29 20 7b 0a 09 09 09 09 09 09 = 0xFF) {....... f360: 69 66 20 28 6f 75 74 62 75 66 5b 75 6e 70 61 64 if (outbuf[unpad f370: 6f 66 66 73 65 74 5d 20 3d 3d 20 30 78 30 30 29 offset] == 0x00) f380: 20 7b 0a 09 09 09 09 09 09 09 75 6e 70 61 64 6f {........unpado f390: 66 66 73 65 74 2b 2b 3b 0a 0a 09 09 09 09 09 09 ffset++;........ f3a0: 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 09 7d 20 .break;.......} f3b0: 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 09 43 41 else {........CA f3c0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT f3d0: 46 28 22 49 6e 76 61 6c 69 64 20 70 61 64 64 69 F("Invalid paddi f3e0: 6e 67 20 64 61 74 61 20 66 6f 75 6e 64 2c 20 72 ng data found, r f3f0: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail f400: 75 72 65 2c 20 73 68 6f 75 6c 64 20 68 61 76 65 ure, should have f410: 20 62 65 65 6e 20 30 78 30 30 20 66 6f 75 6e 64 been 0x00 found f420: 20 30 78 25 30 32 78 22 2c 20 28 75 6e 73 69 67 0x%02x", (unsig f430: 6e 65 64 20 69 6e 74 29 20 6f 75 74 62 75 66 5b ned int) outbuf[ f440: 75 6e 70 61 64 6f 66 66 73 65 74 5d 29 3b 0a 0a unpadoffset]);.. f450: 09 09 09 09 09 09 09 72 65 74 75 72 6e 28 2d 31 .......return(-1 f460: 29 3b 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 );.......}...... f470: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 43 } else {.......C f480: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN f490: 54 46 28 22 49 6e 76 61 6c 69 64 20 70 61 64 64 TF("Invalid padd f4a0: 69 6e 67 20 64 61 74 61 20 66 6f 75 6e 64 2c 20 ing data found, f4b0: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai f4c0: 6c 75 72 65 2c 20 73 68 6f 75 6c 64 20 68 61 76 lure, should hav f4d0: 65 20 62 65 65 6e 20 30 78 46 46 20 66 6f 75 6e e been 0xFF foun f4e0: 64 20 30 78 25 30 32 78 22 2c 20 28 75 6e 73 69 d 0x%02x", (unsi f4f0: 67 6e 65 64 20 69 6e 74 29 20 6f 75 74 62 75 66 gned int) outbuf f500: 5b 75 6e 70 61 64 6f 66 66 73 65 74 5d 29 3b 0a [unpadoffset]);. f510: 0a 09 09 09 09 09 09 72 65 74 75 72 6e 28 2d 31 .......return(-1 f520: 29 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a );......}.....}. f530: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca f540: 73 65 20 30 78 30 32 3a 0a 09 09 09 09 2f 2a 20 se 0x02:...../* f550: 50 61 64 64 69 6e 67 20 53 63 68 65 6d 65 20 33 Padding Scheme 3 f560: 2c 20 70 61 64 20 62 79 74 65 73 20 61 72 65 20 , pad bytes are f570: 6e 6f 6e 2d 7a 65 72 6f 20 66 69 72 73 74 20 7a non-zero first z f580: 65 72 6f 20 62 79 74 65 20 66 6f 75 6e 64 20 69 ero byte found i f590: 73 20 74 68 65 20 73 65 70 65 72 61 74 6f 72 20 s the seperator f5a0: 62 79 74 65 20 2a 2f 0a 09 09 09 09 66 6f 72 20 byte */.....for f5b0: 28 75 6e 70 61 64 6f 66 66 73 65 74 20 3d 20 32 (unpadoffset = 2 f5c0: 3b 20 75 6e 70 61 64 6f 66 66 73 65 74 20 3c 20 ; unpadoffset < f5d0: 72 65 74 76 61 6c 3b 20 75 6e 70 61 64 6f 66 66 retval; unpadoff f5e0: 73 65 74 2b 2b 29 20 7b 0a 09 09 09 09 09 69 66 set++) {......if f5f0: 20 28 6f 75 74 62 75 66 5b 75 6e 70 61 64 6f 66 (outbuf[unpadof f600: 66 73 65 74 5d 20 3d 3d 20 30 78 30 30 29 20 7b fset] == 0x00) { f610: 0a 09 09 09 09 09 09 75 6e 70 61 64 6f 66 66 73 .......unpadoffs f620: 65 74 2b 2b 3b 0a 0a 09 09 09 09 09 09 62 72 65 et++;........bre f630: 61 6b 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d ak;......}.....} f640: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a .....break;...}. f650: 0a 09 09 69 66 20 28 75 6e 70 61 64 6f 66 66 73 ...if (unpadoffs f660: 65 74 20 3e 20 72 65 74 76 61 6c 29 20 7b 0a 09 et > retval) {.. f670: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P f680: 52 49 4e 54 46 28 22 4f 66 66 73 65 74 20 67 72 RINTF("Offset gr f690: 65 61 74 65 72 20 74 68 61 6e 20 72 65 70 6c 79 eater than reply f6a0: 20 73 69 7a 65 2c 20 61 62 6f 72 74 69 6e 67 2e size, aborting. f6b0: 20 20 28 75 6e 70 61 64 6f 66 66 73 65 74 20 3d (unpadoffset = f6c0: 20 25 6c 75 2c 20 72 65 74 76 61 6c 20 3d 20 25 %lu, retval = % f6d0: 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 lu)", (unsigned f6e0: 6c 6f 6e 67 29 20 75 6e 70 61 64 6f 66 66 73 65 long) unpadoffse f6f0: 74 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e t, (unsigned lon f700: 67 29 20 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 g) retval);..... f710: 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a return(-1);...}. f720: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ f730: 50 52 49 4e 54 42 55 46 28 22 50 61 64 64 65 64 PRINTBUF("Padded f740: 3a 22 2c 20 6f 75 74 62 75 66 2c 20 72 65 74 76 :", outbuf, retv f750: 61 6c 29 3b 0a 0a 09 09 72 65 74 76 61 6c 20 2d al);....retval - f760: 3d 20 75 6e 70 61 64 6f 66 66 73 65 74 3b 0a 09 = unpadoffset;.. f770: 09 6d 65 6d 6d 6f 76 65 28 6f 75 74 62 75 66 2c .memmove(outbuf, f780: 20 6f 75 74 62 75 66 20 2b 20 75 6e 70 61 64 6f outbuf + unpado f790: 66 66 73 65 74 2c 20 72 65 74 76 61 6c 29 3b 0a ffset, retval);. f7a0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ f7b0: 50 52 49 4e 54 42 55 46 28 22 55 6e 70 61 64 64 PRINTBUF("Unpadd f7c0: 65 64 3a 22 2c 20 6f 75 74 62 75 66 2c 20 72 65 ed:", outbuf, re f7d0: 74 76 61 6c 29 3b 0a 09 7d 0a 0a 0a 09 43 41 43 tval);..}....CAC f7e0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF f7f0: 28 22 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 73 ("Returning in s f800: 75 63 63 65 73 73 2c 20 72 65 74 76 61 6c 20 3d uccess, retval = f810: 20 25 6c 69 20 28 62 79 74 65 73 29 22 2c 20 28 %li (bytes)", ( f820: 6c 6f 6e 67 29 20 72 65 74 76 61 6c 29 3b 0a 0a long) retval);.. f830: 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b .return(retval); f840: 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 .}../*. * SYNPOS f850: 49 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a IS. * .... * f860: 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a . * ARGUMENTS. * f870: 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 52 .... *. * R f880: 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 ETURN VALUE. * f890: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 .... *. * NOT f8a0: 45 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a ES. * .... * f8b0: 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63 61 63 6b . */.static cack f8c0: 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 6c 6f ey_ret cackey_lo f8d0: 67 69 6e 28 73 74 72 75 63 74 20 63 61 63 6b 65 gin(struct cacke f8e0: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e y_slot *slot, un f8f0: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 69 6e signed char *pin f900: 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 , unsigned long f910: 70 69 6e 5f 6c 65 6e 2c 20 69 6e 74 20 2a 74 72 pin_len, int *tr f920: 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 5f 70 29 ies_remaining_p) f930: 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 {..unsigned cha f940: 72 20 63 61 63 5f 70 69 6e 5b 38 5d 20 3d 20 7b r cac_pin[8] = { f950: 30 78 46 46 2c 20 30 78 46 46 2c 20 30 78 46 46 0xFF, 0xFF, 0xFF f960: 2c 20 30 78 46 46 2c 20 30 78 46 46 2c 20 30 78 , 0xFF, 0xFF, 0x f970: 46 46 2c 20 30 78 46 46 2c 20 30 78 46 46 7d 3b FF, 0xFF, 0xFF}; f980: 0a 09 75 69 6e 74 31 36 5f 74 20 72 65 73 70 6f ..uint16_t respo f990: 6e 73 65 5f 63 6f 64 65 3b 0a 09 69 6e 74 20 74 nse_code;..int t f9a0: 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 3b 0a ries_remaining;. f9b0: 09 69 6e 74 20 73 65 6e 64 5f 72 65 74 3b 0a 0a .int send_ret;.. f9c0: 09 2f 2a 20 49 6e 64 69 63 61 74 65 20 74 68 61 ./* Indicate tha f9d0: 74 20 77 65 20 64 6f 20 6e 6f 74 20 6b 6e 6f 77 t we do not know f9e0: 20 61 62 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20 about how many f9f0: 74 72 69 65 73 20 61 72 65 20 72 65 6d 61 69 6e tries are remain fa00: 69 6e 67 20 2a 2f 0a 09 69 66 20 28 74 72 69 65 ing */..if (trie fa10: 73 5f 72 65 6d 61 69 6e 69 6e 67 5f 70 29 20 7b s_remaining_p) { fa20: 0a 09 09 2a 74 72 69 65 73 5f 72 65 6d 61 69 6e ...*tries_remain fa30: 69 6e 67 5f 70 20 3d 20 2d 31 3b 0a 09 7d 0a 0a ing_p = -1;..}.. fa40: 09 2f 2a 20 41 70 70 61 72 65 6e 74 6c 79 2c 20 ./* Apparently, fa50: 43 41 43 20 50 49 4e 73 20 61 72 65 20 2a 45 58 CAC PINs are *EX fa60: 41 43 54 4c 59 2a 20 38 20 62 79 74 65 73 20 6c ACTLY* 8 bytes l fa70: 6f 6e 67 20 2d 2d 20 70 61 64 20 77 69 74 68 20 ong -- pad with fa80: 30 78 46 46 20 69 66 20 74 6f 6f 20 73 68 6f 72 0xFF if too shor fa90: 74 20 2a 2f 0a 09 69 66 20 28 70 69 6e 5f 6c 65 t */..if (pin_le faa0: 6e 20 3e 3d 20 38 29 20 7b 0a 09 09 6d 65 6d 63 n >= 8) {...memc fab0: 70 79 28 63 61 63 5f 70 69 6e 2c 20 70 69 6e 2c py(cac_pin, pin, fac0: 20 38 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 8);..} else {.. fad0: 09 6d 65 6d 63 70 79 28 63 61 63 5f 70 69 6e 2c .memcpy(cac_pin, fae0: 20 70 69 6e 2c 20 70 69 6e 5f 6c 65 6e 29 3b 0a pin, pin_len);. faf0: 09 7d 0a 0a 09 2f 2a 20 49 73 73 75 65 20 50 49 .}.../* Issue PI fb00: 4e 20 56 65 72 69 66 79 20 2a 2f 0a 09 73 65 6e N Verify */..sen fb10: 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 d_ret = cackey_s fb20: 65 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c 20 47 end_apdu(slot, G fb30: 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 SCIS_CLASS_ISO78 fb40: 31 36 2c 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 16, GSCIS_INSTR_ fb50: 56 45 52 49 46 59 2c 20 30 78 30 30 2c 20 30 78 VERIFY, 0x00, 0x fb60: 30 30 2c 20 73 69 7a 65 6f 66 28 63 61 63 5f 70 00, sizeof(cac_p fb70: 69 6e 29 2c 20 63 61 63 5f 70 69 6e 2c 20 30 78 in), cac_pin, 0x fb80: 30 30 2c 20 26 72 65 73 70 6f 6e 73 65 5f 63 6f 00, &response_co fb90: 64 65 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b de, NULL, NULL); fba0: 0a 09 69 66 20 28 73 65 6e 64 5f 72 65 74 20 21 ..if (send_ret ! fbb0: 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f = CACKEY_PCSC_S_ fbc0: 4f 4b 29 20 7b 0a 09 09 69 66 20 28 28 72 65 73 OK) {...if ((res fbd0: 70 6f 6e 73 65 5f 63 6f 64 65 20 26 20 30 78 36 ponse_code & 0x6 fbe0: 33 43 30 29 20 3d 3d 20 30 78 36 33 43 30 29 20 3C0) == 0x63C0) fbf0: 7b 0a 09 09 09 74 72 69 65 73 5f 72 65 6d 61 69 {....tries_remai fc00: 6e 69 6e 67 20 3d 20 28 72 65 73 70 6f 6e 73 65 ning = (response fc10: 5f 63 6f 64 65 20 26 20 30 78 46 29 3b 0a 0a 09 _code & 0xF);... fc20: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P fc30: 52 49 4e 54 46 28 22 50 49 4e 20 56 65 72 69 66 RINTF("PIN Verif fc40: 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 2c 20 ication failed, fc50: 25 69 20 74 72 69 65 73 20 72 65 6d 61 69 6e 69 %i tries remaini fc60: 6e 67 22 2c 20 74 72 69 65 73 5f 72 65 6d 61 69 ng", tries_remai fc70: 6e 69 6e 67 29 3b 0a 0a 09 09 09 69 66 20 28 74 ning);.....if (t fc80: 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 5f 70 ries_remaining_p fc90: 29 20 7b 0a 09 09 09 09 2a 74 72 69 65 73 5f 72 ) {.....*tries_r fca0: 65 6d 61 69 6e 69 6e 67 5f 70 20 3d 20 74 72 69 emaining_p = tri fcb0: 65 73 5f 72 65 6d 61 69 6e 69 6e 67 3b 0a 09 09 es_remaining;... fcc0: 09 7d 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 41 .}.....return(CA fcd0: 43 4b 45 59 5f 50 43 53 43 5f 45 5f 42 41 44 50 CKEY_PCSC_E_BADP fce0: 49 4e 29 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 IN);...}....if ( fcf0: 72 65 73 70 6f 6e 73 65 5f 63 6f 64 65 20 3d 3d response_code == fd00: 20 30 78 36 39 38 33 29 20 7b 0a 09 09 09 43 41 0x6983) {....CA fd10: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT fd20: 46 28 22 50 49 4e 20 56 65 72 69 66 69 63 61 74 F("PIN Verificat fd30: 69 6f 6e 20 66 61 69 6c 65 64 2c 20 64 65 76 69 ion failed, devi fd40: 63 65 20 69 73 20 6c 6f 63 6b 65 64 22 29 3b 0a ce is locked");. fd50: 0a 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 ....return(CACKE fd60: 59 5f 50 43 53 43 5f 45 5f 4c 4f 43 4b 45 44 29 Y_PCSC_E_LOCKED) fd70: 3b 0a 09 09 7d 0a 0a 09 09 72 65 74 75 72 6e 28 ;...}....return( fd80: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 CACKEY_PCSC_E_GE fd90: 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 43 41 43 NERIC);..}...CAC fda0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF fdb0: 28 22 50 49 4e 20 56 65 72 69 66 69 63 61 74 69 ("PIN Verificati fdc0: 6f 6e 20 73 75 63 63 65 65 64 65 64 22 29 3b 0a on succeeded");. fdd0: 0a 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f ..return(CACKEY_ fde0: 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a 0a 2f PCSC_S_OK);.}../ fdf0: 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a *. * SYNPOSIS. * fe00: 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 .... *. * A fe10: 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 RGUMENTS. * fe20: 2e 2e 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e .... *. * RETURN fe30: 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 2e 2e VALUE. * .. fe40: 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a .. *. * NOTES. * fe50: 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a .... *. */. fe60: 73 74 61 74 69 63 20 63 61 63 6b 65 79 5f 72 65 static cackey_re fe70: 74 20 63 61 63 6b 65 79 5f 74 6f 6b 65 6e 5f 70 t cackey_token_p fe80: 72 65 73 65 6e 74 28 73 74 72 75 63 74 20 63 61 resent(struct ca fe90: 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 ckey_slot *slot) fea0: 20 7b 0a 09 63 61 63 6b 65 79 5f 72 65 74 20 70 {..cackey_ret p feb0: 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 3b csc_connect_ret; fec0: 0a 09 44 57 4f 52 44 20 72 65 61 64 65 72 5f 6c ..DWORD reader_l fed0: 65 6e 2c 20 73 74 61 74 65 2c 20 70 72 6f 74 6f en, state, proto fee0: 63 6f 6c 2c 20 61 74 72 5f 6c 65 6e 3b 0a 09 42 col, atr_len;..B fef0: 59 54 45 20 61 74 72 5b 4d 41 58 5f 41 54 52 5f YTE atr[MAX_ATR_ ff00: 53 49 5a 45 5d 3b 0a 09 4c 4f 4e 47 20 73 74 61 SIZE];..LONG sta ff10: 74 75 73 5f 72 65 74 2c 20 73 63 61 72 64 5f 72 tus_ret, scard_r ff20: 65 63 6f 6e 6e 5f 72 65 74 3b 0a 0a 09 43 41 43 econn_ret;...CAC ff30: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF ff40: 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 70 ("Called.");...p ff50: 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 csc_connect_ret ff60: 3d 20 63 61 63 6b 65 79 5f 63 6f 6e 6e 65 63 74 = cackey_connect ff70: 5f 63 61 72 64 28 73 6c 6f 74 29 3b 0a 09 69 66 _card(slot);..if ff80: 20 28 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 (pcsc_connect_r ff90: 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 et != CACKEY_PCS ffa0: 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b C_S_OK) {...CACK ffb0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( ffc0: 22 55 6e 61 62 6c 65 20 74 6f 20 63 6f 6e 6e 65 "Unable to conne ffd0: 63 74 20 74 6f 20 63 61 72 64 2c 20 72 65 74 75 ct to card, retu ffe0: 72 6e 69 6e 67 20 74 6f 6b 65 6e 20 61 62 73 65 rning token abse fff0: 6e 74 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 nt");....return( 10000 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 4f CACKEY_PCSC_E_TO 10010 4b 45 4e 41 42 53 45 4e 54 29 3b 0a 09 7d 0a 0a KENABSENT);..}.. 10020 09 61 74 72 5f 6c 65 6e 20 3d 20 73 69 7a 65 6f .atr_len = sizeo 10030 66 28 61 74 72 29 3b 0a 09 73 74 61 74 75 73 5f f(atr);..status_ 10040 72 65 74 20 3d 20 53 43 61 72 64 53 74 61 74 75 ret = SCardStatu 10050 73 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 s(slot->pcsc_car 10060 64 2c 20 4e 55 4c 4c 2c 20 26 72 65 61 64 65 72 d, NULL, &reader 10070 5f 6c 65 6e 2c 20 26 73 74 61 74 65 2c 20 26 70 _len, &state, &p 10080 72 6f 74 6f 63 6f 6c 2c 20 61 74 72 2c 20 26 61 rotocol, atr, &a 10090 74 72 5f 6c 65 6e 29 3b 0a 0a 09 69 66 20 28 73 tr_len);...if (s 100a0 74 61 74 75 73 5f 72 65 74 20 3d 3d 20 53 43 41 tatus_ret == SCA 100b0 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 48 41 4e RD_E_INVALID_HAN 100c0 44 4c 45 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f DLE) {...CACKEY_ 100d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 43 DEBUG_PRINTF("SC 100e0 61 72 64 53 74 61 74 75 73 28 29 20 72 65 74 75 ardStatus() retu 100f0 72 6e 65 64 20 53 43 41 52 44 5f 45 5f 49 4e 56 rned SCARD_E_INV 10100 41 4c 49 44 5f 48 41 4e 44 4c 45 2c 20 6d 61 72 ALID_HANDLE, mar 10110 6b 69 6e 67 20 69 73 20 6e 6f 74 20 61 6c 72 65 king is not alre 10120 61 64 79 20 63 6f 6e 6e 65 63 74 65 64 20 61 6e ady connected an 10130 64 20 74 72 79 69 6e 67 20 61 67 61 69 6e 22 29 d trying again") 10140 3b 0a 09 09 63 61 63 6b 65 79 5f 6d 61 72 6b 5f ;...cackey_mark_ 10150 73 6c 6f 74 5f 72 65 73 65 74 28 73 6c 6f 74 29 slot_reset(slot) 10160 3b 0a 0a 09 09 70 63 73 63 5f 63 6f 6e 6e 65 63 ;....pcsc_connec 10170 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 63 t_ret = cackey_c 10180 6f 6e 6e 65 63 74 5f 63 61 72 64 28 73 6c 6f 74 onnect_card(slot 10190 29 3b 0a 09 09 69 66 20 28 70 63 73 63 5f 63 6f );...if (pcsc_co 101a0 6e 6e 65 63 74 5f 72 65 74 20 21 3d 20 43 41 43 nnect_ret != CAC 101b0 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b KEY_PCSC_S_OK) { 101c0 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 101d0 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 _PRINTF("Unable 101e0 74 6f 20 63 6f 6e 6e 65 63 74 20 74 6f 20 63 61 to connect to ca 101f0 72 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 74 6f rd, returning to 10200 6b 65 6e 20 61 62 73 65 6e 74 22 29 3b 0a 0a 09 ken absent");... 10210 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f ..return(CACKEY_ 10220 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 PCSC_E_TOKENABSE 10230 4e 54 29 3b 0a 09 09 7d 0a 0a 09 09 61 74 72 5f NT);...}....atr_ 10240 6c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 61 74 72 len = sizeof(atr 10250 29 3b 0a 09 09 73 74 61 74 75 73 5f 72 65 74 20 );...status_ret 10260 3d 20 53 43 61 72 64 53 74 61 74 75 73 28 73 6c = SCardStatus(sl 10270 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 4e ot->pcsc_card, N 10280 55 4c 4c 2c 20 26 72 65 61 64 65 72 5f 6c 65 6e ULL, &reader_len 10290 2c 20 26 73 74 61 74 65 2c 20 26 70 72 6f 74 6f , &state, &proto 102a0 63 6f 6c 2c 20 61 74 72 2c 20 26 61 74 72 5f 6c col, atr, &atr_l 102b0 65 6e 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 74 en);..}...if (st 102c0 61 74 75 73 5f 72 65 74 20 21 3d 20 53 43 41 52 atus_ret != SCAR 102d0 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 D_S_SUCCESS) {.. 102e0 09 63 61 63 6b 65 79 5f 6d 61 72 6b 5f 73 6c 6f .cackey_mark_slo 102f0 74 5f 72 65 73 65 74 28 73 6c 6f 74 29 3b 0a 0a t_reset(slot);.. 10300 09 09 69 66 20 28 73 74 61 74 75 73 5f 72 65 74 ..if (status_ret 10310 20 3d 3d 20 53 43 41 52 44 5f 57 5f 52 45 53 45 == SCARD_W_RESE 10320 54 5f 43 41 52 44 29 20 7b 0a 09 09 09 43 41 43 T_CARD) {....CAC 10330 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 10340 28 22 52 65 73 65 74 20 72 65 71 75 69 72 65 64 ("Reset required 10350 2c 20 70 6c 65 61 73 65 20 68 6f 6c 64 2e 2e 2e , please hold... 10360 22 29 3b 0a 0a 09 09 09 73 63 61 72 64 5f 72 65 ");.....scard_re 10370 63 6f 6e 6e 5f 72 65 74 20 3d 20 63 61 63 6b 65 conn_ret = cacke 10380 79 5f 72 65 63 6f 6e 6e 65 63 74 5f 63 61 72 64 y_reconnect_card 10390 28 73 6c 6f 74 2c 20 53 43 41 52 44 5f 50 52 4f (slot, SCARD_PRO 103a0 54 4f 43 4f 4c 5f 54 30 20 7c 20 53 43 41 52 44 TOCOL_T0 | SCARD 103b0 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31 2c 20 26 70 _PROTOCOL_T1, &p 103c0 72 6f 74 6f 63 6f 6c 29 3b 0a 09 09 09 69 66 20 rotocol);....if 103d0 28 73 63 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 (scard_reconn_re 103e0 74 20 3d 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 t == SCARD_S_SUC 103f0 43 45 53 53 29 20 7b 0a 09 09 09 09 2f 2a 20 55 CESS) {...../* U 10400 70 64 61 74 65 20 70 72 6f 74 6f 63 6f 6c 20 2a pdate protocol * 10410 2f 0a 09 09 09 09 73 6c 6f 74 2d 3e 70 72 6f 74 /.....slot->prot 10420 6f 63 6f 6c 20 3d 20 70 72 6f 74 6f 63 6f 6c 3b ocol = protocol; 10430 0a 0a 09 09 09 09 2f 2a 20 52 65 2d 65 73 74 61 ....../* Re-esta 10440 62 6c 69 73 68 20 74 72 61 6e 73 61 63 74 69 6f blish transactio 10450 6e 2c 20 69 66 20 69 74 20 77 61 73 20 70 72 65 n, if it was pre 10460 73 65 6e 74 20 2a 2f 0a 09 09 09 09 69 66 20 28 sent */.....if ( 10470 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f slot->transactio 10480 6e 5f 64 65 70 74 68 20 3e 20 30 29 20 7b 0a 09 n_depth > 0) {.. 10490 09 09 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 ....slot->transa 104a0 63 74 69 6f 6e 5f 64 65 70 74 68 2d 2d 3b 0a 09 ction_depth--;.. 104b0 09 09 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 ....slot->transa 104c0 63 74 69 6f 6e 5f 6e 65 65 64 5f 68 77 5f 6c 6f ction_need_hw_lo 104d0 63 6b 20 3d 20 31 3b 0a 09 09 09 09 09 63 61 63 ck = 1;......cac 104e0 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 key_begin_transa 104f0 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 09 09 09 ction(slot);.... 10500 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 .}......CACKEY_D 10510 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 73 EBUG_PRINTF("Res 10520 65 74 20 73 75 63 63 65 73 73 66 75 6c 2c 20 72 et successful, r 10530 65 71 75 65 72 79 69 6e 67 22 29 3b 0a 09 09 09 equerying");.... 10540 09 73 74 61 74 75 73 5f 72 65 74 20 3d 20 53 43 .status_ret = SC 10550 61 72 64 53 74 61 74 75 73 28 73 6c 6f 74 2d 3e ardStatus(slot-> 10560 70 63 73 63 5f 63 61 72 64 2c 20 4e 55 4c 4c 2c pcsc_card, NULL, 10570 20 26 72 65 61 64 65 72 5f 6c 65 6e 2c 20 26 73 &reader_len, &s 10580 74 61 74 65 2c 20 26 70 72 6f 74 6f 63 6f 6c 2c tate, &protocol, 10590 20 61 74 72 2c 20 26 61 74 72 5f 6c 65 6e 29 3b atr, &atr_len); 105a0 0a 09 09 09 09 69 66 20 28 73 74 61 74 75 73 5f .....if (status_ 105b0 72 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 ret != SCARD_S_S 105c0 55 43 43 45 53 53 29 20 7b 0a 09 09 09 09 09 43 UCCESS) {......C 105d0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 105e0 54 46 28 22 53 74 69 6c 6c 20 75 6e 61 62 6c 65 TF("Still unable 105f0 20 74 6f 20 71 75 65 72 79 20 63 61 72 64 20 73 to query card s 10600 74 61 74 75 73 2c 20 72 65 74 75 72 6e 69 6e 67 tatus, returning 10610 20 74 6f 6b 65 6e 20 61 62 73 65 6e 74 2e 20 20 token absent. 10620 53 43 61 72 64 53 74 61 74 75 73 28 29 20 3d 20 SCardStatus() = 10630 25 73 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 %s", CACKEY_DEBU 10640 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f G_FUNC_SCARDERR_ 10650 54 4f 5f 53 54 52 28 73 74 61 74 75 73 5f 72 65 TO_STR(status_re 10660 74 29 29 3b 0a 0a 09 09 09 09 09 72 65 74 75 72 t));.......retur 10670 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f n(CACKEY_PCSC_E_ 10680 54 4f 4b 45 4e 41 42 53 45 4e 54 29 3b 0a 09 09 TOKENABSENT);... 10690 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a ..}....} else {. 106a0 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 106b0 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 _PRINTF("Unable 106c0 74 6f 20 72 65 63 6f 6e 6e 65 63 74 20 74 6f 20 to reconnect to 106d0 63 61 72 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 card, returning 106e0 74 6f 6b 65 6e 20 61 62 73 65 6e 74 2e 20 20 53 token absent. S 106f0 43 61 72 64 52 65 63 6f 6e 6e 65 63 74 28 29 20 CardReconnect() 10700 3d 20 25 73 22 2c 20 43 41 43 4b 45 59 5f 44 45 = %s", CACKEY_DE 10710 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 BUG_FUNC_SCARDER 10720 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f 72 R_TO_STR(scard_r 10730 65 63 6f 6e 6e 5f 72 65 74 29 29 3b 0a 0a 09 09 econn_ret));.... 10740 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f ..return(CACKEY_ 10750 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 PCSC_E_TOKENABSE 10760 4e 54 29 3b 0a 09 09 09 7d 0a 09 09 7d 20 65 6c NT);....}...} el 10770 73 65 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 se {....CACKEY_D 10780 45 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 EBUG_PRINTF("Una 10790 62 6c 65 20 74 6f 20 71 75 65 72 79 20 63 61 72 ble to query car 107a0 64 20 73 74 61 74 75 73 2c 20 72 65 74 75 72 6e d status, return 107b0 69 6e 67 20 74 6f 6b 65 6e 20 61 62 73 65 6e 74 ing token absent 107c0 2e 20 20 53 43 61 72 64 53 74 61 74 75 73 28 29 . SCardStatus() 107d0 20 3d 20 25 73 22 2c 20 43 41 43 4b 45 59 5f 44 = %s", CACKEY_D 107e0 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 EBUG_FUNC_SCARDE 107f0 52 52 5f 54 4f 5f 53 54 52 28 73 74 61 74 75 73 RR_TO_STR(status 10800 5f 72 65 74 29 29 3b 0a 0a 09 09 09 72 65 74 75 _ret));.....retu 10810 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 10820 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 29 3b 0a 09 _TOKENABSENT);.. 10830 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 28 73 74 61 .}..}...if ((sta 10840 74 65 20 26 20 53 43 41 52 44 5f 41 42 53 45 4e te & SCARD_ABSEN 10850 54 29 20 3d 3d 20 53 43 41 52 44 5f 41 42 53 45 T) == SCARD_ABSE 10860 4e 54 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 NT) {...CACKEY_D 10870 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 72 EBUG_PRINTF("Car 10880 64 20 69 73 20 61 62 73 65 6e 74 2c 20 72 65 74 d is absent, ret 10890 75 72 6e 69 6e 67 20 74 6f 6b 65 6e 20 61 62 73 urning token abs 108a0 65 6e 74 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ent");....return 108b0 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 (CACKEY_PCSC_E_T 108c0 4f 4b 45 4e 41 42 53 45 4e 54 29 3b 0a 09 7d 0a OKENABSENT);..}. 108d0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 108e0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 108f0 20 74 6f 6b 65 6e 20 70 72 65 73 65 6e 74 2e 22 token present." 10900 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b );...return(CACK 10910 45 59 5f 50 43 53 43 5f 53 5f 54 4f 4b 45 4e 50 EY_PCSC_S_TOKENP 10920 52 45 53 45 4e 54 29 3b 0a 7d 0a 0a 2f 2a 0a 20 RESENT);.}../*. 10930 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 * SYNPOSIS. * 10940 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 55 .... *. * ARGU 10950 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 2e 2e 2e MENTS. * ... 10960 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 . *. * RETURN VA 10970 4c 55 45 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 LUE. * .... 10980 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 *. * NOTES. * 10990 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 .... *. */.sta 109a0 74 69 63 20 73 73 69 7a 65 5f 74 20 63 61 63 6b tic ssize_t cack 109b0 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 ey_pcsc_identity 109c0 5f 74 6f 5f 6c 61 62 65 6c 28 73 74 72 75 63 74 _to_label(struct 109d0 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 cackey_pcsc_ide 109e0 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 74 79 2c ntity *identity, 109f0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a unsigned char * 10a00 6c 61 62 65 6c 5f 62 75 66 2c 20 75 6e 73 69 67 label_buf, unsig 10a10 6e 65 64 20 6c 6f 6e 67 20 6c 61 62 65 6c 5f 62 ned long label_b 10a20 75 66 5f 6c 65 6e 29 20 7b 0a 09 75 6e 73 69 67 uf_len) {..unsig 10a30 6e 65 64 20 6c 6f 6e 67 20 63 65 72 74 69 66 69 ned long certifi 10a40 63 61 74 65 5f 6c 65 6e 3b 0a 09 63 68 61 72 20 cate_len;..char 10a50 2a 6c 61 62 65 6c 5f 61 73 6e 31 3b 0a 09 76 6f *label_asn1;..vo 10a60 69 64 20 2a 63 65 72 74 69 66 69 63 61 74 65 3b id *certificate; 10a70 0a 09 69 6e 74 20 78 35 30 39 5f 72 65 61 64 5f ..int x509_read_ 10a80 72 65 74 3b 0a 0a 09 63 65 72 74 69 66 69 63 61 ret;...certifica 10a90 74 65 20 3d 20 69 64 65 6e 74 69 74 79 2d 3e 63 te = identity->c 10aa0 65 72 74 69 66 69 63 61 74 65 3b 0a 09 63 65 72 ertificate;..cer 10ab0 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3d 20 69 tificate_len = i 10ac0 64 65 6e 74 69 74 79 2d 3e 63 65 72 74 69 66 69 dentity->certifi 10ad0 63 61 74 65 5f 6c 65 6e 3b 0a 0a 09 69 66 20 28 cate_len;...if ( 10ae0 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 certificate_len 10af0 3c 20 30 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 < 0) {...return( 10b00 2d 31 29 3b 0a 09 7d 0a 0a 09 78 35 30 39 5f 72 -1);..}...x509_r 10b10 65 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f 74 ead_ret = x509_t 10b20 6f 5f 73 75 62 6a 65 63 74 28 63 65 72 74 69 66 o_subject(certif 10b30 69 63 61 74 65 2c 20 63 65 72 74 69 66 69 63 61 icate, certifica 10b40 74 65 5f 6c 65 6e 2c 20 28 76 6f 69 64 20 2a 2a te_len, (void ** 10b50 29 20 26 6c 61 62 65 6c 5f 61 73 6e 31 29 3b 0a ) &label_asn1);. 10b60 09 69 66 20 28 78 35 30 39 5f 72 65 61 64 5f 72 .if (x509_read_r 10b70 65 74 20 3c 20 30 29 20 7b 0a 09 09 72 65 74 75 et < 0) {...retu 10b80 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 78 35 30 rn(-1);..}...x50 10b90 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 30 9_read_ret = x50 10ba0 39 5f 64 6e 5f 74 6f 5f 73 74 72 69 6e 67 28 6c 9_dn_to_string(l 10bb0 61 62 65 6c 5f 61 73 6e 31 2c 20 78 35 30 39 5f abel_asn1, x509_ 10bc0 72 65 61 64 5f 72 65 74 2c 20 28 63 68 61 72 20 read_ret, (char 10bd0 2a 29 20 6c 61 62 65 6c 5f 62 75 66 2c 20 6c 61 *) label_buf, la 10be0 62 65 6c 5f 62 75 66 5f 6c 65 6e 2c 20 22 43 4e bel_buf_len, "CN 10bf0 22 29 3b 0a 09 69 66 20 28 78 35 30 39 5f 72 65 ");..if (x509_re 10c00 61 64 5f 72 65 74 20 3c 3d 20 30 29 20 7b 0a 09 ad_ret <= 0) {.. 10c10 09 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3d .x509_read_ret = 10c20 20 78 35 30 39 5f 64 6e 5f 74 6f 5f 73 74 72 69 x509_dn_to_stri 10c30 6e 67 28 6c 61 62 65 6c 5f 61 73 6e 31 2c 20 78 ng(label_asn1, x 10c40 35 30 39 5f 72 65 61 64 5f 72 65 74 2c 20 28 63 509_read_ret, (c 10c50 68 61 72 20 2a 29 20 6c 61 62 65 6c 5f 62 75 66 har *) label_buf 10c60 2c 20 6c 61 62 65 6c 5f 62 75 66 5f 6c 65 6e 2c , label_buf_len, 10c70 20 4e 55 4c 4c 29 3b 0a 0a 09 09 69 66 20 28 78 NULL);....if (x 10c80 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 3d 20 509_read_ret <= 10c90 30 29 20 7b 0a 09 09 09 72 65 74 75 72 6e 28 2d 0) {....return(- 10ca0 31 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 23 69 66 64 1);...}..}..#ifd 10cb0 65 66 20 43 41 43 4b 45 59 5f 50 41 52 41 4e 4f ef CACKEY_PARANO 10cc0 49 44 0a 23 20 20 69 66 64 65 66 20 5f 50 4f 53 ID.# ifdef _POS 10cd0 49 58 5f 53 53 49 5a 45 5f 4d 41 58 0a 09 69 66 IX_SSIZE_MAX..if 10ce0 20 28 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 (x509_read_ret 10cf0 3e 20 5f 50 4f 53 49 58 5f 53 53 49 5a 45 5f 4d > _POSIX_SSIZE_M 10d00 41 58 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 AX) {...CACKEY_D 10d10 45 42 55 47 5f 50 52 49 4e 54 46 28 22 78 35 30 EBUG_PRINTF("x50 10d20 39 5f 72 65 61 64 5f 72 65 74 20 65 78 63 65 65 9_read_ret excee 10d30 64 73 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 ds maximum value 10d40 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f 10d50 61 69 6c 75 72 65 2e 20 28 6d 61 78 20 3d 20 25 ailure. (max = % 10d60 6c 69 2c 20 78 35 30 39 5f 72 65 61 64 5f 72 65 li, x509_read_re 10d70 74 20 3d 20 25 6c 75 29 22 2c 20 28 6c 6f 6e 67 t = %lu)", (long 10d80 29 20 5f 50 4f 53 49 58 5f 53 53 49 5a 45 5f 4d ) _POSIX_SSIZE_M 10d90 41 58 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f AX, (unsigned lo 10da0 6e 67 29 20 78 35 30 39 5f 72 65 61 64 5f 72 65 ng) x509_read_re 10db0 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 t);....return(-1 10dc0 29 3b 0a 09 7d 0a 23 20 20 65 6e 64 69 66 0a 23 );..}.# endif.# 10dd0 65 6e 64 69 66 0a 0a 09 72 65 74 75 72 6e 28 78 endif...return(x 10de0 35 30 39 5f 72 65 61 64 5f 72 65 74 29 3b 0a 7d 509_read_ret);.} 10df0 0a 0a 2f 2a 20 52 65 74 75 72 6e 73 20 30 20 6f ../* Returns 0 o 10e00 6e 20 73 75 63 63 65 73 73 20 2a 2f 0a 73 74 61 n success */.sta 10e10 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 6d tic int cackey_m 10e20 75 74 65 78 5f 63 72 65 61 74 65 28 76 6f 69 64 utex_create(void 10e30 20 2a 2a 6d 75 74 65 78 29 20 7b 0a 09 70 74 68 **mutex) {..pth 10e40 72 65 61 64 5f 6d 75 74 65 78 5f 74 20 2a 70 74 read_mutex_t *pt 10e50 68 72 65 61 64 5f 6d 75 74 65 78 3b 0a 09 69 6e hread_mutex;..in 10e60 74 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c t pthread_retval 10e70 3b 0a 09 43 4b 5f 52 56 20 63 75 73 74 6f 6d 5f ;..CK_RV custom_ 10e80 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 retval;...CACKEY 10e90 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 10ea0 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 10eb0 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 66 6c 61 (cackey_args.fla 10ec0 67 73 20 26 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b gs & CKF_OS_LOCK 10ed0 49 4e 47 5f 4f 4b 29 20 3d 3d 20 43 4b 46 5f 4f ING_OK) == CKF_O 10ee0 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 7b 0a S_LOCKING_OK) {. 10ef0 09 09 70 74 68 72 65 61 64 5f 6d 75 74 65 78 20 ..pthread_mutex 10f00 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 = malloc(sizeof( 10f10 2a 70 74 68 72 65 61 64 5f 6d 75 74 65 78 29 29 *pthread_mutex)) 10f20 3b 0a 09 09 69 66 20 28 21 70 74 68 72 65 61 64 ;...if (!pthread 10f30 5f 6d 75 74 65 78 29 20 7b 0a 09 09 09 43 41 43 _mutex) {....CAC 10f40 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 10f50 28 22 46 61 69 6c 65 64 20 74 6f 20 61 6c 6c 6f ("Failed to allo 10f60 63 61 74 65 20 6d 65 6d 6f 72 79 2e 22 29 3b 0a cate memory.");. 10f70 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. 10f80 09 09 7d 0a 0a 09 09 70 74 68 72 65 61 64 5f 72 ..}....pthread_r 10f90 65 74 76 61 6c 20 3d 20 70 74 68 72 65 61 64 5f etval = pthread_ 10fa0 6d 75 74 65 78 5f 69 6e 69 74 28 70 74 68 72 65 mutex_init(pthre 10fb0 61 64 5f 6d 75 74 65 78 2c 20 4e 55 4c 4c 29 3b ad_mutex, NULL); 10fc0 0a 09 09 69 66 20 28 70 74 68 72 65 61 64 5f 72 ...if (pthread_r 10fd0 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 10fe0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 10ff0 49 4e 54 46 28 22 70 74 68 72 65 61 64 5f 6d 75 INTF("pthread_mu 11000 74 65 78 5f 69 6e 69 74 28 29 20 72 65 74 75 72 tex_init() retur 11010 6e 65 64 20 65 72 72 6f 72 20 28 25 69 29 2e 22 ned error (%i)." 11020 2c 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c , pthread_retval 11030 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 );.....return(-1 11040 29 3b 0a 09 09 7d 0a 0a 09 09 2a 6d 75 74 65 78 );...}....*mutex 11050 20 3d 20 70 74 68 72 65 61 64 5f 6d 75 74 65 78 = pthread_mutex 11060 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 ;..} else {...if 11070 20 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 43 72 (cackey_args.Cr 11080 65 61 74 65 4d 75 74 65 78 29 20 7b 0a 09 09 09 eateMutex) {.... 11090 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 3d 20 custom_retval = 110a0 63 61 63 6b 65 79 5f 61 72 67 73 2e 43 72 65 61 cackey_args.Crea 110b0 74 65 4d 75 74 65 78 28 6d 75 74 65 78 29 3b 0a teMutex(mutex);. 110c0 0a 09 09 09 69 66 20 28 63 75 73 74 6f 6d 5f 72 ....if (custom_r 110d0 65 74 76 61 6c 20 21 3d 20 43 4b 52 5f 4f 4b 29 etval != CKR_OK) 110e0 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {.....CACKEY_DE 110f0 42 55 47 5f 50 52 49 4e 54 46 28 22 63 61 63 6b BUG_PRINTF("cack 11100 65 79 5f 61 72 67 73 2e 43 72 65 61 74 65 4d 75 ey_args.CreateMu 11110 74 65 78 28 29 20 72 65 74 75 72 6e 65 64 20 65 tex() returned e 11120 72 72 6f 72 20 28 25 6c 69 29 2e 22 2c 20 28 6c rror (%li).", (l 11130 6f 6e 67 29 20 63 75 73 74 6f 6d 5f 72 65 74 76 ong) custom_retv 11140 61 6c 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e al);......return 11150 28 2d 31 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 (-1);....}...}.. 11160 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 11170 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 11180 6e 67 20 73 75 63 65 73 73 66 75 6c 6c 79 20 28 ng sucessfully ( 11190 30 29 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 30 0)");...return(0 111a0 29 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 73 );.}../* Returns 111b0 20 30 20 6f 6e 20 73 75 63 63 65 73 73 20 2a 2f 0 on success */ 111c0 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b .static int cack 111d0 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 76 6f ey_mutex_lock(vo 111e0 69 64 20 2a 6d 75 74 65 78 29 20 7b 0a 09 70 74 id *mutex) {..pt 111f0 68 72 65 61 64 5f 6d 75 74 65 78 5f 74 20 2a 70 hread_mutex_t *p 11200 74 68 72 65 61 64 5f 6d 75 74 65 78 3b 0a 09 69 thread_mutex;..i 11210 6e 74 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 nt pthread_retva 11220 6c 3b 0a 09 43 4b 5f 52 56 20 63 75 73 74 6f 6d l;..CK_RV custom 11230 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 _retval;...CACKE 11240 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 11250 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 11260 28 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 66 6c ((cackey_args.fl 11270 61 67 73 20 26 20 43 4b 46 5f 4f 53 5f 4c 4f 43 ags & CKF_OS_LOC 11280 4b 49 4e 47 5f 4f 4b 29 20 3d 3d 20 43 4b 46 5f KING_OK) == CKF_ 11290 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 7b OS_LOCKING_OK) { 112a0 0a 09 09 70 74 68 72 65 61 64 5f 6d 75 74 65 78 ...pthread_mutex 112b0 20 3d 20 6d 75 74 65 78 3b 0a 0a 09 09 70 74 68 = mutex;....pth 112c0 72 65 61 64 5f 72 65 74 76 61 6c 20 3d 20 70 74 read_retval = pt 112d0 68 72 65 61 64 5f 6d 75 74 65 78 5f 6c 6f 63 6b hread_mutex_lock 112e0 28 70 74 68 72 65 61 64 5f 6d 75 74 65 78 29 3b (pthread_mutex); 112f0 0a 09 09 69 66 20 28 70 74 68 72 65 61 64 5f 72 ...if (pthread_r 11300 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 11310 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 11320 49 4e 54 46 28 22 70 74 68 72 65 61 64 5f 6d 75 INTF("pthread_mu 11330 74 65 78 5f 6c 6f 63 6b 28 29 20 72 65 74 75 72 tex_lock() retur 11340 6e 65 64 20 65 72 72 6f 72 20 28 25 69 29 2e 22 ned error (%i)." 11350 2c 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c , pthread_retval 11360 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 );.....return(-1 11370 29 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b );...}..} else { 11380 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 61 72 ...if (cackey_ar 11390 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 29 20 7b 0a gs.LockMutex) {. 113a0 09 09 09 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c ...custom_retval 113b0 20 3d 20 63 61 63 6b 65 79 5f 61 72 67 73 2e 4c = cackey_args.L 113c0 6f 63 6b 4d 75 74 65 78 28 6d 75 74 65 78 29 3b ockMutex(mutex); 113d0 0a 0a 09 09 09 69 66 20 28 63 75 73 74 6f 6d 5f .....if (custom_ 113e0 72 65 74 76 61 6c 20 21 3d 20 43 4b 52 5f 4f 4b retval != CKR_OK 113f0 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 ) {.....CACKEY_D 11400 45 42 55 47 5f 50 52 49 4e 54 46 28 22 63 61 63 EBUG_PRINTF("cac 11410 6b 65 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 key_args.LockMut 11420 65 78 28 29 20 72 65 74 75 72 6e 65 64 20 65 72 ex() returned er 11430 72 6f 72 20 28 25 6c 69 29 2e 22 2c 20 28 6c 6f ror (%li).", (lo 11440 6e 67 29 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 ng) custom_retva 11450 6c 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 l);......return( 11460 2d 31 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d -1);....}...}..} 11470 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 11480 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 11490 67 20 73 75 63 65 73 73 66 75 6c 6c 79 20 28 30 g sucessfully (0 114a0 29 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 30 29 )");...return(0) 114b0 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 73 20 ;.}../* Returns 114c0 30 20 6f 6e 20 73 75 63 63 65 73 73 20 2a 2f 0a 0 on success */. 114d0 73 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 static int cacke 114e0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 76 y_mutex_unlock(v 114f0 6f 69 64 20 2a 6d 75 74 65 78 29 20 7b 0a 09 70 oid *mutex) {..p 11500 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 74 20 2a thread_mutex_t * 11510 70 74 68 72 65 61 64 5f 6d 75 74 65 78 3b 0a 09 pthread_mutex;.. 11520 69 6e 74 20 70 74 68 72 65 61 64 5f 72 65 74 76 int pthread_retv 11530 61 6c 3b 0a 09 43 4b 5f 52 56 20 63 75 73 74 6f al;..CK_RV custo 11540 6d 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b m_retval;...CACK 11550 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 11560 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 11570 20 28 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 66 ((cackey_args.f 11580 6c 61 67 73 20 26 20 43 4b 46 5f 4f 53 5f 4c 4f lags & CKF_OS_LO 11590 43 4b 49 4e 47 5f 4f 4b 29 20 3d 3d 20 43 4b 46 CKING_OK) == CKF 115a0 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 _OS_LOCKING_OK) 115b0 7b 0a 09 09 70 74 68 72 65 61 64 5f 6d 75 74 65 {...pthread_mute 115c0 78 20 3d 20 6d 75 74 65 78 3b 0a 0a 09 09 70 74 x = mutex;....pt 115d0 68 72 65 61 64 5f 72 65 74 76 61 6c 20 3d 20 70 hread_retval = p 115e0 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 75 6e 6c thread_mutex_unl 115f0 6f 63 6b 28 70 74 68 72 65 61 64 5f 6d 75 74 65 ock(pthread_mute 11600 78 29 3b 0a 09 09 69 66 20 28 70 74 68 72 65 61 x);...if (pthrea 11610 64 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b d_retval != 0) { 11620 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 11630 5f 50 52 49 4e 54 46 28 22 70 74 68 72 65 61 64 _PRINTF("pthread 11640 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 29 20 _mutex_unlock() 11650 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 28 returned error ( 11660 25 69 29 2e 22 2c 20 70 74 68 72 65 61 64 5f 72 %i).", pthread_r 11670 65 74 76 61 6c 29 3b 0a 0a 09 09 09 72 65 74 75 etval);.....retu 11680 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09 7d 20 65 rn(-1);...}..} e 11690 6c 73 65 20 7b 0a 09 09 69 66 20 28 63 61 63 6b lse {...if (cack 116a0 65 79 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 ey_args.UnlockMu 116b0 74 65 78 29 20 7b 0a 09 09 09 63 75 73 74 6f 6d tex) {....custom 116c0 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 116d0 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65 _args.UnlockMute 116e0 78 28 6d 75 74 65 78 29 3b 0a 0a 09 09 09 69 66 x(mutex);.....if 116f0 20 28 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 (custom_retval 11700 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 != CKR_OK) {.... 11710 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 11720 49 4e 54 46 28 22 63 61 63 6b 65 79 5f 61 72 67 INTF("cackey_arg 11730 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 28 29 20 s.UnlockMutex() 11740 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 28 returned error ( 11750 25 6c 69 29 2e 22 2c 20 28 6c 6f 6e 67 29 20 63 %li).", (long) c 11760 75 73 74 6f 6d 5f 72 65 74 76 61 6c 29 3b 0a 0a ustom_retval);.. 11770 09 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. 11780 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41 ...}...}..}...CA 11790 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 117a0 46 28 22 52 65 74 75 72 6e 69 6e 67 20 73 75 63 F("Returning suc 117b0 65 73 73 66 75 6c 6c 79 20 28 30 29 22 29 3b 0a essfully (0)");. 117c0 0a 09 72 65 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a ..return(0);.}.. 117d0 73 74 61 74 69 63 20 43 4b 5f 41 54 54 52 49 42 static CK_ATTRIB 117e0 55 54 45 5f 50 54 52 20 63 61 63 6b 65 79 5f 67 UTE_PTR cackey_g 117f0 65 74 5f 61 74 74 72 69 62 75 74 65 73 28 43 4b et_attributes(CK 11800 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 53 20 6f 62 _OBJECT_CLASS ob 11810 6a 65 63 74 63 6c 61 73 73 2c 20 73 74 72 75 63 jectclass, struc 11820 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 t cackey_pcsc_id 11830 65 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 74 79 entity *identity 11840 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 , unsigned long 11850 69 64 65 6e 74 69 74 79 5f 6e 75 6d 2c 20 43 4b identity_num, CK 11860 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 43 6f _ULONG_PTR pulCo 11870 75 6e 74 29 20 7b 0a 09 73 74 61 74 69 63 20 43 unt) {..static C 11880 4b 5f 42 42 4f 4f 4c 20 63 6b 5f 74 72 75 65 20 K_BBOOL ck_true 11890 3d 20 31 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f = 1;..static CK_ 118a0 42 42 4f 4f 4c 20 63 6b 5f 66 61 6c 73 65 20 3d BBOOL ck_false = 118b0 20 30 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f 54 0;..static CK_T 118c0 52 55 53 54 20 63 6b 5f 74 72 75 73 74 65 64 20 RUST ck_trusted 118d0 3d 20 43 4b 5f 54 52 55 53 54 45 44 5f 44 45 4c = CK_TRUSTED_DEL 118e0 45 47 41 54 4f 52 3b 0a 09 43 4b 5f 55 4c 4f 4e EGATOR;..CK_ULON 118f0 47 20 6e 75 6d 61 74 74 72 73 20 3d 20 30 2c 20 G numattrs = 0, 11900 72 65 74 76 61 6c 5f 63 6f 75 6e 74 3b 0a 09 43 retval_count;..C 11910 4b 5f 41 54 54 52 49 42 55 54 45 5f 54 59 50 45 K_ATTRIBUTE_TYPE 11920 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 3b curr_attr_type; 11930 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 20 63 ..CK_ATTRIBUTE c 11940 75 72 72 5f 61 74 74 72 2c 20 2a 72 65 74 76 61 urr_attr, *retva 11950 6c 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 54 52 20 l;..CK_VOID_PTR 11960 70 56 61 6c 75 65 3b 0a 09 43 4b 5f 55 4c 4f 4e pValue;..CK_ULON 11970 47 20 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a 09 43 G ulValueLen;..C 11980 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 53 20 63 K_OBJECT_CLASS c 11990 6b 5f 6f 62 6a 65 63 74 5f 63 6c 61 73 73 3b 0a k_object_class;. 119a0 09 43 4b 5f 43 45 52 54 49 46 49 43 41 54 45 5f .CK_CERTIFICATE_ 119b0 54 59 50 45 20 63 6b 5f 63 65 72 74 69 66 69 63 TYPE ck_certific 119c0 61 74 65 5f 74 79 70 65 3b 0a 09 43 4b 5f 4b 45 ate_type;..CK_KE 119d0 59 5f 54 59 50 45 20 63 6b 5f 6b 65 79 5f 74 79 Y_TYPE ck_key_ty 119e0 70 65 3b 0a 09 43 4b 5f 55 54 46 38 43 48 41 52 pe;..CK_UTF8CHAR 119f0 20 75 63 54 6d 70 42 75 66 5b 31 30 32 34 5d 3b ucTmpBuf[1024]; 11a00 0a 09 53 48 41 31 43 6f 6e 74 65 78 74 20 73 68 ..SHA1Context sh 11a10 61 31 5f 63 74 78 3b 0a 09 4d 44 35 5f 43 54 58 a1_ctx;..MD5_CTX 11a20 20 6d 64 35 5f 63 74 78 3b 0a 09 75 69 6e 74 38 md5_ctx;..uint8 11a30 5f 74 20 73 68 61 31 5f 68 61 73 68 5b 53 48 41 _t sha1_hash[SHA 11a40 31 48 61 73 68 53 69 7a 65 5d 3b 0a 09 75 69 6e 1HashSize];..uin 11a50 74 38 5f 74 20 6d 64 35 5f 68 61 73 68 5b 4d 44 t8_t md5_hash[MD 11a60 35 48 61 73 68 53 69 7a 65 5d 3b 0a 09 75 6e 73 5HashSize];..uns 11a70 69 67 6e 65 64 20 63 68 61 72 20 2a 63 65 72 74 igned char *cert 11a80 69 66 69 63 61 74 65 3b 0a 09 73 73 69 7a 65 5f ificate;..ssize_ 11a90 74 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 t certificate_le 11aa0 6e 20 3d 20 2d 31 2c 20 78 35 30 39 5f 72 65 61 n = -1, x509_rea 11ab0 64 5f 72 65 74 3b 0a 09 69 6e 74 20 70 56 61 6c d_ret;..int pVal 11ac0 75 65 5f 66 72 65 65 3b 0a 0a 09 43 41 43 4b 45 ue_free;...CACKE 11ad0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 11ae0 43 61 6c 6c 65 64 20 28 6f 62 6a 65 63 74 43 6c Called (objectCl 11af0 61 73 73 20 3d 20 25 6c 75 2c 20 69 64 65 6e 74 ass = %lu, ident 11b00 69 74 79 5f 6e 75 6d 20 3d 20 25 6c 75 29 2e 22 ity_num = %lu)." 11b10 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 11b20 29 20 6f 62 6a 65 63 74 63 6c 61 73 73 2c 20 69 ) objectclass, i 11b30 64 65 6e 74 69 74 79 5f 6e 75 6d 29 3b 0a 0a 09 dentity_num);... 11b40 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 30 3b 0a 0a *pulCount = 0;.. 11b50 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 .if (objectclass 11b60 20 21 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 != CKO_CERTIFIC 11b70 41 54 45 20 26 26 20 6f 62 6a 65 63 74 63 6c 61 ATE && objectcla 11b80 73 73 20 21 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 ss != CKO_PUBLIC 11b90 5f 4b 45 59 20 26 26 20 6f 62 6a 65 63 74 63 6c _KEY && objectcl 11ba0 61 73 73 20 21 3d 20 43 4b 4f 5f 50 52 49 56 41 ass != CKO_PRIVA 11bb0 54 45 5f 4b 45 59 20 26 26 20 6f 62 6a 65 63 74 TE_KEY && object 11bc0 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 4e 45 54 class != CKO_NET 11bd0 53 43 41 50 45 5f 54 52 55 53 54 29 20 7b 0a 09 SCAPE_TRUST) {.. 11be0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 11bf0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 11c00 30 20 6f 62 6a 65 63 74 73 20 28 4e 55 4c 4c 29 0 objects (NULL) 11c10 2c 20 69 6e 76 61 6c 69 64 20 6f 62 6a 65 63 74 , invalid object 11c20 20 63 6c 61 73 73 22 29 3b 0a 0a 09 09 72 65 74 class");....ret 11c30 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 urn(NULL);..}... 11c40 2f 2a 20 47 65 74 20 43 65 72 74 20 2a 2f 0a 09 /* Get Cert */.. 11c50 69 66 20 28 69 64 65 6e 74 69 74 79 20 3d 3d 20 if (identity == 11c60 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY 11c70 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 11c80 65 74 75 72 6e 69 6e 67 20 30 20 6f 62 6a 65 63 eturning 0 objec 11c90 74 73 20 28 4e 55 4c 4c 29 2c 20 69 6e 76 61 6c ts (NULL), inval 11ca0 69 64 20 69 64 65 6e 74 69 79 20 70 72 6f 76 69 id identiy provi 11cb0 64 65 64 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ded");....return 11cc0 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 63 65 72 (NULL);..}...cer 11cd0 74 69 66 69 63 61 74 65 20 3d 20 69 64 65 6e 74 tificate = ident 11ce0 69 74 79 2d 3e 63 65 72 74 69 66 69 63 61 74 65 ity->certificate 11cf0 3b 0a 09 63 65 72 74 69 66 69 63 61 74 65 5f 6c ;..certificate_l 11d00 65 6e 20 3d 20 69 64 65 6e 74 69 74 79 2d 3e 63 en = identity->c 11d10 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 3b 0a ertificate_len;. 11d20 0a 09 69 66 20 28 63 65 72 74 69 66 69 63 61 74 ..if (certificat 11d30 65 5f 6c 65 6e 20 3d 3d 20 2d 31 20 7c 7c 20 63 e_len == -1 || c 11d40 65 72 74 69 66 69 63 61 74 65 20 3d 3d 20 4e 55 ertificate == NU 11d50 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 11d60 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 11d70 75 72 6e 69 6e 67 20 30 20 6f 62 6a 65 63 74 73 urning 0 objects 11d80 20 28 4e 55 4c 4c 29 2c 20 74 68 69 73 20 69 64 (NULL), this id 11d90 65 6e 74 69 74 79 20 64 6f 65 73 20 6e 6f 74 20 entity does not 11da0 68 61 76 65 20 61 6e 20 58 2e 35 30 39 20 63 65 have an X.509 ce 11db0 72 74 69 66 69 63 61 74 65 20 61 73 73 6f 63 69 rtificate associ 11dc0 61 74 65 64 20 77 69 74 68 20 69 74 20 61 6e 64 ated with it and 11dd0 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 22 29 will not work") 11de0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c ;....return(NULL 11df0 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 56 65 72 69 66 );..}.../* Verif 11e00 79 20 74 68 61 74 20 63 65 72 74 69 66 69 63 61 y that certifica 11e10 74 65 20 69 73 20 41 53 4e 2e 31 20 65 6e 63 6f te is ASN.1 enco 11e20 64 65 64 20 58 2e 35 30 39 20 63 65 72 74 69 66 ded X.509 certif 11e30 69 63 61 74 65 20 2a 2f 0a 09 69 66 20 28 78 35 icate */..if (x5 11e40 30 39 5f 74 6f 5f 73 65 72 69 61 6c 28 63 65 72 09_to_serial(cer 11e50 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 66 tificate, certif 11e60 69 63 61 74 65 5f 6c 65 6e 2c 20 4e 55 4c 4c 29 icate_len, NULL) 11e70 20 3c 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 < 0) {...CACKEY 11e80 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 11e90 65 74 75 72 6e 69 6e 67 20 30 20 6f 62 6a 65 63 eturning 0 objec 11ea0 74 73 20 28 4e 55 4c 4c 29 2c 20 74 68 65 20 58 ts (NULL), the X 11eb0 2e 35 30 39 20 63 65 72 74 69 66 69 63 61 74 65 .509 certificate 11ec0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 associated with 11ed0 20 74 68 69 73 20 69 64 65 6e 74 69 74 79 20 69 this identity i 11ee0 73 20 6e 6f 74 20 76 61 6c 69 64 22 29 3b 0a 0a s not valid");.. 11ef0 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a ..return(NULL);. 11f00 09 7d 0a 0a 09 72 65 74 76 61 6c 5f 63 6f 75 6e .}...retval_coun 11f10 74 20 3d 20 36 34 3b 0a 09 72 65 74 76 61 6c 20 t = 64;..retval 11f20 3d 20 6d 61 6c 6c 6f 63 28 72 65 74 76 61 6c 5f = malloc(retval_ 11f30 63 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 28 2a count * sizeof(* 11f40 72 65 74 76 61 6c 29 29 3b 0a 0a 09 66 6f 72 20 retval));...for 11f50 28 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 20 (curr_attr_type 11f60 3d 20 30 3b 20 63 75 72 72 5f 61 74 74 72 5f 74 = 0; curr_attr_t 11f70 79 70 65 20 3c 20 30 78 63 65 35 33 36 33 62 66 ype < 0xce5363bf 11f80 3b 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 ; curr_attr_type 11f90 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63 75 72 72 ++) {...if (curr 11fa0 5f 61 74 74 72 5f 74 79 70 65 20 3d 3d 20 30 78 _attr_type == 0x 11fb0 38 30 30 29 20 7b 0a 09 09 09 63 75 72 72 5f 61 800) {....curr_a 11fc0 74 74 72 5f 74 79 70 65 20 3d 20 30 78 63 65 35 ttr_type = 0xce5 11fd0 33 36 33 30 30 3b 0a 09 09 7d 0a 0a 09 09 70 56 36300;...}....pV 11fe0 61 6c 75 65 5f 66 72 65 65 20 3d 20 30 3b 0a 09 alue_free = 0;.. 11ff0 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a .pValue = NULL;. 12000 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 28 ..ulValueLen = ( 12010 43 4b 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 0a 09 09 CK_LONG) -1;.... 12020 73 77 69 74 63 68 20 28 63 75 72 72 5f 61 74 74 switch (curr_att 12030 72 5f 74 79 70 65 29 20 7b 0a 09 09 09 63 61 73 r_type) {....cas 12040 65 20 43 4b 41 5f 43 4c 41 53 53 3a 0a 09 09 09 e CKA_CLASS:.... 12050 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 12060 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting 12070 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 43 attribute CKA_C 12080 4c 41 53 53 20 28 30 78 25 30 38 6c 78 29 20 2e LASS (0x%08lx) . 12090 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 120a0 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 120b0 79 70 65 29 3b 0a 0a 09 09 09 09 63 6b 5f 6f 62 ype);......ck_ob 120c0 6a 65 63 74 5f 63 6c 61 73 73 20 3d 20 6f 62 6a ject_class = obj 120d0 65 63 74 63 6c 61 73 73 3b 0a 0a 09 09 09 09 70 ectclass;......p 120e0 56 61 6c 75 65 20 3d 20 26 63 6b 5f 6f 62 6a 65 Value = &ck_obje 120f0 63 74 5f 63 6c 61 73 73 3b 0a 09 09 09 09 75 6c ct_class;.....ul 12100 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f ValueLen = sizeo 12110 66 28 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c 61 73 f(ck_object_clas 12120 73 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f s);......CACKEY_ 12130 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 12140 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 .. returning %lu 12150 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 (%p/%lu)", (uns 12160 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 igned long) *((C 12170 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 53 20 2a K_OBJECT_CLASS * 12180 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 ) pValue), pValu 12190 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e e, (unsigned lon 121a0 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a g) ulValueLen);. 121b0 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c 121c0 61 73 65 20 43 4b 41 5f 54 4f 4b 45 4e 3a 0a 09 ase CKA_TOKEN:.. 121d0 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 121e0 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti 121f0 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA 12200 5f 54 4f 4b 45 4e 20 28 30 78 25 30 38 6c 78 29 _TOKEN (0x%08lx) 12210 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned 12220 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr 12230 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 _type);......pVa 12240 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a lue = &ck_true;. 12250 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = 12260 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 sizeof(ck_true) 12270 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 ;......CACKEY_DE 12280 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... 12290 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 returning %lu ( 122a0 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 %p/%lu)", (unsig 122b0 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f ned long) *((CK_ 122c0 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 BBOOL *) pValue) 122d0 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 , pValue, (unsig 122e0 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 ned long) ulValu 122f0 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 eLen);......brea 12300 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 50 k;....case CKA_P 12310 52 49 56 41 54 45 3a 0a 09 09 09 09 43 41 43 4b RIVATE:.....CACK 12320 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 12330 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 "Requesting attr 12340 69 62 75 74 65 20 43 4b 41 5f 50 52 49 56 41 54 ibute CKA_PRIVAT 12350 45 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 E (0x%08lx) ..." 12360 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 12370 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 ) curr_attr_type 12380 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 );......if (obje 12390 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 4e ctclass != CKO_N 123a0 45 54 53 43 41 50 45 5f 54 52 55 53 54 29 20 7b ETSCAPE_TRUST) { 123b0 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 123c0 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... 123d0 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 but not getting 123e0 69 74 20 62 65 63 61 75 73 65 20 77 65 20 61 72 it because we ar 123f0 65 20 6e 6f 74 20 61 20 4e 65 74 73 63 61 70 65 e not a Netscape 12400 20 74 72 75 73 74 20 6f 62 6a 65 63 74 22 29 3b trust object"); 12410 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 .......break;... 12420 09 09 7d 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 ..}......pValue 12430 3d 20 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 = &ck_false;.... 12440 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 .ulValueLen = si 12450 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b 0a zeof(ck_false);. 12460 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 12470 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 G_PRINTF(" ... r 12480 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 eturning %lu (%p 12490 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 /%lu)", (unsigne 124a0 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 d long) *((CK_BB 124b0 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 OOL *) pValue), 124c0 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 pValue, (unsigne 124d0 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c d long) ulValueL 124e0 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b en);......break; 124f0 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 ....case CKA_TRU 12500 53 54 45 44 3a 0a 09 09 09 09 43 41 43 4b 45 59 STED:.....CACKEY 12510 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 12520 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 equesting attrib 12530 75 74 65 20 43 4b 41 5f 54 52 55 53 54 45 44 20 ute CKA_TRUSTED 12540 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 (0x%08lx) ...", 12550 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 12560 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b curr_attr_type); 12570 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 ......if (object 12580 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 4e 45 54 class == CKO_NET 12590 53 43 41 50 45 5f 54 52 55 53 54 29 20 7b 0a 09 SCAPE_TRUST) {.. 125a0 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 125b0 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 _PRINTF(" ... bu 125c0 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 t not getting it 125d0 20 62 65 63 61 75 73 65 20 77 65 20 61 72 65 20 because we are 125e0 61 20 4e 65 74 73 63 61 70 65 20 74 72 75 73 74 a Netscape trust 125f0 20 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 09 object");...... 12600 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 .break;.....}... 12610 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f ...pValue = &ck_ 12620 74 72 75 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 true;.....ulValu 12630 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b eLen = sizeof(ck 12640 5f 74 72 75 65 29 3b 0a 0a 09 09 09 09 43 41 43 _true);......CAC 12650 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 12660 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 (" ... returning 12670 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 %lu (%p/%lu)", 12680 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 12690 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 *((CK_BBOOL *) p 126a0 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 Value), pValue, 126b0 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 126c0 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 ulValueLen);.... 126d0 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 ..break;....case 126e0 20 43 4b 41 5f 4d 4f 44 49 46 49 41 42 4c 45 3a CKA_MODIFIABLE: 126f0 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 12700 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 G_PRINTF("Reques 12710 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 ting attribute C 12720 4b 41 5f 4d 4f 44 49 46 49 41 42 4c 45 20 28 30 KA_MODIFIABLE (0 12730 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 x%08lx) ...", (u 12740 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 nsigned long) cu 12750 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a rr_attr_type);.. 12760 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b ....pValue = &ck 12770 5f 66 61 6c 73 65 3b 0a 09 09 09 09 75 6c 56 61 _false;.....ulVa 12780 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 lueLen = sizeof( 12790 63 6b 5f 66 61 6c 73 65 29 3b 0a 0a 09 09 09 09 ck_false);...... 127a0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 127b0 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e NTF(" ... return 127c0 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 ing %lu (%p/%lu) 127d0 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 127e0 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a g) *((CK_BBOOL * 127f0 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 ) pValue), pValu 12800 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e e, (unsigned lon 12810 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a g) ulValueLen);. 12820 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c 12830 61 73 65 20 43 4b 41 5f 4c 41 42 45 4c 3a 0a 09 ase CKA_LABEL:.. 12840 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 12850 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti 12860 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA 12870 5f 4c 41 42 45 4c 20 28 30 78 25 30 38 6c 78 29 _LABEL (0x%08lx) 12880 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned 12890 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr 128a0 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 2f 2a 20 _type);....../* 128b0 58 58 58 3a 20 44 65 74 65 72 6d 69 6e 65 20 6e XXX: Determine n 128c0 61 6d 65 20 2a 2f 0a 09 09 09 09 75 6c 56 61 6c ame */.....ulVal 128d0 75 65 4c 65 6e 20 3d 20 73 6e 70 72 69 6e 74 66 ueLen = snprintf 128e0 28 28 63 68 61 72 20 2a 29 20 75 63 54 6d 70 42 ((char *) ucTmpB 128f0 75 66 2c 20 73 69 7a 65 6f 66 28 75 63 54 6d 70 uf, sizeof(ucTmp 12900 42 75 66 29 2c 20 22 49 64 65 6e 74 69 74 79 20 Buf), "Identity 12910 23 25 6c 75 22 2c 20 28 75 6e 73 69 67 6e 65 64 #%lu", (unsigned 12920 20 6c 6f 6e 67 29 20 69 64 65 6e 74 69 74 79 5f long) identity_ 12930 6e 75 6d 29 3b 0a 09 09 09 09 70 56 61 6c 75 65 num);.....pValue 12940 20 3d 20 75 63 54 6d 70 42 75 66 3b 0a 0a 09 09 = ucTmpBuf;.... 12950 09 09 69 66 20 28 75 6c 56 61 6c 75 65 4c 65 6e ..if (ulValueLen 12960 20 3e 3d 20 73 69 7a 65 6f 66 28 75 63 54 6d 70 >= sizeof(ucTmp 12970 42 75 66 29 29 20 7b 0a 09 09 09 09 09 75 6c 56 Buf)) {......ulV 12980 61 6c 75 65 4c 65 6e 20 3d 20 30 3b 0a 09 09 09 alueLen = 0;.... 12990 09 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b ..pValue = NULL; 129a0 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b .....}......CACK 129b0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 129c0 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning 129d0 28 25 70 2f 25 6c 75 29 22 2c 20 70 56 61 6c 75 (%p/%lu)", pValu 129e0 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e e, (unsigned lon 129f0 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a g) ulValueLen);. 12a00 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c 12a10 61 73 65 20 43 4b 41 5f 56 41 4c 55 45 3a 0a 09 ase CKA_VALUE:.. 12a20 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 12a30 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti 12a40 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA 12a50 5f 56 41 4c 55 45 20 28 30 78 25 30 38 6c 78 29 _VALUE (0x%08lx) 12a60 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned 12a70 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr 12a80 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 73 77 69 _type);......swi 12a90 74 63 68 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 tch (objectclass 12aa0 29 20 7b 0a 09 09 09 09 09 63 61 73 65 20 43 4b ) {......case CK 12ab0 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 3a 0a 09 O_PRIVATE_KEY:.. 12ac0 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 12ad0 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 G_PRINTF(" ... b 12ae0 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 ut not getting i 12af0 74 20 62 65 63 61 75 73 65 20 77 65 20 61 72 65 t because we are 12b00 20 61 20 70 72 69 76 61 74 65 20 6b 65 79 2e 22 a private key." 12b10 29 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b );........break; 12b20 0a 09 09 09 09 09 63 61 73 65 20 43 4b 4f 5f 4e ......case CKO_N 12b30 45 54 53 43 41 50 45 5f 54 52 55 53 54 3a 0a 09 ETSCAPE_TRUST:.. 12b40 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 12b50 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 G_PRINTF(" ... b 12b60 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 ut not getting i 12b70 74 20 62 65 63 61 75 73 65 20 77 65 20 61 72 65 t because we are 12b80 20 61 20 4e 65 74 73 63 61 70 65 20 74 72 75 73 a Netscape trus 12b90 74 20 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 t object");..... 12ba0 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 63 ...break;......c 12bb0 61 73 65 20 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b ase CKO_PUBLIC_K 12bc0 45 59 3a 0a 09 09 09 09 09 09 2f 2a 20 58 58 58 EY:......./* XXX 12bd0 3a 20 54 4f 44 4f 20 2a 2f 0a 0a 09 09 09 09 09 : TODO */....... 12be0 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 63 61 73 .break;......cas 12bf0 65 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 e CKO_CERTIFICAT 12c00 45 3a 0a 09 09 09 09 09 09 70 56 61 6c 75 65 20 E:.......pValue 12c10 3d 20 63 65 72 74 69 66 69 63 61 74 65 3b 0a 09 = certificate;.. 12c20 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 .....ulValueLen 12c30 3d 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 = certificate_le 12c40 6e 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b n;........break; 12c50 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b .....}......CACK 12c60 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 12c70 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning 12c80 25 70 2f 25 6c 75 22 2c 20 70 56 61 6c 75 65 2c %p/%lu", pValue, 12c90 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 12ca0 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... 12cb0 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas 12cc0 65 20 43 4b 41 5f 49 53 53 55 45 52 3a 0a 09 09 e CKA_ISSUER:... 12cd0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 12ce0 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e RINTF("Requestin 12cf0 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f g attribute CKA_ 12d00 49 53 53 55 45 52 20 28 30 78 25 30 38 6c 78 29 ISSUER (0x%08lx) 12d10 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned 12d20 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr 12d30 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 _type);......if 12d40 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 (objectclass != 12d50 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 20 CKO_CERTIFICATE 12d60 26 26 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 && objectclass ! 12d70 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f 54 = CKO_NETSCAPE_T 12d80 52 55 53 54 29 20 7b 0a 09 09 09 09 09 43 41 43 RUST) {......CAC 12d90 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 12da0 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 (" ... but not g 12db0 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 etting it becaus 12dc0 65 20 77 65 20 61 72 65 20 6e 6f 74 20 61 20 63 e we are not a c 12dd0 65 72 74 69 66 69 63 61 74 65 20 6f 72 20 4e 65 ertificate or Ne 12de0 74 73 63 61 70 65 20 74 72 75 73 74 20 6f 62 6a tscape trust obj 12df0 65 63 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 ect");.......bre 12e00 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 ak;.....}......i 12e10 66 20 28 63 65 72 74 69 66 69 63 61 74 65 5f 6c f (certificate_l 12e20 65 6e 20 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 en >= 0) {...... 12e30 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 x509_read_ret = 12e40 78 35 30 39 5f 74 6f 5f 69 73 73 75 65 72 28 63 x509_to_issuer(c 12e50 65 72 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 ertificate, cert 12e60 69 66 69 63 61 74 65 5f 6c 65 6e 2c 20 26 70 56 ificate_len, &pV 12e70 61 6c 75 65 29 3b 0a 09 09 09 09 09 69 66 20 28 alue);......if ( 12e80 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 x509_read_ret < 12e90 30 29 20 7b 0a 09 09 09 09 09 09 70 56 61 6c 75 0) {.......pValu 12ea0 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d e = NULL;......} 12eb0 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 75 6c else {.......ul 12ec0 56 61 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f ValueLen = x509_ 12ed0 72 65 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 7d read_ret;......} 12ee0 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b .....}......CACK 12ef0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 12f00 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning 12f10 25 70 2f 25 6c 75 22 2c 20 70 56 61 6c 75 65 2c %p/%lu", pValue, 12f20 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 12f30 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... 12f40 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas 12f50 65 20 43 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 4d e CKA_SERIAL_NUM 12f60 42 45 52 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f BER:.....CACKEY_ 12f70 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 12f80 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 questing attribu 12f90 74 65 20 43 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 te CKA_SERIAL_NU 12fa0 4d 42 45 52 20 28 30 78 25 30 38 6c 78 29 20 2e MBER (0x%08lx) . 12fb0 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 12fc0 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 12fd0 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f ype);......if (o 12fe0 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b bjectclass != CK 12ff0 4f 5f 43 45 52 54 49 46 49 43 41 54 45 20 26 26 O_CERTIFICATE && 13000 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 objectclass != 13010 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 CKO_NETSCAPE_TRU 13020 53 54 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 ST) {......CACKE 13030 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 13040 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 ... but not get 13050 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 ting it because 13060 77 65 20 61 72 65 20 6e 6f 74 20 61 20 63 65 72 we are not a cer 13070 74 69 66 69 63 61 74 65 20 6f 72 20 4e 65 74 73 tificate or Nets 13080 63 61 70 65 20 74 72 75 73 74 20 6f 62 6a 65 63 cape trust objec 13090 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b t");.......break 130a0 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 ;.....}......if 130b0 28 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e (certificate_len 130c0 20 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 78 35 >= 0) {......x5 130d0 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 09_read_ret = x5 130e0 30 39 5f 74 6f 5f 73 65 72 69 61 6c 28 63 65 72 09_to_serial(cer 130f0 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 66 tificate, certif 13100 69 63 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c icate_len, &pVal 13110 75 65 29 3b 0a 09 09 09 09 09 69 66 20 28 78 35 ue);......if (x5 13120 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 29 09_read_ret < 0) 13130 20 7b 0a 09 09 09 09 09 09 70 56 61 6c 75 65 20 {.......pValue 13140 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 = NULL;......} e 13150 6c 73 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 lse {.......ulVa 13160 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 lueLen = x509_re 13170 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 ad_ret;......}.. 13180 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 ...}......CACKEY 13190 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 131a0 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 28 25 ... returning (% 131b0 70 2f 25 6c 75 29 22 2c 20 70 56 61 6c 75 65 2c p/%lu)", pValue, 131c0 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 131d0 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... 131e0 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas 131f0 65 20 43 4b 41 5f 53 55 42 4a 45 43 54 3a 0a 09 e CKA_SUBJECT:.. 13200 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 13210 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti 13220 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA 13230 5f 53 55 42 4a 45 43 54 20 28 30 78 25 30 38 6c _SUBJECT (0x%08l 13240 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e x) ...", (unsign 13250 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 ed long) curr_at 13260 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 tr_type);......i 13270 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 f (objectclass ! 13280 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 = CKO_CERTIFICAT 13290 45 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 E) {......CACKEY 132a0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 132b0 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 ... but not gett 132c0 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 ing it because w 132d0 65 20 61 72 65 20 6e 6f 74 20 61 20 63 65 72 74 e are not a cert 132e0 69 66 69 63 61 74 65 22 29 3b 0a 0a 09 09 09 09 ificate");...... 132f0 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 .break;.....}... 13300 09 09 09 69 66 20 28 63 65 72 74 69 66 69 63 61 ...if (certifica 13310 74 65 5f 6c 65 6e 20 3e 3d 20 30 29 20 7b 0a 09 te_len >= 0) {.. 13320 09 09 09 09 78 35 30 39 5f 72 65 61 64 5f 72 65 ....x509_read_re 13330 74 20 3d 20 78 35 30 39 5f 74 6f 5f 73 75 62 6a t = x509_to_subj 13340 65 63 74 28 63 65 72 74 69 66 69 63 61 74 65 2c ect(certificate, 13350 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e certificate_len 13360 2c 20 26 70 56 61 6c 75 65 29 3b 0a 09 09 09 09 , &pValue);..... 13370 09 69 66 20 28 78 35 30 39 5f 72 65 61 64 5f 72 .if (x509_read_r 13380 65 74 20 3c 20 30 29 20 7b 0a 09 09 09 09 09 09 et < 0) {....... 13390 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 pValue = NULL;.. 133a0 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 ....} else {.... 133b0 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 ...ulValueLen = 133c0 78 35 30 39 5f 72 65 61 64 5f 72 65 74 3b 0a 09 x509_read_ret;.. 133d0 09 09 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 ....}.....}..... 133e0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 133f0 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 INTF(" ... retur 13400 6e 69 6e 67 20 25 70 2f 25 6c 75 22 2c 20 70 56 ning %p/%lu", pV 13410 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 alue, (unsigned 13420 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e long) ulValueLen 13430 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 );......break;.. 13440 09 09 63 61 73 65 20 43 4b 41 5f 49 44 3a 0a 09 ..case CKA_ID:.. 13450 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 13460 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti 13470 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA 13480 5f 49 44 20 28 30 78 25 30 38 6c 78 29 20 2e 2e _ID (0x%08lx) .. 13490 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f .", (unsigned lo 134a0 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 ng) curr_attr_ty 134b0 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 pe);......if (ob 134c0 6a 65 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b 4f jectclass == CKO 134d0 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 53 54 29 _NETSCAPE_TRUST) 134e0 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 {......CACKEY_D 134f0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e EBUG_PRINTF(" .. 13500 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e . but not gettin 13510 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20 g it because we 13520 61 72 65 20 61 20 4e 65 74 73 63 61 70 65 20 74 are a Netscape t 13530 72 75 73 74 20 6f 62 6a 65 63 74 22 29 3b 0a 0a rust object");.. 13540 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 .....break;..... 13550 7d 0a 0a 09 09 09 09 75 63 54 6d 70 42 75 66 5b }......ucTmpBuf[ 13560 30 5d 20 3d 20 28 28 69 64 65 6e 74 69 74 79 5f 0] = ((identity_ 13570 6e 75 6d 20 2b 20 31 29 20 3e 3e 20 38 29 20 26 num + 1) >> 8) & 13580 20 30 78 66 66 3b 0a 09 09 09 09 75 63 54 6d 70 0xff;.....ucTmp 13590 42 75 66 5b 31 5d 20 3d 20 20 28 69 64 65 6e 74 Buf[1] = (ident 135a0 69 74 79 5f 6e 75 6d 20 2b 20 31 29 20 26 20 30 ity_num + 1) & 0 135b0 78 66 66 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 xff;......pValue 135c0 20 3d 20 26 75 63 54 6d 70 42 75 66 3b 0a 09 09 = &ucTmpBuf;... 135d0 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 32 ..ulValueLen = 2 135e0 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 ;......CACKEY_DE 135f0 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... 13600 20 72 65 74 75 72 6e 69 6e 67 20 25 70 2f 25 6c returning %p/%l 13610 75 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 u", pValue, (uns 13620 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 igned long) ulVa 13630 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 lueLen);......br 13640 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 eak;....case CKA 13650 5f 43 45 52 54 49 46 49 43 41 54 45 5f 54 59 50 _CERTIFICATE_TYP 13660 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 E:.....CACKEY_DE 13670 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 BUG_PRINTF("Requ 13680 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 esting attribute 13690 20 43 4b 41 5f 43 45 52 54 49 46 49 43 41 54 45 CKA_CERTIFICATE 136a0 5f 54 59 50 45 20 28 30 78 25 30 38 6c 78 29 20 _TYPE (0x%08lx) 136b0 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 ...", (unsigned 136c0 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f long) curr_attr_ 136d0 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 type);......if ( 136e0 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43 objectclass != C 136f0 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 29 20 KO_CERTIFICATE) 13700 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {......CACKEY_DE 13710 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... 13720 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 but not getting 13730 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20 61 it because we a 13740 72 65 20 6e 6f 74 20 61 20 63 65 72 74 69 66 69 re not a certifi 13750 63 61 74 65 2e 22 29 3b 0a 0a 09 09 09 09 09 62 cate.");.......b 13760 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 reak;.....}..... 13770 09 2f 2a 20 57 65 20 6f 6e 6c 79 20 73 75 70 70 ./* We only supp 13780 6f 72 74 20 6f 6e 65 20 63 65 72 74 69 66 69 63 ort one certific 13790 61 74 65 20 74 79 70 65 20 2a 2f 0a 09 09 09 09 ate type */..... 137a0 63 6b 5f 63 65 72 74 69 66 69 63 61 74 65 5f 74 ck_certificate_t 137b0 79 70 65 20 3d 20 43 4b 43 5f 58 5f 35 30 39 3b ype = CKC_X_509; 137c0 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 ......pValue = & 137d0 63 6b 5f 63 65 72 74 69 66 69 63 61 74 65 5f 74 ck_certificate_t 137e0 79 70 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 ype;.....ulValue 137f0 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f Len = sizeof(ck_ 13800 63 65 72 74 69 66 69 63 61 74 65 5f 74 79 70 65 certificate_type 13810 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 );......CACKEY_D 13820 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e EBUG_PRINTF(" .. 13830 2e 20 72 65 74 75 72 6e 69 6e 67 20 43 4b 43 5f . returning CKC_ 13840 58 5f 35 30 39 20 28 25 6c 75 29 20 28 25 70 2f X_509 (%lu) (%p/ 13850 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 %lu)", (unsigned 13860 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 43 45 52 long) *((CK_CER 13870 54 49 46 49 43 41 54 45 5f 54 59 50 45 20 2a 29 TIFICATE_TYPE *) 13880 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 pValue), pValue 13890 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 138a0 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. 138b0 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca 138c0 73 65 20 43 4b 41 5f 4b 45 59 5f 54 59 50 45 3a se CKA_KEY_TYPE: 138d0 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 138e0 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 G_PRINTF("Reques 138f0 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 ting attribute C 13900 4b 41 5f 4b 45 59 5f 54 59 50 45 20 28 30 78 25 KA_KEY_TYPE (0x% 13910 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 08lx) ...", (uns 13920 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 igned long) curr 13930 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 _attr_type);.... 13940 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 ..if (objectclas 13950 73 20 21 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 s != CKO_PRIVATE 13960 5f 4b 45 59 20 26 26 20 6f 62 6a 65 63 74 63 6c _KEY && objectcl 13970 61 73 73 20 21 3d 20 43 4b 4f 5f 50 55 42 4c 49 ass != CKO_PUBLI 13980 43 5f 4b 45 59 29 20 7b 0a 09 09 09 09 09 43 41 C_KEY) {......CA 13990 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 139a0 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 F(" ... but not 139b0 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 getting it becau 139c0 73 65 20 77 65 20 61 72 65 20 6e 6f 74 20 61 20 se we are not a 139d0 6b 65 79 2e 22 29 3b 0a 0a 09 09 09 09 09 62 72 key.");.......br 139e0 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 eak;.....}...... 139f0 2f 2a 20 57 65 20 6f 6e 6c 79 20 73 75 70 70 6f /* We only suppo 13a00 72 74 20 6f 6e 65 20 6b 65 79 20 74 79 70 65 20 rt one key type 13a10 2a 2f 0a 09 09 09 09 63 6b 5f 6b 65 79 5f 74 79 */.....ck_key_ty 13a20 70 65 20 3d 20 43 4b 4b 5f 52 53 41 3b 0a 0a 09 pe = CKK_RSA;... 13a30 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f ...pValue = &ck_ 13a40 6b 65 79 5f 74 79 70 65 3b 0a 09 09 09 09 75 6c key_type;.....ul 13a50 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f ValueLen = sizeo 13a60 66 28 63 6b 5f 6b 65 79 5f 74 79 70 65 29 3b 0a f(ck_key_type);. 13a70 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 13a80 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 G_PRINTF(" ... r 13a90 65 74 75 72 6e 69 6e 67 20 43 4b 4b 5f 52 53 41 eturning CKK_RSA 13aa0 20 28 25 6c 75 29 20 28 25 70 2f 25 6c 75 29 22 (%lu) (%p/%lu)" 13ab0 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 13ac0 29 20 2a 28 28 43 4b 5f 43 45 52 54 49 46 49 43 ) *((CK_CERTIFIC 13ad0 41 54 45 5f 54 59 50 45 20 2a 29 20 70 56 61 6c ATE_TYPE *) pVal 13ae0 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e ue), pValue, (un 13af0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV 13b00 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b 13b10 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK 13b20 41 5f 53 49 47 4e 3a 0a 09 09 09 09 43 41 43 4b A_SIGN:.....CACK 13b30 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 13b40 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 "Requesting attr 13b50 69 62 75 74 65 20 43 4b 41 5f 53 49 47 4e 20 28 ibute CKA_SIGN ( 13b60 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 0x%08lx) ...", ( 13b70 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 unsigned long) c 13b80 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a urr_attr_type);. 13b90 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 .....if (objectc 13ba0 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 4e 45 54 53 lass == CKO_NETS 13bb0 43 41 50 45 5f 54 52 55 53 54 29 20 7b 0a 09 09 CAPE_TRUST) {... 13bc0 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 13bd0 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 PRINTF(" ... but 13be0 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 not getting it 13bf0 62 65 63 61 75 73 65 20 77 65 20 61 72 65 20 61 because we are a 13c00 20 4e 65 74 73 63 61 70 65 20 74 72 75 73 74 20 Netscape trust 13c10 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 09 09 object");....... 13c20 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 break;.....}.... 13c30 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 ..if (objectclas 13c40 73 20 3d 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 s == CKO_PRIVATE 13c50 5f 4b 45 59 29 20 7b 0a 09 09 09 09 09 70 56 61 _KEY) {......pVa 13c60 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a lue = &ck_true;. 13c70 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 .....ulValueLen 13c80 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 = sizeof(ck_true 13c90 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a );.....} else {. 13ca0 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 .....pValue = &c 13cb0 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 09 09 75 6c k_false;......ul 13cc0 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f ValueLen = sizeo 13cd0 66 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 09 09 09 f(ck_false);.... 13ce0 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 .}......CACKEY_D 13cf0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e EBUG_PRINTF(" .. 13d00 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 . returning %lu 13d10 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 (%p/%lu)", (unsi 13d20 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b gned long) *((CK 13d30 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 _BBOOL *) pValue 13d40 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 ), pValue, (unsi 13d50 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c gned long) ulVal 13d60 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 ueLen);......bre 13d70 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f ak;....case CKA_ 13d80 53 49 47 4e 5f 52 45 43 4f 56 45 52 3a 0a 09 09 SIGN_RECOVER:... 13d90 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 13da0 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e RINTF("Requestin 13db0 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f g attribute CKA_ 13dc0 53 49 47 4e 5f 52 45 43 4f 56 45 52 20 28 30 78 SIGN_RECOVER (0x 13dd0 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e %08lx) ...", (un 13de0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 signed long) cur 13df0 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 r_attr_type);... 13e00 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 ...if (objectcla 13e10 73 73 20 3d 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 ss == CKO_NETSCA 13e20 50 45 5f 54 52 55 53 54 29 20 7b 0a 09 09 09 09 PE_TRUST) {..... 13e30 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 13e40 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e INTF(" ... but n 13e50 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 ot getting it be 13e60 63 61 75 73 65 20 77 65 20 61 72 65 20 61 20 4e cause we are a N 13e70 65 74 73 63 61 70 65 20 74 72 75 73 74 20 6f 62 etscape trust ob 13e80 6a 65 63 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 ject");.......br 13e90 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 eak;.....}...... 13ea0 2f 2a 20 57 65 20 63 75 72 72 65 6e 74 6c 79 20 /* We currently 13eb0 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 22 53 69 only support "Si 13ec0 67 6e 20 77 69 74 68 20 41 70 70 65 6e 64 69 78 gn with Appendix 13ed0 22 20 2a 2f 0a 09 09 09 09 70 56 61 6c 75 65 20 " */.....pValue 13ee0 3d 20 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 = &ck_false;.... 13ef0 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 .ulValueLen = si 13f00 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b 0a zeof(ck_false);. 13f10 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 13f20 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 G_PRINTF(" ... r 13f30 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 eturning %lu (%p 13f40 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 /%lu)", (unsigne 13f50 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 d long) *((CK_BB 13f60 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 OOL *) pValue), 13f70 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 pValue, (unsigne 13f80 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c d long) ulValueL 13f90 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b en);......break; 13fa0 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 44 45 43 ....case CKA_DEC 13fb0 52 59 50 54 3a 0a 09 09 09 09 43 41 43 4b 45 59 RYPT:.....CACKEY 13fc0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 13fd0 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 equesting attrib 13fe0 75 74 65 20 43 4b 41 5f 44 45 43 52 59 50 54 20 ute CKA_DECRYPT 13ff0 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 (0x%08lx) ...", 14000 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 14010 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b curr_attr_type); 14020 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 ......if (object 14030 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 4e 45 54 class == CKO_NET 14040 53 43 41 50 45 5f 54 52 55 53 54 29 20 7b 0a 09 SCAPE_TRUST) {.. 14050 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 14060 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 _PRINTF(" ... bu 14070 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 t not getting it 14080 20 62 65 63 61 75 73 65 20 77 65 20 61 72 65 20 because we are 14090 61 20 4e 65 74 73 63 61 70 65 20 74 72 75 73 74 a Netscape trust 140a0 20 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 09 object");...... 140b0 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 .break;.....}... 140c0 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 ...if (objectcla 140d0 73 73 20 3d 3d 20 43 4b 4f 5f 50 52 49 56 41 54 ss == CKO_PRIVAT 140e0 45 5f 4b 45 59 20 7c 7c 20 6f 62 6a 65 63 74 63 E_KEY || objectc 140f0 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 50 55 42 4c lass == CKO_PUBL 14100 49 43 5f 4b 45 59 29 20 7b 0a 09 09 09 09 09 70 IC_KEY) {......p 14110 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 Value = &ck_true 14120 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 ;......ulValueLe 14130 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 n = sizeof(ck_tr 14140 75 65 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 ue);.....} else 14150 7b 0a 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 {......pValue = 14160 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 09 09 &ck_false;...... 14170 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a ulValueLen = siz 14180 65 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 09 eof(ck_false);.. 14190 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 ...}......CACKEY 141a0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 141b0 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c ... returning %l 141c0 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e u (%p/%lu)", (un 141d0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 signed long) *(( 141e0 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c CK_BBOOL *) pVal 141f0 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e ue), pValue, (un 14200 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV 14210 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b 14220 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK 14230 41 5f 53 45 4e 53 49 54 49 56 45 3a 0a 09 09 09 A_SENSITIVE:.... 14240 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 14250 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting 14260 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 53 attribute CKA_S 14270 45 4e 53 49 54 49 56 45 20 28 30 78 25 30 38 6c ENSITIVE (0x%08l 14280 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e x) ...", (unsign 14290 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 ed long) curr_at 142a0 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 tr_type);......i 142b0 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d f (objectclass = 142c0 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f 54 = CKO_NETSCAPE_T 142d0 52 55 53 54 29 20 7b 0a 09 09 09 09 09 43 41 43 RUST) {......CAC 142e0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 142f0 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 (" ... but not g 14300 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 etting it becaus 14310 65 20 77 65 20 61 72 65 20 61 20 4e 65 74 73 63 e we are a Netsc 14320 61 70 65 20 74 72 75 73 74 20 6f 62 6a 65 63 74 ape trust object 14330 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b ");.......break; 14340 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 .....}......if ( 14350 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d 20 43 objectclass == C 14360 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 29 20 KO_PRIVATE_KEY) 14370 7b 0a 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 {......pValue = 14380 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 09 75 &ck_true;......u 14390 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 lValueLen = size 143a0 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a 09 09 09 of(ck_true);.... 143b0 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 70 .} else {......p 143c0 56 61 6c 75 65 20 3d 20 26 63 6b 5f 66 61 6c 73 Value = &ck_fals 143d0 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75 65 4c e;......ulValueL 143e0 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 66 en = sizeof(ck_f 143f0 61 6c 73 65 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 alse);.....}.... 14400 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 14410 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 RINTF(" ... retu 14420 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c rning %lu (%p/%l 14430 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c u)", (unsigned l 14440 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c ong) *((CK_BBOOL 14450 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 *) pValue), pVa 14460 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c lue, (unsigned l 14470 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 ong) ulValueLen) 14480 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 ;......break;... 14490 09 63 61 73 65 20 43 4b 41 5f 45 58 54 52 41 43 .case CKA_EXTRAC 144a0 54 41 42 4c 45 3a 0a 09 09 09 09 43 41 43 4b 45 TABLE:.....CACKE 144b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 144c0 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri 144d0 62 75 74 65 20 43 4b 41 5f 45 58 54 52 41 43 54 bute CKA_EXTRACT 144e0 41 42 4c 45 20 28 30 78 25 30 38 6c 78 29 20 2e ABLE (0x%08lx) . 144f0 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 14500 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 14510 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f ype);......if (o 14520 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b bjectclass == CK 14530 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 53 54 O_NETSCAPE_TRUST 14540 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f ) {......CACKEY_ 14550 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 14560 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 .. but not getti 14570 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 ng it because we 14580 20 61 72 65 20 61 20 4e 65 74 73 63 61 70 65 20 are a Netscape 14590 74 72 75 73 74 20 6f 62 6a 65 63 74 22 29 3b 0a trust object");. 145a0 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 145b0 09 7d 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 .}......if (obje 145c0 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 50 ctclass == CKO_P 145d0 52 49 56 41 54 45 5f 4b 45 59 29 20 7b 0a 09 09 RIVATE_KEY) {... 145e0 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f ...pValue = &ck_ 145f0 66 61 6c 73 65 3b 0a 09 09 09 09 09 75 6c 56 61 false;......ulVa 14600 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 lueLen = sizeof( 14610 63 6b 5f 74 72 75 65 29 3b 0a 09 09 09 09 7d 20 ck_true);.....} 14620 65 6c 73 65 20 7b 0a 09 09 09 09 09 70 56 61 6c else {......pVal 14630 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 ue = &ck_true;.. 14640 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = 14650 20 73 69 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 65 sizeof(ck_false 14660 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 );.....}......CA 14670 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 14680 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e F(" ... returnin 14690 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c g %lu (%p/%lu)", 146a0 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 146b0 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 *((CK_BBOOL *) 146c0 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c pValue), pValue, 146d0 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 146e0 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... 146f0 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas 14700 65 20 43 4b 41 5f 4d 4f 44 55 4c 55 53 3a 0a 09 e CKA_MODULUS:.. 14710 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 14720 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti 14730 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA 14740 5f 4d 4f 44 55 4c 55 53 20 28 30 78 25 30 38 6c _MODULUS (0x%08l 14750 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e x) ...", (unsign 14760 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 ed long) curr_at 14770 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 tr_type);......i 14780 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d f (objectclass = 14790 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f 54 = CKO_NETSCAPE_T 147a0 52 55 53 54 29 20 7b 0a 09 09 09 09 09 43 41 43 RUST) {......CAC 147b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 147c0 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 (" ... but not g 147d0 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 etting it becaus 147e0 65 20 77 65 20 61 72 65 20 61 20 4e 65 74 73 63 e we are a Netsc 147f0 61 70 65 20 74 72 75 73 74 20 6f 62 6a 65 63 74 ape trust object 14800 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b ");.......break; 14810 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 .....}......if ( 14820 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 certificate_len 14830 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 78 35 30 >= 0) {......x50 14840 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 30 9_read_ret = x50 14850 39 5f 74 6f 5f 6d 6f 64 75 6c 75 73 28 63 65 72 9_to_modulus(cer 14860 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 66 tificate, certif 14870 69 63 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c icate_len, &pVal 14880 75 65 29 3b 0a 09 09 09 09 09 69 66 20 28 78 35 ue);......if (x5 14890 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 29 09_read_ret < 0) 148a0 20 7b 0a 09 09 09 09 09 09 70 56 61 6c 75 65 20 {.......pValue 148b0 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 = NULL;......} e 148c0 6c 73 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 lse {.......ulVa 148d0 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 lueLen = x509_re 148e0 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 ad_ret;......}.. 148f0 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 ...}......CACKEY 14900 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 14910 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 28 25 ... returning (% 14920 70 2f 25 6c 75 29 22 2c 20 70 56 61 6c 75 65 2c p/%lu)", pValue, 14930 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 14940 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... 14950 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas 14960 65 20 43 4b 41 5f 50 55 42 4c 49 43 5f 45 58 50 e CKA_PUBLIC_EXP 14970 4f 4e 45 4e 54 3a 0a 09 09 09 09 43 41 43 4b 45 ONENT:.....CACKE 14980 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 14990 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri 149a0 62 75 74 65 20 43 4b 41 5f 50 55 42 4c 49 43 5f bute CKA_PUBLIC_ 149b0 45 58 50 4f 4e 45 4e 54 20 28 30 78 25 30 38 6c EXPONENT (0x%08l 149c0 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e x) ...", (unsign 149d0 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 ed long) curr_at 149e0 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 tr_type);......i 149f0 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d f (objectclass = 14a00 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f 54 = CKO_NETSCAPE_T 14a10 52 55 53 54 29 20 7b 0a 09 09 09 09 09 43 41 43 RUST) {......CAC 14a20 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 14a30 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 (" ... but not g 14a40 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 etting it becaus 14a50 65 20 77 65 20 61 72 65 20 61 20 4e 65 74 73 63 e we are a Netsc 14a60 61 70 65 20 74 72 75 73 74 20 6f 62 6a 65 63 74 ape trust object 14a70 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b ");.......break; 14a80 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 .....}......if ( 14a90 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 certificate_len 14aa0 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 78 35 30 >= 0) {......x50 14ab0 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 30 9_read_ret = x50 14ac0 39 5f 74 6f 5f 65 78 70 6f 6e 65 6e 74 28 63 65 9_to_exponent(ce 14ad0 72 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 rtificate, certi 14ae0 66 69 63 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 ficate_len, &pVa 14af0 6c 75 65 29 3b 0a 09 09 09 09 09 69 66 20 28 78 lue);......if (x 14b00 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 509_read_ret < 0 14b10 29 20 7b 0a 09 09 09 09 09 09 70 56 61 6c 75 65 ) {.......pValue 14b20 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 = NULL;......} 14b30 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 else {.......ulV 14b40 61 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 alueLen = x509_r 14b50 65 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a ead_ret;......}. 14b60 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 ....}......CACKE 14b70 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 14b80 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 28 ... returning ( 14b90 25 70 2f 25 6c 75 29 22 2c 20 70 56 61 6c 75 65 %p/%lu)", pValue 14ba0 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 14bb0 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. 14bc0 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca 14bd0 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 44 49 47 se CKA_TRUST_DIG 14be0 49 54 41 4c 5f 53 49 47 4e 41 54 55 52 45 3a 0a ITAL_SIGNATURE:. 14bf0 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 ...case CKA_TRUS 14c00 54 5f 4e 4f 4e 5f 52 45 50 55 44 49 41 54 49 4f T_NON_REPUDIATIO 14c10 4e 3a 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 N:....case CKA_T 14c20 52 55 53 54 5f 4b 45 59 5f 45 4e 43 49 50 48 45 RUST_KEY_ENCIPHE 14c30 52 4d 45 4e 54 3a 0a 09 09 09 63 61 73 65 20 43 RMENT:....case C 14c40 4b 41 5f 54 52 55 53 54 5f 44 41 54 41 5f 45 4e KA_TRUST_DATA_EN 14c50 43 49 50 48 45 52 4d 45 4e 54 3a 0a 09 09 09 63 CIPHERMENT:....c 14c60 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 4b 45 ase CKA_TRUST_KE 14c70 59 5f 41 47 52 45 45 4d 45 4e 54 3a 0a 09 09 09 Y_AGREEMENT:.... 14c80 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 4b case CKA_TRUST_K 14c90 45 59 5f 43 45 52 54 5f 53 49 47 4e 3a 0a 09 09 EY_CERT_SIGN:... 14ca0 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f .case CKA_TRUST_ 14cb0 43 52 4c 5f 53 49 47 4e 3a 0a 09 09 09 63 61 73 CRL_SIGN:....cas 14cc0 65 20 43 4b 41 5f 54 52 55 53 54 5f 53 45 52 56 e CKA_TRUST_SERV 14cd0 45 52 5f 41 55 54 48 3a 0a 09 09 09 63 61 73 65 ER_AUTH:....case 14ce0 20 43 4b 41 5f 54 52 55 53 54 5f 43 4c 49 45 4e CKA_TRUST_CLIEN 14cf0 54 5f 41 55 54 48 3a 0a 09 09 09 63 61 73 65 20 T_AUTH:....case 14d00 43 4b 41 5f 54 52 55 53 54 5f 43 4f 44 45 5f 53 CKA_TRUST_CODE_S 14d10 49 47 4e 49 4e 47 3a 0a 09 09 09 63 61 73 65 20 IGNING:....case 14d20 43 4b 41 5f 54 52 55 53 54 5f 45 4d 41 49 4c 5f CKA_TRUST_EMAIL_ 14d30 50 52 4f 54 45 43 54 49 4f 4e 3a 0a 09 09 09 09 PROTECTION:..... 14d40 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 14d50 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 NTF("Requesting 14d60 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 54 52 attribute CKA_TR 14d70 55 53 54 5f 2e 2e 2e 20 28 30 78 25 30 38 6c 78 UST_... (0x%08lx 14d80 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 ) ...", (unsigne 14d90 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 d long) curr_att 14da0 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 r_type);......pV 14db0 61 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 73 74 alue = &ck_trust 14dc0 65 64 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c ed;.....ulValueL 14dd0 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 74 en = sizeof(ck_t 14de0 72 75 73 74 65 64 29 3b 0a 0a 09 09 09 09 43 41 rusted);......CA 14df0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 14e00 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e F(" ... returnin 14e10 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c g %lu (%p/%lu)", 14e20 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 14e30 20 2a 28 28 43 4b 5f 54 52 55 53 54 20 2a 29 20 *((CK_TRUST *) 14e40 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c pValue), pValue, 14e50 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 14e60 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... 14e70 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas 14e80 65 20 43 4b 41 5f 43 45 52 54 5f 53 48 41 31 5f e CKA_CERT_SHA1_ 14e90 48 41 53 48 3a 0a 09 09 09 09 43 41 43 4b 45 59 HASH:.....CACKEY 14ea0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 14eb0 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 equesting attrib 14ec0 75 74 65 20 43 4b 41 5f 43 45 52 54 5f 53 48 41 ute CKA_CERT_SHA 14ed0 31 5f 48 41 53 48 20 28 30 78 25 30 38 6c 78 29 1_HASH (0x%08lx) 14ee0 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned 14ef0 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr 14f00 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 _type);......if 14f10 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 (objectclass != 14f20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 CKO_NETSCAPE_TRU 14f30 53 54 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 ST) {......CACKE 14f40 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 14f50 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 ... but not get 14f60 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 ting it because 14f70 77 65 20 61 72 65 20 6e 6f 74 20 61 20 4e 65 74 we are not a Net 14f80 73 63 61 70 65 20 74 72 75 73 74 20 6f 62 6a 65 scape trust obje 14f90 63 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 ct");.......brea 14fa0 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 53 48 k;.....}......SH 14fb0 41 31 52 65 73 65 74 28 26 73 68 61 31 5f 63 74 A1Reset(&sha1_ct 14fc0 78 29 3b 0a 09 09 09 09 53 48 41 31 49 6e 70 75 x);.....SHA1Inpu 14fd0 74 28 26 73 68 61 31 5f 63 74 78 2c 20 63 65 72 t(&sha1_ctx, cer 14fe0 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 66 tificate, certif 14ff0 69 63 61 74 65 5f 6c 65 6e 29 3b 0a 09 09 09 09 icate_len);..... 15000 53 48 41 31 52 65 73 75 6c 74 28 26 73 68 61 31 SHA1Result(&sha1 15010 5f 63 74 78 2c 20 73 68 61 31 5f 68 61 73 68 29 _ctx, sha1_hash) 15020 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 ;......pValue = 15030 73 68 61 31 5f 68 61 73 68 3b 0a 09 09 09 09 75 sha1_hash;.....u 15040 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 lValueLen = size 15050 6f 66 28 73 68 61 31 5f 68 61 73 68 29 3b 0a 0a of(sha1_hash);.. 15060 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 15070 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 _PRINTF(" ... re 15080 74 75 72 6e 69 6e 67 20 25 70 2f 25 6c 75 22 2c turning %p/%lu", 15090 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e pValue, (unsign 150a0 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 ed long) ulValue 150b0 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b Len);......break 150c0 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 43 45 ;....case CKA_CE 150d0 52 54 5f 4d 44 35 5f 48 41 53 48 3a 0a 09 09 09 RT_MD5_HASH:.... 150e0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 150f0 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting 15100 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 43 attribute CKA_C 15110 45 52 54 5f 4d 44 35 5f 48 41 53 48 20 28 30 78 ERT_MD5_HASH (0x 15120 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e %08lx) ...", (un 15130 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 signed long) cur 15140 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 r_attr_type);... 15150 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 ...if (objectcla 15160 73 73 20 21 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 ss != CKO_NETSCA 15170 50 45 5f 54 52 55 53 54 29 20 7b 0a 09 09 09 09 PE_TRUST) {..... 15180 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 15190 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e INTF(" ... but n 151a0 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 ot getting it be 151b0 63 61 75 73 65 20 77 65 20 61 72 65 20 6e 6f 74 cause we are not 151c0 20 61 20 4e 65 74 73 63 61 70 65 20 74 72 75 73 a Netscape trus 151d0 74 20 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 t object");..... 151e0 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a ..break;.....}.. 151f0 09 09 09 09 4d 44 35 49 6e 69 74 28 26 6d 64 35 ....MD5Init(&md5 15200 5f 63 74 78 29 3b 0a 09 09 09 09 4d 44 35 55 70 _ctx);.....MD5Up 15210 64 61 74 65 28 26 6d 64 35 5f 63 74 78 2c 20 63 date(&md5_ctx, c 15220 65 72 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 ertificate, cert 15230 69 66 69 63 61 74 65 5f 6c 65 6e 29 3b 0a 09 09 ificate_len);... 15240 09 09 4d 44 35 46 69 6e 61 6c 28 6d 64 35 5f 68 ..MD5Final(md5_h 15250 61 73 68 2c 20 26 6d 64 35 5f 63 74 78 29 3b 0a ash, &md5_ctx);. 15260 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 6d 64 .....pValue = md 15270 35 5f 68 61 73 68 3b 0a 09 09 09 09 75 6c 56 61 5_hash;.....ulVa 15280 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 lueLen = sizeof( 15290 6d 64 35 5f 68 61 73 68 29 3b 0a 0a 09 09 09 09 md5_hash);...... 152a0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 152b0 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e NTF(" ... return 152c0 69 6e 67 20 25 70 2f 25 6c 75 22 2c 20 70 56 61 ing %p/%lu", pVa 152d0 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c lue, (unsigned l 152e0 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 ong) ulValueLen) 152f0 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 ;......break;... 15300 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 09 70 56 .default:.....pV 15310 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 alue = NULL;.... 15320 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 28 43 .ulValueLen = (C 15330 4b 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 09 09 09 09 K_LONG) -1;..... 15340 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09 69 66 break;...}....if 15350 20 28 28 28 43 4b 5f 4c 4f 4e 47 29 20 75 6c 56 (((CK_LONG) ulV 15360 61 6c 75 65 4c 65 6e 29 20 21 3d 20 28 28 43 4b alueLen) != ((CK 15370 5f 4c 4f 4e 47 29 20 2d 31 29 29 20 7b 0a 09 09 _LONG) -1)) {... 15380 09 2f 2a 20 50 75 73 68 20 63 75 72 72 5f 61 74 ./* Push curr_at 15390 74 72 20 6f 6e 74 6f 20 74 68 65 20 73 74 61 63 tr onto the stac 153a0 6b 20 2a 2f 0a 09 09 09 63 75 72 72 5f 61 74 74 k */....curr_att 153b0 72 2e 74 79 70 65 20 3d 20 63 75 72 72 5f 61 74 r.type = curr_at 153c0 74 72 5f 74 79 70 65 3b 0a 09 09 09 63 75 72 72 tr_type;....curr 153d0 5f 61 74 74 72 2e 75 6c 56 61 6c 75 65 4c 65 6e _attr.ulValueLen 153e0 20 3d 20 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a 0a = ulValueLen;.. 153f0 09 09 09 63 75 72 72 5f 61 74 74 72 2e 70 56 61 ...curr_attr.pVa 15400 6c 75 65 20 3d 20 6d 61 6c 6c 6f 63 28 63 75 72 lue = malloc(cur 15410 72 5f 61 74 74 72 2e 75 6c 56 61 6c 75 65 4c 65 r_attr.ulValueLe 15420 6e 29 3b 0a 09 09 09 6d 65 6d 63 70 79 28 63 75 n);....memcpy(cu 15430 72 72 5f 61 74 74 72 2e 70 56 61 6c 75 65 2c 20 rr_attr.pValue, 15440 70 56 61 6c 75 65 2c 20 63 75 72 72 5f 61 74 74 pValue, curr_att 15450 72 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a r.ulValueLen);.. 15460 09 09 09 69 66 20 28 70 56 61 6c 75 65 5f 66 72 ...if (pValue_fr 15470 65 65 20 26 26 20 70 56 61 6c 75 65 29 20 7b 0a ee && pValue) {. 15480 09 09 09 09 66 72 65 65 28 70 56 61 6c 75 65 29 ....free(pValue) 15490 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 6e ;....}.....if (n 154a0 75 6d 61 74 74 72 73 20 3e 3d 20 72 65 74 76 61 umattrs >= retva 154b0 6c 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09 09 72 l_count) {.....r 154c0 65 74 76 61 6c 20 3d 20 72 65 61 6c 6c 6f 63 28 etval = realloc( 154d0 72 65 74 76 61 6c 2c 20 72 65 74 76 61 6c 5f 63 retval, retval_c 154e0 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 28 2a 72 ount * sizeof(*r 154f0 65 74 76 61 6c 29 29 3b 0a 09 09 09 7d 0a 0a 09 etval));....}... 15500 09 09 6d 65 6d 63 70 79 28 26 72 65 74 76 61 6c ..memcpy(&retval 15510 5b 6e 75 6d 61 74 74 72 73 5d 2c 20 26 63 75 72 [numattrs], &cur 15520 72 5f 61 74 74 72 2c 20 73 69 7a 65 6f 66 28 63 r_attr, sizeof(c 15530 75 72 72 5f 61 74 74 72 29 29 3b 0a 09 09 09 6e urr_attr));....n 15540 75 6d 61 74 74 72 73 2b 2b 3b 0a 09 09 7d 0a 09 umattrs++;...}.. 15550 7d 0a 0a 09 69 66 20 28 6e 75 6d 61 74 74 72 73 }...if (numattrs 15560 20 21 3d 20 30 29 20 7b 0a 09 09 72 65 74 76 61 != 0) {...retva 15570 6c 5f 63 6f 75 6e 74 20 3d 20 6e 75 6d 61 74 74 l_count = numatt 15580 72 73 3b 0a 09 09 72 65 74 76 61 6c 20 3d 20 72 rs;...retval = r 15590 65 61 6c 6c 6f 63 28 72 65 74 76 61 6c 2c 20 72 ealloc(retval, r 155a0 65 74 76 61 6c 5f 63 6f 75 6e 74 20 2a 20 73 69 etval_count * si 155b0 7a 65 6f 66 28 2a 72 65 74 76 61 6c 29 29 3b 0a zeof(*retval));. 155c0 09 7d 20 65 6c 73 65 20 7b 0a 09 09 66 72 65 65 .} else {...free 155d0 28 72 65 74 76 61 6c 29 3b 0a 0a 09 09 72 65 74 (retval);....ret 155e0 76 61 6c 20 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a val = NULL;..}.. 155f0 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 6e 75 6d .*pulCount = num 15600 61 74 74 72 73 3b 0a 0a 09 43 41 43 4b 45 59 5f attrs;...CACKEY_ 15610 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 15620 74 75 72 6e 69 6e 67 20 25 6c 75 20 6f 62 6a 65 turning %lu obje 15630 63 74 73 20 28 25 70 29 2e 22 2c 20 6e 75 6d 61 cts (%p).", numa 15640 74 74 72 73 2c 20 72 65 74 76 61 6c 29 3b 0a 0a ttrs, retval);.. 15650 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b .return(retval); 15660 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 .}..static void 15670 63 61 63 6b 65 79 5f 66 72 65 65 5f 69 64 65 6e cackey_free_iden 15680 74 69 74 69 65 73 28 73 74 72 75 63 74 20 63 61 tities(struct ca 15690 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 69 ckey_identity *i 156a0 64 65 6e 74 69 74 69 65 73 2c 20 75 6e 73 69 67 dentities, unsig 156b0 6e 65 64 20 6c 6f 6e 67 20 69 64 65 6e 74 69 74 ned long identit 156c0 69 65 73 5f 63 6f 75 6e 74 29 20 7b 0a 09 43 4b ies_count) {..CK 156d0 5f 41 54 54 52 49 42 55 54 45 20 2a 63 75 72 72 _ATTRIBUTE *curr 156e0 5f 61 74 74 72 3b 0a 09 75 6e 73 69 67 6e 65 64 _attr;..unsigned 156f0 20 6c 6f 6e 67 20 69 64 5f 69 64 78 2c 20 61 74 long id_idx, at 15700 74 72 5f 69 64 78 3b 0a 0a 09 69 66 20 28 69 64 tr_idx;...if (id 15710 65 6e 74 69 74 69 65 73 20 3d 3d 20 4e 55 4c 4c entities == NULL 15720 20 7c 7c 20 69 64 65 6e 74 69 74 69 65 73 5f 63 || identities_c 15730 6f 75 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 09 72 ount == 0) {...r 15740 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 66 6f 72 20 eturn;..}...for 15750 28 69 64 5f 69 64 78 20 3d 20 30 3b 20 69 64 5f (id_idx = 0; id_ 15760 69 64 78 20 3c 20 69 64 65 6e 74 69 74 69 65 73 idx < identities 15770 5f 63 6f 75 6e 74 3b 20 69 64 5f 69 64 78 2b 2b _count; id_idx++ 15780 29 20 7b 0a 09 09 69 66 20 28 69 64 65 6e 74 69 ) {...if (identi 15790 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 ties[id_idx].att 157a0 72 69 62 75 74 65 73 29 20 7b 0a 09 09 09 66 6f ributes) {....fo 157b0 72 20 28 61 74 74 72 5f 69 64 78 20 3d 20 30 3b r (attr_idx = 0; 157c0 20 61 74 74 72 5f 69 64 78 20 3c 20 69 64 65 6e attr_idx < iden 157d0 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 tities[id_idx].a 157e0 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 3b ttributes_count; 157f0 20 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 attr_idx++) {.. 15800 09 09 09 63 75 72 72 5f 61 74 74 72 20 3d 20 26 ...curr_attr = & 15810 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 identities[id_id 15820 78 5d 2e 61 74 74 72 69 62 75 74 65 73 5b 61 74 x].attributes[at 15830 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 09 09 69 66 tr_idx];......if 15840 20 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 (curr_attr->pVa 15850 6c 75 65 29 20 7b 0a 09 09 09 09 09 66 72 65 65 lue) {......free 15860 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c (curr_attr->pVal 15870 75 65 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 0a ue);.....}....}. 15880 0a 09 09 09 69 66 20 28 69 64 65 6e 74 69 74 69 ....if (identiti 15890 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 es[id_idx].attri 158a0 62 75 74 65 73 29 20 7b 0a 09 09 09 09 66 72 65 butes) {.....fre 158b0 65 28 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f e(identities[id_ 158c0 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 29 idx].attributes) 158d0 3b 0a 09 09 09 7d 0a 0a 09 09 09 63 61 63 6b 65 ;....}.....cacke 158e0 79 5f 66 72 65 65 5f 63 65 72 74 73 28 69 64 65 y_free_certs(ide 158f0 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e ntities[id_idx]. 15900 70 63 73 63 5f 69 64 65 6e 74 69 74 79 2c 20 31 pcsc_identity, 1 15910 2c 20 31 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 66 , 1);...}..}...f 15920 72 65 65 28 69 64 65 6e 74 69 74 69 65 73 29 3b ree(identities); 15930 0a 7d 0a 0a 73 74 61 74 69 63 20 73 74 72 75 63 .}..static struc 15940 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 t cackey_identit 15950 79 20 2a 63 61 63 6b 65 79 5f 72 65 61 64 5f 69 y *cackey_read_i 15960 64 65 6e 74 69 74 69 65 73 28 73 74 72 75 63 74 dentities(struct 15970 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c cackey_slot *sl 15980 6f 74 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ot, unsigned lon 15990 67 20 2a 69 64 73 5f 66 6f 75 6e 64 29 20 7b 0a g *ids_found) {. 159a0 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 70 .struct cackey_p 159b0 63 73 63 5f 69 64 65 6e 74 69 74 79 20 2a 70 63 csc_identity *pc 159c0 73 63 5f 69 64 65 6e 74 69 74 69 65 73 3b 0a 09 sc_identities;.. 159d0 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 69 64 struct cackey_id 159e0 65 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 74 69 entity *identiti 159f0 65 73 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f es;..unsigned lo 15a00 6e 67 20 6e 75 6d 5f 69 64 73 2c 20 69 64 5f 69 ng num_ids, id_i 15a10 64 78 2c 20 63 75 72 72 5f 69 64 5f 74 79 70 65 dx, curr_id_type 15a20 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ;..unsigned long 15a30 20 6e 75 6d 5f 63 65 72 74 73 2c 20 6e 75 6d 5f num_certs, num_ 15a40 65 78 74 72 61 5f 63 65 72 74 73 2c 20 63 65 72 extra_certs, cer 15a50 74 5f 69 64 78 3b 0a 0a 09 43 41 43 4b 45 59 5f t_idx;...CACKEY_ 15a60 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 15a70 6c 6c 65 64 2e 22 29 3b 0a 0a 09 6e 75 6d 5f 65 lled.");...num_e 15a80 78 74 72 61 5f 63 65 72 74 73 20 3d 20 73 69 7a xtra_certs = siz 15a90 65 6f 66 28 65 78 74 72 61 5f 63 65 72 74 73 29 eof(extra_certs) 15aa0 20 2f 20 73 69 7a 65 6f 66 28 65 78 74 72 61 5f / sizeof(extra_ 15ab0 63 65 72 74 73 5b 30 5d 29 3b 0a 0a 09 69 66 20 certs[0]);...if 15ac0 28 69 64 73 5f 66 6f 75 6e 64 20 3d 3d 20 4e 55 (ids_found == NU 15ad0 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 15ae0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 15af0 6f 72 2e 20 20 69 64 73 5f 66 6f 75 6e 64 20 69 or. ids_found i 15b00 73 20 4e 55 4c 4c 22 29 3b 0a 0a 09 09 72 65 74 s NULL");....ret 15b10 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 urn(NULL);..}... 15b20 70 63 73 63 5f 69 64 65 6e 74 69 74 69 65 73 20 pcsc_identities 15b30 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 63 65 = cackey_read_ce 15b40 72 74 73 28 73 6c 6f 74 2c 20 4e 55 4c 4c 2c 20 rts(slot, NULL, 15b50 26 6e 75 6d 5f 63 65 72 74 73 29 3b 0a 09 69 66 &num_certs);..if 15b60 20 28 70 63 73 63 5f 69 64 65 6e 74 69 74 69 65 (pcsc_identitie 15b70 73 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 2f s != NULL) {.../ 15b80 2a 20 43 6f 6e 76 65 72 74 20 6e 75 6d 62 65 72 * Convert number 15b90 20 6f 66 20 43 65 72 74 73 20 74 6f 20 6e 75 6d of Certs to num 15ba0 62 65 72 20 6f 66 20 6f 62 6a 65 63 74 73 20 2a ber of objects * 15bb0 2f 0a 09 09 6e 75 6d 5f 69 64 73 20 3d 20 28 43 /...num_ids = (C 15bc0 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 20 2d KO_PRIVATE_KEY - 15bd0 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 CKO_CERTIFICATE 15be0 20 2b 20 31 29 20 2a 20 6e 75 6d 5f 63 65 72 74 + 1) * num_cert 15bf0 73 3b 0a 09 09 6e 75 6d 5f 69 64 73 20 2b 3d 20 s;...num_ids += 15c00 6e 75 6d 5f 65 78 74 72 61 5f 63 65 72 74 73 20 num_extra_certs 15c10 2a 20 32 3b 0a 0a 09 09 69 64 65 6e 74 69 74 69 * 2;....identiti 15c20 65 73 20 3d 20 6d 61 6c 6c 6f 63 28 6e 75 6d 5f es = malloc(num_ 15c30 69 64 73 20 2a 20 73 69 7a 65 6f 66 28 2a 69 64 ids * sizeof(*id 15c40 65 6e 74 69 74 69 65 73 29 29 3b 0a 0a 09 09 2f entities));..../ 15c50 2a 20 41 64 64 20 63 65 72 74 69 66 69 63 61 74 * Add certificat 15c60 65 73 2c 20 70 75 62 6c 69 63 20 6b 65 79 73 2c es, public keys, 15c70 20 61 6e 64 20 70 72 69 76 61 74 65 20 6b 65 79 and private key 15c80 73 20 66 72 6f 6d 20 74 68 65 20 73 6d 61 72 74 s from the smart 15c90 63 61 72 64 20 2a 2f 0a 09 09 69 64 5f 69 64 78 card */...id_idx 15ca0 20 3d 20 30 3b 0a 09 09 66 6f 72 20 28 63 65 72 = 0;...for (cer 15cb0 74 5f 69 64 78 20 3d 20 30 3b 20 63 65 72 74 5f t_idx = 0; cert_ 15cc0 69 64 78 20 3c 20 6e 75 6d 5f 63 65 72 74 73 3b idx < num_certs; 15cd0 20 63 65 72 74 5f 69 64 78 2b 2b 29 20 7b 0a 09 cert_idx++) {.. 15ce0 09 09 66 6f 72 20 28 63 75 72 72 5f 69 64 5f 74 ..for (curr_id_t 15cf0 79 70 65 20 3d 20 43 4b 4f 5f 43 45 52 54 49 46 ype = CKO_CERTIF 15d00 49 43 41 54 45 3b 20 63 75 72 72 5f 69 64 5f 74 ICATE; curr_id_t 15d10 79 70 65 20 3c 3d 20 43 4b 4f 5f 50 52 49 56 41 ype <= CKO_PRIVA 15d20 54 45 5f 4b 45 59 3b 20 63 75 72 72 5f 69 64 5f TE_KEY; curr_id_ 15d30 74 79 70 65 2b 2b 29 20 7b 0a 09 09 09 09 69 64 type++) {.....id 15d40 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d entities[id_idx] 15d50 2e 61 74 74 72 69 62 75 74 65 73 20 3d 20 63 61 .attributes = ca 15d60 63 6b 65 79 5f 67 65 74 5f 61 74 74 72 69 62 75 ckey_get_attribu 15d70 74 65 73 28 63 75 72 72 5f 69 64 5f 74 79 70 65 tes(curr_id_type 15d80 2c 20 26 70 63 73 63 5f 69 64 65 6e 74 69 74 69 , &pcsc_identiti 15d90 65 73 5b 63 65 72 74 5f 69 64 78 5d 2c 20 63 65 es[cert_idx], ce 15da0 72 74 5f 69 64 78 2c 20 26 69 64 65 6e 74 69 74 rt_idx, &identit 15db0 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 ies[id_idx].attr 15dc0 69 62 75 74 65 73 5f 63 6f 75 6e 74 29 3b 0a 0a ibutes_count);.. 15dd0 09 09 09 09 69 64 65 6e 74 69 74 69 65 73 5b 69 ....identities[i 15de0 64 5f 69 64 78 5d 2e 70 63 73 63 5f 69 64 65 6e d_idx].pcsc_iden 15df0 74 69 74 79 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 tity = malloc(si 15e00 7a 65 6f 66 28 2a 69 64 65 6e 74 69 74 69 65 73 zeof(*identities 15e10 5b 69 64 5f 69 64 78 5d 2e 70 63 73 63 5f 69 64 [id_idx].pcsc_id 15e20 65 6e 74 69 74 79 29 29 3b 0a 09 09 09 09 6d 65 entity));.....me 15e30 6d 63 70 79 28 69 64 65 6e 74 69 74 69 65 73 5b mcpy(identities[ 15e40 69 64 5f 69 64 78 5d 2e 70 63 73 63 5f 69 64 65 id_idx].pcsc_ide 15e50 6e 74 69 74 79 2c 20 26 70 63 73 63 5f 69 64 65 ntity, &pcsc_ide 15e60 6e 74 69 74 69 65 73 5b 63 65 72 74 5f 69 64 78 ntities[cert_idx 15e70 5d 2c 20 73 69 7a 65 6f 66 28 2a 69 64 65 6e 74 ], sizeof(*ident 15e80 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 70 63 ities[id_idx].pc 15e90 73 63 5f 69 64 65 6e 74 69 74 79 29 29 3b 0a 0a sc_identity));.. 15ea0 09 09 09 09 69 64 65 6e 74 69 74 69 65 73 5b 69 ....identities[i 15eb0 64 5f 69 64 78 5d 2e 70 63 73 63 5f 69 64 65 6e d_idx].pcsc_iden 15ec0 74 69 74 79 2d 3e 63 65 72 74 69 66 69 63 61 74 tity->certificat 15ed0 65 20 3d 20 6d 61 6c 6c 6f 63 28 70 63 73 63 5f e = malloc(pcsc_ 15ee0 69 64 65 6e 74 69 74 69 65 73 5b 63 65 72 74 5f identities[cert_ 15ef0 69 64 78 5d 2e 63 65 72 74 69 66 69 63 61 74 65 idx].certificate 15f00 5f 6c 65 6e 29 3b 0a 09 09 09 09 6d 65 6d 63 70 _len);.....memcp 15f10 79 28 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f y(identities[id_ 15f20 69 64 78 5d 2e 70 63 73 63 5f 69 64 65 6e 74 69 idx].pcsc_identi 15f30 74 79 2d 3e 63 65 72 74 69 66 69 63 61 74 65 2c ty->certificate, 15f40 20 70 63 73 63 5f 69 64 65 6e 74 69 74 69 65 73 pcsc_identities 15f50 5b 63 65 72 74 5f 69 64 78 5d 2e 63 65 72 74 69 [cert_idx].certi 15f60 66 69 63 61 74 65 2c 20 70 63 73 63 5f 69 64 65 ficate, pcsc_ide 15f70 6e 74 69 74 69 65 73 5b 63 65 72 74 5f 69 64 78 ntities[cert_idx 15f80 5d 2e 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 ].certificate_le 15f90 6e 29 3b 0a 0a 09 09 09 09 69 64 5f 69 64 78 2b n);......id_idx+ 15fa0 2b 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 63 +;....}...}....c 15fb0 61 63 6b 65 79 5f 66 72 65 65 5f 63 65 72 74 73 ackey_free_certs 15fc0 28 70 63 73 63 5f 69 64 65 6e 74 69 74 69 65 73 (pcsc_identities 15fd0 2c 20 6e 75 6d 5f 63 65 72 74 73 2c 20 31 29 3b , num_certs, 1); 15fe0 0a 0a 09 09 2f 2a 20 41 64 64 20 44 6f 44 20 43 ..../* Add DoD C 15ff0 65 72 74 69 66 69 63 61 74 65 73 20 61 6e 64 20 ertificates and 16000 4e 65 74 73 63 61 70 65 20 54 72 75 73 74 20 4f Netscape Trust O 16010 62 6a 65 63 74 73 20 2a 2f 0a 09 09 66 6f 72 20 bjects */...for 16020 28 63 65 72 74 5f 69 64 78 20 3d 20 30 3b 20 63 (cert_idx = 0; c 16030 65 72 74 5f 69 64 78 20 3c 20 6e 75 6d 5f 65 78 ert_idx < num_ex 16040 74 72 61 5f 63 65 72 74 73 3b 20 63 65 72 74 5f tra_certs; cert_ 16050 69 64 78 2b 2b 29 20 7b 0a 09 09 09 69 64 65 6e idx++) {....iden 16060 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 70 tities[id_idx].p 16070 63 73 63 5f 69 64 65 6e 74 69 74 79 20 3d 20 4e csc_identity = N 16080 55 4c 4c 3b 0a 09 09 09 69 64 65 6e 74 69 74 69 ULL;....identiti 16090 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 es[id_idx].attri 160a0 62 75 74 65 73 20 3d 20 63 61 63 6b 65 79 5f 67 butes = cackey_g 160b0 65 74 5f 61 74 74 72 69 62 75 74 65 73 28 43 4b et_attributes(CK 160c0 4f 5f 43 45 52 54 49 46 49 43 41 54 45 2c 20 26 O_CERTIFICATE, & 160d0 65 78 74 72 61 5f 63 65 72 74 73 5b 63 65 72 74 extra_certs[cert 160e0 5f 69 64 78 5d 2c 20 30 78 66 30 30 30 20 7c 20 _idx], 0xf000 | 160f0 63 65 72 74 5f 69 64 78 2c 20 26 69 64 65 6e 74 cert_idx, &ident 16100 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 ities[id_idx].at 16110 74 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 29 3b tributes_count); 16120 0a 0a 09 09 09 69 64 5f 69 64 78 2b 2b 3b 0a 09 .....id_idx++;.. 16130 09 7d 0a 0a 09 09 66 6f 72 20 28 63 65 72 74 5f .}....for (cert_ 16140 69 64 78 20 3d 20 30 3b 20 63 65 72 74 5f 69 64 idx = 0; cert_id 16150 78 20 3c 20 6e 75 6d 5f 65 78 74 72 61 5f 63 65 x < num_extra_ce 16160 72 74 73 3b 20 63 65 72 74 5f 69 64 78 2b 2b 29 rts; cert_idx++) 16170 20 7b 0a 09 09 09 69 64 65 6e 74 69 74 69 65 73 {....identities 16180 5b 69 64 5f 69 64 78 5d 2e 70 63 73 63 5f 69 64 [id_idx].pcsc_id 16190 65 6e 74 69 74 79 20 3d 20 4e 55 4c 4c 3b 0a 09 entity = NULL;.. 161a0 09 09 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f ..identities[id_ 161b0 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 20 idx].attributes 161c0 3d 20 63 61 63 6b 65 79 5f 67 65 74 5f 61 74 74 = cackey_get_att 161d0 72 69 62 75 74 65 73 28 43 4b 4f 5f 4e 45 54 53 ributes(CKO_NETS 161e0 43 41 50 45 5f 54 52 55 53 54 2c 20 26 65 78 74 CAPE_TRUST, &ext 161f0 72 61 5f 63 65 72 74 73 5b 63 65 72 74 5f 69 64 ra_certs[cert_id 16200 78 5d 2c 20 30 78 66 30 30 30 20 7c 20 63 65 72 x], 0xf000 | cer 16210 74 5f 69 64 78 2c 20 26 69 64 65 6e 74 69 74 69 t_idx, &identiti 16220 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 es[id_idx].attri 16230 62 75 74 65 73 5f 63 6f 75 6e 74 29 3b 0a 0a 09 butes_count);... 16240 09 09 69 64 5f 69 64 78 2b 2b 3b 0a 09 09 7d 0a ..id_idx++;...}. 16250 0a 09 09 2a 69 64 73 5f 66 6f 75 6e 64 20 3d 20 ...*ids_found = 16260 6e 75 6d 5f 69 64 73 3b 0a 09 09 72 65 74 75 72 num_ids;...retur 16270 6e 28 69 64 65 6e 74 69 74 69 65 73 29 3b 0a 09 n(identities);.. 16280 7d 0a 0a 09 2a 69 64 73 5f 66 6f 75 6e 64 20 3d }...*ids_found = 16290 20 30 3b 0a 09 72 65 74 75 72 6e 28 4e 55 4c 4c 0;..return(NULL 162a0 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 162b0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 162c0 43 5f 49 6e 69 74 69 61 6c 69 7a 65 29 28 43 4b C_Initialize)(CK 162d0 5f 56 4f 49 44 5f 50 54 52 20 70 49 6e 69 74 41 _VOID_PTR pInitA 162e0 72 67 73 29 20 7b 0a 09 43 4b 5f 43 5f 49 4e 49 rgs) {..CK_C_INI 162f0 54 49 41 4c 49 5a 45 5f 41 52 47 53 20 43 4b 5f TIALIZE_ARGS CK_ 16300 50 54 52 20 61 72 67 73 3b 0a 09 75 69 6e 74 33 PTR args;..uint3 16310 32 5f 74 20 69 64 78 3b 0a 09 69 6e 74 20 6d 75 2_t idx;..int mu 16320 74 65 78 5f 69 6e 69 74 5f 72 65 74 3b 0a 0a 09 tex_init_ret;... 16330 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 16340 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 16350 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 69 6e 69 ..if (cackey_ini 16360 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 16370 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 16380 46 28 22 45 72 72 6f 72 2e 20 20 41 6c 72 65 61 F("Error. Alrea 16390 64 79 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 dy initialized." 163a0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 163b0 5f 43 52 59 50 54 4f 4b 49 5f 41 4c 52 45 41 44 _CRYPTOKI_ALREAD 163c0 59 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a Y_INITIALIZED);. 163d0 09 7d 0a 0a 09 69 66 20 28 70 49 6e 69 74 41 72 .}...if (pInitAr 163e0 67 73 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 gs != NULL) {... 163f0 61 72 67 73 20 3d 20 70 49 6e 69 74 41 72 67 73 args = pInitArgs 16400 3b 0a 09 09 6d 65 6d 63 70 79 28 26 63 61 63 6b ;...memcpy(&cack 16410 65 79 5f 61 72 67 73 2c 20 61 72 67 73 2c 20 73 ey_args, args, s 16420 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 61 72 67 izeof(cackey_arg 16430 73 29 29 3b 0a 0a 09 09 69 66 20 28 61 72 67 73 s));....if (args 16440 2d 3e 43 72 65 61 74 65 4d 75 74 65 78 20 3d 3d ->CreateMutex == 16450 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 44 NULL || args->D 16460 65 73 74 72 6f 79 4d 75 74 65 78 20 3d 3d 20 4e estroyMutex == N 16470 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 4c 6f 63 ULL || args->Loc 16480 6b 4d 75 74 65 78 20 3d 3d 20 4e 55 4c 4c 20 7c kMutex == NULL | 16490 7c 20 61 72 67 73 2d 3e 55 6e 6c 6f 63 6b 4d 75 | args->UnlockMu 164a0 74 65 78 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 tex == NULL) {.. 164b0 09 09 69 66 20 28 61 72 67 73 2d 3e 43 72 65 61 ..if (args->Crea 164c0 74 65 4d 75 74 65 78 20 21 3d 20 4e 55 4c 4c 20 teMutex != NULL 164d0 7c 7c 20 61 72 67 73 2d 3e 44 65 73 74 72 6f 79 || args->Destroy 164e0 4d 75 74 65 78 20 21 3d 20 4e 55 4c 4c 20 7c 7c Mutex != NULL || 164f0 20 61 72 67 73 2d 3e 4c 6f 63 6b 4d 75 74 65 78 args->LockMutex 16500 20 21 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 != NULL || args 16510 2d 3e 55 6e 6c 6f 63 6b 4d 75 74 65 78 20 21 3d ->UnlockMutex != 16520 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 43 41 43 NULL) {.....CAC 16530 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 16540 28 22 45 72 72 6f 72 2e 20 53 6f 6d 65 2c 20 62 ("Error. Some, b 16550 75 74 20 6e 6f 74 20 41 6c 6c 20 74 68 72 65 61 ut not All threa 16560 64 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 ding primitives 16570 70 72 6f 76 69 64 65 64 2e 22 29 3b 0a 0a 09 09 provided.");.... 16580 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG 16590 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 09 09 UMENTS_BAD);.... 165a0 7d 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a }...}..} else {. 165b0 09 09 63 61 63 6b 65 79 5f 61 72 67 73 2e 43 72 ..cackey_args.Cr 165c0 65 61 74 65 4d 75 74 65 78 20 3d 20 4e 55 4c 4c eateMutex = NULL 165d0 3b 0a 09 09 63 61 63 6b 65 79 5f 61 72 67 73 2e ;...cackey_args. 165e0 44 65 73 74 72 6f 79 4d 75 74 65 78 20 3d 20 4e DestroyMutex = N 165f0 55 4c 4c 3b 0a 09 09 63 61 63 6b 65 79 5f 61 72 ULL;...cackey_ar 16600 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 20 3d 20 4e gs.LockMutex = N 16610 55 4c 4c 3b 0a 09 09 63 61 63 6b 65 79 5f 61 72 ULL;...cackey_ar 16620 67 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 20 3d gs.UnlockMutex = 16630 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 6b 65 79 5f NULL;...cackey_ 16640 61 72 67 73 2e 66 6c 61 67 73 20 3d 20 30 3b 0a args.flags = 0;. 16650 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 .}...for (idx = 16660 30 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 0; idx < (sizeof 16670 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 16680 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke 16690 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 3b y_sessions[0])); 166a0 20 69 64 78 2b 2b 29 20 7b 0a 09 09 63 61 63 6b idx++) {...cack 166b0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d ey_sessions[idx] 166c0 2e 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 7d 0a .active = 0;..}. 166d0 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 ..for (idx = 0; 166e0 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 idx < (sizeof(ca 166f0 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 ckey_slots) / si 16700 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 16710 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b s[0])); idx++) { 16720 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ...cackey_slots[ 16730 69 64 78 5d 2e 61 63 74 69 76 65 20 3d 20 30 3b idx].active = 0; 16740 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ...cackey_slots[ 16750 69 64 78 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 idx].pcsc_reader 16760 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 6b 65 = NULL;...cacke 16770 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 74 72 61 y_slots[idx].tra 16780 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3d nsaction_depth = 16790 20 30 3b 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 0;...cackey_slo 167a0 74 73 5b 69 64 78 5d 2e 74 72 61 6e 73 61 63 74 ts[idx].transact 167b0 69 6f 6e 5f 6e 65 65 64 5f 68 77 5f 6c 6f 63 6b ion_need_hw_lock 167c0 20 3d 20 30 3b 0a 09 09 63 61 63 6b 65 79 5f 73 = 0;...cackey_s 167d0 6c 6f 74 73 5b 69 64 78 5d 2e 73 6c 6f 74 5f 72 lots[idx].slot_r 167e0 65 73 65 74 20 3d 20 30 3b 0a 09 09 63 61 63 6b eset = 0;...cack 167f0 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 74 6f ey_slots[idx].to 16800 6b 65 6e 5f 66 6c 61 67 73 20 3d 20 30 3b 0a 09 ken_flags = 0;.. 16810 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 .cackey_slots[id 16820 78 5d 2e 6c 61 62 65 6c 20 3d 20 4e 55 4c 4c 3b x].label = NULL; 16830 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 69 6e 69 ..}...cackey_ini 16840 74 69 61 6c 69 7a 65 64 20 3d 20 31 3b 0a 0a 09 tialized = 1;... 16850 69 66 20 28 21 63 61 63 6b 65 79 5f 62 69 67 6c if (!cackey_bigl 16860 6f 63 6b 5f 69 6e 69 74 29 20 7b 0a 09 09 6d 75 ock_init) {...mu 16870 74 65 78 5f 69 6e 69 74 5f 72 65 74 20 3d 20 63 tex_init_ret = c 16880 61 63 6b 65 79 5f 6d 75 74 65 78 5f 63 72 65 61 ackey_mutex_crea 16890 74 65 28 26 63 61 63 6b 65 79 5f 62 69 67 6c 6f te(&cackey_biglo 168a0 63 6b 29 3b 0a 0a 09 09 69 66 20 28 6d 75 74 65 ck);....if (mute 168b0 78 5f 69 6e 69 74 5f 72 65 74 20 21 3d 20 30 29 x_init_ret != 0) 168c0 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB 168d0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 168e0 2e 20 20 4d 75 74 65 78 20 69 6e 69 74 69 61 6c . Mutex initial 168f0 69 7a 61 74 69 6f 6e 20 66 61 69 6c 65 64 2e 22 ization failed." 16900 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 4b );.....return(CK 16910 52 5f 43 41 4e 54 5f 4c 4f 43 4b 29 3b 0a 09 09 R_CANT_LOCK);... 16920 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 62 69 67 6c }....cackey_bigl 16930 6f 63 6b 5f 69 6e 69 74 20 3d 20 31 3b 0a 09 7d ock_init = 1;..} 16940 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 16950 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 16960 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", 16970 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 CKR_OK);...retur 16980 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b n(CKR_OK);.}..CK 16990 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 169a0 28 43 4b 5f 52 56 2c 20 43 5f 46 69 6e 61 6c 69 (CK_RV, C_Finali 169b0 7a 65 29 28 43 4b 5f 56 4f 49 44 5f 50 54 52 20 ze)(CK_VOID_PTR 169c0 70 52 65 73 65 72 76 65 64 29 20 7b 0a 09 75 69 pReserved) {..ui 169d0 6e 74 33 32 5f 74 20 69 64 78 3b 0a 0a 09 43 41 nt32_t idx;...CA 169e0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 169f0 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 16a00 69 66 20 28 70 52 65 73 65 72 76 65 64 20 21 3d if (pReserved != 16a10 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 NULL) {...CACKE 16a20 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 16a30 45 72 72 6f 72 2e 20 70 52 65 73 65 72 76 65 64 Error. pReserved 16a40 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b is not NULL."); 16a50 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 ....return(CKR_A 16a60 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 RGUMENTS_BAD);.. 16a70 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f }...if (!cackey_ 16a80 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 16a90 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 16aa0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 16ab0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 16ac0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 16ad0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 16ae0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 16af0 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 for (idx = 0; id 16b00 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b x < (sizeof(cack 16b10 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 16b20 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 16b30 73 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b sions[0])); idx+ 16b40 2b 29 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 +) {...if (cacke 16b50 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. 16b60 61 63 74 69 76 65 29 20 7b 0a 09 09 09 43 5f 43 active) {....C_C 16b70 6c 6f 73 65 53 65 73 73 69 6f 6e 28 69 64 78 29 loseSession(idx) 16b80 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 63 61 63 6b 65 ;...}..}...cacke 16b90 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 y_slots_disconne 16ba0 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 66 6f 72 20 ct_all();...for 16bb0 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 (idx = 0; idx < 16bc0 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 (sizeof(cackey_s 16bd0 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 lots) / sizeof(c 16be0 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 ackey_slots[0])) 16bf0 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 ; idx++) {...if 16c00 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 (cackey_slots[id 16c10 78 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 29 20 x].pcsc_reader) 16c20 7b 0a 09 09 09 66 72 65 65 28 63 61 63 6b 65 79 {....free(cackey 16c30 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 _slots[idx].pcsc 16c40 5f 72 65 61 64 65 72 29 3b 0a 09 09 7d 0a 09 7d _reader);...}..} 16c50 0a 0a 09 63 61 63 6b 65 79 5f 70 63 73 63 5f 64 ...cackey_pcsc_d 16c60 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 0a 09 63 isconnect();...c 16c70 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 16c80 64 20 3d 20 30 3b 0a 0a 09 43 41 43 4b 45 59 5f d = 0;...CACKEY_ 16c90 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 16ca0 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 turning CKR_OK ( 16cb0 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a %i)", CKR_OK);.. 16cc0 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b .return(CKR_OK); 16cd0 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 16ce0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 16cf0 47 65 74 49 6e 66 6f 29 28 43 4b 5f 49 4e 46 4f GetInfo)(CK_INFO 16d00 5f 50 54 52 20 70 49 6e 66 6f 29 20 7b 0a 09 73 _PTR pInfo) {..s 16d10 74 61 74 69 63 20 43 4b 5f 55 54 46 38 43 48 41 tatic CK_UTF8CHA 16d20 52 20 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 R manufacturerID 16d30 5b 5d 20 3d 20 22 55 2e 53 2e 20 47 6f 76 65 72 [] = "U.S. Gover 16d40 6e 6d 65 6e 74 22 3b 0a 09 73 74 61 74 69 63 20 nment";..static 16d50 43 4b 5f 55 54 46 38 43 48 41 52 20 6c 69 62 72 CK_UTF8CHAR libr 16d60 61 72 79 44 65 73 63 72 69 70 74 69 6f 6e 5b 5d aryDescription[] 16d70 20 3d 20 22 43 41 43 4b 65 79 22 3b 0a 0a 09 43 = "CACKey";...C 16d80 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 16d90 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 16da0 09 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 .if (pInfo == NU 16db0 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 16dc0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 16dd0 6f 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c or. pInfo is NUL 16de0 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 L.");....return( 16df0 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA 16e00 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 D);..}...if (!ca 16e10 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 16e20 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 16e30 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 16e40 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 16e50 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 16e60 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 16e70 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 16e80 09 7d 0a 0a 09 70 49 6e 66 6f 2d 3e 63 72 79 70 .}...pInfo->cryp 16e90 74 6f 6b 69 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f tokiVersion.majo 16ea0 72 20 3d 20 28 28 43 41 43 4b 45 59 5f 43 52 59 r = ((CACKEY_CRY 16eb0 50 54 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f PTOKI_VERSION_CO 16ec0 44 45 29 20 3e 3e 20 31 36 29 20 26 20 30 78 66 DE) >> 16) & 0xf 16ed0 66 3b 0a 09 70 49 6e 66 6f 2d 3e 63 72 79 70 74 f;..pInfo->crypt 16ee0 6f 6b 69 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 okiVersion.minor 16ef0 20 3d 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 = ((CACKEY_CRYP 16f00 54 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 TOKI_VERSION_COD 16f10 45 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b E) >> 8) & 0xff; 16f20 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d ...memset(pInfo- 16f30 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c >manufacturerID, 16f40 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e ' ', sizeof(pIn 16f50 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 fo->manufacturer 16f60 49 44 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 ID));..memcpy(pI 16f70 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 nfo->manufacture 16f80 72 49 44 2c 20 6d 61 6e 75 66 61 63 74 75 72 65 rID, manufacture 16f90 72 49 44 2c 20 73 69 7a 65 6f 66 28 6d 61 6e 75 rID, sizeof(manu 16fa0 66 61 63 74 75 72 65 72 49 44 29 20 2d 20 31 29 facturerID) - 1) 16fb0 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 ;...pInfo->flags 16fc0 20 3d 20 30 78 30 30 3b 0a 0a 09 6d 65 6d 73 65 = 0x00;...memse 16fd0 74 28 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 t(pInfo->library 16fe0 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 27 20 27 Description, ' ' 16ff0 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e , sizeof(pInfo-> 17000 6c 69 62 72 61 72 79 44 65 73 63 72 69 70 74 69 libraryDescripti 17010 6f 6e 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 on));..memcpy(pI 17020 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 44 65 73 63 nfo->libraryDesc 17030 72 69 70 74 69 6f 6e 2c 20 6c 69 62 72 61 72 79 ription, library 17040 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 73 69 7a Description, siz 17050 65 6f 66 28 6c 69 62 72 61 72 79 44 65 73 63 72 eof(libraryDescr 17060 69 70 74 69 6f 6e 29 20 2d 20 31 29 3b 0a 0a 09 iption) - 1);... 17070 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 56 65 pInfo->libraryVe 17080 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 rsion.major = (c 17090 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f 6e ackey_getversion 170a0 28 29 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 () >> 16) & 0xff 170b0 3b 0a 09 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 ;..pInfo->librar 170c0 79 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d yVersion.minor = 170d0 20 28 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 (cackey_getvers 170e0 69 6f 6e 28 29 20 3e 3e 20 38 29 20 26 20 30 78 ion() >> 8) & 0x 170f0 66 66 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ff;...CACKEY_DEB 17100 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 17110 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 17120 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 17130 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 17140 0a 2f 2a 0a 20 2a 20 50 72 6f 63 65 73 73 20 6c ./*. * Process l 17150 69 73 74 20 6f 66 20 72 65 61 64 65 72 73 2c 20 ist of readers, 17160 61 6e 64 20 63 72 65 61 74 65 20 6d 61 70 70 69 and create mappi 17170 6e 67 20 62 65 74 77 65 65 6e 20 72 65 61 64 65 ng between reade 17180 72 20 6e 61 6d 65 20 61 6e 64 20 73 6c 6f 74 20 r name and slot 17190 49 44 0a 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 ID. */.CK_DEFINE 171a0 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 171b0 20 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 29 28 C_GetSlotList)( 171c0 43 4b 5f 42 42 4f 4f 4c 20 74 6f 6b 65 6e 50 72 CK_BBOOL tokenPr 171d0 65 73 65 6e 74 2c 20 43 4b 5f 53 4c 4f 54 5f 49 esent, CK_SLOT_I 171e0 44 5f 50 54 52 20 70 53 6c 6f 74 4c 69 73 74 2c D_PTR pSlotList, 171f0 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 CK_ULONG_PTR pu 17200 6c 43 6f 75 6e 74 29 20 7b 0a 09 69 6e 74 20 6d lCount) {..int m 17210 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 09 69 6e utex_retval;..in 17220 74 20 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 t pcsc_connect_r 17230 65 74 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 63 6f et;..CK_ULONG co 17240 75 6e 74 2c 20 73 6c 6f 74 5f 63 6f 75 6e 74 20 unt, slot_count 17250 3d 20 30 2c 20 63 75 72 72 73 6c 6f 74 3b 0a 09 = 0, currslot;.. 17260 63 68 61 72 20 2a 70 63 73 63 5f 72 65 61 64 65 char *pcsc_reade 17270 72 73 2c 20 2a 70 63 73 63 5f 72 65 61 64 65 72 rs, *pcsc_reader 17280 73 5f 73 2c 20 2a 70 63 73 63 5f 72 65 61 64 65 s_s, *pcsc_reade 17290 72 73 5f 65 3b 0a 09 44 57 4f 52 44 20 70 63 73 rs_e;..DWORD pcs 172a0 63 5f 72 65 61 64 65 72 73 5f 6c 65 6e 3b 0a 09 c_readers_len;.. 172b0 4c 4f 4e 47 20 73 63 61 72 64 5f 6c 69 73 74 72 LONG scard_listr 172c0 65 61 64 65 72 73 5f 72 65 74 3b 0a 09 73 69 7a eaders_ret;..siz 172d0 65 5f 74 20 63 75 72 72 5f 72 65 61 64 65 72 5f e_t curr_reader_ 172e0 6c 65 6e 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 len;...CACKEY_DE 172f0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 17300 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 75 6c ed.");...if (pul 17310 43 6f 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b Count == NULL) { 17320 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 17330 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 PRINTF("Error. p 17340 75 6c 43 6f 75 6e 74 20 69 73 20 4e 55 4c 4c 2e ulCount is NULL. 17350 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 17360 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 R_ARGUMENTS_BAD) 17370 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack 17380 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 17390 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 173a0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 173b0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 173c0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 173d0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 173e0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 173f0 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 17400 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c = cackey_mutex_l 17410 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 17420 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 17430 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 17440 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 17450 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f INTF("Error. Lo 17460 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 17470 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 17480 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 17490 7d 0a 0a 09 2f 2a 20 43 6c 65 61 72 20 6c 69 73 }.../* Clear lis 174a0 74 20 6f 66 20 73 6c 6f 74 73 20 2a 2f 0a 09 69 t of slots */..i 174b0 66 20 28 70 53 6c 6f 74 4c 69 73 74 29 20 7b 0a f (pSlotList) {. 174c0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 174d0 52 49 4e 54 46 28 22 50 75 72 67 69 6e 67 20 61 RINTF("Purging a 174e0 6c 6c 20 73 6c 6f 74 20 69 6e 66 6f 72 6d 61 74 ll slot informat 174f0 69 6f 6e 2e 22 29 3b 0a 0a 09 09 2f 2a 20 4f 6e ion.");..../* On 17500 6c 79 20 75 70 64 61 74 65 20 74 68 65 20 6c 69 ly update the li 17510 73 74 20 6f 66 20 73 6c 6f 74 73 20 69 66 20 77 st of slots if w 17520 65 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 62 e are actually b 17530 65 69 6e 67 20 73 75 70 70 6c 79 20 74 68 65 20 eing supply the 17540 73 6c 6f 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e slot information 17550 20 2a 2f 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f */...cackey_slo 17560 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c ts_disconnect_al 17570 6c 28 29 3b 0a 0a 09 09 66 6f 72 20 28 63 75 72 l();....for (cur 17580 72 73 6c 6f 74 20 3d 20 30 3b 20 63 75 72 72 73 rslot = 0; currs 17590 6c 6f 74 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 lot < (sizeof(ca 175a0 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 ckey_slots) / si 175b0 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 175c0 73 5b 30 5d 29 29 3b 20 63 75 72 72 73 6c 6f 74 s[0])); currslot 175d0 2b 2b 29 20 7b 0a 09 09 09 69 66 20 28 63 61 63 ++) {....if (cac 175e0 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c key_slots[currsl 175f0 6f 74 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 29 ot].pcsc_reader) 17600 20 7b 0a 09 09 09 09 66 72 65 65 28 63 61 63 6b {.....free(cack 17610 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f ey_slots[currslo 17620 74 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 29 3b t].pcsc_reader); 17630 0a 0a 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f ......cackey_slo 17640 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 70 63 73 ts[currslot].pcs 17650 63 5f 72 65 61 64 65 72 20 3d 20 4e 55 4c 4c 3b c_reader = NULL; 17660 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 63 61 ....}.....if (ca 17670 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 ckey_slots[currs 17680 6c 6f 74 5d 2e 6c 61 62 65 6c 29 20 7b 0a 09 09 lot].label) {... 17690 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f 73 6c ..free(cackey_sl 176a0 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 6c 61 ots[currslot].la 176b0 62 65 6c 29 3b 0a 0a 09 09 09 09 63 61 63 6b 65 bel);......cacke 176c0 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 y_slots[currslot 176d0 5d 2e 6c 61 62 65 6c 20 3d 20 4e 55 4c 4c 3b 0a ].label = NULL;. 176e0 09 09 09 7d 0a 0a 09 09 09 63 61 63 6b 65 79 5f ...}.....cackey_ 176f0 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e slots[currslot]. 17700 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 09 7d 0a active = 0;...}. 17710 09 7d 0a 0a 09 2f 2a 20 44 65 74 65 72 6d 69 6e .}.../* Determin 17720 65 20 6c 69 73 74 20 6f 66 20 72 65 61 64 65 72 e list of reader 17730 73 20 2a 2f 0a 09 70 63 73 63 5f 63 6f 6e 6e 65 s */..pcsc_conne 17740 63 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f ct_ret = cackey_ 17750 70 63 73 63 5f 63 6f 6e 6e 65 63 74 28 29 3b 0a pcsc_connect();. 17760 09 69 66 20 28 70 63 73 63 5f 63 6f 6e 6e 65 63 .if (pcsc_connec 17770 74 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f t_ret != CACKEY_ 17780 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 PCSC_S_OK) {...C 17790 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 177a0 54 46 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 TF("Connection t 177b0 6f 20 50 43 2f 53 43 20 66 61 69 6c 65 64 2c 20 o PC/SC failed, 177c0 61 73 73 75 6d 69 6e 67 20 6e 6f 20 73 6c 6f 74 assuming no slot 177d0 73 22 29 3b 0a 0a 09 09 73 6c 6f 74 5f 63 6f 75 s");....slot_cou 177e0 6e 74 20 3d 20 30 3b 0a 09 7d 20 65 6c 73 65 20 nt = 0;..} else 177f0 7b 0a 09 09 70 63 73 63 5f 72 65 61 64 65 72 73 {...pcsc_readers 17800 5f 6c 65 6e 20 3d 20 30 3b 0a 0a 09 09 73 63 61 _len = 0;....sca 17810 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 rd_listreaders_r 17820 65 74 20 3d 20 53 43 61 72 64 4c 69 73 74 52 65 et = SCardListRe 17830 61 64 65 72 73 28 2a 63 61 63 6b 65 79 5f 70 63 aders(*cackey_pc 17840 73 63 5f 68 61 6e 64 6c 65 2c 20 4e 55 4c 4c 2c sc_handle, NULL, 17850 20 4e 55 4c 4c 2c 20 26 70 63 73 63 5f 72 65 61 NULL, &pcsc_rea 17860 64 65 72 73 5f 6c 65 6e 29 3b 0a 0a 09 09 69 66 ders_len);....if 17870 20 28 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 (scard_listread 17880 65 72 73 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 ers_ret == SCARD 17890 5f 46 5f 43 4f 4d 4d 5f 45 52 52 4f 52 29 20 7b _F_COMM_ERROR) { 178a0 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 178b0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 178c0 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 73 SCardListReaders 178d0 28 29 20 72 65 74 75 72 6e 65 64 20 53 43 41 52 () returned SCAR 178e0 44 5f 46 5f 43 4f 4d 4d 5f 45 52 52 4f 52 2c 20 D_F_COMM_ERROR, 178f0 61 73 73 75 6d 69 6e 67 20 43 6f 6e 6e 65 63 74 assuming Connect 17900 69 6f 6e 20 74 6f 20 50 43 2f 53 43 20 77 65 6e ion to PC/SC wen 17910 74 20 61 77 61 79 2e 20 52 65 63 6f 6e 6e 65 63 t away. Reconnec 17920 74 69 6e 67 2e 22 29 3b 0a 0a 09 09 09 63 61 63 ting.");.....cac 17930 6b 65 79 5f 70 63 73 63 5f 64 69 73 63 6f 6e 6e key_pcsc_disconn 17940 65 63 74 28 29 3b 0a 09 09 09 63 61 63 6b 65 79 ect();....cackey 17950 5f 70 63 73 63 5f 63 6f 6e 6e 65 63 74 28 29 3b _pcsc_connect(); 17960 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 17970 47 5f 50 52 49 4e 54 46 28 22 54 72 79 69 6e 67 G_PRINTF("Trying 17980 20 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 SCardListReader 17990 73 28 29 20 61 67 61 69 6e 22 29 3b 0a 09 09 09 s() again");.... 179a0 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 scard_listreader 179b0 73 5f 72 65 74 20 3d 20 53 43 61 72 64 4c 69 73 s_ret = SCardLis 179c0 74 52 65 61 64 65 72 73 28 2a 63 61 63 6b 65 79 tReaders(*cackey 179d0 5f 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 4e 55 _pcsc_handle, NU 179e0 4c 4c 2c 20 4e 55 4c 4c 2c 20 26 70 63 73 63 5f LL, NULL, &pcsc_ 179f0 72 65 61 64 65 72 73 5f 6c 65 6e 29 3b 0a 09 09 readers_len);... 17a00 7d 0a 0a 09 09 69 66 20 28 73 63 61 72 64 5f 6c }....if (scard_l 17a10 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 20 3d istreaders_ret = 17a20 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 = SCARD_S_SUCCES 17a30 53 20 26 26 20 70 63 73 63 5f 72 65 61 64 65 72 S && pcsc_reader 17a40 73 5f 6c 65 6e 20 21 3d 20 30 29 20 7b 0a 09 09 s_len != 0) {... 17a50 09 70 63 73 63 5f 72 65 61 64 65 72 73 20 3d 20 .pcsc_readers = 17a60 6d 61 6c 6c 6f 63 28 70 63 73 63 5f 72 65 61 64 malloc(pcsc_read 17a70 65 72 73 5f 6c 65 6e 29 3b 0a 09 09 09 70 63 73 ers_len);....pcs 17a80 63 5f 72 65 61 64 65 72 73 5f 73 20 3d 20 70 63 c_readers_s = pc 17a90 73 63 5f 72 65 61 64 65 72 73 3b 0a 0a 09 09 09 sc_readers;..... 17aa0 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 scard_listreader 17ab0 73 5f 72 65 74 20 3d 20 53 43 61 72 64 4c 69 73 s_ret = SCardLis 17ac0 74 52 65 61 64 65 72 73 28 2a 63 61 63 6b 65 79 tReaders(*cackey 17ad0 5f 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 4e 55 _pcsc_handle, NU 17ae0 4c 4c 2c 20 70 63 73 63 5f 72 65 61 64 65 72 73 LL, pcsc_readers 17af0 2c 20 26 70 63 73 63 5f 72 65 61 64 65 72 73 5f , &pcsc_readers_ 17b00 6c 65 6e 29 3b 0a 09 09 09 69 66 20 28 73 63 61 len);....if (sca 17b10 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 rd_listreaders_r 17b20 65 74 20 3d 3d 20 53 43 41 52 44 5f 53 5f 53 55 et == SCARD_S_SU 17b30 43 43 45 53 53 29 20 7b 0a 09 09 09 09 70 63 73 CCESS) {.....pcs 17b40 63 5f 72 65 61 64 65 72 73 5f 65 20 3d 20 70 63 c_readers_e = pc 17b50 73 63 5f 72 65 61 64 65 72 73 20 2b 20 70 63 73 sc_readers + pcs 17b60 63 5f 72 65 61 64 65 72 73 5f 6c 65 6e 3b 0a 0a c_readers_len;.. 17b70 09 09 09 09 2f 2a 20 53 74 61 72 74 20 77 69 74 ..../* Start wit 17b80 68 20 53 6c 6f 74 20 49 44 20 31 2c 20 74 6f 20 h Slot ID 1, to 17b90 61 76 6f 69 64 20 61 20 62 75 67 20 69 6e 20 47 avoid a bug in G 17ba0 44 4d 20 6f 6e 20 52 48 45 4c 20 2a 2f 0a 09 09 DM on RHEL */... 17bb0 09 09 2f 2a 20 42 75 67 20 35 39 34 39 31 31 3a ../* Bug 594911: 17bc0 20 68 74 74 70 73 3a 2f 2f 62 75 67 7a 69 6c 6c https://bugzill 17bd0 61 2e 72 65 64 68 61 74 2e 63 6f 6d 2f 73 68 6f a.redhat.com/sho 17be0 77 5f 62 75 67 2e 63 67 69 3f 69 64 3d 35 39 34 w_bug.cgi?id=594 17bf0 39 31 31 20 2a 2f 0a 09 09 09 09 63 75 72 72 73 911 */.....currs 17c00 6c 6f 74 20 3d 20 31 3b 0a 09 09 09 09 77 68 69 lot = 1;.....whi 17c10 6c 65 20 28 70 63 73 63 5f 72 65 61 64 65 72 73 le (pcsc_readers 17c20 20 3c 20 70 63 73 63 5f 72 65 61 64 65 72 73 5f < pcsc_readers_ 17c30 65 29 20 7b 0a 09 09 09 09 09 63 75 72 72 5f 72 e) {......curr_r 17c40 65 61 64 65 72 5f 6c 65 6e 20 3d 20 73 74 72 6c eader_len = strl 17c50 65 6e 28 70 63 73 63 5f 72 65 61 64 65 72 73 29 en(pcsc_readers) 17c60 3b 0a 0a 09 09 09 09 09 69 66 20 28 28 70 63 73 ;.......if ((pcs 17c70 63 5f 72 65 61 64 65 72 73 20 2b 20 63 75 72 72 c_readers + curr 17c80 5f 72 65 61 64 65 72 5f 6c 65 6e 29 20 3e 20 70 _reader_len) > p 17c90 63 73 63 5f 72 65 61 64 65 72 73 5f 65 29 20 7b csc_readers_e) { 17ca0 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 .......break;... 17cb0 09 09 09 7d 0a 0a 09 09 09 09 09 69 66 20 28 63 ...}.......if (c 17cc0 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e 20 3d urr_reader_len = 17cd0 3d 20 30 29 20 7b 0a 09 09 09 09 09 09 62 72 65 = 0) {.......bre 17ce0 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 ak;......}...... 17cf0 09 69 66 20 28 63 75 72 72 73 6c 6f 74 20 3e 3d .if (currslot >= 17d00 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 17d10 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 slots) / sizeof( 17d20 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 cackey_slots[0]) 17d30 29 29 20 7b 0a 09 09 09 09 09 09 43 41 43 4b 45 )) {.......CACKE 17d40 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 17d50 46 6f 75 6e 64 20 6d 6f 72 65 20 72 65 61 64 65 Found more reade 17d60 72 73 20 74 68 61 6e 20 73 6c 6f 74 73 20 61 72 rs than slots ar 17d70 65 20 61 76 61 69 6c 61 62 6c 65 21 22 29 3b 0a e available!");. 17d80 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 .......break;... 17d90 09 09 09 7d 0a 0a 09 09 09 09 09 43 41 43 4b 45 ...}.......CACKE 17da0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 17db0 46 6f 75 6e 64 20 72 65 61 64 65 72 3a 20 25 73 Found reader: %s 17dc0 22 2c 20 70 63 73 63 5f 72 65 61 64 65 72 73 29 ", pcsc_readers) 17dd0 3b 0a 0a 09 09 09 09 09 2f 2a 20 4f 6e 6c 79 20 ;......./* Only 17de0 75 70 64 61 74 65 20 74 68 65 20 6c 69 73 74 20 update the list 17df0 6f 66 20 73 6c 6f 74 73 20 69 66 20 77 65 20 61 of slots if we a 17e00 72 65 20 61 63 74 75 61 6c 6c 79 20 62 65 69 6e re actually bein 17e10 67 20 61 73 6b 65 64 20 73 75 70 70 6c 79 20 74 g asked supply t 17e20 68 65 20 73 6c 6f 74 20 69 6e 66 6f 72 6d 61 74 he slot informat 17e30 69 6f 6e 20 2a 2f 0a 09 09 09 09 09 69 66 20 28 ion */......if ( 17e40 70 53 6c 6f 74 4c 69 73 74 29 20 7b 0a 09 09 09 pSlotList) {.... 17e50 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ...cackey_slots[ 17e60 63 75 72 72 73 6c 6f 74 5d 2e 61 63 74 69 76 65 currslot].active 17e70 20 3d 20 31 3b 0a 09 09 09 09 09 09 63 61 63 6b = 1;.......cack 17e80 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f ey_slots[currslo 17e90 74 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 20 3d t].pcsc_reader = 17ea0 20 73 74 72 64 75 70 28 70 63 73 63 5f 72 65 61 strdup(pcsc_rea 17eb0 64 65 72 73 29 3b 0a 09 09 09 09 09 09 63 61 63 ders);.......cac 17ec0 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c key_slots[currsl 17ed0 6f 74 5d 2e 70 63 73 63 5f 63 61 72 64 5f 63 6f ot].pcsc_card_co 17ee0 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a 09 09 09 nnected = 0;.... 17ef0 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ...cackey_slots[ 17f00 63 75 72 72 73 6c 6f 74 5d 2e 74 72 61 6e 73 61 currslot].transa 17f10 63 74 69 6f 6e 5f 64 65 70 74 68 20 3d 20 30 3b ction_depth = 0; 17f20 0a 09 09 09 09 09 09 63 61 63 6b 65 79 5f 73 6c .......cackey_sl 17f30 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 74 72 ots[currslot].tr 17f40 61 6e 73 61 63 74 69 6f 6e 5f 6e 65 65 64 5f 68 ansaction_need_h 17f50 77 5f 6c 6f 63 6b 20 3d 20 30 3b 0a 09 09 09 09 w_lock = 0;..... 17f60 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 ..cackey_slots[c 17f70 75 72 72 73 6c 6f 74 5d 2e 73 6c 6f 74 5f 72 65 urrslot].slot_re 17f80 73 65 74 20 3d 20 31 3b 0a 09 09 09 09 09 09 63 set = 1;.......c 17f90 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 ackey_slots[curr 17fa0 73 6c 6f 74 5d 2e 74 6f 6b 65 6e 5f 66 6c 61 67 slot].token_flag 17fb0 73 20 3d 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52 45 s = CKF_LOGIN_RE 17fc0 51 55 49 52 45 44 3b 0a 09 09 09 09 09 09 63 61 QUIRED;.......ca 17fd0 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 ckey_slots[currs 17fe0 6c 6f 74 5d 2e 6c 61 62 65 6c 20 3d 20 4e 55 4c lot].label = NUL 17ff0 4c 3b 0a 0a 09 09 09 09 09 09 63 61 63 6b 65 79 L;........cackey 18000 5f 6d 61 72 6b 5f 73 6c 6f 74 5f 72 65 73 65 74 _mark_slot_reset 18010 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 (&cackey_slots[c 18020 75 72 72 73 6c 6f 74 5d 29 3b 0a 09 09 09 09 09 urrslot]);...... 18030 7d 0a 09 09 09 09 09 63 75 72 72 73 6c 6f 74 2b }......currslot+ 18040 2b 3b 0a 0a 09 09 09 09 09 70 63 73 63 5f 72 65 +;.......pcsc_re 18050 61 64 65 72 73 20 2b 3d 20 63 75 72 72 5f 72 65 aders += curr_re 18060 61 64 65 72 5f 6c 65 6e 20 2b 20 31 3b 0a 09 09 ader_len + 1;... 18070 09 09 7d 0a 0a 09 09 09 09 2f 2a 20 53 74 61 72 ..}....../* Star 18080 74 20 77 69 74 68 20 53 6c 6f 74 20 49 44 20 31 t with Slot ID 1 18090 2c 20 74 6f 20 61 76 6f 69 64 20 61 20 62 75 67 , to avoid a bug 180a0 20 69 6e 20 47 44 4d 20 6f 6e 20 52 48 45 4c 20 in GDM on RHEL 180b0 2a 2f 0a 09 09 09 09 2f 2a 20 42 75 67 20 35 39 */...../* Bug 59 180c0 34 39 31 31 3a 20 68 74 74 70 73 3a 2f 2f 62 75 4911: https://bu 180d0 67 7a 69 6c 6c 61 2e 72 65 64 68 61 74 2e 63 6f gzilla.redhat.co 180e0 6d 2f 73 68 6f 77 5f 62 75 67 2e 63 67 69 3f 69 m/show_bug.cgi?i 180f0 64 3d 35 39 34 39 31 31 20 2a 2f 0a 09 09 09 09 d=594911 */..... 18100 69 66 20 28 63 75 72 72 73 6c 6f 74 20 3e 20 31 if (currslot > 1 18110 29 20 7b 0a 09 09 09 09 09 2f 2a 20 53 74 61 72 ) {....../* Star 18120 74 20 77 69 74 68 20 53 6c 6f 74 20 49 44 20 31 t with Slot ID 1 18130 2c 20 74 6f 20 61 76 6f 69 64 20 61 20 62 75 67 , to avoid a bug 18140 20 69 6e 20 47 44 4d 20 6f 6e 20 52 48 45 4c 20 in GDM on RHEL 18150 2a 2f 0a 09 09 09 09 09 2f 2a 20 42 75 67 20 35 */....../* Bug 5 18160 39 34 39 31 31 3a 20 68 74 74 70 73 3a 2f 2f 62 94911: https://b 18170 75 67 7a 69 6c 6c 61 2e 72 65 64 68 61 74 2e 63 ugzilla.redhat.c 18180 6f 6d 2f 73 68 6f 77 5f 62 75 67 2e 63 67 69 3f om/show_bug.cgi? 18190 69 64 3d 35 39 34 39 31 31 20 2a 2f 0a 09 09 09 id=594911 */.... 181a0 09 09 73 6c 6f 74 5f 63 6f 75 6e 74 20 3d 20 63 ..slot_count = c 181b0 75 72 72 73 6c 6f 74 20 2d 20 31 3b 0a 09 09 09 urrslot - 1;.... 181c0 09 7d 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 .}....} else {.. 181d0 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 181e0 50 52 49 4e 54 46 28 22 53 65 63 6f 6e 64 20 63 PRINTF("Second c 181f0 61 6c 6c 20 74 6f 20 53 43 61 72 64 4c 69 73 74 all to SCardList 18200 52 65 61 64 65 72 73 20 66 61 69 6c 65 64 2c 20 Readers failed, 18210 72 65 74 75 72 6e 20 25 73 2f 25 6c 69 22 2c 20 return %s/%li", 18220 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN 18230 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 C_SCARDERR_TO_ST 18240 52 28 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 R(scard_listread 18250 65 72 73 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 ers_ret), (long) 18260 20 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 scard_listreade 18270 72 73 5f 72 65 74 29 3b 0a 09 09 09 7d 0a 0a 09 rs_ret);....}... 18280 09 09 66 72 65 65 28 70 63 73 63 5f 72 65 61 64 ..free(pcsc_read 18290 65 72 73 5f 73 29 3b 0a 09 09 7d 20 65 6c 73 65 ers_s);...} else 182a0 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB 182b0 55 47 5f 50 52 49 4e 54 46 28 22 46 69 72 73 74 UG_PRINTF("First 182c0 20 63 61 6c 6c 20 74 6f 20 53 43 61 72 64 4c 69 call to SCardLi 182d0 73 74 52 65 61 64 65 72 73 20 66 61 69 6c 65 64 stReaders failed 182e0 2c 20 72 65 74 75 72 6e 20 25 73 2f 25 6c 69 22 , return %s/%li" 182f0 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F 18300 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f UNC_SCARDERR_TO_ 18310 53 54 52 28 73 63 61 72 64 5f 6c 69 73 74 72 65 STR(scard_listre 18320 61 64 65 72 73 5f 72 65 74 29 2c 20 28 6c 6f 6e aders_ret), (lon 18330 67 29 20 73 63 61 72 64 5f 6c 69 73 74 72 65 61 g) scard_listrea 18340 64 65 72 73 5f 72 65 74 29 3b 0a 09 09 7d 0a 09 ders_ret);...}.. 18350 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 18360 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 18370 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 18380 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 glock);..if (mut 18390 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 183a0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 183b0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 183c0 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 Unlocking faile 183d0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 183e0 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 183f0 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 53 6c R);..}...if (pSl 18400 6f 74 4c 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 20 otList == NULL) 18410 7b 0a 09 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 {...*pulCount = 18420 73 6c 6f 74 5f 63 6f 75 6e 74 3b 0a 0a 09 09 43 slot_count;....C 18430 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 18440 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 18450 52 5f 4f 4b 20 28 25 69 29 2e 20 20 46 6f 75 6e R_OK (%i). Foun 18460 64 20 25 6c 75 20 72 65 61 64 65 72 73 2c 20 62 d %lu readers, b 18470 75 74 20 6e 6f 74 20 73 74 6f 72 69 6e 67 20 49 ut not storing I 18480 44 73 20 28 70 53 6c 6f 74 4c 69 73 74 20 3d 3d Ds (pSlotList == 18490 20 4e 55 4c 4c 29 22 2c 20 43 4b 52 5f 4f 4b 2c NULL)", CKR_OK, 184a0 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 184b0 20 73 6c 6f 74 5f 63 6f 75 6e 74 29 3b 0a 0a 09 slot_count);... 184c0 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b .return(CKR_OK); 184d0 0a 09 7d 0a 0a 09 63 6f 75 6e 74 20 3d 20 2a 70 ..}...count = *p 184e0 75 6c 43 6f 75 6e 74 3b 0a 09 69 66 20 28 63 6f ulCount;..if (co 184f0 75 6e 74 20 3c 20 73 6c 6f 74 5f 63 6f 75 6e 74 unt < slot_count 18500 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 18510 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 18520 2e 20 55 73 65 72 20 61 6c 6c 6f 63 61 74 65 64 . User allocated 18530 20 25 6c 75 20 65 6e 74 72 69 65 73 2c 20 62 75 %lu entries, bu 18540 74 20 77 65 20 68 61 76 65 20 25 6c 75 20 65 6e t we have %lu en 18550 74 72 69 65 73 2e 22 2c 20 63 6f 75 6e 74 2c 20 tries.", count, 18560 73 6c 6f 74 5f 63 6f 75 6e 74 29 3b 0a 0a 09 09 slot_count);.... 18570 72 65 74 75 72 6e 28 43 4b 52 5f 42 55 46 46 45 return(CKR_BUFFE 18580 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 3b 09 0a 09 R_TOO_SMALL);... 18590 7d 0a 0a 09 66 6f 72 20 28 63 75 72 72 73 6c 6f }...for (currslo 185a0 74 20 3d 20 30 3b 20 63 75 72 72 73 6c 6f 74 20 t = 0; currslot 185b0 3c 20 73 6c 6f 74 5f 63 6f 75 6e 74 3b 20 63 75 < slot_count; cu 185c0 72 72 73 6c 6f 74 2b 2b 29 20 7b 0a 09 09 2f 2a rrslot++) {.../* 185d0 20 53 74 61 72 74 20 77 69 74 68 20 53 6c 6f 74 Start with Slot 185e0 20 49 44 20 31 2c 20 74 6f 20 61 76 6f 69 64 20 ID 1, to avoid 185f0 61 20 62 75 67 20 69 6e 20 47 44 4d 20 6f 6e 20 a bug in GDM on 18600 52 48 45 4c 20 2a 2f 0a 09 09 2f 2a 20 42 75 67 RHEL */.../* Bug 18610 20 35 39 34 39 31 31 3a 20 68 74 74 70 73 3a 2f 594911: https:/ 18620 2f 62 75 67 7a 69 6c 6c 61 2e 72 65 64 68 61 74 /bugzilla.redhat 18630 2e 63 6f 6d 2f 73 68 6f 77 5f 62 75 67 2e 63 67 .com/show_bug.cg 18640 69 3f 69 64 3d 35 39 34 39 31 31 20 2a 2f 0a 09 i?id=594911 */.. 18650 09 70 53 6c 6f 74 4c 69 73 74 5b 63 75 72 72 73 .pSlotList[currs 18660 6c 6f 74 5d 20 3d 20 63 75 72 72 73 6c 6f 74 20 lot] = currslot 18670 2b 20 31 3b 0a 09 7d 0a 0a 09 2a 70 75 6c 43 6f + 1;..}...*pulCo 18680 75 6e 74 20 3d 20 73 6c 6f 74 5f 63 6f 75 6e 74 unt = slot_count 18690 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 186a0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 186b0 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 2e 20 ng CKR_OK (%i). 186c0 20 46 6f 75 6e 64 20 25 6c 75 20 72 65 61 64 65 Found %lu reade 186d0 72 73 2e 22 2c 20 43 4b 52 5f 4f 4b 2c 20 28 75 rs.", CKR_OK, (u 186e0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 6c nsigned long) sl 186f0 6f 74 5f 63 6f 75 6e 74 29 3b 0a 0a 09 72 65 74 ot_count);...ret 18700 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 74 urn(CKR_OK);...t 18710 6f 6b 65 6e 50 72 65 73 65 6e 74 20 3d 20 74 6f okenPresent = to 18720 6b 65 6e 50 72 65 73 65 6e 74 3b 20 2f 2a 20 53 kenPresent; /* S 18730 75 70 72 65 73 73 20 75 6e 75 73 65 64 20 76 61 upress unused va 18740 72 69 61 62 6c 65 20 77 61 72 6e 69 6e 67 20 2a riable warning * 18750 2f 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 /.}..CK_DEFINE_F 18760 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 18770 5f 47 65 74 53 6c 6f 74 49 6e 66 6f 29 28 43 4b _GetSlotInfo)(CK 18780 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c _SLOT_ID slotID, 18790 20 43 4b 5f 53 4c 4f 54 5f 49 4e 46 4f 5f 50 54 CK_SLOT_INFO_PT 187a0 52 20 70 49 6e 66 6f 29 20 7b 0a 09 73 74 61 74 R pInfo) {..stat 187b0 69 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20 73 ic CK_UTF8CHAR s 187c0 6c 6f 74 44 65 73 63 72 69 70 74 69 6f 6e 5b 5d lotDescription[] 187d0 20 3d 20 22 43 41 43 4b 65 79 20 53 6c 6f 74 22 = "CACKey Slot" 187e0 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 ;..int mutex_ret 187f0 76 61 6c 3b 0a 09 69 6e 74 20 62 79 74 65 73 5f val;..int bytes_ 18800 74 6f 5f 63 6f 70 79 3b 0a 0a 09 43 41 43 4b 45 to_copy;...CACKE 18810 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 18820 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 18830 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 20 (pInfo == NULL) 18840 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 18850 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 18860 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 29 pInfo is NULL.") 18870 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 18880 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 18890 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 188a0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 188b0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 188c0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 188d0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 188e0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 188f0 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 18900 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 18910 09 69 66 20 28 73 6c 6f 74 49 44 20 3c 20 30 20 .if (slotID < 0 18920 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 28 73 69 || slotID >= (si 18930 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 18940 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 18950 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b ey_slots[0]))) { 18960 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 18970 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 PRINTF("Error. I 18980 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 nvalid slot requ 18990 65 73 74 65 64 20 28 25 6c 75 29 2c 20 6f 75 74 ested (%lu), out 189a0 73 69 64 65 20 6f 66 20 76 61 6c 69 64 20 72 61 side of valid ra 189b0 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a nge", slotID);.. 189c0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f ..return(CKR_SLO 189d0 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 T_ID_INVALID);.. 189e0 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 189f0 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 18a00 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 18a10 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 18a20 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 18a30 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 18a40 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 18a50 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 18a60 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 18a70 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 18a80 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f .}...if (cackey_ 18a90 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 slots[slotID].ac 18aa0 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09 09 43 tive == 0) {...C 18ab0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 18ac0 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c TF("Error. Inval 18ad0 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 id slot requeste 18ae0 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f d (%lu), slot no 18af0 74 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 t currently acti 18b00 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 ve", slotID);... 18b10 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e .cackey_mutex_un 18b20 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 18b30 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 ock);....return( 18b40 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 CKR_SLOT_ID_INVA 18b50 4c 49 44 29 3b 0a 09 7d 0a 0a 09 70 49 6e 66 6f LID);..}...pInfo 18b60 2d 3e 66 6c 61 67 73 20 3d 20 43 4b 46 5f 52 45 ->flags = CKF_RE 18b70 4d 4f 56 41 42 4c 45 5f 44 45 56 49 43 45 20 7c MOVABLE_DEVICE | 18b80 20 43 4b 46 5f 48 57 5f 53 4c 4f 54 3b 0a 0a 09 CKF_HW_SLOT;... 18b90 69 66 20 28 63 61 63 6b 65 79 5f 74 6f 6b 65 6e if (cackey_token 18ba0 5f 70 72 65 73 65 6e 74 28 26 63 61 63 6b 65 79 _present(&cackey 18bb0 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 29 20 _slots[slotID]) 18bc0 3d 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 == CACKEY_PCSC_S 18bd0 5f 54 4f 4b 45 4e 50 52 45 53 45 4e 54 29 20 7b _TOKENPRESENT) { 18be0 0a 09 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 ...pInfo->flags 18bf0 7c 3d 20 43 4b 46 5f 54 4f 4b 45 4e 5f 50 52 45 |= CKF_TOKEN_PRE 18c00 53 45 4e 54 3b 0a 09 7d 0a 0a 09 62 79 74 65 73 SENT;..}...bytes 18c10 5f 74 6f 5f 63 6f 70 79 20 3d 20 73 74 72 6c 65 _to_copy = strle 18c20 6e 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 n(cackey_slots[s 18c30 6c 6f 74 49 44 5d 2e 70 63 73 63 5f 72 65 61 64 lotID].pcsc_read 18c40 65 72 29 3b 0a 09 69 66 20 28 73 69 7a 65 6f 66 er);..if (sizeof 18c50 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 (pInfo->manufact 18c60 75 72 65 72 49 44 29 20 3c 20 62 79 74 65 73 5f urerID) < bytes_ 18c70 74 6f 5f 63 6f 70 79 29 20 7b 0a 09 09 62 79 74 to_copy) {...byt 18c80 65 73 5f 74 6f 5f 63 6f 70 79 20 3d 20 73 69 7a es_to_copy = siz 18c90 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 eof(pInfo->manuf 18ca0 61 63 74 75 72 65 72 49 44 29 3b 0a 09 7d 0a 09 acturerID);..}.. 18cb0 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6d 61 memcpy(pInfo->ma 18cc0 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 63 61 nufacturerID, ca 18cd0 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 ckey_slots[slotI 18ce0 44 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 2c 20 D].pcsc_reader, 18cf0 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 3b 0a bytes_to_copy);. 18d00 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 18d10 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e cackey_mutex_un 18d20 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 18d30 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 18d40 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 18d50 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 18d60 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 RINTF("Error. U 18d70 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e nlocking failed. 18d80 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 18d90 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 18da0 3b 0a 09 7d 0a 0a 09 6d 65 6d 73 65 74 28 70 49 ;..}...memset(pI 18db0 6e 66 6f 2d 3e 73 6c 6f 74 44 65 73 63 72 69 70 nfo->slotDescrip 18dc0 74 69 6f 6e 2c 20 27 20 27 2c 20 73 69 7a 65 6f tion, ' ', sizeo 18dd0 66 28 70 49 6e 66 6f 2d 3e 73 6c 6f 74 44 65 73 f(pInfo->slotDes 18de0 63 72 69 70 74 69 6f 6e 29 29 3b 0a 09 6d 65 6d cription));..mem 18df0 63 70 79 28 70 49 6e 66 6f 2d 3e 73 6c 6f 74 44 cpy(pInfo->slotD 18e00 65 73 63 72 69 70 74 69 6f 6e 2c 20 73 6c 6f 74 escription, slot 18e10 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 73 69 7a Description, siz 18e20 65 6f 66 28 73 6c 6f 74 44 65 73 63 72 69 70 74 eof(slotDescript 18e30 69 6f 6e 29 20 2d 20 31 29 3b 0a 0a 09 6d 65 6d ion) - 1);...mem 18e40 73 65 74 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 set(pInfo->manuf 18e50 61 63 74 75 72 65 72 49 44 2c 20 27 20 27 2c 20 acturerID, ' ', 18e60 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 61 sizeof(pInfo->ma 18e70 6e 75 66 61 63 74 75 72 65 72 49 44 29 29 3b 0a nufacturerID));. 18e80 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 ..pInfo->hardwar 18e90 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d eVersion.major = 18ea0 20 28 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 (cackey_getvers 18eb0 69 6f 6e 28 29 20 3e 3e 20 31 36 29 20 26 20 30 ion() >> 16) & 0 18ec0 78 66 66 3b 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 xff;..pInfo->har 18ed0 64 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e dwareVersion.min 18ee0 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 65 74 or = (cackey_get 18ef0 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 38 29 20 version() >> 8) 18f00 26 20 30 78 66 66 3b 0a 0a 09 70 49 6e 66 6f 2d & 0xff;...pInfo- 18f10 3e 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f 6e >firmwareVersion 18f20 2e 6d 61 6a 6f 72 20 3d 20 30 78 30 30 3b 0a 09 .major = 0x00;.. 18f30 70 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 72 65 56 pInfo->firmwareV 18f40 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 30 ersion.minor = 0 18f50 78 30 30 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 x00;...CACKEY_DE 18f60 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 18f70 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 18f80 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 )", CKR_OK);...r 18f90 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 18fa0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 18fb0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 TION(CK_RV, C_Ge 18fc0 74 54 6f 6b 65 6e 49 6e 66 6f 29 28 43 4b 5f 53 tTokenInfo)(CK_S 18fd0 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 43 LOT_ID slotID, C 18fe0 4b 5f 54 4f 4b 45 4e 5f 49 4e 46 4f 5f 50 54 52 K_TOKEN_INFO_PTR 18ff0 20 70 49 6e 66 6f 29 20 7b 0a 09 73 74 61 74 69 pInfo) {..stati 19000 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20 6d 61 c CK_UTF8CHAR ma 19010 6e 75 66 61 63 74 75 72 65 72 49 44 5b 5d 20 3d nufacturerID[] = 19020 20 22 55 2e 53 2e 20 47 6f 76 65 72 6e 6d 65 6e "U.S. Governmen 19030 74 22 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 t";..static CK_U 19040 54 46 38 43 48 41 52 20 64 65 66 61 75 6c 74 4c TF8CHAR defaultL 19050 61 62 65 6c 5b 5d 20 3d 20 22 55 6e 6b 6e 6f 77 abel[] = "Unknow 19060 6e 20 54 6f 6b 65 6e 22 3b 0a 09 73 74 61 74 69 n Token";..stati 19070 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20 6d 6f c CK_UTF8CHAR mo 19080 64 65 6c 5b 5d 20 3d 20 22 43 41 43 20 54 6f 6b del[] = "CAC Tok 19090 65 6e 22 3b 0a 09 73 74 72 75 63 74 20 63 61 63 en";..struct cac 190a0 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 key_pcsc_identit 190b0 79 20 2a 70 63 73 63 5f 69 64 65 6e 74 69 74 69 y *pcsc_identiti 190c0 65 73 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f es;..unsigned lo 190d0 6e 67 20 6e 75 6d 5f 63 65 72 74 73 3b 0a 09 73 ng num_certs;..s 190e0 73 69 7a 65 5f 74 20 6c 61 62 65 6c 5f 72 65 74 size_t label_ret 190f0 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 ;..int mutex_ret 19100 76 61 6c 3b 0a 09 69 6e 74 20 75 73 65 5f 64 65 val;..int use_de 19110 66 61 75 6c 74 5f 6c 61 62 65 6c 3b 0a 0a 09 43 fault_label;...C 19120 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 19130 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 19140 09 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 .if (pInfo == NU 19150 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 19160 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 19170 6f 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c or. pInfo is NUL 19180 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 L.");....return( 19190 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA 191a0 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 D);..}...if (!ca 191b0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 191c0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 191d0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 191e0 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 191f0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 19200 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 19210 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 19220 09 7d 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 .}...if (slotID 19230 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d < 0 || slotID >= 19240 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 19250 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 slots) / sizeof( 19260 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 cackey_slots[0]) 19270 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE 19280 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 19290 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 r. Invalid slot 192a0 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c requested (%lu), 192b0 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 outside of vali 192c0 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 d range", slotID 192d0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 192e0 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 _SLOT_ID_INVALID 192f0 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 );..}...mutex_re 19300 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 19310 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 19320 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 19330 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 19340 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 19350 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 19360 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 19370 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 19380 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 19390 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 R);..}...if (cac 193a0 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 key_slots[slotID 193b0 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b ].active == 0) { 193c0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 193d0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 PRINTF("Error. I 193e0 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 nvalid slot requ 193f0 65 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f ested (%lu), slo 19400 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 t not currently 19410 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 active", slotID) 19420 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 ;....cackey_mute 19430 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 19440 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 biglock);....ret 19450 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f urn(CKR_SLOT_ID_ 19460 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 19470 66 20 28 63 61 63 6b 65 79 5f 74 6f 6b 65 6e 5f f (cackey_token_ 19480 70 72 65 73 65 6e 74 28 26 63 61 63 6b 65 79 5f present(&cackey_ 19490 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 29 20 21 slots[slotID]) ! 194a0 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f = CACKEY_PCSC_S_ 194b0 54 4f 4b 45 4e 50 52 45 53 45 4e 54 29 20 7b 0a TOKENPRESENT) {. 194c0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 194d0 52 49 4e 54 46 28 22 4e 6f 20 74 6f 6b 65 6e 20 RINTF("No token 194e0 69 73 20 70 72 65 73 65 6e 74 20 69 6e 20 73 6c is present in sl 194f0 6f 74 49 44 20 3d 20 25 6c 75 22 2c 20 73 6c 6f otID = %lu", slo 19500 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f tID);....cackey_ 19510 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 19520 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 19530 09 72 65 74 75 72 6e 28 43 4b 52 5f 54 4f 4b 45 .return(CKR_TOKE 19540 4e 5f 4e 4f 54 5f 50 52 45 53 45 4e 54 29 3b 0a N_NOT_PRESENT);. 19550 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 .}...mutex_retva 19560 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 19570 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 19580 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 19590 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 195a0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 195b0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 195c0 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c Unlocking fail 195d0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 195e0 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 195f0 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 44 65 74 OR);..}.../* Det 19600 65 72 6d 69 6e 65 20 74 6f 6b 65 6e 20 6c 61 62 ermine token lab 19610 65 6c 20 66 72 6f 6d 20 63 65 72 74 69 66 69 63 el from certific 19620 61 74 65 73 20 2a 2f 0a 09 6d 65 6d 73 65 74 28 ates */..memset( 19630 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20 27 20 pInfo->label, ' 19640 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d ', sizeof(pInfo- 19650 3e 6c 61 62 65 6c 29 29 3b 0a 09 75 73 65 5f 64 >label));..use_d 19660 65 66 61 75 6c 74 5f 6c 61 62 65 6c 20 3d 20 31 efault_label = 1 19670 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 ;...if (cackey_s 19680 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 6c 61 62 lots[slotID].lab 19690 65 6c 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 el == NULL) {... 196a0 70 63 73 63 5f 69 64 65 6e 74 69 74 69 65 73 20 pcsc_identities 196b0 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 63 65 = cackey_read_ce 196c0 72 74 73 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 rts(&cackey_slot 196d0 73 5b 73 6c 6f 74 49 44 5d 2c 20 4e 55 4c 4c 2c s[slotID], NULL, 196e0 20 26 6e 75 6d 5f 63 65 72 74 73 29 3b 0a 09 09 &num_certs);... 196f0 69 66 20 28 70 63 73 63 5f 69 64 65 6e 74 69 74 if (pcsc_identit 19700 69 65 73 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 ies != NULL) {.. 19710 09 09 69 66 20 28 6e 75 6d 5f 63 65 72 74 73 20 ..if (num_certs 19720 3e 20 30 29 20 7b 0a 09 09 09 09 6c 61 62 65 6c > 0) {.....label 19730 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 70 63 _ret = cackey_pc 19740 73 63 5f 69 64 65 6e 74 69 74 79 5f 74 6f 5f 6c sc_identity_to_l 19750 61 62 65 6c 28 70 63 73 63 5f 69 64 65 6e 74 69 abel(pcsc_identi 19760 74 69 65 73 2c 20 70 49 6e 66 6f 2d 3e 6c 61 62 ties, pInfo->lab 19770 65 6c 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f el, sizeof(pInfo 19780 2d 3e 6c 61 62 65 6c 29 29 3b 0a 09 09 09 09 69 ->label));.....i 19790 66 20 28 6c 61 62 65 6c 5f 72 65 74 20 3e 20 30 f (label_ret > 0 197a0 29 20 7b 0a 09 09 09 09 09 75 73 65 5f 64 65 66 ) {......use_def 197b0 61 75 6c 74 5f 6c 61 62 65 6c 20 3d 20 30 3b 0a ault_label = 0;. 197c0 0a 09 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f ......cackey_slo 197d0 74 73 5b 73 6c 6f 74 49 44 5d 2e 6c 61 62 65 6c ts[slotID].label 197e0 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 = malloc(sizeof 197f0 28 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 29 29 3b (pInfo->label)); 19800 0a 0a 09 09 09 09 09 6d 65 6d 63 70 79 28 63 61 .......memcpy(ca 19810 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 ckey_slots[slotI 19820 44 5d 2e 6c 61 62 65 6c 2c 20 70 49 6e 66 6f 2d D].label, pInfo- 19830 3e 6c 61 62 65 6c 2c 20 73 69 7a 65 6f 66 28 70 >label, sizeof(p 19840 49 6e 66 6f 2d 3e 6c 61 62 65 6c 29 29 3b 0a 09 Info->label));.. 19850 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 63 61 ...}....}.....ca 19860 63 6b 65 79 5f 66 72 65 65 5f 63 65 72 74 73 28 ckey_free_certs( 19870 70 63 73 63 5f 69 64 65 6e 74 69 74 69 65 73 2c pcsc_identities, 19880 20 6e 75 6d 5f 63 65 72 74 73 2c 20 31 29 3b 0a num_certs, 1);. 19890 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 ..}..} else {... 198a0 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6c 61 memcpy(pInfo->la 198b0 62 65 6c 2c 20 63 61 63 6b 65 79 5f 73 6c 6f 74 bel, cackey_slot 198c0 73 5b 73 6c 6f 74 49 44 5d 2e 6c 61 62 65 6c 2c s[slotID].label, 198d0 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6c sizeof(pInfo->l 198e0 61 62 65 6c 29 29 3b 0a 0a 09 09 75 73 65 5f 64 abel));....use_d 198f0 65 66 61 75 6c 74 5f 6c 61 62 65 6c 20 3d 20 30 efault_label = 0 19900 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 73 65 5f 64 ;..}...if (use_d 19910 65 66 61 75 6c 74 5f 6c 61 62 65 6c 29 20 7b 0a efault_label) {. 19920 09 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e ..memcpy(pInfo-> 19930 6c 61 62 65 6c 2c 20 64 65 66 61 75 6c 74 4c 61 label, defaultLa 19940 62 65 6c 2c 20 73 69 7a 65 6f 66 28 64 65 66 61 bel, sizeof(defa 19950 75 6c 74 4c 61 62 65 6c 29 20 2d 20 31 29 3b 0a ultLabel) - 1);. 19960 09 7d 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 .}...memset(pInf 19970 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 o->manufacturerI 19980 44 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 D, ' ', sizeof(p 19990 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 Info->manufactur 199a0 65 72 49 44 29 29 3b 0a 09 6d 65 6d 63 70 79 28 erID));..memcpy( 199b0 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 pInfo->manufactu 199c0 72 65 72 49 44 2c 20 6d 61 6e 75 66 61 63 74 75 rerID, manufactu 199d0 72 65 72 49 44 2c 20 73 69 7a 65 6f 66 28 6d 61 rerID, sizeof(ma 199e0 6e 75 66 61 63 74 75 72 65 72 49 44 29 20 2d 20 nufacturerID) - 199f0 31 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 1);...memset(pIn 19a00 66 6f 2d 3e 6d 6f 64 65 6c 2c 20 27 20 27 2c 20 fo->model, ' ', 19a10 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 6f sizeof(pInfo->mo 19a20 64 65 6c 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 del));..memcpy(p 19a30 49 6e 66 6f 2d 3e 6d 6f 64 65 6c 2c 20 6d 6f 64 Info->model, mod 19a40 65 6c 2c 20 73 69 7a 65 6f 66 28 6d 6f 64 65 6c el, sizeof(model 19a50 29 20 2d 20 31 29 3b 0a 0a 09 6d 65 6d 73 65 74 ) - 1);...memset 19a60 28 70 49 6e 66 6f 2d 3e 73 65 72 69 61 6c 4e 75 (pInfo->serialNu 19a70 6d 62 65 72 2c 20 27 20 27 2c 20 73 69 7a 65 6f mber, ' ', sizeo 19a80 66 28 70 49 6e 66 6f 2d 3e 73 65 72 69 61 6c 4e f(pInfo->serialN 19a90 75 6d 62 65 72 29 29 3b 0a 0a 09 6d 65 6d 73 65 umber));...memse 19aa0 74 28 70 49 6e 66 6f 2d 3e 75 74 63 54 69 6d 65 t(pInfo->utcTime 19ab0 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 , ' ', sizeof(pI 19ac0 6e 66 6f 2d 3e 75 74 63 54 69 6d 65 29 29 3b 0a nfo->utcTime));. 19ad0 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 ..pInfo->hardwar 19ae0 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d eVersion.major = 19af0 20 28 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 (cackey_getvers 19b00 69 6f 6e 28 29 20 3e 3e 20 31 36 29 20 26 20 30 ion() >> 16) & 0 19b10 78 66 66 3b 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 xff;..pInfo->har 19b20 64 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e dwareVersion.min 19b30 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 65 74 or = (cackey_get 19b40 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 38 29 20 version() >> 8) 19b50 26 20 30 78 66 66 3b 0a 0a 09 70 49 6e 66 6f 2d & 0xff;...pInfo- 19b60 3e 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f 6e >firmwareVersion 19b70 2e 6d 61 6a 6f 72 20 3d 20 30 78 30 30 3b 0a 09 .major = 0x00;.. 19b80 70 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 72 65 56 pInfo->firmwareV 19b90 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 30 ersion.minor = 0 19ba0 78 30 30 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66 6c x00;...pInfo->fl 19bb0 61 67 73 20 3d 20 43 4b 46 5f 57 52 49 54 45 5f ags = CKF_WRITE_ 19bc0 50 52 4f 54 45 43 54 45 44 20 7c 20 43 4b 46 5f PROTECTED | CKF_ 19bd0 55 53 45 52 5f 50 49 4e 5f 49 4e 49 54 49 41 4c USER_PIN_INITIAL 19be0 49 5a 45 44 20 7c 20 43 4b 46 5f 54 4f 4b 45 4e IZED | CKF_TOKEN 19bf0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 20 7c 20 63 _INITIALIZED | c 19c00 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 ackey_slots[slot 19c10 49 44 5d 2e 74 6f 6b 65 6e 5f 66 6c 61 67 73 3b ID].token_flags; 19c20 0a 0a 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 53 ...pInfo->ulMaxS 19c30 65 73 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 28 73 essionCount = (s 19c40 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 19c50 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 sions) / sizeof( 19c60 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 19c70 30 5d 29 29 20 2d 20 31 3b 0a 09 70 49 6e 66 6f 0])) - 1;..pInfo 19c80 2d 3e 75 6c 53 65 73 73 69 6f 6e 43 6f 75 6e 74 ->ulSessionCount 19c90 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c = CK_UNAVAILABL 19ca0 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 E_INFORMATION;.. 19cb0 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 52 77 53 65 pInfo->ulMaxRwSe 19cc0 73 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 30 3b 0a ssionCount = 0;. 19cd0 09 70 49 6e 66 6f 2d 3e 75 6c 52 77 53 65 73 73 .pInfo->ulRwSess 19ce0 69 6f 6e 43 6f 75 6e 74 20 3d 20 43 4b 5f 55 4e ionCount = CK_UN 19cf0 41 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d AVAILABLE_INFORM 19d00 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 ATION;..pInfo->u 19d10 6c 4d 61 78 50 69 6e 4c 65 6e 20 3d 20 31 32 38 lMaxPinLen = 128 19d20 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 50 ;..pInfo->ulMinP 19d30 69 6e 4c 65 6e 20 3d 20 30 3b 0a 09 70 49 6e 66 inLen = 0;..pInf 19d40 6f 2d 3e 75 6c 54 6f 74 61 6c 50 75 62 6c 69 63 o->ulTotalPublic 19d50 4d 65 6d 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 56 Memory = CK_UNAV 19d60 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 AILABLE_INFORMAT 19d70 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 46 ION;..pInfo->ulF 19d80 72 65 65 50 75 62 6c 69 63 4d 65 6d 6f 72 79 20 reePublicMemory 19d90 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45 = CK_UNAVAILABLE 19da0 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 _INFORMATION;..p 19db0 49 6e 66 6f 2d 3e 75 6c 54 6f 74 61 6c 50 72 69 Info->ulTotalPri 19dc0 76 61 74 65 4d 65 6d 6f 72 79 20 3d 20 43 4b 5f vateMemory = CK_ 19dd0 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f UNAVAILABLE_INFO 19de0 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d RMATION;..pInfo- 19df0 3e 75 6c 46 72 65 65 50 72 69 76 61 74 65 4d 65 >ulFreePrivateMe 19e00 6d 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 56 41 49 mory = CK_UNAVAI 19e10 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f LABLE_INFORMATIO 19e20 4e 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 N;...CACKEY_DEBU 19e30 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 19e40 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 19e50 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret 19e60 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}.. 19e70 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 19e80 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 57 61 69 74 ON(CK_RV, C_Wait 19e90 46 6f 72 53 6c 6f 74 45 76 65 6e 74 29 28 43 4b ForSlotEvent)(CK 19ea0 5f 46 4c 41 47 53 20 66 6c 61 67 73 2c 20 43 4b _FLAGS flags, CK 19eb0 5f 53 4c 4f 54 5f 49 44 5f 50 54 52 20 70 53 6c _SLOT_ID_PTR pSl 19ec0 6f 74 49 44 2c 20 43 4b 5f 56 4f 49 44 5f 50 54 otID, CK_VOID_PT 19ed0 52 20 70 52 65 73 65 72 76 65 64 29 20 7b 0a 09 R pReserved) {.. 19ee0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 19ef0 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 19f00 0a 09 69 66 20 28 70 52 65 73 65 72 76 65 64 20 ..if (pReserved 19f10 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 != NULL) {...CAC 19f20 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 19f30 28 22 45 72 72 6f 72 2e 20 70 52 65 73 65 72 76 ("Error. pReserv 19f40 65 64 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 ed is not NULL." 19f50 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 19f60 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b _ARGUMENTS_BAD); 19f70 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ..}...if (!cacke 19f80 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 19f90 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 19fa0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 19fb0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 19fc0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 19fd0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 19fe0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 19ff0 0a 09 2f 2a 20 58 58 58 3a 20 54 4f 44 4f 3a 20 ../* XXX: TODO: 1a000 49 6d 70 6c 65 6d 65 6e 74 20 74 68 69 73 2e 2e Implement this.. 1a010 2e 20 2a 2f 0a 09 43 41 43 4b 45 59 5f 44 45 42 . */..CACKEY_DEB 1a020 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1a030 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 1a040 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 1a050 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 1a060 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1a070 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 1a080 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1a090 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 1a0a0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 1a0b0 43 4b 5f 52 56 2c 20 43 5f 47 65 74 4d 65 63 68 CK_RV, C_GetMech 1a0c0 61 6e 69 73 6d 4c 69 73 74 29 28 43 4b 5f 53 4c anismList)(CK_SL 1a0d0 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b OT_ID slotID, CK 1a0e0 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 59 50 45 5f _MECHANISM_TYPE_ 1a0f0 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 4c 69 PTR pMechanismLi 1a100 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 st, CK_ULONG_PTR 1a110 20 70 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 43 41 pulCount) {..CA 1a120 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1a130 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 1a140 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 1a150 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 1a160 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1a170 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 1a180 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 1a190 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 1a1a0 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 1a1b0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 IZED);..}...if ( 1a1c0 70 75 6c 43 6f 75 6e 74 20 3d 3d 20 4e 55 4c 4c pulCount == NULL 1a1d0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1a1e0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1a1f0 2e 20 20 70 75 6c 43 6f 75 6e 74 20 69 73 20 4e . pulCount is N 1a200 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 ULL.");....retur 1a210 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f n(CKR_ARGUMENTS_ 1a220 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 BAD);..}...if (p 1a230 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 20 3d 3d MechanismList == 1a240 20 4e 55 4c 4c 29 20 7b 0a 09 09 2a 70 75 6c 43 NULL) {...*pulC 1a250 6f 75 6e 74 20 3d 20 32 3b 0a 0a 09 09 43 41 43 ount = 2;....CAC 1a260 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1a270 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1a280 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b OK (%i)", CKR_OK 1a290 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1a2a0 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 2a _OK);..}...if (* 1a2b0 70 75 6c 43 6f 75 6e 74 20 3c 20 32 29 20 7b 0a pulCount < 2) {. 1a2c0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1a2d0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 42 RINTF("Error. B 1a2e0 75 66 66 65 72 20 74 6f 6f 20 73 6d 61 6c 6c 2e uffer too small. 1a2f0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1a300 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 R_BUFFER_TOO_SMA 1a310 4c 4c 29 3b 0a 09 7d 0a 0a 09 70 4d 65 63 68 61 LL);..}...pMecha 1a320 6e 69 73 6d 4c 69 73 74 5b 30 5d 20 3d 20 43 4b nismList[0] = CK 1a330 4d 5f 52 53 41 5f 50 4b 43 53 3b 0a 09 70 4d 65 M_RSA_PKCS;..pMe 1a340 63 68 61 6e 69 73 6d 4c 69 73 74 5b 31 5d 20 3d chanismList[1] = 1a350 20 43 4b 4d 5f 53 48 41 31 5f 52 53 41 5f 50 4b CKM_SHA1_RSA_PK 1a360 43 53 3b 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 3d CS;..*pulCount = 1a370 20 32 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 2;...CACKEY_DEB 1a380 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1a390 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 1a3a0 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 1a3b0 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 1a3c0 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 1a3d0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 ION(CK_RV, C_Get 1a3e0 4d 65 63 68 61 6e 69 73 6d 49 6e 66 6f 29 28 43 MechanismInfo)(C 1a3f0 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 K_SLOT_ID slotID 1a400 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 , CK_MECHANISM_T 1a410 59 50 45 20 74 79 70 65 2c 20 43 4b 5f 4d 45 43 YPE type, CK_MEC 1a420 48 41 4e 49 53 4d 5f 49 4e 46 4f 5f 50 54 52 20 HANISM_INFO_PTR 1a430 70 49 6e 66 6f 29 20 7b 0a 09 69 6e 74 20 6d 75 pInfo) {..int mu 1a440 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 tex_retval;...CA 1a450 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1a460 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 1a470 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c if (pInfo == NUL 1a480 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 L) {...CACKEY_DE 1a490 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1a4a0 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c r. pInfo is NULL 1a4b0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1a4c0 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD 1a4d0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 1a4e0 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 1a4f0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1a500 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1a510 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 1a520 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1a530 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 1a540 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 1a550 7d 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 3c }...if (slotID < 1a560 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 0 || slotID >= 1a570 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 (sizeof(cackey_s 1a580 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 lots) / sizeof(c 1a590 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 ackey_slots[0])) 1a5a0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1a5b0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1a5c0 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 . Invalid slot r 1a5d0 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 equested (%lu), 1a5e0 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 64 outside of valid 1a5f0 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 range", slotID) 1a600 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1a610 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 SLOT_ID_INVALID) 1a620 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 1a630 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 1a640 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 ex_lock(cackey_b 1a650 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 1a660 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 1a670 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1a680 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1a690 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Locking failed 1a6a0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1a6b0 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 1a6c0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b );..}...if (cack 1a6d0 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d ey_slots[slotID] 1a6e0 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a .active == 0) {. 1a6f0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1a700 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e RINTF("Error. In 1a710 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 valid slot reque 1a720 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 sted (%lu), slot 1a730 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 not currently a 1a740 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b ctive", slotID); 1a750 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 ....cackey_mutex 1a760 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 1a770 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 iglock);....retu 1a780 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 rn(CKR_SLOT_ID_I 1a790 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 NVALID);..}...mu 1a7a0 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 1a7b0 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1a7c0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1a7d0 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 1a7e0 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 1a7f0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1a800 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 1a810 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 1a820 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 1a830 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 1a840 0a 0a 09 2f 2a 20 58 58 58 3a 20 54 68 69 73 20 .../* XXX: This 1a850 69 73 20 75 6e 74 65 73 74 65 64 2c 20 61 6e 64 is untested, and 1a860 20 66 75 72 74 68 65 72 20 49 27 6d 20 6e 6f 74 further I'm not 1a870 20 72 65 61 6c 6c 79 20 73 75 72 65 20 69 66 20 really sure if 1a880 74 68 69 73 20 69 73 20 63 6f 72 72 65 63 74 2e this is correct. 1a890 20 2a 2f 0a 09 73 77 69 74 63 68 20 28 74 79 70 */..switch (typ 1a8a0 65 29 20 7b 0a 09 09 63 61 73 65 20 43 4b 4d 5f e) {...case CKM_ 1a8b0 52 53 41 5f 50 4b 43 53 3a 0a 09 09 09 70 49 6e RSA_PKCS:....pIn 1a8c0 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 53 69 7a 65 fo->ulMinKeySize 1a8d0 20 3d 20 35 31 32 3b 0a 09 09 09 70 49 6e 66 6f = 512;....pInfo 1a8e0 2d 3e 75 6c 4d 61 78 4b 65 79 53 69 7a 65 20 3d ->ulMaxKeySize = 1a8f0 20 38 31 39 32 3b 0a 09 09 09 70 49 6e 66 6f 2d 8192;....pInfo- 1a900 3e 66 6c 61 67 73 20 3d 20 43 4b 46 5f 48 57 20 >flags = CKF_HW 1a910 7c 20 43 4b 46 5f 45 4e 43 52 59 50 54 20 7c 20 | CKF_ENCRYPT | 1a920 43 4b 46 5f 44 45 43 52 59 50 54 20 7c 20 43 4b CKF_DECRYPT | CK 1a930 46 5f 53 49 47 4e 20 7c 20 43 4b 46 5f 56 45 52 F_SIGN | CKF_VER 1a940 49 46 59 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 IFY;....break;.. 1a950 09 63 61 73 65 20 43 4b 4d 5f 52 53 41 5f 58 5f .case CKM_RSA_X_ 1a960 35 30 39 3a 0a 09 09 09 70 49 6e 66 6f 2d 3e 75 509:....pInfo->u 1a970 6c 4d 69 6e 4b 65 79 53 69 7a 65 20 3d 20 35 31 lMinKeySize = 51 1a980 32 3b 0a 09 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d 2;....pInfo->ulM 1a990 61 78 4b 65 79 53 69 7a 65 20 3d 20 38 31 39 32 axKeySize = 8192 1a9a0 3b 0a 09 09 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 ;....pInfo->flag 1a9b0 73 20 3d 20 43 4b 46 5f 48 57 20 7c 20 43 4b 46 s = CKF_HW | CKF 1a9c0 5f 45 4e 43 52 59 50 54 20 7c 20 43 4b 46 5f 44 _ENCRYPT | CKF_D 1a9d0 45 43 52 59 50 54 20 7c 20 43 4b 46 5f 53 49 47 ECRYPT | CKF_SIG 1a9e0 4e 20 7c 20 43 4b 46 5f 56 45 52 49 46 59 3b 0a N | CKF_VERIFY;. 1a9f0 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 ...break;...case 1aa00 20 43 4b 4d 5f 53 48 41 31 5f 52 53 41 5f 50 4b CKM_SHA1_RSA_PK 1aa10 43 53 3a 0a 09 09 09 70 49 6e 66 6f 2d 3e 75 6c CS:....pInfo->ul 1aa20 4d 69 6e 4b 65 79 53 69 7a 65 20 3d 20 35 31 32 MinKeySize = 512 1aa30 3b 0a 09 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 ;....pInfo->ulMa 1aa40 78 4b 65 79 53 69 7a 65 20 3d 20 38 31 39 32 3b xKeySize = 8192; 1aa50 0a 09 09 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 ....pInfo->flags 1aa60 20 3d 20 43 4b 46 5f 48 57 20 7c 20 43 4b 46 5f = CKF_HW | CKF_ 1aa70 53 49 47 4e 20 7c 20 43 4b 46 5f 56 45 52 49 46 SIGN | CKF_VERIF 1aa80 59 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a Y;....break;..}. 1aa90 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1aaa0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 1aab0 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C 1aac0 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return 1aad0 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 20 (CKR_OK);.}../* 1aae0 57 65 20 64 6f 6e 27 74 20 73 75 70 70 6f 72 74 We don't support 1aaf0 20 74 68 69 73 20 6d 65 74 68 6f 64 2e 20 2a 2f this method. */ 1ab00 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 1ab10 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 49 6e 69 ION(CK_RV, C_Ini 1ab20 74 54 6f 6b 65 6e 29 28 43 4b 5f 53 4c 4f 54 5f tToken)(CK_SLOT_ 1ab30 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 55 54 ID slotID, CK_UT 1ab40 46 38 43 48 41 52 5f 50 54 52 20 70 50 69 6e 2c F8CHAR_PTR pPin, 1ab50 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 69 6e 4c CK_ULONG ulPinL 1ab60 65 6e 2c 20 43 4b 5f 55 54 46 38 43 48 41 52 5f en, CK_UTF8CHAR_ 1ab70 50 54 52 20 70 4c 61 62 65 6c 29 20 7b 0a 09 43 PTR pLabel) {..C 1ab80 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1ab90 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 1aba0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 1abb0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 1abc0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1abd0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 1abe0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 1abf0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 1ac00 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 1ac10 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 1ac20 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1ac30 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1ac40 54 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 TOKEN_WRITE_PROT 1ac50 45 43 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ECTED (%i)", CKR 1ac60 5f 54 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 4f _TOKEN_WRITE_PRO 1ac70 54 45 43 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 TECTED);...retur 1ac80 6e 28 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 n(CKR_TOKEN_WRIT 1ac90 45 5f 50 52 4f 54 45 43 54 45 44 29 3b 0a 7d 0a E_PROTECTED);.}. 1aca0 0a 2f 2a 20 57 65 20 64 6f 6e 27 74 20 73 75 70 ./* We don't sup 1acb0 70 6f 72 74 20 74 68 69 73 20 6d 65 74 68 6f 64 port this method 1acc0 2e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 . */.CK_DEFINE_F 1acd0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 1ace0 5f 49 6e 69 74 50 49 4e 29 28 43 4b 5f 53 45 53 _InitPIN)(CK_SES 1acf0 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 1ad00 73 69 6f 6e 2c 20 43 4b 5f 55 54 46 38 43 48 41 sion, CK_UTF8CHA 1ad10 52 5f 50 54 52 20 70 50 69 6e 2c 20 43 4b 5f 55 R_PTR pPin, CK_U 1ad20 4c 4f 4e 47 20 75 6c 50 69 6e 4c 65 6e 29 20 7b LONG ulPinLen) { 1ad30 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1ad40 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 1ad50 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 1ad60 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 1ad70 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1ad80 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 1ad90 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 1ada0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1adb0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 1adc0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 1add0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1ade0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 1adf0 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 KR_TOKEN_WRITE_P 1ae00 52 4f 54 45 43 54 45 44 20 28 25 69 29 22 2c 20 ROTECTED (%i)", 1ae10 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 45 5f CKR_TOKEN_WRITE_ 1ae20 50 52 4f 54 45 43 54 45 44 29 3b 0a 0a 09 72 65 PROTECTED);...re 1ae30 74 75 72 6e 28 43 4b 52 5f 54 4f 4b 45 4e 5f 57 turn(CKR_TOKEN_W 1ae40 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 29 3b RITE_PROTECTED); 1ae50 0a 7d 0a 0a 2f 2a 20 57 65 20 64 6f 6e 27 74 20 .}../* We don't 1ae60 73 75 70 70 6f 72 74 20 74 68 69 73 20 6d 65 74 support this met 1ae70 68 6f 64 2e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e hod. */.CK_DEFIN 1ae80 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 1ae90 2c 20 43 5f 53 65 74 50 49 4e 29 28 43 4b 5f 53 , C_SetPIN)(CK_S 1aea0 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 1aeb0 65 73 73 69 6f 6e 2c 20 43 4b 5f 55 54 46 38 43 ession, CK_UTF8C 1aec0 48 41 52 5f 50 54 52 20 70 4f 6c 64 50 69 6e 2c HAR_PTR pOldPin, 1aed0 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 4f 6c 64 50 CK_ULONG ulOldP 1aee0 69 6e 4c 65 6e 2c 20 43 4b 5f 55 54 46 38 43 48 inLen, CK_UTF8CH 1aef0 41 52 5f 50 54 52 20 70 4e 65 77 50 69 6e 2c 20 AR_PTR pNewPin, 1af00 43 4b 5f 55 4c 4f 4e 47 20 75 6c 4e 65 77 50 69 CK_ULONG ulNewPi 1af10 6e 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f nLen) {..CACKEY_ 1af20 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 1af30 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 1af40 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 1af50 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 1af60 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1af70 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 1af80 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 1af90 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 1afa0 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 1afb0 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 1afc0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 1afd0 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 rning CKR_FUNCTI 1afe0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1aff0 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 (%i)", CKR_FUNC 1b000 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1b010 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK 1b020 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1b030 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b UPPORTED);.}..CK 1b040 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 1b050 28 43 4b 5f 52 56 2c 20 43 5f 4f 70 65 6e 53 65 (CK_RV, C_OpenSe 1b060 73 73 69 6f 6e 29 28 43 4b 5f 53 4c 4f 54 5f 49 ssion)(CK_SLOT_I 1b070 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 46 4c 41 D slotID, CK_FLA 1b080 47 53 20 66 6c 61 67 73 2c 20 43 4b 5f 56 4f 49 GS flags, CK_VOI 1b090 44 5f 50 54 52 20 70 41 70 70 6c 69 63 61 74 69 D_PTR pApplicati 1b0a0 6f 6e 2c 20 43 4b 5f 4e 4f 54 49 46 59 20 6e 6f on, CK_NOTIFY no 1b0b0 74 69 66 79 2c 20 43 4b 5f 53 45 53 53 49 4f 4e tify, CK_SESSION 1b0c0 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 53 65 _HANDLE_PTR phSe 1b0d0 73 73 69 6f 6e 29 20 7b 0a 09 75 6e 73 69 67 6e ssion) {..unsign 1b0e0 65 64 20 6c 6f 6e 67 20 69 64 78 3b 0a 09 69 6e ed long idx;..in 1b0f0 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a t mutex_retval;. 1b100 09 69 6e 74 20 66 6f 75 6e 64 5f 73 65 73 73 69 .int found_sessi 1b110 6f 6e 20 3d 20 30 3b 0a 0a 09 43 41 43 4b 45 59 on = 0;...CACKEY 1b120 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 1b130 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 1b140 28 66 6c 61 67 73 20 26 20 43 4b 46 5f 53 45 52 (flags & CKF_SER 1b150 49 41 4c 5f 53 45 53 53 49 4f 4e 29 20 21 3d 20 IAL_SESSION) != 1b160 43 4b 46 5f 53 45 52 49 41 4c 5f 53 45 53 53 49 CKF_SERIAL_SESSI 1b170 4f 4e 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 43 ON) {...return(C 1b180 4b 52 5f 53 45 53 53 49 4f 4e 5f 50 41 52 41 4c KR_SESSION_PARAL 1b190 4c 45 4c 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 LEL_NOT_SUPPORTE 1b1a0 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 D);..}...if (!ca 1b1b0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 1b1c0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1b1d0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1b1e0 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 1b1f0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1b200 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 1b210 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 1b220 09 7d 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 .}...if (slotID 1b230 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d < 0 || slotID >= 1b240 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 1b250 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 slots) / sizeof( 1b260 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 cackey_slots[0]) 1b270 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE 1b280 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1b290 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 r. Invalid slot 1b2a0 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c requested (%lu), 1b2b0 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 outside of vali 1b2c0 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 d range", slotID 1b2d0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1b2e0 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 _SLOT_ID_INVALID 1b2f0 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 );..}...mutex_re 1b300 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 1b310 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 1b320 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 1b330 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 1b340 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1b350 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1b360 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 1b370 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1b380 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 1b390 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 R);..}...if (cac 1b3a0 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 key_slots[slotID 1b3b0 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b ].active == 0) { 1b3c0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1b3d0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 PRINTF("Error. I 1b3e0 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 nvalid slot requ 1b3f0 65 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f ested (%lu), slo 1b400 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 t not currently 1b410 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 active", slotID) 1b420 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 ;....cackey_mute 1b430 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 1b440 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 biglock);....ret 1b450 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f urn(CKR_SLOT_ID_ 1b460 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 2f INVALID);..}.../ 1b470 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 74 68 * Verify that th 1b480 65 20 63 61 72 64 20 69 73 20 61 63 74 75 61 6c e card is actual 1b490 6c 79 20 69 6e 20 74 68 65 20 73 6c 6f 74 2e 20 ly in the slot. 1b4a0 2a 2f 0a 09 2f 2a 20 58 58 58 3a 20 43 68 65 63 */../* XXX: Chec 1b4b0 6b 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 k to make sure t 1b4c0 68 69 73 20 69 73 20 69 6e 20 74 68 65 20 50 4b his is in the PK 1b4d0 43 53 23 31 31 20 73 70 65 63 69 66 69 63 61 74 CS#11 specificat 1b4e0 69 6f 6e 20 2a 2f 0a 09 69 66 20 28 63 61 63 6b ion */..if (cack 1b4f0 65 79 5f 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 ey_token_present 1b500 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 (&cackey_slots[s 1b510 6c 6f 74 49 44 5d 29 20 21 3d 20 43 41 43 4b 45 lotID]) != CACKE 1b520 59 5f 50 43 53 43 5f 53 5f 54 4f 4b 45 4e 50 52 Y_PCSC_S_TOKENPR 1b530 45 53 45 4e 54 29 20 7b 0a 09 09 43 41 43 4b 45 ESENT) {...CACKE 1b540 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1b550 45 72 72 6f 72 2e 20 20 43 61 72 64 20 6e 6f 74 Error. Card not 1b560 20 70 72 65 73 65 6e 74 2e 20 20 52 65 74 75 72 present. Retur 1b570 6e 69 6e 67 20 43 4b 52 5f 44 45 56 49 43 45 5f ning CKR_DEVICE_ 1b580 52 45 4d 4f 56 45 44 22 29 3b 0a 0a 09 09 63 61 REMOVED");....ca 1b590 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 1b5a0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1b5b0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1b5c0 5f 44 45 56 49 43 45 5f 52 45 4d 4f 56 45 44 29 _DEVICE_REMOVED) 1b5d0 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 ;..}...for (idx 1b5e0 3d 20 31 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 = 1; idx < (size 1b5f0 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 1b600 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ns) / sizeof(cac 1b610 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 key_sessions[0]) 1b620 29 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 ); idx++) {...if 1b630 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f (!cackey_sessio 1b640 6e 73 5b 69 64 78 5d 2e 61 63 74 69 76 65 29 20 ns[idx].active) 1b650 7b 0a 09 09 09 66 6f 75 6e 64 5f 73 65 73 73 69 {....found_sessi 1b660 6f 6e 20 3d 20 31 3b 0a 0a 09 09 09 2a 70 68 53 on = 1;.....*phS 1b670 65 73 73 69 6f 6e 20 3d 20 69 64 78 3b 0a 0a 09 ession = idx;... 1b680 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 1b690 73 5b 69 64 78 5d 2e 61 63 74 69 76 65 20 3d 20 s[idx].active = 1b6a0 31 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 1;....cackey_ses 1b6b0 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 6c 6f 74 49 sions[idx].slotI 1b6c0 44 20 3d 20 73 6c 6f 74 49 44 3b 0a 09 09 09 63 D = slotID;....c 1b6d0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 ackey_sessions[i 1b6e0 64 78 5d 2e 73 74 61 74 65 20 3d 20 43 4b 53 5f dx].state = CKS_ 1b6f0 52 4f 5f 50 55 42 4c 49 43 5f 53 45 53 53 49 4f RO_PUBLIC_SESSIO 1b700 4e 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 N;....cackey_ses 1b710 73 69 6f 6e 73 5b 69 64 78 5d 2e 66 6c 61 67 73 sions[idx].flags 1b720 20 3d 20 66 6c 61 67 73 3b 0a 09 09 09 63 61 63 = flags;....cac 1b730 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 key_sessions[idx 1b740 5d 2e 75 6c 44 65 76 69 63 65 45 72 72 6f 72 20 ].ulDeviceError 1b750 3d 20 30 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 = 0;....cackey_s 1b760 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 70 41 70 essions[idx].pAp 1b770 70 6c 69 63 61 74 69 6f 6e 20 3d 20 70 41 70 70 plication = pApp 1b780 6c 69 63 61 74 69 6f 6e 3b 0a 09 09 09 63 61 63 lication;....cac 1b790 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 key_sessions[idx 1b7a0 5d 2e 4e 6f 74 69 66 79 20 3d 20 6e 6f 74 69 66 ].Notify = notif 1b7b0 79 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 y;.....cackey_se 1b7c0 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 69 64 65 6e ssions[idx].iden 1b7d0 74 69 74 69 65 73 20 3d 20 4e 55 4c 4c 3b 0a 09 tities = NULL;.. 1b7e0 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 1b7f0 73 5b 69 64 78 5d 2e 69 64 65 6e 74 69 74 69 65 s[idx].identitie 1b800 73 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 0a 09 09 s_count = 0;.... 1b810 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 1b820 5b 69 64 78 5d 2e 73 65 61 72 63 68 5f 61 63 74 [idx].search_act 1b830 69 76 65 20 3d 20 30 3b 0a 0a 09 09 09 63 61 63 ive = 0;.....cac 1b840 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 key_sessions[idx 1b850 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 20 3d 20 ].sign_active = 1b860 30 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 0;.....cackey_se 1b870 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 64 65 63 72 ssions[idx].decr 1b880 79 70 74 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a ypt_active = 0;. 1b890 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 ....cackey_sessi 1b8a0 6f 6e 73 5b 69 64 78 5d 2e 69 64 65 6e 74 69 74 ons[idx].identit 1b8b0 69 65 73 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 ies = cackey_rea 1b8c0 64 5f 69 64 65 6e 74 69 74 69 65 73 28 26 63 61 d_identities(&ca 1b8d0 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 ckey_slots[slotI 1b8e0 44 5d 2c 20 26 63 61 63 6b 65 79 5f 73 65 73 73 D], &cackey_sess 1b8f0 69 6f 6e 73 5b 69 64 78 5d 2e 69 64 65 6e 74 69 ions[idx].identi 1b900 74 69 65 73 5f 63 6f 75 6e 74 29 3b 0a 0a 0a 09 ties_count);.... 1b910 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 09 7d 0a ..break;...}..}. 1b920 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 1b930 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e cackey_mutex_un 1b940 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 1b950 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 1b960 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 1b970 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1b980 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 RINTF("Error. U 1b990 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e nlocking failed. 1b9a0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1b9b0 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 1b9c0 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 66 6f 75 6e ;..}...if (!foun 1b9d0 64 5f 73 65 73 73 69 6f 6e 29 20 7b 0a 09 09 43 d_session) {...C 1b9e0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1b9f0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1ba00 52 5f 53 45 53 53 49 4f 4e 5f 43 4f 55 4e 54 20 R_SESSION_COUNT 1ba10 28 25 69 29 22 2c 20 43 4b 52 5f 53 45 53 53 49 (%i)", CKR_SESSI 1ba20 4f 4e 5f 43 4f 55 4e 54 29 3b 0a 0a 09 09 72 65 ON_COUNT);....re 1ba30 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 1ba40 5f 43 4f 55 4e 54 29 3b 0a 09 7d 0a 0a 09 43 41 _COUNT);..}...CA 1ba50 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1ba60 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 1ba70 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f _OK (%i)", CKR_O 1ba80 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 K);...return(CKR 1ba90 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 _OK);.}..CK_DEFI 1baa0 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 1bab0 56 2c 20 43 5f 43 6c 6f 73 65 53 65 73 73 69 6f V, C_CloseSessio 1bac0 6e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 n)(CK_SESSION_HA 1bad0 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 20 7b NDLE hSession) { 1bae0 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 ..int mutex_retv 1baf0 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 al;...CACKEY_DEB 1bb00 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 1bb10 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 1bb20 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 1bb30 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1bb40 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1bb50 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 1bb60 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1bb70 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 1bb80 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 1bb90 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e }...if (hSession 1bba0 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f == 0 || hSessio 1bbb0 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 n >= (sizeof(cac 1bbc0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 key_sessions) / 1bbd0 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 1bbe0 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 ssions[0]))) {.. 1bbf0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1bc00 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 1bc10 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e ssion out of ran 1bc20 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 ge.");......retu 1bc30 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 rn(CKR_SESSION_H 1bc40 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a ANDLE_INVALID);. 1bc50 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 .}...mutex_retva 1bc60 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 1bc70 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 _lock(cackey_big 1bc80 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 1bc90 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 1bca0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1bcb0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1bcc0 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 Locking failed." 1bcd0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1bce0 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 1bcf0 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ..}...if (!cacke 1bd00 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 1bd10 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 ion].active) {.. 1bd20 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e .cackey_mutex_un 1bd30 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 1bd40 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f ock);....CACKEY_ 1bd50 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1bd60 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f ror. Session no 1bd70 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a t active.");.... 1bd80 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES 1bd90 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 SION_HANDLE_INVA 1bda0 4c 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 LID);..}...cacke 1bdb0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 1bdc0 69 6f 6e 5d 2e 61 63 74 69 76 65 20 3d 20 30 3b ion].active = 0; 1bdd0 0a 09 63 61 63 6b 65 79 5f 66 72 65 65 5f 69 64 ..cackey_free_id 1bde0 65 6e 74 69 74 69 65 73 28 63 61 63 6b 65 79 5f entities(cackey_ 1bdf0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1be00 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 2c 20 63 n].identities, c 1be10 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1be20 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 Session].identit 1be30 69 65 73 5f 63 6f 75 6e 74 29 3b 0a 0a 09 6d 75 ies_count);...mu 1be40 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 1be50 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1be60 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1be70 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 1be80 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 1be90 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1bea0 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 1beb0 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 1bec0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 1bed0 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 1bee0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1bef0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1bf00 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", 1bf10 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 CKR_OK);...retur 1bf20 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b n(CKR_OK);.}..CK 1bf30 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 1bf40 28 43 4b 5f 52 56 2c 20 43 5f 43 6c 6f 73 65 41 (CK_RV, C_CloseA 1bf50 6c 6c 53 65 73 73 69 6f 6e 73 29 28 43 4b 5f 53 llSessions)(CK_S 1bf60 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 29 20 7b LOT_ID slotID) { 1bf70 0a 09 75 69 6e 74 33 32 5f 74 20 69 64 78 3b 0a ..uint32_t idx;. 1bf80 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 .int mutex_retva 1bf90 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 l;...CACKEY_DEBU 1bfa0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 1bfb0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 1bfc0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1bfd0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1bfe0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1bff0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1c000 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1c010 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1c020 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1c030 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 3c 20 ...if (slotID < 1c040 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 28 0 || slotID >= ( 1c050 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c sizeof(cackey_sl 1c060 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 ots) / sizeof(ca 1c070 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 ckey_slots[0]))) 1c080 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1c090 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1c0a0 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 Invalid slot re 1c0b0 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 6f quested (%lu), o 1c0c0 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 64 20 utside of valid 1c0d0 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 3b range", slotID); 1c0e0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 1c0f0 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b LOT_ID_INVALID); 1c100 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 1c110 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 1c120 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 x_lock(cackey_bi 1c130 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 glock);..if (mut 1c140 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 1c150 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1c160 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1c170 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e Locking failed. 1c180 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1c190 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 1c1a0 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 ;..}...if (cacke 1c1b0 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e y_slots[slotID]. 1c1c0 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09 active == 0) {.. 1c1d0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1c1e0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 INTF("Error. Inv 1c1f0 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 alid slot reques 1c200 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 ted (%lu), slot 1c210 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 63 not currently ac 1c220 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a tive", slotID);. 1c230 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 1c240 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 1c250 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72 glock);....retur 1c260 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e n(CKR_SLOT_ID_IN 1c270 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 66 6f 72 VALID);..}...for 1c280 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c (idx = 0; idx < 1c290 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 1c2a0 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 1c2b0 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 1c2c0 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 ns[0])); idx++) 1c2d0 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 {...if (cackey_s 1c2e0 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 63 74 essions[idx].act 1c2f0 69 76 65 29 20 7b 0a 09 09 09 69 66 20 28 63 61 ive) {....if (ca 1c300 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 ckey_sessions[id 1c310 78 5d 2e 73 6c 6f 74 49 44 20 21 3d 20 73 6c 6f x].slotID != slo 1c320 74 49 44 29 20 7b 0a 09 09 09 09 63 6f 6e 74 69 tID) {.....conti 1c330 6e 75 65 3b 0a 09 09 09 7d 0a 0a 09 09 09 63 61 nue;....}.....ca 1c340 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 1c350 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1c360 29 3b 0a 09 09 09 43 5f 43 6c 6f 73 65 53 65 73 );....C_CloseSes 1c370 73 69 6f 6e 28 69 64 78 29 3b 0a 09 09 09 63 61 sion(idx);....ca 1c380 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( 1c390 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 1c3a0 0a 09 09 7d 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f ...}..}...mutex_ 1c3b0 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 1c3c0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 1c3d0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 1c3e0 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 1c3f0 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 1c400 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1c410 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 1c420 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 1c430 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 1c440 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 L_ERROR);..}...C 1c450 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1c460 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1c470 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ 1c480 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b OK);...return(CK 1c490 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 R_OK);.}..CK_DEF 1c4a0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1c4b0 52 56 2c 20 43 5f 47 65 74 53 65 73 73 69 6f 6e RV, C_GetSession 1c4c0 49 6e 66 6f 29 28 43 4b 5f 53 45 53 53 49 4f 4e Info)(CK_SESSION 1c4d0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 1c4e0 2c 20 43 4b 5f 53 45 53 53 49 4f 4e 5f 49 4e 46 , CK_SESSION_INF 1c4f0 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 7b 0a 09 O_PTR pInfo) {.. 1c500 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c int mutex_retval 1c510 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 1c520 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 1c530 22 29 3b 0a 0a 09 69 66 20 28 70 49 6e 66 6f 20 ");...if (pInfo 1c540 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 1c550 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1c560 28 22 45 72 72 6f 72 2e 20 70 49 6e 66 6f 20 69 ("Error. pInfo i 1c570 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 s NULL.");....re 1c580 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 1c590 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if 1c5a0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 1c5b0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 1c5c0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1c5d0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 1c5e0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 1c5f0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 1c600 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 1c610 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 ED);..}...if (hS 1c620 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 ession == 0 || h 1c630 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 Session >= (size 1c640 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 1c650 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ns) / sizeof(cac 1c660 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 key_sessions[0]) 1c670 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE 1c680 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1c690 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 r. Session out 1c6a0 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a of range.");.... 1c6b0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES 1c6c0 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 SION_HANDLE_INVA 1c6d0 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 LID);..}...mutex 1c6e0 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 1c6f0 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b _mutex_lock(cack 1c700 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 1c710 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 1c720 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 1c730 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1c740 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 ror. Locking fa 1c750 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 1c760 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 1c770 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 RROR);..}...if ( 1c780 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 !cackey_sessions 1c790 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 [hSession].activ 1c7a0 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 e) {...cackey_mu 1c7b0 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 1c7c0 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....C 1c7d0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1c7e0 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 1c7f0 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 ion not active." 1c800 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 1c810 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 1c820 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 1c830 09 70 49 6e 66 6f 2d 3e 73 6c 6f 74 49 44 20 3d .pInfo->slotID = 1c840 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 1c850 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f 74 49 [hSession].slotI 1c860 44 3b 0a 09 70 49 6e 66 6f 2d 3e 73 74 61 74 65 D;..pInfo->state 1c870 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f = cackey_sessio 1c880 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 74 61 ns[hSession].sta 1c890 74 65 3b 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 te;..pInfo->flag 1c8a0 73 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 s = cackey_sessi 1c8b0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 66 6c ons[hSession].fl 1c8c0 61 67 73 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 44 ags;..pInfo->ulD 1c8d0 65 76 69 63 65 45 72 72 6f 72 20 3d 20 63 61 63 eviceError = cac 1c8e0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1c8f0 73 73 69 6f 6e 5d 2e 75 6c 44 65 76 69 63 65 45 ssion].ulDeviceE 1c900 72 72 6f 72 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 rror;...mutex_re 1c910 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 1c920 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 1c930 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 1c940 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 1c950 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 1c960 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1c970 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 or. Unlocking f 1c980 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 ailed.");....ret 1c990 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 1c9a0 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 ERROR);..}...CAC 1c9b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1c9c0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1c9d0 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b OK (%i)", CKR_OK 1c9e0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 1c9f0 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e OK);.}..CK_DEFIN 1ca00 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 1ca10 2c 20 43 5f 47 65 74 4f 70 65 72 61 74 69 6f 6e , C_GetOperation 1ca20 53 74 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f State)(CK_SESSIO 1ca30 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 1ca40 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 1ca50 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 2c 20 OperationState, 1ca60 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 1ca70 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 4c 65 OperationStateLe 1ca80 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 n) {..CACKEY_DEB 1ca90 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 1caa0 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 1cab0 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 1cac0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1cad0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1cae0 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 1caf0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1cb00 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 1cb10 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 1cb20 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 1cb30 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1cb40 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 1cb50 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 1cb60 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 1cb70 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 1cb80 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 1cb90 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1cba0 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 1cbb0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 1cbc0 5f 52 56 2c 20 43 5f 53 65 74 4f 70 65 72 61 74 _RV, C_SetOperat 1cbd0 69 6f 6e 53 74 61 74 65 29 28 43 4b 5f 53 45 53 ionState)(CK_SES 1cbe0 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 1cbf0 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 sion, CK_BYTE_PT 1cc00 52 20 70 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 R pOperationStat 1cc10 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 4f 70 e, CK_ULONG ulOp 1cc20 65 72 61 74 69 6f 6e 53 74 61 74 65 4c 65 6e 2c erationStateLen, 1cc30 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL 1cc40 45 20 68 45 6e 63 72 79 70 74 69 6f 6e 4b 65 79 E hEncryptionKey 1cc50 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 1cc60 4c 45 20 68 41 75 74 68 65 6e 74 69 63 61 74 69 LE hAuthenticati 1cc70 6f 6e 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 onKey) {..CACKEY 1cc80 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 1cc90 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 1cca0 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 1ccb0 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 1ccc0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1ccd0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 1cce0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 1ccf0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 1cd00 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 1cd10 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 1cd20 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 1cd30 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 1cd40 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1cd50 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 1cd60 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 1cd70 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 1cd80 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 1cd90 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 1cda0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 1cdb0 4e 28 43 4b 5f 52 56 2c 20 43 5f 4c 6f 67 69 6e N(CK_RV, C_Login 1cdc0 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 1cdd0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 1cde0 5f 55 53 45 52 5f 54 59 50 45 20 75 73 65 72 54 _USER_TYPE userT 1cdf0 79 70 65 2c 20 43 4b 5f 55 54 46 38 43 48 41 52 ype, CK_UTF8CHAR 1ce00 5f 50 54 52 20 70 50 69 6e 2c 20 43 4b 5f 55 4c _PTR pPin, CK_UL 1ce10 4f 4e 47 20 75 6c 50 69 6e 4c 65 6e 29 20 7b 0a ONG ulPinLen) {. 1ce20 09 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 .CK_SLOT_ID slot 1ce30 49 44 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 ID;..int mutex_r 1ce40 65 74 76 61 6c 3b 0a 09 69 6e 74 20 74 72 69 65 etval;..int trie 1ce50 73 5f 72 65 6d 61 69 6e 69 6e 67 3b 0a 09 69 6e s_remaining;..in 1ce60 74 20 6c 6f 67 69 6e 5f 72 65 74 3b 0a 0a 09 43 t login_ret;...C 1ce70 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1ce80 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 1ce90 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 1cea0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 1ceb0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1cec0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 1ced0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 1cee0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 1cef0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 1cf00 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 LIZED);..}...if 1cf10 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c (hSession == 0 | 1cf20 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 | hSession >= (s 1cf30 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 1cf40 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 sions) / sizeof( 1cf50 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1cf60 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 0]))) {...CACKEY 1cf70 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1cf80 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f rror. Session o 1cf90 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a ut of range.");. 1cfa0 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 1cfb0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 1cfc0 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 NVALID);..}...if 1cfd0 20 28 75 73 65 72 54 79 70 65 20 21 3d 20 43 4b (userType != CK 1cfe0 55 5f 55 53 45 52 29 20 7b 0a 09 09 43 41 43 4b U_USER) {...CACK 1cff0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1d000 22 45 72 72 6f 72 2e 20 20 57 65 20 6f 6e 6c 79 "Error. We only 1d010 20 73 75 70 70 6f 72 74 20 55 53 45 52 20 6d 6f support USER mo 1d020 64 65 2c 20 61 73 6b 65 64 20 66 6f 72 20 25 6c de, asked for %l 1d030 75 20 6d 6f 64 65 2e 22 2c 20 28 75 6e 73 69 67 u mode.", (unsig 1d040 6e 65 64 20 6c 6f 6e 67 29 20 75 73 65 72 54 79 ned long) userTy 1d050 70 65 29 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b pe)....return(CK 1d060 52 5f 55 53 45 52 5f 54 59 50 45 5f 49 4e 56 41 R_USER_TYPE_INVA 1d070 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 LID);..}...mutex 1d080 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 1d090 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b _mutex_lock(cack 1d0a0 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 1d0b0 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 1d0c0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 1d0d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1d0e0 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 ror. Locking fa 1d0f0 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 1d100 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 1d110 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 RROR);..}...if ( 1d120 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 !cackey_sessions 1d130 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 [hSession].activ 1d140 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 e) {...cackey_mu 1d150 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 1d160 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....C 1d170 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1d180 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 1d190 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 ion not active." 1d1a0 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 1d1b0 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 1d1c0 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 1d1d0 09 73 6c 6f 74 49 44 20 3d 20 63 61 63 6b 65 79 .slotID = cackey 1d1e0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1d1f0 6f 6e 5d 2e 73 6c 6f 74 49 44 3b 0a 0a 09 69 66 on].slotID;...if 1d200 20 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 (slotID < 0 || 1d210 73 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f slotID >= (sizeo 1d220 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 f(cackey_slots) 1d230 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ 1d240 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 slots[0]))) {... 1d250 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1d260 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 NTF("Error. Inva 1d270 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 lid slot request 1d280 65 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 ed (%lu), outsid 1d290 65 20 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 e of valid range 1d2a0 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 ", slotID);....r 1d2b0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 1d2c0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i 1d2d0 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b f (cackey_slots[ 1d2e0 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 3d slotID].active = 1d2f0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 1d300 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1d310 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f ror. Invalid slo 1d320 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 t requested (%lu 1d330 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72 ), slot not curr 1d340 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20 73 ently active", s 1d350 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b 65 lotID);....cacke 1d360 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 1d370 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 1d380 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 1d390 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 1d3a0 0a 0a 09 6c 6f 67 69 6e 5f 72 65 74 20 3d 20 63 ...login_ret = c 1d3b0 61 63 6b 65 79 5f 6c 6f 67 69 6e 28 26 63 61 63 ackey_login(&cac 1d3c0 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 key_slots[slotID 1d3d0 5d 2c 20 70 50 69 6e 2c 20 75 6c 50 69 6e 4c 65 ], pPin, ulPinLe 1d3e0 6e 2c 20 26 74 72 69 65 73 5f 72 65 6d 61 69 6e n, &tries_remain 1d3f0 69 6e 67 29 3b 0a 09 69 66 20 28 6c 6f 67 69 6e ing);..if (login 1d400 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 _ret != CACKEY_P 1d410 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 63 61 CSC_S_OK) {...ca 1d420 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 1d430 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1d440 29 3b 0a 0a 09 09 69 66 20 28 6c 6f 67 69 6e 5f );....if (login_ 1d450 72 65 74 20 3d 3d 20 43 41 43 4b 45 59 5f 50 43 ret == CACKEY_PC 1d460 53 43 5f 45 5f 4c 4f 43 4b 45 44 29 20 7b 0a 09 SC_E_LOCKED) {.. 1d470 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1d480 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 54 RINTF("Error. T 1d490 6f 6b 65 6e 20 69 73 20 6c 6f 63 6b 65 64 2e 22 oken is locked." 1d4a0 29 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 6c );.....cackey_sl 1d4b0 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 74 6f 6b 65 ots[slotID].toke 1d4c0 6e 5f 66 6c 61 67 73 20 7c 3d 20 43 4b 46 5f 55 n_flags |= CKF_U 1d4d0 53 45 52 5f 50 49 4e 5f 4c 4f 43 4b 45 44 3b 0a SER_PIN_LOCKED;. 1d4e0 0a 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 50 ....return(CKR_P 1d4f0 49 4e 5f 4c 4f 43 4b 45 44 29 3b 0a 09 09 7d 20 IN_LOCKED);...} 1d500 65 6c 73 65 20 69 66 20 28 6c 6f 67 69 6e 5f 72 else if (login_r 1d510 65 74 20 3d 3d 20 43 41 43 4b 45 59 5f 50 43 53 et == CACKEY_PCS 1d520 43 5f 45 5f 42 41 44 50 49 4e 29 20 7b 0a 09 09 C_E_BADPIN) {... 1d530 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1d540 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 49 6e INTF("Error. In 1d550 76 61 6c 69 64 20 50 49 4e 2e 22 29 3b 0a 0a 09 valid PIN.");... 1d560 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 ..cackey_slots[s 1d570 6c 6f 74 49 44 5d 2e 74 6f 6b 65 6e 5f 66 6c 61 lotID].token_fla 1d580 67 73 20 7c 3d 20 43 4b 46 5f 55 53 45 52 5f 50 gs |= CKF_USER_P 1d590 49 4e 5f 43 4f 55 4e 54 5f 4c 4f 57 3b 0a 0a 09 IN_COUNT_LOW;... 1d5a0 09 09 69 66 20 28 74 72 69 65 73 5f 72 65 6d 61 ..if (tries_rema 1d5b0 69 6e 69 6e 67 20 3d 3d 20 31 29 20 7b 0a 09 09 ining == 1) {... 1d5c0 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 ..cackey_slots[s 1d5d0 6c 6f 74 49 44 5d 2e 74 6f 6b 65 6e 5f 66 6c 61 lotID].token_fla 1d5e0 67 73 20 7c 3d 20 43 4b 46 5f 55 53 45 52 5f 50 gs |= CKF_USER_P 1d5f0 49 4e 5f 46 49 4e 41 4c 5f 54 52 59 3b 0a 09 09 IN_FINAL_TRY;... 1d600 09 7d 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 4b .}.....return(CK 1d610 52 5f 50 49 4e 5f 49 4e 43 4f 52 52 45 43 54 29 R_PIN_INCORRECT) 1d620 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b 45 59 5f ;...}....CACKEY_ 1d630 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1d640 72 6f 72 2e 20 20 55 6e 6b 6e 6f 77 6e 20 65 72 ror. Unknown er 1d650 72 6f 72 20 72 65 74 75 72 6e 65 64 20 66 72 6f ror returned fro 1d660 6d 20 63 61 63 6b 65 79 5f 6c 6f 67 69 6e 28 29 m cackey_login() 1d670 20 28 25 69 29 22 2c 20 6c 6f 67 69 6e 5f 72 65 (%i)", login_re 1d680 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b t);....return(CK 1d690 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 1d6a0 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 6c ;..}...cackey_sl 1d6b0 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 74 6f 6b 65 ots[slotID].toke 1d6c0 6e 5f 66 6c 61 67 73 20 26 3d 20 7e 28 43 4b 46 n_flags &= ~(CKF 1d6d0 5f 55 53 45 52 5f 50 49 4e 5f 4c 4f 43 4b 45 44 _USER_PIN_LOCKED 1d6e0 20 7c 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f | CKF_USER_PIN_ 1d6f0 43 4f 55 4e 54 5f 4c 4f 57 20 7c 20 43 4b 46 5f COUNT_LOW | CKF_ 1d700 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 20 7c LOGIN_REQUIRED | 1d710 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 46 49 CKF_USER_PIN_FI 1d720 4e 41 4c 5f 54 52 59 29 3b 0a 0a 09 63 61 63 6b NAL_TRY);...cack 1d730 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1d740 73 69 6f 6e 5d 2e 73 74 61 74 65 20 3d 20 43 4b sion].state = CK 1d750 53 5f 52 4f 5f 55 53 45 52 5f 46 55 4e 43 54 49 S_RO_USER_FUNCTI 1d760 4f 4e 53 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ONS;...mutex_ret 1d770 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 1d780 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 1d790 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 1d7a0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 1d7b0 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 1d7c0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1d7d0 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 1d7e0 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 1d7f0 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 1d800 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b RROR);..}...CACK 1d810 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1d820 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 1d830 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) 1d840 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O 1d850 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 K);.}..CK_DEFINE 1d860 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 1d870 20 43 5f 4c 6f 67 6f 75 74 29 28 43 4b 5f 53 45 C_Logout)(CK_SE 1d880 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 1d890 73 73 69 6f 6e 29 20 7b 0a 09 43 4b 5f 53 4c 4f ssion) {..CK_SLO 1d8a0 54 5f 49 44 20 73 6c 6f 74 49 44 3b 0a 09 69 6e T_ID slotID;..in 1d8b0 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a t mutex_retval;. 1d8c0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1d8d0 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 1d8e0 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 1d8f0 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 1d900 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1d910 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 1d920 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 1d930 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1d940 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 1d950 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 1d960 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 if (hSession == 1d970 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 0 || hSession >= 1d980 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 1d990 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 1d9a0 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 1d9b0 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 ns[0]))) {...CAC 1d9c0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1d9d0 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 1d9e0 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 n out of range." 1d9f0 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 1da00 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 1da10 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 1da20 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 1da30 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 cackey_mutex_loc 1da40 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1da50 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 1da60 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 1da70 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1da80 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b TF("Error. Lock 1da90 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 1daa0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 1dab0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 1dac0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 ..if (!cackey_se 1dad0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 1dae0 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 .active) {...cac 1daf0 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1db00 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1db10 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 1db20 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1db30 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 Session not ac 1db40 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 1db50 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 1db60 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 1db70 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 49 44 20 3d 20 ;..}...slotID = 1db80 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1db90 68 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f 74 49 44 hSession].slotID 1dba0 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 3c ;...if (slotID < 1dbb0 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 0 || slotID >= 1dbc0 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 (sizeof(cackey_s 1dbd0 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 lots) / sizeof(c 1dbe0 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 ackey_slots[0])) 1dbf0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1dc00 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1dc10 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 . Invalid slot r 1dc20 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 equested (%lu), 1dc30 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 64 outside of valid 1dc40 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 range", slotID) 1dc50 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1dc60 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 1dc70 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f .}...if (cackey_ 1dc80 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 slots[slotID].ac 1dc90 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09 09 43 tive == 0) {...C 1dca0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1dcb0 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c TF("Error. Inval 1dcc0 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 id slot requeste 1dcd0 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f d (%lu), slot no 1dce0 74 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 t currently acti 1dcf0 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 ve", slotID);... 1dd00 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e .cackey_mutex_un 1dd10 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 1dd20 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 ock);....return( 1dd30 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 1dd40 52 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f R);..}...cackey_ 1dd50 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1dd60 6e 5d 2e 73 74 61 74 65 20 3d 20 43 4b 53 5f 52 n].state = CKS_R 1dd70 4f 5f 50 55 42 4c 49 43 5f 53 45 53 53 49 4f 4e O_PUBLIC_SESSION 1dd80 3b 0a 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ;..cackey_slots[ 1dd90 73 6c 6f 74 49 44 5d 2e 74 6f 6b 65 6e 5f 66 6c slotID].token_fl 1dda0 61 67 73 20 3d 20 43 4b 46 5f 4c 4f 47 49 4e 5f ags = CKF_LOGIN_ 1ddb0 52 45 51 55 49 52 45 44 3b 0a 0a 09 6d 75 74 65 REQUIRED;...mute 1ddc0 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 1ddd0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 1dde0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 1ddf0 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 1de00 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 1de10 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1de20 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 "Error. Unlocki 1de30 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 1de40 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 1de50 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 1de60 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1de70 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 1de80 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK 1de90 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 R_OK);...return( 1dea0 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 CKR_OK);.}..CK_D 1deb0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 1dec0 4b 5f 52 56 2c 20 43 5f 43 72 65 61 74 65 4f 62 K_RV, C_CreateOb 1ded0 6a 65 63 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e ject)(CK_SESSION 1dee0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 1def0 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 , CK_ATTRIBUTE_P 1df00 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b TR pTemplate, CK 1df10 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 2c 20 _ULONG ulCount, 1df20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 1df30 5f 50 54 52 20 70 68 4f 62 6a 65 63 74 29 20 7b _PTR phObject) { 1df40 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1df50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 1df60 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 1df70 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 1df80 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1df90 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 1dfa0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 1dfb0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1dfc0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 1dfd0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 1dfe0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1dff0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 1e000 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 1e010 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 1e020 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 1e030 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 1e040 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 1e050 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1e060 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 1e070 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 1e080 20 43 5f 43 6f 70 79 4f 62 6a 65 63 74 29 28 43 C_CopyObject)(C 1e090 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 1e0a0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 hSession, CK_OB 1e0b0 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a JECT_HANDLE hObj 1e0c0 65 63 74 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 ect, CK_ATTRIBUT 1e0d0 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c E_PTR pTemplate, 1e0e0 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e CK_ULONG ulCoun 1e0f0 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e t, CK_OBJECT_HAN 1e100 44 4c 45 5f 50 54 52 20 70 68 4e 65 77 4f 62 6a DLE_PTR phNewObj 1e110 65 63 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 ect) {..CACKEY_D 1e120 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 1e130 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 1e140 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 1e150 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 1e160 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1e170 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 1e180 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 1e190 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 1e1a0 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1e1b0 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 1e1c0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1e1d0 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 1e1e0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 1e1f0 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 1e200 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1e210 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 1e220 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1e230 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 1e240 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 1e250 43 4b 5f 52 56 2c 20 43 5f 44 65 73 74 72 6f 79 CK_RV, C_Destroy 1e260 4f 62 6a 65 63 74 29 28 43 4b 5f 53 45 53 53 49 Object)(CK_SESSI 1e270 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 1e280 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 on, CK_OBJECT_HA 1e290 4e 44 4c 45 20 68 4f 62 6a 65 63 74 29 20 7b 0a NDLE hObject) {. 1e2a0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1e2b0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1e2c0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1e2d0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1e2e0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1e2f0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1e300 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1e310 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1e320 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1e330 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 1e340 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1e350 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1e360 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1e370 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 1e380 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1e390 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 1e3a0 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 1e3b0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1e3c0 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1e3d0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1e3e0 43 5f 47 65 74 4f 62 6a 65 63 74 53 69 7a 65 29 C_GetObjectSize) 1e3f0 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 1e400 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 1e410 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f OBJECT_HANDLE hO 1e420 62 6a 65 63 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f bject, CK_ULONG_ 1e430 50 54 52 20 70 75 6c 53 69 7a 65 29 20 7b 0a 09 PTR pulSize) {.. 1e440 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1e450 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 1e460 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 1e470 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 1e480 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1e490 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 1e4a0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 1e4b0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 1e4c0 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 1e4d0 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 1e4e0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1e4f0 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 1e500 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1e510 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C 1e520 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 1e530 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re 1e540 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO 1e550 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 1e560 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 1e570 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 1e580 5f 47 65 74 41 74 74 72 69 62 75 74 65 56 61 6c _GetAttributeVal 1e590 75 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 ue)(CK_SESSION_H 1e5a0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 1e5b0 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 1e5c0 20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 41 54 54 hObject, CK_ATT 1e5d0 52 49 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 RIBUTE_PTR pTemp 1e5e0 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 late, CK_ULONG u 1e5f0 6c 43 6f 75 6e 74 29 20 7b 0a 09 43 4b 5f 41 54 lCount) {..CK_AT 1e600 54 52 49 42 55 54 45 20 2a 63 75 72 72 5f 61 74 TRIBUTE *curr_at 1e610 74 72 3b 0a 09 73 74 72 75 63 74 20 63 61 63 6b tr;..struct cack 1e620 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 69 64 65 ey_identity *ide 1e630 6e 74 69 74 79 3b 0a 09 75 6e 73 69 67 6e 65 64 ntity;..unsigned 1e640 20 6c 6f 6e 67 20 69 64 65 6e 74 69 74 79 5f 69 long identity_i 1e650 64 78 2c 20 61 74 74 72 5f 69 64 78 2c 20 73 65 dx, attr_idx, se 1e660 73 73 5f 61 74 74 72 5f 69 64 78 2c 20 6e 75 6d ss_attr_idx, num 1e670 5f 69 64 73 3b 0a 09 69 6e 74 20 6d 75 74 65 78 _ids;..int mutex 1e680 5f 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 52 56 20 _retval;..CK_RV 1e690 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 4f 4b 3b retval = CKR_OK; 1e6a0 0a 09 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 56 ..CK_VOID_PTR pV 1e6b0 61 6c 75 65 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 alue;..CK_ULONG 1e6c0 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a 0a 09 43 41 ulValueLen;...CA 1e6d0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1e6e0 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 1e6f0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 1e700 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 1e710 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1e720 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 1e730 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 1e740 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 1e750 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 1e760 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 IZED);..}...if ( 1e770 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c hSession == 0 || 1e780 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 hSession >= (si 1e790 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 1e7a0 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 ions) / sizeof(c 1e7b0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 ackey_sessions[0 1e7c0 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ]))) {...CACKEY_ 1e7d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1e7e0 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 ror. Session ou 1e7f0 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 t of range.");.. 1e800 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 1e810 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 1e820 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 VALID);..}...if 1e830 28 68 4f 62 6a 65 63 74 20 3d 3d 20 30 29 20 7b (hObject == 0) { 1e840 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1e850 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1e860 4f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 6f 75 Object handle ou 1e870 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 t of range.");.. 1e880 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ....return(CKR_O 1e890 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 49 4e 56 BJECT_HANDLE_INV 1e8a0 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 ALID);..}...if ( 1e8b0 75 6c 43 6f 75 6e 74 20 3d 3d 20 30 29 20 7b 0a ulCount == 0) {. 1e8c0 09 09 2f 2a 20 53 68 6f 72 74 20 63 69 72 63 75 ../* Short circu 1e8d0 69 74 2c 20 69 66 20 7a 65 72 6f 20 6f 62 6a 65 it, if zero obje 1e8e0 63 74 73 20 77 65 72 65 20 73 70 65 63 69 66 69 cts were specifi 1e8f0 65 64 20 72 65 74 75 72 6e 20 7a 65 72 6f 20 69 ed return zero i 1e900 74 65 6d 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 tems immediately 1e910 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 */...CACKEY_DEB 1e920 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1e930 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 1e940 20 28 73 68 6f 72 74 20 63 69 72 63 75 69 74 29 (short circuit) 1e950 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 ", CKR_OK);....r 1e960 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 eturn(CKR_OK);.. 1e970 7d 0a 0a 09 69 66 20 28 70 54 65 6d 70 6c 61 74 }...if (pTemplat 1e980 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 e == NULL) {...C 1e990 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1e9a0 54 46 28 22 45 72 72 6f 72 2e 20 20 70 54 65 6d TF("Error. pTem 1e9b0 70 6c 61 74 65 20 69 73 20 4e 55 4c 4c 2e 22 29 plate is NULL.") 1e9c0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1e9d0 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 1e9e0 09 7d 0a 0a 09 69 64 65 6e 74 69 74 79 5f 69 64 .}...identity_id 1e9f0 78 20 3d 20 68 4f 62 6a 65 63 74 20 2d 20 31 3b x = hObject - 1; 1ea00 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 1ea10 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c = cackey_mutex_l 1ea20 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1ea30 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 1ea40 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 1ea50 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1ea60 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f INTF("Error. Lo 1ea70 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 1ea80 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 1ea90 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 1eaa0 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f }...if (!cackey_ 1eab0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1eac0 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 n].active) {...c 1ead0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 1eae0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 1eaf0 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 1eb00 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1eb10 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 r. Session not 1eb20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 active.");...... 1eb30 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 1eb40 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 1eb50 44 29 3b 0a 09 7d 0a 0a 09 6e 75 6d 5f 69 64 73 D);..}...num_ids 1eb60 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f = cackey_sessio 1eb70 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 ns[hSession].ide 1eb80 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 3b 0a 0a ntities_count;.. 1eb90 09 69 66 20 28 69 64 65 6e 74 69 74 79 5f 69 64 .if (identity_id 1eba0 78 20 3e 3d 20 6e 75 6d 5f 69 64 73 29 20 7b 0a x >= num_ids) {. 1ebb0 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 1ebc0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 1ebd0 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 lock);....CACKEY 1ebe0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1ebf0 72 72 6f 72 2e 20 20 4f 62 6a 65 63 74 20 68 61 rror. Object ha 1ec00 6e 64 6c 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 ndle out of rang 1ec10 65 2e 20 20 69 64 65 6e 74 69 74 79 5f 69 64 78 e. identity_idx 1ec20 20 3d 20 25 6c 75 2c 20 6e 75 6d 5f 69 64 73 20 = %lu, num_ids 1ec30 3d 20 25 6c 75 2e 22 2c 20 28 75 6e 73 69 67 6e = %lu.", (unsign 1ec40 65 64 20 6c 6f 6e 67 29 20 69 64 65 6e 74 69 74 ed long) identit 1ec50 79 5f 69 64 78 2c 20 28 75 6e 73 69 67 6e 65 64 y_idx, (unsigned 1ec60 20 6c 6f 6e 67 29 20 6e 75 6d 5f 69 64 73 29 3b long) num_ids); 1ec70 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ....return(CKR_O 1ec80 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 49 4e 56 BJECT_HANDLE_INV 1ec90 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 64 65 6e ALID);..}...iden 1eca0 74 69 74 79 20 3d 20 26 63 61 63 6b 65 79 5f 73 tity = &cackey_s 1ecb0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1ecc0 5d 2e 69 64 65 6e 74 69 74 69 65 73 5b 69 64 65 ].identities[ide 1ecd0 6e 74 69 74 79 5f 69 64 78 5d 3b 0a 0a 09 66 6f ntity_idx];...fo 1ece0 72 20 28 61 74 74 72 5f 69 64 78 20 3d 20 30 3b r (attr_idx = 0; 1ecf0 20 61 74 74 72 5f 69 64 78 20 3c 20 75 6c 43 6f attr_idx < ulCo 1ed00 75 6e 74 3b 20 61 74 74 72 5f 69 64 78 2b 2b 29 unt; attr_idx++) 1ed10 20 7b 0a 09 09 63 75 72 72 5f 61 74 74 72 20 3d {...curr_attr = 1ed20 20 26 70 54 65 6d 70 6c 61 74 65 5b 61 74 74 72 &pTemplate[attr 1ed30 5f 69 64 78 5d 3b 0a 0a 09 09 70 56 61 6c 75 65 _idx];....pValue 1ed40 20 3d 20 4e 55 4c 4c 3b 0a 09 09 75 6c 56 61 6c = NULL;...ulVal 1ed50 75 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47 ueLen = (CK_LONG 1ed60 29 20 2d 31 3b 0a 0a 09 09 43 41 43 4b 45 59 5f ) -1;....CACKEY_ 1ed70 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 4c 6f DEBUG_PRINTF("Lo 1ed80 6f 6b 69 6e 67 20 66 6f 72 20 61 74 74 72 69 62 oking for attrib 1ed90 75 74 65 20 30 78 25 30 38 6c 78 20 28 69 64 65 ute 0x%08lx (ide 1eda0 6e 74 69 74 79 3a 25 6c 75 29 20 2e 2e 2e 22 2c ntity:%lu) ...", 1edb0 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 1edc0 20 63 75 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 curr_attr->type 1edd0 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 1ede0 29 20 69 64 65 6e 74 69 74 79 5f 69 64 78 29 3b ) identity_idx); 1edf0 0a 0a 09 09 66 6f 72 20 28 73 65 73 73 5f 61 74 ....for (sess_at 1ee00 74 72 5f 69 64 78 20 3d 20 30 3b 20 73 65 73 73 tr_idx = 0; sess 1ee10 5f 61 74 74 72 5f 69 64 78 20 3c 20 69 64 65 6e _attr_idx < iden 1ee20 74 69 74 79 2d 3e 61 74 74 72 69 62 75 74 65 73 tity->attributes 1ee30 5f 63 6f 75 6e 74 3b 20 73 65 73 73 5f 61 74 74 _count; sess_att 1ee40 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 69 66 r_idx++) {....if 1ee50 20 28 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 (identity->attr 1ee60 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 ibutes[sess_attr 1ee70 5f 69 64 78 5d 2e 74 79 70 65 20 3d 3d 20 63 75 _idx].type == cu 1ee80 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 29 20 7b rr_attr->type) { 1ee90 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 1eea0 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 66 G_PRINTF(" ... f 1eeb0 6f 75 6e 64 20 69 74 2c 20 70 56 61 6c 75 65 20 ound it, pValue 1eec0 3d 20 25 70 2c 20 75 6c 56 61 6c 75 65 4c 65 6e = %p, ulValueLen 1eed0 20 3d 20 25 6c 75 22 2c 20 69 64 65 6e 74 69 74 = %lu", identit 1eee0 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 y->attributes[se 1eef0 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 70 56 61 ss_attr_idx].pVa 1ef00 6c 75 65 2c 20 69 64 65 6e 74 69 74 79 2d 3e 61 lue, identity->a 1ef10 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 ttributes[sess_a 1ef20 74 74 72 5f 69 64 78 5d 2e 75 6c 56 61 6c 75 65 ttr_idx].ulValue 1ef30 4c 65 6e 29 3b 0a 09 09 09 09 0a 09 09 09 09 70 Len);..........p 1ef40 56 61 6c 75 65 20 3d 20 69 64 65 6e 74 69 74 79 Value = identity 1ef50 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 ->attributes[ses 1ef60 73 5f 61 74 74 72 5f 69 64 78 5d 2e 70 56 61 6c s_attr_idx].pVal 1ef70 75 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c ue;.....ulValueL 1ef80 65 6e 20 3d 20 69 64 65 6e 74 69 74 79 2d 3e 61 en = identity->a 1ef90 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 ttributes[sess_a 1efa0 74 74 72 5f 69 64 78 5d 2e 75 6c 56 61 6c 75 65 ttr_idx].ulValue 1efb0 4c 65 6e 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 Len;....}...}... 1efc0 09 69 66 20 28 63 75 72 72 5f 61 74 74 72 2d 3e .if (curr_attr-> 1efd0 70 56 61 6c 75 65 20 26 26 20 70 56 61 6c 75 65 pValue && pValue 1efe0 29 20 7b 0a 09 09 09 69 66 20 28 63 75 72 72 5f ) {....if (curr_ 1eff0 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e attr->ulValueLen 1f000 20 3e 3d 20 75 6c 56 61 6c 75 65 4c 65 6e 29 20 >= ulValueLen) 1f010 7b 0a 09 09 09 09 6d 65 6d 63 70 79 28 63 75 72 {.....memcpy(cur 1f020 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 2c 20 r_attr->pValue, 1f030 70 56 61 6c 75 65 2c 20 75 6c 56 61 6c 75 65 4c pValue, ulValueL 1f040 65 6e 29 3b 0a 09 09 09 7d 20 65 6c 73 65 20 7b en);....} else { 1f050 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 .....ulValueLen 1f060 3d 20 28 43 4b 5f 4c 4f 4e 47 29 20 2d 31 3b 0a = (CK_LONG) -1;. 1f070 0a 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b .....retval = CK 1f080 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 R_BUFFER_TOO_SMA 1f090 4c 4c 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 LL;....}...}.... 1f0a0 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c curr_attr->ulVal 1f0b0 75 65 4c 65 6e 20 3d 20 75 6c 56 61 6c 75 65 4c ueLen = ulValueL 1f0c0 65 6e 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 en;..}...mutex_r 1f0d0 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 1f0e0 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 1f0f0 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 1f100 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 1f110 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 1f120 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1f130 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 ror. Unlocking 1f140 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 1f150 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 1f160 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 _ERROR);..}...if 1f170 20 28 72 65 74 76 61 6c 20 3d 3d 20 43 4b 52 5f (retval == CKR_ 1f180 41 54 54 52 49 42 55 54 45 5f 54 59 50 45 5f 49 ATTRIBUTE_TYPE_I 1f190 4e 56 41 4c 49 44 29 20 7b 0a 09 09 43 41 43 4b NVALID) {...CACK 1f1a0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1f1b0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 41 "Returning CKR_A 1f1c0 54 54 52 49 42 55 54 45 5f 54 59 50 45 5f 49 4e TTRIBUTE_TYPE_IN 1f1d0 56 41 4c 49 44 20 28 25 69 29 22 2c 20 28 69 6e VALID (%i)", (in 1f1e0 74 29 20 72 65 74 76 61 6c 29 3b 0a 09 7d 20 65 t) retval);..} e 1f1f0 6c 73 65 20 69 66 20 28 72 65 74 76 61 6c 20 3d lse if (retval = 1f200 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f = CKR_BUFFER_TOO 1f210 5f 53 4d 41 4c 4c 29 20 7b 0a 09 09 43 41 43 4b _SMALL) {...CACK 1f220 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1f230 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 42 "Returning CKR_B 1f240 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 20 UFFER_TOO_SMALL 1f250 28 25 69 29 22 2c 20 28 69 6e 74 29 20 72 65 74 (%i)", (int) ret 1f260 76 61 6c 29 3b 0a 09 7d 20 65 6c 73 65 20 69 66 val);..} else if 1f270 20 28 72 65 74 76 61 6c 20 3d 3d 20 43 4b 52 5f (retval == CKR_ 1f280 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 OK) {...CACKEY_D 1f290 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 1f2a0 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 urning CKR_OK (% 1f2b0 69 29 22 2c 20 28 69 6e 74 29 20 72 65 74 76 61 i)", (int) retva 1f2c0 6c 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 l);..} else {... 1f2d0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1f2e0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 25 NTF("Returning % 1f2f0 69 22 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c i", (int) retval 1f300 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 72 );..}...return(r 1f310 65 74 76 61 6c 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 etval);.}..CK_DE 1f320 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 1f330 5f 52 56 2c 20 43 5f 53 65 74 41 74 74 72 69 62 _RV, C_SetAttrib 1f340 75 74 65 56 61 6c 75 65 29 28 43 4b 5f 53 45 53 uteValue)(CK_SES 1f350 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 1f360 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f sion, CK_OBJECT_ 1f370 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 74 2c 20 HANDLE hObject, 1f380 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 CK_ATTRIBUTE_PTR 1f390 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 pTemplate, CK_U 1f3a0 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 29 20 7b 0a LONG ulCount) {. 1f3b0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1f3c0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1f3d0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1f3e0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1f3f0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1f400 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1f410 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1f420 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1f430 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1f440 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 1f450 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1f460 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1f470 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1f480 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 1f490 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1f4a0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 1f4b0 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 1f4c0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1f4d0 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1f4e0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1f4f0 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 C_FindObjectsIni 1f500 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 t)(CK_SESSION_HA 1f510 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 1f520 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 K_ATTRIBUTE_PTR 1f530 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c pTemplate, CK_UL 1f540 4f 4e 47 20 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 ONG ulCount) {.. 1f550 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 CK_SLOT_ID slotI 1f560 44 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 69 64 78 D;..CK_ULONG idx 1f570 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 ;..int mutex_ret 1f580 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 val;...CACKEY_DE 1f590 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 1f5a0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 1f5b0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 1f5c0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1f5d0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1f5e0 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 1f5f0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1f600 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 1f610 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 1f620 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f .}...if (hSessio 1f630 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 n == 0 || hSessi 1f640 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 on >= (sizeof(ca 1f650 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f ckey_sessions) / 1f660 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s 1f670 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a essions[0]))) {. 1f680 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1f690 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 1f6a0 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 ession out of ra 1f6b0 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 nge.");......ret 1f6c0 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 1f6d0 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 1f6e0 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 1f6f0 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 1f700 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 x_lock(cackey_bi 1f710 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 glock);..if (mut 1f720 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 1f730 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1f740 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1f750 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e Locking failed. 1f760 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1f770 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 1f780 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack 1f790 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1f7a0 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a sion].active) {. 1f7b0 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 1f7c0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 1f7d0 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 lock);....CACKEY 1f7e0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1f7f0 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e rror. Session n 1f800 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 ot active.");... 1f810 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 ...return(CKR_SE 1f820 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 SSION_HANDLE_INV 1f830 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 ALID);..}...if ( 1f840 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1f850 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 hSession].search 1f860 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 _active) {...cac 1f870 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1f880 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1f890 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 1f8a0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1f8b0 20 20 53 65 61 72 63 68 20 61 6c 72 65 61 64 79 Search already 1f8c0 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 active.");..... 1f8d0 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 .return(CKR_OPER 1f8e0 41 54 49 4f 4e 5f 41 43 54 49 56 45 29 3b 0a 09 ATION_ACTIVE);.. 1f8f0 7d 0a 0a 09 73 6c 6f 74 49 44 20 3d 20 63 61 63 }...slotID = cac 1f900 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1f910 73 73 69 6f 6e 5d 2e 73 6c 6f 74 49 44 3b 0a 0a ssion].slotID;.. 1f920 09 69 66 20 28 73 6c 6f 74 49 44 20 3c 20 30 20 .if (slotID < 0 1f930 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 28 73 69 || slotID >= (si 1f940 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 1f950 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 1f960 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b ey_slots[0]))) { 1f970 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1f980 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 PRINTF("Error. I 1f990 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 nvalid slot requ 1f9a0 65 73 74 65 64 20 28 25 6c 75 29 2c 20 6f 75 74 ested (%lu), out 1f9b0 73 69 64 65 20 6f 66 20 76 61 6c 69 64 20 72 61 side of valid ra 1f9c0 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a nge", slotID);.. 1f9d0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 1f9e0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 1f9f0 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f ..if (cackey_slo 1fa00 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 ts[slotID].activ 1fa10 65 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b e == 0) {...CACK 1fa20 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1fa30 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 "Error. Invalid 1fa40 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 slot requested ( 1fa50 25 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 %lu), slot not c 1fa60 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 urrently active" 1fa70 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 , slotID);....ca 1fa80 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 1fa90 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1faa0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1fab0 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 1fac0 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 ..}...if (cackey 1fad0 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 73 _slots[slotID].s 1fae0 6c 6f 74 5f 72 65 73 65 74 29 20 7b 0a 09 09 43 lot_reset) {...C 1faf0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1fb00 54 46 28 22 54 68 65 20 73 6c 6f 74 20 68 61 73 TF("The slot has 1fb10 20 62 65 65 6e 20 72 65 73 65 74 20 73 69 6e 63 been reset sinc 1fb20 65 20 77 65 20 6c 61 73 74 20 6c 6f 6f 6b 65 64 e we last looked 1fb30 20 66 6f 72 20 69 64 65 6e 74 69 74 69 65 73 20 for identities 1fb40 2d 2d 20 72 65 73 63 61 6e 6e 69 6e 67 22 29 3b -- rescanning"); 1fb50 0a 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 ....if (cackey_s 1fb60 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1fb70 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 21 3d 20 ].identities != 1fb80 4e 55 4c 4c 29 20 7b 0a 09 09 09 63 61 63 6b 65 NULL) {....cacke 1fb90 79 5f 66 72 65 65 5f 69 64 65 6e 74 69 74 69 65 y_free_identitie 1fba0 73 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e s(cackey_session 1fbb0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 1fbc0 74 69 74 69 65 73 2c 20 63 61 63 6b 65 79 5f 73 tities, cackey_s 1fbd0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1fbe0 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 ].identities_cou 1fbf0 6e 74 29 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f nt);.....cackey_ 1fc00 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1fc10 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 3d 20 n].identities = 1fc20 4e 55 4c 4c 3b 0a 09 09 09 63 61 63 6b 65 79 5f NULL;....cackey_ 1fc30 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1fc40 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f n].identities_co 1fc50 75 6e 74 20 3d 20 30 3b 0a 09 09 7d 0a 0a 09 09 unt = 0;...}.... 1fc60 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 if (cackey_slots 1fc70 5b 73 6c 6f 74 49 44 5d 2e 6c 61 62 65 6c 20 21 [slotID].label ! 1fc80 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 66 72 65 = NULL) {....fre 1fc90 65 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 e(cackey_slots[s 1fca0 6c 6f 74 49 44 5d 2e 6c 61 62 65 6c 29 3b 0a 09 lotID].label);.. 1fcb0 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 ..cackey_slots[s 1fcc0 6c 6f 74 49 44 5d 2e 6c 61 62 65 6c 20 3d 20 4e lotID].label = N 1fcd0 55 4c 4c 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 6b ULL;...}....cack 1fce0 65 79 5f 6d 61 72 6b 5f 73 6c 6f 74 5f 72 65 73 ey_mark_slot_res 1fcf0 65 74 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 et(&cackey_slots 1fd00 5b 73 6c 6f 74 49 44 5d 29 3b 0a 09 09 63 61 63 [slotID]);...cac 1fd10 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 key_slots[slotID 1fd20 5d 2e 73 6c 6f 74 5f 72 65 73 65 74 20 3d 20 30 ].slot_reset = 0 1fd30 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 ;..}...if (cacke 1fd40 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 1fd50 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 ion].identities 1fd60 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 63 61 63 == NULL) {...cac 1fd70 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1fd80 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 ssion].identitie 1fd90 73 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f s = cackey_read_ 1fda0 69 64 65 6e 74 69 74 69 65 73 28 26 63 61 63 6b identities(&cack 1fdb0 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d ey_slots[slotID] 1fdc0 2c 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f , &cackey_sessio 1fdd0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 ns[hSession].ide 1fde0 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 3b 0a ntities_count);. 1fdf0 09 7d 0a 0a 09 69 66 20 28 70 54 65 6d 70 6c 61 .}...if (pTempla 1fe00 74 65 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 te != NULL) {... 1fe10 69 66 20 28 75 6c 43 6f 75 6e 74 20 21 3d 20 30 if (ulCount != 0 1fe20 29 20 7b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 ) {....cackey_se 1fe30 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 1fe40 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f .search_query_co 1fe50 75 6e 74 20 3d 20 75 6c 43 6f 75 6e 74 3b 0a 09 unt = ulCount;.. 1fe60 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 1fe70 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 s[hSession].sear 1fe80 63 68 5f 71 75 65 72 79 20 3d 20 6d 61 6c 6c 6f ch_query = mallo 1fe90 63 28 75 6c 43 6f 75 6e 74 20 2a 20 73 69 7a 65 c(ulCount * size 1fea0 6f 66 28 2a 70 54 65 6d 70 6c 61 74 65 29 29 3b of(*pTemplate)); 1feb0 0a 0a 09 09 09 6d 65 6d 63 70 79 28 63 61 63 6b .....memcpy(cack 1fec0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1fed0 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 sion].search_que 1fee0 72 79 2c 20 70 54 65 6d 70 6c 61 74 65 2c 20 75 ry, pTemplate, u 1fef0 6c 43 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 28 lCount * sizeof( 1ff00 2a 70 54 65 6d 70 6c 61 74 65 29 29 3b 0a 09 09 *pTemplate));... 1ff10 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 .for (idx = 0; i 1ff20 64 78 20 3c 20 75 6c 43 6f 75 6e 74 3b 20 69 64 dx < ulCount; id 1ff30 78 2b 2b 29 20 7b 0a 09 09 09 09 69 66 20 28 70 x++) {.....if (p 1ff40 54 65 6d 70 6c 61 74 65 5b 69 64 78 5d 2e 75 6c Template[idx].ul 1ff50 56 61 6c 75 65 4c 65 6e 20 3d 3d 20 30 29 20 7b ValueLen == 0) { 1ff60 0a 09 09 09 09 09 63 61 63 6b 65 79 5f 73 65 73 ......cackey_ses 1ff70 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1ff80 73 65 61 72 63 68 5f 71 75 65 72 79 5b 69 64 78 search_query[idx 1ff90 5d 2e 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b ].pValue = NULL; 1ffa0 0a 0a 09 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b .......continue; 1ffb0 0a 09 09 09 09 7d 0a 0a 09 09 09 09 63 61 63 6b .....}......cack 1ffc0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1ffd0 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 sion].search_que 1ffe0 72 79 5b 69 64 78 5d 2e 70 56 61 6c 75 65 20 3d ry[idx].pValue = 1fff0 20 6d 61 6c 6c 6f 63 28 70 54 65 6d 70 6c 61 74 malloc(pTemplat 20000 65 5b 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 e[idx].ulValueLe 20010 6e 29 3b 0a 0a 09 09 09 09 69 66 20 28 63 61 63 n);......if (cac 20020 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 20030 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 ssion].search_qu 20040 65 72 79 5b 69 64 78 5d 2e 70 56 61 6c 75 65 29 ery[idx].pValue) 20050 20 7b 0a 09 09 09 09 09 6d 65 6d 63 70 79 28 63 {......memcpy(c 20060 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 20070 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 20080 71 75 65 72 79 5b 69 64 78 5d 2e 70 56 61 6c 75 query[idx].pValu 20090 65 2c 20 70 54 65 6d 70 6c 61 74 65 5b 69 64 78 e, pTemplate[idx 200a0 5d 2e 70 56 61 6c 75 65 2c 20 70 54 65 6d 70 6c ].pValue, pTempl 200b0 61 74 65 5b 69 64 78 5d 2e 75 6c 56 61 6c 75 65 ate[idx].ulValue 200c0 4c 65 6e 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d Len);.....}....} 200d0 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 63 ...} else {....c 200e0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 200f0 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 20100 71 75 65 72 79 5f 63 6f 75 6e 74 20 3d 20 30 3b query_count = 0; 20110 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 ....cackey_sessi 20120 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 ons[hSession].se 20130 61 72 63 68 5f 71 75 65 72 79 20 3d 20 4e 55 4c arch_query = NUL 20140 4c 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b L;...}..} else { 20150 0a 09 09 69 66 20 28 75 6c 43 6f 75 6e 74 20 21 ...if (ulCount ! 20160 3d 20 30 29 20 7b 0a 09 09 09 63 61 63 6b 65 79 = 0) {....cackey 20170 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 20180 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 20190 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 201a0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 201b0 53 65 61 72 63 68 20 71 75 65 72 79 20 73 70 65 Search query spe 201c0 63 69 66 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 cified as NULL, 201d0 62 75 74 20 6e 75 6d 62 65 72 20 6f 66 20 71 75 but number of qu 201e0 65 72 79 20 74 65 72 6d 73 20 6e 6f 74 20 73 70 ery terms not sp 201f0 65 63 69 66 69 65 64 20 61 73 20 30 2e 22 29 3b ecified as 0."); 20200 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 20210 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 20220 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 65 ..}....cackey_se 20230 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 20240 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f .search_query_co 20250 75 6e 74 20 3d 20 30 3b 0a 09 09 63 61 63 6b 65 unt = 0;...cacke 20260 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 20270 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 ion].search_quer 20280 79 20 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a 09 63 y = NULL;..}...c 20290 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 202a0 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 202b0 61 63 74 69 76 65 20 3d 20 31 3b 0a 09 63 61 63 active = 1;..cac 202c0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 202d0 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 63 75 ssion].search_cu 202e0 72 72 5f 69 64 20 3d 20 30 3b 0a 0a 09 6d 75 74 rr_id = 0;...mut 202f0 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 20300 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 20310 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 20320 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 20330 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 20340 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 20350 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b ("Error. Unlock 20360 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 20370 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 20380 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 20390 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 203a0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 203b0 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C 203c0 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return 203d0 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 (CKR_OK);.}..sta 203e0 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 70 tic int cackey_p 203f0 6b 63 73 31 31 5f 63 6f 6d 70 61 72 65 5f 61 74 kcs11_compare_at 20400 74 72 69 62 75 74 65 73 28 43 4b 5f 41 54 54 52 tributes(CK_ATTR 20410 49 42 55 54 45 20 2a 61 2c 20 43 4b 5f 41 54 54 IBUTE *a, CK_ATT 20420 52 49 42 55 54 45 20 2a 62 29 20 7b 0a 09 75 6e RIBUTE *b) {..un 20430 73 69 67 6e 65 64 20 63 68 61 72 20 2a 73 6d 61 signed char *sma 20440 6c 6c 62 75 66 2c 20 2a 6c 61 72 67 65 62 75 66 llbuf, *largebuf 20450 3b 0a 09 73 69 7a 65 5f 74 20 73 6d 61 6c 6c 62 ;..size_t smallb 20460 75 66 5f 6c 65 6e 2c 20 6c 61 72 67 65 62 75 66 uf_len, largebuf 20470 5f 6c 65 6e 3b 0a 0a 09 69 66 20 28 61 2d 3e 74 _len;...if (a->t 20480 79 70 65 20 21 3d 20 62 2d 3e 74 79 70 65 29 20 ype != b->type) 20490 7b 0a 09 09 72 65 74 75 72 6e 28 30 29 3b 0a 09 {...return(0);.. 204a0 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 204b0 5f 50 52 49 4e 54 46 28 22 20 20 20 20 2e 2e 2e _PRINTF(" ... 204c0 20 66 6f 75 6e 64 20 6d 61 74 63 68 69 6e 67 20 found matching 204d0 74 79 70 65 20 2e 2e 2e 22 29 3b 0a 0a 09 43 41 type ...");...CA 204e0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 204f0 42 55 46 28 22 20 20 20 20 2e 2e 2e 20 6f 75 72 BUF(" ... our 20500 20 76 61 6c 75 65 3a 22 2c 20 61 2d 3e 70 56 61 value:", a->pVa 20510 6c 75 65 2c 20 61 2d 3e 75 6c 56 61 6c 75 65 4c lue, a->ulValueL 20520 65 6e 29 3b 0a 0a 09 69 66 20 28 62 2d 3e 70 56 en);...if (b->pV 20530 61 6c 75 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a alue == NULL) {. 20540 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 20550 52 49 4e 54 46 28 22 20 20 20 20 20 20 20 2e 2e RINTF(" .. 20560 2e 20 66 6f 75 6e 64 20 77 69 6c 64 63 61 72 64 . found wildcard 20570 20 6d 61 74 63 68 22 29 3b 0a 0a 09 09 72 65 74 match");....ret 20580 75 72 6e 28 31 29 3b 0a 09 7d 0a 0a 09 69 66 20 urn(1);..}...if 20590 28 61 2d 3e 70 56 61 6c 75 65 20 3d 3d 20 4e 55 (a->pValue == NU 205a0 4c 4c 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 30 LL) {...return(0 205b0 29 3b 0a 09 7d 0a 0a 20 09 69 66 20 28 62 2d 3e );..}.. .if (b-> 205c0 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 3d 20 61 2d ulValueLen == a- 205d0 3e 75 6c 56 61 6c 75 65 4c 65 6e 20 26 26 20 6d >ulValueLen && m 205e0 65 6d 63 6d 70 28 61 2d 3e 70 56 61 6c 75 65 2c emcmp(a->pValue, 205f0 20 62 2d 3e 70 56 61 6c 75 65 2c 20 62 2d 3e 75 b->pValue, b->u 20600 6c 56 61 6c 75 65 4c 65 6e 29 20 3d 3d 20 30 29 lValueLen) == 0) 20610 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 20620 47 5f 50 52 49 4e 54 46 28 22 20 20 20 20 20 20 G_PRINTF(" 20630 20 2e 2e 2e 20 66 6f 75 6e 64 20 65 78 61 63 74 ... found exact 20640 20 6d 61 74 63 68 22 29 3b 0a 0a 09 09 72 65 74 match");....ret 20650 75 72 6e 28 31 29 3b 0a 09 7d 0a 0a 09 73 77 69 urn(1);..}...swi 20660 74 63 68 20 28 61 2d 3e 74 79 70 65 29 20 7b 0a tch (a->type) {. 20670 09 09 63 61 73 65 20 43 4b 41 5f 4d 4f 44 55 4c ..case CKA_MODUL 20680 55 53 3a 0a 09 09 09 69 66 20 28 61 2d 3e 75 6c US:....if (a->ul 20690 56 61 6c 75 65 4c 65 6e 20 3d 3d 20 62 2d 3e 75 ValueLen == b->u 206a0 6c 56 61 6c 75 65 4c 65 6e 29 20 7b 0a 09 09 09 lValueLen) {.... 206b0 09 62 72 65 61 6b 3b 0a 09 09 09 7d 0a 0a 09 09 .break;....}.... 206c0 09 69 66 20 28 61 2d 3e 75 6c 56 61 6c 75 65 4c .if (a->ulValueL 206d0 65 6e 20 3e 20 62 2d 3e 75 6c 56 61 6c 75 65 4c en > b->ulValueL 206e0 65 6e 29 20 7b 0a 09 09 09 09 73 6d 61 6c 6c 62 en) {.....smallb 206f0 75 66 20 3d 20 62 2d 3e 70 56 61 6c 75 65 3b 0a uf = b->pValue;. 20700 09 09 09 09 73 6d 61 6c 6c 62 75 66 5f 6c 65 6e ....smallbuf_len 20710 20 3d 20 62 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e = b->ulValueLen 20720 3b 0a 0a 09 09 09 09 6c 61 72 67 65 62 75 66 20 ;......largebuf 20730 3d 20 61 2d 3e 70 56 61 6c 75 65 3b 0a 09 09 09 = a->pValue;.... 20740 09 6c 61 72 67 65 62 75 66 5f 6c 65 6e 20 3d 20 .largebuf_len = 20750 61 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a 09 a->ulValueLen;.. 20760 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 73 ..} else {.....s 20770 6d 61 6c 6c 62 75 66 20 3d 20 61 2d 3e 70 56 61 mallbuf = a->pVa 20780 6c 75 65 3b 0a 09 09 09 09 73 6d 61 6c 6c 62 75 lue;.....smallbu 20790 66 5f 6c 65 6e 20 3d 20 61 2d 3e 75 6c 56 61 6c f_len = a->ulVal 207a0 75 65 4c 65 6e 3b 0a 0a 09 09 09 09 6c 61 72 67 ueLen;......larg 207b0 65 62 75 66 20 3d 20 62 2d 3e 70 56 61 6c 75 65 ebuf = b->pValue 207c0 3b 0a 09 09 09 09 6c 61 72 67 65 62 75 66 5f 6c ;.....largebuf_l 207d0 65 6e 20 3d 20 62 2d 3e 75 6c 56 61 6c 75 65 4c en = b->ulValueL 207e0 65 6e 3b 0a 09 09 09 7d 0a 0a 09 09 09 66 6f 72 en;....}.....for 207f0 20 28 3b 20 6c 61 72 67 65 62 75 66 5f 6c 65 6e (; largebuf_len 20800 20 21 3d 20 73 6d 61 6c 6c 62 75 66 5f 6c 65 6e != smallbuf_len 20810 3b 20 6c 61 72 67 65 62 75 66 2b 2b 2c 6c 61 72 ; largebuf++,lar 20820 67 65 62 75 66 5f 6c 65 6e 2d 2d 29 20 7b 0a 09 gebuf_len--) {.. 20830 09 09 09 69 66 20 28 6c 61 72 67 65 62 75 66 5b ...if (largebuf[ 20840 30 5d 20 21 3d 20 30 29 20 7b 0a 09 09 09 09 09 0] != 0) {...... 20850 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 09 09 09 break;.....}.... 20860 7d 0a 0a 09 09 09 69 66 20 28 6c 61 72 67 65 62 }.....if (largeb 20870 75 66 5f 6c 65 6e 20 21 3d 20 73 6d 61 6c 6c 62 uf_len != smallb 20880 75 66 5f 6c 65 6e 29 20 7b 0a 09 09 09 09 62 72 uf_len) {.....br 20890 65 61 6b 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 eak;....}.....if 208a0 20 28 6d 65 6d 63 6d 70 28 6c 61 72 67 65 62 75 (memcmp(largebu 208b0 66 2c 20 73 6d 61 6c 6c 62 75 66 2c 20 73 6d 61 f, smallbuf, sma 208c0 6c 6c 62 75 66 5f 6c 65 6e 29 20 3d 3d 20 30 29 llbuf_len) == 0) 208d0 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {.....CACKEY_DE 208e0 42 55 47 5f 50 52 49 4e 54 46 28 22 20 20 20 20 BUG_PRINTF(" 208f0 20 20 20 2e 2e 2e 20 66 6f 75 6e 64 20 61 70 70 ... found app 20900 72 6f 78 69 6d 61 74 65 20 6d 61 74 63 68 22 29 roximate match") 20910 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 31 29 ;......return(1) 20920 3b 0a 09 09 09 7d 0a 0a 09 09 09 62 72 65 61 6b ;....}.....break 20930 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 30 29 ;..}...return(0) 20940 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 20950 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 20960 5f 46 69 6e 64 4f 62 6a 65 63 74 73 29 28 43 4b _FindObjects)(CK 20970 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 20980 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a hSession, CK_OBJ 20990 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 ECT_HANDLE_PTR p 209a0 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 55 4c 4f 4e hObject, CK_ULON 209b0 47 20 75 6c 4d 61 78 4f 62 6a 65 63 74 43 6f 75 G ulMaxObjectCou 209c0 6e 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 nt, CK_ULONG_PTR 209d0 20 70 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 29 pulObjectCount) 209e0 20 7b 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 {..struct cacke 209f0 79 5f 69 64 65 6e 74 69 74 79 20 2a 63 75 72 72 y_identity *curr 20a00 5f 69 64 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55 _id;..CK_ATTRIBU 20a10 54 45 20 2a 63 75 72 72 5f 61 74 74 72 3b 0a 09 TE *curr_attr;.. 20a20 43 4b 5f 55 4c 4f 4e 47 20 63 75 72 72 5f 69 64 CK_ULONG curr_id 20a30 5f 69 64 78 2c 20 63 75 72 72 5f 6f 75 74 5f 69 _idx, curr_out_i 20a40 64 5f 69 64 78 2c 20 63 75 72 72 5f 61 74 74 72 d_idx, curr_attr 20a50 5f 69 64 78 2c 20 73 65 73 73 5f 61 74 74 72 5f _idx, sess_attr_ 20a60 69 64 78 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 6d idx;..CK_ULONG m 20a70 61 74 63 68 65 64 5f 63 6f 75 6e 74 2c 20 70 72 atched_count, pr 20a80 65 76 5f 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 ev_matched_count 20a90 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 ;..int mutex_ret 20aa0 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 val;...CACKEY_DE 20ab0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 20ac0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 20ad0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 20ae0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 20af0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 20b00 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 20b10 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 20b20 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 20b30 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 20b40 09 7d 0a 0a 09 69 66 20 28 70 75 6c 4f 62 6a 65 .}...if (pulObje 20b50 63 74 43 6f 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 ctCount == NULL) 20b60 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 20b70 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 20b80 20 20 70 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 pulObjectCount 20b90 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 is NULL.");.... 20ba0 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM 20bb0 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 ENTS_BAD);..}... 20bc0 69 66 20 28 70 68 4f 62 6a 65 63 74 20 3d 3d 20 if (phObject == 20bd0 4e 55 4c 4c 20 26 26 20 75 6c 4d 61 78 4f 62 6a NULL && ulMaxObj 20be0 65 63 74 43 6f 75 6e 74 20 3d 3d 20 30 29 20 7b ectCount == 0) { 20bf0 0a 09 09 2f 2a 20 53 68 6f 72 74 20 63 69 72 63 .../* Short circ 20c00 75 69 74 2c 20 69 66 20 7a 65 72 6f 20 6f 62 6a uit, if zero obj 20c10 65 63 74 73 20 77 65 72 65 20 73 70 65 63 69 66 ects were specif 20c20 69 65 64 20 72 65 74 75 72 6e 20 7a 65 72 6f 20 ied return zero 20c30 69 74 65 6d 73 20 69 6d 6d 65 64 69 61 74 65 6c items immediatel 20c40 79 20 2a 2f 0a 09 09 2a 70 75 6c 4f 62 6a 65 63 y */...*pulObjec 20c50 74 43 6f 75 6e 74 20 3d 20 30 3b 0a 0a 09 09 43 tCount = 0;....C 20c60 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 20c70 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 20c80 52 5f 4f 4b 20 28 25 69 29 20 28 73 68 6f 72 74 R_OK (%i) (short 20c90 20 63 69 72 63 75 69 74 29 22 2c 20 43 4b 52 5f circuit)", CKR_ 20ca0 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 OK);....return(C 20cb0 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 KR_OK);..}...if 20cc0 28 70 68 4f 62 6a 65 63 74 20 3d 3d 20 4e 55 4c (phObject == NUL 20cd0 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 L) {...CACKEY_DE 20ce0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 20cf0 72 2e 20 20 70 68 4f 62 6a 65 63 74 20 69 73 20 r. phObject is 20d00 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 NULL.");....retu 20d10 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 rn(CKR_ARGUMENTS 20d20 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 _BAD);..}...if ( 20d30 75 6c 4d 61 78 4f 62 6a 65 63 74 43 6f 75 6e 74 ulMaxObjectCount 20d40 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 == 0) {...CACKE 20d50 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 20d60 45 72 72 6f 72 2e 20 20 4d 61 78 69 6d 75 6d 20 Error. Maximum 20d70 6e 75 6d 62 65 72 20 6f 66 20 6f 62 6a 65 63 74 number of object 20d80 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 7a s specified as z 20d90 65 72 6f 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 ero.");....retur 20da0 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f n(CKR_ARGUMENTS_ 20db0 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 BAD);..}...if (h 20dc0 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 Session == 0 || 20dd0 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a hSession >= (siz 20de0 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi 20df0 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 ons) / sizeof(ca 20e00 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d ckey_sessions[0] 20e10 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ))) {...CACKEY_D 20e20 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 20e30 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 or. Session out 20e40 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 of range.");... 20e50 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 ...return(CKR_SE 20e60 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 SSION_HANDLE_INV 20e70 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 ALID);..}...mute 20e80 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 20e90 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 y_mutex_lock(cac 20ea0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 20eb0 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 20ec0 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 20ed0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 20ee0 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 rror. Locking f 20ef0 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 ailed.");....ret 20f00 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 20f10 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 ERROR);..}...if 20f20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (!cackey_session 20f30 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 s[hSession].acti 20f40 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d ve) {...cackey_m 20f50 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 20f60 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 20f70 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 20f80 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 NTF("Error. Ses 20f90 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e sion not active. 20fa0 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 20fb0 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 CKR_SESSION_HAND 20fc0 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 20fd0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 ..if (!cackey_se 20fe0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 20ff0 2e 73 65 61 72 63 68 5f 61 63 74 69 76 65 29 20 .search_active) 21000 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 21010 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 21020 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 21030 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 21040 22 45 72 72 6f 72 2e 20 20 53 65 61 72 63 68 20 "Error. Search 21050 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 not active.");.. 21060 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ....return(CKR_O 21070 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 PERATION_NOT_INI 21080 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 21090 63 75 72 72 5f 6f 75 74 5f 69 64 5f 69 64 78 20 curr_out_id_idx 210a0 3d 20 30 3b 0a 09 66 6f 72 20 28 63 75 72 72 5f = 0;..for (curr_ 210b0 69 64 5f 69 64 78 20 3d 20 63 61 63 6b 65 79 5f id_idx = cackey_ 210c0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 210d0 6e 5d 2e 73 65 61 72 63 68 5f 63 75 72 72 5f 69 n].search_curr_i 210e0 64 3b 20 63 75 72 72 5f 69 64 5f 69 64 78 20 3c d; curr_id_idx < 210f0 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 21100 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 [hSession].ident 21110 69 74 69 65 73 5f 63 6f 75 6e 74 20 26 26 20 75 ities_count && u 21120 6c 4d 61 78 4f 62 6a 65 63 74 43 6f 75 6e 74 3b lMaxObjectCount; 21130 20 63 75 72 72 5f 69 64 5f 69 64 78 2b 2b 29 20 curr_id_idx++) 21140 7b 0a 09 09 63 75 72 72 5f 69 64 20 3d 20 26 63 {...curr_id = &c 21150 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 21160 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 Session].identit 21170 69 65 73 5b 63 75 72 72 5f 69 64 5f 69 64 78 5d ies[curr_id_idx] 21180 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 21190 47 5f 50 52 49 4e 54 46 28 22 50 72 6f 63 65 73 G_PRINTF("Proces 211a0 73 69 6e 67 20 69 64 65 6e 74 69 74 79 3a 25 6c sing identity:%l 211b0 75 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f u", (unsigned lo 211c0 6e 67 29 20 63 75 72 72 5f 69 64 5f 69 64 78 29 ng) curr_id_idx) 211d0 3b 0a 0a 09 09 6d 61 74 63 68 65 64 5f 63 6f 75 ;....matched_cou 211e0 6e 74 20 3d 20 30 3b 0a 0a 09 09 66 6f 72 20 28 nt = 0;....for ( 211f0 63 75 72 72 5f 61 74 74 72 5f 69 64 78 20 3d 20 curr_attr_idx = 21200 30 3b 20 63 75 72 72 5f 61 74 74 72 5f 69 64 78 0; curr_attr_idx 21210 20 3c 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f < cackey_sessio 21220 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 ns[hSession].sea 21230 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 3b rch_query_count; 21240 20 63 75 72 72 5f 61 74 74 72 5f 69 64 78 2b 2b curr_attr_idx++ 21250 29 20 7b 0a 09 09 09 70 72 65 76 5f 6d 61 74 63 ) {....prev_matc 21260 68 65 64 5f 63 6f 75 6e 74 20 3d 20 6d 61 74 63 hed_count = matc 21270 68 65 64 5f 63 6f 75 6e 74 3b 0a 0a 09 09 09 63 hed_count;.....c 21280 75 72 72 5f 61 74 74 72 20 3d 20 26 63 61 63 6b urr_attr = &cack 21290 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 212a0 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 sion].search_que 212b0 72 79 5b 63 75 72 72 5f 61 74 74 72 5f 69 64 78 ry[curr_attr_idx 212c0 5d 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ];.....CACKEY_DE 212d0 42 55 47 5f 50 52 49 4e 54 46 28 22 20 20 43 68 BUG_PRINTF(" Ch 212e0 65 63 6b 69 6e 67 20 66 6f 72 20 61 74 74 72 69 ecking for attri 212f0 62 75 74 65 20 30 78 25 30 38 6c 78 20 69 6e 20 bute 0x%08lx in 21300 69 64 65 6e 74 69 74 79 3a 25 69 2e 2e 2e 22 2c identity:%i...", 21310 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 21320 20 63 75 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 curr_attr->type 21330 2c 20 28 69 6e 74 29 20 63 75 72 72 5f 69 64 5f , (int) curr_id_ 21340 69 64 78 29 3b 0a 09 09 09 43 41 43 4b 45 59 5f idx);....CACKEY_ 21350 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 DEBUG_PRINTBUF(" 21360 20 20 20 20 56 61 6c 75 65 20 6c 6f 6f 6b 69 6e Value lookin 21370 67 20 66 6f 72 3a 22 2c 20 63 75 72 72 5f 61 74 g for:", curr_at 21380 74 72 2d 3e 70 56 61 6c 75 65 2c 20 63 75 72 72 tr->pValue, curr 21390 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 _attr->ulValueLe 213a0 6e 29 3b 0a 0a 09 09 09 66 6f 72 20 28 73 65 73 n);.....for (ses 213b0 73 5f 61 74 74 72 5f 69 64 78 20 3d 20 30 3b 20 s_attr_idx = 0; 213c0 73 65 73 73 5f 61 74 74 72 5f 69 64 78 20 3c 20 sess_attr_idx < 213d0 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 curr_id->attribu 213e0 74 65 73 5f 63 6f 75 6e 74 3b 20 73 65 73 73 5f tes_count; sess_ 213f0 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 attr_idx++) {... 21400 09 09 69 66 20 28 63 61 63 6b 65 79 5f 70 6b 63 ..if (cackey_pkc 21410 73 31 31 5f 63 6f 6d 70 61 72 65 5f 61 74 74 72 s11_compare_attr 21420 69 62 75 74 65 73 28 26 63 75 72 72 5f 69 64 2d ibutes(&curr_id- 21430 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 >attributes[sess 21440 5f 61 74 74 72 5f 69 64 78 5d 2c 20 63 75 72 72 _attr_idx], curr 21450 5f 61 74 74 72 29 29 20 7b 0a 09 09 09 09 09 6d _attr)) {......m 21460 61 74 63 68 65 64 5f 63 6f 75 6e 74 2b 2b 3b 0a atched_count++;. 21470 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 21480 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 2f 2a 20 49 .}....}...../* I 21490 66 20 74 68 65 20 61 74 74 72 69 62 75 74 65 20 f the attribute 214a0 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 6d 61 74 could not be mat 214b0 63 68 65 64 2c 20 64 6f 20 6e 6f 74 20 74 72 79 ched, do not try 214c0 20 74 6f 20 6d 61 74 63 68 20 61 64 64 69 74 69 to match additi 214d0 6f 6e 61 6c 20 61 74 74 72 69 62 75 74 65 73 20 onal attributes 214e0 2a 2f 0a 09 09 09 69 66 20 28 70 72 65 76 5f 6d */....if (prev_m 214f0 61 74 63 68 65 64 5f 63 6f 75 6e 74 20 3d 3d 20 atched_count == 21500 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 29 20 7b matched_count) { 21510 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 7d .....break;....} 21520 0a 09 09 7d 0a 0a 09 09 69 66 20 28 6d 61 74 63 ...}....if (matc 21530 68 65 64 5f 63 6f 75 6e 74 20 3d 3d 20 63 61 63 hed_count == cac 21540 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 21550 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 ssion].search_qu 21560 65 72 79 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09 ery_count) {.... 21570 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 21580 4e 54 46 28 22 20 20 2e 2e 2e 20 41 6c 6c 20 25 NTF(" ... All % 21590 69 20 61 74 74 72 69 62 75 74 65 73 20 63 68 65 i attributes che 215a0 63 6b 65 64 20 66 6f 72 20 66 6f 75 6e 64 2c 20 cked for found, 215b0 61 64 64 69 6e 67 20 69 64 65 6e 74 69 74 79 3a adding identity: 215c0 25 69 20 74 6f 20 72 65 74 75 72 6e 65 64 20 6c %i to returned l 215d0 69 73 74 22 2c 20 28 69 6e 74 29 20 63 61 63 6b ist", (int) cack 215e0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 215f0 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 sion].search_que 21600 72 79 5f 63 6f 75 6e 74 2c 20 28 69 6e 74 29 20 ry_count, (int) 21610 63 75 72 72 5f 69 64 5f 69 64 78 29 3b 0a 0a 09 curr_id_idx);... 21620 09 09 70 68 4f 62 6a 65 63 74 5b 63 75 72 72 5f ..phObject[curr_ 21630 6f 75 74 5f 69 64 5f 69 64 78 5d 20 3d 20 63 75 out_id_idx] = cu 21640 72 72 5f 69 64 5f 69 64 78 20 2b 20 31 3b 0a 0a rr_id_idx + 1;.. 21650 09 09 09 75 6c 4d 61 78 4f 62 6a 65 63 74 43 6f ...ulMaxObjectCo 21660 75 6e 74 2d 2d 3b 0a 0a 09 09 09 63 75 72 72 5f unt--;.....curr_ 21670 6f 75 74 5f 69 64 5f 69 64 78 2b 2b 3b 0a 09 09 out_id_idx++;... 21680 7d 20 65 6c 73 65 20 7b 0a 09 09 09 43 41 43 4b } else {....CACK 21690 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 216a0 22 20 20 2e 2e 2e 20 4e 6f 74 20 61 6c 6c 20 25 " ... Not all % 216b0 69 20 28 6f 6e 6c 79 20 66 6f 75 6e 64 20 25 69 i (only found %i 216c0 29 20 61 74 74 72 69 62 75 74 65 73 20 63 68 65 ) attributes che 216d0 63 6b 65 64 20 66 6f 72 20 66 6f 75 6e 64 2c 20 cked for found, 216e0 6e 6f 74 20 61 64 64 69 6e 67 20 69 64 65 6e 74 not adding ident 216f0 69 74 79 3a 25 69 22 2c 20 28 69 6e 74 29 20 63 ity:%i", (int) c 21700 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 21710 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 21720 71 75 65 72 79 5f 63 6f 75 6e 74 2c 20 28 69 6e query_count, (in 21730 74 29 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 t) matched_count 21740 2c 20 28 69 6e 74 29 20 63 75 72 72 5f 69 64 5f , (int) curr_id_ 21750 69 64 78 29 3b 0a 09 09 7d 0a 09 7d 0a 09 63 61 idx);...}..}..ca 21760 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 21770 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 63 ession].search_c 21780 75 72 72 5f 69 64 20 3d 20 63 75 72 72 5f 69 64 urr_id = curr_id 21790 5f 69 64 78 3b 0a 09 2a 70 75 6c 4f 62 6a 65 63 _idx;..*pulObjec 217a0 74 43 6f 75 6e 74 20 3d 20 63 75 72 72 5f 6f 75 tCount = curr_ou 217b0 74 5f 69 64 5f 69 64 78 3b 0a 0a 09 6d 75 74 65 t_id_idx;...mute 217c0 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 217d0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 217e0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 217f0 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 21800 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 21810 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 21820 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 "Error. Unlocki 21830 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 21840 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 21850 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 21860 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 21870 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 21880 43 4b 52 5f 4f 4b 20 28 25 69 29 2c 20 6e 75 6d CKR_OK (%i), num 21890 20 6f 62 6a 65 63 74 73 20 3d 20 25 6c 75 22 2c objects = %lu", 218a0 20 43 4b 52 5f 4f 4b 2c 20 2a 70 75 6c 4f 62 6a CKR_OK, *pulObj 218b0 65 63 74 43 6f 75 6e 74 29 3b 0a 0a 09 72 65 74 ectCount);...ret 218c0 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}.. 218d0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 218e0 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 46 69 6e 64 ON(CK_RV, C_Find 218f0 4f 62 6a 65 63 74 73 46 69 6e 61 6c 29 28 43 4b ObjectsFinal)(CK 21900 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 21910 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 43 4b 5f hSession) {..CK_ 21920 55 4c 4f 4e 47 20 69 64 78 3b 0a 09 69 6e 74 20 ULONG idx;..int 21930 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 mutex_retval;... 21940 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 21950 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 21960 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 21970 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 21980 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 21990 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 219a0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 219b0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 219c0 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 219d0 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 219e0 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 (hSession == 0 219f0 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 || hSession >= ( 21a00 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 21a10 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 21a20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 21a30 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE 21a40 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 21a50 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 21a60 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b out of range."); 21a70 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 21a80 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 21a90 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d INVALID);..}...m 21aa0 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 21ab0 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( 21ac0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 21ad0 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 21ae0 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 21af0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 21b00 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e ("Error. Lockin 21b10 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 21b20 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 21b30 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 21b40 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 if (!cackey_sess 21b50 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 ions[hSession].a 21b60 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 ctive) {...cacke 21b70 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 21b80 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 21b90 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 21ba0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 21bb0 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 Session not acti 21bc0 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 ve.");......retu 21bd0 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 rn(CKR_SESSION_H 21be0 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a ANDLE_INVALID);. 21bf0 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 21c00 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 21c10 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 74 69 76 on].search_activ 21c20 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 e) {...cackey_mu 21c30 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 21c40 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....C 21c50 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 21c60 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 61 72 TF("Error. Sear 21c70 63 68 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 ch not active.") 21c80 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 21c90 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f R_OPERATION_NOT_ 21ca0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 21cb0 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio 21cc0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 ns[hSession].sea 21cd0 72 63 68 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a rch_active = 0;. 21ce0 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 ..for (idx = 0; 21cf0 69 64 78 20 3c 20 63 61 63 6b 65 79 5f 73 65 73 idx < cackey_ses 21d00 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 21d10 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 search_query_cou 21d20 6e 74 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 nt; idx++) {...i 21d30 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f f (cackey_sessio 21d40 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 ns[hSession].sea 21d50 72 63 68 5f 71 75 65 72 79 5b 69 64 78 5d 2e 70 rch_query[idx].p 21d60 56 61 6c 75 65 29 20 7b 0a 09 09 09 66 72 65 65 Value) {....free 21d70 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 21d80 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 21d90 68 5f 71 75 65 72 79 5b 69 64 78 5d 2e 70 56 61 h_query[idx].pVa 21da0 6c 75 65 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 lue);...}..}...i 21db0 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f f (cackey_sessio 21dc0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 ns[hSession].sea 21dd0 72 63 68 5f 71 75 65 72 79 29 20 7b 0a 09 09 66 rch_query) {...f 21de0 72 65 65 28 63 61 63 6b 65 79 5f 73 65 73 73 69 ree(cackey_sessi 21df0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 ons[hSession].se 21e00 61 72 63 68 5f 71 75 65 72 79 29 3b 0a 09 7d 0a arch_query);..}. 21e10 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 21e20 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e cackey_mutex_un 21e30 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 21e40 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 21e50 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 21e60 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 21e70 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 RINTF("Error. U 21e80 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e nlocking failed. 21e90 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 21ea0 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 21eb0 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 21ec0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 21ed0 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 21ee0 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 )", CKR_OK);...r 21ef0 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 21f00 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 21f10 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 45 6e TION(CK_RV, C_En 21f20 63 72 79 70 74 49 6e 69 74 29 28 43 4b 5f 53 45 cryptInit)(CK_SE 21f30 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 21f40 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e ssion, CK_MECHAN 21f50 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 ISM_PTR pMechani 21f60 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 sm, CK_OBJECT_HA 21f70 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 41 NDLE hKey) {..CA 21f80 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 21f90 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 21fa0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 21fb0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 21fc0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 21fd0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 21fe0 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 21ff0 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 22000 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 22010 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 22020 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 22030 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 22040 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 22050 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 22060 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 22070 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 22080 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 22090 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 220a0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 220b0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 45 CTION(CK_RV, C_E 220c0 6e 63 72 79 70 74 29 28 43 4b 5f 53 45 53 53 49 ncrypt)(CK_SESSI 220d0 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 220e0 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 220f0 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 pData, CK_ULONG 22100 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 ulDataLen, CK_BY 22110 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 TE_PTR pEncrypte 22120 64 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 5f dData, CK_ULONG_ 22130 50 54 52 20 70 75 6c 45 6e 63 72 79 70 74 65 64 PTR pulEncrypted 22140 44 61 74 61 4c 65 6e 29 20 7b 0a 09 43 41 43 4b DataLen) {..CACK 22150 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 22160 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 22170 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 22180 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 22190 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 221a0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 221b0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 221c0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 221d0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 221e0 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 221f0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 22200 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 22210 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 22220 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 22230 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 22240 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 22250 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 22260 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 22270 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 22280 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 45 6e 63 ION(CK_RV, C_Enc 22290 72 79 70 74 55 70 64 61 74 65 29 28 43 4b 5f 53 ryptUpdate)(CK_S 222a0 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 222b0 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f ession, CK_BYTE_ 222c0 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c PTR pPart, CK_UL 222d0 4f 4e 47 20 75 6c 50 61 72 74 4c 65 6e 2c 20 43 ONG ulPartLen, C 222e0 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 K_BYTE_PTR pEncr 222f0 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c yptedPart, CK_UL 22300 4f 4e 47 5f 50 54 52 20 70 75 6c 45 6e 63 72 79 ONG_PTR pulEncry 22310 70 74 65 64 50 61 72 74 4c 65 6e 29 20 7b 0a 09 ptedPartLen) {.. 22320 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 22330 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 22340 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 22350 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 22360 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 22370 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 22380 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 22390 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 223a0 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 223b0 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 223c0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 223d0 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 223e0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 223f0 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C 22400 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 22410 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re 22420 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO 22430 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 22440 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 22450 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 22460 5f 45 6e 63 72 79 70 74 46 69 6e 61 6c 29 28 43 _EncryptFinal)(C 22470 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 22480 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 22490 54 45 5f 50 54 52 20 70 4c 61 73 74 45 6e 63 72 TE_PTR pLastEncr 224a0 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c yptedPart, CK_UL 224b0 4f 4e 47 5f 50 54 52 20 70 75 6c 4c 61 73 74 45 ONG_PTR pulLastE 224c0 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 29 ncryptedPartLen) 224d0 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 224e0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 224f0 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 22500 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 22510 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 22520 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 22530 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 22540 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 22550 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 22560 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 22570 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 22580 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 22590 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 225a0 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 225b0 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 225c0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 225d0 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 225e0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 225f0 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 22600 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 22610 56 2c 20 43 5f 44 65 63 72 79 70 74 49 6e 69 74 V, C_DecryptInit 22620 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 22630 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 22640 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 _MECHANISM_PTR p 22650 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 Mechanism, CK_OB 22660 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 JECT_HANDLE hKey 22670 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 ) {..int mutex_r 22680 65 74 76 61 6c 3b 0a 0a 09 68 4b 65 79 2d 2d 3b etval;...hKey--; 22690 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 226a0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 226b0 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 226c0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 226d0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 226e0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 226f0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 22700 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 22710 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 22720 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 22730 09 69 66 20 28 70 4d 65 63 68 61 6e 69 73 6d 20 .if (pMechanism 22740 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 22750 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 22760 28 22 45 72 72 6f 72 2e 20 70 4d 65 63 68 61 6e ("Error. pMechan 22770 69 73 6d 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a ism is NULL.");. 22780 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 22790 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} 227a0 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 6e 69 73 ...if (pMechanis 227b0 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 20 21 3d 20 m->mechanism != 227c0 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 29 20 7b 0a CKM_RSA_PKCS) {. 227d0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 227e0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 4d RINTF("Error. pM 227f0 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e echanism->mechan 22800 69 73 6d 20 6e 6f 74 20 73 70 65 63 69 66 69 65 ism not specifie 22810 64 20 61 73 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 d as CKM_RSA_PKC 22820 53 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 S");....return(C 22830 4b 52 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 41 52 KR_MECHANISM_PAR 22840 41 4d 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a AM_INVALID);..}. 22850 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d ..if (hSession = 22860 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 = 0 || hSession 22870 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 >= (sizeof(cacke 22880 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 y_sessions) / si 22890 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 228a0 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 ions[0]))) {...C 228b0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 228c0 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 228d0 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 ion out of range 228e0 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 228f0 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 22900 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 22910 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 22920 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c = cackey_mutex_l 22930 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 22940 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 22950 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 22960 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 22970 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f INTF("Error. Lo 22980 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 22990 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 229a0 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 229b0 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f }...if (!cackey_ 229c0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 229d0 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 n].active) {...c 229e0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 229f0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 22a00 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 22a10 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 22a20 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 r. Session not 22a30 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 active.");...... 22a40 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 22a50 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 22a60 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 D);..}...if (cac 22a70 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 22a80 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 61 ssion].decrypt_a 22a90 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 ctive) {...cacke 22aa0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 22ab0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 22ac0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 22ad0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 22ae0 44 65 63 72 79 70 74 20 61 6c 72 65 61 64 79 20 Decrypt already 22af0 69 6e 20 70 72 6f 67 72 65 73 73 2e 22 29 3b 0a in progress.");. 22b00 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 22b10 4f 50 45 52 41 54 49 4f 4e 5f 41 43 54 49 56 45 OPERATION_ACTIVE 22b20 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 4b 65 79 );..}...if (hKey 22b30 20 3e 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 >= cackey_sessi 22b40 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 ons[hSession].id 22b50 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 20 entities_count) 22b60 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 22b70 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 22b80 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 22b90 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 22ba0 22 45 72 72 6f 72 2e 20 20 4b 65 79 20 68 61 6e "Error. Key han 22bb0 64 6c 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 dle out of range 22bc0 20 28 72 65 71 75 65 73 74 65 64 20 6b 65 79 20 (requested key 22bd0 25 6c 75 2c 20 6f 6e 6c 79 20 25 6c 75 20 69 64 %lu, only %lu id 22be0 65 6e 74 69 74 69 65 73 20 61 76 61 69 6c 61 62 entities availab 22bf0 6c 65 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 le).", (unsigned 22c00 20 6c 6f 6e 67 29 20 68 4b 65 79 2c 20 28 75 6e long) hKey, (un 22c10 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 61 63 signed long) cac 22c20 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 22c30 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 ssion].identitie 22c40 73 5f 63 6f 75 6e 74 29 3b 0a 0a 09 09 72 65 74 s_count);....ret 22c50 75 72 6e 28 43 4b 52 5f 4b 45 59 5f 48 41 4e 44 urn(CKR_KEY_HAND 22c60 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 22c70 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 22c80 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 s[hSession].decr 22c90 79 70 74 5f 61 63 74 69 76 65 20 3d 20 31 3b 0a ypt_active = 1;. 22ca0 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 22cb0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 s[hSession].decr 22cc0 79 70 74 5f 6d 65 63 68 61 6e 69 73 6d 20 3d 20 ypt_mechanism = 22cd0 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 pMechanism->mech 22ce0 61 6e 69 73 6d 3b 0a 09 63 61 63 6b 65 79 5f 73 anism;..cackey_s 22cf0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 22d00 5d 2e 64 65 63 72 79 70 74 5f 6d 65 63 68 5f 70 ].decrypt_mech_p 22d10 61 72 6d 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d arm = pMechanism 22d20 2d 3e 70 50 61 72 61 6d 65 74 65 72 3b 0a 09 63 ->pParameter;..c 22d30 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 22d40 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 Session].decrypt 22d50 5f 6d 65 63 68 5f 70 61 72 6d 6c 65 6e 20 3d 20 _mech_parmlen = 22d60 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 75 6c 50 61 pMechanism->ulPa 22d70 72 61 6d 65 74 65 72 4c 65 6e 3b 0a 09 63 61 63 rameterLen;..cac 22d80 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 22d90 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 69 ssion].decrypt_i 22da0 64 65 6e 74 69 74 79 20 3d 20 26 63 61 63 6b 65 dentity = &cacke 22db0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 22dc0 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5b ion].identities[ 22dd0 68 4b 65 79 5d 3b 0a 0a 09 6d 75 74 65 78 5f 72 hKey];...mutex_r 22de0 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 22df0 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 22e00 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 22e10 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 22e20 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 22e30 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 22e40 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 ror. Unlocking 22e50 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 22e60 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 22e70 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 _ERROR);..}...CA 22e80 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 22e90 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 22ea0 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f _OK (%i)", CKR_O 22eb0 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 K);...return(CKR 22ec0 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 _OK);.}..CK_DEFI 22ed0 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 22ee0 56 2c 20 43 5f 44 65 63 72 79 70 74 29 28 43 4b V, C_Decrypt)(CK 22ef0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 22f00 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 hSession, CK_BYT 22f10 45 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 64 E_PTR pEncrypted 22f20 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 Data, CK_ULONG u 22f30 6c 45 6e 63 72 79 70 74 65 64 44 61 74 61 4c 65 lEncryptedDataLe 22f40 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 22f50 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 Data, CK_ULONG_P 22f60 54 52 20 70 75 6c 44 61 74 61 4c 65 6e 29 20 7b TR pulDataLen) { 22f70 0a 09 43 4b 5f 55 4c 4f 4e 47 20 64 61 74 61 6c ..CK_ULONG datal 22f80 65 6e 5f 75 70 64 61 74 65 2c 20 64 61 74 61 6c en_update, datal 22f90 65 6e 5f 66 69 6e 61 6c 3b 0a 09 43 4b 5f 52 56 en_final;..CK_RV 22fa0 20 64 65 63 72 79 70 74 5f 72 65 74 3b 0a 09 69 decrypt_ret;..i 22fb0 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b nt mutex_retval; 22fc0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 22fd0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 22fe0 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 22ff0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 23000 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 23010 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 23020 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 23030 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 23040 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 23050 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 23060 09 69 66 20 28 70 75 6c 44 61 74 61 4c 65 6e 20 .if (pulDataLen 23070 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 23080 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 23090 28 22 45 72 72 6f 72 2e 20 70 75 6c 44 61 74 61 ("Error. pulData 230a0 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a Len is NULL.");. 230b0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 230c0 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} 230d0 0a 0a 09 64 61 74 61 6c 65 6e 5f 75 70 64 61 74 ...datalen_updat 230e0 65 20 3d 20 2a 70 75 6c 44 61 74 61 4c 65 6e 3b e = *pulDataLen; 230f0 0a 0a 09 64 65 63 72 79 70 74 5f 72 65 74 20 3d ...decrypt_ret = 23100 20 43 5f 44 65 63 72 79 70 74 55 70 64 61 74 65 C_DecryptUpdate 23110 28 68 53 65 73 73 69 6f 6e 2c 20 70 45 6e 63 72 (hSession, pEncr 23120 79 70 74 65 64 44 61 74 61 2c 20 75 6c 45 6e 63 yptedData, ulEnc 23130 72 79 70 74 65 64 44 61 74 61 4c 65 6e 2c 20 70 ryptedDataLen, p 23140 44 61 74 61 2c 20 26 64 61 74 61 6c 65 6e 5f 75 Data, &datalen_u 23150 70 64 61 74 65 29 3b 0a 09 69 66 20 28 64 65 63 pdate);..if (dec 23160 72 79 70 74 5f 72 65 74 20 21 3d 20 43 4b 52 5f rypt_ret != CKR_ 23170 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 OK) {...CACKEY_D 23180 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 23190 6f 72 2e 20 20 44 65 63 72 79 70 74 55 70 64 61 or. DecryptUpda 231a0 74 65 28 29 20 72 65 74 75 72 6e 65 64 20 66 61 te() returned fa 231b0 69 6c 75 72 65 20 28 72 76 20 3d 20 25 6c 75 29 ilure (rv = %lu) 231c0 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f .", (unsigned lo 231d0 6e 67 29 20 64 65 63 72 79 70 74 5f 72 65 74 29 ng) decrypt_ret) 231e0 3b 0a 0a 09 09 69 66 20 28 64 65 63 72 79 70 74 ;....if (decrypt 231f0 5f 72 65 74 20 21 3d 20 43 4b 52 5f 42 55 46 46 _ret != CKR_BUFF 23200 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a ER_TOO_SMALL) {. 23210 09 09 09 2f 2a 20 54 65 72 6d 69 6e 61 74 65 20 .../* Terminate 23220 64 65 63 72 79 70 74 69 6f 6e 20 6f 70 65 72 61 decryption opera 23230 74 69 6f 6e 20 2a 2f 0a 0a 09 09 09 6d 75 74 65 tion */.....mute 23240 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 23250 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 y_mutex_lock(cac 23260 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 09 key_biglock);... 23270 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 23280 6c 20 21 3d 20 30 29 20 7b 0a 09 09 09 09 43 41 l != 0) {.....CA 23290 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 232a0 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 F("Error. Locki 232b0 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 232c0 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 232d0 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 NERAL_ERROR);... 232e0 09 7d 0a 0a 09 09 09 69 66 20 28 21 63 61 63 6b .}.....if (!cack 232f0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 23300 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a sion].active) {. 23310 09 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 ....cackey_mutex 23320 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 23330 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 09 09 43 41 iglock);......CA 23340 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 23350 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 23360 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 on not active.") 23370 3b 0a 09 09 0a 09 09 09 09 72 65 74 75 72 6e 28 ;........return( 23380 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 CKR_SESSION_HAND 23390 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 09 09 LE_INVALID);.... 233a0 7d 0a 0a 09 09 09 69 66 20 28 21 63 61 63 6b 65 }.....if (!cacke 233b0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 233c0 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 ion].decrypt_act 233d0 69 76 65 29 20 7b 0a 09 09 09 09 63 61 63 6b 65 ive) {.....cacke 233e0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 233f0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 23400 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 23410 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 23420 20 20 44 65 63 72 79 70 74 20 6e 6f 74 20 61 63 Decrypt not ac 23430 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 09 09 tive.");........ 23440 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 return(CKR_OPERA 23450 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TION_NOT_INITIAL 23460 49 5a 45 44 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 IZED);....}..... 23470 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 23480 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 hSession].decryp 23490 74 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a 0a 09 t_active = 0;... 234a0 09 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 234b0 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e cackey_mutex_un 234c0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 234d0 6f 63 6b 29 3b 0a 09 09 09 69 66 20 28 6d 75 74 ock);....if (mut 234e0 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 234f0 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {.....CACKEY_DEB 23500 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 23510 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 . Unlocking fai 23520 6c 65 64 2e 22 29 3b 0a 0a 09 09 09 09 72 65 74 led.");......ret 23530 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 23540 45 52 52 4f 52 29 3b 0a 09 09 09 7d 0a 09 09 7d ERROR);....}...} 23550 0a 0a 09 09 72 65 74 75 72 6e 28 64 65 63 72 79 ....return(decry 23560 70 74 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 69 66 pt_ret);..}...if 23570 20 28 70 44 61 74 61 29 20 7b 0a 09 09 70 44 61 (pData) {...pDa 23580 74 61 20 2b 3d 20 64 61 74 61 6c 65 6e 5f 75 70 ta += datalen_up 23590 64 61 74 65 3b 0a 09 7d 0a 09 64 61 74 61 6c 65 date;..}..datale 235a0 6e 5f 66 69 6e 61 6c 20 3d 20 2a 70 75 6c 44 61 n_final = *pulDa 235b0 74 61 4c 65 6e 20 2d 20 64 61 74 61 6c 65 6e 5f taLen - datalen_ 235c0 75 70 64 61 74 65 3b 0a 0a 09 64 65 63 72 79 70 update;...decryp 235d0 74 5f 72 65 74 20 3d 20 43 5f 44 65 63 72 79 70 t_ret = C_Decryp 235e0 74 46 69 6e 61 6c 28 68 53 65 73 73 69 6f 6e 2c tFinal(hSession, 235f0 20 70 44 61 74 61 2c 20 26 64 61 74 61 6c 65 6e pData, &datalen 23600 5f 66 69 6e 61 6c 29 3b 0a 09 69 66 20 28 64 65 _final);..if (de 23610 63 72 79 70 74 5f 72 65 74 20 21 3d 20 43 4b 52 crypt_ret != CKR 23620 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f _OK) {...CACKEY_ 23630 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 23640 72 6f 72 2e 20 20 44 65 63 72 79 70 74 46 69 6e ror. DecryptFin 23650 61 6c 28 29 20 72 65 74 75 72 6e 65 64 20 66 61 al() returned fa 23660 69 6c 75 72 65 20 28 72 76 20 3d 20 25 6c 75 29 ilure (rv = %lu) 23670 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f .", (unsigned lo 23680 6e 67 29 20 64 65 63 72 79 70 74 5f 72 65 74 29 ng) decrypt_ret) 23690 3b 0a 0a 09 09 72 65 74 75 72 6e 28 64 65 63 72 ;....return(decr 236a0 79 70 74 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 2a ypt_ret);..}...* 236b0 70 75 6c 44 61 74 61 4c 65 6e 20 3d 20 64 61 74 pulDataLen = dat 236c0 61 6c 65 6e 5f 75 70 64 61 74 65 20 2b 20 64 61 alen_update + da 236d0 74 61 6c 65 6e 5f 66 69 6e 61 6c 3b 0a 0a 09 43 talen_final;...C 236e0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 236f0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 23700 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ 23710 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b OK);...return(CK 23720 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 R_OK);.}..CK_DEF 23730 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 23740 52 56 2c 20 43 5f 44 65 63 72 79 70 74 55 70 64 RV, C_DecryptUpd 23750 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f ate)(CK_SESSION_ 23760 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 23770 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e CK_BYTE_PTR pEn 23780 63 72 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f cryptedPart, CK_ 23790 55 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 ULONG ulEncrypte 237a0 64 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 dPartLen, CK_BYT 237b0 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f E_PTR pPart, CK_ 237c0 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 50 61 72 ULONG_PTR pulPar 237d0 74 4c 65 6e 29 20 7b 0a 09 73 74 61 74 69 63 20 tLen) {..static 237e0 43 4b 5f 42 59 54 45 20 62 75 66 5b 31 36 33 38 CK_BYTE buf[1638 237f0 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 20 62 75 66 4];..ssize_t buf 23800 6c 65 6e 3b 0a 09 43 4b 5f 53 4c 4f 54 5f 49 44 len;..CK_SLOT_ID 23810 20 73 6c 6f 74 49 44 3b 0a 09 43 4b 5f 52 56 20 slotID;..CK_RV 23820 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e retval = CKR_GEN 23830 45 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 69 6e 74 ERAL_ERROR;..int 23840 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a mutex_retval;.. 23850 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 23860 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 23870 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 23880 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 23890 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 238a0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 238b0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 238c0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 238d0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 238e0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 IALIZED);..}...i 238f0 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 f (hSession == 0 23900 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 || hSession >= 23910 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 (sizeof(cackey_s 23920 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f essions) / sizeo 23930 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 23940 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b s[0]))) {...CACK 23950 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 23960 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 23970 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 out of range.") 23980 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 23990 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 239a0 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 239b0 69 66 20 28 70 45 6e 63 72 79 70 74 65 64 50 61 if (pEncryptedPa 239c0 72 74 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c rt == NULL && ul 239d0 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e EncryptedPartLen 239e0 20 3d 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 == 0) {.../* Sh 239f0 6f 72 74 20 63 69 72 63 75 69 74 20 69 66 20 77 ort circuit if w 23a00 65 20 61 72 65 20 61 73 6b 65 64 20 74 6f 20 64 e are asked to d 23a10 65 63 72 79 70 74 20 6e 6f 74 68 69 6e 67 2e 2e ecrypt nothing.. 23a20 2e 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 . */...CACKEY_DE 23a30 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 23a40 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 23a50 29 20 28 73 68 6f 72 74 20 63 69 72 63 75 69 74 ) (short circuit 23a60 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 )", CKR_OK);.... 23a70 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a return(CKR_OK);. 23a80 09 7d 0a 0a 09 69 66 20 28 70 45 6e 63 72 79 70 .}...if (pEncryp 23a90 74 65 64 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 tedPart == NULL) 23aa0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 23ab0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 23ac0 20 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 20 pEncryptedPart 23ad0 69 73 20 4e 55 4c 4c 2c 20 62 75 74 20 75 6c 45 is NULL, but ulE 23ae0 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 ncryptedPartLen 23af0 69 73 20 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 09 is not 0.");.... 23b00 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM 23b10 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 ENTS_BAD);..}... 23b20 69 66 20 28 75 6c 45 6e 63 72 79 70 74 65 64 50 if (ulEncryptedP 23b30 61 72 74 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 artLen == 0) {.. 23b40 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 23b50 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 75 6c 45 INTF("Error. ulE 23b60 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 ncryptedPartLen 23b70 69 73 20 30 2c 20 62 75 74 20 70 50 61 72 74 20 is 0, but pPart 23b80 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a is not NULL.");. 23b90 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 23ba0 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} 23bb0 0a 0a 09 69 66 20 28 70 75 6c 50 61 72 74 4c 65 ...if (pulPartLe 23bc0 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 n == NULL) {...C 23bd0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 23be0 54 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 50 61 TF("Error. pulPa 23bf0 72 74 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 rtLen is NULL.") 23c00 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 23c10 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a ARGUMENTS_BAD);. 23c20 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 .}...mutex_retva 23c30 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 23c40 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 _lock(cackey_big 23c50 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 23c60 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 23c70 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 23c80 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 23c90 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 Locking failed." 23ca0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 23cb0 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 23cc0 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ..}...if (!cacke 23cd0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 23ce0 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 ion].active) {.. 23cf0 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e .cackey_mutex_un 23d00 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 23d10 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f ock);....CACKEY_ 23d20 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 23d30 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f ror. Session no 23d40 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a t active.");.... 23d50 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES 23d60 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 SION_HANDLE_INVA 23d70 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 LID);..}...if (! 23d80 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 23d90 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 hSession].decryp 23da0 74 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 t_active) {...ca 23db0 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 23dc0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 23dd0 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 23de0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 23df0 2e 20 20 44 65 63 72 79 70 74 20 6e 6f 74 20 61 . Decrypt not a 23e00 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 ctive.");......r 23e10 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 eturn(CKR_OPERAT 23e20 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 ION_NOT_INITIALI 23e30 5a 45 44 29 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 49 ZED);..}...slotI 23e40 44 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 D = cackey_sessi 23e50 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 6c ons[hSession].sl 23e60 6f 74 49 44 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 otID;...if (slot 23e70 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 ID < 0 || slotID 23e80 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b >= (sizeof(cack 23e90 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 ey_slots) / size 23ea0 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b of(cackey_slots[ 23eb0 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 0]))) {...CACKEY 23ec0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 23ed0 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c rror. Invalid sl 23ee0 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c ot requested (%l 23ef0 75 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 76 u), outside of v 23f00 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f alid range", slo 23f10 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 tID);....return( 23f20 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 23f30 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 R);..}...if (cac 23f40 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 key_slots[slotID 23f50 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b ].active == 0) { 23f60 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 23f70 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 PRINTF("Error. I 23f80 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 nvalid slot requ 23f90 65 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f ested (%lu), slo 23fa0 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 t not currently 23fb0 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 active", slotID) 23fc0 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 ;....cackey_mute 23fd0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 23fe0 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 biglock);....ret 23ff0 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 24000 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 73 77 69 ERROR);..}...swi 24010 74 63 68 20 28 63 61 63 6b 65 79 5f 73 65 73 73 tch (cackey_sess 24020 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 ions[hSession].d 24030 65 63 72 79 70 74 5f 6d 65 63 68 61 6e 69 73 6d ecrypt_mechanism 24040 29 20 7b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 ) {...case CKM_R 24050 53 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 SA_PKCS:..../* A 24060 73 6b 20 63 61 72 64 20 74 6f 20 64 65 63 72 79 sk card to decry 24070 70 74 20 2a 2f 0a 09 09 09 62 75 66 6c 65 6e 20 pt */....buflen 24080 3d 20 63 61 63 6b 65 79 5f 73 69 67 6e 64 65 63 = cackey_signdec 24090 72 79 70 74 28 26 63 61 63 6b 65 79 5f 73 6c 6f rypt(&cackey_slo 240a0 74 73 5b 73 6c 6f 74 49 44 5d 2c 20 63 61 63 6b ts[slotID], cack 240b0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 240c0 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 69 64 sion].decrypt_id 240d0 65 6e 74 69 74 79 2c 20 70 45 6e 63 72 79 70 74 entity, pEncrypt 240e0 65 64 50 61 72 74 2c 20 75 6c 45 6e 63 72 79 70 edPart, ulEncryp 240f0 74 65 64 50 61 72 74 4c 65 6e 2c 20 62 75 66 2c tedPartLen, buf, 24100 20 73 69 7a 65 6f 66 28 62 75 66 29 2c 20 30 2c sizeof(buf), 0, 24110 20 31 29 3b 0a 0a 09 09 09 69 66 20 28 62 75 66 1);.....if (buf 24120 6c 65 6e 20 3c 20 30 29 20 7b 0a 09 09 09 09 2f len < 0) {...../ 24130 2a 20 44 65 63 72 79 70 74 69 6f 6e 20 66 61 69 * Decryption fai 24140 6c 65 64 2e 20 2a 2f 0a 09 09 09 09 69 66 20 28 led. */.....if ( 24150 62 75 66 6c 65 6e 20 3d 3d 20 43 41 43 4b 45 59 buflen == CACKEY 24160 5f 50 43 53 43 5f 45 5f 4e 45 45 44 4c 4f 47 49 _PCSC_E_NEEDLOGI 24170 4e 29 20 7b 0a 09 09 09 09 09 72 65 74 76 61 6c N) {......retval 24180 20 3d 20 43 4b 52 5f 55 53 45 52 5f 4e 4f 54 5f = CKR_USER_NOT_ 24190 4c 4f 47 47 45 44 5f 49 4e 3b 0a 09 09 09 09 7d LOGGED_IN;.....} 241a0 20 65 6c 73 65 20 69 66 20 28 62 75 66 6c 65 6e else if (buflen 241b0 20 3d 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f == CACKEY_PCSC_ 241c0 45 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 29 20 7b E_TOKENABSENT) { 241d0 0a 09 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 ......retval = C 241e0 4b 52 5f 44 45 56 49 43 45 5f 52 45 4d 4f 56 45 KR_DEVICE_REMOVE 241f0 44 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a D;.....} else {. 24200 09 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b .....retval = CK 24210 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 3b R_GENERAL_ERROR; 24220 0a 09 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65 .....}....} else 24230 20 69 66 20 28 28 28 75 6e 73 69 67 6e 65 64 20 if (((unsigned 24240 6c 6f 6e 67 29 20 62 75 66 6c 65 6e 29 20 3e 20 long) buflen) > 24250 2a 70 75 6c 50 61 72 74 4c 65 6e 20 26 26 20 70 *pulPartLen && p 24260 50 61 72 74 29 20 7b 0a 09 09 09 09 2f 2a 20 44 Part) {...../* D 24270 65 63 72 79 70 74 65 64 20 64 61 74 61 20 74 6f ecrypted data to 24280 6f 20 6c 61 72 67 65 20 2a 2f 0a 09 09 09 09 72 o large */.....r 24290 65 74 76 61 6c 20 3d 20 43 4b 52 5f 42 55 46 46 etval = CKR_BUFF 242a0 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b 0a 09 09 ER_TOO_SMALL;... 242b0 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 69 66 .} else {.....if 242c0 20 28 70 50 61 72 74 29 20 7b 0a 09 09 09 09 09 (pPart) {...... 242d0 6d 65 6d 63 70 79 28 70 50 61 72 74 2c 20 62 75 memcpy(pPart, bu 242e0 66 2c 20 62 75 66 6c 65 6e 29 3b 0a 09 09 09 09 f, buflen);..... 242f0 7d 0a 0a 09 09 09 09 2a 70 75 6c 50 61 72 74 4c }......*pulPartL 24300 65 6e 20 3d 20 62 75 66 6c 65 6e 3b 0a 0a 09 09 en = buflen;.... 24310 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 4f ..retval = CKR_O 24320 4b 3b 0a 09 09 09 7d 0a 0a 09 09 09 62 72 65 61 K;....}.....brea 24330 6b 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 k;..}...mutex_re 24340 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 24350 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 24360 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 24370 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 24380 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 24390 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 243a0 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 or. Unlocking f 243b0 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 ailed.");....ret 243c0 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 243d0 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 ERROR);..}...CAC 243e0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 243f0 28 22 52 65 74 75 72 6e 69 6e 67 20 25 69 22 2c ("Returning %i", 24400 20 28 69 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a (int) retval);. 24410 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 ..return(retval) 24420 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 24430 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 24440 5f 44 65 63 72 79 70 74 46 69 6e 61 6c 29 28 43 _DecryptFinal)(C 24450 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 24460 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 24470 54 45 5f 50 54 52 20 70 4c 61 73 74 50 61 72 74 TE_PTR pLastPart 24480 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 , CK_ULONG_PTR p 24490 75 6c 4c 61 73 74 50 61 72 74 4c 65 6e 29 20 7b ulLastPartLen) { 244a0 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 ..int mutex_retv 244b0 61 6c 3b 0a 09 69 6e 74 20 74 65 72 6d 69 6e 61 al;..int termina 244c0 74 65 5f 64 65 63 72 79 70 74 20 3d 20 31 3b 0a te_decrypt = 1;. 244d0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 244e0 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 244f0 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 24500 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 24510 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 24520 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 24530 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 24540 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 24550 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 24560 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 24570 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 if (hSession == 24580 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 0 || hSession >= 24590 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 245a0 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 245b0 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 245c0 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 ns[0]))) {...CAC 245d0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 245e0 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 245f0 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 n out of range." 24600 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 24610 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 24620 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 24630 09 69 66 20 28 70 75 6c 4c 61 73 74 50 61 72 74 .if (pulLastPart 24640 4c 65 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 Len == NULL) {.. 24650 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 24660 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 75 6c INTF("Error. pul 24670 4c 61 73 74 50 61 72 74 4c 65 6e 20 69 73 20 4e LastPartLen is N 24680 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 ULL.");....retur 24690 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f n(CKR_ARGUMENTS_ 246a0 42 41 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 BAD);..}...mutex 246b0 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 246c0 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b _mutex_lock(cack 246d0 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 246e0 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 246f0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 24700 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 24710 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 ror. Locking fa 24720 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 24730 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 24740 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 RROR);..}...if ( 24750 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 !cackey_sessions 24760 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 [hSession].activ 24770 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 e) {...cackey_mu 24780 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 24790 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....C 247a0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 247b0 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 247c0 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 ion not active." 247d0 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 247e0 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 247f0 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 24800 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 .if (!cackey_ses 24810 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 24820 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 29 20 decrypt_active) 24830 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 24840 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 24850 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 24860 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 24870 22 45 72 72 6f 72 2e 20 20 44 65 63 72 79 70 74 "Error. Decrypt 24880 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 24890 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 248a0 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e OPERATION_NOT_IN 248b0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 248c0 09 2a 70 75 6c 4c 61 73 74 50 61 72 74 4c 65 6e .*pulLastPartLen 248d0 20 3d 20 30 3b 0a 0a 09 69 66 20 28 70 4c 61 73 = 0;...if (pLas 248e0 74 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b tPart == NULL) { 248f0 0a 09 09 74 65 72 6d 69 6e 61 74 65 5f 64 65 63 ...terminate_dec 24900 72 79 70 74 20 3d 20 30 3b 0a 09 7d 0a 0a 09 69 rypt = 0;..}...i 24910 66 20 28 74 65 72 6d 69 6e 61 74 65 5f 64 65 63 f (terminate_dec 24920 72 79 70 74 29 20 7b 0a 09 09 63 61 63 6b 65 79 rypt) {...cackey 24930 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 24940 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 69 on].decrypt_acti 24950 76 65 20 3d 20 30 3b 0a 09 7d 0a 0a 09 6d 75 74 ve = 0;..}...mut 24960 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 24970 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 24980 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 24990 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 249a0 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 249b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 249c0 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b ("Error. Unlock 249d0 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 249e0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 249f0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 24a00 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 24a10 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 24a20 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C 24a30 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return 24a40 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f (CKR_OK);.}..CK_ 24a50 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 24a60 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 49 CK_RV, C_DigestI 24a70 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f nit)(CK_SESSION_ 24a80 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 24a90 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 CK_MECHANISM_PT 24aa0 52 20 70 4d 65 63 68 61 6e 69 73 6d 29 20 7b 0a R pMechanism) {. 24ab0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 24ac0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 24ad0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 24ae0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 24af0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 24b00 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 24b10 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 24b20 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 24b30 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 24b40 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 24b50 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 24b60 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 24b70 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 24b80 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 24b90 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 24ba0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 24bb0 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 24bc0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 24bd0 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 24be0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 24bf0 43 5f 44 69 67 65 73 74 29 28 43 4b 5f 53 45 53 C_Digest)(CK_SES 24c00 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 24c10 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 sion, CK_BYTE_PT 24c20 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e R pData, CK_ULON 24c30 47 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b 5f G ulDataLen, CK_ 24c40 42 59 54 45 5f 50 54 52 20 70 44 69 67 65 73 74 BYTE_PTR pDigest 24c50 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 , CK_ULONG_PTR p 24c60 75 6c 44 69 67 65 73 74 4c 65 6e 29 20 7b 0a 09 ulDigestLen) {.. 24c70 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 24c80 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 24c90 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 24ca0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 24cb0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 24cc0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 24cd0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 24ce0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 24cf0 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 24d00 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 24d10 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 24d20 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 24d30 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 24d40 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C 24d50 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 24d60 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re 24d70 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO 24d80 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 24d90 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 24da0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 24db0 5f 44 69 67 65 73 74 55 70 64 61 74 65 29 28 43 _DigestUpdate)(C 24dc0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 24dd0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 24de0 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b TE_PTR pPart, CK 24df0 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 6e _ULONG ulPartLen 24e00 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 24e10 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 24e20 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 24e30 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 24e40 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 24e50 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 24e60 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 24e70 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 24e80 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 24e90 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 24ea0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 24eb0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 24ec0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 24ed0 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 24ee0 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 24ef0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 24f00 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 24f10 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 24f20 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 24f30 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 24f40 52 56 2c 20 43 5f 44 69 67 65 73 74 4b 65 79 29 RV, C_DigestKey) 24f50 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 24f60 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 24f70 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b OBJECT_HANDLE hK 24f80 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 ey) {..CACKEY_DE 24f90 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 24fa0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 24fb0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 24fc0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 24fd0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 24fe0 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 24ff0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 25000 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 25010 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 25020 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 25030 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 25040 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 25050 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 25060 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 25070 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 25080 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 25090 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 250a0 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 250b0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 250c0 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 46 69 K_RV, C_DigestFi 250d0 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f nal)(CK_SESSION_ 250e0 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 250f0 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 69 CK_BYTE_PTR pDi 25100 67 65 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 gest, CK_ULONG_P 25110 54 52 20 70 75 6c 44 69 67 65 73 74 4c 65 6e 29 TR pulDigestLen) 25120 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 25130 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 25140 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 25150 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 25160 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 25170 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 25180 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 25190 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 251a0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 251b0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 251c0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 251d0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 251e0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 251f0 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 25200 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 25210 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 25220 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 25230 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 25240 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 25250 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 25260 56 2c 20 43 5f 53 69 67 6e 49 6e 69 74 29 28 43 V, C_SignInit)(C 25270 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 25280 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 hSession, CK_ME 25290 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 CHANISM_PTR pMec 252a0 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 hanism, CK_OBJEC 252b0 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b T_HANDLE hKey) { 252c0 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 ..int mutex_retv 252d0 61 6c 3b 0a 0a 09 68 4b 65 79 2d 2d 3b 0a 0a 09 al;...hKey--;... 252e0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 252f0 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 25300 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 25310 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 25320 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 25330 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 25340 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 25350 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 25360 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 25370 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 25380 20 28 70 4d 65 63 68 61 6e 69 73 6d 20 3d 3d 20 (pMechanism == 25390 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY 253a0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 253b0 72 72 6f 72 2e 20 70 4d 65 63 68 61 6e 69 73 6d rror. pMechanism 253c0 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 is NULL.");.... 253d0 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM 253e0 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 ENTS_BAD);..}... 253f0 69 66 20 28 70 4d 65 63 68 61 6e 69 73 6d 2d 3e if (pMechanism-> 25400 6d 65 63 68 61 6e 69 73 6d 20 21 3d 20 43 4b 4d mechanism != CKM 25410 5f 52 53 41 5f 50 4b 43 53 20 26 26 20 70 4d 65 _RSA_PKCS && pMe 25420 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 chanism->mechani 25430 73 6d 20 21 3d 20 43 4b 4d 5f 53 48 41 31 5f 52 sm != CKM_SHA1_R 25440 53 41 5f 50 4b 43 53 29 20 7b 0a 09 09 43 41 43 SA_PKCS) {...CAC 25450 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 25460 28 22 45 72 72 6f 72 2e 20 70 4d 65 63 68 61 6e ("Error. pMechan 25470 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 20 6e ism->mechanism n 25480 6f 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20 ot specified as 25490 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 20 6f 72 20 CKM_RSA_PKCS or 254a0 43 4b 4d 5f 53 48 41 31 5f 52 53 41 5f 50 4b 43 CKM_SHA1_RSA_PKC 254b0 53 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 S");....return(C 254c0 4b 52 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 41 52 KR_MECHANISM_PAR 254d0 41 4d 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a AM_INVALID);..}. 254e0 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d ..if (hSession = 254f0 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 = 0 || hSession 25500 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 >= (sizeof(cacke 25510 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 y_sessions) / si 25520 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 25530 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 ions[0]))) {...C 25540 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 25550 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 25560 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 ion out of range 25570 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 25580 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 25590 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 255a0 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 255b0 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c = cackey_mutex_l 255c0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 255d0 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 255e0 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 255f0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 25600 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f INTF("Error. Lo 25610 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 25620 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 25630 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 25640 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f }...if (!cackey_ 25650 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 25660 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 n].active) {...c 25670 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 25680 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 25690 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 256a0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 256b0 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 r. Session not 256c0 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 active.");...... 256d0 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 256e0 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 256f0 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 D);..}...if (cac 25700 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 25710 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 ssion].sign_acti 25720 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d ve) {...cackey_m 25730 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 25740 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 25750 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 25760 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 69 67 NTF("Error. Sig 25770 6e 20 61 6c 72 65 61 64 79 20 69 6e 20 70 72 6f n already in pro 25780 67 72 65 73 73 2e 22 29 3b 0a 09 09 0a 09 09 72 gress.");......r 25790 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 eturn(CKR_OPERAT 257a0 49 4f 4e 5f 41 43 54 49 56 45 29 3b 0a 09 7d 0a ION_ACTIVE);..}. 257b0 0a 09 69 66 20 28 68 4b 65 79 20 3e 3d 20 63 61 ..if (hKey >= ca 257c0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 257d0 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 ession].identiti 257e0 65 73 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 63 61 es_count) {...ca 257f0 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 25800 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 25810 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 25820 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 25830 2e 20 20 4b 65 79 20 68 61 6e 64 6c 65 20 6f 75 . Key handle ou 25840 74 20 6f 66 20 72 61 6e 67 65 20 28 72 65 71 75 t of range (requ 25850 65 73 74 65 64 20 6b 65 79 20 25 6c 75 2c 20 6f ested key %lu, o 25860 6e 6c 79 20 25 6c 75 20 69 64 65 6e 74 69 74 69 nly %lu identiti 25870 65 73 20 61 76 61 69 6c 61 62 6c 65 29 2e 22 2c es available).", 25880 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 25890 20 68 4b 65 79 2c 20 28 75 6e 73 69 67 6e 65 64 hKey, (unsigned 258a0 20 6c 6f 6e 67 29 20 63 61 63 6b 65 79 5f 73 65 long) cackey_se 258b0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 258c0 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e .identities_coun 258d0 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b t);....return(CK 258e0 52 5f 4b 45 59 5f 48 41 4e 44 4c 45 5f 49 4e 56 R_KEY_HANDLE_INV 258f0 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b ALID);..}...cack 25900 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 25910 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 sion].sign_activ 25920 65 20 3d 20 31 3b 0a 0a 09 63 61 63 6b 65 79 5f e = 1;...cackey_ 25930 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 25940 6e 5d 2e 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 n].sign_mechanis 25950 6d 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e m = pMechanism-> 25960 6d 65 63 68 61 6e 69 73 6d 3b 0a 0a 09 63 61 63 mechanism;...cac 25970 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 25980 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c ssion].sign_bufl 25990 65 6e 20 3d 20 31 32 38 3b 0a 09 63 61 63 6b 65 en = 128;..cacke 259a0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 259b0 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73 65 ion].sign_bufuse 259c0 64 20 3d 20 30 3b 0a 09 63 61 63 6b 65 79 5f 73 d = 0;..cackey_s 259d0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 259e0 5d 2e 73 69 67 6e 5f 62 75 66 20 3d 20 6d 61 6c ].sign_buf = mal 259f0 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 61 63 6b loc(sizeof(*cack 25a00 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 25a10 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20 sion].sign_buf) 25a20 2a 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e * cackey_session 25a30 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 25a40 5f 62 75 66 6c 65 6e 29 3b 0a 0a 09 43 41 43 4b _buflen);...CACK 25a50 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 25a60 22 53 65 73 73 69 6f 6e 20 25 6c 75 20 73 69 67 "Session %lu sig 25a70 6e 5f 69 64 65 6e 74 69 74 79 20 69 73 20 25 70 n_identity is %p 25a80 20 28 69 64 65 6e 74 69 74 79 20 23 25 6c 75 29 (identity #%lu) 25a90 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 25aa0 67 29 20 68 53 65 73 73 69 6f 6e 2c 20 26 63 61 g) hSession, &ca 25ab0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 25ac0 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 ession].identiti 25ad0 65 73 5b 68 4b 65 79 5d 2c 20 28 75 6e 73 69 67 es[hKey], (unsig 25ae0 6e 65 64 20 6c 6f 6e 67 29 20 68 4b 65 79 29 3b ned long) hKey); 25af0 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 25b00 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 25b10 5f 69 64 65 6e 74 69 74 79 20 3d 20 26 63 61 63 _identity = &cac 25b20 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 25b30 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 ssion].identitie 25b40 73 5b 68 4b 65 79 5d 3b 0a 0a 09 6d 75 74 65 78 s[hKey];...mutex 25b50 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 25b60 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 25b70 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 25b80 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 25b90 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 25ba0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 25bb0 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e Error. Unlockin 25bc0 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 25bd0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 25be0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 25bf0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 25c00 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 25c10 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR 25c20 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C 25c30 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 KR_OK);.}..CK_DE 25c40 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 25c50 5f 52 56 2c 20 43 5f 53 69 67 6e 29 28 43 4b 5f _RV, C_Sign)(CK_ 25c60 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 25c70 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 25c80 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 _PTR pData, CK_U 25c90 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c 20 LONG ulDataLen, 25ca0 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 67 CK_BYTE_PTR pSig 25cb0 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 nature, CK_ULONG 25cc0 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 74 75 72 _PTR pulSignatur 25cd0 65 4c 65 6e 29 20 7b 0a 09 75 6e 73 69 67 6e 65 eLen) {..unsigne 25ce0 64 20 6c 6f 6e 67 20 73 74 61 72 74 5f 73 69 67 d long start_sig 25cf0 6e 5f 62 75 66 75 73 65 64 3b 0a 09 43 4b 5f 52 n_bufused;..CK_R 25d00 56 20 73 69 67 6e 5f 72 65 74 3b 0a 09 69 6e 74 V sign_ret;..int 25d10 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a mutex_retval;.. 25d20 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 25d30 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 25d40 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 25d50 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 25d60 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 25d70 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 25d80 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 25d90 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 25da0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 25db0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 IALIZED);..}...i 25dc0 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 f (hSession == 0 25dd0 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 || hSession >= 25de0 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 (sizeof(cackey_s 25df0 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f essions) / sizeo 25e00 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 25e10 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b s[0]))) {...CACK 25e20 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 25e30 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 25e40 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 out of range.") 25e50 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 25e60 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 25e70 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 25e80 73 74 61 72 74 5f 73 69 67 6e 5f 62 75 66 75 73 start_sign_bufus 25e90 65 64 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 ed = cackey_sess 25ea0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 25eb0 69 67 6e 5f 62 75 66 75 73 65 64 3b 0a 0a 09 73 ign_bufused;...s 25ec0 69 67 6e 5f 72 65 74 20 3d 20 43 5f 53 69 67 6e ign_ret = C_Sign 25ed0 55 70 64 61 74 65 28 68 53 65 73 73 69 6f 6e 2c Update(hSession, 25ee0 20 70 44 61 74 61 2c 20 75 6c 44 61 74 61 4c 65 pData, ulDataLe 25ef0 6e 29 3b 0a 09 69 66 20 28 73 69 67 6e 5f 72 65 n);..if (sign_re 25f00 74 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 t != CKR_OK) {.. 25f10 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 25f20 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 69 INTF("Error. Si 25f30 67 6e 55 70 64 61 74 65 28 29 20 72 65 74 75 72 gnUpdate() retur 25f40 6e 65 64 20 66 61 69 6c 75 72 65 20 28 72 76 20 ned failure (rv 25f50 3d 20 25 6c 75 29 2e 22 2c 20 28 75 6e 73 69 67 = %lu).", (unsig 25f60 6e 65 64 20 6c 6f 6e 67 29 20 73 69 67 6e 5f 72 ned long) sign_r 25f70 65 74 29 3b 0a 0a 09 09 69 66 20 28 73 69 67 6e et);....if (sign 25f80 5f 72 65 74 20 21 3d 20 43 4b 52 5f 42 55 46 46 _ret != CKR_BUFF 25f90 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a ER_TOO_SMALL) {. 25fa0 09 09 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 25fb0 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c = cackey_mutex_l 25fc0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 25fd0 63 6b 29 3b 0a 09 09 09 69 66 20 28 6d 75 74 65 ck);....if (mute 25fe0 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 25ff0 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 26000 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 26010 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Locking failed 26020 2e 22 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e .");......return 26030 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 26040 4f 52 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 OR);....}.....if 26050 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f (!cackey_sessio 26060 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 ns[hSession].act 26070 69 76 65 29 20 7b 0a 09 09 09 09 63 61 63 6b 65 ive) {.....cacke 26080 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 26090 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 260a0 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 260b0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 260c0 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 Session not ac 260d0 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 09 09 tive.");........ 260e0 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 260f0 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 26100 44 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 D);....}.....if 26110 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (!cackey_session 26120 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 26130 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 09 09 63 _active) {.....c 26140 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 26150 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 26160 6b 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f k);......CACKEY_ 26170 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 26180 72 6f 72 2e 20 20 53 69 67 6e 20 6e 6f 74 20 61 ror. Sign not a 26190 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 09 ctive.");....... 261a0 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 .return(CKR_OPER 261b0 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 ATION_NOT_INITIA 261c0 4c 49 5a 45 44 29 3b 0a 09 09 09 7d 0a 0a 09 09 LIZED);....}.... 261d0 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 261e0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 261f0 61 63 74 69 76 65 20 3d 20 30 3b 0a 0a 09 09 09 active = 0;..... 26200 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 26210 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 26220 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 26230 6b 29 3b 0a 09 09 09 69 66 20 28 6d 75 74 65 78 k);....if (mutex 26240 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 26250 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 26260 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 26270 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 Unlocking faile 26280 64 2e 22 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 d.");......retur 26290 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 262a0 52 4f 52 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a ROR);....}...}.. 262b0 09 09 72 65 74 75 72 6e 28 73 69 67 6e 5f 72 65 ..return(sign_re 262c0 74 29 3b 0a 09 7d 0a 0a 09 73 69 67 6e 5f 72 65 t);..}...sign_re 262d0 74 20 3d 20 43 5f 53 69 67 6e 46 69 6e 61 6c 28 t = C_SignFinal( 262e0 68 53 65 73 73 69 6f 6e 2c 20 70 53 69 67 6e 61 hSession, pSigna 262f0 74 75 72 65 2c 20 70 75 6c 53 69 67 6e 61 74 75 ture, pulSignatu 26300 72 65 4c 65 6e 29 3b 0a 09 69 66 20 28 73 69 67 reLen);..if (sig 26310 6e 5f 72 65 74 20 21 3d 20 43 4b 52 5f 4f 4b 29 n_ret != CKR_OK) 26320 20 7b 0a 09 09 69 66 20 28 73 69 67 6e 5f 72 65 {...if (sign_re 26330 74 20 3d 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f t == CKR_BUFFER_ 26340 54 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a 09 09 09 TOO_SMALL) {.... 26350 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 26360 4e 54 46 28 22 53 69 67 6e 46 69 6e 61 6c 28 29 NTF("SignFinal() 26370 20 72 65 74 75 72 6e 65 64 20 43 4b 52 5f 42 55 returned CKR_BU 26380 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 20 28 FFER_TOO_SMALL ( 26390 72 76 20 3d 20 25 6c 75 29 2c 20 75 6e 64 6f 69 rv = %lu), undoi 263a0 6e 67 20 43 5f 53 69 67 6e 55 70 64 61 74 65 28 ng C_SignUpdate( 263b0 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f )", (unsigned lo 263c0 6e 67 29 20 73 69 67 6e 5f 72 65 74 29 3b 0a 0a ng) sign_ret);.. 263d0 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio 263e0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 263f0 6e 5f 62 75 66 75 73 65 64 20 3d 20 73 74 61 72 n_bufused = star 26400 74 5f 73 69 67 6e 5f 62 75 66 75 73 65 64 3b 0a t_sign_bufused;. 26410 0a 09 09 09 72 65 74 75 72 6e 28 73 69 67 6e 5f ....return(sign_ 26420 72 65 74 29 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 ret);...}....CAC 26430 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 26440 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 46 69 ("Error. SignFi 26450 6e 61 6c 28 29 20 72 65 74 75 72 6e 65 64 20 66 nal() returned f 26460 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 6c 75 ailure (rv = %lu 26470 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ).", (unsigned l 26480 6f 6e 67 29 20 73 69 67 6e 5f 72 65 74 29 3b 0a ong) sign_ret);. 26490 0a 09 09 72 65 74 75 72 6e 28 73 69 67 6e 5f 72 ...return(sign_r 264a0 65 74 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 53 et);..}...if (pS 264b0 69 67 6e 61 74 75 72 65 20 3d 3d 20 4e 55 4c 4c ignature == NULL 264c0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 264d0 55 47 5f 50 52 49 4e 54 46 28 22 70 53 69 67 6e UG_PRINTF("pSign 264e0 61 74 75 72 65 20 73 70 65 63 69 66 69 65 64 20 ature specified 264f0 61 73 20 4e 55 4c 4c 2c 20 75 6e 64 6f 69 6e 67 as NULL, undoing 26500 20 43 5f 53 69 67 6e 55 70 64 61 74 65 28 29 22 C_SignUpdate()" 26510 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 );....cackey_ses 26520 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 26530 73 69 67 6e 5f 62 75 66 75 73 65 64 20 3d 20 73 sign_bufused = s 26540 74 61 72 74 5f 73 69 67 6e 5f 62 75 66 75 73 65 tart_sign_bufuse 26550 64 3b 0a 0a 09 09 72 65 74 75 72 6e 28 73 69 67 d;....return(sig 26560 6e 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 43 41 43 n_ret);..}...CAC 26570 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 26580 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 26590 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b OK (%i)", CKR_OK 265a0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 265b0 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e OK);.}..CK_DEFIN 265c0 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 265d0 2c 20 43 5f 53 69 67 6e 55 70 64 61 74 65 29 28 , C_SignUpdate)( 265e0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 265f0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 26600 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 YTE_PTR pPart, C 26610 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 K_ULONG ulPartLe 26620 6e 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f n) {..int mutex_ 26630 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 retval;...CACKEY 26640 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 26650 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 26660 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 26670 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 26680 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 26690 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 266a0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 266b0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 266c0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 266d0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 );..}...if (hSes 266e0 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 sion == 0 || hSe 266f0 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 ssion >= (sizeof 26700 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 26710 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke 26720 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 y_sessions[0]))) 26730 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 26740 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 26750 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 Session out of 26760 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 range.");...... 26770 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 26780 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 26790 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 50 61 D);..}...if (pPa 267a0 72 74 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c rt == NULL && ul 267b0 50 61 72 74 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a PartLen == 0) {. 267c0 09 09 2f 2a 20 53 68 6f 72 74 20 63 69 72 63 75 ../* Short circu 267d0 69 74 20 69 66 20 77 65 20 61 72 65 20 61 73 6b it if we are ask 267e0 65 64 20 74 6f 20 73 69 67 6e 20 6e 6f 74 68 69 ed to sign nothi 267f0 6e 67 2e 2e 2e 20 2a 2f 0a 09 09 43 41 43 4b 45 ng... */...CACKE 26800 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 26810 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 26820 20 28 25 69 29 20 28 73 68 6f 72 74 20 63 69 72 (%i) (short cir 26830 63 75 69 74 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b cuit)", CKR_OK); 26840 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ....return(CKR_O 26850 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 50 61 K);..}...if (pPa 26860 72 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 rt == NULL) {... 26870 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 26880 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 50 61 72 NTF("Error. pPar 26890 74 20 69 73 20 4e 55 4c 4c 2c 20 62 75 74 20 75 t is NULL, but u 268a0 6c 50 61 72 74 4c 65 6e 20 69 73 20 6e 6f 74 20 lPartLen is not 268b0 30 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 0.");....return( 268c0 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA 268d0 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 6c 50 D);..}...if (ulP 268e0 61 72 74 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 artLen == 0) {.. 268f0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 26900 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 75 6c 50 INTF("Error. ulP 26910 61 72 74 4c 65 6e 20 69 73 20 30 2c 20 62 75 74 artLen is 0, but 26920 20 70 50 61 72 74 20 69 73 20 6e 6f 74 20 4e 55 pPart is not NU 26930 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 26940 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 26950 41 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f AD);..}...mutex_ 26960 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 26970 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 mutex_lock(cacke 26980 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 26990 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 269a0 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 269b0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 269c0 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 or. Locking fai 269d0 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 269e0 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 269f0 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 ROR);..}...if (! 26a00 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 26a10 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 hSession].active 26a20 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 26a30 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 26a40 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 26a50 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 26a60 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 26a70 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 on not active.") 26a80 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 26a90 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 26aa0 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 26ab0 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 if (!cackey_sess 26ac0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 26ad0 69 67 6e 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 ign_active) {... 26ae0 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 26af0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 26b00 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 26b10 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 26b20 6f 72 2e 20 20 53 69 67 6e 20 6e 6f 74 20 61 63 or. Sign not ac 26b30 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 26b40 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 turn(CKR_OPERATI 26b50 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a ON_NOT_INITIALIZ 26b60 45 44 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 68 ED);..}...switch 26b70 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (cackey_session 26b80 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 26b90 5f 6d 65 63 68 61 6e 69 73 6d 29 20 7b 0a 09 09 _mechanism) {... 26ba0 63 61 73 65 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 case CKM_RSA_PKC 26bb0 53 3a 0a 09 09 09 2f 2a 20 41 63 63 75 6d 75 6c S:..../* Accumul 26bc0 61 74 65 20 64 69 72 65 63 74 6c 79 20 2a 2f 0a ate directly */. 26bd0 09 09 09 69 66 20 28 28 63 61 63 6b 65 79 5f 73 ...if ((cackey_s 26be0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 26bf0 5d 2e 73 69 67 6e 5f 62 75 66 75 73 65 64 20 2b ].sign_bufused + 26c00 20 75 6c 50 61 72 74 4c 65 6e 29 20 3e 20 63 61 ulPartLen) > ca 26c10 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 26c20 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 ession].sign_buf 26c30 6c 65 6e 29 20 7b 0a 09 09 09 09 63 61 63 6b 65 len) {.....cacke 26c40 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 26c50 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c 65 6e ion].sign_buflen 26c60 20 2a 3d 20 32 3b 0a 0a 09 09 09 09 63 61 63 6b *= 2;......cack 26c70 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 26c80 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 20 3d sion].sign_buf = 26c90 20 72 65 61 6c 6c 6f 63 28 63 61 63 6b 65 79 5f realloc(cackey_ 26ca0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 26cb0 6e 5d 2e 73 69 67 6e 5f 62 75 66 2c 20 73 69 7a n].sign_buf, siz 26cc0 65 6f 66 28 2a 63 61 63 6b 65 79 5f 73 65 73 73 eof(*cackey_sess 26cd0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 26ce0 69 67 6e 5f 62 75 66 29 20 2a 20 63 61 63 6b 65 ign_buf) * cacke 26cf0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 26d00 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c 65 6e ion].sign_buflen 26d10 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 6d 65 6d 63 );....}.....memc 26d20 70 79 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f py(cackey_sessio 26d30 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 26d40 6e 5f 62 75 66 20 2b 20 63 61 63 6b 65 79 5f 73 n_buf + cackey_s 26d50 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 26d60 5d 2e 73 69 67 6e 5f 62 75 66 75 73 65 64 2c 20 ].sign_bufused, 26d70 70 50 61 72 74 2c 20 75 6c 50 61 72 74 4c 65 6e pPart, ulPartLen 26d80 29 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 );.....cackey_se 26d90 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 26da0 2e 73 69 67 6e 5f 62 75 66 75 73 65 64 20 2b 3d .sign_bufused += 26db0 20 75 6c 50 61 72 74 4c 65 6e 3b 0a 0a 09 09 09 ulPartLen;..... 26dc0 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 43 4b break;...case CK 26dd0 4d 5f 53 48 41 31 5f 52 53 41 5f 50 4b 43 53 3a M_SHA1_RSA_PKCS: 26de0 0a 09 09 09 2f 2a 20 58 58 58 3a 20 41 63 63 75 ..../* XXX: Accu 26df0 6d 75 6c 61 74 65 20 69 6e 74 6f 20 61 20 53 48 mulate into a SH 26e00 41 31 20 68 61 73 68 20 2a 2f 0a 09 09 09 63 61 A1 hash */....ca 26e10 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 26e20 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 26e30 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 );.....CACKEY_DE 26e40 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 26e50 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 rning CKR_FUNCTI 26e60 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 26e70 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 (%i)", CKR_FUNC 26e80 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 26e90 45 44 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 ED);.....return( 26ea0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 26eb0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 09 09 09 _SUPPORTED);.... 26ec0 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 6d 75 74 65 break;..}...mute 26ed0 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 26ee0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 26ef0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 26f00 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 26f10 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 26f20 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 26f30 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 "Error. Unlocki 26f40 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 26f50 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 26f60 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 26f70 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 26f80 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 26f90 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK 26fa0 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 R_OK);...return( 26fb0 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 CKR_OK);.}..CK_D 26fc0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 26fd0 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 46 69 6e 61 K_RV, C_SignFina 26fe0 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 l)(CK_SESSION_HA 26ff0 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 27000 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 67 6e K_BYTE_PTR pSign 27010 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 5f ature, CK_ULONG_ 27020 50 54 52 20 70 75 6c 53 69 67 6e 61 74 75 72 65 PTR pulSignature 27030 4c 65 6e 29 20 7b 0a 09 73 74 61 74 69 63 20 43 Len) {..static C 27040 4b 5f 42 59 54 45 20 73 69 67 62 75 66 5b 31 30 K_BYTE sigbuf[10 27050 32 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 20 73 69 24];..ssize_t si 27060 67 62 75 66 6c 65 6e 3b 0a 09 43 4b 5f 53 4c 4f gbuflen;..CK_SLO 27070 54 5f 49 44 20 73 6c 6f 74 49 44 3b 0a 09 43 4b T_ID slotID;..CK 27080 5f 52 56 20 72 65 74 76 61 6c 20 3d 20 43 4b 52 _RV retval = CKR 27090 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 3b 0a _GENERAL_ERROR;. 270a0 09 69 6e 74 20 74 65 72 6d 69 6e 61 74 65 5f 73 .int terminate_s 270b0 69 67 6e 20 3d 20 31 3b 0a 09 69 6e 74 20 6d 75 ign = 1;..int mu 270c0 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 tex_retval;...CA 270d0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 270e0 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 270f0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 27100 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 27110 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 27120 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 27130 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 27140 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 27150 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 27160 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 IZED);..}...if ( 27170 70 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 20 pulSignatureLen 27180 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 27190 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 271a0 28 22 45 72 72 6f 72 2e 20 70 75 6c 53 69 67 6e ("Error. pulSign 271b0 61 74 75 72 65 4c 65 6e 20 69 73 20 4e 55 4c 4c atureLen is NULL 271c0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 271d0 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD 271e0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 );..}...if (hSes 271f0 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 sion == 0 || hSe 27200 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 ssion >= (sizeof 27210 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 27220 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke 27230 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 y_sessions[0]))) 27240 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 27250 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 27260 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 Session out of 27270 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 range.");...... 27280 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 27290 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 272a0 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 D);..}...mutex_r 272b0 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 272c0 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 utex_lock(cackey 272d0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 272e0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 272f0 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 27300 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 27310 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c r. Locking fail 27320 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 27330 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 27340 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 OR);..}...if (!c 27350 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 27360 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 Session].active) 27370 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 27380 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 27390 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 273a0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 273b0 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 273c0 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b n not active."); 273d0 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 273e0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 273f0 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 27400 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 27410 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 27420 67 6e 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 gn_active) {...c 27430 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 27440 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 27450 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 27460 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 27470 72 2e 20 20 53 69 67 6e 20 6e 6f 74 20 61 63 74 r. Sign not act 27480 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ive.");......ret 27490 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f urn(CKR_OPERATIO 274a0 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 N_NOT_INITIALIZE 274b0 44 29 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 49 44 20 D);..}...slotID 274c0 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e = cackey_session 274d0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f 74 s[hSession].slot 274e0 49 44 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 ID;...if (slotID 274f0 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e < 0 || slotID > 27500 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 = (sizeof(cackey 27510 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 _slots) / sizeof 27520 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d (cackey_slots[0] 27530 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ))) {...CACKEY_D 27540 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 27550 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 or. Invalid slot 27560 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 requested (%lu) 27570 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c , outside of val 27580 69 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 id range", slotI 27590 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b D);....return(CK 275a0 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 275b0 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 ;..}...if (cacke 275c0 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e y_slots[slotID]. 275d0 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09 active == 0) {.. 275e0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 275f0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 INTF("Error. Inv 27600 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 alid slot reques 27610 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 ted (%lu), slot 27620 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 63 not currently ac 27630 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a tive", slotID);. 27640 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 27650 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 27660 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72 glock);....retur 27670 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 27680 52 4f 52 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 ROR);..}...switc 27690 68 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f h (cackey_sessio 276a0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 276b0 6e 5f 6d 65 63 68 61 6e 69 73 6d 29 20 7b 0a 09 n_mechanism) {.. 276c0 09 63 61 73 65 20 43 4b 4d 5f 52 53 41 5f 50 4b .case CKM_RSA_PK 276d0 43 53 3a 0a 09 09 09 2f 2a 20 41 73 6b 20 63 61 CS:..../* Ask ca 276e0 72 64 20 74 6f 20 73 69 67 6e 20 2a 2f 0a 09 09 rd to sign */... 276f0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 27700 49 4e 54 46 28 22 41 73 6b 69 6e 67 20 74 6f 20 INTF("Asking to 27710 73 69 67 6e 20 66 72 6f 6d 20 69 64 65 6e 74 69 sign from identi 27720 74 79 20 25 70 20 69 6e 20 73 65 73 73 69 6f 6e ty %p in session 27730 20 25 6c 75 22 2c 20 63 61 63 6b 65 79 5f 73 65 %lu", cackey_se 27740 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 27750 2e 73 69 67 6e 5f 69 64 65 6e 74 69 74 79 2c 20 .sign_identity, 27760 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 27770 68 53 65 73 73 69 6f 6e 29 3b 0a 09 09 09 73 69 hSession);....si 27780 67 62 75 66 6c 65 6e 20 3d 20 63 61 63 6b 65 79 gbuflen = cackey 27790 5f 73 69 67 6e 64 65 63 72 79 70 74 28 26 63 61 _signdecrypt(&ca 277a0 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 ckey_slots[slotI 277b0 44 5d 2c 20 63 61 63 6b 65 79 5f 73 65 73 73 69 D], cackey_sessi 277c0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 277d0 67 6e 5f 69 64 65 6e 74 69 74 79 2c 20 63 61 63 gn_identity, cac 277e0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 277f0 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 2c ssion].sign_buf, 27800 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 27810 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 27820 62 75 66 75 73 65 64 2c 20 73 69 67 62 75 66 2c bufused, sigbuf, 27830 20 73 69 7a 65 6f 66 28 73 69 67 62 75 66 29 2c sizeof(sigbuf), 27840 20 31 2c 20 30 29 3b 0a 0a 09 09 09 69 66 20 28 1, 0);.....if ( 27850 73 69 67 62 75 66 6c 65 6e 20 3c 20 30 29 20 7b sigbuflen < 0) { 27860 0a 09 09 09 09 2f 2a 20 53 69 67 6e 69 6e 67 20 ...../* Signing 27870 66 61 69 6c 65 64 2e 20 2a 2f 0a 09 09 09 09 69 failed. */.....i 27880 66 20 28 73 69 67 62 75 66 6c 65 6e 20 3d 3d 20 f (sigbuflen == 27890 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 4e 45 CACKEY_PCSC_E_NE 278a0 45 44 4c 4f 47 49 4e 29 20 7b 0a 09 09 09 09 09 EDLOGIN) {...... 278b0 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 55 53 45 retval = CKR_USE 278c0 52 5f 4e 4f 54 5f 4c 4f 47 47 45 44 5f 49 4e 3b R_NOT_LOGGED_IN; 278d0 0a 09 09 09 09 7d 20 65 6c 73 65 20 69 66 20 28 .....} else if ( 278e0 73 69 67 62 75 66 6c 65 6e 20 3d 3d 20 43 41 43 sigbuflen == CAC 278f0 4b 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e KEY_PCSC_E_TOKEN 27900 41 42 53 45 4e 54 29 20 7b 0a 09 09 09 09 09 72 ABSENT) {......r 27910 65 74 76 61 6c 20 3d 20 43 4b 52 5f 44 45 56 49 etval = CKR_DEVI 27920 43 45 5f 52 45 4d 4f 56 45 44 3b 0a 09 09 09 09 CE_REMOVED;..... 27930 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 72 65 } else {......re 27940 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e 45 52 tval = CKR_GENER 27950 41 4c 5f 45 52 52 4f 52 3b 0a 09 09 09 09 7d 0a AL_ERROR;.....}. 27960 09 09 09 7d 20 65 6c 73 65 20 69 66 20 28 28 28 ...} else if ((( 27970 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 unsigned long) s 27980 69 67 62 75 66 6c 65 6e 29 20 3e 20 2a 70 75 6c igbuflen) > *pul 27990 53 69 67 6e 61 74 75 72 65 4c 65 6e 20 26 26 20 SignatureLen && 279a0 70 53 69 67 6e 61 74 75 72 65 29 20 7b 0a 09 09 pSignature) {... 279b0 09 09 2f 2a 20 53 69 67 6e 65 64 20 64 61 74 61 ../* Signed data 279c0 20 74 6f 6f 20 6c 61 72 67 65 20 2a 2f 0a 09 09 too large */... 279d0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 279e0 52 49 4e 54 46 28 22 72 65 74 76 61 6c 20 3d 20 RINTF("retval = 279f0 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 CKR_BUFFER_TOO_S 27a00 4d 41 4c 4c 3b 20 20 73 69 67 62 75 66 6c 65 6e MALL; sigbuflen 27a10 20 3d 20 25 6c 75 2c 20 70 75 6c 53 69 67 6e 61 = %lu, pulSigna 27a20 74 75 72 65 4c 65 6e 20 3d 20 25 6c 75 22 2c 20 tureLen = %lu", 27a30 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 27a40 73 69 67 62 75 66 6c 65 6e 2c 20 28 75 6e 73 69 sigbuflen, (unsi 27a50 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 70 75 6c 53 gned long) *pulS 27a60 69 67 6e 61 74 75 72 65 4c 65 6e 29 3b 0a 0a 09 ignatureLen);... 27a70 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f ...retval = CKR_ 27a80 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c BUFFER_TOO_SMALL 27a90 3b 0a 0a 09 09 09 09 74 65 72 6d 69 6e 61 74 65 ;......terminate 27aa0 5f 73 69 67 6e 20 3d 20 30 3b 0a 09 09 09 7d 20 _sign = 0;....} 27ab0 65 6c 73 65 20 7b 0a 09 09 09 09 74 65 72 6d 69 else {.....termi 27ac0 6e 61 74 65 5f 73 69 67 6e 20 3d 20 30 3b 0a 0a nate_sign = 0;.. 27ad0 09 09 09 09 69 66 20 28 70 53 69 67 6e 61 74 75 ....if (pSignatu 27ae0 72 65 29 20 7b 0a 09 09 09 09 09 6d 65 6d 63 70 re) {......memcp 27af0 79 28 70 53 69 67 6e 61 74 75 72 65 2c 20 73 69 y(pSignature, si 27b00 67 62 75 66 2c 20 73 69 67 62 75 66 6c 65 6e 29 gbuf, sigbuflen) 27b10 3b 0a 0a 09 09 09 09 09 74 65 72 6d 69 6e 61 74 ;.......terminat 27b20 65 5f 73 69 67 6e 20 3d 20 31 3b 0a 09 09 09 09 e_sign = 1;..... 27b30 7d 0a 0a 09 09 09 09 2a 70 75 6c 53 69 67 6e 61 }......*pulSigna 27b40 74 75 72 65 4c 65 6e 20 3d 20 73 69 67 62 75 66 tureLen = sigbuf 27b50 6c 65 6e 3b 0a 0a 09 09 09 09 72 65 74 76 61 6c len;......retval 27b60 20 3d 20 43 4b 52 5f 4f 4b 3b 0a 09 09 09 7d 0a = CKR_OK;....}. 27b70 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 ....break;...cas 27b80 65 20 43 4b 4d 5f 53 48 41 31 5f 52 53 41 5f 50 e CKM_SHA1_RSA_P 27b90 4b 43 53 3a 0a 09 09 09 2f 2a 20 58 58 58 3a 20 KCS:..../* XXX: 27ba0 41 63 63 75 6d 75 6c 61 74 65 20 69 6e 74 6f 20 Accumulate into 27bb0 61 20 53 48 41 31 20 68 61 73 68 20 2a 2f 0a 09 a SHA1 hash */.. 27bc0 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 27bd0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 27be0 6c 6f 63 6b 29 3b 0a 0a 09 09 09 43 41 43 4b 45 lock);.....CACKE 27bf0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 27c00 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 27c10 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 27c20 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 27c30 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 27c40 50 4f 52 54 45 44 29 3b 0a 0a 09 09 09 72 65 74 PORTED);.....ret 27c50 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 27c60 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 27c70 0a 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 ....break;..}... 27c80 69 66 20 28 74 65 72 6d 69 6e 61 74 65 5f 73 69 if (terminate_si 27c90 67 6e 29 20 7b 0a 09 09 69 66 20 28 63 61 63 6b gn) {...if (cack 27ca0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 27cb0 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20 sion].sign_buf) 27cc0 7b 0a 09 09 09 66 72 65 65 28 63 61 63 6b 65 79 {....free(cackey 27cd0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 27ce0 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 3b 0a 09 on].sign_buf);.. 27cf0 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 .}....cackey_ses 27d00 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 27d10 73 69 67 6e 5f 61 63 74 69 76 65 20 3d 20 30 3b sign_active = 0; 27d20 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 27d30 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 27d40 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 27d50 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 27d60 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 27d70 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 27d80 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 27d90 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 . Unlocking fai 27da0 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 27db0 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 27dc0 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ROR);..}...CACKE 27dd0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 27de0 52 65 74 75 72 6e 69 6e 67 20 25 69 22 2c 20 28 Returning %i", ( 27df0 69 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a 0a 09 int) retval);... 27e00 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a return(retval);. 27e10 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 27e20 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 CTION(CK_RV, C_S 27e30 69 67 6e 52 65 63 6f 76 65 72 49 6e 69 74 29 28 ignRecoverInit)( 27e40 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 27e50 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d E hSession, CK_M 27e60 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 ECHANISM_PTR pMe 27e70 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 chanism, CK_OBJE 27e80 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 CT_HANDLE hKey) 27e90 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 27ea0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 27eb0 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 27ec0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 27ed0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 27ee0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 27ef0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 27f00 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 27f10 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 27f20 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 27f30 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 27f40 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 27f50 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 27f60 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 27f70 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 27f80 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 27f90 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 27fa0 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 27fb0 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN 27fc0 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 27fd0 2c 20 43 5f 53 69 67 6e 52 65 63 6f 76 65 72 29 , C_SignRecover) 27fe0 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 27ff0 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 28000 42 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 BYTE_PTR pData, 28010 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c CK_ULONG ulDataL 28020 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 en, CK_BYTE_PTR 28030 70 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 pSignature, CK_U 28040 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 67 6e LONG_PTR pulSign 28050 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09 43 41 43 atureLen) {..CAC 28060 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 28070 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 28080 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 28090 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 280a0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 280b0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 280c0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 280d0 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 280e0 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 280f0 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 28100 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 28110 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 28120 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 28130 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 28140 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 28150 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 28160 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 28170 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 28180 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 28190 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 TION(CK_RV, C_Ve 281a0 72 69 66 79 49 6e 69 74 29 28 43 4b 5f 53 45 53 rifyInit)(CK_SES 281b0 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 281c0 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 sion, CK_MECHANI 281d0 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 SM_PTR pMechanis 281e0 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e m, CK_OBJECT_HAN 281f0 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 41 43 DLE hKey) {..CAC 28200 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 28210 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 28220 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 28230 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 28240 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 28250 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 28260 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 28270 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 28280 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 28290 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 282a0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 282b0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 282c0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 282d0 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 282e0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 282f0 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 28300 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 28310 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 28320 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 28330 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 TION(CK_RV, C_Ve 28340 72 69 66 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e rify)(CK_SESSION 28350 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 28360 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 , CK_BYTE_PTR pD 28370 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c ata, CK_ULONG ul 28380 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 DataLen, CK_BYTE 28390 5f 50 54 52 20 70 53 69 67 6e 61 74 75 72 65 2c _PTR pSignature, 283a0 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 69 67 6e CK_ULONG ulSign 283b0 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09 43 41 43 atureLen) {..CAC 283c0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 283d0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 283e0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 283f0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 28400 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 28410 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 28420 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 28430 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 28440 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 28450 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 28460 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 28470 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 28480 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 28490 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 284a0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 284b0 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 284c0 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 284d0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 284e0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 284f0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 TION(CK_RV, C_Ve 28500 72 69 66 79 55 70 64 61 74 65 29 28 43 4b 5f 53 rifyUpdate)(CK_S 28510 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 28520 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f ession, CK_BYTE_ 28530 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c PTR pPart, CK_UL 28540 4f 4e 47 20 75 6c 50 61 72 74 4c 65 6e 29 20 7b ONG ulPartLen) { 28550 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 28560 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 28570 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 28580 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 28590 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 285a0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 285b0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 285c0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 285d0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 285e0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 285f0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 28600 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 28610 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 28620 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 28630 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 28640 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 28650 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 28660 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 28670 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 28680 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 28690 20 43 5f 56 65 72 69 66 79 46 69 6e 61 6c 29 28 C_VerifyFinal)( 286a0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 286b0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 286c0 59 54 45 5f 50 54 52 20 70 53 69 67 6e 61 74 75 YTE_PTR pSignatu 286d0 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 re, CK_ULONG ulS 286e0 69 67 6e 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09 ignatureLen) {.. 286f0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 28700 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 28710 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 28720 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 28730 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 28740 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 28750 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 28760 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 28770 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 28780 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 28790 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 287a0 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 287b0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 287c0 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C 287d0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 287e0 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re 287f0 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO 28800 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 28810 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 28820 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 28830 5f 56 65 72 69 66 79 52 65 63 6f 76 65 72 49 6e _VerifyRecoverIn 28840 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 it)(CK_SESSION_H 28850 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 28860 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 CK_MECHANISM_PTR 28870 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f pMechanism, CK_ 28880 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b OBJECT_HANDLE hK 28890 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 ey) {..CACKEY_DE 288a0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 288b0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 288c0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 288d0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 288e0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 288f0 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 28900 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 28910 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 28920 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 28930 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 28940 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 28950 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 28960 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 28970 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 28980 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 28990 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 289a0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 289b0 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 289c0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 289d0 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66 79 52 65 K_RV, C_VerifyRe 289e0 63 6f 76 65 72 29 28 43 4b 5f 53 45 53 53 49 4f cover)(CK_SESSIO 289f0 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 28a00 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 28a10 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c Signature, CK_UL 28a20 4f 4e 47 20 75 6c 53 69 67 6e 61 74 75 72 65 4c ONG ulSignatureL 28a30 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 en, CK_BYTE_PTR 28a40 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 5f pData, CK_ULONG_ 28a50 50 54 52 20 70 75 6c 44 61 74 61 4c 65 6e 29 20 PTR pulDataLen) 28a60 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 28a70 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 28a80 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 28a90 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 28aa0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 28ab0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 28ac0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 28ad0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 28ae0 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 28af0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 28b00 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 28b10 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 28b20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 28b30 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 28b40 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 28b50 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 28b60 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 28b70 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 28b80 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN 28b90 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 28ba0 2c 20 43 5f 44 69 67 65 73 74 45 6e 63 72 79 70 , C_DigestEncryp 28bb0 74 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 tUpdate)(CK_SESS 28bc0 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 28bd0 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 28be0 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 pPart, CK_ULONG 28bf0 20 75 6c 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 ulPartLen, CK_B 28c00 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 74 YTE_PTR pEncrypt 28c10 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 edPart, CK_ULONG 28c20 5f 50 54 52 20 70 75 6c 45 6e 63 72 79 70 74 65 _PTR pulEncrypte 28c30 64 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 dPartLen) {..CAC 28c40 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 28c50 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 28c60 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 28c70 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 28c80 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 28c90 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 28ca0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 28cb0 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 28cc0 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 28cd0 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 28ce0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 28cf0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 28d00 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 28d10 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 28d20 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 28d30 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 28d40 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 28d50 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 28d60 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 28d70 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 TION(CK_RV, C_De 28d80 63 72 79 70 74 44 69 67 65 73 74 55 70 64 61 74 cryptDigestUpdat 28d90 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 e)(CK_SESSION_HA 28da0 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 28db0 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 K_BYTE_PTR pEncr 28dc0 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c yptedPart, CK_UL 28dd0 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64 50 ONG ulEncryptedP 28de0 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f artLen, CK_BYTE_ 28df0 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c PTR pPart, CK_UL 28e00 4f 4e 47 5f 50 54 52 20 70 75 6c 50 61 72 74 4c ONG_PTR pulPartL 28e10 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 en) {..CACKEY_DE 28e20 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 28e30 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 28e40 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 28e50 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 28e60 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 28e70 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 28e80 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 28e90 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 28ea0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 28eb0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 28ec0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 28ed0 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 28ee0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 28ef0 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 28f00 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 28f10 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 28f20 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 28f30 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 28f40 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 28f50 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 45 6e 63 72 K_RV, C_SignEncr 28f60 79 70 74 55 70 64 61 74 65 29 28 43 4b 5f 53 45 yptUpdate)(CK_SE 28f70 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 28f80 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 ssion, CK_BYTE_P 28f90 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f TR pPart, CK_ULO 28fa0 4e 47 20 75 6c 50 61 72 74 4c 65 6e 2c 20 43 4b NG ulPartLen, CK 28fb0 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 _BYTE_PTR pEncry 28fc0 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f ptedPart, CK_ULO 28fd0 4e 47 5f 50 54 52 20 70 75 6c 45 6e 63 72 79 70 NG_PTR pulEncryp 28fe0 74 65 64 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 tedPartLen) {..C 28ff0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 29000 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 29010 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 29020 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 29030 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 29040 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 29050 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 29060 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 29070 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 29080 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 29090 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 290a0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 290b0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 290c0 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 290d0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 290e0 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 290f0 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 29100 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 29110 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 29120 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 29130 44 65 63 72 79 70 74 56 65 72 69 66 79 55 70 64 DecryptVerifyUpd 29140 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f ate)(CK_SESSION_ 29150 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 29160 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e CK_BYTE_PTR pEn 29170 63 72 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f cryptedPart, CK_ 29180 55 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 ULONG ulEncrypte 29190 64 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 dPartLen, CK_BYT 291a0 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f E_PTR pPart, CK_ 291b0 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 50 61 72 ULONG_PTR pulPar 291c0 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f tLen) {..CACKEY_ 291d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 291e0 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 291f0 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 29200 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 29210 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 29220 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 29230 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 29240 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 29250 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 29260 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 29270 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 29280 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 rning CKR_FUNCTI 29290 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 292a0 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 (%i)", CKR_FUNC 292b0 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 292c0 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK 292d0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 292e0 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b UPPORTED);.}..CK 292f0 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 29300 28 43 4b 5f 52 56 2c 20 43 5f 47 65 6e 65 72 61 (CK_RV, C_Genera 29310 74 65 4b 65 79 29 28 43 4b 5f 53 45 53 53 49 4f teKey)(CK_SESSIO 29320 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 29330 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f n, CK_MECHANISM_ 29340 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 PTR pMechanism, 29350 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 CK_ATTRIBUTE_PTR 29360 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 pTemplate, CK_U 29370 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 2c 20 43 4b LONG ulCount, CK 29380 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 _OBJECT_HANDLE_P 29390 54 52 20 70 68 4b 65 79 29 20 7b 0a 09 43 41 43 TR phKey) {..CAC 293a0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 293b0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 293c0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 293d0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 293e0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 293f0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 29400 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 29410 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 29420 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 29430 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 29440 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 29450 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 29460 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 29470 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 29480 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 29490 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 294a0 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 294b0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 294c0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 294d0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 TION(CK_RV, C_Ge 294e0 6e 65 72 61 74 65 4b 65 79 50 61 69 72 29 28 43 nerateKeyPair)(C 294f0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 29500 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 hSession, CK_ME 29510 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 CHANISM_PTR pMec 29520 68 61 6e 69 73 6d 2c 20 43 4b 5f 41 54 54 52 49 hanism, CK_ATTRI 29530 42 55 54 45 5f 50 54 52 20 70 50 75 62 6c 69 63 BUTE_PTR pPublic 29540 4b 65 79 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f KeyTemplate, CK_ 29550 55 4c 4f 4e 47 20 75 6c 50 75 62 6c 69 63 4b 65 ULONG ulPublicKe 29560 79 41 74 74 72 69 62 75 74 65 43 6f 75 6e 74 2c yAttributeCount, 29570 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 CK_ATTRIBUTE_PT 29580 52 20 70 50 72 69 76 61 74 65 4b 65 79 54 65 6d R pPrivateKeyTem 29590 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 plate, CK_ULONG 295a0 75 6c 50 72 69 76 61 74 65 4b 65 79 41 74 74 72 ulPrivateKeyAttr 295b0 69 62 75 74 65 43 6f 75 6e 74 2c 20 43 4b 5f 4f ibuteCount, CK_O 295c0 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 BJECT_HANDLE_PTR 295d0 20 70 68 50 75 62 6c 69 63 4b 65 79 2c 20 43 4b phPublicKey, CK 295e0 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 _OBJECT_HANDLE_P 295f0 54 52 20 70 68 50 72 69 76 61 74 65 4b 65 79 29 TR phPrivateKey) 29600 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 29610 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 29620 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 29630 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 29640 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 29650 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 29660 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 29670 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 29680 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 29690 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 296a0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 296b0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 296c0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 296d0 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 296e0 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 296f0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 29700 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 29710 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 29720 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 29730 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 29740 56 2c 20 43 5f 57 72 61 70 4b 65 79 29 28 43 4b V, C_WrapKey)(CK 29750 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 29760 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 hSession, CK_MEC 29770 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 HANISM_PTR pMech 29780 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 anism, CK_OBJECT 29790 5f 48 41 4e 44 4c 45 20 68 57 72 61 70 70 69 6e _HANDLE hWrappin 297a0 67 4b 65 79 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f gKey, CK_OBJECT_ 297b0 48 41 4e 44 4c 45 20 68 4b 65 79 2c 20 43 4b 5f HANDLE hKey, CK_ 297c0 42 59 54 45 5f 50 54 52 20 70 57 72 61 70 70 65 BYTE_PTR pWrappe 297d0 64 4b 65 79 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 dKey, CK_ULONG_P 297e0 54 52 20 70 75 6c 57 72 61 70 70 65 64 4b 65 79 TR pulWrappedKey 297f0 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Len) {..CACKEY_D 29800 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 29810 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 29820 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 29830 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 29840 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 29850 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 29860 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 29870 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 29880 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 29890 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 298a0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 298b0 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 298c0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 298d0 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 298e0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 298f0 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 29900 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 29910 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 29920 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 29930 43 4b 5f 52 56 2c 20 43 5f 55 6e 77 72 61 70 4b CK_RV, C_UnwrapK 29940 65 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 ey)(CK_SESSION_H 29950 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 29960 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 CK_MECHANISM_PTR 29970 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f pMechanism, CK_ 29980 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 55 OBJECT_HANDLE hU 29990 6e 77 72 61 70 70 69 6e 67 4b 65 79 2c 20 43 4b nwrappingKey, CK 299a0 5f 42 59 54 45 5f 50 54 52 20 70 57 72 61 70 70 _BYTE_PTR pWrapp 299b0 65 64 4b 65 79 2c 20 43 4b 5f 55 4c 4f 4e 47 20 edKey, CK_ULONG 299c0 75 6c 57 72 61 70 70 65 64 4b 65 79 4c 65 6e 2c ulWrappedKeyLen, 299d0 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 CK_ATTRIBUTE_PT 299e0 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f R pTemplate, CK_ 299f0 55 4c 4f 4e 47 20 75 6c 41 74 74 72 69 62 75 74 ULONG ulAttribut 29a00 65 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 eCount, CK_OBJEC 29a10 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4b T_HANDLE_PTR phK 29a20 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 ey) {..CACKEY_DE 29a30 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 29a40 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 29a50 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 29a60 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 29a70 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 29a80 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 29a90 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 29aa0 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 29ab0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 29ac0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 29ad0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 29ae0 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 29af0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 29b00 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 29b10 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 29b20 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 29b30 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 29b40 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 29b50 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 29b60 4b 5f 52 56 2c 20 43 5f 44 65 72 69 76 65 4b 65 K_RV, C_DeriveKe 29b70 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 y)(CK_SESSION_HA 29b80 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 29b90 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 K_MECHANISM_PTR 29ba0 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f pMechanism, CK_O 29bb0 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 42 61 BJECT_HANDLE hBa 29bc0 73 65 4b 65 79 2c 20 43 4b 5f 41 54 54 52 49 42 seKey, CK_ATTRIB 29bd0 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 UTE_PTR pTemplat 29be0 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 41 74 e, CK_ULONG ulAt 29bf0 74 72 69 62 75 74 65 43 6f 75 6e 74 2c 20 43 4b tributeCount, CK 29c00 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 _OBJECT_HANDLE_P 29c10 54 52 20 70 68 4b 65 79 29 20 7b 0a 09 43 41 43 TR phKey) {..CAC 29c20 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 29c30 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 29c40 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 29c50 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 29c60 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 29c70 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 29c80 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 29c90 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 29ca0 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 29cb0 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 29cc0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 29cd0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 29ce0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 29cf0 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 29d00 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 29d10 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 29d20 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 29d30 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 29d40 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 29d50 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 TION(CK_RV, C_Se 29d60 65 64 52 61 6e 64 6f 6d 29 28 43 4b 5f 53 45 53 edRandom)(CK_SES 29d70 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 29d80 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 sion, CK_BYTE_PT 29d90 52 20 70 53 65 65 64 2c 20 43 4b 5f 55 4c 4f 4e R pSeed, CK_ULON 29da0 47 20 75 6c 53 65 65 64 4c 65 6e 29 20 7b 0a 09 G ulSeedLen) {.. 29db0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 29dc0 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 29dd0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 29de0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 29df0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 29e00 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 29e10 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 29e20 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 29e30 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 29e40 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 29e50 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 29e60 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 29e70 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 29e80 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C 29e90 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 29ea0 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re 29eb0 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO 29ec0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 29ed0 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 29ee0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 29ef0 5f 47 65 6e 65 72 61 74 65 52 61 6e 64 6f 6d 29 _GenerateRandom) 29f00 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 29f10 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 29f20 42 59 54 45 5f 50 54 52 20 70 52 61 6e 64 6f 6d BYTE_PTR pRandom 29f30 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 Data, CK_ULONG u 29f40 6c 52 61 6e 64 6f 6d 4c 65 6e 29 20 7b 0a 09 43 lRandomLen) {..C 29f50 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 29f60 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 29f70 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 29f80 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 29f90 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 29fa0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 29fb0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 29fc0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 29fd0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 29fe0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 29ff0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 2a000 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 2a010 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 2a020 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 2a030 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 2a040 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 2a050 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 2a060 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 2a070 0a 7d 0a 0a 2f 2a 20 44 65 70 72 65 63 61 74 65 .}../* Deprecate 2a080 64 20 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 43 4b d Function */.CK 2a090 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 2a0a0 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 46 75 6e (CK_RV, C_GetFun 2a0b0 63 74 69 6f 6e 53 74 61 74 75 73 29 28 43 4b 5f ctionStatus)(CK_ 2a0c0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 2a0d0 53 65 73 73 69 6f 6e 29 20 7b 0a 09 43 41 43 4b Session) {..CACK 2a0e0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 2a0f0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 43 41 "Called.");...CA 2a100 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 2a110 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 2a120 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 _FUNCTION_NOT_PA 2a130 52 41 4c 4c 45 4c 20 28 25 69 29 22 2c 20 43 4b RALLEL (%i)", CK 2a140 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 R_FUNCTION_NOT_P 2a150 41 52 41 4c 4c 45 4c 29 3b 0a 0a 09 72 65 74 75 ARALLEL);...retu 2a160 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 2a170 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a NOT_PARALLEL);.. 2a180 09 68 53 65 73 73 69 6f 6e 20 3d 20 68 53 65 73 .hSession = hSes 2a190 73 69 6f 6e 3b 20 2f 2a 20 53 75 70 72 65 73 73 sion; /* Supress 2a1a0 20 75 6e 75 73 65 64 20 76 61 72 69 61 62 6c 65 unused variable 2a1b0 20 77 61 72 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f warning */.}../ 2a1c0 2a 20 44 65 70 72 65 63 61 74 65 64 20 46 75 6e * Deprecated Fun 2a1d0 63 74 69 6f 6e 20 2a 2f 0a 43 4b 5f 44 45 46 49 ction */.CK_DEFI 2a1e0 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 2a1f0 56 2c 20 43 5f 43 61 6e 63 65 6c 46 75 6e 63 74 V, C_CancelFunct 2a200 69 6f 6e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f ion)(CK_SESSION_ 2a210 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 HANDLE hSession) 2a220 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 2a230 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 2a240 22 29 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ");...CACKEY_DEB 2a250 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 2a260 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 2a270 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 20 28 N_NOT_PARALLEL ( 2a280 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 2a290 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 ON_NOT_PARALLEL) 2a2a0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 2a2b0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 UNCTION_NOT_PARA 2a2c0 4c 4c 45 4c 29 3b 0a 0a 09 68 53 65 73 73 69 6f LLEL);...hSessio 2a2d0 6e 20 3d 20 68 53 65 73 73 69 6f 6e 3b 20 2f 2a n = hSession; /* 2a2e0 20 53 75 70 72 65 73 73 20 75 6e 75 73 65 64 20 Supress unused 2a2f0 76 61 72 69 61 62 6c 65 20 77 61 72 6e 69 6e 67 variable warning 2a300 20 2a 2f 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 */.}..CK_DEFINE 2a310 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 2a320 20 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 4c 69 C_GetFunctionLi 2a330 73 74 29 28 43 4b 5f 46 55 4e 43 54 49 4f 4e 5f st)(CK_FUNCTION_ 2a340 4c 49 53 54 5f 50 54 52 5f 50 54 52 20 70 70 46 LIST_PTR_PTR ppF 2a350 75 6e 63 74 69 6f 6e 4c 69 73 74 29 20 7b 0a 09 unctionList) {.. 2a360 43 4b 5f 46 55 4e 43 54 49 4f 4e 5f 4c 49 53 54 CK_FUNCTION_LIST 2a370 5f 50 54 52 20 70 46 75 6e 63 74 69 6f 6e 4c 69 _PTR pFunctionLi 2a380 73 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 st;...CACKEY_DEB 2a390 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 2a3a0 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 70 46 75 d.");...if (ppFu 2a3b0 6e 63 74 69 6f 6e 4c 69 73 74 20 3d 3d 20 4e 55 nctionList == NU 2a3c0 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 2a3d0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 2a3e0 6f 72 2e 20 70 70 46 75 6e 63 74 69 6f 6e 4c 69 or. ppFunctionLi 2a3f0 73 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a st is NULL.");.. 2a400 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG 2a410 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a UMENTS_BAD);..}. 2a420 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 20 ..pFunctionList 2a430 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 = malloc(sizeof( 2a440 2a 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 29 29 *pFunctionList)) 2a450 3b 0a 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 ;...pFunctionLis 2a460 74 2d 3e 76 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 t->version.major 2a470 20 3d 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 = ((CACKEY_CRYP 2a480 54 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 TOKI_VERSION_COD 2a490 45 29 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 E) >> 16) & 0xff 2a4a0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2a4b0 2d 3e 76 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 ->version.minor 2a4c0 3d 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54 = ((CACKEY_CRYPT 2a4d0 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 OKI_VERSION_CODE 2a4e0 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a ) >> 8) & 0xff;. 2a4f0 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 2a500 3e 43 5f 49 6e 69 74 69 61 6c 69 7a 65 20 3d 20 >C_Initialize = 2a510 43 5f 49 6e 69 74 69 61 6c 69 7a 65 3b 0a 09 70 C_Initialize;..p 2a520 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 2a530 46 69 6e 61 6c 69 7a 65 20 3d 20 43 5f 46 69 6e Finalize = C_Fin 2a540 61 6c 69 7a 65 3b 0a 09 70 46 75 6e 63 74 69 6f alize;..pFunctio 2a550 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 49 6e 66 6f nList->C_GetInfo 2a560 20 3d 20 43 5f 47 65 74 49 6e 66 6f 3b 0a 09 70 = C_GetInfo;..p 2a570 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 2a580 47 65 74 53 6c 6f 74 4c 69 73 74 20 3d 20 43 5f GetSlotList = C_ 2a590 47 65 74 53 6c 6f 74 4c 69 73 74 3b 0a 09 70 46 GetSlotList;..pF 2a5a0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 unctionList->C_G 2a5b0 65 74 53 6c 6f 74 49 6e 66 6f 20 3d 20 43 5f 47 etSlotInfo = C_G 2a5c0 65 74 53 6c 6f 74 49 6e 66 6f 3b 0a 09 70 46 75 etSlotInfo;..pFu 2a5d0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge 2a5e0 74 54 6f 6b 65 6e 49 6e 66 6f 20 3d 20 43 5f 47 tTokenInfo = C_G 2a5f0 65 74 54 6f 6b 65 6e 49 6e 66 6f 3b 0a 09 70 46 etTokenInfo;..pF 2a600 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 57 unctionList->C_W 2a610 61 69 74 46 6f 72 53 6c 6f 74 45 76 65 6e 74 20 aitForSlotEvent 2a620 3d 20 43 5f 57 61 69 74 46 6f 72 53 6c 6f 74 45 = C_WaitForSlotE 2a630 76 65 6e 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e vent;..pFunction 2a640 4c 69 73 74 2d 3e 43 5f 47 65 74 4d 65 63 68 61 List->C_GetMecha 2a650 6e 69 73 6d 4c 69 73 74 20 3d 20 43 5f 47 65 74 nismList = C_Get 2a660 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 3b 0a 09 MechanismList;.. 2a670 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2a680 5f 47 65 74 4d 65 63 68 61 6e 69 73 6d 49 6e 66 _GetMechanismInf 2a690 6f 20 3d 20 43 5f 47 65 74 4d 65 63 68 61 6e 69 o = C_GetMechani 2a6a0 73 6d 49 6e 66 6f 3b 0a 09 70 46 75 6e 63 74 69 smInfo;..pFuncti 2a6b0 6f 6e 4c 69 73 74 2d 3e 43 5f 49 6e 69 74 54 6f onList->C_InitTo 2a6c0 6b 65 6e 20 3d 20 43 5f 49 6e 69 74 54 6f 6b 65 ken = C_InitToke 2a6d0 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 n;..pFunctionLis 2a6e0 74 2d 3e 43 5f 49 6e 69 74 50 49 4e 20 3d 20 43 t->C_InitPIN = C 2a6f0 5f 49 6e 69 74 50 49 4e 3b 0a 09 70 46 75 6e 63 _InitPIN;..pFunc 2a700 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 50 tionList->C_SetP 2a710 49 4e 20 3d 20 43 5f 53 65 74 50 49 4e 3b 0a 09 IN = C_SetPIN;.. 2a720 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2a730 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 20 3d 20 43 _OpenSession = C 2a740 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 3b 0a 09 70 _OpenSession;..p 2a750 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 2a760 43 6c 6f 73 65 53 65 73 73 69 6f 6e 20 3d 20 43 CloseSession = C 2a770 5f 43 6c 6f 73 65 53 65 73 73 69 6f 6e 3b 0a 09 _CloseSession;.. 2a780 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2a790 5f 43 6c 6f 73 65 41 6c 6c 53 65 73 73 69 6f 6e _CloseAllSession 2a7a0 73 20 3d 20 43 5f 43 6c 6f 73 65 41 6c 6c 53 65 s = C_CloseAllSe 2a7b0 73 73 69 6f 6e 73 3b 0a 09 70 46 75 6e 63 74 69 ssions;..pFuncti 2a7c0 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 53 65 73 onList->C_GetSes 2a7d0 73 69 6f 6e 49 6e 66 6f 20 3d 20 43 5f 47 65 74 sionInfo = C_Get 2a7e0 53 65 73 73 69 6f 6e 49 6e 66 6f 3b 0a 09 70 46 SessionInfo;..pF 2a7f0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 unctionList->C_G 2a800 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 etOperationState 2a810 20 3d 20 43 5f 47 65 74 4f 70 65 72 61 74 69 6f = C_GetOperatio 2a820 6e 53 74 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 nState;..pFuncti 2a830 6f 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 4f 70 65 onList->C_SetOpe 2a840 72 61 74 69 6f 6e 53 74 61 74 65 20 3d 20 43 5f rationState = C_ 2a850 53 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 SetOperationStat 2a860 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 e;..pFunctionLis 2a870 74 2d 3e 43 5f 4c 6f 67 69 6e 20 3d 20 43 5f 4c t->C_Login = C_L 2a880 6f 67 69 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e ogin;..pFunction 2a890 4c 69 73 74 2d 3e 43 5f 4c 6f 67 6f 75 74 20 3d List->C_Logout = 2a8a0 20 43 5f 4c 6f 67 6f 75 74 3b 0a 09 70 46 75 6e C_Logout;..pFun 2a8b0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 72 65 ctionList->C_Cre 2a8c0 61 74 65 4f 62 6a 65 63 74 20 3d 20 43 5f 43 72 ateObject = C_Cr 2a8d0 65 61 74 65 4f 62 6a 65 63 74 3b 0a 09 70 46 75 eateObject;..pFu 2a8e0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 6f nctionList->C_Co 2a8f0 70 79 4f 62 6a 65 63 74 20 3d 20 43 5f 43 6f 70 pyObject = C_Cop 2a900 79 4f 62 6a 65 63 74 3b 0a 09 70 46 75 6e 63 74 yObject;..pFunct 2a910 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 73 74 72 ionList->C_Destr 2a920 6f 79 4f 62 6a 65 63 74 20 3d 20 43 5f 44 65 73 oyObject = C_Des 2a930 74 72 6f 79 4f 62 6a 65 63 74 3b 0a 09 70 46 75 troyObject;..pFu 2a940 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge 2a950 74 4f 62 6a 65 63 74 53 69 7a 65 20 3d 20 43 5f tObjectSize = C_ 2a960 47 65 74 4f 62 6a 65 63 74 53 69 7a 65 3b 0a 09 GetObjectSize;.. 2a970 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2a980 5f 47 65 74 41 74 74 72 69 62 75 74 65 56 61 6c _GetAttributeVal 2a990 75 65 20 3d 20 43 5f 47 65 74 41 74 74 72 69 62 ue = C_GetAttrib 2a9a0 75 74 65 56 61 6c 75 65 3b 0a 09 70 46 75 6e 63 uteValue;..pFunc 2a9b0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 41 tionList->C_SetA 2a9c0 74 74 72 69 62 75 74 65 56 61 6c 75 65 20 3d 20 ttributeValue = 2a9d0 43 5f 53 65 74 41 74 74 72 69 62 75 74 65 56 61 C_SetAttributeVa 2a9e0 6c 75 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c lue;..pFunctionL 2a9f0 69 73 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 ist->C_FindObjec 2aa00 74 73 49 6e 69 74 20 3d 20 43 5f 46 69 6e 64 4f tsInit = C_FindO 2aa10 62 6a 65 63 74 73 49 6e 69 74 3b 0a 09 70 46 75 bjectsInit;..pFu 2aa20 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 nctionList->C_Fi 2aa30 6e 64 4f 62 6a 65 63 74 73 20 3d 20 43 5f 46 69 ndObjects = C_Fi 2aa40 6e 64 4f 62 6a 65 63 74 73 3b 0a 09 70 46 75 6e ndObjects;..pFun 2aa50 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e ctionList->C_Fin 2aa60 64 4f 62 6a 65 63 74 73 46 69 6e 61 6c 20 3d 20 dObjectsFinal = 2aa70 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 69 6e C_FindObjectsFin 2aa80 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 al;..pFunctionLi 2aa90 73 74 2d 3e 43 5f 45 6e 63 72 79 70 74 49 6e 69 st->C_EncryptIni 2aaa0 74 20 3d 20 43 5f 45 6e 63 72 79 70 74 49 6e 69 t = C_EncryptIni 2aab0 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t;..pFunctionLis 2aac0 74 2d 3e 43 5f 45 6e 63 72 79 70 74 20 3d 20 43 t->C_Encrypt = C 2aad0 5f 45 6e 63 72 79 70 74 3b 0a 09 70 46 75 6e 63 _Encrypt;..pFunc 2aae0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 72 tionList->C_Encr 2aaf0 79 70 74 55 70 64 61 74 65 20 3d 20 43 5f 45 6e yptUpdate = C_En 2ab00 63 72 79 70 74 55 70 64 61 74 65 3b 0a 09 70 46 cryptUpdate;..pF 2ab10 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 unctionList->C_E 2ab20 6e 63 72 79 70 74 46 69 6e 61 6c 20 3d 20 43 5f ncryptFinal = C_ 2ab30 45 6e 63 72 79 70 74 46 69 6e 61 6c 3b 0a 09 70 EncryptFinal;..p 2ab40 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 2ab50 44 65 63 72 79 70 74 49 6e 69 74 20 3d 20 43 5f DecryptInit = C_ 2ab60 44 65 63 72 79 70 74 49 6e 69 74 3b 0a 09 70 46 DecryptInit;..pF 2ab70 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 unctionList->C_D 2ab80 65 63 72 79 70 74 20 3d 20 43 5f 44 65 63 72 79 ecrypt = C_Decry 2ab90 70 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 pt;..pFunctionLi 2aba0 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 55 70 64 st->C_DecryptUpd 2abb0 61 74 65 20 3d 20 43 5f 44 65 63 72 79 70 74 55 ate = C_DecryptU 2abc0 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f pdate;..pFunctio 2abd0 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 nList->C_Decrypt 2abe0 46 69 6e 61 6c 20 3d 20 43 5f 44 65 63 72 79 70 Final = C_Decryp 2abf0 74 46 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 tFinal;..pFuncti 2ac00 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 onList->C_Digest 2ac10 49 6e 69 74 20 3d 20 43 5f 44 69 67 65 73 74 49 Init = C_DigestI 2ac20 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c nit;..pFunctionL 2ac30 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 20 3d 20 ist->C_Digest = 2ac40 43 5f 44 69 67 65 73 74 3b 0a 09 70 46 75 6e 63 C_Digest;..pFunc 2ac50 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 tionList->C_Dige 2ac60 73 74 55 70 64 61 74 65 20 3d 20 43 5f 44 69 67 stUpdate = C_Dig 2ac70 65 73 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e estUpdate;..pFun 2ac80 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 ctionList->C_Dig 2ac90 65 73 74 4b 65 79 20 3d 20 43 5f 44 69 67 65 73 estKey = C_Diges 2aca0 74 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e tKey;..pFunction 2acb0 4c 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 46 69 List->C_DigestFi 2acc0 6e 61 6c 20 3d 20 43 5f 44 69 67 65 73 74 46 69 nal = C_DigestFi 2acd0 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c nal;..pFunctionL 2ace0 69 73 74 2d 3e 43 5f 53 69 67 6e 49 6e 69 74 20 ist->C_SignInit 2acf0 3d 20 43 5f 53 69 67 6e 49 6e 69 74 3b 0a 09 70 = C_SignInit;..p 2ad00 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 2ad10 53 69 67 6e 20 3d 20 43 5f 53 69 67 6e 3b 0a 09 Sign = C_Sign;.. 2ad20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2ad30 5f 53 69 67 6e 55 70 64 61 74 65 20 3d 20 43 5f _SignUpdate = C_ 2ad40 53 69 67 6e 55 70 64 61 74 65 3b 0a 09 70 46 75 SignUpdate;..pFu 2ad50 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 nctionList->C_Si 2ad60 67 6e 46 69 6e 61 6c 20 3d 20 43 5f 53 69 67 6e gnFinal = C_Sign 2ad70 46 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f Final;..pFunctio 2ad80 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 52 65 63 nList->C_SignRec 2ad90 6f 76 65 72 49 6e 69 74 20 3d 20 43 5f 53 69 67 overInit = C_Sig 2ada0 6e 52 65 63 6f 76 65 72 49 6e 69 74 3b 0a 09 70 nRecoverInit;..p 2adb0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 2adc0 53 69 67 6e 52 65 63 6f 76 65 72 20 3d 20 43 5f SignRecover = C_ 2add0 53 69 67 6e 52 65 63 6f 76 65 72 3b 0a 09 70 46 SignRecover;..pF 2ade0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 unctionList->C_V 2adf0 65 72 69 66 79 49 6e 69 74 20 3d 20 43 5f 56 65 erifyInit = C_Ve 2ae00 72 69 66 79 49 6e 69 74 3b 0a 09 70 46 75 6e 63 rifyInit;..pFunc 2ae10 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 tionList->C_Veri 2ae20 66 79 20 3d 20 43 5f 56 65 72 69 66 79 3b 0a 09 fy = C_Verify;.. 2ae30 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2ae40 5f 56 65 72 69 66 79 55 70 64 61 74 65 20 3d 20 _VerifyUpdate = 2ae50 43 5f 56 65 72 69 66 79 55 70 64 61 74 65 3b 0a C_VerifyUpdate;. 2ae60 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 2ae70 43 5f 56 65 72 69 66 79 46 69 6e 61 6c 20 3d 20 C_VerifyFinal = 2ae80 43 5f 56 65 72 69 66 79 46 69 6e 61 6c 3b 0a 09 C_VerifyFinal;.. 2ae90 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2aea0 5f 56 65 72 69 66 79 52 65 63 6f 76 65 72 49 6e _VerifyRecoverIn 2aeb0 69 74 20 3d 20 43 5f 56 65 72 69 66 79 52 65 63 it = C_VerifyRec 2aec0 6f 76 65 72 49 6e 69 74 3b 0a 09 70 46 75 6e 63 overInit;..pFunc 2aed0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 tionList->C_Veri 2aee0 66 79 52 65 63 6f 76 65 72 20 3d 20 43 5f 56 65 fyRecover = C_Ve 2aef0 72 69 66 79 52 65 63 6f 76 65 72 3b 0a 09 70 46 rifyRecover;..pF 2af00 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 unctionList->C_D 2af10 69 67 65 73 74 45 6e 63 72 79 70 74 55 70 64 61 igestEncryptUpda 2af20 74 65 20 3d 20 43 5f 44 69 67 65 73 74 45 6e 63 te = C_DigestEnc 2af30 72 79 70 74 55 70 64 61 74 65 3b 0a 09 70 46 75 ryptUpdate;..pFu 2af40 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 nctionList->C_De 2af50 63 72 79 70 74 44 69 67 65 73 74 55 70 64 61 74 cryptDigestUpdat 2af60 65 20 3d 20 43 5f 44 65 63 72 79 70 74 44 69 67 e = C_DecryptDig 2af70 65 73 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e estUpdate;..pFun 2af80 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 ctionList->C_Sig 2af90 6e 45 6e 63 72 79 70 74 55 70 64 61 74 65 20 3d nEncryptUpdate = 2afa0 20 43 5f 53 69 67 6e 45 6e 63 72 79 70 74 55 70 C_SignEncryptUp 2afb0 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e date;..pFunction 2afc0 4c 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 56 List->C_DecryptV 2afd0 65 72 69 66 79 55 70 64 61 74 65 20 3d 20 43 5f erifyUpdate = C_ 2afe0 44 65 63 72 79 70 74 56 65 72 69 66 79 55 70 64 DecryptVerifyUpd 2aff0 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ate;..pFunctionL 2b000 69 73 74 2d 3e 43 5f 47 65 6e 65 72 61 74 65 4b ist->C_GenerateK 2b010 65 79 20 3d 20 43 5f 47 65 6e 65 72 61 74 65 4b ey = C_GenerateK 2b020 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 ey;..pFunctionLi 2b030 73 74 2d 3e 43 5f 47 65 6e 65 72 61 74 65 4b 65 st->C_GenerateKe 2b040 79 50 61 69 72 20 3d 20 43 5f 47 65 6e 65 72 61 yPair = C_Genera 2b050 74 65 4b 65 79 50 61 69 72 3b 0a 09 70 46 75 6e teKeyPair;..pFun 2b060 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 57 72 61 ctionList->C_Wra 2b070 70 4b 65 79 20 3d 20 43 5f 57 72 61 70 4b 65 79 pKey = C_WrapKey 2b080 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2b090 2d 3e 43 5f 55 6e 77 72 61 70 4b 65 79 20 3d 20 ->C_UnwrapKey = 2b0a0 43 5f 55 6e 77 72 61 70 4b 65 79 3b 0a 09 70 46 C_UnwrapKey;..pF 2b0b0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 unctionList->C_D 2b0c0 65 72 69 76 65 4b 65 79 20 3d 20 43 5f 44 65 72 eriveKey = C_Der 2b0d0 69 76 65 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69 iveKey;..pFuncti 2b0e0 6f 6e 4c 69 73 74 2d 3e 43 5f 53 65 65 64 52 61 onList->C_SeedRa 2b0f0 6e 64 6f 6d 20 3d 20 43 5f 53 65 65 64 52 61 6e ndom = C_SeedRan 2b100 64 6f 6d 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c dom;..pFunctionL 2b110 69 73 74 2d 3e 43 5f 47 65 6e 65 72 61 74 65 52 ist->C_GenerateR 2b120 61 6e 64 6f 6d 20 3d 20 43 5f 47 65 6e 65 72 61 andom = C_Genera 2b130 74 65 52 61 6e 64 6f 6d 3b 0a 09 70 46 75 6e 63 teRandom;..pFunc 2b140 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 46 tionList->C_GetF 2b150 75 6e 63 74 69 6f 6e 53 74 61 74 75 73 20 3d 20 unctionStatus = 2b160 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 53 74 61 C_GetFunctionSta 2b170 74 75 73 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c tus;..pFunctionL 2b180 69 73 74 2d 3e 43 5f 43 61 6e 63 65 6c 46 75 6e ist->C_CancelFun 2b190 63 74 69 6f 6e 20 3d 20 43 5f 43 61 6e 63 65 6c ction = C_Cancel 2b1a0 46 75 6e 63 74 69 6f 6e 3b 0a 09 70 46 75 6e 63 Function;..pFunc 2b1b0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 46 tionList->C_GetF 2b1c0 75 6e 63 74 69 6f 6e 4c 69 73 74 20 3d 20 43 5f unctionList = C_ 2b1d0 47 65 74 46 75 6e 63 74 69 6f 6e 4c 69 73 74 3b GetFunctionList; 2b1e0 0a 0a 09 2a 70 70 46 75 6e 63 74 69 6f 6e 4c 69 ...*ppFunctionLi 2b1f0 73 74 20 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 st = pFunctionLi 2b200 73 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 st;...CACKEY_DEB 2b210 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 2b220 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 2b230 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 2b240 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 2b250 0a .