Artifact 5e1ae9e427f5c7f556b385fefa94cff4cfb817af:
- File
cackey.c
— part of check-in
[5ba02cbd65]
at
2010-05-23 05:36:13
on branch trunk
— Updated to strip library more on Linux, and work on Solaris
Updated to try to support more protocols (user: rkeene, size: 161536) [annotate] [blame] [check-ins using]
0000: 23 69 66 64 65 66 20 48 41 56 45 5f 43 4f 4e 46 #ifdef HAVE_CONF 0010: 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 IG_H.#include "c 0020: 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a onfig.h".#endif. 0030: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 50 43 53 .#ifdef HAVE_PCS 0040: 43 4c 49 54 45 5f 48 0a 23 20 20 69 6e 63 6c 75 CLITE_H.# inclu 0050: 64 65 20 3c 70 63 73 63 6c 69 74 65 2e 68 3e 0a de <pcsclite.h>. 0060: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 #endif.#ifdef HA 0070: 56 45 5f 57 49 4e 53 43 41 52 44 5f 48 0a 23 20 VE_WINSCARD_H.# 0080: 20 69 6e 63 6c 75 64 65 20 3c 77 69 6e 73 63 61 include <winsca 0090: 72 64 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 rd.h>.#endif.#if 00a0: 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54 5f def HAVE_STDINT_ 00b0: 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c 73 74 H.# include <st 00c0: 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 dint.h>.#endif.# 00d0: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 ifdef HAVE_INTTY 00e0: 50 45 53 5f 48 0a 23 20 20 69 6e 63 6c 75 64 65 PES_H.# include 00f0: 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 <inttypes.h>.#e 0100: 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 ndif.#ifdef HAVE 0110: 5f 53 54 44 4c 49 42 5f 48 0a 23 20 20 69 6e 63 _STDLIB_H.# inc 0120: 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a lude <stdlib.h>. 0130: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 #endif.#ifdef HA 0140: 56 45 5f 55 4e 49 53 54 44 5f 48 0a 23 20 20 69 VE_UNISTD_H.# i 0150: 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 nclude <unistd.h 0160: 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 >.#endif.#ifdef 0170: 48 41 56 45 5f 53 54 52 49 4e 47 5f 48 0a 23 20 HAVE_STRING_H.# 0180: 20 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 include <string 0190: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 .h>.#endif.#ifde 01a0: 66 20 48 41 56 45 5f 50 54 48 52 45 41 44 5f 48 f HAVE_PTHREAD_H 01b0: 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c 70 74 68 .# include <pth 01c0: 72 65 61 64 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 read.h>.#endif.# 01d0: 69 66 64 65 66 20 48 41 56 45 5f 4c 49 4d 49 54 ifdef HAVE_LIMIT 01e0: 53 5f 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c S_H.# include < 01f0: 6c 69 6d 69 74 73 2e 68 3e 0a 23 65 6e 64 69 66 limits.h>.#endif 0200: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 54 44 .#ifdef HAVE_STD 0210: 49 4f 5f 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 IO_H.# include 0220: 3c 73 74 64 69 6f 2e 68 3e 0a 23 65 6e 64 69 66 <stdio.h>.#endif 0230: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 5a 4c 49 .#ifdef HAVE_ZLI 0240: 42 5f 48 0a 23 20 20 69 66 64 65 66 20 48 41 56 B_H.# ifdef HAV 0250: 45 5f 4c 49 42 5a 0a 23 20 20 20 20 69 6e 63 6c E_LIBZ.# incl 0260: 75 64 65 20 3c 7a 6c 69 62 2e 68 3e 0a 23 20 20 ude <zlib.h>.# 0270: 65 6e 64 69 66 0a 23 65 6c 73 65 0a 23 20 20 69 endif.#else.# i 0280: 66 64 65 66 20 48 41 56 45 5f 4c 49 42 5a 0a 23 fdef HAVE_LIBZ.# 0290: 20 20 20 20 75 6e 64 65 66 20 48 41 56 45 5f 4c undef HAVE_L 02a0: 49 42 5a 0a 23 20 20 65 6e 64 69 66 0a 23 65 6e IBZ.# endif.#en 02b0: 64 69 66 0a 0a 23 64 65 66 69 6e 65 20 43 4b 5f dif..#define CK_ 02c0: 50 54 52 20 2a 0a 23 64 65 66 69 6e 65 20 43 4b PTR *.#define CK 02d0: 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 02e0: 28 72 65 74 75 72 6e 54 79 70 65 2c 20 6e 61 6d (returnType, nam 02f0: 65 29 20 72 65 74 75 72 6e 54 79 70 65 20 6e 61 e) returnType na 0300: 6d 65 0a 23 64 65 66 69 6e 65 20 43 4b 5f 44 45 me.#define CK_DE 0310: 43 4c 41 52 45 5f 46 55 4e 43 54 49 4f 4e 28 72 CLARE_FUNCTION(r 0320: 65 74 75 72 6e 54 79 70 65 2c 20 6e 61 6d 65 29 eturnType, name) 0330: 20 72 65 74 75 72 6e 54 79 70 65 20 6e 61 6d 65 returnType name 0340: 0a 23 64 65 66 69 6e 65 20 43 4b 5f 44 45 43 4c .#define CK_DECL 0350: 41 52 45 5f 46 55 4e 43 54 49 4f 4e 5f 50 4f 49 ARE_FUNCTION_POI 0360: 4e 54 45 52 28 72 65 74 75 72 6e 54 79 70 65 2c NTER(returnType, 0370: 20 6e 61 6d 65 29 20 72 65 74 75 72 6e 54 79 70 name) returnTyp 0380: 65 20 28 2a 20 6e 61 6d 65 29 0a 23 64 65 66 69 e (* name).#defi 0390: 6e 65 20 43 4b 5f 43 41 4c 4c 42 41 43 4b 5f 46 ne CK_CALLBACK_F 03a0: 55 4e 43 54 49 4f 4e 28 72 65 74 75 72 6e 54 79 UNCTION(returnTy 03b0: 70 65 2c 20 6e 61 6d 65 29 20 72 65 74 75 72 6e pe, name) return 03c0: 54 79 70 65 20 28 2a 20 6e 61 6d 65 29 0a 23 69 Type (* name).#i 03d0: 66 6e 64 65 66 20 4e 55 4c 4c 5f 50 54 52 0a 23 fndef NULL_PTR.# 03e0: 20 20 64 65 66 69 6e 65 20 4e 55 4c 4c 5f 50 54 define NULL_PT 03f0: 52 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 R 0.#endif..#inc 0400: 6c 75 64 65 20 22 70 6b 63 73 31 31 2e 68 22 0a lude "pkcs11.h". 0410: 23 69 6e 63 6c 75 64 65 20 22 61 73 6e 31 2d 78 #include "asn1-x 0420: 35 30 39 2e 68 22 0a 0a 23 69 66 6e 64 65 66 20 509.h"..#ifndef 0430: 43 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b 49 5f CACKEY_CRYPTOKI_ 0440: 56 45 52 53 49 4f 4e 5f 43 4f 44 45 0a 23 20 20 VERSION_CODE.# 0450: 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 43 52 define CACKEY_CR 0460: 59 50 54 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 YPTOKI_VERSION_C 0470: 4f 44 45 20 30 78 30 32 31 65 30 30 0a 23 65 6e ODE 0x021e00.#en 0480: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 43 4b 41 dif..#ifndef CKA 0490: 5f 54 52 55 53 54 5f 53 45 52 56 45 52 5f 41 55 _TRUST_SERVER_AU 04a0: 54 48 0a 23 20 20 64 65 66 69 6e 65 20 43 4b 41 TH.# define CKA 04b0: 5f 54 52 55 53 54 5f 53 45 52 56 45 52 5f 41 55 _TRUST_SERVER_AU 04c0: 54 48 20 30 78 63 65 35 33 36 33 35 38 0a 23 65 TH 0xce536358.#e 04d0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 43 4b 41 ndif.#ifndef CKA 04e0: 5f 54 52 55 53 54 5f 43 4c 49 45 4e 54 5f 41 55 _TRUST_CLIENT_AU 04f0: 54 48 0a 23 20 20 64 65 66 69 6e 65 20 43 4b 41 TH.# define CKA 0500: 5f 54 52 55 53 54 5f 43 4c 49 45 4e 54 5f 41 55 _TRUST_CLIENT_AU 0510: 54 48 20 30 78 63 65 35 33 36 33 35 39 0a 23 65 TH 0xce536359.#e 0520: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 43 4b 41 ndif.#ifndef CKA 0530: 5f 54 52 55 53 54 5f 43 4f 44 45 5f 53 49 47 4e _TRUST_CODE_SIGN 0540: 49 4e 47 0a 23 20 20 64 65 66 69 6e 65 20 43 4b ING.# define CK 0550: 41 5f 54 52 55 53 54 5f 43 4f 44 45 5f 53 49 47 A_TRUST_CODE_SIG 0560: 4e 49 4e 47 20 30 78 63 65 35 33 36 33 35 61 0a NING 0xce53635a. 0570: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 43 #endif.#ifndef C 0580: 4b 41 5f 54 52 55 53 54 5f 45 4d 41 49 4c 5f 50 KA_TRUST_EMAIL_P 0590: 52 4f 54 45 43 54 49 4f 4e 0a 23 20 20 64 65 66 ROTECTION.# def 05a0: 69 6e 65 20 43 4b 41 5f 54 52 55 53 54 5f 45 4d ine CKA_TRUST_EM 05b0: 41 49 4c 5f 50 52 4f 54 45 43 54 49 4f 4e 20 30 AIL_PROTECTION 0 05c0: 78 63 65 35 33 36 33 35 62 0a 23 65 6e 64 69 66 xce53635b.#endif 05d0: 0a 0a 2f 2a 20 47 53 43 2d 49 53 20 76 32 2e 31 ../* GSC-IS v2.1 05e0: 20 44 65 66 69 6e 69 74 69 6f 6e 73 20 2a 2f 0a Definitions */. 05f0: 2f 2a 2a 20 43 6c 61 73 73 65 73 20 2a 2a 2f 0a /** Classes **/. 0600: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 43 4c #define GSCIS_CL 0610: 41 53 53 5f 49 53 4f 37 38 31 36 20 20 20 20 20 ASS_ISO7816 0620: 20 20 20 20 20 20 30 78 30 30 0a 23 64 65 66 69 0x00.#defi 0630: 6e 65 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 47 ne GSCIS_CLASS_G 0640: 4c 4f 42 41 4c 5f 50 4c 41 54 46 4f 52 4d 20 20 LOBAL_PLATFORM 0650: 20 30 78 38 30 0a 0a 2f 2a 2a 20 49 6e 73 74 72 0x80../** Instr 0660: 75 63 74 69 6f 6e 73 20 2a 2a 2f 0a 23 64 65 66 uctions **/.#def 0670: 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f ine GSCIS_INSTR_ 0680: 47 45 54 5f 52 45 53 50 4f 4e 53 45 20 20 20 20 GET_RESPONSE 0690: 20 20 30 78 43 30 0a 23 64 65 66 69 6e 65 20 47 0xC0.#define G 06a0: 53 43 49 53 5f 49 4e 53 54 52 5f 52 45 41 44 5f SCIS_INSTR_READ_ 06b0: 42 49 4e 41 52 59 20 20 20 20 20 20 20 30 78 42 BINARY 0xB 06c0: 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 0.#define GSCIS_ 06d0: 49 4e 53 54 52 5f 55 50 44 41 54 45 5f 42 49 4e INSTR_UPDATE_BIN 06e0: 41 52 59 20 20 20 20 20 30 78 44 36 0a 23 64 65 ARY 0xD6.#de 06f0: 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 fine GSCIS_INSTR 0700: 5f 53 45 4c 45 43 54 20 20 20 20 20 20 20 20 20 _SELECT 0710: 20 20 20 30 78 41 34 0a 23 64 65 66 69 6e 65 20 0xA4.#define 0720: 47 53 43 49 53 5f 49 4e 53 54 52 5f 45 58 54 45 GSCIS_INSTR_EXTE 0730: 52 4e 41 4c 5f 41 55 54 48 20 20 20 20 20 30 78 RNAL_AUTH 0x 0740: 38 32 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 82.#define GSCIS 0750: 5f 49 4e 53 54 52 5f 47 45 54 5f 43 48 41 4c 4c _INSTR_GET_CHALL 0760: 45 4e 47 45 20 20 20 20 20 30 78 38 34 0a 23 64 ENGE 0x84.#d 0770: 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 efine GSCIS_INST 0780: 52 5f 49 4e 54 45 52 4e 41 4c 5f 41 55 54 48 20 R_INTERNAL_AUTH 0790: 20 20 20 20 30 78 38 38 0a 23 64 65 66 69 6e 65 0x88.#define 07a0: 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 56 45 52 GSCIS_INSTR_VER 07b0: 49 46 59 20 20 20 20 20 20 20 20 20 20 20 20 30 IFY 0 07c0: 78 32 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x20.#define GSCI 07d0: 53 5f 49 4e 53 54 52 5f 53 49 47 4e 20 20 20 20 S_INSTR_SIGN 07e0: 20 20 20 20 20 20 20 20 20 20 30 78 32 41 0a 23 0x2A.# 07f0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 define GSCIS_INS 0800: 54 52 5f 47 45 54 5f 50 52 4f 50 20 20 20 20 20 TR_GET_PROP 0810: 20 20 20 20 20 30 78 35 36 0a 23 64 65 66 69 6e 0x56.#defin 0820: 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 47 45 e GSCIS_INSTR_GE 0830: 54 5f 41 43 52 20 20 20 20 20 20 20 20 20 20 20 T_ACR 0840: 30 78 34 43 0a 23 64 65 66 69 6e 65 20 47 53 43 0x4C.#define GSC 0850: 49 53 5f 49 4e 53 54 52 5f 52 45 41 44 5f 42 55 IS_INSTR_READ_BU 0860: 46 46 45 52 20 20 20 20 20 20 20 30 78 35 32 0a FFER 0x52. 0870: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e #define GSCIS_IN 0880: 53 54 52 5f 53 49 47 4e 44 45 43 52 59 50 54 20 STR_SIGNDECRYPT 0890: 20 20 20 20 20 20 30 78 34 32 0a 0a 23 64 65 66 0x42..#def 08a0: 69 6e 65 20 47 53 43 49 53 5f 50 41 52 41 4d 5f ine GSCIS_PARAM_ 08b0: 53 45 4c 45 43 54 5f 41 50 50 4c 45 54 20 20 20 SELECT_APPLET 08c0: 20 20 30 78 30 34 0a 0a 2f 2a 2a 20 54 61 67 73 0x04../** Tags 08d0: 20 2a 2a 2f 0a 2f 2a 2a 2a 20 43 43 43 20 54 61 **/./*** CCC Ta 08e0: 67 73 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 gs ***/.#define 08f0: 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44 GSCIS_TAG_CARDID 0900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 0x 0910: 46 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 F0.#define GSCIS 0920: 5f 54 41 47 5f 43 43 43 5f 56 45 52 20 20 20 20 _TAG_CCC_VER 0930: 20 20 20 20 20 20 20 20 20 30 78 46 31 0a 23 64 0xF1.#d 0940: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0950: 43 43 47 5f 56 45 52 20 20 20 20 20 20 20 20 20 CCG_VER 0960: 20 20 20 20 30 78 46 32 0a 23 64 65 66 69 6e 65 0xF2.#define 0970: 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 55 GSCIS_TAG_CARDU 0980: 52 4c 20 20 20 20 20 20 20 20 20 20 20 20 20 30 RL 0 0990: 78 46 33 0a 23 64 65 66 69 6e 65 20 47 53 43 49 xF3.#define GSCI 09a0: 53 5f 54 41 47 5f 50 4b 43 53 31 35 20 20 20 20 S_TAG_PKCS15 09b0: 20 20 20 20 20 20 20 20 20 20 30 78 46 34 0a 23 0xF4.# 09c0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 09d0: 5f 52 45 47 5f 44 41 54 41 5f 4d 4f 44 45 4c 20 _REG_DATA_MODEL 09e0: 20 20 20 20 20 30 78 46 35 0a 23 64 65 66 69 6e 0xF5.#defin 09f0: 65 20 47 53 43 49 53 5f 54 41 47 5f 41 43 52 5f e GSCIS_TAG_ACR_ 0a00: 54 41 42 4c 45 20 20 20 20 20 20 20 20 20 20 20 TABLE 0a10: 30 78 46 36 0a 23 64 65 66 69 6e 65 20 47 53 43 0xF6.#define GSC 0a20: 49 53 5f 54 41 47 5f 43 41 52 44 5f 41 50 44 55 IS_TAG_CARD_APDU 0a30: 20 20 20 20 20 20 20 20 20 20 20 30 78 46 37 0a 0xF7. 0a40: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0a50: 47 5f 52 45 44 49 52 45 43 54 49 4f 4e 20 20 20 G_REDIRECTION 0a60: 20 20 20 20 20 20 30 78 46 41 0a 23 64 65 66 69 0xFA.#defi 0a70: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 54 20 ne GSCIS_TAG_CT 0a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a90: 20 30 78 46 42 0a 23 64 65 66 69 6e 65 20 47 53 0xFB.#define GS 0aa0: 43 49 53 5f 54 41 47 5f 53 54 20 20 20 20 20 20 CIS_TAG_ST 0ab0: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 46 43 0xFC 0ac0: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0ad0: 41 47 5f 4e 45 58 54 43 43 43 20 20 20 20 20 20 AG_NEXTCCC 0ae0: 20 20 20 20 20 20 20 30 78 46 44 0a 0a 2f 2a 2a 0xFD../** 0af0: 2a 20 47 65 6e 65 72 61 6c 20 2d 20 45 46 20 32 * General - EF 2 0b00: 32 30 30 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 200 ***/.#define 0b10: 20 47 53 43 49 53 5f 54 41 47 5f 46 4e 41 4d 45 GSCIS_TAG_FNAME 0b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0 0b30: 78 30 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x01.#define GSCI 0b40: 53 5f 54 41 47 5f 4d 4e 41 4d 45 20 20 20 20 20 S_TAG_MNAME 0b50: 20 20 20 20 20 20 20 20 20 20 30 78 30 32 0a 23 0x02.# 0b60: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0b70: 5f 4c 4e 41 4d 45 20 20 20 20 20 20 20 20 20 20 _LNAME 0b80: 20 20 20 20 20 30 78 30 33 0a 23 64 65 66 69 6e 0x03.#defin 0b90: 65 20 47 53 43 49 53 5f 54 41 47 5f 53 55 46 46 e GSCIS_TAG_SUFF 0ba0: 49 58 20 20 20 20 20 20 20 20 20 20 20 20 20 20 IX 0bb0: 30 78 30 34 0a 23 64 65 66 69 6e 65 20 47 53 43 0x04.#define GSC 0bc0: 49 53 5f 54 41 47 5f 47 4f 56 54 5f 41 47 45 4e IS_TAG_GOVT_AGEN 0bd0: 43 59 20 20 20 20 20 20 20 20 20 30 78 30 35 0a CY 0x05. 0be0: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0bf0: 47 5f 42 55 52 45 41 55 20 20 20 20 20 20 20 20 G_BUREAU 0c00: 20 20 20 20 20 20 30 78 30 36 0a 23 64 65 66 69 0x06.#defi 0c10: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 52 ne GSCIS_TAG_BUR 0c20: 45 41 55 5f 43 4f 44 45 20 20 20 20 20 20 20 20 EAU_CODE 0c30: 20 30 78 30 37 0a 23 64 65 66 69 6e 65 20 47 53 0x07.#define GS 0c40: 43 49 53 5f 54 41 47 5f 44 45 50 54 5f 43 4f 44 CIS_TAG_DEPT_COD 0c50: 45 20 20 20 20 20 20 20 20 20 20 20 30 78 30 38 E 0x08 0c60: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0c70: 41 47 5f 54 49 54 4c 45 20 20 20 20 20 20 20 20 AG_TITLE 0c80: 20 20 20 20 20 20 20 30 78 30 39 0a 23 64 65 66 0x09.#def 0c90: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 ine GSCIS_TAG_BU 0ca0: 49 4c 44 49 4e 47 20 20 20 20 20 20 20 20 20 20 ILDING 0cb0: 20 20 30 78 31 30 0a 23 64 65 66 69 6e 65 20 47 0x10.#define G 0cc0: 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f SCIS_TAG_OFFICE_ 0cd0: 41 44 44 52 31 20 20 20 20 20 20 20 20 30 78 31 ADDR1 0x1 0ce0: 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 1.#define GSCIS_ 0cf0: 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 32 TAG_OFFICE_ADDR2 0d00: 20 20 20 20 20 20 20 20 30 78 31 32 0a 23 64 65 0x12.#de 0d10: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4f fine GSCIS_TAG_O 0d20: 46 46 49 43 45 5f 43 49 54 59 20 20 20 20 20 20 FFICE_CITY 0d30: 20 20 20 30 78 31 33 0a 23 64 65 66 69 6e 65 20 0x13.#define 0d40: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 0d50: 5f 53 54 41 54 45 20 20 20 20 20 20 20 20 30 78 _STATE 0x 0d60: 31 34 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 14.#define GSCIS 0d70: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 5a 49 50 20 _TAG_OFFICE_ZIP 0d80: 20 20 20 20 20 20 20 20 20 30 78 31 35 0a 23 64 0x15.#d 0d90: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0da0: 4f 46 46 49 43 45 5f 43 4f 55 4e 54 52 59 20 20 OFFICE_COUNTRY 0db0: 20 20 20 20 30 78 31 36 0a 23 64 65 66 69 6e 65 0x16.#define 0dc0: 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 GSCIS_TAG_OFFIC 0dd0: 45 5f 50 48 4f 4e 45 20 20 20 20 20 20 20 20 30 E_PHONE 0 0de0: 78 31 37 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x17.#define GSCI 0df0: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 4f S_TAG_OFFICE_PHO 0e00: 4e 45 5f 45 58 54 20 20 20 20 30 78 31 38 0a 23 NE_EXT 0x18.# 0e10: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0e20: 5f 4f 46 46 49 43 45 5f 46 41 58 20 20 20 20 20 _OFFICE_FAX 0e30: 20 20 20 20 20 30 78 31 39 0a 23 64 65 66 69 6e 0x19.#defin 0e40: 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 e GSCIS_TAG_OFFI 0e50: 43 45 5f 45 4d 41 49 4c 20 20 20 20 20 20 20 20 CE_EMAIL 0e60: 30 78 31 41 0a 23 64 65 66 69 6e 65 20 47 53 43 0x1A.#define GSC 0e70: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 52 4f IS_TAG_OFFICE_RO 0e80: 4f 4d 20 20 20 20 20 20 20 20 20 30 78 31 42 0a OM 0x1B. 0e90: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0ea0: 47 5f 4e 4f 4e 47 4f 56 5f 41 47 45 4e 43 59 20 G_NONGOV_AGENCY 0eb0: 20 20 20 20 20 20 30 78 31 43 0a 23 64 65 66 69 0x1C.#defi 0ec0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 53 53 4e ne GSCIS_TAG_SSN 0ed0: 5f 44 45 53 49 47 4e 41 54 4f 52 20 20 20 20 20 _DESIGNATOR 0ee0: 20 30 78 31 44 0a 0a 2f 2a 2a 2a 20 50 49 49 20 0x1D../*** PII 0ef0: 2d 20 45 46 20 32 31 30 30 20 2a 2a 2a 2f 0a 23 - EF 2100 ***/.# 0f00: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0f10: 5f 53 53 4e 20 20 20 20 20 20 20 20 20 20 20 20 _SSN 0f20: 20 20 20 20 20 30 78 32 30 0a 23 64 65 66 69 6e 0x20.#defin 0f30: 65 20 47 53 43 49 53 5f 54 41 47 5f 44 4f 42 20 e GSCIS_TAG_DOB 0f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0f50: 30 78 32 31 0a 23 64 65 66 69 6e 65 20 47 53 43 0x21.#define GSC 0f60: 49 53 5f 54 41 47 5f 47 45 4e 44 45 52 20 20 20 IS_TAG_GENDER 0f70: 20 20 20 20 20 20 20 20 20 20 20 30 78 32 32 0a 0x22. 0f80: 0a 2f 2a 2a 2a 20 4c 6f 67 69 6e 20 49 6e 66 6f ./*** Login Info 0f90: 72 6d 61 74 69 6f 6e 20 2d 20 45 46 20 34 30 30 rmation - EF 400 0fa0: 30 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 0 ***/.#define G 0fb0: 53 43 49 53 5f 54 41 47 5f 55 53 45 52 49 44 20 SCIS_TAG_USERID 0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 34 0x4 0fd0: 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 0.#define GSCIS_ 0fe0: 54 41 47 5f 44 4f 4d 41 49 4e 20 20 20 20 20 20 TAG_DOMAIN 0ff0: 20 20 20 20 20 20 20 20 30 78 34 31 0a 23 64 65 0x41.#de 1000: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 50 fine GSCIS_TAG_P 1010: 41 53 53 57 4f 52 44 20 20 20 20 20 20 20 20 20 ASSWORD 1020: 20 20 20 30 78 34 32 0a 0a 2f 2a 2a 2a 20 43 61 0x42../*** Ca 1030: 72 64 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 2d rd Information - 1040: 20 45 46 20 35 30 30 30 20 2a 2a 2a 2f 0a 23 64 EF 5000 ***/.#d 1050: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 1060: 49 53 53 55 45 52 49 44 20 20 20 20 20 20 20 20 ISSUERID 1070: 20 20 20 20 30 78 35 30 0a 23 64 65 66 69 6e 65 0x50.#define 1080: 20 47 53 43 49 53 5f 54 41 47 5f 53 45 52 4e 4f GSCIS_TAG_SERNO 1090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0 10a0: 78 35 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x51.#define GSCI 10b0: 53 5f 54 41 47 5f 49 53 53 55 45 5f 44 41 54 45 S_TAG_ISSUE_DATE 10c0: 20 20 20 20 20 20 20 20 20 20 30 78 35 32 0a 23 0x52.# 10d0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 10e0: 5f 45 58 50 49 52 45 5f 44 41 54 45 20 20 20 20 _EXPIRE_DATE 10f0: 20 20 20 20 20 30 78 35 33 0a 23 64 65 66 69 6e 0x53.#defin 1100: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 e GSCIS_TAG_CARD 1110: 5f 54 59 50 45 20 20 20 20 20 20 20 20 20 20 20 _TYPE 1120: 30 78 35 34 0a 23 64 65 66 69 6e 65 20 47 53 43 0x54.#define GSC 1130: 49 53 5f 54 41 47 5f 53 45 43 55 52 49 54 59 5f IS_TAG_SECURITY_ 1140: 43 4f 44 45 20 20 20 20 20 20 20 30 78 35 37 0a CODE 0x57. 1150: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 1160: 47 5f 43 41 52 44 49 44 5f 41 49 44 20 20 20 20 G_CARDID_AID 1170: 20 20 20 20 20 20 30 78 35 38 0a 0a 2f 2a 2a 2a 0x58../*** 1180: 20 50 4b 49 20 49 6e 66 6f 72 6d 61 74 69 6f 6e PKI Information 1190: 20 2d 20 45 46 20 37 30 30 30 20 2a 2a 2a 2f 0a - EF 7000 ***/. 11a0: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 11b0: 47 5f 43 45 52 54 49 46 49 43 41 54 45 20 20 20 G_CERTIFICATE 11c0: 20 20 20 20 20 20 30 78 37 30 0a 23 64 65 66 69 0x70.#defi 11d0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 ne GSCIS_TAG_CER 11e0: 54 5f 49 53 53 55 45 5f 44 41 54 45 20 20 20 20 T_ISSUE_DATE 11f0: 20 30 78 37 31 0a 23 64 65 66 69 6e 65 20 47 53 0x71.#define GS 1200: 43 49 53 5f 54 41 47 5f 43 45 52 54 5f 45 58 50 CIS_TAG_CERT_EXP 1210: 49 52 45 5f 44 41 54 45 20 20 20 20 30 78 37 32 IRE_DATE 0x72 1220: 0a 0a 2f 2a 2a 20 41 70 70 6c 65 74 20 49 44 73 ../** Applet IDs 1230: 20 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 43 **/.#define GSC 1240: 49 53 5f 41 49 44 5f 43 43 43 20 20 20 20 20 20 IS_AID_CCC 1250: 20 20 20 20 20 20 20 20 20 20 20 30 78 41 30 2c 0xA0, 1260: 20 30 78 30 30 2c 20 30 78 30 30 2c 20 30 78 30 0x00, 0x00, 0x0 1270: 31 2c 20 30 78 31 36 2c 20 30 78 44 42 2c 20 30 1, 0x16, 0xDB, 0 1280: 78 30 30 0a 0a 2f 2a 20 4d 61 78 69 6d 75 6d 20 x00../* Maximum 1290: 73 69 7a 65 20 6f 66 20 64 61 74 61 20 70 6f 72 size of data por 12a0: 74 69 6f 6e 20 6f 66 20 41 50 44 55 73 20 2a 2f tion of APDUs */ 12b0: 0a 2f 2a 2a 20 44 6f 20 6e 6f 74 20 73 65 74 20 ./** Do not set 12c0: 74 68 69 73 20 61 62 6f 76 65 20 32 35 30 20 2a this above 250 * 12d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 41 43 4b 45 */.#define CACKE 12e0: 59 5f 41 50 44 55 5f 4d 54 55 20 20 20 20 20 20 Y_APDU_MTU 12f0: 20 20 20 20 20 20 20 20 20 32 35 30 0a 0a 23 69 250..#i 1300: 66 64 65 66 20 43 41 43 4b 45 59 5f 44 45 42 55 fdef CACKEY_DEBU 1310: 47 0a 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 G..# define CAC 1320: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1330: 28 78 2e 2e 2e 29 20 7b 20 66 70 72 69 6e 74 66 (x...) { fprintf 1340: 28 73 74 64 65 72 72 2c 20 22 25 73 28 29 3a 25 (stderr, "%s():% 1350: 69 3a 20 22 2c 20 5f 5f 66 75 6e 63 5f 5f 2c 20 i: ", __func__, 1360: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 66 70 72 69 6e __LINE__); fprin 1370: 74 66 28 73 74 64 65 72 72 2c 20 78 29 3b 20 66 tf(stderr, x); f 1380: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 printf(stderr, " 1390: 5c 6e 22 29 3b 20 66 66 6c 75 73 68 28 73 74 64 \n"); fflush(std 13a0: 65 72 72 29 3b 20 7d 0a 23 20 20 64 65 66 69 6e err); }.# defin 13b0: 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 e CACKEY_DEBUG_P 13c0: 52 49 4e 54 42 55 46 28 66 2c 20 78 2c 20 79 29 RINTBUF(f, x, y) 13d0: 20 7b 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 { unsigned char 13e0: 20 2a 54 4d 50 42 55 46 3b 20 75 6e 73 69 67 6e *TMPBUF; unsign 13f0: 65 64 20 6c 6f 6e 67 20 69 64 78 3b 20 54 4d 50 ed long idx; TMP 1400: 42 55 46 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 BUF = (unsigned 1410: 63 68 61 72 20 2a 29 20 28 78 29 3b 20 66 70 72 char *) (x); fpr 1420: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 intf(stderr, "%s 1430: 28 29 3a 25 69 3a 20 25 73 20 20 28 25 73 2f 25 ():%i: %s (%s/% 1440: 6c 75 20 3d 20 7b 25 30 32 78 22 2c 20 5f 5f 66 lu = {%02x", __f 1450: 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 4e 45 5f 5f 2c unc__, __LINE__, 1460: 20 66 2c 20 23 78 2c 20 28 75 6e 73 69 67 6e 65 f, #x, (unsigne 1470: 64 20 6c 6f 6e 67 29 20 28 79 29 2c 20 54 4d 50 d long) (y), TMP 1480: 42 55 46 5b 30 5d 29 3b 20 66 6f 72 20 28 69 64 BUF[0]); for (id 1490: 78 20 3d 20 31 3b 20 69 64 78 20 3c 20 28 79 29 x = 1; idx < (y) 14a0: 3b 20 69 64 78 2b 2b 29 20 7b 20 66 70 72 69 6e ; idx++) { fprin 14b0: 74 66 28 73 74 64 65 72 72 2c 20 22 2c 20 25 30 tf(stderr, ", %0 14c0: 32 78 22 2c 20 54 4d 50 42 55 46 5b 69 64 78 5d 2x", TMPBUF[idx] 14d0: 29 3b 20 7d 3b 20 66 70 72 69 6e 74 66 28 73 74 ); }; fprintf(st 14e0: 64 65 72 72 2c 20 22 7d 29 5c 6e 22 29 3b 20 66 derr, "})\n"); f 14f0: 66 6c 75 73 68 28 73 74 64 65 72 72 29 3b 20 7d flush(stderr); } 1500: 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 .# define CACKE 1510: 59 5f 44 45 42 55 47 5f 50 45 52 52 4f 52 28 78 Y_DEBUG_PERROR(x 1520: 29 20 7b 20 66 70 72 69 6e 74 66 28 73 74 64 65 ) { fprintf(stde 1530: 72 72 2c 20 22 25 73 28 29 3a 25 69 3a 20 22 2c rr, "%s():%i: ", 1540: 20 5f 5f 66 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 4e __func__, __LIN 1550: 45 5f 5f 29 3b 20 70 65 72 72 6f 72 28 78 29 3b E__); perror(x); 1560: 20 66 66 6c 75 73 68 28 73 74 64 65 72 72 29 3b fflush(stderr); 1570: 20 7d 0a 23 20 20 64 65 66 69 6e 65 20 66 72 65 }.# define fre 1580: 65 28 78 29 20 7b 20 43 41 43 4b 45 59 5f 44 45 e(x) { CACKEY_DE 1590: 42 55 47 5f 50 52 49 4e 54 46 28 22 46 52 45 45 BUG_PRINTF("FREE 15a0: 28 25 70 29 20 28 25 73 29 22 2c 20 78 2c 20 23 (%p) (%s)", x, # 15b0: 78 29 3b 20 66 72 65 65 28 78 29 3b 20 7d 0a 0a x); free(x); }.. 15c0: 73 74 61 74 69 63 20 76 6f 69 64 20 2a 43 41 43 static void *CAC 15d0: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 4d KEY_DEBUG_FUNC_M 15e0: 41 4c 4c 4f 43 28 73 69 7a 65 5f 74 20 73 69 7a ALLOC(size_t siz 15f0: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 e, const char *f 1600: 75 6e 63 2c 20 69 6e 74 20 6c 69 6e 65 29 20 7b unc, int line) { 1610: 0a 09 76 6f 69 64 20 2a 72 65 74 76 61 6c 3b 0a ..void *retval;. 1620: 0a 09 72 65 74 76 61 6c 20 3d 20 6d 61 6c 6c 6f ..retval = mallo 1630: 63 28 73 69 7a 65 29 3b 0a 0a 09 66 70 72 69 6e c(size);...fprin 1640: 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 28 29 tf(stderr, "%s() 1650: 3a 25 69 3a 20 22 2c 20 66 75 6e 63 2c 20 6c 69 :%i: ", func, li 1660: 6e 65 29 3b 0a 09 66 70 72 69 6e 74 66 28 73 74 ne);..fprintf(st 1670: 64 65 72 72 2c 20 22 4d 41 4c 4c 4f 43 28 29 20 derr, "MALLOC() 1680: 3d 20 25 70 22 2c 20 72 65 74 76 61 6c 29 3b 0a = %p", retval);. 1690: 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c .fprintf(stderr, 16a0: 20 22 5c 6e 22 29 3b 0a 09 66 66 6c 75 73 68 28 "\n");..fflush( 16b0: 73 74 64 65 72 72 29 3b 0a 0a 09 72 65 74 75 72 stderr);...retur 16c0: 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 n(retval);.}..st 16d0: 61 74 69 63 20 76 6f 69 64 20 2a 43 41 43 4b 45 atic void *CACKE 16e0: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 52 45 41 Y_DEBUG_FUNC_REA 16f0: 4c 4c 4f 43 28 76 6f 69 64 20 2a 70 74 72 2c 20 LLOC(void *ptr, 1700: 73 69 7a 65 5f 74 20 73 69 7a 65 2c 20 63 6f 6e size_t size, con 1710: 73 74 20 63 68 61 72 20 2a 66 75 6e 63 2c 20 69 st char *func, i 1720: 6e 74 20 6c 69 6e 65 29 20 7b 0a 09 76 6f 69 64 nt line) {..void 1730: 20 2a 72 65 74 76 61 6c 3b 0a 0a 09 72 65 74 76 *retval;...retv 1740: 61 6c 20 3d 20 72 65 61 6c 6c 6f 63 28 70 74 72 al = realloc(ptr 1750: 2c 20 73 69 7a 65 29 3b 0a 0a 09 69 66 20 28 72 , size);...if (r 1760: 65 74 76 61 6c 20 21 3d 20 70 74 72 29 20 7b 0a etval != ptr) {. 1770: 09 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 ..fprintf(stderr 1780: 2c 20 22 25 73 28 29 3a 25 69 3a 20 22 2c 20 66 , "%s():%i: ", f 1790: 75 6e 63 2c 20 6c 69 6e 65 29 3b 0a 09 09 66 70 unc, line);...fp 17a0: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 52 rintf(stderr, "R 17b0: 45 41 4c 4c 4f 43 28 25 70 29 20 3d 20 25 70 22 EALLOC(%p) = %p" 17c0: 2c 20 70 74 72 2c 20 72 65 74 76 61 6c 29 3b 0a , ptr, retval);. 17d0: 09 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 ..fprintf(stderr 17e0: 2c 20 22 5c 6e 22 29 3b 0a 09 09 66 66 6c 75 73 , "\n");...fflus 17f0: 68 28 73 74 64 65 72 72 29 3b 0a 09 7d 0a 0a 09 h(stderr);..}... 1800: 69 66 20 28 72 65 74 76 61 6c 20 3d 3d 20 4e 55 if (retval == NU 1810: 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 1820: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2a 2a EBUG_PRINTF(" ** 1830: 2a 20 45 52 52 4f 52 20 2a 2a 2a 20 72 65 61 6c * ERROR *** real 1840: 6c 6f 63 20 72 65 74 75 72 6e 65 64 20 4e 55 4c loc returned NUL 1850: 4c 22 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e L");..}...return 1860: 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61 (retval);.}..sta 1870: 74 69 63 20 63 68 61 72 20 2a 43 41 43 4b 45 59 tic char *CACKEY 1880: 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 54 52 44 _DEBUG_FUNC_STRD 1890: 55 50 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 UP(const char *p 18a0: 74 72 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a tr, const char * 18b0: 66 75 6e 63 2c 20 69 6e 74 20 6c 69 6e 65 29 20 func, int line) 18c0: 7b 0a 09 63 68 61 72 20 2a 72 65 74 76 61 6c 3b {..char *retval; 18d0: 0a 0a 09 72 65 74 76 61 6c 20 3d 20 73 74 72 64 ...retval = strd 18e0: 75 70 28 70 74 72 29 3b 0a 0a 09 66 70 72 69 6e up(ptr);...fprin 18f0: 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 28 29 tf(stderr, "%s() 1900: 3a 25 69 3a 20 22 2c 20 66 75 6e 63 2c 20 6c 69 :%i: ", func, li 1910: 6e 65 29 3b 0a 09 66 70 72 69 6e 74 66 28 73 74 ne);..fprintf(st 1920: 64 65 72 72 2c 20 22 53 54 52 44 55 50 5f 4d 41 derr, "STRDUP_MA 1930: 4c 4c 4f 43 28 29 20 3d 20 25 70 22 2c 20 72 65 LLOC() = %p", re 1940: 74 76 61 6c 29 3b 0a 09 66 70 72 69 6e 74 66 28 tval);..fprintf( 1950: 73 74 64 65 72 72 2c 20 22 5c 6e 22 29 3b 0a 09 stderr, "\n");.. 1960: 66 66 6c 75 73 68 28 73 74 64 65 72 72 29 3b 0a fflush(stderr);. 1970: 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 ..return(retval) 1980: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63 6f 6e 73 ;.}..static cons 1990: 74 20 63 68 61 72 20 2a 43 41 43 4b 45 59 5f 44 t char *CACKEY_D 19a0: 45 42 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54 4f EBUG_FUNC_TAG_TO 19b0: 5f 53 54 52 28 75 6e 73 69 67 6e 65 64 20 63 68 _STR(unsigned ch 19c0: 61 72 20 74 61 67 29 20 7b 0a 09 73 77 69 74 63 ar tag) {..switc 19d0: 68 20 28 74 61 67 29 20 7b 0a 09 09 63 61 73 65 h (tag) {...case 19e0: 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 49 GSCIS_TAG_CARDI 19f0: 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 D:....return("GS 1a00: 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44 22 29 CIS_TAG_CARDID") 1a10: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 1a20: 41 47 5f 43 43 43 5f 56 45 52 3a 0a 09 09 09 72 AG_CCC_VER:....r 1a30: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 1a40: 5f 43 43 43 5f 56 45 52 22 29 3b 0a 09 09 63 61 _CCC_VER");...ca 1a50: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 43 47 se GSCIS_TAG_CCG 1a60: 5f 56 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 _VER:....return( 1a70: 22 47 53 43 49 53 5f 54 41 47 5f 43 43 47 5f 56 "GSCIS_TAG_CCG_V 1a80: 45 52 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 ER");...case GSC 1a90: 49 53 5f 54 41 47 5f 43 41 52 44 55 52 4c 3a 0a IS_TAG_CARDURL:. 1aa0: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 1ab0: 5f 54 41 47 5f 43 41 52 44 55 52 4c 22 29 3b 0a _TAG_CARDURL");. 1ac0: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 1ad0: 5f 50 4b 43 53 31 35 3a 0a 09 09 09 72 65 74 75 _PKCS15:....retu 1ae0: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 50 4b rn("GSCIS_TAG_PK 1af0: 43 53 31 35 22 29 3b 0a 09 09 63 61 73 65 20 47 CS15");...case G 1b00: 53 43 49 53 5f 54 41 47 5f 52 45 47 5f 44 41 54 SCIS_TAG_REG_DAT 1b10: 41 5f 4d 4f 44 45 4c 3a 0a 09 09 09 72 65 74 75 A_MODEL:....retu 1b20: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 52 45 rn("GSCIS_TAG_RE 1b30: 47 5f 44 41 54 41 5f 4d 4f 44 45 4c 22 29 3b 0a G_DATA_MODEL");. 1b40: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 1b50: 5f 41 43 52 5f 54 41 42 4c 45 3a 0a 09 09 09 72 _ACR_TABLE:....r 1b60: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 1b70: 5f 41 43 52 5f 54 41 42 4c 45 22 29 3b 0a 09 09 _ACR_TABLE");... 1b80: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 case GSCIS_TAG_C 1b90: 41 52 44 5f 41 50 44 55 3a 0a 09 09 09 72 65 74 ARD_APDU:....ret 1ba0: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 43 urn("GSCIS_TAG_C 1bb0: 41 52 44 5f 41 50 44 55 22 29 3b 0a 09 09 63 61 ARD_APDU");...ca 1bc0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 52 45 44 se GSCIS_TAG_RED 1bd0: 49 52 45 43 54 49 4f 4e 3a 0a 09 09 09 72 65 74 IRECTION:....ret 1be0: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 52 urn("GSCIS_TAG_R 1bf0: 45 44 49 52 45 43 54 49 4f 4e 22 29 3b 0a 09 09 EDIRECTION");... 1c00: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 case GSCIS_TAG_C 1c10: 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 T:....return("GS 1c20: 43 49 53 5f 54 41 47 5f 43 54 22 29 3b 0a 09 09 CIS_TAG_CT");... 1c30: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 53 case GSCIS_TAG_S 1c40: 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 T:....return("GS 1c50: 43 49 53 5f 54 41 47 5f 53 54 22 29 3b 0a 09 09 CIS_TAG_ST");... 1c60: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4e case GSCIS_TAG_N 1c70: 45 58 54 43 43 43 3a 0a 09 09 09 72 65 74 75 72 EXTCCC:....retur 1c80: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4e 45 58 n("GSCIS_TAG_NEX 1c90: 54 43 43 43 22 29 3b 0a 09 09 63 61 73 65 20 47 TCCC");...case G 1ca0: 53 43 49 53 5f 54 41 47 5f 46 4e 41 4d 45 3a 0a SCIS_TAG_FNAME:. 1cb0: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 1cc0: 5f 54 41 47 5f 46 4e 41 4d 45 22 29 3b 0a 09 09 _TAG_FNAME");... 1cd0: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4d case GSCIS_TAG_M 1ce0: 4e 41 4d 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 NAME:....return( 1cf0: 22 47 53 43 49 53 5f 54 41 47 5f 4d 4e 41 4d 45 "GSCIS_TAG_MNAME 1d00: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 1d10: 5f 54 41 47 5f 4c 4e 41 4d 45 3a 0a 09 09 09 72 _TAG_LNAME:....r 1d20: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 1d30: 5f 4c 4e 41 4d 45 22 29 3b 0a 09 09 63 61 73 65 _LNAME");...case 1d40: 20 47 53 43 49 53 5f 54 41 47 5f 53 55 46 46 49 GSCIS_TAG_SUFFI 1d50: 58 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 X:....return("GS 1d60: 43 49 53 5f 54 41 47 5f 53 55 46 46 49 58 22 29 CIS_TAG_SUFFIX") 1d70: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 1d80: 41 47 5f 47 4f 56 54 5f 41 47 45 4e 43 59 3a 0a AG_GOVT_AGENCY:. 1d90: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 1da0: 5f 54 41 47 5f 47 4f 56 54 5f 41 47 45 4e 43 59 _TAG_GOVT_AGENCY 1db0: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 1dc0: 5f 54 41 47 5f 42 55 52 45 41 55 3a 0a 09 09 09 _TAG_BUREAU:.... 1dd0: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1de0: 47 5f 42 55 52 45 41 55 22 29 3b 0a 09 09 63 61 G_BUREAU");...ca 1df0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 52 se GSCIS_TAG_BUR 1e00: 45 41 55 5f 43 4f 44 45 3a 0a 09 09 09 72 65 74 EAU_CODE:....ret 1e10: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 42 urn("GSCIS_TAG_B 1e20: 55 52 45 41 55 5f 43 4f 44 45 22 29 3b 0a 09 09 UREAU_CODE");... 1e30: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 44 case GSCIS_TAG_D 1e40: 45 50 54 5f 43 4f 44 45 3a 0a 09 09 09 72 65 74 EPT_CODE:....ret 1e50: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 44 urn("GSCIS_TAG_D 1e60: 45 50 54 5f 43 4f 44 45 22 29 3b 0a 09 09 63 61 EPT_CODE");...ca 1e70: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 54 49 54 se GSCIS_TAG_TIT 1e80: 4c 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 LE:....return("G 1e90: 53 43 49 53 5f 54 41 47 5f 54 49 54 4c 45 22 29 SCIS_TAG_TITLE") 1ea0: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 1eb0: 41 47 5f 42 55 49 4c 44 49 4e 47 3a 0a 09 09 09 AG_BUILDING:.... 1ec0: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1ed0: 47 5f 42 55 49 4c 44 49 4e 47 22 29 3b 0a 09 09 G_BUILDING");... 1ee0: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f case GSCIS_TAG_O 1ef0: 46 46 49 43 45 5f 41 44 44 52 31 3a 0a 09 09 09 FFICE_ADDR1:.... 1f00: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1f10: 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 31 22 29 G_OFFICE_ADDR1") 1f20: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 1f30: 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 32 3a AG_OFFICE_ADDR2: 1f40: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 1f50: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 S_TAG_OFFICE_ADD 1f60: 52 32 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 R2");...case GSC 1f70: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 43 49 IS_TAG_OFFICE_CI 1f80: 54 59 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 TY:....return("G 1f90: 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f SCIS_TAG_OFFICE_ 1fa0: 43 49 54 59 22 29 3b 0a 09 09 63 61 73 65 20 47 CITY");...case G 1fb0: 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f SCIS_TAG_OFFICE_ 1fc0: 53 54 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e STATE:....return 1fd0: 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 ("GSCIS_TAG_OFFI 1fe0: 43 45 5f 53 54 41 54 45 22 29 3b 0a 09 09 63 61 CE_STATE");...ca 1ff0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 se GSCIS_TAG_OFF 2000: 49 43 45 5f 5a 49 50 3a 0a 09 09 09 72 65 74 75 ICE_ZIP:....retu 2010: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 rn("GSCIS_TAG_OF 2020: 46 49 43 45 5f 5a 49 50 22 29 3b 0a 09 09 63 61 FICE_ZIP");...ca 2030: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 se GSCIS_TAG_OFF 2040: 49 43 45 5f 43 4f 55 4e 54 52 59 3a 0a 09 09 09 ICE_COUNTRY:.... 2050: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 2060: 47 5f 4f 46 46 49 43 45 5f 43 4f 55 4e 54 52 59 G_OFFICE_COUNTRY 2070: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 2080: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 4f 4e _TAG_OFFICE_PHON 2090: 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 E:....return("GS 20a0: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 CIS_TAG_OFFICE_P 20b0: 48 4f 4e 45 22 29 3b 0a 09 09 63 61 73 65 20 47 HONE");...case G 20c0: 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f SCIS_TAG_OFFICE_ 20d0: 50 48 4f 4e 45 5f 45 58 54 3a 0a 09 09 09 72 65 PHONE_EXT:....re 20e0: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 20f0: 4f 46 46 49 43 45 5f 50 48 4f 4e 45 5f 45 58 54 OFFICE_PHONE_EXT 2100: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 2110: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 46 41 58 3a _TAG_OFFICE_FAX: 2120: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 2130: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 46 41 58 S_TAG_OFFICE_FAX 2140: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 2150: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 45 4d 41 49 _TAG_OFFICE_EMAI 2160: 4c 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 L:....return("GS 2170: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 45 CIS_TAG_OFFICE_E 2180: 4d 41 49 4c 22 29 3b 0a 09 09 63 61 73 65 20 47 MAIL");...case G 2190: 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f SCIS_TAG_OFFICE_ 21a0: 52 4f 4f 4d 3a 0a 09 09 09 72 65 74 75 72 6e 28 ROOM:....return( 21b0: 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 "GSCIS_TAG_OFFIC 21c0: 45 5f 52 4f 4f 4d 22 29 3b 0a 09 09 63 61 73 65 E_ROOM");...case 21d0: 20 47 53 43 49 53 5f 54 41 47 5f 4e 4f 4e 47 4f GSCIS_TAG_NONGO 21e0: 56 5f 41 47 45 4e 43 59 3a 0a 09 09 09 72 65 74 V_AGENCY:....ret 21f0: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4e urn("GSCIS_TAG_N 2200: 4f 4e 47 4f 56 5f 41 47 45 4e 43 59 22 29 3b 0a ONGOV_AGENCY");. 2210: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 2220: 5f 53 53 4e 5f 44 45 53 49 47 4e 41 54 4f 52 3a _SSN_DESIGNATOR: 2230: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 2240: 53 5f 54 41 47 5f 53 53 4e 5f 44 45 53 49 47 4e S_TAG_SSN_DESIGN 2250: 41 54 4f 52 22 29 3b 0a 09 09 63 61 73 65 20 47 ATOR");...case G 2260: 53 43 49 53 5f 54 41 47 5f 53 53 4e 3a 0a 09 09 SCIS_TAG_SSN:... 2270: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 2280: 41 47 5f 53 53 4e 22 29 3b 0a 09 09 63 61 73 65 AG_SSN");...case 2290: 20 47 53 43 49 53 5f 54 41 47 5f 44 4f 42 3a 0a GSCIS_TAG_DOB:. 22a0: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 22b0: 5f 54 41 47 5f 44 4f 42 22 29 3b 0a 09 09 63 61 _TAG_DOB");...ca 22c0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 47 45 4e se GSCIS_TAG_GEN 22d0: 44 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 DER:....return(" 22e0: 47 53 43 49 53 5f 54 41 47 5f 47 45 4e 44 45 52 GSCIS_TAG_GENDER 22f0: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 2300: 5f 54 41 47 5f 55 53 45 52 49 44 3a 0a 09 09 09 _TAG_USERID:.... 2310: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 2320: 47 5f 55 53 45 52 49 44 22 29 3b 0a 09 09 63 61 G_USERID");...ca 2330: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 44 4f 4d se GSCIS_TAG_DOM 2340: 41 49 4e 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 AIN:....return(" 2350: 47 53 43 49 53 5f 54 41 47 5f 44 4f 4d 41 49 4e GSCIS_TAG_DOMAIN 2360: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 2370: 5f 54 41 47 5f 50 41 53 53 57 4f 52 44 3a 0a 09 _TAG_PASSWORD:.. 2380: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 2390: 54 41 47 5f 50 41 53 53 57 4f 52 44 22 29 3b 0a TAG_PASSWORD");. 23a0: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 23b0: 5f 49 53 53 55 45 52 49 44 3a 0a 09 09 09 72 65 _ISSUERID:....re 23c0: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 23d0: 49 53 53 55 45 52 49 44 22 29 3b 0a 09 09 63 61 ISSUERID");...ca 23e0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 53 45 52 se GSCIS_TAG_SER 23f0: 4e 4f 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 NO:....return("G 2400: 53 43 49 53 5f 54 41 47 5f 53 45 52 4e 4f 22 29 SCIS_TAG_SERNO") 2410: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 2420: 41 47 5f 49 53 53 55 45 5f 44 41 54 45 3a 0a 09 AG_ISSUE_DATE:.. 2430: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 2440: 54 41 47 5f 49 53 53 55 45 5f 44 41 54 45 22 29 TAG_ISSUE_DATE") 2450: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 2460: 41 47 5f 45 58 50 49 52 45 5f 44 41 54 45 3a 0a AG_EXPIRE_DATE:. 2470: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 2480: 5f 54 41 47 5f 45 58 50 49 52 45 5f 44 41 54 45 _TAG_EXPIRE_DATE 2490: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 24a0: 5f 54 41 47 5f 43 41 52 44 5f 54 59 50 45 3a 0a _TAG_CARD_TYPE:. 24b0: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 24c0: 5f 54 41 47 5f 43 41 52 44 5f 54 59 50 45 22 29 _TAG_CARD_TYPE") 24d0: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 24e0: 41 47 5f 53 45 43 55 52 49 54 59 5f 43 4f 44 45 AG_SECURITY_CODE 24f0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 2500: 49 53 5f 54 41 47 5f 53 45 43 55 52 49 54 59 5f IS_TAG_SECURITY_ 2510: 43 4f 44 45 22 29 3b 0a 09 09 63 61 73 65 20 47 CODE");...case G 2520: 53 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44 5f SCIS_TAG_CARDID_ 2530: 41 49 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 AID:....return(" 2540: 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44 GSCIS_TAG_CARDID 2550: 5f 41 49 44 22 29 3b 0a 09 09 63 61 73 65 20 47 _AID");...case G 2560: 53 43 49 53 5f 54 41 47 5f 43 45 52 54 49 46 49 SCIS_TAG_CERTIFI 2570: 43 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 CATE:....return( 2580: 22 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 49 "GSCIS_TAG_CERTI 2590: 46 49 43 41 54 45 22 29 3b 0a 09 09 63 61 73 65 FICATE");...case 25a0: 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 5f GSCIS_TAG_CERT_ 25b0: 49 53 53 55 45 5f 44 41 54 45 3a 0a 09 09 09 72 ISSUE_DATE:....r 25c0: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 25d0: 5f 43 45 52 54 5f 49 53 53 55 45 5f 44 41 54 45 _CERT_ISSUE_DATE 25e0: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 25f0: 5f 54 41 47 5f 43 45 52 54 5f 45 58 50 49 52 45 _TAG_CERT_EXPIRE 2600: 5f 44 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e _DATE:....return 2610: 28 22 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 ("GSCIS_TAG_CERT 2620: 5f 45 58 50 49 52 45 5f 44 41 54 45 22 29 3b 0a _EXPIRE_DATE");. 2630: 09 7d 0a 0a 09 72 65 74 75 72 6e 28 22 55 4e 4b .}...return("UNK 2640: 4e 4f 57 4e 22 29 3b 0a 7d 0a 0a 73 74 61 74 69 NOWN");.}..stati 2650: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 43 41 c const char *CA 2660: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 2670: 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 SCARDERR_TO_STR( 2680: 4c 4f 4e 47 20 72 65 74 63 6f 64 65 29 20 7b 0a LONG retcode) {. 2690: 09 73 77 69 74 63 68 20 28 72 65 74 63 6f 64 65 .switch (retcode 26a0: 29 20 7b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ) {...case SCARD 26b0: 5f 53 5f 53 55 43 43 45 53 53 3a 0a 09 09 09 72 _S_SUCCESS:....r 26c0: 65 74 75 72 6e 28 22 53 43 41 52 44 5f 53 5f 53 eturn("SCARD_S_S 26d0: 55 43 43 45 53 53 22 29 3b 0a 09 09 63 61 73 65 UCCESS");...case 26e0: 20 53 43 41 52 44 5f 45 5f 43 41 4e 43 45 4c 4c SCARD_E_CANCELL 26f0: 45 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 ED:....return("S 2700: 43 41 52 44 5f 45 5f 43 41 4e 43 45 4c 4c 45 44 CARD_E_CANCELLED 2710: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 2720: 5f 45 5f 43 41 4e 54 5f 44 49 53 50 4f 53 45 3a _E_CANT_DISPOSE: 2730: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 2740: 44 5f 45 5f 43 41 4e 54 5f 44 49 53 50 4f 53 45 D_E_CANT_DISPOSE 2750: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 2760: 5f 45 5f 49 4e 53 55 46 46 49 43 49 45 4e 54 5f _E_INSUFFICIENT_ 2770: 42 55 46 46 45 52 3a 0a 09 09 09 72 65 74 75 72 BUFFER:....retur 2780: 6e 28 22 53 43 41 52 44 5f 45 5f 49 4e 53 55 46 n("SCARD_E_INSUF 2790: 46 49 43 49 45 4e 54 5f 42 55 46 46 45 52 22 29 FICIENT_BUFFER") 27a0: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 ;...case SCARD_E 27b0: 5f 49 4e 56 41 4c 49 44 5f 41 54 52 3a 0a 09 09 _INVALID_ATR:... 27c0: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 27d0: 5f 49 4e 56 41 4c 49 44 5f 41 54 52 22 29 3b 0a _INVALID_ATR");. 27e0: 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 49 ..case SCARD_E_I 27f0: 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 3a 0a 09 NVALID_HANDLE:.. 2800: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 2810: 45 5f 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 E_INVALID_HANDLE 2820: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 2830: 5f 45 5f 49 4e 56 41 4c 49 44 5f 50 41 52 41 4d _E_INVALID_PARAM 2840: 45 54 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 ETER:....return( 2850: 22 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 "SCARD_E_INVALID 2860: 5f 50 41 52 41 4d 45 54 45 52 22 29 3b 0a 09 09 _PARAMETER");... 2870: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 49 4e 56 case SCARD_E_INV 2880: 41 4c 49 44 5f 54 41 52 47 45 54 3a 0a 09 09 09 ALID_TARGET:.... 2890: 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f return("SCARD_E_ 28a0: 49 4e 56 41 4c 49 44 5f 54 41 52 47 45 54 22 29 INVALID_TARGET") 28b0: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 ;...case SCARD_E 28c0: 5f 49 4e 56 41 4c 49 44 5f 56 41 4c 55 45 3a 0a _INVALID_VALUE:. 28d0: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 28e0: 5f 45 5f 49 4e 56 41 4c 49 44 5f 56 41 4c 55 45 _E_INVALID_VALUE 28f0: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 2900: 5f 45 5f 4e 4f 5f 4d 45 4d 4f 52 59 3a 0a 09 09 _E_NO_MEMORY:... 2910: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 2920: 5f 4e 4f 5f 4d 45 4d 4f 52 59 22 29 3b 0a 09 09 _NO_MEMORY");... 2930: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 55 4e 4b case SCARD_E_UNK 2940: 4e 4f 57 4e 5f 52 45 41 44 45 52 3a 0a 09 09 09 NOWN_READER:.... 2950: 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f return("SCARD_E_ 2960: 55 4e 4b 4e 4f 57 4e 5f 52 45 41 44 45 52 22 29 UNKNOWN_READER") 2970: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 ;...case SCARD_E 2980: 5f 54 49 4d 45 4f 55 54 3a 0a 09 09 09 72 65 74 _TIMEOUT:....ret 2990: 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 54 49 4d urn("SCARD_E_TIM 29a0: 45 4f 55 54 22 29 3b 0a 09 09 63 61 73 65 20 53 EOUT");...case S 29b0: 43 41 52 44 5f 45 5f 53 48 41 52 49 4e 47 5f 56 CARD_E_SHARING_V 29c0: 49 4f 4c 41 54 49 4f 4e 3a 0a 09 09 09 72 65 74 IOLATION:....ret 29d0: 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 53 48 41 urn("SCARD_E_SHA 29e0: 52 49 4e 47 5f 56 49 4f 4c 41 54 49 4f 4e 22 29 RING_VIOLATION") 29f0: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 ;...case SCARD_E 2a00: 5f 4e 4f 5f 53 4d 41 52 54 43 41 52 44 3a 0a 09 _NO_SMARTCARD:.. 2a10: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 2a20: 45 5f 4e 4f 5f 53 4d 41 52 54 43 41 52 44 22 29 E_NO_SMARTCARD") 2a30: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 ;...case SCARD_E 2a40: 5f 55 4e 4b 4e 4f 57 4e 5f 43 41 52 44 3a 0a 09 _UNKNOWN_CARD:.. 2a50: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 2a60: 45 5f 55 4e 4b 4e 4f 57 4e 5f 43 41 52 44 22 29 E_UNKNOWN_CARD") 2a70: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 ;...case SCARD_E 2a80: 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 3a _PROTO_MISMATCH: 2a90: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 2aa0: 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 D_E_PROTO_MISMAT 2ab0: 43 48 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 CH");...case SCA 2ac0: 52 44 5f 45 5f 4e 4f 54 5f 52 45 41 44 59 3a 0a RD_E_NOT_READY:. 2ad0: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2ae0: 5f 45 5f 4e 4f 54 5f 52 45 41 44 59 22 29 3b 0a _E_NOT_READY");. 2af0: 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 53 ..case SCARD_E_S 2b00: 59 53 54 45 4d 5f 43 41 4e 43 45 4c 4c 45 44 3a YSTEM_CANCELLED: 2b10: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 2b20: 44 5f 45 5f 53 59 53 54 45 4d 5f 43 41 4e 43 45 D_E_SYSTEM_CANCE 2b30: 4c 4c 45 44 22 29 3b 0a 09 09 63 61 73 65 20 53 LLED");...case S 2b40: 43 41 52 44 5f 45 5f 4e 4f 54 5f 54 52 41 4e 53 CARD_E_NOT_TRANS 2b50: 41 43 54 45 44 3a 0a 09 09 09 72 65 74 75 72 6e ACTED:....return 2b60: 28 22 53 43 41 52 44 5f 45 5f 4e 4f 54 5f 54 52 ("SCARD_E_NOT_TR 2b70: 41 4e 53 41 43 54 45 44 22 29 3b 0a 09 09 63 61 ANSACTED");...ca 2b80: 73 65 20 53 43 41 52 44 5f 45 5f 52 45 41 44 45 se SCARD_E_READE 2b90: 52 5f 55 4e 41 56 41 49 4c 41 42 4c 45 3a 0a 09 R_UNAVAILABLE:.. 2ba0: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 2bb0: 45 5f 52 45 41 44 45 52 5f 55 4e 41 56 41 49 4c E_READER_UNAVAIL 2bc0: 41 42 4c 45 22 29 3b 0a 09 09 63 61 73 65 20 53 ABLE");...case S 2bd0: 43 41 52 44 5f 57 5f 55 4e 53 55 50 50 4f 52 54 CARD_W_UNSUPPORT 2be0: 45 44 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 ED_CARD:....retu 2bf0: 72 6e 28 22 53 43 41 52 44 5f 57 5f 55 4e 53 55 rn("SCARD_W_UNSU 2c00: 50 50 4f 52 54 45 44 5f 43 41 52 44 22 29 3b 0a PPORTED_CARD");. 2c10: 09 09 63 61 73 65 20 53 43 41 52 44 5f 57 5f 55 ..case SCARD_W_U 2c20: 4e 52 45 53 50 4f 4e 53 49 56 45 5f 43 41 52 44 NRESPONSIVE_CARD 2c30: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 :....return("SCA 2c40: 52 44 5f 57 5f 55 4e 52 45 53 50 4f 4e 53 49 56 RD_W_UNRESPONSIV 2c50: 45 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 E_CARD");...case 2c60: 20 53 43 41 52 44 5f 57 5f 55 4e 50 4f 57 45 52 SCARD_W_UNPOWER 2c70: 45 44 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 ED_CARD:....retu 2c80: 72 6e 28 22 53 43 41 52 44 5f 57 5f 55 4e 50 4f rn("SCARD_W_UNPO 2c90: 57 45 52 45 44 5f 43 41 52 44 22 29 3b 0a 09 09 WERED_CARD");... 2ca0: 63 61 73 65 20 53 43 41 52 44 5f 57 5f 52 45 53 case SCARD_W_RES 2cb0: 45 54 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 ET_CARD:....retu 2cc0: 72 6e 28 22 53 43 41 52 44 5f 57 5f 52 45 53 45 rn("SCARD_W_RESE 2cd0: 54 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 T_CARD");...case 2ce0: 20 53 43 41 52 44 5f 57 5f 52 45 4d 4f 56 45 44 SCARD_W_REMOVED 2cf0: 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 6e _CARD:....return 2d00: 28 22 53 43 41 52 44 5f 57 5f 52 45 4d 4f 56 45 ("SCARD_W_REMOVE 2d10: 44 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 D_CARD");...case 2d20: 20 53 43 41 52 44 5f 45 5f 50 43 49 5f 54 4f 4f SCARD_E_PCI_TOO 2d30: 5f 53 4d 41 4c 4c 3a 0a 09 09 09 72 65 74 75 72 _SMALL:....retur 2d40: 6e 28 22 53 43 41 52 44 5f 45 5f 50 43 49 5f 54 n("SCARD_E_PCI_T 2d50: 4f 4f 5f 53 4d 41 4c 4c 22 29 3b 0a 09 09 63 61 OO_SMALL");...ca 2d60: 73 65 20 53 43 41 52 44 5f 45 5f 52 45 41 44 45 se SCARD_E_READE 2d70: 52 5f 55 4e 53 55 50 50 4f 52 54 45 44 3a 0a 09 R_UNSUPPORTED:.. 2d80: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 2d90: 45 5f 52 45 41 44 45 52 5f 55 4e 53 55 50 50 4f E_READER_UNSUPPO 2da0: 52 54 45 44 22 29 3b 0a 09 09 63 61 73 65 20 53 RTED");...case S 2db0: 43 41 52 44 5f 45 5f 44 55 50 4c 49 43 41 54 45 CARD_E_DUPLICATE 2dc0: 5f 52 45 41 44 45 52 3a 0a 09 09 09 72 65 74 75 _READER:....retu 2dd0: 72 6e 28 22 53 43 41 52 44 5f 45 5f 44 55 50 4c rn("SCARD_E_DUPL 2de0: 49 43 41 54 45 5f 52 45 41 44 45 52 22 29 3b 0a ICATE_READER");. 2df0: 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 43 ..case SCARD_E_C 2e00: 41 52 44 5f 55 4e 53 55 50 50 4f 52 54 45 44 3a ARD_UNSUPPORTED: 2e10: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 2e20: 44 5f 45 5f 43 41 52 44 5f 55 4e 53 55 50 50 4f D_E_CARD_UNSUPPO 2e30: 52 54 45 44 22 29 3b 0a 09 09 63 61 73 65 20 53 RTED");...case S 2e40: 43 41 52 44 5f 45 5f 4e 4f 5f 53 45 52 56 49 43 CARD_E_NO_SERVIC 2e50: 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 E:....return("SC 2e60: 41 52 44 5f 45 5f 4e 4f 5f 53 45 52 56 49 43 45 ARD_E_NO_SERVICE 2e70: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 2e80: 5f 45 5f 53 45 52 56 49 43 45 5f 53 54 4f 50 50 _E_SERVICE_STOPP 2e90: 45 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 ED:....return("S 2ea0: 43 41 52 44 5f 45 5f 53 45 52 56 49 43 45 5f 53 CARD_E_SERVICE_S 2eb0: 54 4f 50 50 45 44 22 29 3b 0a 09 09 63 61 73 65 TOPPED");...case 2ec0: 20 53 43 41 52 44 5f 57 5f 49 4e 53 45 52 54 45 SCARD_W_INSERTE 2ed0: 44 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 D_CARD:....retur 2ee0: 6e 28 22 53 43 41 52 44 5f 57 5f 49 4e 53 45 52 n("SCARD_W_INSER 2ef0: 54 45 44 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 TED_CARD");...ca 2f00: 73 65 20 53 43 41 52 44 5f 45 5f 55 4e 53 55 50 se SCARD_E_UNSUP 2f10: 50 4f 52 54 45 44 5f 46 45 41 54 55 52 45 3a 0a PORTED_FEATURE:. 2f20: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2f30: 5f 45 5f 55 4e 53 55 50 50 4f 52 54 45 44 5f 46 _E_UNSUPPORTED_F 2f40: 45 41 54 55 52 45 22 29 3b 0a 23 69 66 64 65 66 EATURE");.#ifdef 2f50: 20 53 43 41 52 44 5f 45 5f 4e 4f 5f 52 45 41 44 SCARD_E_NO_READ 2f60: 45 52 53 5f 41 56 41 49 4c 41 42 4c 45 0a 09 09 ERS_AVAILABLE... 2f70: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 4e 4f 5f case SCARD_E_NO_ 2f80: 52 45 41 44 45 52 53 5f 41 56 41 49 4c 41 42 4c READERS_AVAILABL 2f90: 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 E:....return("SC 2fa0: 41 52 44 5f 45 5f 4e 4f 5f 52 45 41 44 45 52 53 ARD_E_NO_READERS 2fb0: 5f 41 56 41 49 4c 41 42 4c 45 22 29 3b 0a 23 65 _AVAILABLE");.#e 2fc0: 6e 64 69 66 0a 09 7d 0a 0a 09 72 65 74 75 72 6e ndif..}...return 2fd0: 28 22 55 4e 4b 4e 4f 57 4e 22 29 3b 0a 7d 0a 0a ("UNKNOWN");.}.. 2fe0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 static const cha 2ff0: 72 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 47 5f r *CACKEY_DEBUG_ 3000: 46 55 4e 43 5f 4f 42 4a 49 44 5f 54 4f 5f 53 54 FUNC_OBJID_TO_ST 3010: 52 28 75 69 6e 74 31 36 5f 74 20 6f 62 6a 69 64 R(uint16_t objid 3020: 29 20 7b 0a 09 73 77 69 74 63 68 20 28 6f 62 6a ) {..switch (obj 3030: 69 64 29 20 7b 0a 09 09 63 61 73 65 20 30 78 32 id) {...case 0x2 3040: 30 30 30 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 000:....return(" 3050: 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 CACKEY_TLV_OBJID 3060: 5f 47 45 4e 45 52 41 4c 49 4e 46 4f 22 29 3b 0a _GENERALINFO");. 3070: 09 09 63 61 73 65 20 30 78 32 31 30 30 3a 0a 09 ..case 0x2100:.. 3080: 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 ..return("CACKEY 3090: 5f 54 4c 56 5f 4f 42 4a 49 44 5f 50 52 4f 50 45 _TLV_OBJID_PROPE 30a0: 52 53 4f 4e 41 4c 49 4e 46 4f 22 29 3b 0a 09 09 RSONALINFO");... 30b0: 63 61 73 65 20 30 78 33 30 30 30 3a 0a 09 09 09 case 0x3000:.... 30c0: 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 return("CACKEY_T 30d0: 4c 56 5f 4f 42 4a 49 44 5f 41 43 43 45 53 53 43 LV_OBJID_ACCESSC 30e0: 4f 4e 54 52 4f 4c 22 29 3b 0a 09 09 63 61 73 65 ONTROL");...case 30f0: 20 30 78 34 30 30 30 3a 0a 09 09 09 72 65 74 75 0x4000:....retu 3100: 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f rn("CACKEY_TLV_O 3110: 42 4a 49 44 5f 4c 4f 47 49 4e 22 29 3b 0a 09 09 BJID_LOGIN");... 3120: 63 61 73 65 20 30 78 35 30 30 30 3a 0a 09 09 09 case 0x5000:.... 3130: 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 return("CACKEY_T 3140: 4c 56 5f 4f 42 4a 49 44 5f 43 41 52 44 49 4e 46 LV_OBJID_CARDINF 3150: 4f 22 29 3b 0a 09 09 63 61 73 65 20 30 78 36 30 O");...case 0x60 3160: 30 30 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 00:....return("C 3170: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 3180: 42 49 4f 4d 45 54 52 49 43 53 22 29 3b 0a 09 09 BIOMETRICS");... 3190: 63 61 73 65 20 30 78 37 30 30 30 3a 0a 09 09 09 case 0x7000:.... 31a0: 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 return("CACKEY_T 31b0: 4c 56 5f 4f 42 4a 49 44 5f 44 49 47 49 54 41 4c LV_OBJID_DIGITAL 31c0: 53 49 47 43 45 52 54 22 29 3b 0a 09 09 63 61 73 SIGCERT");...cas 31d0: 65 20 30 78 30 32 30 30 3a 0a 09 09 09 72 65 74 e 0x0200:....ret 31e0: 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f urn("CACKEY_TLV_ 31f0: 4f 42 4a 49 44 5f 43 41 43 5f 50 45 52 53 4f 4e OBJID_CAC_PERSON 3200: 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 32 30 ");...case 0x020 3210: 32 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 2:....return("CA 3220: 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 CKEY_TLV_OBJID_C 3230: 41 43 5f 42 45 4e 45 46 49 54 53 22 29 3b 0a 09 AC_BENEFITS");.. 3240: 09 63 61 73 65 20 30 78 30 32 30 33 3a 0a 09 09 .case 0x0203:... 3250: 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f .return("CACKEY_ 3260: 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 4f 54 TLV_OBJID_CAC_OT 3270: 48 45 52 42 45 4e 45 46 49 54 53 22 29 3b 0a 09 HERBENEFITS");.. 3280: 09 63 61 73 65 20 30 78 30 32 30 31 3a 0a 09 09 .case 0x0201:... 3290: 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f .return("CACKEY_ 32a0: 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 45 TLV_OBJID_CAC_PE 32b0: 52 53 4f 4e 4e 45 4c 22 29 3b 0a 09 09 63 61 73 RSONNEL");...cas 32c0: 65 20 30 78 30 32 46 45 3a 0a 09 09 09 72 65 74 e 0x02FE:....ret 32d0: 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f urn("CACKEY_TLV_ 32e0: 4f 42 4a 49 44 5f 43 41 43 5f 50 4b 49 43 45 52 OBJID_CAC_PKICER 32f0: 54 22 29 3b 0a 09 7d 0a 09 0a 09 72 65 74 75 72 T");..}....retur 3300: 6e 28 22 55 4e 4b 4e 4f 57 4e 22 29 3b 0a 7d 0a n("UNKNOWN");.}. 3310: 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 .static const ch 3320: 61 72 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 47 ar *CACKEY_DEBUG 3330: 5f 46 55 4e 43 5f 41 50 50 54 59 50 45 5f 54 4f _FUNC_APPTYPE_TO 3340: 5f 53 54 52 28 75 69 6e 74 38 5f 74 20 61 70 70 _STR(uint8_t app 3350: 74 79 70 65 29 20 7b 0a 09 73 77 69 74 63 68 20 type) {..switch 3360: 28 61 70 70 74 79 70 65 29 20 7b 0a 09 09 63 61 (apptype) {...ca 3370: 73 65 20 30 78 30 30 3a 0a 09 09 09 72 65 74 75 se 0x00:....retu 3380: 72 6e 28 22 4e 4f 4e 45 22 29 3b 0a 09 09 63 61 rn("NONE");...ca 3390: 73 65 20 30 78 30 31 3a 0a 09 09 09 72 65 74 75 se 0x01:....retu 33a0: 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 41 rn("CACKEY_TLV_A 33b0: 50 50 5f 47 45 4e 45 52 49 43 22 29 3b 0a 09 09 PP_GENERIC");... 33c0: 63 61 73 65 20 30 78 30 32 3a 0a 09 09 09 72 65 case 0x02:....re 33d0: 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 turn("CACKEY_TLV 33e0: 5f 41 50 50 5f 53 4b 49 22 29 3b 0a 09 09 63 61 _APP_SKI");...ca 33f0: 73 65 20 30 78 30 33 3a 0a 09 09 09 72 65 74 75 se 0x03:....retu 3400: 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 41 rn("CACKEY_TLV_A 3410: 50 50 5f 47 45 4e 45 52 49 43 20 7c 20 43 41 43 PP_GENERIC | CAC 3420: 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 53 4b 49 22 KEY_TLV_APP_SKI" 3430: 29 3b 0a 09 09 63 61 73 65 20 30 78 30 34 3a 0a );...case 0x04:. 3440: 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 ...return("CACKE 3450: 59 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 22 29 3b Y_TLV_APP_PKI"); 3460: 0a 09 09 63 61 73 65 20 30 78 30 35 3a 0a 09 09 ...case 0x05:... 3470: 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f .return("CACKEY_ 3480: 54 4c 56 5f 41 50 50 5f 47 45 4e 45 52 49 43 20 TLV_APP_GENERIC 3490: 7c 20 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 | CACKEY_TLV_APP 34a0: 5f 50 4b 49 22 29 3b 0a 09 09 63 61 73 65 20 30 _PKI");...case 0 34b0: 78 30 36 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 x06:....return(" 34c0: 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 53 CACKEY_TLV_APP_S 34d0: 4b 49 20 7c 20 43 41 43 4b 45 59 5f 54 4c 56 5f KI | CACKEY_TLV_ 34e0: 41 50 50 5f 50 4b 49 22 29 3b 0a 09 09 63 61 73 APP_PKI");...cas 34f0: 65 20 30 78 30 37 3a 0a 09 09 09 72 65 74 75 72 e 0x07:....retur 3500: 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 n("CACKEY_TLV_AP 3510: 50 5f 47 45 4e 45 52 49 43 20 7c 20 43 41 43 4b P_GENERIC | CACK 3520: 45 59 5f 54 4c 56 5f 41 50 50 5f 53 4b 49 20 7c EY_TLV_APP_SKI | 3530: 20 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f CACKEY_TLV_APP_ 3540: 50 4b 49 22 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 PKI");..}...retu 3550: 72 6e 28 22 49 4e 56 41 4c 49 44 22 29 3b 0a 7d rn("INVALID");.} 3560: 0a 0a 23 20 20 64 65 66 69 6e 65 20 6d 61 6c 6c ..# define mall 3570: 6f 63 28 78 29 20 43 41 43 4b 45 59 5f 44 45 42 oc(x) CACKEY_DEB 3580: 55 47 5f 46 55 4e 43 5f 4d 41 4c 4c 4f 43 28 78 UG_FUNC_MALLOC(x 3590: 2c 20 5f 5f 66 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 , __func__, __LI 35a0: 4e 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 NE__).# define 35b0: 72 65 61 6c 6c 6f 63 28 78 2c 20 79 29 20 43 41 realloc(x, y) CA 35c0: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 35d0: 52 45 41 4c 4c 4f 43 28 78 2c 20 79 2c 20 5f 5f REALLOC(x, y, __ 35e0: 66 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 4e 45 5f 5f func__, __LINE__ 35f0: 29 0a 23 20 20 69 66 64 65 66 20 73 74 72 64 75 ).# ifdef strdu 3600: 70 0a 23 20 20 20 20 75 6e 64 65 66 20 73 74 72 p.# undef str 3610: 64 75 70 0a 23 20 20 65 6e 64 69 66 0a 23 20 20 dup.# endif.# 3620: 64 65 66 69 6e 65 20 73 74 72 64 75 70 28 78 29 define strdup(x) 3630: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 CACKEY_DEBUG_FU 3640: 4e 43 5f 53 54 52 44 55 50 28 78 2c 20 5f 5f 66 NC_STRDUP(x, __f 3650: 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 4e 45 5f 5f 29 unc__, __LINE__) 3660: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 .#else.# define 3670: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 CACKEY_DEBUG_PR 3680: 49 4e 54 46 28 78 2e 2e 2e 29 20 2f 2a 2a 2f 0a INTF(x...) /**/. 3690: 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 # define CACKEY 36a0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 _DEBUG_PRINTBUF( 36b0: 66 2c 20 78 2c 20 79 29 20 2f 2a 2a 2f 0a 23 20 f, x, y) /**/.# 36c0: 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 define CACKEY_D 36d0: 45 42 55 47 5f 50 45 52 52 4f 52 28 78 29 20 2f EBUG_PERROR(x) / 36e0: 2a 2a 2f 0a 23 20 20 64 65 66 69 6e 65 20 43 41 **/.# define CA 36f0: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 3700: 54 41 47 5f 54 4f 5f 53 54 52 28 78 29 20 22 44 TAG_TO_STR(x) "D 3710: 45 42 55 47 5f 44 49 53 41 42 4c 45 44 22 0a 23 EBUG_DISABLED".# 3720: 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f define CACKEY_ 3730: 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 DEBUG_FUNC_SCARD 3740: 45 52 52 5f 54 4f 5f 53 54 52 28 78 29 20 22 44 ERR_TO_STR(x) "D 3750: 45 42 55 47 5f 44 49 53 41 42 4c 45 44 22 0a 23 EBUG_DISABLED".# 3760: 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f define CACKEY_ 3770: 44 45 42 55 47 5f 46 55 4e 43 5f 4f 42 4a 49 44 DEBUG_FUNC_OBJID 3780: 5f 54 4f 5f 53 54 52 28 78 29 20 22 44 45 42 55 _TO_STR(x) "DEBU 3790: 47 5f 44 49 53 41 42 4c 45 44 22 0a 23 20 20 64 G_DISABLED".# d 37a0: 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 efine CACKEY_DEB 37b0: 55 47 5f 46 55 4e 43 5f 41 50 50 54 59 50 45 5f UG_FUNC_APPTYPE_ 37c0: 54 4f 5f 53 54 52 28 78 29 20 22 44 45 42 55 47 TO_STR(x) "DEBUG 37d0: 5f 44 49 53 41 42 4c 45 44 22 0a 23 65 6e 64 69 _DISABLED".#endi 37e0: 66 0a 0a 73 74 72 75 63 74 20 63 61 63 6b 65 79 f..struct cackey 37f0: 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 7b _pcsc_identity { 3800: 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 ..unsigned char 3810: 61 70 70 6c 65 74 5b 37 5d 3b 0a 09 75 69 6e 74 applet[7];..uint 3820: 31 36 5f 74 20 66 69 6c 65 3b 0a 0a 09 73 69 7a 16_t file;...siz 3830: 65 5f 74 20 63 65 72 74 69 66 69 63 61 74 65 5f e_t certificate_ 3840: 6c 65 6e 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 len;..unsigned c 3850: 68 61 72 20 2a 63 65 72 74 69 66 69 63 61 74 65 har *certificate 3860: 3b 0a 0a 09 73 73 69 7a 65 5f 74 20 6b 65 79 73 ;...ssize_t keys 3870: 69 7a 65 3b 0a 7d 3b 0a 0a 73 74 72 75 63 74 20 ize;.};..struct 3880: 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 cackey_identity 3890: 7b 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 {..struct cackey 38a0: 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 2a _pcsc_identity * 38b0: 70 63 73 63 5f 69 64 65 6e 74 69 74 79 3b 0a 0a pcsc_identity;.. 38c0: 09 43 4b 5f 41 54 54 52 49 42 55 54 45 20 2a 61 .CK_ATTRIBUTE *a 38d0: 74 74 72 69 62 75 74 65 73 3b 0a 09 43 4b 5f 55 ttributes;..CK_U 38e0: 4c 4f 4e 47 20 61 74 74 72 69 62 75 74 65 73 5f LONG attributes_ 38f0: 63 6f 75 6e 74 3b 0a 7d 3b 0a 0a 73 74 72 75 63 count;.};..struc 3900: 74 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e t cackey_session 3910: 20 7b 0a 09 69 6e 74 20 61 63 74 69 76 65 3b 0a {..int active;. 3920: 0a 09 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f ..CK_SLOT_ID slo 3930: 74 49 44 3b 0a 0a 09 43 4b 5f 53 54 41 54 45 20 tID;...CK_STATE 3940: 73 74 61 74 65 3b 0a 09 43 4b 5f 46 4c 41 47 53 state;..CK_FLAGS 3950: 20 66 6c 61 67 73 3b 0a 09 43 4b 5f 55 4c 4f 4e flags;..CK_ULON 3960: 47 20 75 6c 44 65 76 69 63 65 45 72 72 6f 72 3b G ulDeviceError; 3970: 0a 09 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 41 ..CK_VOID_PTR pA 3980: 70 70 6c 69 63 61 74 69 6f 6e 3b 0a 09 43 4b 5f pplication;..CK_ 3990: 4e 4f 54 49 46 59 20 4e 6f 74 69 66 79 3b 0a 0a NOTIFY Notify;.. 39a0: 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 69 .struct cackey_i 39b0: 64 65 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 74 dentity *identit 39c0: 69 65 73 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c ies;..unsigned l 39d0: 6f 6e 67 20 69 64 65 6e 74 69 74 69 65 73 5f 63 ong identities_c 39e0: 6f 75 6e 74 3b 0a 0a 09 69 6e 74 20 73 65 61 72 ount;...int sear 39f0: 63 68 5f 61 63 74 69 76 65 3b 0a 09 43 4b 5f 41 ch_active;..CK_A 3a00: 54 54 52 49 42 55 54 45 5f 50 54 52 20 73 65 61 TTRIBUTE_PTR sea 3a10: 72 63 68 5f 71 75 65 72 79 3b 0a 09 43 4b 5f 55 rch_query;..CK_U 3a20: 4c 4f 4e 47 20 73 65 61 72 63 68 5f 71 75 65 72 LONG search_quer 3a30: 79 5f 63 6f 75 6e 74 3b 0a 09 75 6e 73 69 67 6e y_count;..unsign 3a40: 65 64 20 6c 6f 6e 67 20 73 65 61 72 63 68 5f 63 ed long search_c 3a50: 75 72 72 5f 69 64 3b 0a 0a 09 69 6e 74 20 73 69 urr_id;...int si 3a60: 67 6e 5f 61 63 74 69 76 65 3b 0a 09 43 4b 5f 4d gn_active;..CK_M 3a70: 45 43 48 41 4e 49 53 4d 5f 54 59 50 45 20 73 69 ECHANISM_TYPE si 3a80: 67 6e 5f 6d 65 63 68 61 6e 69 73 6d 3b 0a 09 43 gn_mechanism;..C 3a90: 4b 5f 42 59 54 45 5f 50 54 52 20 73 69 67 6e 5f K_BYTE_PTR sign_ 3aa0: 62 75 66 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c buf;..unsigned l 3ab0: 6f 6e 67 20 73 69 67 6e 5f 62 75 66 6c 65 6e 3b ong sign_buflen; 3ac0: 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 ..unsigned long 3ad0: 73 69 67 6e 5f 62 75 66 75 73 65 64 3b 0a 09 73 sign_bufused;..s 3ae0: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 69 64 65 truct cackey_ide 3af0: 6e 74 69 74 79 20 2a 73 69 67 6e 5f 69 64 65 6e ntity *sign_iden 3b00: 74 69 74 79 3b 0a 0a 09 69 6e 74 20 64 65 63 72 tity;...int decr 3b10: 79 70 74 5f 61 63 74 69 76 65 3b 0a 09 43 4b 5f ypt_active;..CK_ 3b20: 4d 45 43 48 41 4e 49 53 4d 5f 54 59 50 45 20 64 MECHANISM_TYPE d 3b30: 65 63 72 79 70 74 5f 6d 65 63 68 61 6e 69 73 6d ecrypt_mechanism 3b40: 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 54 52 20 64 ;..CK_VOID_PTR d 3b50: 65 63 72 79 70 74 5f 6d 65 63 68 5f 70 61 72 6d ecrypt_mech_parm 3b60: 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 64 65 63 72 ;..CK_ULONG decr 3b70: 79 70 74 5f 6d 65 63 68 5f 70 61 72 6d 6c 65 6e ypt_mech_parmlen 3b80: 3b 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 ;..struct cackey 3b90: 5f 69 64 65 6e 74 69 74 79 20 2a 64 65 63 72 79 _identity *decry 3ba0: 70 74 5f 69 64 65 6e 74 69 74 79 3b 0a 7d 3b 0a pt_identity;.};. 3bb0: 0a 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 .struct cackey_s 3bc0: 6c 6f 74 20 7b 0a 09 69 6e 74 20 61 63 74 69 76 lot {..int activ 3bd0: 65 3b 0a 0a 09 63 68 61 72 20 2a 70 63 73 63 5f e;...char *pcsc_ 3be0: 72 65 61 64 65 72 3b 0a 0a 09 69 6e 74 20 70 63 reader;...int pc 3bf0: 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 sc_card_connecte 3c00: 64 3b 0a 09 53 43 41 52 44 48 41 4e 44 4c 45 20 d;..SCARDHANDLE 3c10: 70 63 73 63 5f 63 61 72 64 3b 0a 0a 09 69 6e 74 pcsc_card;...int 3c20: 20 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 70 transaction_dep 3c30: 74 68 3b 0a 0a 09 69 6e 74 20 73 6c 6f 74 5f 72 th;...int slot_r 3c40: 65 73 65 74 3b 0a 0a 09 43 4b 5f 46 4c 41 47 53 eset;...CK_FLAGS 3c50: 20 74 6f 6b 65 6e 5f 66 6c 61 67 73 3b 0a 0a 09 token_flags;... 3c60: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 6c unsigned char *l 3c70: 61 62 65 6c 3b 0a 7d 3b 0a 0a 74 79 70 65 64 65 abel;.};..typede 3c80: 66 20 65 6e 75 6d 20 7b 0a 09 43 41 43 4b 45 59 f enum {..CACKEY 3c90: 5f 54 4c 56 5f 41 50 50 5f 47 45 4e 45 52 49 43 _TLV_APP_GENERIC 3ca0: 20 3d 20 30 78 30 31 2c 0a 09 43 41 43 4b 45 59 = 0x01,..CACKEY 3cb0: 5f 54 4c 56 5f 41 50 50 5f 53 4b 49 20 20 20 20 _TLV_APP_SKI 3cc0: 20 3d 20 30 78 30 32 2c 0a 09 43 41 43 4b 45 59 = 0x02,..CACKEY 3cd0: 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 20 20 20 20 _TLV_APP_PKI 3ce0: 20 3d 20 30 78 30 34 0a 7d 20 63 61 63 6b 65 79 = 0x04.} cackey 3cf0: 5f 74 6c 76 5f 61 70 70 74 79 70 65 3b 0a 0a 74 _tlv_apptype;..t 3d00: 79 70 65 64 65 66 20 65 6e 75 6d 20 7b 0a 09 43 ypedef enum {..C 3d10: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 3d20: 47 45 4e 45 52 41 4c 49 4e 46 4f 20 20 20 20 20 GENERALINFO 3d30: 20 20 3d 20 30 78 32 30 30 30 2c 0a 09 43 41 43 = 0x2000,..CAC 3d40: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 50 52 KEY_TLV_OBJID_PR 3d50: 4f 50 45 52 53 4f 4e 41 4c 49 4e 46 4f 20 20 20 OPERSONALINFO 3d60: 3d 20 30 78 32 31 30 30 2c 0a 09 43 41 43 4b 45 = 0x2100,..CACKE 3d70: 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 41 43 43 45 Y_TLV_OBJID_ACCE 3d80: 53 53 43 4f 4e 54 52 4f 4c 20 20 20 20 20 3d 20 SSCONTROL = 3d90: 30 78 33 30 30 30 2c 0a 09 43 41 43 4b 45 59 5f 0x3000,..CACKEY_ 3da0: 54 4c 56 5f 4f 42 4a 49 44 5f 4c 4f 47 49 4e 20 TLV_OBJID_LOGIN 3db0: 20 20 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 = 0x 3dc0: 34 30 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 4000,..CACKEY_TL 3dd0: 56 5f 4f 42 4a 49 44 5f 43 41 52 44 49 4e 46 4f V_OBJID_CARDINFO 3de0: 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 35 30 = 0x50 3df0: 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 00,..CACKEY_TLV_ 3e00: 4f 42 4a 49 44 5f 42 49 4f 4d 45 54 52 49 43 53 OBJID_BIOMETRICS 3e10: 20 20 20 20 20 20 20 20 3d 20 30 78 36 30 30 30 = 0x6000 3e20: 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 ,..CACKEY_TLV_OB 3e30: 4a 49 44 5f 44 49 47 49 54 41 4c 53 49 47 43 45 JID_DIGITALSIGCE 3e40: 52 54 20 20 20 20 3d 20 30 78 37 30 30 30 2c 0a RT = 0x7000,. 3e50: 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 .CACKEY_TLV_OBJI 3e60: 44 5f 43 41 43 5f 50 45 52 53 4f 4e 20 20 20 20 D_CAC_PERSON 3e70: 20 20 20 20 3d 20 30 78 30 32 30 30 2c 0a 09 43 = 0x0200,..C 3e80: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 3e90: 43 41 43 5f 42 45 4e 45 46 49 54 53 20 20 20 20 CAC_BENEFITS 3ea0: 20 20 3d 20 30 78 30 32 30 32 2c 0a 09 43 41 43 = 0x0202,..CAC 3eb0: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 KEY_TLV_OBJID_CA 3ec0: 43 5f 4f 54 48 45 52 42 45 4e 45 46 49 54 53 20 C_OTHERBENEFITS 3ed0: 3d 20 30 78 30 32 30 33 2c 0a 09 43 41 43 4b 45 = 0x0203,..CACKE 3ee0: 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f Y_TLV_OBJID_CAC_ 3ef0: 50 45 52 53 4f 4e 4e 45 4c 20 20 20 20 20 3d 20 PERSONNEL = 3f00: 30 78 30 32 30 31 2c 0a 09 43 41 43 4b 45 59 5f 0x0201,..CACKEY_ 3f10: 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 4b TLV_OBJID_CAC_PK 3f20: 49 43 45 52 54 20 20 20 20 20 20 20 3d 20 30 78 ICERT = 0x 3f30: 30 32 46 45 0a 7d 20 63 61 63 6b 65 79 5f 74 6c 02FE.} cackey_tl 3f40: 76 5f 6f 62 6a 65 63 74 69 64 3b 0a 0a 74 79 70 v_objectid;..typ 3f50: 65 64 65 66 20 65 6e 75 6d 20 7b 0a 09 43 41 43 edef enum {..CAC 3f60: 4b 45 59 5f 50 43 53 43 5f 53 5f 54 4f 4b 45 4e KEY_PCSC_S_TOKEN 3f70: 50 52 45 53 45 4e 54 20 20 20 20 3d 20 31 2c 0a PRESENT = 1,. 3f80: 09 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f .CACKEY_PCSC_S_O 3f90: 4b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d K = 3fa0: 20 30 2c 0a 09 43 41 43 4b 45 59 5f 50 43 53 43 0,..CACKEY_PCSC 3fb0: 5f 45 5f 47 45 4e 45 52 49 43 20 20 20 20 20 20 _E_GENERIC 3fc0: 20 20 20 3d 20 2d 31 2c 0a 09 43 41 43 4b 45 59 = -1,..CACKEY 3fd0: 5f 50 43 53 43 5f 45 5f 42 41 44 50 49 4e 20 20 _PCSC_E_BADPIN 3fe0: 20 20 20 20 20 20 20 20 3d 20 2d 32 2c 0a 09 43 = -2,..C 3ff0: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 4c 4f 43 ACKEY_PCSC_E_LOC 4000: 4b 45 44 20 20 20 20 20 20 20 20 20 20 3d 20 2d KED = - 4010: 33 2c 0a 09 43 41 43 4b 45 59 5f 50 43 53 43 5f 3,..CACKEY_PCSC_ 4020: 45 5f 4e 45 45 44 4c 4f 47 49 4e 20 20 20 20 20 E_NEEDLOGIN 4030: 20 20 3d 20 2d 34 2c 0a 09 43 41 43 4b 45 59 5f = -4,..CACKEY_ 4040: 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 PCSC_E_TOKENABSE 4050: 4e 54 20 20 20 20 20 3d 20 2d 36 0a 7d 20 63 61 NT = -6.} ca 4060: 63 6b 65 79 5f 72 65 74 3b 0a 0a 73 74 72 75 63 ckey_ret;..struc 4070: 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 63 61 72 t cackey_tlv_car 4080: 64 75 72 6c 20 7b 0a 09 75 6e 73 69 67 6e 65 64 durl {..unsigned 4090: 20 63 68 61 72 20 20 20 20 20 20 20 20 72 69 64 char rid 40a0: 5b 35 5d 3b 0a 09 63 61 63 6b 65 79 5f 74 6c 76 [5];..cackey_tlv 40b0: 5f 61 70 70 74 79 70 65 20 20 20 61 70 70 74 79 _apptype appty 40c0: 70 65 3b 0a 09 63 61 63 6b 65 79 5f 74 6c 76 5f pe;..cackey_tlv_ 40d0: 6f 62 6a 65 63 74 69 64 20 20 6f 62 6a 65 63 74 objectid object 40e0: 69 64 3b 0a 09 63 61 63 6b 65 79 5f 74 6c 76 5f id;..cackey_tlv_ 40f0: 6f 62 6a 65 63 74 69 64 20 20 61 70 70 69 64 3b objectid appid; 4100: 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 ..unsigned char 4110: 20 20 20 20 20 20 20 70 69 6e 69 64 3b 0a 7d 3b pinid;.}; 4120: 0a 0a 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f ..struct cackey_ 4130: 74 6c 76 5f 65 6e 74 69 74 79 3b 0a 73 74 72 75 tlv_entity;.stru 4140: 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e ct cackey_tlv_en 4150: 74 69 74 79 20 7b 0a 09 75 69 6e 74 38 5f 74 20 tity {..uint8_t 4160: 74 61 67 3b 0a 09 73 69 7a 65 5f 74 20 6c 65 6e tag;..size_t len 4170: 67 74 68 3b 0a 0a 09 75 6e 69 6f 6e 20 7b 0a 09 gth;...union {.. 4180: 09 76 6f 69 64 20 2a 76 61 6c 75 65 3b 0a 09 09 .void *value;... 4190: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c struct cackey_tl 41a0: 76 5f 63 61 72 64 75 72 6c 20 2a 76 61 6c 75 65 v_cardurl *value 41b0: 5f 63 61 72 64 75 72 6c 3b 0a 09 09 75 69 6e 74 _cardurl;...uint 41c0: 38 5f 74 20 76 61 6c 75 65 5f 62 79 74 65 3b 0a 8_t value_byte;. 41d0: 09 7d 3b 0a 0a 09 73 74 72 75 63 74 20 63 61 63 .};...struct cac 41e0: 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a key_tlv_entity * 41f0: 5f 6e 65 78 74 3b 0a 7d 3b 0a 0a 2f 2a 20 43 41 _next;.};../* CA 4200: 43 4b 45 59 20 47 6c 6f 62 61 6c 20 48 61 6e 64 CKEY Global Hand 4210: 6c 65 73 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f les */.static vo 4220: 69 64 20 2a 63 61 63 6b 65 79 5f 62 69 67 6c 6f id *cackey_biglo 4230: 63 6b 20 3d 20 4e 55 4c 4c 3b 0a 73 74 61 74 69 ck = NULL;.stati 4240: 63 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f c struct cackey_ 4250: 73 65 73 73 69 6f 6e 20 63 61 63 6b 65 79 5f 73 session cackey_s 4260: 65 73 73 69 6f 6e 73 5b 31 32 38 5d 3b 0a 73 74 essions[128];.st 4270: 61 74 69 63 20 73 74 72 75 63 74 20 63 61 63 6b atic struct cack 4280: 65 79 5f 73 6c 6f 74 20 63 61 63 6b 65 79 5f 73 ey_slot cackey_s 4290: 6c 6f 74 73 5b 31 32 38 5d 3b 0a 73 74 61 74 69 lots[128];.stati 42a0: 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 69 6e 69 c int cackey_ini 42b0: 74 69 61 6c 69 7a 65 64 20 3d 20 30 3b 0a 73 74 tialized = 0;.st 42c0: 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f atic int cackey_ 42d0: 62 69 67 6c 6f 63 6b 5f 69 6e 69 74 20 3d 20 30 biglock_init = 0 42e0: 3b 0a 43 4b 5f 43 5f 49 4e 49 54 49 41 4c 49 5a ;.CK_C_INITIALIZ 42f0: 45 5f 41 52 47 53 20 63 61 63 6b 65 79 5f 61 72 E_ARGS cackey_ar 4300: 67 73 3b 0a 0a 2f 2a 20 50 43 53 43 20 47 6c 6f gs;../* PCSC Glo 4310: 62 61 6c 20 48 61 6e 64 6c 65 73 20 2a 2f 0a 73 bal Handles */.s 4320: 74 61 74 69 63 20 4c 50 53 43 41 52 44 43 4f 4e tatic LPSCARDCON 4330: 54 45 58 54 20 63 61 63 6b 65 79 5f 70 63 73 63 TEXT cackey_pcsc 4340: 5f 68 61 6e 64 6c 65 20 3d 20 4e 55 4c 4c 3b 0a _handle = NULL;. 4350: 0a 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 .static unsigned 4360: 20 6c 6f 6e 67 20 63 61 63 6b 65 79 5f 67 65 74 long cackey_get 4370: 76 65 72 73 69 6f 6e 28 76 6f 69 64 29 20 7b 0a version(void) {. 4380: 09 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 .static unsigned 4390: 20 6c 6f 6e 67 20 72 65 74 76 61 6c 20 3d 20 32 long retval = 2 43a0: 35 35 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 55;..unsigned lo 43b0: 6e 67 20 6d 61 6a 6f 72 20 3d 20 30 3b 0a 09 75 ng major = 0;..u 43c0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6d 69 6e nsigned long min 43d0: 6f 72 20 3d 20 30 3b 0a 09 63 68 61 72 20 2a 6d or = 0;..char *m 43e0: 61 6a 6f 72 5f 73 74 72 20 3d 20 4e 55 4c 4c 3b ajor_str = NULL; 43f0: 0a 09 63 68 61 72 20 2a 6d 69 6e 6f 72 5f 73 74 ..char *minor_st 4400: 72 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 43 41 43 4b r = NULL;...CACK 4410: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 4420: 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 4430: 20 28 72 65 74 76 61 6c 20 21 3d 20 32 35 35 29 (retval != 255) 4440: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 4450: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 4460: 69 6e 67 20 30 78 25 6c 78 20 28 63 61 63 68 65 ing 0x%lx (cache 4470: 64 29 2e 22 2c 20 72 65 74 76 61 6c 29 3b 0a 0a d).", retval);.. 4480: 09 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 ..return(retval) 4490: 3b 0a 09 7d 0a 0a 09 72 65 74 76 61 6c 20 3d 20 ;..}...retval = 44a0: 30 3b 0a 0a 23 69 66 64 65 66 20 50 41 43 4b 41 0;..#ifdef PACKA 44b0: 47 45 5f 56 45 52 53 49 4f 4e 0a 20 20 20 20 20 GE_VERSION. 44c0: 20 20 20 6d 61 6a 6f 72 5f 73 74 72 20 3d 20 50 major_str = P 44d0: 41 43 4b 41 47 45 5f 56 45 52 53 49 4f 4e 3b 0a ACKAGE_VERSION;. 44e0: 09 69 66 20 28 6d 61 6a 6f 72 5f 73 74 72 29 20 .if (major_str) 44f0: 7b 0a 09 20 20 20 20 20 20 20 20 6d 61 6a 6f 72 {.. major 4500: 20 3d 20 73 74 72 74 6f 75 6c 28 6d 61 6a 6f 72 = strtoul(major 4510: 5f 73 74 72 2c 20 26 6d 69 6e 6f 72 5f 73 74 72 _str, &minor_str 4520: 2c 20 31 30 29 3b 0a 0a 09 09 69 66 20 28 6d 69 , 10);....if (mi 4530: 6e 6f 72 5f 73 74 72 29 20 7b 0a 09 09 09 6d 69 nor_str) {....mi 4540: 6e 6f 72 20 3d 20 73 74 72 74 6f 75 6c 28 6d 69 nor = strtoul(mi 4550: 6e 6f 72 5f 73 74 72 20 2b 20 31 2c 20 4e 55 4c nor_str + 1, NUL 4560: 4c 2c 20 31 30 29 3b 0a 09 09 7d 0a 09 7d 0a 0a L, 10);...}..}.. 4570: 09 72 65 74 76 61 6c 20 3d 20 28 6d 61 6a 6f 72 .retval = (major 4580: 20 3c 3c 20 31 36 29 20 7c 20 28 6d 69 6e 6f 72 << 16) | (minor 4590: 20 3c 3c 20 38 29 3b 0a 23 65 6e 64 69 66 0a 0a << 8);.#endif.. 45a0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 45b0: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 45c0: 30 78 25 6c 78 22 2c 20 72 65 74 76 61 6c 29 3b 0x%lx", retval); 45d0: 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c ...return(retval 45e0: 29 3b 0a 7d 0a 0a 2f 2a 20 50 43 2f 53 43 20 52 );.}../* PC/SC R 45f0: 65 6c 61 74 65 64 20 46 75 6e 63 74 69 6f 6e 73 elated Functions 4600: 20 2a 2f 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 */./*. * SYNPOS 4610: 49 53 0a 20 2a 20 20 20 20 20 76 6f 69 64 20 63 IS. * void c 4620: 61 63 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 ackey_slots_disc 4630: 6f 6e 6e 65 63 74 5f 61 6c 6c 28 76 6f 69 64 29 onnect_all(void) 4640: 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 ;. *. * ARGUMENT 4650: 53 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a S. * None. * 4660: 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 . * RETURN VALUE 4670: 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a . * None. *. 4680: 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 * NOTES. * 4690: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 64 69 This function di 46a0: 73 63 6f 6e 6e 65 63 74 73 20 66 72 6f 6d 20 61 sconnects from a 46b0: 6c 6c 20 63 61 72 64 73 2e 0a 20 2a 0a 20 2a 2f ll cards.. *. */ 46c0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 61 63 .static void cac 46d0: 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e key_slots_discon 46e0: 6e 65 63 74 5f 61 6c 6c 28 76 6f 69 64 29 20 7b nect_all(void) { 46f0: 0a 09 75 69 6e 74 33 32 5f 74 20 69 64 78 3b 0a ..uint32_t idx;. 4700: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 4710: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 4720: 3b 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 ;...for (idx = 0 4730: 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 ; idx < (sizeof( 4740: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 cackey_slots) / 4750: 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c sizeof(cackey_sl 4760: 6f 74 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 ots[0])); idx++) 4770: 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f {...if (cackey_ 4780: 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f slots[idx].pcsc_ 4790: 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 29 20 card_connected) 47a0: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU 47b0: 47 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 44 G_PRINTF("SCardD 47c0: 69 73 63 6f 6e 6e 65 63 74 28 25 6c 75 29 20 63 isconnect(%lu) c 47d0: 61 6c 6c 65 64 22 2c 20 28 75 6e 73 69 67 6e 65 alled", (unsigne 47e0: 64 20 6c 6f 6e 67 29 20 69 64 78 29 3b 0a 0a 09 d long) idx);... 47f0: 09 09 53 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 ..SCardDisconnec 4800: 74 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 t(cackey_slots[i 4810: 64 78 5d 2e 70 63 73 63 5f 63 61 72 64 2c 20 53 dx].pcsc_card, S 4820: 43 41 52 44 5f 4c 45 41 56 45 5f 43 41 52 44 29 CARD_LEAVE_CARD) 4830: 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 63 61 63 ;...}....if (cac 4840: 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 6c key_slots[idx].l 4850: 61 62 65 6c 29 20 7b 0a 09 09 09 66 72 65 65 28 abel) {....free( 4860: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx 4870: 5d 2e 6c 61 62 65 6c 29 3b 0a 0a 09 09 09 63 61 ].label);.....ca 4880: 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e ckey_slots[idx]. 4890: 6c 61 62 65 6c 20 3d 20 4e 55 4c 4c 3b 0a 09 09 label = NULL;... 48a0: 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 }....cackey_slot 48b0: 73 5b 69 64 78 5d 2e 70 63 73 63 5f 63 61 72 64 s[idx].pcsc_card 48c0: 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a _connected = 0;. 48d0: 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 ..cackey_slots[i 48e0: 64 78 5d 2e 74 72 61 6e 73 61 63 74 69 6f 6e 5f dx].transaction_ 48f0: 64 65 70 74 68 20 3d 20 30 3b 0a 0a 09 09 69 66 depth = 0;....if 4900: 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 (cackey_slots[i 4910: 64 78 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 dx].active) {... 4920: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 4930: 49 4e 54 46 28 22 4d 61 72 6b 69 6e 67 20 61 63 INTF("Marking ac 4940: 74 69 76 65 20 73 6c 6f 74 20 25 6c 75 20 61 73 tive slot %lu as 4950: 20 62 65 69 6e 67 20 72 65 73 65 74 22 2c 20 28 being reset", ( 4960: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 69 unsigned long) i 4970: 64 78 29 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 6b dx);...}....cack 4980: 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 73 6c ey_slots[idx].sl 4990: 6f 74 5f 72 65 73 65 74 20 3d 20 31 3b 0a 09 7d ot_reset = 1;..} 49a0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 49b0: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 49c0: 67 22 29 3b 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d g");...return;.} 49d0: 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 ../*. * SYNPOSIS 49e0: 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 72 . * cackey_r 49f0: 65 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 63 et cackey_pcsc_c 4a00: 6f 6e 6e 65 63 74 28 76 6f 69 64 29 3b 0a 20 2a onnect(void);. * 4a10: 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a . * ARGUMENTS. * 4a20: 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a 20 None. *. * 4a30: 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 RETURN VALUE. * 4a40: 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f CACKEY_PCSC_ 4a50: 53 5f 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e 20 S_OK On 4a60: 73 75 63 63 65 73 73 0a 20 2a 20 20 20 20 20 43 success. * C 4a70: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e ACKEY_PCSC_E_GEN 4a80: 45 52 49 43 20 20 20 20 4f 6e 20 65 72 72 6f 72 ERIC On error 4a90: 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 . *. * NOTES. * 4aa0: 20 20 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f This functio 4ab0: 6e 20 63 6f 6e 6e 65 63 74 73 20 74 6f 20 74 68 n connects to th 4ac0: 65 20 50 43 2f 53 43 20 43 6f 6e 6e 65 63 74 69 e PC/SC Connecti 4ad0: 6f 6e 20 4d 61 6e 61 67 65 72 20 61 6e 64 20 75 on Manager and u 4ae0: 70 64 61 74 65 73 20 74 68 65 0a 20 2a 20 20 20 pdates the. * 4af0: 20 20 67 6c 6f 62 61 6c 20 68 61 6e 64 6c 65 2e global handle. 4b00: 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63 . *. */.static c 4b10: 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 ackey_ret cackey 4b20: 5f 70 63 73 63 5f 63 6f 6e 6e 65 63 74 28 76 6f _pcsc_connect(vo 4b30: 69 64 29 20 7b 0a 09 4c 4f 4e 47 20 73 63 61 72 id) {..LONG scar 4b40: 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 d_est_context_re 4b50: 74 3b 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 t;.#ifdef HAVE_S 4b60: 43 41 52 44 49 53 56 41 4c 49 44 43 4f 4e 54 45 CARDISVALIDCONTE 4b70: 58 54 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f 69 XT..LONG scard_i 4b80: 73 76 61 6c 69 64 5f 72 65 74 3b 0a 23 65 6e 64 svalid_ret;.#end 4b90: 69 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 if...CACKEY_DEBU 4ba0: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 4bb0: 2e 22 29 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 .");...if (cacke 4bc0: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 3d y_pcsc_handle == 4bd0: 20 4e 55 4c 4c 29 20 7b 0a 09 09 63 61 63 6b 65 NULL) {...cacke 4be0: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 20 y_pcsc_handle = 4bf0: 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 malloc(sizeof(*c 4c00: 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c ackey_pcsc_handl 4c10: 65 29 29 3b 0a 09 09 69 66 20 28 63 61 63 6b 65 e));...if (cacke 4c20: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 3d y_pcsc_handle == 4c30: 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 43 41 43 4b NULL) {....CACK 4c40: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 4c50: 22 43 61 6c 6c 20 74 6f 20 6d 61 6c 6c 6f 63 28 "Call to malloc( 4c60: 29 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e ) failed, return 4c70: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 4c80: 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f ;.....cackey_slo 4c90: 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c ts_disconnect_al 4ca0: 6c 28 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 l();.....return( 4cb0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 CACKEY_PCSC_E_GE 4cc0: 4e 45 52 49 43 29 3b 0a 09 09 7d 0a 0a 09 09 43 NERIC);...}....C 4cd0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 4ce0: 54 46 28 22 53 43 61 72 64 45 73 74 61 62 6c 69 TF("SCardEstabli 4cf0: 73 68 43 6f 6e 74 65 78 74 28 29 20 63 61 6c 6c shContext() call 4d00: 65 64 22 29 3b 0a 09 09 73 63 61 72 64 5f 65 73 ed");...scard_es 4d10: 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20 3d 20 t_context_ret = 4d20: 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 43 6f SCardEstablishCo 4d30: 6e 74 65 78 74 28 53 43 41 52 44 5f 53 43 4f 50 ntext(SCARD_SCOP 4d40: 45 5f 53 59 53 54 45 4d 2c 20 4e 55 4c 4c 2c 20 E_SYSTEM, NULL, 4d50: 4e 55 4c 4c 2c 20 63 61 63 6b 65 79 5f 70 63 73 NULL, cackey_pcs 4d60: 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 09 69 66 20 c_handle);...if 4d70: 28 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 (scard_est_conte 4d80: 78 74 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f xt_ret != SCARD_ 4d90: 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 S_SUCCESS) {.... 4da0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 4db0: 4e 54 46 28 22 43 61 6c 6c 20 74 6f 20 53 43 61 NTF("Call to SCa 4dc0: 72 64 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 rdEstablishConte 4dd0: 78 74 20 66 61 69 6c 65 64 20 28 72 65 74 75 72 xt failed (retur 4de0: 6e 65 64 20 25 73 2f 25 6c 69 29 2c 20 72 65 74 ned %s/%li), ret 4df0: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 4e00: 65 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 e", CACKEY_DEBUG 4e10: 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 _FUNC_SCARDERR_T 4e20: 4f 5f 53 54 52 28 73 63 61 72 64 5f 65 73 74 5f O_STR(scard_est_ 4e30: 63 6f 6e 74 65 78 74 5f 72 65 74 29 2c 20 28 6c context_ret), (l 4e40: 6f 6e 67 29 20 73 63 61 72 64 5f 65 73 74 5f 63 ong) scard_est_c 4e50: 6f 6e 74 65 78 74 5f 72 65 74 29 3b 0a 0a 09 09 ontext_ret);.... 4e60: 09 66 72 65 65 28 63 61 63 6b 65 79 5f 70 63 73 .free(cackey_pcs 4e70: 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 09 09 63 61 c_handle);....ca 4e80: 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 ckey_pcsc_handle 4e90: 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 63 61 63 = NULL;.....cac 4ea0: 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e key_slots_discon 4eb0: 6e 65 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 09 nect_all();..... 4ec0: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 4ed0: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 4ee0: 09 7d 0a 09 7d 0a 0a 23 69 66 64 65 66 20 48 41 .}..}..#ifdef HA 4ef0: 56 45 5f 53 43 41 52 44 49 53 56 41 4c 49 44 43 VE_SCARDISVALIDC 4f00: 4f 4e 54 45 58 54 0a 09 43 41 43 4b 45 59 5f 44 ONTEXT..CACKEY_D 4f10: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 43 61 EBUG_PRINTF("SCa 4f20: 72 64 49 73 56 61 6c 69 64 43 6f 6e 74 65 78 74 rdIsValidContext 4f30: 28 29 20 63 61 6c 6c 65 64 22 29 3b 0a 09 73 63 () called");..sc 4f40: 61 72 64 5f 69 73 76 61 6c 69 64 5f 72 65 74 20 ard_isvalid_ret 4f50: 3d 20 53 43 61 72 64 49 73 56 61 6c 69 64 43 6f = SCardIsValidCo 4f60: 6e 74 65 78 74 28 2a 63 61 63 6b 65 79 5f 70 63 ntext(*cackey_pc 4f70: 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 69 66 20 sc_handle);..if 4f80: 28 73 63 61 72 64 5f 69 73 76 61 6c 69 64 5f 72 (scard_isvalid_r 4f90: 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 et != SCARD_S_SU 4fa0: 43 43 45 53 53 29 20 7b 0a 09 09 43 41 43 4b 45 CCESS) {...CACKE 4fb0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 4fc0: 48 61 6e 64 6c 65 20 68 61 73 20 62 65 63 6f 6d Handle has becom 4fd0: 65 20 69 6e 76 61 6c 69 64 20 28 53 43 61 72 64 e invalid (SCard 4fe0: 49 73 56 61 6c 69 64 43 6f 6e 74 65 78 74 20 3d IsValidContext = 4ff0: 20 25 73 2f 25 6c 69 29 2c 20 74 72 79 69 6e 67 %s/%li), trying 5000: 20 74 6f 20 72 65 2d 65 73 74 61 62 6c 69 73 68 to re-establish 5010: 2e 2e 2e 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 ...", CACKEY_DEB 5020: 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 UG_FUNC_SCARDERR 5030: 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f 69 73 _TO_STR(scard_is 5040: 76 61 6c 69 64 5f 72 65 74 29 2c 20 28 6c 6f 6e valid_ret), (lon 5050: 67 29 20 73 63 61 72 64 5f 69 73 76 61 6c 69 64 g) scard_isvalid 5060: 5f 72 65 74 29 3b 0a 0a 09 09 43 41 43 4b 45 59 _ret);....CACKEY 5070: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 _DEBUG_PRINTF("S 5080: 43 61 72 64 45 73 74 61 62 6c 69 73 68 43 6f 6e CardEstablishCon 5090: 74 65 78 74 28 29 20 63 61 6c 6c 65 64 22 29 3b text() called"); 50a0: 0a 09 09 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e ...scard_est_con 50b0: 74 65 78 74 5f 72 65 74 20 3d 20 53 43 61 72 64 text_ret = SCard 50c0: 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 EstablishContext 50d0: 28 53 43 41 52 44 5f 53 43 4f 50 45 5f 53 59 53 (SCARD_SCOPE_SYS 50e0: 54 45 4d 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c TEM, NULL, NULL, 50f0: 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e cackey_pcsc_han 5100: 64 6c 65 29 3b 0a 09 09 69 66 20 28 73 63 61 72 dle);...if (scar 5110: 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 d_est_context_re 5120: 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 t != SCARD_S_SUC 5130: 43 45 53 53 29 20 7b 0a 09 09 09 43 41 43 4b 45 CESS) {....CACKE 5140: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 5150: 43 61 6c 6c 20 74 6f 20 53 43 61 72 64 45 73 74 Call to SCardEst 5160: 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 20 66 61 ablishContext fa 5170: 69 6c 65 64 20 28 72 65 74 75 72 6e 65 64 20 25 iled (returned % 5180: 73 2f 25 6c 69 29 2c 20 72 65 74 75 72 6e 69 6e s/%li), returnin 5190: 67 20 69 6e 20 66 61 69 6c 75 72 65 22 2c 20 43 g in failure", C 51a0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC 51b0: 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 _SCARDERR_TO_STR 51c0: 28 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 (scard_est_conte 51d0: 78 74 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20 xt_ret), (long) 51e0: 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 scard_est_contex 51f0: 74 5f 72 65 74 29 3b 0a 0a 09 09 09 66 72 65 65 t_ret);.....free 5200: 28 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e (cackey_pcsc_han 5210: 64 6c 65 29 3b 0a 09 09 09 63 61 63 6b 65 79 5f dle);....cackey_ 5220: 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 20 4e 55 pcsc_handle = NU 5230: 4c 4c 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 LL;.....cackey_s 5240: 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f lots_disconnect_ 5250: 61 6c 6c 28 29 3b 0a 0a 09 09 09 72 65 74 75 72 all();.....retur 5260: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f n(CACKEY_PCSC_E_ 5270: 47 45 4e 45 52 49 43 29 3b 0a 09 09 7d 0a 0a 09 GENERIC);...}... 5280: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 5290: 49 4e 54 46 28 22 48 61 6e 64 6c 65 20 68 61 73 INTF("Handle has 52a0: 20 62 65 65 6e 20 72 65 2d 65 73 74 61 62 6c 69 been re-establi 52b0: 73 68 65 64 22 29 3b 0a 09 7d 0a 23 65 6e 64 69 shed");..}.#endi 52c0: 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 f...CACKEY_DEBUG 52d0: 5f 50 52 49 4e 54 46 28 22 53 75 63 65 73 73 66 _PRINTF("Sucessf 52e0: 75 6c 6c 79 20 63 6f 6e 6e 65 63 74 65 64 20 74 ully connected t 52f0: 6f 20 50 43 2f 53 43 2c 20 72 65 74 75 72 6e 69 o PC/SC, returni 5300: 6e 67 20 69 6e 20 73 75 63 63 65 73 73 22 29 3b ng in success"); 5310: 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 5320: 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a 0a _PCSC_S_OK);.}.. 5330: 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 /*. * SYNPOSIS. 5340: 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 72 65 74 * cackey_ret 5350: 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 64 69 73 cackey_pcsc_dis 5360: 63 6f 6e 6e 65 63 74 28 76 6f 69 64 29 3b 0a 20 connect(void);. 5370: 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 *. * ARGUMENTS. 5380: 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a * None. *. * 5390: 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a RETURN VALUE. * 53a0: 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 CACKEY_PCSC 53b0: 5f 53 5f 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e _S_OK On 53c0: 20 73 75 63 63 65 73 73 0a 20 2a 20 20 20 20 20 success. * 53d0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 CACKEY_PCSC_E_GE 53e0: 4e 45 52 49 43 20 20 20 20 4f 6e 20 65 72 72 6f NERIC On erro 53f0: 72 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a r. *. * NOTES. * 5400: 20 20 20 20 20 54 68 69 73 20 66 75 6e 63 74 69 This functi 5410: 6f 6e 20 64 69 73 63 6f 6e 6e 65 63 74 73 20 66 on disconnects f 5420: 72 6f 6d 20 74 68 65 20 50 43 2f 53 43 20 43 6f rom the PC/SC Co 5430: 6e 6e 65 63 74 69 6f 6e 20 6d 61 6e 61 67 65 72 nnection manager 5440: 20 61 6e 64 20 75 70 64 61 74 65 73 0a 20 2a 20 and updates. * 5450: 20 20 20 20 74 68 65 20 67 6c 6f 62 61 6c 20 68 the global h 5460: 61 6e 64 6c 65 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 andle.. *. */.st 5470: 61 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 atic cackey_ret 5480: 63 61 63 6b 65 79 5f 70 63 73 63 5f 64 69 73 63 cackey_pcsc_disc 5490: 6f 6e 6e 65 63 74 28 76 6f 69 64 29 20 7b 0a 09 onnect(void) {.. 54a0: 4c 4f 4e 47 20 73 63 61 72 64 5f 72 65 6c 5f 63 LONG scard_rel_c 54b0: 6f 6e 74 65 78 74 5f 72 65 74 3b 0a 0a 09 43 41 ontext_ret;...CA 54c0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 54d0: 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 54e0: 69 66 20 28 63 61 63 6b 65 79 5f 70 63 73 63 5f if (cackey_pcsc_ 54f0: 68 61 6e 64 6c 65 20 3d 3d 20 4e 55 4c 4c 29 20 handle == NULL) 5500: 7b 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 {...return(CACKE 5510: 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 09 7d Y_PCSC_S_OK);..} 5520: 0a 0a 09 73 63 61 72 64 5f 72 65 6c 5f 63 6f 6e ...scard_rel_con 5530: 74 65 78 74 5f 72 65 74 20 3d 20 53 43 61 72 64 text_ret = SCard 5540: 52 65 6c 65 61 73 65 43 6f 6e 74 65 78 74 28 2a ReleaseContext(* 5550: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 5560: 6c 65 29 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 le);...if (cacke 5570: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 20 7b y_pcsc_handle) { 5580: 0a 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f 70 ...free(cackey_p 5590: 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 0a 09 csc_handle);.... 55a0: 09 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e .cackey_pcsc_han 55b0: 64 6c 65 20 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a dle = NULL;..}.. 55c0: 09 69 66 20 28 73 63 61 72 64 5f 72 65 6c 5f 63 .if (scard_rel_c 55d0: 6f 6e 74 65 78 74 5f 72 65 74 20 21 3d 20 53 43 ontext_ret != SC 55e0: 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b ARD_S_SUCCESS) { 55f0: 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 5600: 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 _PCSC_E_GENERIC) 5610: 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 43 41 ;..}...return(CA 5620: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b CKEY_PCSC_S_OK); 5630: 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 .}../*. * SYNPOS 5640: 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 79 IS. * cackey 5650: 5f 72 65 74 20 63 61 63 6b 65 79 5f 63 6f 6e 6e _ret cackey_conn 5660: 65 63 74 5f 63 61 72 64 28 73 74 72 75 63 74 20 ect_card(struct 5670: 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f cackey_slot *slo 5680: 74 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 t);. *. * ARGUME 5690: 4e 54 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 NTS. * cacke 56a0: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a 20 2a 20 y_slot *slot. * 56b0: 20 20 20 20 20 20 20 20 53 6c 6f 74 20 74 6f 20 Slot to 56c0: 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 20 74 6f send commands to 56d0: 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 . *. * RETURN VA 56e0: 4c 55 45 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 LUE. * CACKE 56f0: 59 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 20 20 20 Y_PCSC_S_OK 5700: 20 20 20 20 4f 6e 20 73 75 63 63 65 73 73 0a 20 On success. 5710: 2a 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 * CACKEY_PCS 5720: 43 5f 45 5f 47 45 4e 45 52 49 43 20 20 20 20 4f C_E_GENERIC O 5730: 6e 20 65 72 72 6f 72 0a 20 2a 0a 20 2a 20 4e 4f n error. *. * NO 5740: 54 45 53 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a TES. * None. 5750: 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63 61 *. */.static ca 5760: 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f ckey_ret cackey_ 5770: 63 6f 6e 6e 65 63 74 5f 63 61 72 64 28 73 74 72 connect_card(str 5780: 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 uct cackey_slot 5790: 2a 73 6c 6f 74 29 20 7b 0a 09 63 61 63 6b 65 79 *slot) {..cackey 57a0: 5f 72 65 74 20 70 63 73 63 5f 63 6f 6e 6e 65 63 _ret pcsc_connec 57b0: 74 5f 72 65 74 3b 0a 09 44 57 4f 52 44 20 70 72 t_ret;..DWORD pr 57c0: 6f 74 6f 63 6f 6c 3b 0a 09 4c 4f 4e 47 20 73 63 otocol;..LONG sc 57d0: 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 3b 0a 0a 09 ard_conn_ret;... 57e0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 57f0: 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 5800: 0a 09 69 66 20 28 21 73 6c 6f 74 29 20 7b 0a 09 ..if (!slot) {.. 5810: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 5820: 49 4e 54 46 28 22 49 6e 76 61 6c 69 64 20 73 6c INTF("Invalid sl 5830: 6f 74 20 73 70 65 63 69 66 69 65 64 2c 20 72 65 ot specified, re 5840: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu 5850: 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 re");....return( 5860: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 CACKEY_PCSC_E_GE 5870: 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 70 63 73 NERIC);..}...pcs 5880: 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 3d 20 c_connect_ret = 5890: 63 61 63 6b 65 79 5f 70 63 73 63 5f 63 6f 6e 6e cackey_pcsc_conn 58a0: 65 63 74 28 29 3b 0a 09 69 66 20 28 70 63 73 63 ect();..if (pcsc 58b0: 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 21 3d 20 _connect_ret != 58c0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK 58d0: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 58e0: 55 47 5f 50 52 49 4e 54 46 28 22 43 6f 6e 6e 65 UG_PRINTF("Conne 58f0: 63 74 69 6f 6e 20 74 6f 20 50 43 2f 53 43 20 66 ction to PC/SC f 5900: 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 69 6e 67 ailed, returning 5910: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. 5920: 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f ..return(CACKEY_ 5930: 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b PCSC_E_GENERIC); 5940: 0a 09 7d 0a 0a 09 2f 2a 20 43 6f 6e 6e 65 63 74 ..}.../* Connect 5950: 20 74 6f 20 72 65 61 64 65 72 2c 20 69 66 20 6e to reader, if n 5960: 65 65 64 65 64 20 2a 2f 0a 09 69 66 20 28 21 73 eeded */..if (!s 5970: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f 63 lot->pcsc_card_c 5980: 6f 6e 6e 65 63 74 65 64 29 20 7b 0a 09 09 43 41 onnected) {...CA 5990: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 59a0: 46 28 22 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 F("SCardConnect( 59b0: 25 73 29 20 63 61 6c 6c 65 64 22 2c 20 73 6c 6f %s) called", slo 59c0: 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 72 29 3b t->pcsc_reader); 59d0: 0a 09 09 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 ...scard_conn_re 59e0: 74 20 3d 20 53 43 61 72 64 43 6f 6e 6e 65 63 74 t = SCardConnect 59f0: 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 (*cackey_pcsc_ha 5a00: 6e 64 6c 65 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 ndle, slot->pcsc 5a10: 5f 72 65 61 64 65 72 2c 20 53 43 41 52 44 5f 53 _reader, SCARD_S 5a20: 48 41 52 45 5f 53 48 41 52 45 44 2c 20 53 43 41 HARE_SHARED, SCA 5a30: 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 20 7c RD_PROTOCOL_T0 | 5a40: 20 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f SCARD_PROTOCOL_ 5a50: 54 31 2c 20 26 73 6c 6f 74 2d 3e 70 63 73 63 5f T1, &slot->pcsc_ 5a60: 63 61 72 64 2c 20 26 70 72 6f 74 6f 63 6f 6c 29 card, &protocol) 5a70: 3b 0a 0a 09 09 69 66 20 28 73 63 61 72 64 5f 63 ;....if (scard_c 5a80: 6f 6e 6e 5f 72 65 74 20 21 3d 20 53 43 41 52 44 onn_ret != SCARD 5a90: 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 _S_SUCCESS) {... 5aa0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 5ab0: 49 4e 54 46 28 22 43 6f 6e 6e 65 63 74 69 6f 6e INTF("Connection 5ac0: 20 74 6f 20 63 61 72 64 20 66 61 69 6c 65 64 2c to card failed, 5ad0: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 returning in fa 5ae0: 69 6c 75 72 65 20 28 53 43 61 72 64 43 6f 6e 6e ilure (SCardConn 5af0: 65 63 74 28 29 20 3d 20 25 73 2f 25 6c 69 29 22 ect() = %s/%li)" 5b00: 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F 5b10: 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f UNC_SCARDERR_TO_ 5b20: 53 54 52 28 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 STR(scard_conn_r 5b30: 65 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 et), (long) scar 5b40: 64 5f 63 6f 6e 6e 5f 72 65 74 29 3b 0a 0a 09 09 d_conn_ret);.... 5b50: 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 .return(CACKEY_P 5b60: 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a CSC_E_GENERIC);. 5b70: 09 09 7d 0a 0a 09 09 73 6c 6f 74 2d 3e 70 63 73 ..}....slot->pcs 5b80: 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 c_card_connected 5b90: 20 3d 20 31 3b 0a 09 09 73 6c 6f 74 2d 3e 74 72 = 1;...slot->tr 5ba0: 61 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 ansaction_depth 5bb0: 3d 20 30 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e = 0;..}...return 5bc0: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f (CACKEY_PCSC_S_O 5bd0: 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e K);.}../*. * SYN 5be0: 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 POSIS. * cac 5bf0: 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 62 key_ret cackey_b 5c00: 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e egin_transaction 5c10: 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 (struct cackey_s 5c20: 6c 6f 74 20 2a 73 6c 6f 74 29 3b 0a 20 2a 0a 20 lot *slot);. *. 5c30: 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 * ARGUMENTS. * 5c40: 20 20 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a cackey_slot * 5c50: 73 6c 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 slot. * 5c60: 53 6c 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d Slot to send com 5c70: 6d 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 52 mands to. *. * R 5c80: 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 ETURN VALUE. * 5c90: 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 CACKEY_PCSC_S 5ca0: 5f 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e 20 73 _OK On s 5cb0: 75 63 63 65 73 73 0a 20 2a 20 20 20 20 20 43 41 uccess. * CA 5cc0: 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 CKEY_PCSC_E_GENE 5cd0: 52 49 43 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a RIC On error. 5ce0: 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 *. * NOTES. * 5cf0: 20 20 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 The transacti 5d00: 6f 6e 20 73 68 6f 75 6c 64 20 62 65 20 74 65 72 on should be ter 5d10: 6d 69 6e 61 74 65 64 20 75 73 69 6e 67 20 22 63 minated using "c 5d20: 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 ackey_end_transa 5d30: 63 74 69 6f 6e 22 0a 20 2a 0a 20 2a 2f 0a 73 74 ction". *. */.st 5d40: 61 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 atic cackey_ret 5d50: 63 61 63 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 cackey_begin_tra 5d60: 6e 73 61 63 74 69 6f 6e 28 73 74 72 75 63 74 20 nsaction(struct 5d70: 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f cackey_slot *slo 5d80: 74 29 20 7b 0a 09 63 61 63 6b 65 79 5f 72 65 74 t) {..cackey_ret 5d90: 20 63 61 63 6b 65 79 5f 63 6f 6e 6e 5f 72 65 74 cackey_conn_ret 5da0: 3b 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f 74 72 ;..LONG scard_tr 5db0: 61 6e 73 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 ans_ret;...CACKE 5dc0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 5dd0: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 63 61 63 Called.");...cac 5de0: 6b 65 79 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 63 key_conn_ret = c 5df0: 61 63 6b 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 ackey_connect_ca 5e00: 72 64 28 73 6c 6f 74 29 3b 0a 09 69 66 20 28 63 rd(slot);..if (c 5e10: 61 63 6b 65 79 5f 63 6f 6e 6e 5f 72 65 74 20 21 ackey_conn_ret ! 5e20: 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f = CACKEY_PCSC_S_ 5e30: 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 OK) {...CACKEY_D 5e40: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 EBUG_PRINTF("Una 5e50: 62 6c 65 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 ble to connect t 5e60: 6f 20 63 61 72 64 2c 20 72 65 74 75 72 6e 69 6e o card, returnin 5e70: 67 20 69 6e 20 65 72 72 6f 72 22 29 3b 0a 0a 09 g in error");... 5e80: 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 .return(CACKEY_P 5e90: 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a CSC_E_GENERIC);. 5ea0: 09 7d 0a 0a 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 .}...slot->trans 5eb0: 61 63 74 69 6f 6e 5f 64 65 70 74 68 2b 2b 3b 0a action_depth++;. 5ec0: 0a 09 69 66 20 28 73 6c 6f 74 2d 3e 74 72 61 6e ..if (slot->tran 5ed0: 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3e 20 saction_depth > 5ee0: 31 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 1) {...CACKEY_DE 5ef0: 42 55 47 5f 50 52 49 4e 54 46 28 22 41 6c 72 65 BUG_PRINTF("Alre 5f00: 61 64 79 20 69 6e 20 61 20 74 72 61 6e 73 61 63 ady in a transac 5f10: 74 69 6f 6e 2c 20 70 65 72 66 6f 72 6d 69 6e 67 tion, performing 5f20: 20 6e 6f 20 61 63 74 69 6f 6e 20 28 6e 65 77 20 no action (new 5f30: 64 65 70 74 68 20 3d 20 25 69 29 22 2c 20 73 6c depth = %i)", sl 5f40: 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f ot->transaction_ 5f50: 64 65 70 74 68 29 3b 0a 0a 09 09 72 65 74 75 72 depth);....retur 5f60: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f n(CACKEY_PCSC_S_ 5f70: 4f 4b 29 3b 0a 09 7d 0a 0a 09 73 63 61 72 64 5f OK);..}...scard_ 5f80: 74 72 61 6e 73 5f 72 65 74 20 3d 20 53 43 61 72 trans_ret = SCar 5f90: 64 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f dBeginTransactio 5fa0: 6e 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 n(slot->pcsc_car 5fb0: 64 29 3b 0a 09 69 66 20 28 73 63 61 72 64 5f 74 d);..if (scard_t 5fc0: 72 61 6e 73 5f 72 65 74 20 21 3d 20 53 43 41 52 rans_ret != SCAR 5fd0: 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 D_S_SUCCESS) {.. 5fe0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 5ff0: 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 INTF("Unable to 6000: 62 65 67 69 6e 20 74 72 61 6e 73 61 63 74 69 6f begin transactio 6010: 6e 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 n, returning in 6020: 65 72 72 6f 72 22 29 3b 0a 0a 09 09 72 65 74 75 error");....retu 6030: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 6040: 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 _GENERIC);..}... 6050: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 6060: 4e 54 46 28 22 53 75 63 65 73 73 66 75 6c 6c 79 NTF("Sucessfully 6070: 20 62 65 67 61 6e 20 74 72 61 6e 73 61 63 74 69 began transacti 6080: 6f 6e 20 6f 6e 20 73 6c 6f 74 20 28 25 73 29 22 on on slot (%s)" 6090: 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 , slot->pcsc_rea 60a0: 64 65 72 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 der);...return(C 60b0: 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 ACKEY_PCSC_S_OK) 60c0: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f ;.}../*. * SYNPO 60d0: 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 SIS. * cacke 60e0: 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 65 6e 64 y_ret cackey_end 60f0: 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 74 72 _transaction(str 6100: 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 uct cackey_slot 6110: 2a 73 6c 6f 74 29 3b 0a 20 2a 0a 20 2a 20 41 52 *slot);. *. * AR 6120: 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 63 GUMENTS. * c 6130: 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 ackey_slot *slot 6140: 0a 20 2a 20 20 20 20 20 20 20 20 20 53 6c 6f 74 . * Slot 6150: 20 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 to send command 6160: 73 20 74 6f 0a 20 2a 0a 20 2a 20 52 45 54 55 52 s to. *. * RETUR 6170: 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 43 N VALUE. * C 6180: 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 20 ACKEY_PCSC_S_OK 6190: 20 20 20 20 20 20 20 20 4f 6e 20 73 75 63 63 65 On succe 61a0: 73 73 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 ss. * CACKEY 61b0: 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 20 _PCSC_E_GENERIC 61c0: 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 2a 0a 20 On error. *. 61d0: 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 54 * NOTES. * T 61e0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 71 his function req 61f0: 75 69 72 65 73 20 22 63 61 63 6b 65 79 5f 62 65 uires "cackey_be 6200: 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 22 gin_transaction" 6210: 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 20 66 69 to be called fi 6220: 72 73 74 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 rst. *. */.stati 6230: 63 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 c cackey_ret cac 6240: 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 key_end_transact 6250: 69 6f 6e 28 73 74 72 75 63 74 20 63 61 63 6b 65 ion(struct cacke 6260: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a y_slot *slot) {. 6270: 09 4c 4f 4e 47 20 73 63 61 72 64 5f 74 72 61 6e .LONG scard_tran 6280: 73 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f s_ret;...CACKEY_ 6290: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 62a0: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 62b0: 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f slot->pcsc_card_ 62c0: 63 6f 6e 6e 65 63 74 65 64 29 20 7b 0a 09 09 43 connected) {...C 62d0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 62e0: 54 46 28 22 43 61 72 64 20 69 73 20 6e 6f 74 20 TF("Card is not 62f0: 63 6f 6e 6e 65 63 74 65 64 2c 20 75 6e 61 62 6c connected, unabl 6300: 65 20 74 6f 20 65 6e 64 20 74 72 61 6e 73 61 63 e to end transac 6310: 74 69 6f 6e 22 29 3b 0a 0a 09 09 72 65 74 75 72 tion");....retur 6320: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f n(CACKEY_PCSC_E_ 6330: 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 69 GENERIC);..}...i 6340: 66 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 f (slot->transac 6350: 74 69 6f 6e 5f 64 65 70 74 68 20 3d 3d 20 30 29 tion_depth == 0) 6360: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 6370: 47 5f 50 52 49 4e 54 46 28 22 54 65 72 6d 69 6e G_PRINTF("Termin 6380: 61 74 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 ating a transact 6390: 69 6f 6e 20 74 68 61 74 20 68 61 73 20 6e 6f 74 ion that has not 63a0: 20 62 65 67 75 6e 21 22 29 3b 0a 0a 09 09 72 65 begun!");....re 63b0: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC 63c0: 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a _E_GENERIC);..}. 63d0: 0a 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 ..slot->transact 63e0: 69 6f 6e 5f 64 65 70 74 68 2d 2d 3b 0a 0a 09 69 ion_depth--;...i 63f0: 66 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 f (slot->transac 6400: 74 69 6f 6e 5f 64 65 70 74 68 20 3e 20 30 29 20 tion_depth > 0) 6410: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 6420: 5f 50 52 49 4e 54 46 28 22 54 72 61 6e 73 61 63 _PRINTF("Transac 6430: 74 69 6f 6e 73 20 73 74 69 6c 6c 20 69 6e 20 70 tions still in p 6440: 72 6f 67 72 65 73 73 2c 20 6e 6f 74 20 74 65 72 rogress, not ter 6450: 6d 69 6e 61 74 69 6e 67 20 6f 6e 2d 63 61 72 64 minating on-card 6460: 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 28 63 75 Transaction (cu 6470: 72 72 65 6e 74 20 64 65 70 74 68 20 3d 20 25 69 rrent depth = %i 6480: 29 22 2c 20 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 )", slot->transa 6490: 63 74 69 6f 6e 5f 64 65 70 74 68 29 3b 0a 0a 09 ction_depth);... 64a0: 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 .return(CACKEY_P 64b0: 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a CSC_E_GENERIC);. 64c0: 09 7d 0a 0a 09 73 63 61 72 64 5f 74 72 61 6e 73 .}...scard_trans 64d0: 5f 72 65 74 20 3d 20 53 43 61 72 64 45 6e 64 54 _ret = SCardEndT 64e0: 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 2d ransaction(slot- 64f0: 3e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 52 >pcsc_card, SCAR 6500: 44 5f 4c 45 41 56 45 5f 43 41 52 44 29 3b 0a 09 D_LEAVE_CARD);.. 6510: 69 66 20 28 73 63 61 72 64 5f 74 72 61 6e 73 5f if (scard_trans_ 6520: 72 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 ret != SCARD_S_S 6530: 55 43 43 45 53 53 29 20 7b 0a 09 09 43 41 43 4b UCCESS) {...CACK 6540: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 6550: 22 55 6e 61 62 6c 65 20 74 6f 20 65 6e 64 20 74 "Unable to end t 6560: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 72 65 74 75 ransaction, retu 6570: 72 6e 69 6e 67 20 69 6e 20 65 72 72 6f 72 22 29 rning in error") 6580: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b ;....return(CACK 6590: 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 EY_PCSC_E_GENERI 65a0: 43 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f C);..}...CACKEY_ 65b0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 DEBUG_PRINTF("Su 65c0: 63 65 73 73 66 75 6c 6c 79 20 74 65 72 6d 69 6e cessfully termin 65d0: 61 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e ated transaction 65e0: 20 6f 6e 20 73 6c 6f 74 20 28 25 73 29 22 2c 20 on slot (%s)", 65f0: 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 slot->pcsc_reade 6600: 72 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 r);...return(CAC 6610: 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a KEY_PCSC_S_OK);. 6620: 7d 0a 0a 2f 2a 20 41 50 44 55 20 52 65 6c 61 74 }../* APDU Relat 6630: 65 64 20 46 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a ed Functions */. 6640: 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 /*. * SYNPOSIS. 6650: 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 72 65 74 * cackey_ret 6660: 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 cackey_send_apd 6670: 75 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f u(struct cackey_ 6680: 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 slot *slot, unsi 6690: 67 6e 65 64 20 63 68 61 72 20 63 6c 61 73 73 2c gned char class, 66a0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 69 unsigned char i 66b0: 6e 73 74 72 75 63 74 69 6f 6e 2c 20 75 6e 73 69 nstruction, unsi 66c0: 67 6e 65 64 20 63 68 61 72 20 70 31 2c 20 75 6e gned char p1, un 66d0: 73 69 67 6e 65 64 20 63 68 61 72 20 70 32 2c 20 signed char p2, 66e0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c 63 unsigned char lc 66f0: 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 , unsigned char 6700: 2a 64 61 74 61 2c 20 75 6e 73 69 67 6e 65 64 20 *data, unsigned 6710: 63 68 61 72 20 6c 65 2c 20 75 69 6e 74 31 36 5f char le, uint16_ 6720: 74 20 2a 72 65 73 70 63 6f 64 65 2c 20 75 6e 73 t *respcode, uns 6730: 69 67 6e 65 64 20 63 68 61 72 20 2a 72 65 73 70 igned char *resp 6740: 64 61 74 61 2c 20 73 69 7a 65 5f 74 20 2a 72 65 data, size_t *re 6750: 73 70 64 61 74 61 5f 6c 65 6e 29 3b 0a 20 2a 0a spdata_len);. *. 6760: 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 * ARGUMENTS. * 6770: 20 20 20 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 cackey_slot 6780: 2a 73 6c 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 *slot. * 6790: 20 53 6c 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f Slot to send co 67a0: 6d 6d 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 mmands to. *. * 67b0: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 unsigned cha 67c0: 72 20 63 6c 61 73 73 0a 20 2a 20 20 20 20 20 20 r class. * 67d0: 20 20 20 41 50 44 55 20 43 6c 61 73 73 20 28 47 APDU Class (G 67e0: 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 SCIS_CLASS_ISO78 67f0: 31 36 20 6f 72 20 47 53 43 49 53 5f 43 4c 41 53 16 or GSCIS_CLAS 6800: 53 5f 47 4c 4f 42 41 4c 5f 50 4c 41 54 46 4f 52 S_GLOBAL_PLATFOR 6810: 4d 0a 20 2a 20 20 20 20 20 20 20 20 20 75 73 75 M. * usu 6820: 61 6c 6c 79 29 2c 20 28 43 4c 41 29 0a 20 2a 0a ally), (CLA). *. 6830: 20 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 * unsigned 6840: 63 68 61 72 20 69 6e 73 74 72 75 63 74 69 6f 6e char instruction 6850: 0a 20 2a 20 20 20 20 20 20 20 20 20 41 50 44 55 . * APDU 6860: 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 28 49 4e Instruction (IN 6870: 53 29 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e 73 S). *. * uns 6880: 69 67 6e 65 64 20 63 68 61 72 20 70 31 0a 20 2a igned char p1. * 6890: 20 20 20 20 20 20 20 20 20 41 50 44 55 20 50 61 APDU Pa 68a0: 72 61 6d 65 74 65 72 20 31 20 28 50 31 29 0a 20 rameter 1 (P1). 68b0: 2a 0a 20 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 *. * unsigne 68c0: 64 20 63 68 61 72 20 70 32 0a 20 2a 20 20 20 20 d char p2. * 68d0: 20 20 20 20 20 41 50 44 55 20 50 61 72 61 6d 65 APDU Parame 68e0: 74 65 72 20 32 20 28 50 32 29 0a 20 2a 0a 20 2a ter 2 (P2). *. * 68f0: 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 unsigned ch 6900: 61 72 20 6c 63 0a 20 2a 20 20 20 20 20 20 20 20 ar lc. * 6910: 20 41 50 44 55 20 4c 65 6e 67 74 68 20 6f 66 20 APDU Length of 6920: 43 6f 6e 74 65 6e 74 20 28 4c 63 29 20 2d 2d 20 Content (Lc) -- 6930: 74 68 69 73 20 69 73 20 74 68 65 20 6c 65 6e 67 this is the leng 6940: 74 68 20 6f 66 20 22 64 61 74 61 22 0a 20 2a 20 th of "data". * 6950: 20 20 20 20 20 20 20 20 70 61 72 61 6d 65 74 65 paramete 6960: 72 2e 20 20 49 66 20 22 64 61 74 61 22 20 69 73 r. If "data" is 6970: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 4e 55 specified as NU 6980: 4c 4c 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 LL, this paramet 6990: 65 72 20 77 69 6c 6c 0a 20 2a 20 20 20 20 20 20 er will. * 69a0: 20 20 20 62 65 20 69 67 6e 6f 72 65 64 2e 0a 20 be ignored.. 69b0: 2a 0a 20 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 *. * unsigne 69c0: 64 20 63 68 61 72 20 2a 64 61 74 61 0a 20 2a 20 d char *data. * 69d0: 20 20 20 20 20 20 20 20 50 6f 69 6e 74 65 72 20 Pointer 69e0: 74 6f 20 62 75 66 66 65 72 20 74 6f 20 73 65 6e to buffer to sen 69f0: 64 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 62 65 d. It should be 6a00: 20 22 4c 63 22 20 62 79 74 65 73 20 6c 6f 6e 67 "Lc" bytes long 6a10: 2e 20 20 49 66 0a 20 2a 20 20 20 20 20 20 20 20 . If. * 6a20: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 4e 55 specified as NU 6a30: 4c 4c 2c 20 22 4c 63 22 20 77 69 6c 6c 20 6e 6f LL, "Lc" will no 6a40: 74 20 62 65 20 73 65 6e 74 2c 20 61 6e 64 20 74 t be sent, and t 6a50: 68 69 73 20 62 75 66 66 65 72 20 77 69 6c 6c 20 his buffer will 6a60: 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 69 67 be. * ig 6a70: 6e 6f 72 65 64 2e 0a 20 2a 0a 20 2a 20 20 20 20 nored.. *. * 6a80: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c unsigned char l 6a90: 65 0a 20 2a 20 20 20 20 20 20 20 20 20 41 50 44 e. * APD 6aa0: 55 20 4c 65 6e 67 74 68 20 6f 66 20 45 78 70 65 U Length of Expe 6ab0: 63 74 61 74 69 6f 6e 20 28 4c 65 29 20 2d 2d 20 ctation (Le) -- 6ac0: 74 68 69 73 20 69 73 20 74 68 65 20 6c 65 6e 67 this is the leng 6ad0: 74 68 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 th of the. * 6ae0: 20 20 20 20 20 65 78 70 65 63 74 65 64 20 72 65 expected re 6af0: 70 6c 79 2e 20 20 49 66 20 74 68 69 73 20 69 73 ply. If this is 6b00: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 30 20 specified as 0 6b10: 74 68 65 6e 20 69 74 20 77 69 6c 6c 20 6e 6f 74 then it will not 6b20: 0a 20 2a 20 20 20 20 20 20 20 20 20 62 65 20 73 . * be s 6b30: 65 6e 74 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 75 ent.. *. * u 6b40: 69 6e 74 31 36 5f 74 20 2a 72 65 73 70 63 6f 64 int16_t *respcod 6b50: 65 0a 20 2a 20 20 20 20 20 20 20 20 20 5b 4f 55 e. * [OU 6b60: 54 5d 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 74 T] Pointer to st 6b70: 6f 72 61 67 65 20 6f 66 20 41 50 44 55 20 72 65 orage of APDU re 6b80: 73 70 6f 6e 73 65 20 63 6f 64 65 2e 20 20 49 66 sponse code. If 6b90: 20 74 68 69 73 20 69 73 0a 20 2a 20 20 20 20 20 this is. * 6ba0: 20 20 20 20 73 70 65 63 69 66 69 65 64 20 61 73 specified as 6bb0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 70 6f NULL, the respo 6bc0: 6e 73 65 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 nse code will be 6bd0: 20 64 69 73 63 61 72 64 65 64 2e 0a 20 2a 0a 20 discarded.. *. 6be0: 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 * unsigned c 6bf0: 68 61 72 20 2a 72 65 73 70 64 61 74 61 0a 20 2a har *respdata. * 6c00: 20 20 20 20 20 20 20 20 20 5b 4f 55 54 5d 20 50 [OUT] P 6c10: 6f 69 6e 74 65 72 20 74 6f 20 73 74 6f 72 61 67 ointer to storag 6c20: 65 20 6f 66 20 41 50 44 55 20 72 65 73 70 6f 6e e of APDU respon 6c30: 73 65 20 64 61 74 61 2e 20 20 49 66 20 74 68 69 se data. If thi 6c40: 73 20 69 73 0a 20 2a 20 20 20 20 20 20 20 20 20 s is. * 6c50: 73 70 65 63 69 66 69 65 64 20 61 73 20 4e 55 4c specified as NUL 6c60: 4c 2c 20 74 68 65 20 72 65 73 70 6f 6e 73 65 20 L, the response 6c70: 64 61 74 61 20 77 69 6c 6c 20 62 65 20 64 69 73 data will be dis 6c80: 63 61 72 64 65 64 2e 20 20 49 66 0a 20 2a 20 20 carded. If. * 6c90: 20 20 20 20 20 20 20 74 68 65 20 22 72 65 73 70 the "resp 6ca0: 64 61 74 61 5f 6c 65 6e 22 20 70 61 72 61 6d 65 data_len" parame 6cb0: 74 65 72 20 69 73 20 73 70 65 63 69 66 69 65 64 ter is specified 6cc0: 20 61 73 20 4e 55 4c 4c 2c 20 74 68 69 73 20 62 as NULL, this b 6cd0: 75 66 66 65 72 0a 20 2a 20 20 20 20 20 20 20 20 uffer. * 6ce0: 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 75 70 64 will not be upd 6cf0: 61 74 65 64 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 ated.. *. * 6d00: 73 69 7a 65 5f 74 20 2a 72 65 73 70 64 61 74 61 size_t *respdata 6d10: 5f 6c 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 _len. * 6d20: 5b 49 4e 2c 20 4f 55 54 5d 20 50 6f 69 6e 74 65 [IN, OUT] Pointe 6d30: 72 20 69 6e 69 74 69 61 6c 69 6e 67 20 63 6f 6e r initialing con 6d40: 74 61 69 6e 69 6e 67 20 74 68 65 20 73 69 7a 65 taining the size 6d50: 20 6f 66 20 74 68 65 20 22 72 65 73 70 64 61 74 of the "respdat 6d60: 61 22 0a 20 2a 20 20 20 20 20 20 20 20 20 62 75 a". * bu 6d70: 66 66 65 72 2e 20 20 42 65 66 6f 72 65 20 72 65 ffer. Before re 6d80: 74 75 72 6e 69 6e 67 2c 20 74 68 65 20 70 6f 69 turning, the poi 6d90: 6e 74 65 64 20 74 6f 20 76 61 6c 75 65 20 69 73 nted to value is 6da0: 20 75 70 64 61 74 65 64 20 74 6f 20 74 68 65 0a updated to the. 6db0: 20 2a 20 20 20 20 20 20 20 20 20 6e 75 6d 62 65 * numbe 6dc0: 72 20 6f 66 20 62 79 74 65 73 20 77 72 69 74 74 r of bytes writt 6dd0: 65 6e 20 74 6f 20 74 68 65 20 62 75 66 66 65 72 en to the buffer 6de0: 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 73 70 . If this is sp 6df0: 65 63 69 66 69 65 64 20 61 73 0a 20 2a 20 20 20 ecified as. * 6e00: 20 20 20 20 20 20 4e 55 4c 4c 2c 20 69 74 20 77 NULL, it w 6e10: 69 6c 6c 20 6e 6f 74 20 62 65 20 75 70 64 61 74 ill not be updat 6e20: 65 64 2c 20 61 6e 64 20 22 72 65 73 70 64 61 74 ed, and "respdat 6e30: 61 22 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 a" will be ignor 6e40: 65 64 20 63 61 75 73 69 6e 67 0a 20 2a 20 20 20 ed causing. * 6e50: 20 20 20 20 20 20 74 68 65 20 72 65 73 70 6f 6e the respon 6e60: 73 65 20 64 61 74 61 20 74 6f 20 62 65 20 64 69 se data to be di 6e70: 73 63 61 72 64 65 64 2e 0a 20 2a 0a 20 2a 20 52 scarded.. *. * R 6e80: 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 ETURN VALUE. * 6e90: 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 CACKEY_PCSC_S 6ea0: 5f 4f 4b 20 20 20 20 20 20 20 20 20 20 20 4f 6e _OK On 6eb0: 20 73 75 63 63 65 73 73 0a 20 2a 20 20 20 20 20 success. * 6ec0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 CACKEY_PCSC_E_GE 6ed0: 4e 45 52 49 43 20 20 20 20 20 20 4f 6e 20 65 72 NERIC On er 6ee0: 72 6f 72 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 ror. * CACKE 6ef0: 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 Y_PCSC_E_TOKENAB 6f00: 53 45 4e 54 20 20 49 66 20 74 68 65 20 73 65 6e SENT If the sen 6f10: 64 69 6e 67 20 66 61 69 6c 65 64 20 62 65 63 61 ding failed beca 6f20: 75 73 65 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 use the token is 6f30: 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 . * 6f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f50: 20 20 20 61 62 73 65 6e 74 0a 20 2a 0a 20 2a 20 absent. *. * 6f60: 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 54 68 69 NOTES. * Thi 6f70: 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 s function will 6f80: 63 6f 6e 6e 65 63 74 20 74 6f 20 74 68 65 20 50 connect to the P 6f90: 43 2f 53 43 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 C/SC Connection 6fa0: 4d 61 6e 61 67 65 72 20 76 69 61 0a 20 2a 20 20 Manager via. * 6fb0: 20 20 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 63 cackey_pcsc_c 6fc0: 6f 6e 6e 65 63 74 28 29 20 69 66 20 6e 65 65 64 onnect() if need 6fd0: 65 64 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 49 74 ed.. *. * It 6fe0: 20 77 69 6c 6c 20 63 6f 6e 6e 65 63 74 20 74 6f will connect to 6ff0: 20 74 68 65 20 63 61 72 64 20 69 6e 20 74 68 65 the card in the 7000: 20 72 65 61 64 65 72 20 61 74 74 61 63 68 65 64 reader attached 7010: 20 74 6f 20 74 68 65 20 73 6c 6f 74 0a 20 2a 20 to the slot. * 7020: 20 20 20 20 73 70 65 63 69 66 69 65 64 2e 20 20 specified. 7030: 49 74 20 77 69 6c 6c 20 72 65 63 6f 6e 6e 65 63 It will reconnec 7040: 74 20 74 6f 20 74 68 65 20 63 61 72 64 20 69 66 t to the card if 7050: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a the connection. 7060: 20 2a 20 20 20 20 20 67 6f 65 73 20 61 77 61 79 * goes away 7070: 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 .. *. */.static 7080: 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 cackey_ret cacke 7090: 79 5f 73 65 6e 64 5f 61 70 64 75 28 73 74 72 75 y_send_apdu(stru 70a0: 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a ct cackey_slot * 70b0: 73 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 slot, unsigned c 70c0: 68 61 72 20 63 6c 61 73 73 2c 20 75 6e 73 69 67 har class, unsig 70d0: 6e 65 64 20 63 68 61 72 20 69 6e 73 74 72 75 63 ned char instruc 70e0: 74 69 6f 6e 2c 20 75 6e 73 69 67 6e 65 64 20 63 tion, unsigned c 70f0: 68 61 72 20 70 31 2c 20 75 6e 73 69 67 6e 65 64 har p1, unsigned 7100: 20 63 68 61 72 20 70 32 2c 20 75 6e 73 69 67 6e char p2, unsign 7110: 65 64 20 63 68 61 72 20 6c 63 2c 20 75 6e 73 69 ed char lc, unsi 7120: 67 6e 65 64 20 63 68 61 72 20 2a 64 61 74 61 2c gned char *data, 7130: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c unsigned char l 7140: 65 2c 20 75 69 6e 74 31 36 5f 74 20 2a 72 65 73 e, uint16_t *res 7150: 70 63 6f 64 65 2c 20 75 6e 73 69 67 6e 65 64 20 pcode, unsigned 7160: 63 68 61 72 20 2a 72 65 73 70 64 61 74 61 2c 20 char *respdata, 7170: 73 69 7a 65 5f 74 20 2a 72 65 73 70 64 61 74 61 size_t *respdata 7180: 5f 6c 65 6e 29 20 7b 0a 09 75 69 6e 74 38 5f 74 _len) {..uint8_t 7190: 20 6d 61 6a 6f 72 5f 72 63 2c 20 6d 69 6e 6f 72 major_rc, minor 71a0: 5f 72 63 3b 0a 09 73 69 7a 65 5f 74 20 62 79 74 _rc;..size_t byt 71b0: 65 73 5f 74 6f 5f 63 6f 70 79 2c 20 74 6d 70 5f es_to_copy, tmp_ 71c0: 72 65 73 70 64 61 74 61 5f 6c 65 6e 3b 0a 09 44 respdata_len;..D 71d0: 57 4f 52 44 20 70 72 6f 74 6f 63 6f 6c 3b 0a 09 WORD protocol;.. 71e0: 44 57 4f 52 44 20 78 6d 69 74 5f 6c 65 6e 2c 20 DWORD xmit_len, 71f0: 72 65 63 76 5f 6c 65 6e 3b 0a 09 4c 4f 4e 47 20 recv_len;..LONG 7200: 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 2c 20 scard_xmit_ret, 7210: 73 63 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 scard_reconn_ret 7220: 3b 0a 09 42 59 54 45 20 78 6d 69 74 5f 62 75 66 ;..BYTE xmit_buf 7230: 5b 31 30 32 34 5d 2c 20 72 65 63 76 5f 62 75 66 [1024], recv_buf 7240: 5b 31 30 32 34 5d 3b 0a 09 69 6e 74 20 70 63 73 [1024];..int pcs 7250: 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 2c 20 70 c_connect_ret, p 7260: 63 73 63 5f 67 65 74 72 65 73 70 5f 72 65 74 3b csc_getresp_ret; 7270: 0a 09 69 6e 74 20 69 64 78 3b 0a 0a 09 43 41 43 ..int idx;...CAC 7280: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 7290: 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 72a0: 66 20 28 21 73 6c 6f 74 29 20 7b 0a 09 09 43 41 f (!slot) {...CA 72b0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 72c0: 46 28 22 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 F("Invalid slot 72d0: 73 70 65 63 69 66 69 65 64 2e 22 29 3b 0a 0a 09 specified.");... 72e0: 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 .return(CACKEY_P 72f0: 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a CSC_E_GENERIC);. 7300: 09 7d 0a 0a 09 70 63 73 63 5f 63 6f 6e 6e 65 63 .}...pcsc_connec 7310: 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 63 t_ret = cackey_c 7320: 6f 6e 6e 65 63 74 5f 63 61 72 64 28 73 6c 6f 74 onnect_card(slot 7330: 29 3b 0a 09 69 66 20 28 70 63 73 63 5f 63 6f 6e );..if (pcsc_con 7340: 6e 65 63 74 5f 72 65 74 20 21 3d 20 43 41 43 4b nect_ret != CACK 7350: 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a EY_PCSC_S_OK) {. 7360: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 7370: 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f RINTF("Unable to 7380: 20 63 6f 6e 6e 65 63 74 20 74 6f 20 63 61 72 64 connect to card 7390: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f 73a0: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 ailure");....ret 73b0: 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f urn(CACKEY_PCSC_ 73c0: 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a E_GENERIC);..}.. 73d0: 09 2f 2a 20 54 72 61 6e 73 6d 69 74 20 2a 2f 0a ./* Transmit */. 73e0: 09 78 6d 69 74 5f 6c 65 6e 20 3d 20 30 3b 0a 09 .xmit_len = 0;.. 73f0: 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 xmit_buf[xmit_le 7400: 6e 2b 2b 5d 20 3d 20 63 6c 61 73 73 3b 0a 09 78 n++] = class;..x 7410: 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e mit_buf[xmit_len 7420: 2b 2b 5d 20 3d 20 69 6e 73 74 72 75 63 74 69 6f ++] = instructio 7430: 6e 3b 0a 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 n;..xmit_buf[xmi 7440: 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 70 31 3b 0a 09 t_len++] = p1;.. 7450: 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 xmit_buf[xmit_le 7460: 6e 2b 2b 5d 20 3d 20 70 32 3b 0a 09 69 66 20 28 n++] = p2;..if ( 7470: 64 61 74 61 29 20 7b 0a 09 09 78 6d 69 74 5f 62 data) {...xmit_b 7480: 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d uf[xmit_len++] = 7490: 20 6c 63 3b 0a 09 09 66 6f 72 20 28 69 64 78 20 lc;...for (idx 74a0: 3d 20 30 3b 20 69 64 78 20 3c 20 6c 63 3b 20 69 = 0; idx < lc; i 74b0: 64 78 2b 2b 29 20 7b 0a 09 09 09 78 6d 69 74 5f dx++) {....xmit_ 74c0: 62 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 buf[xmit_len++] 74d0: 3d 20 64 61 74 61 5b 69 64 78 5d 3b 0a 09 09 7d = data[idx];...} 74e0: 0a 09 7d 0a 0a 09 69 66 20 28 6c 65 20 21 3d 20 ..}...if (le != 74f0: 30 78 30 30 29 20 7b 0a 09 09 78 6d 69 74 5f 62 0x00) {...xmit_b 7500: 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d uf[xmit_len++] = 7510: 20 6c 65 3b 0a 09 7d 0a 0a 09 2f 2a 20 42 65 67 le;..}.../* Beg 7520: 69 6e 20 53 6d 61 72 74 63 61 72 64 20 54 72 61 in Smartcard Tra 7530: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 63 61 63 nsaction */..cac 7540: 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 key_begin_transa 7550: 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 69 ction(slot);...i 7560: 66 20 28 63 6c 61 73 73 20 3d 3d 20 47 53 43 49 f (class == GSCI 7570: 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 31 36 20 S_CLASS_ISO7816 7580: 26 26 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 3d && instruction = 7590: 3d 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 56 45 = GSCIS_INSTR_VE 75a0: 52 49 46 59 20 26 26 20 70 31 20 3d 3d 20 30 78 RIFY && p1 == 0x 75b0: 30 30 20 26 26 20 70 32 20 3d 3d 20 30 78 30 30 00 && p2 == 0x00 75c0: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 75d0: 55 47 5f 50 52 49 4e 54 46 28 22 53 65 6e 64 69 UG_PRINTF("Sendi 75e0: 6e 67 20 41 50 44 55 3a 20 3c 3c 63 65 6e 73 6f ng APDU: <<censo 75f0: 72 65 64 3e 3e 22 29 3b 0a 09 7d 20 65 6c 73 65 red>>");..} else 7600: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 7610: 47 5f 50 52 49 4e 54 42 55 46 28 22 53 65 6e 64 G_PRINTBUF("Send 7620: 69 6e 67 20 41 50 44 55 3a 22 2c 20 78 6d 69 74 ing APDU:", xmit 7630: 5f 62 75 66 2c 20 78 6d 69 74 5f 6c 65 6e 29 3b _buf, xmit_len); 7640: 0a 09 7d 0a 0a 09 72 65 63 76 5f 6c 65 6e 20 3d ..}...recv_len = 7650: 20 73 69 7a 65 6f 66 28 72 65 63 76 5f 62 75 66 sizeof(recv_buf 7660: 29 3b 0a 09 73 63 61 72 64 5f 78 6d 69 74 5f 72 );..scard_xmit_r 7670: 65 74 20 3d 20 53 43 61 72 64 54 72 61 6e 73 6d et = SCardTransm 7680: 69 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 it(slot->pcsc_ca 7690: 72 64 2c 20 53 43 41 52 44 5f 50 43 49 5f 54 30 rd, SCARD_PCI_T0 76a0: 2c 20 78 6d 69 74 5f 62 75 66 2c 20 78 6d 69 74 , xmit_buf, xmit 76b0: 5f 6c 65 6e 2c 20 4e 55 4c 4c 2c 20 72 65 63 76 _len, NULL, recv 76c0: 5f 62 75 66 2c 20 26 72 65 63 76 5f 6c 65 6e 29 _buf, &recv_len) 76d0: 3b 0a 09 69 66 20 28 73 63 61 72 64 5f 78 6d 69 ;..if (scard_xmi 76e0: 74 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f 53 t_ret != SCARD_S 76f0: 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 43 41 _SUCCESS) {...CA 7700: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 7710: 46 28 22 46 61 69 6c 65 64 20 74 6f 20 73 65 6e F("Failed to sen 7720: 64 20 41 50 44 55 20 74 6f 20 63 61 72 64 20 28 d APDU to card ( 7730: 53 43 61 72 64 54 72 61 6e 73 6d 69 74 28 29 20 SCardTransmit() 7740: 3d 20 25 73 2f 25 6c 78 29 22 2c 20 43 41 43 4b = %s/%lx)", CACK 7750: 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 EY_DEBUG_FUNC_SC 7760: 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 ARDERR_TO_STR(sc 7770: 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 2c 20 28 ard_xmit_ret), ( 7780: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 unsigned long) s 7790: 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 3b 0a card_xmit_ret);. 77a0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 77b0: 52 49 4e 54 46 28 22 4d 61 72 6b 69 6e 67 20 73 RINTF("Marking s 77c0: 6c 6f 74 20 61 73 20 68 61 76 69 6e 67 20 62 65 lot as having be 77d0: 65 6e 20 72 65 73 65 74 22 29 3b 0a 0a 09 09 73 en reset");....s 77e0: 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e lot->transaction 77f0: 5f 64 65 70 74 68 20 3d 20 30 3b 0a 09 09 73 6c _depth = 0;...sl 7800: 6f 74 2d 3e 73 6c 6f 74 5f 72 65 73 65 74 20 3d ot->slot_reset = 7810: 20 31 3b 0a 0a 09 09 69 66 20 28 73 63 61 72 64 1;....if (scard 7820: 5f 78 6d 69 74 5f 72 65 74 20 3d 3d 20 53 43 41 _xmit_ret == SCA 7830: 52 44 5f 57 5f 52 45 53 45 54 5f 43 41 52 44 29 RD_W_RESET_CARD) 7840: 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB 7850: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 73 65 74 UG_PRINTF("Reset 7860: 20 72 65 71 75 69 72 65 64 2c 20 70 6c 65 61 73 required, pleas 7870: 65 20 68 6f 6c 64 2e 2e 2e 22 29 3b 0a 0a 09 09 e hold...");.... 7880: 09 73 63 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 .scard_reconn_re 7890: 74 20 3d 20 53 43 61 72 64 52 65 63 6f 6e 6e 65 t = SCardReconne 78a0: 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 ct(slot->pcsc_ca 78b0: 72 64 2c 20 53 43 41 52 44 5f 53 48 41 52 45 5f rd, SCARD_SHARE_ 78c0: 53 48 41 52 45 44 2c 20 53 43 41 52 44 5f 50 52 SHARED, SCARD_PR 78d0: 4f 54 4f 43 4f 4c 5f 54 30 20 7c 20 53 43 41 52 OTOCOL_T0 | SCAR 78e0: 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31 2c 20 53 D_PROTOCOL_T1, S 78f0: 43 41 52 44 5f 52 45 53 45 54 5f 43 41 52 44 2c CARD_RESET_CARD, 7900: 20 26 70 72 6f 74 6f 63 6f 6c 29 3b 0a 09 09 09 &protocol);.... 7910: 69 66 20 28 73 63 61 72 64 5f 72 65 63 6f 6e 6e if (scard_reconn 7920: 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f 53 5f _ret == SCARD_S_ 7930: 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 09 2f SUCCESS) {...../ 7940: 2a 20 52 65 2d 65 73 74 61 62 6c 69 73 68 20 74 * Re-establish t 7950: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 69 66 20 69 ransaction, if i 7960: 74 20 77 61 73 20 70 72 65 73 65 6e 74 20 2a 2f t was present */ 7970: 0a 09 09 09 09 69 66 20 28 73 6c 6f 74 2d 3e 74 .....if (slot->t 7980: 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 ransaction_depth 7990: 20 3e 20 30 29 20 7b 0a 09 09 09 09 09 73 6c 6f > 0) {......slo 79a0: 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 t->transaction_d 79b0: 65 70 74 68 2d 2d 3b 0a 09 09 09 09 09 63 61 63 epth--;......cac 79c0: 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 key_begin_transa 79d0: 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 09 09 09 ction(slot);.... 79e0: 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 .}......CACKEY_D 79f0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 73 EBUG_PRINTF("Res 7a00: 65 74 20 73 75 63 63 65 73 73 66 75 6c 2c 20 72 et successful, r 7a10: 65 74 72 61 6e 73 6d 69 74 74 69 6e 67 22 29 3b etransmitting"); 7a20: 0a 0a 09 09 09 09 72 65 63 76 5f 6c 65 6e 20 3d ......recv_len = 7a30: 20 73 69 7a 65 6f 66 28 72 65 63 76 5f 62 75 66 sizeof(recv_buf 7a40: 29 3b 0a 09 09 09 09 73 63 61 72 64 5f 78 6d 69 );.....scard_xmi 7a50: 74 5f 72 65 74 20 3d 20 53 43 61 72 64 54 72 61 t_ret = SCardTra 7a60: 6e 73 6d 69 74 28 73 6c 6f 74 2d 3e 70 63 73 63 nsmit(slot->pcsc 7a70: 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 50 43 49 _card, SCARD_PCI 7a80: 5f 54 30 2c 20 78 6d 69 74 5f 62 75 66 2c 20 78 _T0, xmit_buf, x 7a90: 6d 69 74 5f 6c 65 6e 2c 20 4e 55 4c 4c 2c 20 72 mit_len, NULL, r 7aa0: 65 63 76 5f 62 75 66 2c 20 26 72 65 63 76 5f 6c ecv_buf, &recv_l 7ab0: 65 6e 29 3b 0a 0a 09 09 09 09 69 66 20 28 73 63 en);......if (sc 7ac0: 61 72 64 5f 78 6d 69 74 5f 72 65 74 20 21 3d 20 ard_xmit_ret != 7ad0: 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 SCARD_S_SUCCESS) 7ae0: 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 {......CACKEY_D 7af0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 7b00: 72 61 6e 73 6d 69 74 20 66 61 69 6c 65 64 2c 20 ransmit failed, 7b10: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai 7b20: 6c 75 72 65 20 61 66 74 65 72 20 64 69 73 63 6f lure after disco 7b30: 6e 6e 65 63 74 69 6e 67 20 74 68 65 20 63 61 72 nnecting the car 7b40: 64 20 28 53 43 61 72 64 54 72 61 6e 73 6d 69 74 d (SCardTransmit 7b50: 20 3d 20 25 73 2f 25 6c 69 29 22 2c 20 43 41 43 = %s/%li)", CAC 7b60: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 KEY_DEBUG_FUNC_S 7b70: 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 CARDERR_TO_STR(s 7b80: 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 2c 20 card_xmit_ret), 7b90: 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f 78 6d 69 (long) scard_xmi 7ba0: 74 5f 72 65 74 29 3b 0a 0a 09 09 09 09 09 53 43 t_ret);.......SC 7bb0: 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 73 6c ardDisconnect(sl 7bc0: 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 53 ot->pcsc_card, S 7bd0: 43 41 52 44 5f 52 45 53 45 54 5f 43 41 52 44 29 CARD_RESET_CARD) 7be0: 3b 0a 09 09 09 09 09 73 6c 6f 74 2d 3e 70 63 73 ;......slot->pcs 7bf0: 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 c_card_connected 7c00: 20 3d 20 30 3b 0a 0a 09 09 09 09 09 2f 2a 20 45 = 0;......./* E 7c10: 6e 64 20 53 6d 61 72 74 63 61 72 64 20 54 72 61 nd Smartcard Tra 7c20: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 09 09 nsaction */..... 7c30: 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 .slot->transacti 7c40: 6f 6e 5f 64 65 70 74 68 20 3d 20 31 3b 0a 09 09 on_depth = 1;... 7c50: 09 09 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 ...cackey_end_tr 7c60: 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b ansaction(slot); 7c70: 0a 0a 09 09 09 09 09 72 65 74 75 72 6e 28 43 41 .......return(CA 7c80: 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 CKEY_PCSC_E_TOKE 7c90: 4e 41 42 53 45 4e 54 29 3b 0a 09 09 09 09 7d 0a NABSENT);.....}. 7ca0: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 ...} else {..... 7cb0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 7cc0: 4e 54 46 28 22 44 69 73 63 6f 6e 6e 65 63 74 69 NTF("Disconnecti 7cd0: 6e 67 20 63 61 72 64 22 29 3b 0a 0a 09 09 09 09 ng card");...... 7ce0: 53 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 SCardDisconnect( 7cf0: 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c slot->pcsc_card, 7d00: 20 53 43 41 52 44 5f 52 45 53 45 54 5f 43 41 52 SCARD_RESET_CAR 7d10: 44 29 3b 0a 09 09 09 09 73 6c 6f 74 2d 3e 70 63 D);.....slot->pc 7d20: 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 sc_card_connecte 7d30: 64 20 3d 20 30 3b 0a 0a 09 09 09 09 2f 2a 20 45 d = 0;....../* E 7d40: 6e 64 20 53 6d 61 72 74 63 61 72 64 20 54 72 61 nd Smartcard Tra 7d50: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 09 09 nsaction */..... 7d60: 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f slot->transactio 7d70: 6e 5f 64 65 70 74 68 20 3d 20 31 3b 0a 09 09 09 n_depth = 1;.... 7d80: 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e .cackey_end_tran 7d90: 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a saction(slot);.. 7da0: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 7db0: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 7dc0: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b ng in failure"); 7dd0: 0a 09 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b .....return(CACK 7de0: 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 EY_PCSC_E_TOKENA 7df0: 42 53 45 4e 54 29 3b 0a 09 09 09 7d 0a 09 09 7d BSENT);....}...} 7e00: 20 65 6c 73 65 20 7b 0a 09 09 09 43 41 43 4b 45 else {....CACKE 7e10: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 7e20: 44 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 63 61 Disconnecting ca 7e30: 72 64 22 29 3b 0a 0a 09 09 09 53 43 61 72 64 44 rd");.....SCardD 7e40: 69 73 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e isconnect(slot-> 7e50: 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 pcsc_card, SCARD 7e60: 5f 52 45 53 45 54 5f 43 41 52 44 29 3b 0a 09 09 _RESET_CARD);... 7e70: 09 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 .slot->pcsc_card 7e80: 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a _connected = 0;. 7e90: 0a 09 09 09 2f 2a 20 45 6e 64 20 53 6d 61 72 74 ..../* End Smart 7ea0: 63 61 72 64 20 54 72 61 6e 73 61 63 74 69 6f 6e card Transaction 7eb0: 20 2a 2f 0a 09 09 09 73 6c 6f 74 2d 3e 74 72 61 */....slot->tra 7ec0: 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3d nsaction_depth = 7ed0: 20 31 3b 0a 09 09 09 63 61 63 6b 65 79 5f 65 6e 1;....cackey_en 7ee0: 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c d_transaction(sl 7ef0: 6f 74 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f ot);.....CACKEY_ 7f00: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 7f10: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu 7f20: 72 65 22 29 3b 0a 09 09 09 72 65 74 75 72 6e 28 re");....return( 7f30: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 4f CACKEY_PCSC_E_TO 7f40: 4b 45 4e 41 42 53 45 4e 54 29 3b 0a 09 09 7d 0a KENABSENT);...}. 7f50: 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 7f60: 47 5f 50 52 49 4e 54 42 55 46 28 22 52 65 74 75 G_PRINTBUF("Retu 7f70: 72 6e 65 64 20 56 61 6c 75 65 3a 22 2c 20 72 65 rned Value:", re 7f80: 63 76 5f 62 75 66 2c 20 72 65 63 76 5f 6c 65 6e cv_buf, recv_len 7f90: 29 3b 0a 0a 09 69 66 20 28 72 65 63 76 5f 6c 65 );...if (recv_le 7fa0: 6e 20 3c 20 32 29 20 7b 0a 09 09 2f 2a 20 4d 69 n < 2) {.../* Mi 7fb0: 6e 69 6d 61 6c 20 72 65 73 70 6f 6e 73 65 20 6c nimal response l 7fc0: 65 6e 67 74 68 20 69 73 20 32 20 62 79 74 65 73 ength is 2 bytes 7fd0: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f 7fe0: 61 69 6c 75 72 65 20 2a 2f 0a 09 09 43 41 43 4b ailure */...CACK 7ff0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 8000: 22 52 65 73 70 6f 6e 73 65 20 74 6f 6f 20 73 6d "Response too sm 8010: 61 6c 6c 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 all, returning i 8020: 6e 20 66 61 69 6c 75 72 65 20 28 72 65 63 76 5f n failure (recv_ 8030: 6c 65 6e 20 3d 20 25 6c 75 29 22 2c 20 28 75 6e len = %lu)", (un 8040: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 72 65 63 signed long) rec 8050: 76 5f 6c 65 6e 29 3b 0a 0a 09 09 2f 2a 20 45 6e v_len);..../* En 8060: 64 20 53 6d 61 72 74 63 61 72 64 20 54 72 61 6e d Smartcard Tran 8070: 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 63 61 63 saction */...cac 8080: 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 key_end_transact 8090: 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 72 65 ion(slot);....re 80a0: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC 80b0: 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a _E_GENERIC);..}. 80c0: 0a 09 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 72 ../* Determine r 80d0: 65 73 75 6c 74 20 63 6f 64 65 20 2a 2f 0a 09 6d esult code */..m 80e0: 61 6a 6f 72 5f 72 63 20 3d 20 72 65 63 76 5f 62 ajor_rc = recv_b 80f0: 75 66 5b 72 65 63 76 5f 6c 65 6e 20 2d 20 32 5d uf[recv_len - 2] 8100: 3b 0a 09 6d 69 6e 6f 72 5f 72 63 20 3d 20 72 65 ;..minor_rc = re 8110: 63 76 5f 62 75 66 5b 72 65 63 76 5f 6c 65 6e 20 cv_buf[recv_len 8120: 2d 20 31 5d 3b 0a 09 69 66 20 28 72 65 73 70 63 - 1];..if (respc 8130: 6f 64 65 29 20 7b 0a 09 09 2a 72 65 73 70 63 6f ode) {...*respco 8140: 64 65 20 3d 20 28 6d 61 6a 6f 72 5f 72 63 20 3c de = (major_rc < 8150: 3c 20 38 29 20 7c 20 6d 69 6e 6f 72 5f 72 63 3b < 8) | minor_rc; 8160: 0a 09 7d 0a 0a 09 2f 2a 20 41 64 6a 75 73 74 20 ..}.../* Adjust 8170: 6d 65 73 73 61 67 65 20 62 75 66 66 65 72 20 2a message buffer * 8180: 2f 0a 09 72 65 63 76 5f 6c 65 6e 20 2d 3d 20 32 /..recv_len -= 2 8190: 3b 0a 0a 09 2f 2a 20 41 64 64 20 62 79 74 65 73 ;.../* Add bytes 81a0: 20 74 6f 20 72 65 74 75 72 6e 20 76 61 6c 75 65 to return value 81b0: 20 2a 2f 0a 09 74 6d 70 5f 72 65 73 70 64 61 74 */..tmp_respdat 81c0: 61 5f 6c 65 6e 20 3d 20 30 3b 0a 09 69 66 20 28 a_len = 0;..if ( 81d0: 72 65 73 70 64 61 74 61 20 26 26 20 72 65 73 70 respdata && resp 81e0: 64 61 74 61 5f 6c 65 6e 29 20 7b 0a 09 09 74 6d data_len) {...tm 81f0: 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 6e 20 3d p_respdata_len = 8200: 20 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e 3b 0a *respdata_len;. 8210: 0a 09 09 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 ...bytes_to_copy 8220: 20 3d 20 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e = *respdata_len 8230: 3b 0a 0a 09 09 69 66 20 28 72 65 63 76 5f 6c 65 ;....if (recv_le 8240: 6e 20 3c 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 n < bytes_to_cop 8250: 79 29 20 7b 0a 09 09 09 62 79 74 65 73 5f 74 6f y) {....bytes_to 8260: 5f 63 6f 70 79 20 3d 20 72 65 63 76 5f 6c 65 6e _copy = recv_len 8270: 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b 45 59 5f ;...}....CACKEY_ 8280: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 6f DEBUG_PRINTF("Co 8290: 70 79 69 6e 67 20 25 6c 75 20 62 79 74 65 73 20 pying %lu bytes 82a0: 74 6f 20 74 68 65 20 62 75 66 66 65 72 20 28 72 to the buffer (r 82b0: 65 63 76 27 64 20 25 6c 75 20 62 79 74 65 73 2c ecv'd %lu bytes, 82c0: 20 62 75 74 20 6f 6e 6c 79 20 25 6c 75 20 62 79 but only %lu by 82d0: 74 65 73 20 6c 65 66 74 20 69 6e 20 6f 75 72 20 tes left in our 82e0: 62 75 66 66 65 72 29 22 2c 20 28 75 6e 73 69 67 buffer)", (unsig 82f0: 6e 65 64 20 6c 6f 6e 67 29 20 62 79 74 65 73 5f ned long) bytes_ 8300: 74 6f 5f 63 6f 70 79 2c 20 28 75 6e 73 69 67 6e to_copy, (unsign 8310: 65 64 20 6c 6f 6e 67 29 20 72 65 63 76 5f 6c 65 ed long) recv_le 8320: 6e 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e n, (unsigned lon 8330: 67 29 20 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e g) *respdata_len 8340: 29 3b 0a 0a 09 09 6d 65 6d 63 70 79 28 72 65 73 );....memcpy(res 8350: 70 64 61 74 61 2c 20 72 65 63 76 5f 62 75 66 2c pdata, recv_buf, 8360: 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 3b bytes_to_copy); 8370: 0a 09 09 72 65 73 70 64 61 74 61 20 2b 3d 20 62 ...respdata += b 8380: 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a 0a 09 ytes_to_copy;... 8390: 09 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e 20 3d .*respdata_len = 83a0: 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a bytes_to_copy;. 83b0: 09 09 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c ..tmp_respdata_l 83c0: 65 6e 20 2d 3d 20 62 79 74 65 73 5f 74 6f 5f 63 en -= bytes_to_c 83d0: 6f 70 79 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 opy;..} else {.. 83e0: 09 69 66 20 28 72 65 63 76 5f 6c 65 6e 20 21 3d .if (recv_len != 83f0: 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 0) {....CACKEY_ 8400: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 54 68 DEBUG_PRINTF("Th 8410: 72 6f 77 69 6e 67 20 61 77 61 79 20 25 6c 75 20 rowing away %lu 8420: 62 79 74 65 73 2c 20 6e 6f 77 68 65 72 65 20 74 bytes, nowhere t 8430: 6f 20 70 75 74 20 74 68 65 6d 21 22 2c 20 28 75 o put them!", (u 8440: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 72 65 nsigned long) re 8450: 63 76 5f 6c 65 6e 29 3b 0a 09 09 7d 0a 09 7d 0a cv_len);...}..}. 8460: 0a 09 69 66 20 28 6d 61 6a 6f 72 5f 72 63 20 3d ..if (major_rc = 8470: 3d 20 30 78 36 31 29 20 7b 0a 09 09 2f 2a 20 57 = 0x61) {.../* W 8480: 65 20 6e 65 65 64 20 74 6f 20 52 45 41 44 20 2a e need to READ * 8490: 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 /...CACKEY_DEBUG 84a0: 5f 50 52 49 4e 54 46 28 22 42 75 66 66 65 72 20 _PRINTF("Buffer 84b0: 72 65 61 64 20 72 65 71 75 69 72 65 64 22 29 3b read required"); 84c0: 0a 0a 09 09 69 66 20 28 6d 69 6e 6f 72 5f 72 63 ....if (minor_rc 84d0: 20 3d 3d 20 30 78 30 30 29 20 7b 0a 09 09 09 6d == 0x00) {....m 84e0: 69 6e 6f 72 5f 72 63 20 3d 20 43 41 43 4b 45 59 inor_rc = CACKEY 84f0: 5f 41 50 44 55 5f 4d 54 55 3b 0a 09 09 7d 0a 0a _APDU_MTU;...}.. 8500: 09 09 70 63 73 63 5f 67 65 74 72 65 73 70 5f 72 ..pcsc_getresp_r 8510: 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 et = cackey_send 8520: 5f 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 _apdu(slot, GSCI 8530: 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 31 36 2c S_CLASS_ISO7816, 8540: 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 47 45 54 GSCIS_INSTR_GET 8550: 5f 52 45 53 50 4f 4e 53 45 2c 20 30 78 30 30 2c _RESPONSE, 0x00, 8560: 20 30 78 30 30 2c 20 30 2c 20 4e 55 4c 4c 2c 20 0x00, 0, NULL, 8570: 6d 69 6e 6f 72 5f 72 63 2c 20 72 65 73 70 63 6f minor_rc, respco 8580: 64 65 2c 20 72 65 73 70 64 61 74 61 2c 20 26 74 de, respdata, &t 8590: 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 6e 29 mp_respdata_len) 85a0: 3b 0a 09 09 69 66 20 28 70 63 73 63 5f 67 65 74 ;...if (pcsc_get 85b0: 72 65 73 70 5f 72 65 74 20 21 3d 20 43 41 43 4b resp_ret != CACK 85c0: 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a EY_PCSC_S_OK) {. 85d0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 85e0: 50 52 49 4e 54 46 28 22 42 75 66 66 65 72 20 72 PRINTF("Buffer r 85f0: 65 61 64 20 66 61 69 6c 65 64 21 20 20 52 65 74 ead failed! Ret 8600: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 8610: 65 22 29 3b 0a 0a 09 09 09 2f 2a 20 45 6e 64 20 e");...../* End 8620: 53 6d 61 72 74 63 61 72 64 20 54 72 61 6e 73 61 Smartcard Transa 8630: 63 74 69 6f 6e 20 2a 2f 0a 09 09 09 63 61 63 6b ction */....cack 8640: 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 ey_end_transacti 8650: 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 09 72 65 on(slot);.....re 8660: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC 8670: 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 09 7d _E_GENERIC);...} 8680: 0a 0a 09 09 69 66 20 28 72 65 73 70 64 61 74 61 ....if (respdata 8690: 5f 6c 65 6e 29 20 7b 0a 09 09 09 2a 72 65 73 70 _len) {....*resp 86a0: 64 61 74 61 5f 6c 65 6e 20 2b 3d 20 74 6d 70 5f data_len += tmp_ 86b0: 72 65 73 70 64 61 74 61 5f 6c 65 6e 3b 0a 09 09 respdata_len;... 86c0: 7d 0a 0a 09 09 2f 2a 20 45 6e 64 20 53 6d 61 72 }..../* End Smar 86d0: 74 63 61 72 64 20 54 72 61 6e 73 61 63 74 69 6f tcard Transactio 86e0: 6e 20 2a 2f 0a 09 09 63 61 63 6b 65 79 5f 65 6e n */...cackey_en 86f0: 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c d_transaction(sl 8700: 6f 74 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ot);....CACKEY_D 8710: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 8720: 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 73 urning in succes 8730: 73 20 28 62 75 66 66 65 72 20 72 65 61 64 20 63 s (buffer read c 8740: 6f 6d 70 6c 65 74 65 29 22 29 3b 0a 09 09 72 65 omplete)");...re 8750: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC 8760: 5f 53 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 _S_OK);..}.../* 8770: 45 6e 64 20 53 6d 61 72 74 63 61 72 64 20 54 72 End Smartcard Tr 8780: 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 63 61 ansaction */..ca 8790: 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 ckey_end_transac 87a0: 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 69 66 tion(slot);...if 87b0: 20 28 6d 61 6a 6f 72 5f 72 63 20 3d 3d 20 30 78 (major_rc == 0x 87c0: 39 30 29 20 7b 0a 09 09 2f 2a 20 53 75 63 63 65 90) {.../* Succe 87d0: 73 73 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 ss */...CACKEY_D 87e0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 87f0: 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 73 urning in succes 8800: 73 20 28 6d 61 6a 6f 72 5f 72 63 20 3d 20 30 78 s (major_rc = 0x 8810: 39 30 29 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 90)");....return 8820: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f (CACKEY_PCSC_S_O 8830: 4b 29 3b 0a 09 7d 0a 0a 0a 09 43 41 43 4b 45 59 K);..}....CACKEY 8840: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 41 _DEBUG_PRINTF("A 8850: 50 44 55 20 52 65 74 75 72 6e 65 64 20 61 6e 20 PDU Returned an 8860: 65 72 72 6f 72 2c 20 72 65 74 75 72 6e 69 6e 67 error, returning 8870: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. 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: 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 }../*. * SYNPOSI 88b0: 53 0a 20 2a 20 20 20 20 20 73 73 69 7a 65 5f 74 S. * ssize_t 88c0: 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 cackey_read_buf 88d0: 66 65 72 28 73 74 72 75 63 74 20 63 61 63 6b 65 fer(struct cacke 88e0: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e y_slot *slot, un 88f0: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 75 66 signed char *buf 8900: 66 65 72 2c 20 73 69 7a 65 5f 74 20 63 6f 75 6e fer, size_t coun 8910: 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 t, unsigned char 8920: 20 74 5f 6f 72 5f 76 2c 20 73 69 7a 65 5f 74 20 t_or_v, size_t 8930: 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 29 3b initial_offset); 8940: 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 . *. * ARGUMENTS 8950: 0a 20 2a 20 20 20 20 20 73 74 72 75 63 74 20 63 . * struct c 8960: 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 ackey_slot *slot 8970: 0a 20 2a 20 20 20 20 20 20 20 20 20 53 6c 6f 74 . * Slot 8980: 20 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 to send command 8990: 73 20 74 6f 0a 20 2a 0a 20 2a 20 20 20 20 20 75 s to. *. * u 89a0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 75 nsigned char *bu 89b0: 66 66 65 72 0a 20 2a 20 20 20 20 20 20 20 20 20 ffer. * 89c0: 5b 4f 55 54 5d 20 42 75 66 66 65 72 0a 20 2a 0a [OUT] Buffer. *. 89d0: 20 2a 20 20 20 20 20 73 69 7a 65 5f 74 20 63 6f * size_t co 89e0: 75 6e 74 0a 20 2a 20 20 20 20 20 20 20 20 20 4e unt. * N 89f0: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 umber of bytes t 8a00: 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65 61 o attempt to rea 8a10: 64 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e 73 69 d. *. * unsi 8a20: 67 6e 65 64 20 63 68 61 72 20 74 5f 6f 72 5f 76 gned char t_or_v 8a30: 0a 20 2a 20 20 20 20 20 20 20 20 20 53 65 6c 65 . * Sele 8a40: 63 74 20 74 68 65 20 54 2d 62 75 66 66 65 72 20 ct the T-buffer 8a50: 28 30 31 29 20 6f 72 20 56 2d 62 75 66 66 65 72 (01) or V-buffer 8a60: 20 28 30 32 29 20 74 6f 20 72 65 61 64 20 66 72 (02) to read fr 8a70: 6f 6d 2e 20 20 0a 20 2a 0a 20 2a 20 20 20 20 20 om. . *. * 8a80: 73 69 7a 65 5f 74 20 69 6e 69 74 69 61 6c 5f 6f size_t initial_o 8a90: 66 66 73 65 74 0a 20 2a 20 20 20 20 20 20 20 20 ffset. * 8aa0: 20 53 70 65 63 69 66 79 20 74 68 65 20 6f 66 66 Specify the off 8ab0: 73 65 74 20 74 6f 20 62 65 67 69 6e 20 74 68 65 set to begin the 8ac0: 20 72 65 61 64 20 66 72 6f 6d 0a 20 2a 0a 20 2a read from. *. * 8ad0: 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 . * RETURN VALUE 8ae0: 0a 20 2a 20 20 20 20 20 54 68 69 73 20 66 75 6e . * This fun 8af0: 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 ction returns th 8b00: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 e number of byte 8b10: 73 20 61 63 74 75 61 6c 6c 79 20 72 65 61 64 2c s actually read, 8b20: 20 6f 72 20 2d 31 20 6f 6e 20 65 72 72 6f 72 2e or -1 on error. 8b30: 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 . *. * NOTES. * 8b40: 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a 2f 0a None. *. */. 8b50: 73 74 61 74 69 63 20 73 73 69 7a 65 5f 74 20 63 static ssize_t c 8b60: 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 66 65 ackey_read_buffe 8b70: 72 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f r(struct cackey_ 8b80: 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 slot *slot, unsi 8b90: 67 6e 65 64 20 63 68 61 72 20 2a 62 75 66 66 65 gned char *buffe 8ba0: 72 2c 20 73 69 7a 65 5f 74 20 63 6f 75 6e 74 2c r, size_t count, 8bb0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 74 unsigned char t 8bc0: 5f 6f 72 5f 76 2c 20 73 69 7a 65 5f 74 20 69 6e _or_v, size_t in 8bd0: 69 74 69 61 6c 5f 6f 66 66 73 65 74 29 20 7b 0a itial_offset) {. 8be0: 09 73 69 7a 65 5f 74 20 6f 66 66 73 65 74 20 3d .size_t offset = 8bf0: 20 30 2c 20 6d 61 78 5f 6f 66 66 73 65 74 2c 20 0, max_offset, 8c00: 6d 61 78 5f 63 6f 75 6e 74 3b 0a 09 75 6e 73 69 max_count;..unsi 8c10: 67 6e 65 64 20 63 68 61 72 20 63 6d 64 5b 32 5d gned char cmd[2] 8c20: 3b 0a 09 75 69 6e 74 31 36 5f 74 20 72 65 73 70 ;..uint16_t resp 8c30: 63 6f 64 65 3b 0a 09 69 6e 74 20 73 65 6e 64 5f code;..int send_ 8c40: 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ret;...CACKEY_DE 8c50: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 8c60: 65 64 2e 22 29 3b 0a 0a 09 6d 61 78 5f 6f 66 66 ed.");...max_off 8c70: 73 65 74 20 3d 20 63 6f 75 6e 74 3b 0a 09 6d 61 set = count;..ma 8c80: 78 5f 63 6f 75 6e 74 20 3d 20 43 41 43 4b 45 59 x_count = CACKEY 8c90: 5f 41 50 44 55 5f 4d 54 55 3b 0a 0a 09 69 66 20 _APDU_MTU;...if 8ca0: 28 74 5f 6f 72 5f 76 20 21 3d 20 31 20 26 26 20 (t_or_v != 1 && 8cb0: 74 5f 6f 72 5f 76 20 21 3d 20 32 29 20 7b 0a 09 t_or_v != 2) {.. 8cc0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 8cd0: 49 4e 54 46 28 22 49 6e 76 61 6c 69 64 20 54 20 INTF("Invalid T 8ce0: 6f 72 20 56 20 70 61 72 61 6d 65 74 65 72 20 73 or V parameter s 8cf0: 70 65 63 69 66 69 65 64 2c 20 72 65 74 75 72 6e pecified, return 8d00: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 8d10: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b ;....return(-1); 8d20: 0a 09 7d 0a 0a 09 63 6d 64 5b 30 5d 20 3d 20 74 ..}...cmd[0] = t 8d30: 5f 6f 72 5f 76 3b 0a 0a 09 77 68 69 6c 65 20 28 _or_v;...while ( 8d40: 31 29 20 7b 0a 09 09 69 66 20 28 6f 66 66 73 65 1) {...if (offse 8d50: 74 20 3e 3d 20 6d 61 78 5f 6f 66 66 73 65 74 29 t >= max_offset) 8d60: 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB 8d70: 55 47 5f 50 52 49 4e 54 46 28 22 42 75 66 66 65 UG_PRINTF("Buffe 8d80: 72 20 74 6f 6f 20 73 6d 61 6c 6c 2c 20 72 65 74 r too small, ret 8d90: 75 72 6e 69 6e 67 20 77 68 61 74 20 77 65 20 67 urning what we g 8da0: 6f 74 2e 2e 2e 22 29 3b 0a 0a 09 09 09 62 72 65 ot...");.....bre 8db0: 61 6b 3b 0a 09 09 7d 0a 0a 09 09 63 6f 75 6e 74 ak;...}....count 8dc0: 20 3d 20 6d 61 78 5f 6f 66 66 73 65 74 20 2d 20 = max_offset - 8dd0: 6f 66 66 73 65 74 3b 0a 09 09 69 66 20 28 63 6f offset;...if (co 8de0: 75 6e 74 20 3e 20 6d 61 78 5f 63 6f 75 6e 74 29 unt > max_count) 8df0: 20 7b 0a 09 09 09 63 6f 75 6e 74 20 3d 20 6d 61 {....count = ma 8e00: 78 5f 63 6f 75 6e 74 3b 0a 09 09 7d 0a 0a 09 09 x_count;...}.... 8e10: 63 6d 64 5b 31 5d 20 3d 20 63 6f 75 6e 74 3b 0a cmd[1] = count;. 8e20: 0a 09 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 61 ...send_ret = ca 8e30: 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 73 ckey_send_apdu(s 8e40: 6c 6f 74 2c 20 47 53 43 49 53 5f 43 4c 41 53 53 lot, GSCIS_CLASS 8e50: 5f 47 4c 4f 42 41 4c 5f 50 4c 41 54 46 4f 52 4d _GLOBAL_PLATFORM 8e60: 2c 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 52 45 , GSCIS_INSTR_RE 8e70: 41 44 5f 42 55 46 46 45 52 2c 20 28 28 69 6e 69 AD_BUFFER, ((ini 8e80: 74 69 61 6c 5f 6f 66 66 73 65 74 20 2b 20 6f 66 tial_offset + of 8e90: 66 73 65 74 29 20 3e 3e 20 38 29 20 26 20 30 78 fset) >> 8) & 0x 8ea0: 66 66 2c 20 28 69 6e 69 74 69 61 6c 5f 6f 66 66 ff, (initial_off 8eb0: 73 65 74 20 2b 20 6f 66 66 73 65 74 29 20 26 20 set + offset) & 8ec0: 30 78 66 66 2c 20 73 69 7a 65 6f 66 28 63 6d 64 0xff, sizeof(cmd 8ed0: 29 2c 20 63 6d 64 2c 20 30 78 30 30 2c 20 26 72 ), cmd, 0x00, &r 8ee0: 65 73 70 63 6f 64 65 2c 20 62 75 66 66 65 72 20 espcode, buffer 8ef0: 2b 20 6f 66 66 73 65 74 2c 20 26 63 6f 75 6e 74 + offset, &count 8f00: 29 3b 0a 09 09 69 66 20 28 73 65 6e 64 5f 72 65 );...if (send_re 8f10: 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 t != CACKEY_PCSC 8f20: 5f 53 5f 4f 4b 29 20 7b 0a 09 09 09 69 66 20 28 _S_OK) {....if ( 8f30: 72 65 73 70 63 6f 64 65 20 3d 3d 20 30 78 36 41 respcode == 0x6A 8f40: 38 36 29 20 7b 0a 09 09 09 09 69 66 20 28 6d 61 86) {.....if (ma 8f50: 78 5f 63 6f 75 6e 74 20 3d 3d 20 31 29 20 7b 0a x_count == 1) {. 8f60: 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 .....break;..... 8f70: 7d 0a 0a 09 09 09 09 6d 61 78 5f 63 6f 75 6e 74 }......max_count 8f80: 20 3d 20 6d 61 78 5f 63 6f 75 6e 74 20 2f 20 32 = max_count / 2 8f90: 3b 0a 0a 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b ;......continue; 8fa0: 0a 09 09 09 7d 0a 0a 09 09 09 43 41 43 4b 45 59 ....}.....CACKEY 8fb0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 63 _DEBUG_PRINTF("c 8fc0: 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 ackey_send_apdu( 8fd0: 29 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e ) failed, return 8fe0: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") 8ff0: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 ;.....return(-1) 9000: 3b 0a 09 09 7d 0a 0a 09 09 6f 66 66 73 65 74 20 ;...}....offset 9010: 2b 3d 20 63 6f 75 6e 74 3b 0a 0a 09 09 69 66 20 += count;....if 9020: 28 63 6f 75 6e 74 20 3c 20 6d 61 78 5f 63 6f 75 (count < max_cou 9030: 6e 74 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f nt) {....CACKEY_ 9040: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 68 DEBUG_PRINTF("Sh 9050: 6f 72 74 20 72 65 61 64 20 2d 2d 20 63 6f 75 6e ort read -- coun 9060: 74 20 3d 20 25 69 2c 20 63 6d 64 5b 31 5d 20 3d t = %i, cmd[1] = 9070: 20 25 69 22 2c 20 28 69 6e 74 29 20 63 6f 75 6e %i", (int) coun 9080: 74 2c 20 28 69 6e 74 29 20 63 6d 64 5b 31 5d 29 t, (int) cmd[1]) 9090: 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d ;.....break;...} 90a0: 0a 09 7d 0a 0a 23 69 66 64 65 66 20 43 41 43 4b ..}..#ifdef CACK 90b0: 45 59 5f 50 41 52 41 4e 4f 49 44 0a 23 20 20 69 EY_PARANOID.# i 90c0: 66 64 65 66 20 5f 50 4f 53 49 58 5f 53 53 49 5a fdef _POSIX_SSIZ 90d0: 45 5f 4d 41 58 0a 09 69 66 20 28 6f 66 66 73 65 E_MAX..if (offse 90e0: 74 20 3e 20 5f 50 4f 53 49 58 5f 53 53 49 5a 45 t > _POSIX_SSIZE 90f0: 5f 4d 41 58 29 20 7b 0a 09 09 43 41 43 4b 45 59 _MAX) {...CACKEY 9100: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 4f _DEBUG_PRINTF("O 9110: 66 66 73 65 74 20 65 78 63 65 65 64 73 20 6d 61 ffset exceeds ma 9120: 78 69 6d 75 6d 20 76 61 6c 75 65 2c 20 72 65 74 ximum value, ret 9130: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 9140: 65 2e 20 28 6d 61 78 20 3d 20 25 6c 69 2c 20 6f e. (max = %li, o 9150: 66 66 73 65 74 20 3d 20 25 6c 75 29 22 2c 20 28 ffset = %lu)", ( 9160: 6c 6f 6e 67 29 20 5f 50 4f 53 49 58 5f 53 53 49 long) _POSIX_SSI 9170: 5a 45 5f 4d 41 58 2c 20 28 75 6e 73 69 67 6e 65 ZE_MAX, (unsigne 9180: 64 20 6c 6f 6e 67 29 20 6f 66 66 73 65 74 29 3b d long) offset); 9190: 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. 91a0: 09 7d 0a 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 .}.# endif.#end 91b0: 69 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 if...CACKEY_DEBU 91c0: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 91d0: 69 6e 67 20 69 6e 20 73 75 63 63 65 73 73 2c 20 ing in success, 91e0: 72 65 61 64 20 25 6c 75 20 62 79 74 65 73 22 2c read %lu bytes", 91f0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 9200: 20 6f 66 66 73 65 74 29 3b 0a 0a 09 72 65 74 75 offset);...retu 9210: 72 6e 28 6f 66 66 73 65 74 29 3b 0a 7d 0a 0a 2f rn(offset);.}../ 9220: 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a *. * SYNPOSIS. * 9230: 20 20 20 20 20 63 61 63 6b 65 79 5f 72 65 74 20 cackey_ret 9240: 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 cackey_select_ap 9250: 70 6c 65 74 28 73 74 72 75 63 74 20 63 61 63 6b plet(struct cack 9260: 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 ey_slot *slot, u 9270: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 69 nsigned char *ai 9280: 64 2c 20 73 69 7a 65 5f 74 20 61 69 64 5f 6c 65 d, size_t aid_le 9290: 6e 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 n);. *. * ARGUME 92a0: 4e 54 53 0a 20 2a 20 20 20 20 20 73 74 72 75 63 NTS. * struc 92b0: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 t cackey_slot *s 92c0: 6c 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 53 lot. * S 92d0: 6c 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d 6d lot to send comm 92e0: 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 20 20 ands to. *. * 92f0: 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 unsigned char 9300: 2a 61 69 64 0a 20 2a 20 20 20 20 20 20 20 20 20 *aid. * 9310: 42 75 66 66 65 72 20 63 6f 6e 74 61 69 6e 69 6e Buffer containin 9320: 67 20 41 70 70 6c 65 74 20 49 44 20 74 6f 20 73 g Applet ID to s 9330: 65 6c 65 63 74 0a 20 2a 0a 20 2a 20 20 20 20 20 elect. *. * 9340: 73 69 7a 65 5f 74 20 61 69 64 5f 6c 65 6e 0a 20 size_t aid_len. 9350: 2a 20 20 20 20 20 20 20 20 20 4e 75 6d 62 65 72 * Number 9360: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 of bytes in the 9370: 20 22 61 69 64 22 20 28 41 70 70 6c 65 74 20 49 "aid" (Applet I 9380: 44 29 20 70 61 72 61 6d 65 74 65 72 0a 20 2a 0a D) parameter. *. 9390: 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a * RETURN VALUE. 93a0: 20 2a 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 * CACKEY_PC 93b0: 53 43 5f 53 5f 4f 4b 20 20 20 20 20 20 20 20 20 SC_S_OK 93c0: 4f 6e 20 73 75 63 63 65 73 73 0a 20 2a 20 20 20 On success. * 93d0: 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f CACKEY_PCSC_E_ 93e0: 47 45 4e 45 52 49 43 20 20 20 20 4f 6e 20 65 72 GENERIC On er 93f0: 72 6f 72 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a ror. *. * NOTES. 9400: 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 * None. *. 9410: 2a 2f 0a 73 74 61 74 69 63 20 63 61 63 6b 65 79 */.static cackey 9420: 5f 72 65 74 20 63 61 63 6b 65 79 5f 73 65 6c 65 _ret cackey_sele 9430: 63 74 5f 61 70 70 6c 65 74 28 73 74 72 75 63 74 ct_applet(struct 9440: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c cackey_slot *sl 9450: 6f 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 ot, unsigned cha 9460: 72 20 2a 61 69 64 2c 20 73 69 7a 65 5f 74 20 61 r *aid, size_t a 9470: 69 64 5f 6c 65 6e 29 20 7b 0a 09 69 6e 74 20 73 id_len) {..int s 9480: 65 6e 64 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 end_ret;...CACKE 9490: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 94a0: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 43 41 43 Called.");...CAC 94b0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 KEY_DEBUG_PRINTB 94c0: 55 46 28 22 53 65 6c 65 63 74 69 6e 67 20 61 70 UF("Selecting ap 94d0: 70 6c 65 74 3a 22 2c 20 61 69 64 2c 20 61 69 64 plet:", aid, aid 94e0: 5f 6c 65 6e 29 3b 0a 0a 09 73 65 6e 64 5f 72 65 _len);...send_re 94f0: 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f t = cackey_send_ 9500: 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 apdu(slot, GSCIS 9510: 5f 43 4c 41 53 53 5f 49 53 4f 37 38 31 36 2c 20 _CLASS_ISO7816, 9520: 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 45 4c 45 GSCIS_INSTR_SELE 9530: 43 54 2c 20 47 53 43 49 53 5f 50 41 52 41 4d 5f CT, GSCIS_PARAM_ 9540: 53 45 4c 45 43 54 5f 41 50 50 4c 45 54 2c 20 30 SELECT_APPLET, 0 9550: 78 30 43 2c 20 61 69 64 5f 6c 65 6e 2c 20 61 69 x0C, aid_len, ai 9560: 64 2c 20 30 78 30 30 2c 20 4e 55 4c 4c 2c 20 4e d, 0x00, NULL, N 9570: 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 69 66 20 ULL, NULL);..if 9580: 28 73 65 6e 64 5f 72 65 74 20 21 3d 20 43 41 43 (send_ret != CAC 9590: 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b KEY_PCSC_S_OK) { 95a0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 95b0: 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 74 PRINTF("Failed t 95c0: 6f 20 6f 70 65 6e 20 61 70 70 6c 65 74 2c 20 72 o open applet, r 95d0: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail 95e0: 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ure");....return 95f0: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 (CACKEY_PCSC_E_G 9600: 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 43 41 ENERIC);..}...CA 9610: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 9620: 46 28 22 53 75 63 63 65 73 73 66 75 6c 6c 79 20 F("Successfully 9630: 73 65 6c 65 63 74 65 64 20 66 69 6c 65 22 29 3b selected file"); 9640: 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 9650: 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a 0a _PCSC_S_OK);.}.. 9660: 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 /*. * SYNPOSIS. 9670: 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 72 65 74 * cackey_ret 9680: 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f 66 cackey_select_f 9690: 69 6c 65 28 73 74 72 75 63 74 20 63 61 63 6b 65 ile(struct cacke 96a0: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 69 y_slot *slot, ui 96b0: 6e 74 31 36 5f 74 20 65 66 29 3b 0a 20 2a 0a 20 nt16_t ef);. *. 96c0: 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 * ARGUMENTS. * 96d0: 20 20 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 struct cackey 96e0: 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a 20 2a 20 20 _slot *slot. * 96f0: 20 20 20 20 20 20 20 53 6c 6f 74 20 74 6f 20 73 Slot to s 9700: 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 20 74 6f 0a end commands to. 9710: 20 2a 0a 20 2a 20 20 20 20 20 75 69 6e 74 31 36 *. * uint16 9720: 5f 74 20 65 66 0a 20 2a 20 20 20 20 20 20 20 20 _t ef. * 9730: 20 45 6c 65 6d 65 6e 74 61 6c 20 46 69 6c 65 20 Elemental File 9740: 74 6f 20 73 65 6c 65 63 74 0a 20 2a 0a 20 2a 20 to select. *. * 9750: 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 RETURN VALUE. * 9760: 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f CACKEY_PCSC_ 9770: 53 5f 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e 20 S_OK On 9780: 73 75 63 63 65 73 73 0a 20 2a 20 20 20 20 20 43 success. * C 9790: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e ACKEY_PCSC_E_GEN 97a0: 45 52 49 43 20 20 20 20 4f 6e 20 65 72 72 6f 72 ERIC On error 97b0: 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 . *. * NOTES. * 97c0: 20 20 20 20 54 68 69 73 20 73 65 6c 65 63 74 73 This selects 97d0: 20 61 6e 20 45 6c 65 6d 65 6e 74 61 72 79 20 46 an Elementary F 97e0: 69 6c 65 20 28 45 46 29 20 75 6e 64 65 72 20 74 ile (EF) under t 97f0: 68 65 20 63 75 72 72 65 6e 74 6c 79 20 73 65 6c he currently sel 9800: 65 63 74 65 64 0a 20 2a 20 20 20 20 20 44 65 64 ected. * Ded 9810: 69 63 61 74 65 64 20 46 69 6c 65 20 28 44 46 29 icated File (DF) 9820: 0a 20 2a 0a 20 2a 20 20 20 20 20 54 79 70 69 63 . *. * Typic 9830: 61 6c 6c 79 20 74 68 69 73 20 69 73 20 63 61 6c ally this is cal 9840: 6c 65 64 20 61 66 74 65 72 20 73 65 6c 65 63 74 led after select 9850: 69 6e 67 20 74 68 65 20 63 6f 72 72 65 63 74 20 ing the correct 9860: 41 70 70 6c 65 74 20 28 75 73 69 6e 67 0a 20 2a Applet (using. * 9870: 20 20 20 20 20 63 61 63 6b 65 79 5f 73 65 6c 65 cackey_sele 9880: 63 74 5f 61 70 70 6c 65 74 29 20 66 6f 72 20 56 ct_applet) for V 9890: 4d 20 63 61 72 64 73 0a 20 2a 0a 20 2a 2f 0a 73 M cards. *. */.s 98a0: 74 61 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 tatic cackey_ret 98b0: 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f 66 cackey_select_f 98c0: 69 6c 65 28 73 74 72 75 63 74 20 63 61 63 6b 65 ile(struct cacke 98d0: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 69 y_slot *slot, ui 98e0: 6e 74 31 36 5f 74 20 65 66 29 20 7b 0a 09 75 6e nt16_t ef) {..un 98f0: 73 69 67 6e 65 64 20 63 68 61 72 20 66 69 64 5f signed char fid_ 9900: 62 75 66 5b 32 5d 3b 0a 09 69 6e 74 20 73 65 6e buf[2];..int sen 9910: 64 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f d_ret;...CACKEY_ 9920: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 9930: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 2f 2a 20 4f 70 lled.");.../* Op 9940: 65 6e 20 74 68 65 20 65 6c 65 6d 65 6e 74 61 72 en the elementar 9950: 79 20 66 69 6c 65 20 2a 2f 0a 09 66 69 64 5f 62 y file */..fid_b 9960: 75 66 5b 30 5d 20 3d 20 28 65 66 20 3e 3e 20 38 uf[0] = (ef >> 8 9970: 29 20 26 20 30 78 66 66 3b 0a 09 66 69 64 5f 62 ) & 0xff;..fid_b 9980: 75 66 5b 31 5d 20 3d 20 65 66 20 26 20 30 78 66 uf[1] = ef & 0xf 9990: 66 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 f;...CACKEY_DEBU 99a0: 47 5f 50 52 49 4e 54 46 28 22 53 65 6c 65 63 74 G_PRINTF("Select 99b0: 69 6e 67 20 66 69 6c 65 3a 20 25 30 34 6c 78 22 ing file: %04lx" 99c0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 99d0: 29 20 65 66 29 3b 0a 0a 09 73 65 6e 64 5f 72 65 ) ef);...send_re 99e0: 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f t = cackey_send_ 99f0: 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 apdu(slot, GSCIS 9a00: 5f 43 4c 41 53 53 5f 49 53 4f 37 38 31 36 2c 20 _CLASS_ISO7816, 9a10: 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 45 4c 45 GSCIS_INSTR_SELE 9a20: 43 54 2c 20 30 78 30 32 2c 20 30 78 30 43 2c 20 CT, 0x02, 0x0C, 9a30: 73 69 7a 65 6f 66 28 66 69 64 5f 62 75 66 29 2c sizeof(fid_buf), 9a40: 20 66 69 64 5f 62 75 66 2c 20 30 78 30 30 2c 20 fid_buf, 0x00, 9a50: 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c NULL, NULL, NULL 9a60: 29 3b 0a 09 69 66 20 28 73 65 6e 64 5f 72 65 74 );..if (send_ret 9a70: 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f != CACKEY_PCSC_ 9a80: 53 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 S_OK) {...CACKEY 9a90: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 _DEBUG_PRINTF("F 9aa0: 61 69 6c 65 64 20 74 6f 20 6f 70 65 6e 20 66 69 ailed to open fi 9ab0: 6c 65 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e le, returning in 9ac0: 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 failure");....r 9ad0: 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 eturn(CACKEY_PCS 9ae0: 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d C_E_GENERIC);..} 9af0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 9b00: 50 52 49 4e 54 46 28 22 53 75 63 63 65 73 73 66 PRINTF("Successf 9b10: 75 6c 6c 79 20 73 65 6c 65 63 74 65 64 20 66 69 ully selected fi 9b20: 6c 65 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 le");...return(C 9b30: 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 ACKEY_PCSC_S_OK) 9b40: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f ;.}../*. * SYNPO 9b50: 53 49 53 0a 20 2a 20 20 20 20 20 76 6f 69 64 20 SIS. * void 9b60: 63 61 63 6b 65 79 5f 66 72 65 65 5f 74 6c 76 28 cackey_free_tlv( 9b70: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c struct cackey_tl 9b80: 76 5f 65 6e 74 69 74 79 20 2a 72 6f 6f 74 29 3b v_entity *root); 9b90: 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 . *. * ARGUMENTS 9ba0: 0a 20 2a 20 20 20 20 20 73 74 72 75 63 74 20 63 . * struct c 9bb0: 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 ackey_tlv_entity 9bc0: 20 2a 72 6f 6f 74 0a 20 2a 20 20 20 20 20 20 20 *root. * 9bd0: 20 20 52 6f 6f 74 20 6f 66 20 74 68 65 20 54 4c Root of the TL 9be0: 56 20 6c 69 73 74 20 74 6f 20 73 74 61 72 74 20 V list to start 9bf0: 66 72 65 65 69 6e 67 0a 20 2a 0a 20 2a 20 52 45 freeing. *. * RE 9c00: 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 TURN VALUE. * 9c10: 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a 20 4e 4f 54 None. *. * NOT 9c20: 45 53 0a 20 2a 20 20 20 20 20 54 68 69 73 20 66 ES. * This f 9c30: 75 6e 63 74 69 6f 6e 20 66 72 65 65 73 20 74 68 unction frees th 9c40: 65 20 54 4c 56 20 6c 69 6e 6b 65 64 20 6c 69 73 e TLV linked lis 9c50: 74 65 64 20 72 65 74 75 72 6e 65 64 20 66 72 6f ted returned fro 9c60: 6d 0a 20 2a 20 20 20 20 20 22 63 61 63 6b 65 79 m. * "cackey 9c70: 5f 72 65 61 64 5f 74 6c 76 22 0a 20 2a 0a 20 2a _read_tlv". *. * 9c80: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 61 /.static void ca 9c90: 63 6b 65 79 5f 66 72 65 65 5f 74 6c 76 28 73 74 ckey_free_tlv(st 9ca0: 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f ruct cackey_tlv_ 9cb0: 65 6e 74 69 74 79 20 2a 72 6f 6f 74 29 20 7b 0a entity *root) {. 9cc0: 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 .struct cackey_t 9cd0: 6c 76 5f 65 6e 74 69 74 79 20 2a 63 75 72 72 2c lv_entity *curr, 9ce0: 20 2a 6e 65 78 74 3b 0a 0a 09 69 66 20 28 72 6f *next;...if (ro 9cf0: 6f 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 ot == NULL) {... 9d00: 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 66 6f 72 return;..}...for 9d10: 20 28 63 75 72 72 20 3d 20 72 6f 6f 74 3b 20 63 (curr = root; c 9d20: 75 72 72 3b 20 63 75 72 72 20 3d 20 6e 65 78 74 urr; curr = next 9d30: 29 20 7b 0a 09 09 6e 65 78 74 20 3d 20 63 75 72 ) {...next = cur 9d40: 72 2d 3e 5f 6e 65 78 74 3b 0a 0a 09 09 73 77 69 r->_next;....swi 9d50: 74 63 68 20 28 63 75 72 72 2d 3e 74 61 67 29 20 tch (curr->tag) 9d60: 7b 0a 09 09 09 63 61 73 65 20 47 53 43 49 53 5f {....case GSCIS_ 9d70: 54 41 47 5f 41 43 52 5f 54 41 42 4c 45 3a 0a 09 TAG_ACR_TABLE:.. 9d80: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 9d90: 5f 43 45 52 54 49 46 49 43 41 54 45 3a 0a 09 09 _CERTIFICATE:... 9da0: 09 09 69 66 20 28 63 75 72 72 2d 3e 76 61 6c 75 ..if (curr->valu 9db0: 65 29 20 7b 0a 09 09 09 09 09 66 72 65 65 28 63 e) {......free(c 9dc0: 75 72 72 2d 3e 76 61 6c 75 65 29 3b 0a 09 09 09 urr->value);.... 9dd0: 09 7d 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 .}.....break;... 9de0: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 9df0: 43 41 52 44 55 52 4c 3a 0a 09 09 09 09 69 66 20 CARDURL:.....if 9e00: 28 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 (curr->value_car 9e10: 64 75 72 6c 29 20 7b 0a 09 09 09 09 09 66 72 65 durl) {......fre 9e20: 65 28 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 e(curr->value_ca 9e30: 72 64 75 72 6c 29 3b 0a 09 09 09 09 7d 0a 09 09 rdurl);.....}... 9e40: 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09 ..break;...}.... 9e50: 66 72 65 65 28 63 75 72 72 29 3b 0a 09 7d 0a 0a free(curr);..}.. 9e60: 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a 20 .return;.}../*. 9e70: 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 * SYNPOSIS. * 9e80: 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 55 .... *. * ARGU 9e90: 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 2e 2e 2e MENTS. * ... 9ea0: 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 . *. * RETURN VA 9eb0: 4c 55 45 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 LUE. * .... 9ec0: 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 *. * NOTES. * 9ed0: 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 .... *. */.sta 9ee0: 74 69 63 20 73 74 72 75 63 74 20 63 61 63 6b 65 tic struct cacke 9ef0: 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a 63 61 y_tlv_entity *ca 9f00: 63 6b 65 79 5f 72 65 61 64 5f 74 6c 76 28 73 74 ckey_read_tlv(st 9f10: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ruct cackey_slot 9f20: 20 2a 73 6c 6f 74 29 20 7b 0a 09 73 74 72 75 63 *slot) {..struc 9f30: 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 t cackey_tlv_ent 9f40: 69 74 79 20 2a 63 75 72 72 5f 65 6e 74 69 74 79 ity *curr_entity 9f50: 2c 20 2a 72 6f 6f 74 20 3d 20 4e 55 4c 4c 2c 20 , *root = NULL, 9f60: 2a 6c 61 73 74 20 3d 20 4e 55 4c 4c 3b 0a 09 75 *last = NULL;..u 9f70: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 74 6c 65 nsigned char tle 9f80: 6e 5f 62 75 66 5b 32 5d 2c 20 74 76 61 6c 5f 62 n_buf[2], tval_b 9f90: 75 66 5b 31 30 32 34 5d 2c 20 2a 74 76 61 6c 3b uf[1024], *tval; 9fa0: 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 ..unsigned char 9fb0: 76 6c 65 6e 5f 62 75 66 5b 32 5d 2c 20 76 76 61 vlen_buf[2], vva 9fc0: 6c 5f 62 75 66 5b 38 31 39 32 5d 2c 20 2a 76 76 l_buf[8192], *vv 9fd0: 61 6c 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 al;..unsigned ch 9fe0: 61 72 20 2a 74 6d 70 62 75 66 3b 0a 09 73 73 69 ar *tmpbuf;..ssi 9ff0: 7a 65 5f 74 20 74 6c 65 6e 2c 20 76 6c 65 6e 3b ze_t tlen, vlen; a000: 0a 09 73 73 69 7a 65 5f 74 20 72 65 61 64 5f 72 ..ssize_t read_r a010: 65 74 3b 0a 09 73 69 7a 65 5f 74 20 6f 66 66 73 et;..size_t offs a020: 65 74 5f 74 20 3d 20 30 2c 20 6f 66 66 73 65 74 et_t = 0, offset a030: 5f 76 20 3d 20 30 3b 0a 09 75 6e 73 69 67 6e 65 _v = 0;..unsigne a040: 64 20 63 68 61 72 20 74 61 67 3b 0a 09 73 69 7a d char tag;..siz a050: 65 5f 74 20 6c 65 6e 67 74 68 3b 0a 23 69 66 64 e_t length;.#ifd a060: 65 66 20 48 41 56 45 5f 4c 49 42 5a 0a 09 75 4c ef HAVE_LIBZ..uL a070: 6f 6e 67 66 20 74 6d 70 62 75 66 6c 65 6e 3b 0a ongf tmpbuflen;. a080: 09 69 6e 74 20 75 6e 63 6f 6d 70 72 65 73 73 5f .int uncompress_ a090: 72 65 74 3b 0a 23 65 6e 64 69 66 0a 0a 09 43 41 ret;.#endif...CA a0a0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT a0b0: 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... a0c0: 72 65 61 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 read_ret = cacke a0d0: 79 5f 72 65 61 64 5f 62 75 66 66 65 72 28 73 6c y_read_buffer(sl a0e0: 6f 74 2c 20 74 6c 65 6e 5f 62 75 66 2c 20 73 69 ot, tlen_buf, si a0f0: 7a 65 6f 66 28 74 6c 65 6e 5f 62 75 66 29 2c 20 zeof(tlen_buf), a100: 31 2c 20 6f 66 66 73 65 74 5f 74 29 3b 0a 09 69 1, offset_t);..i a110: 66 20 28 72 65 61 64 5f 72 65 74 20 21 3d 20 73 f (read_ret != s a120: 69 7a 65 6f 66 28 74 6c 65 6e 5f 62 75 66 29 29 izeof(tlen_buf)) a130: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU a140: 47 5f 50 52 49 4e 54 46 28 22 52 65 61 64 20 66 G_PRINTF("Read f a150: 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 69 6e 67 ailed, returning a160: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. a170: 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a ..return(NULL);. a180: 09 7d 0a 0a 09 74 6c 65 6e 20 3d 20 28 74 6c 65 .}...tlen = (tle a190: 6e 5f 62 75 66 5b 31 5d 20 3c 3c 20 38 29 20 7c n_buf[1] << 8) | a1a0: 20 74 6c 65 6e 5f 62 75 66 5b 30 5d 3b 0a 0a 09 tlen_buf[0];... a1b0: 72 65 61 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 read_ret = cacke a1c0: 79 5f 72 65 61 64 5f 62 75 66 66 65 72 28 73 6c y_read_buffer(sl a1d0: 6f 74 2c 20 76 6c 65 6e 5f 62 75 66 2c 20 73 69 ot, vlen_buf, si a1e0: 7a 65 6f 66 28 76 6c 65 6e 5f 62 75 66 29 2c 20 zeof(vlen_buf), a1f0: 32 2c 20 6f 66 66 73 65 74 5f 76 29 3b 0a 09 69 2, offset_v);..i a200: 66 20 28 72 65 61 64 5f 72 65 74 20 21 3d 20 73 f (read_ret != s a210: 69 7a 65 6f 66 28 76 6c 65 6e 5f 62 75 66 29 29 izeof(vlen_buf)) a220: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU a230: 47 5f 50 52 49 4e 54 46 28 22 52 65 61 64 20 66 G_PRINTF("Read f a240: 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 69 6e 67 ailed, returning a250: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. a260: 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a ..return(NULL);. a270: 09 7d 0a 0a 09 76 6c 65 6e 20 3d 20 28 76 6c 65 .}...vlen = (vle a280: 6e 5f 62 75 66 5b 31 5d 20 3c 3c 20 38 29 20 7c n_buf[1] << 8) | a290: 20 76 6c 65 6e 5f 62 75 66 5b 30 5d 3b 0a 0a 09 vlen_buf[0];... a2a0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI a2b0: 4e 54 46 28 22 54 61 67 20 4c 65 6e 67 74 68 20 NTF("Tag Length a2c0: 3d 20 25 69 2c 20 56 61 6c 75 65 20 4c 65 6e 67 = %i, Value Leng a2d0: 74 68 20 3d 20 25 69 22 2c 20 74 6c 65 6e 2c 20 th = %i", tlen, a2e0: 76 6c 65 6e 29 3b 0a 0a 09 6f 66 66 73 65 74 5f vlen);...offset_ a2f0: 74 20 2b 3d 20 32 3b 0a 09 6f 66 66 73 65 74 5f t += 2;..offset_ a300: 76 20 2b 3d 20 32 3b 0a 0a 09 69 66 20 28 74 6c v += 2;...if (tl a310: 65 6e 20 3e 20 73 69 7a 65 6f 66 28 74 76 61 6c en > sizeof(tval a320: 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 43 4b 45 _buf)) {...CACKE a330: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" a340: 54 61 67 20 6c 65 6e 67 74 68 20 69 73 20 74 6f Tag length is to a350: 6f 20 6c 61 72 67 65 2c 20 72 65 74 75 72 6e 69 o large, returni a360: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b ng in failure"); a370: 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 ....return(NULL) a380: 3b 0a 09 7d 0a 0a 09 69 66 20 28 76 6c 65 6e 20 ;..}...if (vlen a390: 3e 20 73 69 7a 65 6f 66 28 76 76 61 6c 5f 62 75 > sizeof(vval_bu a3a0: 66 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 f)) {...CACKEY_D a3b0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 56 61 6c EBUG_PRINTF("Val a3c0: 75 65 20 6c 65 6e 67 74 68 20 69 73 20 74 6f 6f ue length is too a3d0: 20 6c 61 72 67 65 2c 20 72 65 74 75 72 6e 69 6e large, returnin a3e0: 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a g in failure");. a3f0: 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b ...return(NULL); a400: 0a 09 7d 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d ..}...read_ret = a410: 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 cackey_read_buf a420: 66 65 72 28 73 6c 6f 74 2c 20 74 76 61 6c 5f 62 fer(slot, tval_b a430: 75 66 2c 20 74 6c 65 6e 2c 20 31 2c 20 6f 66 66 uf, tlen, 1, off a440: 73 65 74 5f 74 29 3b 0a 09 69 66 20 28 72 65 61 set_t);..if (rea a450: 64 5f 72 65 74 20 21 3d 20 74 6c 65 6e 29 20 7b d_ret != tlen) { a460: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ a470: 50 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 PRINTF("Unable t a480: 6f 20 72 65 61 64 20 65 6e 74 69 72 65 20 54 2d o read entire T- a490: 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 69 6e buffer, returnin a4a0: 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a g in failure");. a4b0: 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b ...return(NULL); a4c0: 0a 09 7d 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d ..}...read_ret = a4d0: 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 cackey_read_buf a4e0: 66 65 72 28 73 6c 6f 74 2c 20 76 76 61 6c 5f 62 fer(slot, vval_b a4f0: 75 66 2c 20 76 6c 65 6e 2c 20 32 2c 20 6f 66 66 uf, vlen, 2, off a500: 73 65 74 5f 76 29 3b 0a 09 69 66 20 28 72 65 61 set_v);..if (rea a510: 64 5f 72 65 74 20 21 3d 20 76 6c 65 6e 29 20 7b d_ret != vlen) { a520: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ a530: 50 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 PRINTF("Unable t a540: 6f 20 72 65 61 64 20 65 6e 74 69 72 65 20 56 2d o read entire V- a550: 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 69 6e buffer, returnin a560: 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a g in failure");. a570: 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b ...return(NULL); a580: 0a 09 7d 0a 0a 09 74 76 61 6c 20 3d 20 74 76 61 ..}...tval = tva a590: 6c 5f 62 75 66 3b 0a 09 76 76 61 6c 20 3d 20 76 l_buf;..vval = v a5a0: 76 61 6c 5f 62 75 66 3b 0a 09 77 68 69 6c 65 20 val_buf;..while a5b0: 28 74 6c 65 6e 20 3e 20 30 20 26 26 20 76 6c 65 (tlen > 0 && vle a5c0: 6e 20 3e 20 30 29 20 7b 0a 09 09 74 61 67 20 3d n > 0) {...tag = a5d0: 20 2a 74 76 61 6c 3b 0a 09 09 74 76 61 6c 2b 2b *tval;...tval++ a5e0: 3b 0a 09 09 74 6c 65 6e 2d 2d 3b 0a 0a 09 09 69 ;...tlen--;....i a5f0: 66 20 28 2a 74 76 61 6c 20 3d 3d 20 30 78 66 66 f (*tval == 0xff a600: 29 20 7b 0a 09 09 09 6c 65 6e 67 74 68 20 3d 20 ) {....length = a610: 28 74 76 61 6c 5b 32 5d 20 3c 3c 20 38 29 20 7c (tval[2] << 8) | a620: 20 74 76 61 6c 5b 31 5d 3b 0a 09 09 09 74 76 61 tval[1];....tva a630: 6c 20 2b 3d 20 33 3b 0a 09 09 09 74 6c 65 6e 20 l += 3;....tlen a640: 2d 3d 20 33 3b 0a 09 09 7d 20 65 6c 73 65 20 7b -= 3;...} else { a650: 0a 09 09 09 6c 65 6e 67 74 68 20 3d 20 2a 74 76 ....length = *tv a660: 61 6c 3b 0a 09 09 09 74 76 61 6c 2b 2b 3b 0a 09 al;....tval++;.. a670: 09 09 74 6c 65 6e 2d 2d 3b 0a 09 09 7d 0a 0a 09 ..tlen--;...}... a680: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR a690: 49 4e 54 46 28 22 54 61 67 3a 20 25 73 20 28 25 INTF("Tag: %s (% a6a0: 30 32 78 29 22 2c 20 43 41 43 4b 45 59 5f 44 45 02x)", CACKEY_DE a6b0: 42 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54 4f 5f BUG_FUNC_TAG_TO_ a6c0: 53 54 52 28 74 61 67 29 2c 20 28 75 6e 73 69 67 STR(tag), (unsig a6d0: 6e 65 64 20 69 6e 74 29 20 74 61 67 29 3b 0a 09 ned int) tag);.. a6e0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR a6f0: 49 4e 54 42 55 46 28 22 56 61 6c 75 65 3a 22 2c INTBUF("Value:", a700: 20 76 76 61 6c 2c 20 6c 65 6e 67 74 68 29 3b 0a vval, length);. a710: 0a 09 09 63 75 72 72 5f 65 6e 74 69 74 79 20 3d ...curr_entity = a720: 20 4e 55 4c 4c 3b 0a 09 09 73 77 69 74 63 68 20 NULL;...switch a730: 28 74 61 67 29 20 7b 0a 09 09 09 63 61 73 65 20 (tag) {....case a740: 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 55 52 GSCIS_TAG_CARDUR a750: 4c 3a 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 L:.....curr_enti a760: 74 79 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 ty = malloc(size a770: 6f 66 28 2a 63 75 72 72 5f 65 6e 74 69 74 79 29 of(*curr_entity) a780: 29 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 );.....curr_enti a790: 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 ty->value_cardur a7a0: 6c 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f l = malloc(sizeo a7b0: 66 28 2a 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e f(*curr_entity-> a7c0: 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 29 29 3b value_cardurl)); a7d0: 0a 0a 09 09 09 09 6d 65 6d 63 70 79 28 63 75 72 ......memcpy(cur a7e0: 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 5f r_entity->value_ a7f0: 63 61 72 64 75 72 6c 2d 3e 72 69 64 2c 20 76 76 cardurl->rid, vv a800: 61 6c 2c 20 35 29 3b 0a 09 09 09 09 63 75 72 72 al, 5);.....curr a810: 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 5f 63 _entity->value_c a820: 61 72 64 75 72 6c 2d 3e 61 70 70 74 79 70 65 20 ardurl->apptype a830: 3d 20 76 76 61 6c 5b 35 5d 3b 0a 09 09 09 09 63 = vval[5];.....c a840: 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 urr_entity->valu a850: 65 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 6a 65 63 e_cardurl->objec a860: 74 69 64 20 3d 20 28 76 76 61 6c 5b 36 5d 20 3c tid = (vval[6] < a870: 3c 20 38 29 20 7c 20 76 76 61 6c 5b 37 5d 3b 0a < 8) | vval[7];. a880: 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d ....curr_entity- a890: 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e >value_cardurl-> a8a0: 61 70 70 69 64 20 3d 20 28 76 76 61 6c 5b 38 5d appid = (vval[8] a8b0: 20 3c 3c 20 38 29 20 7c 20 76 76 61 6c 5b 39 5d << 8) | vval[9] a8c0: 3b 0a 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 ;......curr_enti a8d0: 74 79 2d 3e 74 61 67 20 3d 20 74 61 67 3b 0a 09 ty->tag = tag;.. a8e0: 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e ...curr_entity-> a8f0: 5f 6e 65 78 74 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 _next = NULL;... a900: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas a910: 65 20 47 53 43 49 53 5f 54 41 47 5f 41 43 52 5f e GSCIS_TAG_ACR_ a920: 54 41 42 4c 45 3a 0a 09 09 09 09 63 75 72 72 5f TABLE:.....curr_ a930: 65 6e 74 69 74 79 20 3d 20 6d 61 6c 6c 6f 63 28 entity = malloc( a940: 73 69 7a 65 6f 66 28 2a 63 75 72 72 5f 65 6e 74 sizeof(*curr_ent a950: 69 74 79 29 29 3b 0a 09 09 09 09 74 6d 70 62 75 ity));.....tmpbu a960: 66 20 3d 20 6d 61 6c 6c 6f 63 28 6c 65 6e 67 74 f = malloc(lengt a970: 68 29 3b 0a 0a 09 09 09 09 6d 65 6d 63 70 79 28 h);......memcpy( a980: 74 6d 70 62 75 66 2c 20 76 76 61 6c 2c 20 6c 65 tmpbuf, vval, le a990: 6e 67 74 68 29 3b 0a 0a 09 09 09 09 63 75 72 72 ngth);......curr a9a0: 5f 65 6e 74 69 74 79 2d 3e 74 61 67 20 3d 20 74 _entity->tag = t a9b0: 61 67 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 ag;.....curr_ent a9c0: 69 74 79 2d 3e 6c 65 6e 67 74 68 20 3d 20 6c 65 ity->length = le a9d0: 6e 67 74 68 3b 0a 09 09 09 09 63 75 72 72 5f 65 ngth;.....curr_e a9e0: 6e 74 69 74 79 2d 3e 76 61 6c 75 65 20 3d 20 74 ntity->value = t a9f0: 6d 70 62 75 66 3b 0a 09 09 09 09 63 75 72 72 5f mpbuf;.....curr_ aa00: 65 6e 74 69 74 79 2d 3e 5f 6e 65 78 74 20 3d 20 entity->_next = aa10: 4e 55 4c 4c 3b 0a 0a 09 09 09 09 62 72 65 61 6b NULL;......break aa20: 3b 0a 09 09 09 63 61 73 65 20 47 53 43 49 53 5f ;....case GSCIS_ aa30: 54 41 47 5f 43 45 52 54 49 46 49 43 41 54 45 3a TAG_CERTIFICATE: aa40: 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 .....curr_entity aa50: 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 = malloc(sizeof aa60: 28 2a 63 75 72 72 5f 65 6e 74 69 74 79 29 29 3b (*curr_entity)); aa70: 0a 0a 09 09 09 09 74 6d 70 62 75 66 6c 65 6e 20 ......tmpbuflen aa80: 3d 20 6c 65 6e 67 74 68 20 2a 20 32 3b 0a 09 09 = length * 2;... aa90: 09 09 74 6d 70 62 75 66 20 3d 20 6d 61 6c 6c 6f ..tmpbuf = mallo aaa0: 63 28 74 6d 70 62 75 66 6c 65 6e 29 3b 0a 0a 23 c(tmpbuflen);..# aab0: 69 66 64 65 66 20 48 41 56 45 5f 4c 49 42 5a 0a ifdef HAVE_LIBZ. aac0: 09 09 09 09 75 6e 63 6f 6d 70 72 65 73 73 5f 72 ....uncompress_r aad0: 65 74 20 3d 20 75 6e 63 6f 6d 70 72 65 73 73 28 et = uncompress( aae0: 74 6d 70 62 75 66 2c 20 26 74 6d 70 62 75 66 6c tmpbuf, &tmpbufl aaf0: 65 6e 2c 20 76 76 61 6c 2c 20 6c 65 6e 67 74 68 en, vval, length ab00: 29 3b 0a 09 09 09 09 69 66 20 28 75 6e 63 6f 6d );.....if (uncom ab10: 70 72 65 73 73 5f 72 65 74 20 21 3d 20 5a 5f 4f press_ret != Z_O ab20: 4b 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 K) {......CACKEY ab30: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 _DEBUG_PRINTF("F ab40: 61 69 6c 65 64 20 74 6f 20 64 65 63 6f 6d 70 72 ailed to decompr ab50: 65 73 73 2c 20 75 6e 63 6f 6d 70 72 65 73 73 28 ess, uncompress( ab60: 29 20 72 65 74 75 72 6e 65 64 20 25 69 20 2d 2d ) returned %i -- ab70: 20 72 65 73 6f 72 74 69 6e 67 20 74 6f 20 64 69 resorting to di ab80: 72 65 63 74 20 63 6f 70 79 22 2c 20 75 6e 63 6f rect copy", unco ab90: 6d 70 72 65 73 73 5f 72 65 74 29 3b 0a 0a 09 09 mpress_ret);.... aba0: 09 09 09 74 6d 70 62 75 66 6c 65 6e 20 3d 20 6c ...tmpbuflen = l abb0: 65 6e 67 74 68 3b 0a 09 09 09 09 09 6d 65 6d 63 ength;......memc abc0: 70 79 28 74 6d 70 62 75 66 2c 20 76 76 61 6c 2c py(tmpbuf, vval, abd0: 20 6c 65 6e 67 74 68 29 3b 0a 09 09 09 09 7d 0a length);.....}. abe0: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU abf0: 47 5f 50 52 49 4e 54 42 55 46 28 22 44 65 63 6f G_PRINTBUF("Deco ac00: 6d 70 72 65 73 73 65 64 20 74 6f 3a 22 2c 20 74 mpressed to:", t ac10: 6d 70 62 75 66 2c 20 74 6d 70 62 75 66 6c 65 6e mpbuf, tmpbuflen ac20: 29 3b 0a 23 65 6c 73 65 0a 09 09 09 09 43 41 43 );.#else.....CAC ac30: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF ac40: 28 22 4d 69 73 73 69 6e 67 20 5a 4c 49 42 20 53 ("Missing ZLIB S ac50: 75 70 70 6f 72 74 2c 20 74 68 69 73 20 63 65 72 upport, this cer ac60: 74 69 66 69 63 61 74 65 20 69 73 20 6c 69 6b 65 tificate is like ac70: 6c 79 20 75 73 65 6c 65 73 73 2e 2e 2e 22 29 3b ly useless..."); ac80: 0a 0a 09 09 09 09 74 6d 70 62 75 66 6c 65 6e 20 ......tmpbuflen ac90: 3d 20 6c 65 6e 67 74 68 3b 0a 09 09 09 09 6d 65 = length;.....me aca0: 6d 63 70 79 28 74 6d 70 62 75 66 2c 20 76 76 61 mcpy(tmpbuf, vva acb0: 6c 2c 20 6c 65 6e 67 74 68 29 3b 0a 23 65 6e 64 l, length);.#end acc0: 69 66 0a 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 if......curr_ent acd0: 69 74 79 2d 3e 74 61 67 20 3d 20 74 61 67 3b 0a ity->tag = tag;. ace0: 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d ....curr_entity- acf0: 3e 6c 65 6e 67 74 68 20 3d 20 74 6d 70 62 75 66 >length = tmpbuf ad00: 6c 65 6e 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e len;.....curr_en ad10: 74 69 74 79 2d 3e 76 61 6c 75 65 20 3d 20 74 6d tity->value = tm ad20: 70 62 75 66 3b 0a 09 09 09 09 63 75 72 72 5f 65 pbuf;.....curr_e ad30: 6e 74 69 74 79 2d 3e 5f 6e 65 78 74 20 3d 20 4e ntity->_next = N ad40: 55 4c 4c 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b ULL;......break; ad50: 0a 09 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ....case GSCIS_T ad60: 41 47 5f 50 4b 43 53 31 35 3a 0a 09 09 09 09 63 AG_PKCS15:.....c ad70: 75 72 72 5f 65 6e 74 69 74 79 20 3d 20 6d 61 6c urr_entity = mal ad80: 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 75 72 72 loc(sizeof(*curr ad90: 5f 65 6e 74 69 74 79 29 29 3b 0a 0a 09 09 09 09 _entity));...... ada0: 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 74 61 67 curr_entity->tag adb0: 20 3d 20 74 61 67 3b 0a 09 09 09 09 63 75 72 72 = tag;.....curr adc0: 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 5f 62 _entity->value_b add0: 79 74 65 20 3d 20 76 76 61 6c 5b 30 5d 3b 0a 09 yte = vval[0];.. ade0: 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e ...curr_entity-> adf0: 5f 6e 65 78 74 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 _next = NULL;... ae00: 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 ...break;...}... ae10: 09 76 76 61 6c 20 2b 3d 20 6c 65 6e 67 74 68 3b .vval += length; ae20: 0a 09 09 76 6c 65 6e 20 2d 3d 20 6c 65 6e 67 74 ...vlen -= lengt ae30: 68 3b 0a 0a 09 09 69 66 20 28 63 75 72 72 5f 65 h;....if (curr_e ae40: 6e 74 69 74 79 20 21 3d 20 4e 55 4c 4c 29 20 7b ntity != NULL) { ae50: 0a 09 09 09 69 66 20 28 72 6f 6f 74 20 3d 3d 20 ....if (root == ae60: 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 72 6f 6f 74 NULL) {.....root ae70: 20 3d 20 63 75 72 72 5f 65 6e 74 69 74 79 3b 0a = curr_entity;. ae80: 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 6c 61 73 ...}.....if (las ae90: 74 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 t != NULL) {.... aea0: 09 6c 61 73 74 2d 3e 5f 6e 65 78 74 20 3d 20 63 .last->_next = c aeb0: 75 72 72 5f 65 6e 74 69 74 79 3b 0a 09 09 09 7d urr_entity;....} aec0: 0a 0a 09 09 09 6c 61 73 74 20 3d 20 63 75 72 72 .....last = curr aed0: 5f 65 6e 74 69 74 79 3b 0a 09 09 7d 0a 09 7d 0a _entity;...}..}. aee0: 0a 09 72 65 74 75 72 6e 28 72 6f 6f 74 29 3b 0a ..return(root);. aef0: 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 }../*. * SYNPOSI af00: 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a S. * .... *. af10: 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 * ARGUMENTS. * af20: 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 52 45 .... *. * RE af30: 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 TURN VALUE. * af40: 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 45 .... *. * NOTE af50: 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a S. * .... *. af60: 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 */.static void af70: 63 61 63 6b 65 79 5f 66 72 65 65 5f 63 65 72 74 cackey_free_cert af80: 73 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f s(struct cackey_ af90: 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 2a 73 pcsc_identity *s afa0: 74 61 72 74 2c 20 73 69 7a 65 5f 74 20 63 6f 75 tart, size_t cou afb0: 6e 74 2c 20 69 6e 74 20 66 72 65 65 5f 73 74 61 nt, int free_sta afc0: 72 74 29 20 7b 0a 09 73 69 7a 65 5f 74 20 69 64 rt) {..size_t id afd0: 78 3b 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 x;...for (idx = afe0: 30 3b 20 69 64 78 20 3c 20 63 6f 75 6e 74 3b 20 0; idx < count; aff0: 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 73 idx++) {...if (s b000: 74 61 72 74 5b 69 64 78 5d 2e 63 65 72 74 69 66 tart[idx].certif b010: 69 63 61 74 65 29 20 7b 0a 09 09 09 66 72 65 65 icate) {....free b020: 28 73 74 61 72 74 5b 69 64 78 5d 2e 63 65 72 74 (start[idx].cert b030: 69 66 69 63 61 74 65 29 3b 0a 09 09 7d 0a 09 7d ificate);...}..} b040: 0a 0a 09 69 66 20 28 66 72 65 65 5f 73 74 61 72 ...if (free_star b050: 74 29 20 7b 0a 09 09 66 72 65 65 28 73 74 61 72 t) {...free(star b060: 74 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 3b t);..}...return; b070: 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 .}../*. * SYNPOS b080: 49 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a IS. * .... * b090: 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a . * ARGUMENTS. * b0a0: 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 52 .... *. * R b0b0: 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 ETURN VALUE. * b0c0: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 .... *. * NOT b0d0: 45 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a ES. * .... * b0e0: 0a 20 2a 2f 0a 73 74 61 74 69 63 20 73 74 72 75 . */.static stru b0f0: 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 ct cackey_pcsc_i b100: 64 65 6e 74 69 74 79 20 2a 63 61 63 6b 65 79 5f dentity *cackey_ b110: 72 65 61 64 5f 63 65 72 74 73 28 73 74 72 75 63 read_certs(struc b120: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 t cackey_slot *s b130: 6c 6f 74 2c 20 73 74 72 75 63 74 20 63 61 63 6b lot, struct cack b140: 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 ey_pcsc_identity b150: 20 2a 63 65 72 74 73 2c 20 75 6e 73 69 67 6e 65 *certs, unsigne b160: 64 20 6c 6f 6e 67 20 2a 63 6f 75 6e 74 29 20 7b d long *count) { b170: 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f ..struct cackey_ b180: 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 2a 63 pcsc_identity *c b190: 75 72 72 5f 69 64 3b 0a 09 73 74 72 75 63 74 20 urr_id;..struct b1a0: 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 cackey_tlv_entit b1b0: 79 20 2a 63 63 63 5f 74 6c 76 2c 20 2a 63 63 63 y *ccc_tlv, *ccc b1c0: 5f 63 75 72 72 2c 20 2a 61 70 70 5f 74 6c 76 2c _curr, *app_tlv, b1d0: 20 2a 61 70 70 5f 63 75 72 72 3b 0a 09 75 6e 73 *app_curr;..uns b1e0: 69 67 6e 65 64 20 63 68 61 72 20 63 63 63 5f 61 igned char ccc_a b1f0: 69 64 5b 5d 20 3d 20 7b 47 53 43 49 53 5f 41 49 id[] = {GSCIS_AI b200: 44 5f 43 43 43 7d 3b 0a 09 75 6e 73 69 67 6e 65 D_CCC};..unsigne b210: 64 20 63 68 61 72 20 63 75 72 72 5f 61 69 64 5b d char curr_aid[ b220: 37 5d 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 7];..unsigned lo b230: 6e 67 20 6f 75 74 69 64 78 20 3d 20 30 3b 0a 09 ng outidx = 0;.. b240: 63 61 63 6b 65 79 5f 72 65 74 20 74 72 61 6e 73 cackey_ret trans b250: 61 63 74 69 6f 6e 5f 72 65 74 3b 0a 09 69 6e 74 action_ret;..int b260: 20 63 65 72 74 73 5f 72 65 73 69 7a 61 62 6c 65 certs_resizable b270: 3b 0a 09 69 6e 74 20 73 65 6e 64 5f 72 65 74 2c ;..int send_ret, b280: 20 73 65 6c 65 63 74 5f 72 65 74 3b 0a 0a 09 43 select_ret;...C b290: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN b2a0: 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. b2b0: 09 69 66 20 28 63 6f 75 6e 74 20 3d 3d 20 4e 55 .if (count == NU b2c0: 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D b2d0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 63 6f 75 EBUG_PRINTF("cou b2e0: 6e 74 20 69 73 20 4e 55 4c 4c 2c 20 72 65 74 75 nt is NULL, retu b2f0: 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 rning in failure b300: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 ");....return(NU b310: 4c 4c 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 65 LL);..}...if (ce b320: 72 74 73 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 rts != NULL) {.. b330: 09 69 66 20 28 2a 63 6f 75 6e 74 20 3d 3d 20 30 .if (*count == 0 b340: 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE b350: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 BUG_PRINTF("Requ b360: 65 73 74 65 64 20 77 65 20 72 65 74 75 72 6e 20 ested we return b370: 30 20 6f 62 6a 65 63 74 73 2c 20 73 68 6f 72 74 0 objects, short b380: 2d 63 69 72 63 75 69 74 22 29 3b 0a 0a 09 09 09 -circuit");..... b390: 72 65 74 75 72 6e 28 63 65 72 74 73 29 3b 0a 09 return(certs);.. b3a0: 09 7d 0a 09 7d 0a 0a 09 2f 2a 20 42 65 67 69 6e .}..}.../* Begin b3b0: 20 61 20 53 6d 61 72 74 43 61 72 64 20 74 72 61 a SmartCard tra b3c0: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 74 72 61 nsaction */..tra b3d0: 6e 73 61 63 74 69 6f 6e 5f 72 65 74 20 3d 20 63 nsaction_ret = c b3e0: 61 63 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e ackey_begin_tran b3f0: 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 09 saction(slot);.. b400: 69 66 20 28 74 72 61 6e 73 61 63 74 69 6f 6e 5f if (transaction_ b410: 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 ret != CACKEY_PC b420: 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 SC_S_OK) {...CAC b430: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF b440: 28 22 55 6e 61 62 6c 65 20 62 65 67 69 6e 20 74 ("Unable begin t b450: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 72 65 74 75 ransaction, retu b460: 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 rning in failure b470: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 ");....return(NU b480: 4c 4c 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 65 LL);..}...if (ce b490: 72 74 73 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 rts == NULL) {.. b4a0: 09 63 65 72 74 73 20 3d 20 6d 61 6c 6c 6f 63 28 .certs = malloc( b4b0: 73 69 7a 65 6f 66 28 2a 63 65 72 74 73 29 20 2a sizeof(*certs) * b4c0: 20 35 29 3b 0a 09 09 2a 63 6f 75 6e 74 20 3d 20 5);...*count = b4d0: 35 3b 0a 09 09 63 65 72 74 73 5f 72 65 73 69 7a 5;...certs_resiz b4e0: 61 62 6c 65 20 3d 20 31 3b 0a 09 7d 20 65 6c 73 able = 1;..} els b4f0: 65 20 7b 0a 09 09 63 65 72 74 73 5f 72 65 73 69 e {...certs_resi b500: 7a 61 62 6c 65 20 3d 20 30 3b 0a 09 7d 0a 0a 09 zable = 0;..}... b510: 2f 2a 20 53 65 6c 65 63 74 20 74 68 65 20 43 43 /* Select the CC b520: 43 20 41 70 70 6c 65 74 20 2a 2f 0a 09 73 65 6e C Applet */..sen b530: 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 d_ret = cackey_s b540: 65 6c 65 63 74 5f 61 70 70 6c 65 74 28 73 6c 6f elect_applet(slo b550: 74 2c 20 63 63 63 5f 61 69 64 2c 20 73 69 7a 65 t, ccc_aid, size b560: 6f 66 28 63 63 63 5f 61 69 64 29 29 3b 0a 09 69 of(ccc_aid));..i b570: 66 20 28 73 65 6e 64 5f 72 65 74 20 21 3d 20 43 f (send_ret != C b580: 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 ACKEY_PCSC_S_OK) b590: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU b5a0: 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 G_PRINTF("Unable b5b0: 20 74 6f 20 73 65 6c 65 63 74 20 43 43 43 20 41 to select CCC A b5c0: 70 70 6c 65 74 2c 20 72 65 74 75 72 6e 69 6e 67 pplet, returning b5d0: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. b5e0: 09 09 2f 2a 20 54 65 72 6d 69 6e 61 74 65 20 53 ../* Terminate S b5f0: 6d 61 72 74 43 61 72 64 20 54 72 61 6e 73 61 63 martCard Transac b600: 74 69 6f 6e 20 2a 2f 0a 09 09 63 61 63 6b 65 79 tion */...cackey b610: 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e _end_transaction b620: 28 73 6c 6f 74 29 3b 0a 0a 09 09 72 65 74 75 72 (slot);....retur b630: 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 2f 2a n(NULL);..}.../* b640: 20 52 65 61 64 20 61 6c 6c 20 74 68 65 20 61 70 Read all the ap b650: 70 6c 65 74 73 20 66 72 6f 6d 20 74 68 65 20 43 plets from the C b660: 43 43 27 73 20 54 4c 56 20 2a 2f 0a 09 63 63 63 CC's TLV */..ccc b670: 5f 74 6c 76 20 3d 20 63 61 63 6b 65 79 5f 72 65 _tlv = cackey_re b680: 61 64 5f 74 6c 76 28 73 6c 6f 74 29 3b 0a 0a 09 ad_tlv(slot);... b690: 2f 2a 20 4c 6f 6f 6b 20 66 6f 72 20 43 41 52 44 /* Look for CARD b6a0: 55 52 4c 73 20 74 68 61 74 20 63 6f 6f 72 65 73 URLs that coores b6b0: 70 6f 6e 64 20 74 6f 20 50 4b 49 20 61 70 70 6c pond to PKI appl b6c0: 65 74 73 20 2a 2f 0a 09 66 6f 72 20 28 63 63 63 ets */..for (ccc b6d0: 5f 63 75 72 72 20 3d 20 63 63 63 5f 74 6c 76 3b _curr = ccc_tlv; b6e0: 20 63 63 63 5f 63 75 72 72 3b 20 63 63 63 5f 63 ccc_curr; ccc_c b6f0: 75 72 72 20 3d 20 63 63 63 5f 63 75 72 72 2d 3e urr = ccc_curr-> b700: 5f 6e 65 78 74 29 20 7b 0a 09 09 43 41 43 4b 45 _next) {...CACKE b710: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" b720: 46 6f 75 6e 64 20 74 61 67 3a 20 25 73 20 2e 2e Found tag: %s .. b730: 2e 20 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 . ", CACKEY_DEBU b740: 47 5f 46 55 4e 43 5f 54 41 47 5f 54 4f 5f 53 54 G_FUNC_TAG_TO_ST b750: 52 28 63 63 63 5f 63 75 72 72 2d 3e 74 61 67 29 R(ccc_curr->tag) b760: 29 3b 0a 0a 09 09 69 66 20 28 63 63 63 5f 63 75 );....if (ccc_cu b770: 72 72 2d 3e 74 61 67 20 21 3d 20 47 53 43 49 53 rr->tag != GSCIS b780: 5f 54 41 47 5f 43 41 52 44 55 52 4c 29 20 7b 0a _TAG_CARDURL) {. b790: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ b7a0: 50 52 49 4e 54 46 28 22 20 20 2e 2e 2e 20 73 6b PRINTF(" ... sk b7b0: 69 70 70 69 6e 67 20 69 74 20 28 77 65 20 6f 6e ipping it (we on b7c0: 6c 79 20 63 61 72 65 20 61 62 6f 75 74 20 43 41 ly care about CA b7d0: 52 44 55 52 4c 73 29 22 29 3b 0a 0a 09 09 09 63 RDURLs)");.....c b7e0: 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 ontinue;...}.... b7f0: 69 66 20 28 28 63 63 63 5f 63 75 72 72 2d 3e 76 if ((ccc_curr->v b800: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 alue_cardurl->ap b810: 70 74 79 70 65 20 26 20 43 41 43 4b 45 59 5f 54 ptype & CACKEY_T b820: 4c 56 5f 41 50 50 5f 50 4b 49 29 20 21 3d 20 43 LV_APP_PKI) != C b830: 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b ACKEY_TLV_APP_PK b840: 49 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 I) {....CACKEY_D b850: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 20 2e EBUG_PRINTF(" . b860: 2e 2e 20 73 6b 69 70 70 69 6e 67 20 69 74 20 28 .. skipping it ( b870: 77 65 20 6f 6e 6c 79 20 63 61 72 65 20 61 62 6f we only care abo b880: 75 74 20 50 4b 49 20 61 70 70 6c 65 74 73 2c 20 ut PKI applets, b890: 74 68 69 73 20 61 70 70 6c 65 74 20 73 75 70 70 this applet supp b8a0: 6f 72 74 73 3a 20 25 73 2f 25 30 32 78 29 22 2c orts: %s/%02x)", b8b0: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 CACKEY_DEBUG_FU b8c0: 4e 43 5f 41 50 50 54 59 50 45 5f 54 4f 5f 53 54 NC_APPTYPE_TO_ST b8d0: 52 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 R(ccc_curr->valu b8e0: 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 74 79 e_cardurl->appty b8f0: 70 65 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 69 pe), (unsigned i b900: 6e 74 29 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 nt) ccc_curr->va b910: 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 lue_cardurl->app b920: 74 79 70 65 29 3b 0a 0a 09 09 09 63 6f 6e 74 69 type);.....conti b930: 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b nue;...}....CACK b940: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 EY_DEBUG_PRINTBU b950: 46 28 22 52 49 44 3a 22 2c 20 63 63 63 5f 63 75 F("RID:", ccc_cu b960: 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 rr->value_cardur b970: 6c 2d 3e 72 69 64 2c 20 73 69 7a 65 6f 66 28 63 l->rid, sizeof(c b980: 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 cc_curr->value_c b990: 61 72 64 75 72 6c 2d 3e 72 69 64 29 29 3b 0a 09 ardurl->rid));.. b9a0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR b9b0: 49 4e 54 46 28 22 41 70 70 49 44 20 3d 20 25 73 INTF("AppID = %s b9c0: 2f 25 30 34 6c 78 22 2c 20 43 41 43 4b 45 59 5f /%04lx", CACKEY_ b9d0: 44 45 42 55 47 5f 46 55 4e 43 5f 4f 42 4a 49 44 DEBUG_FUNC_OBJID b9e0: 5f 54 4f 5f 53 54 52 28 63 63 63 5f 63 75 72 72 _TO_STR(ccc_curr b9f0: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d ->value_cardurl- ba00: 3e 61 70 70 69 64 29 2c 20 28 75 6e 73 69 67 6e >appid), (unsign ba10: 65 64 20 6c 6f 6e 67 29 20 63 63 63 5f 63 75 72 ed long) ccc_cur ba20: 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c r->value_cardurl ba30: 2d 3e 61 70 70 69 64 29 3b 0a 09 09 43 41 43 4b ->appid);...CACK ba40: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( ba50: 22 4f 62 6a 65 63 74 49 44 20 3d 20 25 73 2f 25 "ObjectID = %s/% ba60: 30 34 6c 78 22 2c 20 43 41 43 4b 45 59 5f 44 45 04lx", CACKEY_DE ba70: 42 55 47 5f 46 55 4e 43 5f 4f 42 4a 49 44 5f 54 BUG_FUNC_OBJID_T ba80: 4f 5f 53 54 52 28 63 63 63 5f 63 75 72 72 2d 3e O_STR(ccc_curr-> ba90: 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 6f value_cardurl->o baa0: 62 6a 65 63 74 69 64 29 2c 20 28 75 6e 73 69 67 bjectid), (unsig bab0: 6e 65 64 20 6c 6f 6e 67 29 20 63 63 63 5f 63 75 ned long) ccc_cu bac0: 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 rr->value_cardur bad0: 6c 2d 3e 6f 62 6a 65 63 74 69 64 29 3b 0a 0a 09 l->objectid);... bae0: 09 6d 65 6d 63 70 79 28 63 75 72 72 5f 61 69 64 .memcpy(curr_aid baf0: 2c 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 , ccc_curr->valu bb00: 65 5f 63 61 72 64 75 72 6c 2d 3e 72 69 64 2c 20 e_cardurl->rid, bb10: 73 69 7a 65 6f 66 28 63 63 63 5f 63 75 72 72 2d sizeof(ccc_curr- bb20: 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e >value_cardurl-> bb30: 72 69 64 29 29 3b 0a 09 09 63 75 72 72 5f 61 69 rid));...curr_ai bb40: 64 5b 73 69 7a 65 6f 66 28 63 75 72 72 5f 61 69 d[sizeof(curr_ai bb50: 64 29 20 2d 20 32 5d 20 3d 20 28 63 63 63 5f 63 d) - 2] = (ccc_c bb60: 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 urr->value_cardu bb70: 72 6c 2d 3e 61 70 70 69 64 20 3e 3e 20 38 29 20 rl->appid >> 8) bb80: 26 20 30 78 66 66 3b 0a 09 09 63 75 72 72 5f 61 & 0xff;...curr_a bb90: 69 64 5b 73 69 7a 65 6f 66 28 63 75 72 72 5f 61 id[sizeof(curr_a bba0: 69 64 29 20 2d 20 31 5d 20 3d 20 63 63 63 5f 63 id) - 1] = ccc_c bbb0: 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 urr->value_cardu bbc0: 72 6c 2d 3e 61 70 70 69 64 20 26 20 30 78 66 66 rl->appid & 0xff bbd0: 3b 0a 0a 09 09 2f 2a 20 53 65 6c 65 63 74 20 66 ;..../* Select f bbe0: 6f 75 6e 64 20 61 70 70 6c 65 74 20 2e 2e 2e 20 ound applet ... bbf0: 2a 2f 0a 09 09 73 65 6c 65 63 74 5f 72 65 74 20 */...select_ret bc00: 3d 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f = cackey_select_ bc10: 61 70 70 6c 65 74 28 73 6c 6f 74 2c 20 63 75 72 applet(slot, cur bc20: 72 5f 61 69 64 2c 20 73 69 7a 65 6f 66 28 63 75 r_aid, sizeof(cu bc30: 72 72 5f 61 69 64 29 29 3b 0a 09 09 69 66 20 28 rr_aid));...if ( bc40: 73 65 6c 65 63 74 5f 72 65 74 20 21 3d 20 43 41 select_ret != CA bc50: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 CKEY_PCSC_S_OK) bc60: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU bc70: 47 5f 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 G_PRINTF("Failed bc80: 20 74 6f 20 73 65 6c 65 63 74 20 61 70 70 6c 65 to select apple bc90: 74 2c 20 73 6b 69 70 70 69 6e 67 20 70 72 6f 63 t, skipping proc bca0: 65 73 73 69 6e 67 20 6f 66 20 74 68 69 73 20 6f essing of this o bcb0: 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 63 6f 6e bject");.....con bcc0: 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 2f 2a tinue;...}..../* bcd0: 20 2e 2e 2e 20 61 6e 64 20 6f 62 6a 65 63 74 20 ... and object bce0: 28 66 69 6c 65 29 20 2a 2f 0a 09 09 73 65 6c 65 (file) */...sele bcf0: 63 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f ct_ret = cackey_ bd00: 73 65 6c 65 63 74 5f 66 69 6c 65 28 73 6c 6f 74 select_file(slot bd10: 2c 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 , ccc_curr->valu bd20: 65 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 6a 65 63 e_cardurl->objec bd30: 74 69 64 29 3b 0a 09 09 69 66 20 28 73 65 6c 65 tid);...if (sele bd40: 63 74 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 ct_ret != CACKEY bd50: 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 _PCSC_S_OK) {... bd60: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR bd70: 49 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 INTF("Failed to bd80: 73 65 6c 65 63 74 20 66 69 6c 65 2c 20 73 6b 69 select file, ski bd90: 70 70 69 6e 67 20 70 72 6f 63 65 73 73 69 6e 67 pping processing bda0: 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 22 of this object" bdb0: 29 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b );.....continue; bdc0: 0a 09 09 7d 0a 0a 09 09 2f 2a 20 50 72 6f 63 65 ...}..../* Proce bdd0: 73 73 20 74 68 69 73 20 66 69 6c 65 27 73 20 54 ss this file's T bde0: 4c 56 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 63 LV looking for c bdf0: 65 72 74 69 66 69 63 61 74 65 73 20 2a 2f 0a 09 ertificates */.. be00: 09 61 70 70 5f 74 6c 76 20 3d 20 63 61 63 6b 65 .app_tlv = cacke be10: 79 5f 72 65 61 64 5f 74 6c 76 28 73 6c 6f 74 29 y_read_tlv(slot) be20: 3b 0a 0a 09 09 66 6f 72 20 28 61 70 70 5f 63 75 ;....for (app_cu be30: 72 72 20 3d 20 61 70 70 5f 74 6c 76 3b 20 61 70 rr = app_tlv; ap be40: 70 5f 63 75 72 72 3b 20 61 70 70 5f 63 75 72 72 p_curr; app_curr be50: 20 3d 20 61 70 70 5f 63 75 72 72 2d 3e 5f 6e 65 = app_curr->_ne be60: 78 74 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f xt) {....CACKEY_ be70: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 6f DEBUG_PRINTF("Fo be80: 75 6e 64 20 74 61 67 3a 20 25 73 22 2c 20 43 41 und tag: %s", CA be90: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ bea0: 54 41 47 5f 54 4f 5f 53 54 52 28 61 70 70 5f 63 TAG_TO_STR(app_c beb0: 75 72 72 2d 3e 74 61 67 29 29 3b 0a 09 09 09 69 urr->tag));....i bec0: 66 20 28 61 70 70 5f 63 75 72 72 2d 3e 74 61 67 f (app_curr->tag bed0: 20 21 3d 20 47 53 43 49 53 5f 54 41 47 5f 43 45 != GSCIS_TAG_CE bee0: 52 54 49 46 49 43 41 54 45 29 20 7b 0a 09 09 09 RTIFICATE) {.... bef0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR bf00: 49 4e 54 46 28 22 20 20 2e 2e 2e 20 73 6b 69 70 INTF(" ... skip bf10: 70 69 6e 67 20 69 74 20 28 77 65 20 6f 6e 6c 79 ping it (we only bf20: 20 63 61 72 65 20 61 62 6f 75 74 20 43 45 52 54 care about CERT bf30: 49 46 49 43 41 54 45 73 29 22 29 3b 0a 0a 09 09 IFICATEs)");.... bf40: 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 7d ..continue;....} bf50: 0a 0a 09 09 09 63 75 72 72 5f 69 64 20 3d 20 26 .....curr_id = & bf60: 63 65 72 74 73 5b 6f 75 74 69 64 78 5d 3b 0a 09 certs[outidx];.. bf70: 09 09 6f 75 74 69 64 78 2b 2b 3b 0a 0a 09 09 09 ..outidx++;..... bf80: 6d 65 6d 63 70 79 28 63 75 72 72 5f 69 64 2d 3e memcpy(curr_id-> bf90: 61 70 70 6c 65 74 2c 20 63 75 72 72 5f 61 69 64 applet, curr_aid bfa0: 2c 20 73 69 7a 65 6f 66 28 63 75 72 72 5f 69 64 , sizeof(curr_id bfb0: 2d 3e 61 70 70 6c 65 74 29 29 3b 0a 09 09 09 63 ->applet));....c bfc0: 75 72 72 5f 69 64 2d 3e 66 69 6c 65 20 3d 20 63 urr_id->file = c bfd0: 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 cc_curr->value_c bfe0: 61 72 64 75 72 6c 2d 3e 6f 62 6a 65 63 74 69 64 ardurl->objectid bff0: 3b 0a 09 09 09 63 75 72 72 5f 69 64 2d 3e 6b 65 ;....curr_id->ke c000: 79 73 69 7a 65 20 3d 20 2d 31 3b 0a 0a 09 09 09 ysize = -1;..... c010: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI c020: 4e 54 46 28 22 46 69 6c 6c 69 6e 67 20 63 75 72 NTF("Filling cur c030: 72 5f 69 64 2d 3e 61 70 70 6c 65 74 20 28 25 70 r_id->applet (%p c040: 29 20 77 69 74 68 20 25 6c 75 20 62 79 74 65 73 ) with %lu bytes c050: 3a 22 2c 20 63 75 72 72 5f 69 64 2d 3e 61 70 70 :", curr_id->app c060: 6c 65 74 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c let, (unsigned l c070: 6f 6e 67 29 20 73 69 7a 65 6f 66 28 63 75 72 72 ong) sizeof(curr c080: 5f 69 64 2d 3e 61 70 70 6c 65 74 29 29 3b 0a 09 _id->applet));.. c090: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P c0a0: 52 49 4e 54 42 55 46 28 22 56 41 4c 3a 22 2c 20 RINTBUF("VAL:", c0b0: 63 75 72 72 5f 69 64 2d 3e 61 70 70 6c 65 74 2c curr_id->applet, c0c0: 20 73 69 7a 65 6f 66 28 63 75 72 72 5f 69 64 2d sizeof(curr_id- c0d0: 3e 61 70 70 6c 65 74 29 29 3b 0a 0a 09 09 09 63 >applet));.....c c0e0: 75 72 72 5f 69 64 2d 3e 63 65 72 74 69 66 69 63 urr_id->certific c0f0: 61 74 65 5f 6c 65 6e 20 3d 20 61 70 70 5f 63 75 ate_len = app_cu c100: 72 72 2d 3e 6c 65 6e 67 74 68 3b 0a 0a 09 09 09 rr->length;..... c110: 63 75 72 72 5f 69 64 2d 3e 63 65 72 74 69 66 69 curr_id->certifi c120: 63 61 74 65 20 3d 20 6d 61 6c 6c 6f 63 28 63 75 cate = malloc(cu c130: 72 72 5f 69 64 2d 3e 63 65 72 74 69 66 69 63 61 rr_id->certifica c140: 74 65 5f 6c 65 6e 29 3b 0a 09 09 09 6d 65 6d 63 te_len);....memc c150: 70 79 28 63 75 72 72 5f 69 64 2d 3e 63 65 72 74 py(curr_id->cert c160: 69 66 69 63 61 74 65 2c 20 61 70 70 5f 63 75 72 ificate, app_cur c170: 72 2d 3e 76 61 6c 75 65 2c 20 63 75 72 72 5f 69 r->value, curr_i c180: 64 2d 3e 63 65 72 74 69 66 69 63 61 74 65 5f 6c d->certificate_l c190: 65 6e 29 3b 0a 0a 09 09 09 69 66 20 28 6f 75 74 en);.....if (out c1a0: 69 64 78 20 3e 3d 20 2a 63 6f 75 6e 74 29 20 7b idx >= *count) { c1b0: 0a 09 09 09 09 69 66 20 28 63 65 72 74 73 5f 72 .....if (certs_r c1c0: 65 73 69 7a 61 62 6c 65 29 20 7b 0a 09 09 09 09 esizable) {..... c1d0: 09 2a 63 6f 75 6e 74 20 2a 3d 20 32 3b 0a 09 09 .*count *= 2;... c1e0: 09 09 09 63 65 72 74 73 20 3d 20 72 65 61 6c 6c ...certs = reall c1f0: 6f 63 28 63 65 72 74 73 2c 20 73 69 7a 65 6f 66 oc(certs, sizeof c200: 28 2a 63 65 72 74 73 29 20 2a 20 28 2a 63 6f 75 (*certs) * (*cou c210: 6e 74 29 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 nt));.....} else c220: 20 7b 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 {......break;.. c230: 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 ...}....}...}... c240: 09 63 61 63 6b 65 79 5f 66 72 65 65 5f 74 6c 76 .cackey_free_tlv c250: 28 61 70 70 5f 74 6c 76 29 3b 0a 0a 09 09 69 66 (app_tlv);....if c260: 20 28 6f 75 74 69 64 78 20 3e 3d 20 2a 63 6f 75 (outidx >= *cou c270: 6e 74 29 20 7b 0a 09 09 09 62 72 65 61 6b 3b 0a nt) {....break;. c280: 09 09 7d 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f ..}..}...cackey_ c290: 66 72 65 65 5f 74 6c 76 28 63 63 63 5f 74 6c 76 free_tlv(ccc_tlv c2a0: 29 3b 0a 0a 09 2a 63 6f 75 6e 74 20 3d 20 6f 75 );...*count = ou c2b0: 74 69 64 78 3b 0a 0a 09 69 66 20 28 63 65 72 74 tidx;...if (cert c2c0: 73 5f 72 65 73 69 7a 61 62 6c 65 29 20 7b 0a 09 s_resizable) {.. c2d0: 09 63 65 72 74 73 20 3d 20 72 65 61 6c 6c 6f 63 .certs = realloc c2e0: 28 63 65 72 74 73 2c 20 73 69 7a 65 6f 66 28 2a (certs, sizeof(* c2f0: 63 65 72 74 73 29 20 2a 20 28 2a 63 6f 75 6e 74 certs) * (*count c300: 29 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 54 65 72 6d ));..}.../* Term c310: 69 6e 61 74 65 20 53 6d 61 72 74 43 61 72 64 20 inate SmartCard c320: 54 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 Transaction */.. c330: 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 cackey_end_trans c340: 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 action(slot);... c350: 72 65 74 75 72 6e 28 63 65 72 74 73 29 3b 0a 7d return(certs);.} c360: 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 ../*. * SYNPOSIS c370: 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 . * .... *. c380: 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 * ARGUMENTS. * c390: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 52 45 54 .... *. * RET c3a0: 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 URN VALUE. * c3b0: 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 .... *. * NOTES c3c0: 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 . * .... *. c3d0: 2a 2f 0a 73 74 61 74 69 63 20 73 73 69 7a 65 5f */.static ssize_ c3e0: 74 20 63 61 63 6b 65 79 5f 73 69 67 6e 64 65 63 t cackey_signdec c3f0: 72 79 70 74 28 73 74 72 75 63 74 20 63 61 63 6b rypt(struct cack c400: 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 73 ey_slot *slot, s c410: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 69 64 65 truct cackey_ide c420: 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 74 79 2c ntity *identity, c430: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a unsigned char * c440: 62 75 66 2c 20 73 69 7a 65 5f 74 20 62 75 66 6c buf, size_t bufl c450: 65 6e 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 en, unsigned cha c460: 72 20 2a 6f 75 74 62 75 66 2c 20 73 69 7a 65 5f r *outbuf, size_ c470: 74 20 6f 75 74 62 75 66 6c 65 6e 2c 20 69 6e 74 t outbuflen, int c480: 20 70 61 64 49 6e 70 75 74 2c 20 69 6e 74 20 75 padInput, int u c490: 6e 70 61 64 4f 75 74 70 75 74 29 20 7b 0a 09 75 npadOutput) {..u c4a0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 74 6d nsigned char *tm c4b0: 70 62 75 66 2c 20 2a 74 6d 70 62 75 66 5f 73 2c pbuf, *tmpbuf_s, c4c0: 20 2a 6f 75 74 62 75 66 5f 73 3b 0a 09 75 6e 73 *outbuf_s;..uns c4d0: 69 67 6e 65 64 20 63 68 61 72 20 62 79 74 65 73 igned char bytes c4e0: 5f 74 6f 5f 73 65 6e 64 2c 20 70 31 3b 0a 09 75 _to_send, p1;..u c4f0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 62 6c 6f nsigned char blo c500: 63 6b 74 79 70 65 3b 0a 09 63 61 63 6b 65 79 5f cktype;..cackey_ c510: 72 65 74 20 73 65 6e 64 5f 72 65 74 3b 0a 09 75 ret send_ret;..u c520: 69 6e 74 31 36 5f 74 20 72 65 73 70 63 6f 64 65 int16_t respcode c530: 3b 0a 09 73 73 69 7a 65 5f 74 20 72 65 74 76 61 ;..ssize_t retva c540: 6c 20 3d 20 30 2c 20 75 6e 70 61 64 6f 66 66 73 l = 0, unpadoffs c550: 65 74 3b 0a 09 73 69 7a 65 5f 74 20 74 6d 70 62 et;..size_t tmpb c560: 75 66 6c 65 6e 2c 20 70 61 64 6c 65 6e 2c 20 74 uflen, padlen, t c570: 6d 70 6f 75 74 62 75 66 6c 65 6e 3b 0a 09 69 6e mpoutbuflen;..in c580: 74 20 66 72 65 65 5f 74 6d 70 62 75 66 20 3d 20 t free_tmpbuf = c590: 30 3b 0a 09 69 6e 74 20 6c 65 3b 0a 0a 09 43 41 0;..int le;...CA c5a0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT c5b0: 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... c5c0: 69 66 20 28 73 6c 6f 74 20 3d 3d 20 4e 55 4c 4c if (slot == NULL c5d0: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB c5e0: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error c5f0: 2e 20 20 73 6c 6f 74 20 69 73 20 4e 55 4c 4c 22 . slot is NULL" c600: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 );....return(-1) c610: 3b 0a 09 7d 0a 0a 09 69 66 20 28 62 75 66 20 3d ;..}...if (buf = c620: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK c630: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( c640: 22 45 72 72 6f 72 2e 20 20 62 75 66 20 69 73 20 "Error. buf is c650: 4e 55 4c 4c 22 29 3b 0a 0a 09 09 72 65 74 75 72 NULL");....retur c660: 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 n(-1);..}...if ( c670: 6f 75 74 62 75 66 20 3d 3d 20 4e 55 4c 4c 29 20 outbuf == NULL) c680: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG c690: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. c6a0: 20 6f 75 74 62 75 66 20 69 73 20 4e 55 4c 4c 22 outbuf is NULL" c6b0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 );....return(-1) c6c0: 3b 0a 09 7d 0a 0a 09 69 66 20 28 69 64 65 6e 74 ;..}...if (ident c6d0: 69 74 79 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 ity == NULL) {.. c6e0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR c6f0: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 69 64 INTF("Error. id c700: 65 6e 74 69 74 79 20 69 73 20 4e 55 4c 4c 22 29 entity is NULL") c710: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b ;....return(-1); c720: 0a 09 7d 0a 0a 09 69 66 20 28 69 64 65 6e 74 69 ..}...if (identi c730: 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 74 ty->pcsc_identit c740: 79 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 y == NULL) {...C c750: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN c760: 54 46 28 22 45 72 72 6f 72 2e 20 20 69 64 65 6e TF("Error. iden c770: 74 69 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 tity->pcsc_ident c780: 69 74 79 20 69 73 20 4e 55 4c 4c 22 29 3b 0a 0a ity is NULL");.. c790: 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d ..return(-1);..} c7a0: 0a 0a 09 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 .../* Determine c7b0: 69 64 65 6e 74 69 74 79 20 4b 65 79 20 73 69 7a identity Key siz c7c0: 65 20 2a 2f 0a 09 69 66 20 28 69 64 65 6e 74 69 e */..if (identi c7d0: 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 74 ty->pcsc_identit c7e0: 79 2d 3e 6b 65 79 73 69 7a 65 20 3c 20 30 29 20 y->keysize < 0) c7f0: 7b 0a 09 09 69 64 65 6e 74 69 74 79 2d 3e 70 63 {...identity->pc c800: 73 63 5f 69 64 65 6e 74 69 74 79 2d 3e 6b 65 79 sc_identity->key c810: 73 69 7a 65 20 3d 20 78 35 30 39 5f 74 6f 5f 6b size = x509_to_k c820: 65 79 73 69 7a 65 28 69 64 65 6e 74 69 74 79 2d eysize(identity- c830: 3e 70 63 73 63 5f 69 64 65 6e 74 69 74 79 2d 3e >pcsc_identity-> c840: 63 65 72 74 69 66 69 63 61 74 65 2c 20 69 64 65 certificate, ide c850: 6e 74 69 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e ntity->pcsc_iden c860: 74 69 74 79 2d 3e 63 65 72 74 69 66 69 63 61 74 tity->certificat c870: 65 5f 6c 65 6e 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 e_len);..}.../* c880: 50 61 64 20 6d 65 73 73 61 67 65 20 74 6f 20 6b Pad message to k c890: 65 79 20 73 69 7a 65 20 2a 2f 0a 09 69 66 20 28 ey size */..if ( c8a0: 70 61 64 49 6e 70 75 74 29 20 7b 0a 09 09 69 66 padInput) {...if c8b0: 20 28 69 64 65 6e 74 69 74 79 2d 3e 70 63 73 63 (identity->pcsc c8c0: 5f 69 64 65 6e 74 69 74 79 2d 3e 6b 65 79 73 69 _identity->keysi c8d0: 7a 65 20 3e 20 30 29 20 7b 0a 09 09 09 69 66 20 ze > 0) {....if c8e0: 28 62 75 66 6c 65 6e 20 21 3d 20 69 64 65 6e 74 (buflen != ident c8f0: 69 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 ity->pcsc_identi c900: 74 79 2d 3e 6b 65 79 73 69 7a 65 29 20 7b 0a 09 ty->keysize) {.. c910: 09 09 09 69 66 20 28 62 75 66 6c 65 6e 20 3e 20 ...if (buflen > c920: 28 69 64 65 6e 74 69 74 79 2d 3e 70 63 73 63 5f (identity->pcsc_ c930: 69 64 65 6e 74 69 74 79 2d 3e 6b 65 79 73 69 7a identity->keysiz c940: 65 20 2b 20 33 29 29 20 7b 0a 09 09 09 09 09 43 e + 3)) {......C c950: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN c960: 54 46 28 22 45 72 72 6f 72 2e 20 20 4d 65 73 73 TF("Error. Mess c970: 61 67 65 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 age is too large c980: 20 74 6f 20 73 69 67 6e 2f 64 65 63 72 79 70 74 to sign/decrypt c990: 22 29 3b 0a 0a 09 09 09 09 09 72 65 74 75 72 6e ");.......return c9a0: 28 2d 31 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 (-1);.....}..... c9b0: 09 74 6d 70 62 75 66 6c 65 6e 20 3d 20 69 64 65 .tmpbuflen = ide c9c0: 6e 74 69 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e ntity->pcsc_iden c9d0: 74 69 74 79 2d 3e 6b 65 79 73 69 7a 65 3b 0a 09 tity->keysize;.. c9e0: 09 09 09 74 6d 70 62 75 66 20 3d 20 6d 61 6c 6c ...tmpbuf = mall c9f0: 6f 63 28 74 6d 70 62 75 66 6c 65 6e 29 3b 0a 09 oc(tmpbuflen);.. ca00: 09 09 09 66 72 65 65 5f 74 6d 70 62 75 66 20 3d ...free_tmpbuf = ca10: 20 31 3b 0a 0a 09 09 09 09 70 61 64 6c 65 6e 20 1;......padlen ca20: 3d 20 74 6d 70 62 75 66 6c 65 6e 20 2d 20 62 75 = tmpbuflen - bu ca30: 66 6c 65 6e 20 2d 20 33 3b 0a 0a 09 09 09 09 2f flen - 3;....../ ca40: 2a 20 52 53 41 20 50 4b 43 53 23 31 20 45 4d 53 * RSA PKCS#1 EMS ca50: 41 2d 50 4b 43 53 31 2d 76 31 5f 35 20 50 61 64 A-PKCS1-v1_5 Pad ca60: 64 69 6e 67 20 2a 2f 0a 09 09 09 09 74 6d 70 62 ding */.....tmpb ca70: 75 66 5b 30 5d 20 3d 20 30 78 30 30 3b 0a 09 09 uf[0] = 0x00;... ca80: 09 09 74 6d 70 62 75 66 5b 31 5d 20 3d 20 30 78 ..tmpbuf[1] = 0x ca90: 30 31 3b 0a 09 09 09 09 6d 65 6d 73 65 74 28 26 01;.....memset(& caa0: 74 6d 70 62 75 66 5b 32 5d 2c 20 30 78 46 46 2c tmpbuf[2], 0xFF, cab0: 20 70 61 64 6c 65 6e 29 3b 0a 09 09 09 09 74 6d padlen);.....tm cac0: 70 62 75 66 5b 70 61 64 6c 65 6e 20 2b 20 32 5d pbuf[padlen + 2] cad0: 3d 20 30 78 30 30 3b 0a 09 09 09 09 6d 65 6d 63 = 0x00;.....memc cae0: 70 79 28 26 74 6d 70 62 75 66 5b 70 61 64 6c 65 py(&tmpbuf[padle caf0: 6e 20 2b 20 33 5d 2c 20 62 75 66 2c 20 62 75 66 n + 3], buf, buf cb00: 6c 65 6e 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 len);......CACKE cb10: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 Y_DEBUG_PRINTBUF cb20: 28 22 55 6e 70 61 64 64 65 64 3a 22 2c 20 62 75 ("Unpadded:", bu cb30: 66 2c 20 62 75 66 6c 65 6e 29 3b 0a 09 09 09 09 f, buflen);..... cb40: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI cb50: 4e 54 42 55 46 28 22 50 61 64 64 65 64 3a 22 2c NTBUF("Padded:", cb60: 20 74 6d 70 62 75 66 2c 20 74 6d 70 62 75 66 6c tmpbuf, tmpbufl cb70: 65 6e 29 3b 0a 09 09 09 7d 20 65 6c 73 65 20 7b en);....} else { cb80: 0a 09 09 09 09 74 6d 70 62 75 66 20 3d 20 62 75 .....tmpbuf = bu cb90: 66 3b 0a 09 09 09 09 74 6d 70 62 75 66 6c 65 6e f;.....tmpbuflen cba0: 20 3d 20 62 75 66 6c 65 6e 3b 0a 09 09 09 09 66 = buflen;.....f cbb0: 72 65 65 5f 74 6d 70 62 75 66 20 3d 20 30 3b 0a ree_tmpbuf = 0;. cbc0: 09 09 09 09 70 61 64 6c 65 6e 20 3d 20 30 3b 0a ....padlen = 0;. cbd0: 09 09 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a ...}...} else {. cbe0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ cbf0: 50 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 PRINTF("Unable t cc00: 6f 20 64 65 74 65 72 6d 69 6e 65 20 6b 65 79 20 o determine key cc10: 73 69 7a 65 2c 20 68 6f 70 69 6e 67 20 74 68 65 size, hoping the cc20: 20 6d 65 73 73 61 67 65 20 69 73 20 70 72 6f 70 message is prop cc30: 65 72 6c 79 20 70 61 64 64 65 64 21 22 29 3b 0a erly padded!");. cc40: 0a 09 09 09 74 6d 70 62 75 66 20 3d 20 62 75 66 ....tmpbuf = buf cc50: 3b 0a 09 09 09 74 6d 70 62 75 66 6c 65 6e 20 3d ;....tmpbuflen = cc60: 20 62 75 66 6c 65 6e 3b 0a 09 09 09 66 72 65 65 buflen;....free cc70: 5f 74 6d 70 62 75 66 20 3d 20 30 3b 0a 09 09 09 _tmpbuf = 0;.... cc80: 70 61 64 6c 65 6e 20 3d 20 30 3b 0a 09 09 7d 0a padlen = 0;...}. cc90: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 74 6d 70 62 .} else {...tmpb cca0: 75 66 20 3d 20 62 75 66 3b 0a 09 09 74 6d 70 62 uf = buf;...tmpb ccb0: 75 66 6c 65 6e 20 3d 20 62 75 66 6c 65 6e 3b 0a uflen = buflen;. ccc0: 09 09 66 72 65 65 5f 74 6d 70 62 75 66 20 3d 20 ..free_tmpbuf = ccd0: 30 3b 0a 09 09 70 61 64 6c 65 6e 20 3d 20 30 3b 0;...padlen = 0; cce0: 0a 09 7d 0a 0a 09 2f 2a 20 42 65 67 69 6e 20 74 ..}.../* Begin t ccf0: 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 63 ransaction */..c cd00: 61 63 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e ackey_begin_tran cd10: 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a saction(slot);.. cd20: 09 2f 2a 20 53 65 6c 65 63 74 20 63 6f 72 72 65 ./* Select corre cd30: 63 74 20 61 70 70 6c 65 74 20 2a 2f 0a 09 43 41 ct applet */..CA cd40: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT cd50: 46 28 22 53 65 6c 65 63 74 69 6e 67 20 61 70 70 F("Selecting app cd60: 6c 65 74 20 66 6f 75 6e 64 20 61 74 20 25 70 20 let found at %p cd70: 2e 2e 2e 22 2c 20 69 64 65 6e 74 69 74 79 2d 3e ...", identity-> cd80: 70 63 73 63 5f 69 64 65 6e 74 69 74 79 2d 3e 61 pcsc_identity->a cd90: 70 70 6c 65 74 29 3b 0a 09 63 61 63 6b 65 79 5f pplet);..cackey_ cda0: 73 65 6c 65 63 74 5f 61 70 70 6c 65 74 28 73 6c select_applet(sl cdb0: 6f 74 2c 20 69 64 65 6e 74 69 74 79 2d 3e 70 63 ot, identity->pc cdc0: 73 63 5f 69 64 65 6e 74 69 74 79 2d 3e 61 70 70 sc_identity->app cdd0: 6c 65 74 2c 20 73 69 7a 65 6f 66 28 69 64 65 6e let, sizeof(iden cde0: 74 69 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 tity->pcsc_ident cdf0: 69 74 79 2d 3e 61 70 70 6c 65 74 29 29 3b 0a 0a ity->applet));.. ce00: 09 2f 2a 20 53 65 6c 65 63 74 20 63 6f 72 72 65 ./* Select corre ce10: 63 74 20 66 69 6c 65 20 2a 2f 0a 09 63 61 63 6b ct file */..cack ce20: 65 79 5f 73 65 6c 65 63 74 5f 66 69 6c 65 28 73 ey_select_file(s ce30: 6c 6f 74 2c 20 69 64 65 6e 74 69 74 79 2d 3e 70 lot, identity->p ce40: 63 73 63 5f 69 64 65 6e 74 69 74 79 2d 3e 66 69 csc_identity->fi ce50: 6c 65 29 3b 0a 0a 09 74 6d 70 62 75 66 5f 73 20 le);...tmpbuf_s ce60: 3d 20 74 6d 70 62 75 66 3b 0a 09 6f 75 74 62 75 = tmpbuf;..outbu ce70: 66 5f 73 20 3d 20 6f 75 74 62 75 66 3b 0a 09 77 f_s = outbuf;..w ce80: 68 69 6c 65 20 28 74 6d 70 62 75 66 6c 65 6e 29 hile (tmpbuflen) ce90: 20 7b 0a 09 09 69 66 20 28 74 6d 70 62 75 66 6c {...if (tmpbufl cea0: 65 6e 20 3e 20 32 34 35 29 20 7b 0a 09 09 09 62 en > 245) {....b ceb0: 79 74 65 73 5f 74 6f 5f 73 65 6e 64 20 3d 20 32 ytes_to_send = 2 cec0: 34 35 3b 0a 09 09 09 70 31 20 3d 20 30 78 38 30 45;....p1 = 0x80 ced0: 3b 0a 09 09 09 6c 65 20 3d 20 30 78 30 30 3b 0a ;....le = 0x00;. cee0: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 62 79 ..} else {....by cef0: 74 65 73 5f 74 6f 5f 73 65 6e 64 20 3d 20 74 6d tes_to_send = tm cf00: 70 62 75 66 6c 65 6e 3b 0a 09 09 09 70 31 20 3d pbuflen;....p1 = cf10: 20 30 78 30 30 3b 0a 09 09 09 6c 65 20 3d 20 30 0x00;....le = 0 cf20: 78 30 30 3b 0a 09 09 7d 0a 0a 09 09 74 6d 70 6f x00;...}....tmpo cf30: 75 74 62 75 66 6c 65 6e 20 3d 20 6f 75 74 62 75 utbuflen = outbu cf40: 66 6c 65 6e 3b 0a 0a 09 09 73 65 6e 64 5f 72 65 flen;....send_re cf50: 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f t = cackey_send_ cf60: 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 apdu(slot, GSCIS cf70: 5f 43 4c 41 53 53 5f 47 4c 4f 42 41 4c 5f 50 4c _CLASS_GLOBAL_PL cf80: 41 54 46 4f 52 4d 2c 20 47 53 43 49 53 5f 49 4e ATFORM, GSCIS_IN cf90: 53 54 52 5f 53 49 47 4e 44 45 43 52 59 50 54 2c STR_SIGNDECRYPT, cfa0: 20 70 31 2c 20 30 78 30 30 2c 20 62 79 74 65 73 p1, 0x00, bytes cfb0: 5f 74 6f 5f 73 65 6e 64 2c 20 74 6d 70 62 75 66 _to_send, tmpbuf cfc0: 2c 20 6c 65 2c 20 26 72 65 73 70 63 6f 64 65 2c , le, &respcode, cfd0: 20 6f 75 74 62 75 66 2c 20 26 74 6d 70 6f 75 74 outbuf, &tmpout cfe0: 62 75 66 6c 65 6e 29 3b 0a 09 09 69 66 20 28 73 buflen);...if (s cff0: 65 6e 64 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 end_ret != CACKE d000: 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 Y_PCSC_S_OK) {.. d010: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P d020: 52 49 4e 54 46 28 22 41 44 50 55 20 53 65 6e 64 RINTF("ADPU Send d030: 69 6e 67 20 46 61 69 6c 65 64 20 2d 2d 20 72 65 ing Failed -- re d040: 74 75 72 6e 69 6e 67 20 69 6e 20 65 72 72 6f 72 turning in error d050: 2e 22 29 3b 0a 0a 09 09 09 69 66 20 28 66 72 65 .");.....if (fre d060: 65 5f 74 6d 70 62 75 66 29 20 7b 0a 09 09 09 09 e_tmpbuf) {..... d070: 69 66 20 28 74 6d 70 62 75 66 5f 73 29 20 7b 0a if (tmpbuf_s) {. d080: 09 09 09 09 09 66 72 65 65 28 74 6d 70 62 75 66 .....free(tmpbuf d090: 5f 73 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 0a _s);.....}....}. d0a0: 0a 09 09 09 2f 2a 20 45 6e 64 20 74 72 61 6e 73 ..../* End trans d0b0: 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 09 63 61 63 action */....cac d0c0: 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 key_end_transact d0d0: 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 09 69 ion(slot);.....i d0e0: 66 20 28 72 65 73 70 63 6f 64 65 20 3d 3d 20 30 f (respcode == 0 d0f0: 78 36 39 38 32 29 20 7b 0a 09 09 09 09 43 41 43 x6982) {.....CAC d100: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF d110: 28 22 53 65 63 75 72 69 74 79 20 73 74 61 74 75 ("Security statu d120: 73 20 6e 6f 74 20 73 61 74 69 73 69 66 69 65 64 s not satisified d130: 2e 20 20 52 65 74 75 72 6e 69 6e 67 20 4e 45 45 . Returning NEE d140: 44 4c 4f 47 49 4e 22 29 3b 0a 0a 09 09 09 09 73 DLOGIN");......s d150: 6c 6f 74 2d 3e 73 6c 6f 74 5f 72 65 73 65 74 20 lot->slot_reset d160: 3d 20 31 3b 0a 09 09 09 09 73 6c 6f 74 2d 3e 74 = 1;.....slot->t d170: 6f 6b 65 6e 5f 66 6c 61 67 73 20 3d 20 43 4b 46 oken_flags = CKF d180: 5f 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 3b _LOGIN_REQUIRED; d190: 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 43 41 43 ......return(CAC d1a0: 4b 45 59 5f 50 43 53 43 5f 45 5f 4e 45 45 44 4c KEY_PCSC_E_NEEDL d1b0: 4f 47 49 4e 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 OGIN);....}..... d1c0: 69 66 20 28 73 65 6e 64 5f 72 65 74 20 3d 3d 20 if (send_ret == d1d0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 4f CACKEY_PCSC_E_TO d1e0: 4b 45 4e 41 42 53 45 4e 54 29 20 7b 0a 09 09 09 KENABSENT) {.... d1f0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR d200: 49 4e 54 46 28 22 54 6f 6b 65 6e 20 61 62 73 65 INTF("Token abse d210: 6e 74 2e 20 20 52 65 74 75 72 6e 69 6e 67 20 54 nt. Returning T d220: 4f 4b 45 4e 41 42 53 45 4e 54 22 29 3b 0a 0a 09 OKENABSENT");... d230: 09 09 09 73 6c 6f 74 2d 3e 73 6c 6f 74 5f 72 65 ...slot->slot_re d240: 73 65 74 20 3d 20 31 3b 0a 09 09 09 09 73 6c 6f set = 1;.....slo d250: 74 2d 3e 74 6f 6b 65 6e 5f 66 6c 61 67 73 20 3d t->token_flags = d260: 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52 45 51 55 49 CKF_LOGIN_REQUI d270: 52 45 44 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e RED;......return d280: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 (CACKEY_PCSC_E_T d290: 4f 4b 45 4e 41 42 53 45 4e 54 29 3b 0a 09 09 09 OKENABSENT);.... d2a0: 7d 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 }.....return(-1) d2b0: 3b 0a 09 09 7d 0a 0a 09 09 74 6d 70 62 75 66 20 ;...}....tmpbuf d2c0: 2b 3d 20 62 79 74 65 73 5f 74 6f 5f 73 65 6e 64 += bytes_to_send d2d0: 3b 0a 09 09 74 6d 70 62 75 66 6c 65 6e 20 2d 3d ;...tmpbuflen -= d2e0: 20 62 79 74 65 73 5f 74 6f 5f 73 65 6e 64 3b 0a bytes_to_send;. d2f0: 0a 09 09 6f 75 74 62 75 66 20 2b 3d 20 74 6d 70 ...outbuf += tmp d300: 6f 75 74 62 75 66 6c 65 6e 3b 0a 09 09 6f 75 74 outbuflen;...out d310: 62 75 66 6c 65 6e 20 2d 3d 20 74 6d 70 6f 75 74 buflen -= tmpout d320: 62 75 66 6c 65 6e 3b 0a 09 09 72 65 74 76 61 6c buflen;...retval d330: 20 2b 3d 20 74 6d 70 6f 75 74 62 75 66 6c 65 6e += tmpoutbuflen d340: 3b 0a 09 7d 0a 0a 09 69 66 20 28 66 72 65 65 5f ;..}...if (free_ d350: 74 6d 70 62 75 66 29 20 7b 0a 09 09 69 66 20 28 tmpbuf) {...if ( d360: 74 6d 70 62 75 66 5f 73 29 20 7b 0a 09 09 09 66 tmpbuf_s) {....f d370: 72 65 65 28 74 6d 70 62 75 66 5f 73 29 3b 0a 09 ree(tmpbuf_s);.. d380: 09 7d 0a 09 7d 0a 0a 09 6f 75 74 62 75 66 20 3d .}..}...outbuf = d390: 20 6f 75 74 62 75 66 5f 73 3b 0a 0a 09 2f 2a 20 outbuf_s;.../* d3a0: 45 6e 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 End transaction d3b0: 2a 2f 0a 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 */..cackey_end_t d3c0: 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 ransaction(slot) d3d0: 3b 0a 0a 23 69 66 64 65 66 20 43 41 43 4b 45 59 ;..#ifdef CACKEY d3e0: 5f 50 41 52 41 4e 4f 49 44 0a 23 20 20 69 66 64 _PARANOID.# ifd d3f0: 65 66 20 5f 50 4f 53 49 58 5f 53 53 49 5a 45 5f ef _POSIX_SSIZE_ d400: 4d 41 58 0a 09 69 66 20 28 6f 75 74 62 75 66 6c MAX..if (outbufl d410: 65 6e 20 3e 20 5f 50 4f 53 49 58 5f 53 53 49 5a en > _POSIX_SSIZ d420: 45 5f 4d 41 58 29 20 7b 0a 09 09 43 41 43 4b 45 E_MAX) {...CACKE d430: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" d440: 4f 75 74 62 75 66 6c 65 6e 20 65 78 63 65 65 64 Outbuflen exceed d450: 73 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c s maximum value, d460: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 returning in fa d470: 69 6c 75 72 65 2e 20 28 6d 61 78 20 3d 20 25 6c ilure. (max = %l d480: 69 2c 20 6f 75 74 62 75 66 6c 65 6e 20 3d 20 25 i, outbuflen = % d490: 6c 75 29 22 2c 20 28 6c 6f 6e 67 29 20 5f 50 4f lu)", (long) _PO d4a0: 53 49 58 5f 53 53 49 5a 45 5f 4d 41 58 2c 20 28 SIX_SSIZE_MAX, ( d4b0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6f unsigned long) o d4c0: 75 74 62 75 66 6c 65 6e 29 3b 0a 0a 09 09 72 65 utbuflen);....re d4d0: 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 23 20 20 turn(-1);..}.# d4e0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 09 2f endif.#endif.../ d4f0: 2a 20 55 6e 70 61 64 20 72 65 70 6c 79 20 2a 2f * Unpad reply */ d500: 0a 09 69 66 20 28 75 6e 70 61 64 4f 75 74 70 75 ..if (unpadOutpu d510: 74 29 20 7b 0a 09 09 69 66 20 28 72 65 74 76 61 t) {...if (retva d520: 6c 20 3c 20 33 29 20 7b 0a 09 09 09 43 41 43 4b l < 3) {....CACK d530: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( d540: 22 52 65 70 6c 79 20 69 73 20 74 6f 6f 20 73 6d "Reply is too sm d550: 61 6c 6c 2c 20 77 65 20 61 72 65 20 6e 6f 74 20 all, we are not d560: 61 62 6c 65 20 74 6f 20 75 6e 70 61 64 20 2d 2d able to unpad -- d570: 20 70 61 73 73 69 6e 67 20 62 61 63 6b 20 61 6e passing back an d580: 64 20 68 6f 70 69 6e 67 20 66 6f 72 20 74 68 65 d hoping for the d590: 20 62 65 73 74 21 22 29 3b 0a 0a 09 09 09 43 41 best!");.....CA d5a0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT d5b0: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 F("Returning in d5c0: 73 75 63 63 65 73 73 2c 20 72 65 74 76 61 6c 20 success, retval d5d0: 3d 20 25 6c 69 20 28 62 79 74 65 73 29 22 2c 20 = %li (bytes)", d5e0: 28 6c 6f 6e 67 29 20 72 65 74 76 61 6c 29 3b 0a (long) retval);. d5f0: 09 09 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c ...return(retval d600: 29 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 6f 75 );...}....if (ou d610: 74 62 75 66 5b 30 5d 20 21 3d 20 30 78 30 30 29 tbuf[0] != 0x00) d620: 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB d630: 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 72 65 63 UG_PRINTF("Unrec d640: 6f 67 6e 69 7a 65 64 20 70 61 64 64 69 6e 67 20 ognized padding d650: 73 63 68 65 6d 65 20 2d 2d 20 70 61 73 73 69 6e scheme -- passin d660: 67 20 62 61 63 6b 20 61 6e 64 20 68 6f 70 69 6e g back and hopin d670: 67 20 66 6f 72 20 74 68 65 20 62 65 73 74 21 22 g for the best!" d680: 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 );.....CACKEY_DE d690: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu d6a0: 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 73 73 rning in success d6b0: 2c 20 72 65 74 76 61 6c 20 3d 20 25 6c 69 20 28 , retval = %li ( d6c0: 62 79 74 65 73 29 22 2c 20 28 6c 6f 6e 67 29 20 bytes)", (long) d6d0: 72 65 74 76 61 6c 29 3b 0a 09 09 09 72 65 74 75 retval);....retu d6e0: 72 6e 28 72 65 74 76 61 6c 29 3b 0a 09 09 7d 0a rn(retval);...}. d6f0: 0a 09 09 62 6c 6f 63 6b 74 79 70 65 20 3d 20 6f ...blocktype = o d700: 75 74 62 75 66 5b 31 5d 3b 0a 09 09 75 6e 70 61 utbuf[1];...unpa d710: 64 6f 66 66 73 65 74 20 3d 20 30 3b 0a 0a 09 09 doffset = 0;.... d720: 73 77 69 74 63 68 20 28 62 6c 6f 63 6b 74 79 70 switch (blocktyp d730: 65 29 20 7b 0a 09 09 09 63 61 73 65 20 30 78 30 e) {....case 0x0 d740: 30 3a 0a 09 09 09 09 2f 2a 20 50 61 64 64 69 6e 0:...../* Paddin d750: 67 20 53 63 68 65 6d 65 20 31 2c 20 74 68 65 20 g Scheme 1, the d760: 66 69 72 73 74 20 6e 6f 6e 2d 7a 65 72 6f 20 62 first non-zero b d770: 79 74 65 20 69 73 20 74 68 65 20 73 74 61 72 74 yte is the start d780: 20 6f 66 20 64 61 74 61 20 2a 2f 0a 09 09 09 09 of data */..... d790: 66 6f 72 20 28 75 6e 70 61 64 6f 66 66 73 65 74 for (unpadoffset d7a0: 20 3d 20 32 3b 20 75 6e 70 61 64 6f 66 66 73 65 = 2; unpadoffse d7b0: 74 20 3c 20 72 65 74 76 61 6c 3b 20 75 6e 70 61 t < retval; unpa d7c0: 64 6f 66 66 73 65 74 2b 2b 29 20 7b 0a 09 09 09 doffset++) {.... d7d0: 09 09 69 66 20 28 6f 75 74 62 75 66 5b 75 6e 70 ..if (outbuf[unp d7e0: 61 64 6f 66 66 73 65 74 5d 20 21 3d 20 30 78 30 adoffset] != 0x0 d7f0: 30 29 20 7b 0a 09 09 09 09 09 09 62 72 65 61 6b 0) {.......break d800: 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 ;......}.....}.. d810: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas d820: 65 20 30 78 30 31 3a 0a 09 09 09 09 2f 2a 20 50 e 0x01:...../* P d830: 61 64 64 69 6e 67 20 53 63 68 65 6d 65 20 32 2c adding Scheme 2, d840: 20 70 61 64 20 62 79 74 65 73 20 61 72 65 20 30 pad bytes are 0 d850: 78 46 46 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 xFF followed by d860: 30 78 30 30 20 2a 2f 0a 09 09 09 09 66 6f 72 20 0x00 */.....for d870: 28 75 6e 70 61 64 6f 66 66 73 65 74 20 3d 20 32 (unpadoffset = 2 d880: 3b 20 75 6e 70 61 64 6f 66 66 73 65 74 20 3c 20 ; unpadoffset < d890: 72 65 74 76 61 6c 3b 20 75 6e 70 61 64 6f 66 66 retval; unpadoff d8a0: 73 65 74 2b 2b 29 20 7b 0a 09 09 09 09 09 69 66 set++) {......if d8b0: 20 28 6f 75 74 62 75 66 5b 75 6e 70 61 64 6f 66 (outbuf[unpadof d8c0: 66 73 65 74 5d 20 21 3d 20 30 78 46 46 29 20 7b fset] != 0xFF) { d8d0: 0a 09 09 09 09 09 09 69 66 20 28 6f 75 74 62 75 .......if (outbu d8e0: 66 5b 75 6e 70 61 64 6f 66 66 73 65 74 5d 20 3d f[unpadoffset] = d8f0: 3d 20 30 78 30 30 29 20 7b 0a 09 09 09 09 09 09 = 0x00) {....... d900: 09 75 6e 70 61 64 6f 66 66 73 65 74 2b 2b 3b 0a .unpadoffset++;. d910: 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 ........break;.. d920: 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 .....} else {... d930: 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU d940: 47 5f 50 52 49 4e 54 46 28 22 49 6e 76 61 6c 69 G_PRINTF("Invali d950: 64 20 70 61 64 64 69 6e 67 20 64 61 74 61 20 66 d padding data f d960: 6f 75 6e 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 ound, returning d970: 69 6e 20 66 61 69 6c 75 72 65 2c 20 73 68 6f 75 in failure, shou d980: 6c 64 20 68 61 76 65 20 62 65 65 6e 20 30 78 30 ld have been 0x0 d990: 30 20 66 6f 75 6e 64 20 30 78 25 30 32 78 22 2c 0 found 0x%02x", d9a0: 20 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 (unsigned int) d9b0: 6f 75 74 62 75 66 5b 75 6e 70 61 64 6f 66 66 73 outbuf[unpadoffs d9c0: 65 74 5d 29 3b 0a 0a 09 09 09 09 09 09 09 72 65 et]);.........re d9d0: 74 75 72 6e 28 2d 31 29 3b 0a 09 09 09 09 09 09 turn(-1);....... d9e0: 7d 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a }......} else {. d9f0: 09 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB da00: 55 47 5f 50 52 49 4e 54 46 28 22 49 6e 76 61 6c UG_PRINTF("Inval da10: 69 64 20 70 61 64 64 69 6e 67 20 64 61 74 61 20 id padding data da20: 66 6f 75 6e 64 2c 20 72 65 74 75 72 6e 69 6e 67 found, returning da30: 20 69 6e 20 66 61 69 6c 75 72 65 2c 20 73 68 6f in failure, sho da40: 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 30 78 uld have been 0x da50: 46 46 20 66 6f 75 6e 64 20 30 78 25 30 32 78 22 FF found 0x%02x" da60: 2c 20 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 , (unsigned int) da70: 20 6f 75 74 62 75 66 5b 75 6e 70 61 64 6f 66 66 outbuf[unpadoff da80: 73 65 74 5d 29 3b 0a 0a 09 09 09 09 09 09 72 65 set]);........re da90: 74 75 72 6e 28 2d 31 29 3b 0a 09 09 09 09 09 7d turn(-1);......} daa0: 0a 09 09 09 09 7d 0a 09 09 09 09 62 72 65 61 6b .....}.....break dab0: 3b 0a 09 09 09 63 61 73 65 20 30 78 30 32 3a 0a ;....case 0x02:. dac0: 09 09 09 09 2f 2a 20 50 61 64 64 69 6e 67 20 53 ..../* Padding S dad0: 63 68 65 6d 65 20 33 2c 20 70 61 64 20 62 79 74 cheme 3, pad byt dae0: 65 73 20 61 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 es are non-zero daf0: 66 69 72 73 74 20 7a 65 72 6f 20 62 79 74 65 20 first zero byte db00: 66 6f 75 6e 64 20 69 73 20 74 68 65 20 73 65 70 found is the sep db10: 65 72 61 74 6f 72 20 62 79 74 65 20 2a 2f 0a 09 erator byte */.. db20: 09 09 09 66 6f 72 20 28 75 6e 70 61 64 6f 66 66 ...for (unpadoff db30: 73 65 74 20 3d 20 32 3b 20 75 6e 70 61 64 6f 66 set = 2; unpadof db40: 66 73 65 74 20 3c 20 72 65 74 76 61 6c 3b 20 75 fset < retval; u db50: 6e 70 61 64 6f 66 66 73 65 74 2b 2b 29 20 7b 0a npadoffset++) {. db60: 09 09 09 09 09 69 66 20 28 6f 75 74 62 75 66 5b .....if (outbuf[ db70: 75 6e 70 61 64 6f 66 66 73 65 74 5d 20 3d 3d 20 unpadoffset] == db80: 30 78 30 30 29 20 7b 0a 09 09 09 09 09 09 75 6e 0x00) {.......un db90: 70 61 64 6f 66 66 73 65 74 2b 2b 3b 0a 0a 09 09 padoffset++;.... dba0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 ....break;...... dbb0: 7d 0a 09 09 09 09 7d 0a 09 09 09 09 62 72 65 61 }.....}.....brea dbc0: 6b 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 75 6e k;...}....if (un dbd0: 70 61 64 6f 66 66 73 65 74 20 3e 20 72 65 74 76 padoffset > retv dbe0: 61 6c 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f al) {....CACKEY_ dbf0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 4f 66 DEBUG_PRINTF("Of dc00: 66 73 65 74 20 67 72 65 61 74 65 72 20 74 68 61 fset greater tha dc10: 6e 20 72 65 70 6c 79 20 73 69 7a 65 2c 20 61 62 n reply size, ab dc20: 6f 72 74 69 6e 67 2e 20 20 28 75 6e 70 61 64 6f orting. (unpado dc30: 66 66 73 65 74 20 3d 20 25 6c 75 2c 20 72 65 74 ffset = %lu, ret dc40: 76 61 6c 20 3d 20 25 6c 75 29 22 2c 20 28 75 6e val = %lu)", (un dc50: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6e 70 signed long) unp dc60: 61 64 6f 66 66 73 65 74 2c 20 28 75 6e 73 69 67 adoffset, (unsig dc70: 6e 65 64 20 6c 6f 6e 67 29 20 72 65 74 76 61 6c ned long) retval dc80: 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 );.....return(-1 dc90: 29 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b 45 59 );...}....CACKEY dca0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 _DEBUG_PRINTBUF( dcb0: 22 50 61 64 64 65 64 3a 22 2c 20 6f 75 74 62 75 "Padded:", outbu dcc0: 66 2c 20 72 65 74 76 61 6c 29 3b 0a 0a 09 09 72 f, retval);....r dcd0: 65 74 76 61 6c 20 2d 3d 20 75 6e 70 61 64 6f 66 etval -= unpadof dce0: 66 73 65 74 3b 0a 09 09 6d 65 6d 6d 6f 76 65 28 fset;...memmove( dcf0: 6f 75 74 62 75 66 2c 20 6f 75 74 62 75 66 20 2b outbuf, outbuf + dd00: 20 75 6e 70 61 64 6f 66 66 73 65 74 2c 20 72 65 unpadoffset, re dd10: 74 76 61 6c 29 3b 0a 0a 09 09 43 41 43 4b 45 59 tval);....CACKEY dd20: 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 _DEBUG_PRINTBUF( dd30: 22 55 6e 70 61 64 64 65 64 3a 22 2c 20 6f 75 74 "Unpadded:", out dd40: 62 75 66 2c 20 72 65 74 76 61 6c 29 3b 0a 09 7d buf, retval);..} dd50: 0a 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG dd60: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni dd70: 6e 67 20 69 6e 20 73 75 63 63 65 73 73 2c 20 72 ng in success, r dd80: 65 74 76 61 6c 20 3d 20 25 6c 69 20 28 62 79 74 etval = %li (byt dd90: 65 73 29 22 2c 20 28 6c 6f 6e 67 29 20 72 65 74 es)", (long) ret dda0: 76 61 6c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 val);...return(r ddb0: 65 74 76 61 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a etval);.}../*. * ddc0: 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 SYNPOSIS. * ddd0: 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 55 4d .... *. * ARGUM dde0: 45 4e 54 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a ENTS. * .... ddf0: 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c *. * RETURN VAL de00: 55 45 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a UE. * .... * de10: 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 . * NOTES. * de20: 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 .... *. */.stat de30: 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 ic cackey_ret ca de40: 63 6b 65 79 5f 6c 6f 67 69 6e 28 73 74 72 75 63 ckey_login(struc de50: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 t cackey_slot *s de60: 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 lot, unsigned ch de70: 61 72 20 2a 70 69 6e 2c 20 75 6e 73 69 67 6e 65 ar *pin, unsigne de80: 64 20 6c 6f 6e 67 20 70 69 6e 5f 6c 65 6e 2c 20 d long pin_len, de90: 69 6e 74 20 2a 74 72 69 65 73 5f 72 65 6d 61 69 int *tries_remai dea0: 6e 69 6e 67 5f 70 29 20 7b 0a 09 75 6e 73 69 67 ning_p) {..unsig deb0: 6e 65 64 20 63 68 61 72 20 63 61 63 5f 70 69 6e ned char cac_pin dec0: 5b 38 5d 20 3d 20 7b 30 78 46 46 2c 20 30 78 46 [8] = {0xFF, 0xF ded0: 46 2c 20 30 78 46 46 2c 20 30 78 46 46 2c 20 30 F, 0xFF, 0xFF, 0 dee0: 78 46 46 2c 20 30 78 46 46 2c 20 30 78 46 46 2c xFF, 0xFF, 0xFF, def0: 20 30 78 46 46 7d 3b 0a 09 75 69 6e 74 31 36 5f 0xFF};..uint16_ df00: 74 20 72 65 73 70 6f 6e 73 65 5f 63 6f 64 65 3b t response_code; df10: 0a 09 69 6e 74 20 74 72 69 65 73 5f 72 65 6d 61 ..int tries_rema df20: 69 6e 69 6e 67 3b 0a 09 69 6e 74 20 73 65 6e 64 ining;..int send df30: 5f 72 65 74 3b 0a 0a 09 2f 2a 20 49 6e 64 69 63 _ret;.../* Indic df40: 61 74 65 20 74 68 61 74 20 77 65 20 64 6f 20 6e ate that we do n df50: 6f 74 20 6b 6e 6f 77 20 61 62 6f 75 74 20 68 6f ot know about ho df60: 77 20 6d 61 6e 79 20 74 72 69 65 73 20 61 72 65 w many tries are df70: 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 09 69 remaining */..i df80: 66 20 28 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 f (tries_remaini df90: 6e 67 5f 70 29 20 7b 0a 09 09 2a 74 72 69 65 73 ng_p) {...*tries dfa0: 5f 72 65 6d 61 69 6e 69 6e 67 5f 70 20 3d 20 2d _remaining_p = - dfb0: 31 3b 0a 09 7d 0a 0a 09 2f 2a 20 41 70 70 61 72 1;..}.../* Appar dfc0: 65 6e 74 6c 79 2c 20 43 41 43 20 50 49 4e 73 20 ently, CAC PINs dfd0: 61 72 65 20 2a 45 58 41 43 54 4c 59 2a 20 38 20 are *EXACTLY* 8 dfe0: 62 79 74 65 73 20 6c 6f 6e 67 20 2d 2d 20 70 61 bytes long -- pa dff0: 64 20 77 69 74 68 20 30 78 46 46 20 69 66 20 74 d with 0xFF if t e000: 6f 6f 20 73 68 6f 72 74 20 2a 2f 0a 09 69 66 20 oo short */..if e010: 28 70 69 6e 5f 6c 65 6e 20 3e 3d 20 38 29 20 7b (pin_len >= 8) { e020: 0a 09 09 6d 65 6d 63 70 79 28 63 61 63 5f 70 69 ...memcpy(cac_pi e030: 6e 2c 20 70 69 6e 2c 20 38 29 3b 0a 09 7d 20 65 n, pin, 8);..} e e040: 6c 73 65 20 7b 0a 09 09 6d 65 6d 63 70 79 28 63 lse {...memcpy(c e050: 61 63 5f 70 69 6e 2c 20 70 69 6e 2c 20 70 69 6e ac_pin, pin, pin e060: 5f 6c 65 6e 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 49 _len);..}.../* I e070: 73 73 75 65 20 50 49 4e 20 56 65 72 69 66 79 20 ssue PIN Verify e080: 2a 2f 0a 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 */..send_ret = c e090: 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 ackey_send_apdu( e0a0: 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 4c 41 53 slot, GSCIS_CLAS e0b0: 53 5f 49 53 4f 37 38 31 36 2c 20 47 53 43 49 53 S_ISO7816, GSCIS e0c0: 5f 49 4e 53 54 52 5f 56 45 52 49 46 59 2c 20 30 _INSTR_VERIFY, 0 e0d0: 78 30 30 2c 20 30 78 30 30 2c 20 73 69 7a 65 6f x00, 0x00, sizeo e0e0: 66 28 63 61 63 5f 70 69 6e 29 2c 20 63 61 63 5f f(cac_pin), cac_ e0f0: 70 69 6e 2c 20 30 78 30 30 2c 20 26 72 65 73 70 pin, 0x00, &resp e100: 6f 6e 73 65 5f 63 6f 64 65 2c 20 4e 55 4c 4c 2c onse_code, NULL, e110: 20 4e 55 4c 4c 29 3b 0a 09 69 66 20 28 73 65 6e NULL);..if (sen e120: 64 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f d_ret != CACKEY_ e130: 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 69 PCSC_S_OK) {...i e140: 66 20 28 28 72 65 73 70 6f 6e 73 65 5f 63 6f 64 f ((response_cod e150: 65 20 26 20 30 78 36 33 43 30 29 20 3d 3d 20 30 e & 0x63C0) == 0 e160: 78 36 33 43 30 29 20 7b 0a 09 09 09 74 72 69 65 x63C0) {....trie e170: 73 5f 72 65 6d 61 69 6e 69 6e 67 20 3d 20 28 72 s_remaining = (r e180: 65 73 70 6f 6e 73 65 5f 63 6f 64 65 20 26 20 30 esponse_code & 0 e190: 78 46 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f xF);.....CACKEY_ e1a0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 50 49 DEBUG_PRINTF("PI e1b0: 4e 20 56 65 72 69 66 69 63 61 74 69 6f 6e 20 66 N Verification f e1c0: 61 69 6c 65 64 2c 20 25 69 20 74 72 69 65 73 20 ailed, %i tries e1d0: 72 65 6d 61 69 6e 69 6e 67 22 2c 20 74 72 69 65 remaining", trie e1e0: 73 5f 72 65 6d 61 69 6e 69 6e 67 29 3b 0a 0a 09 s_remaining);... e1f0: 09 09 69 66 20 28 74 72 69 65 73 5f 72 65 6d 61 ..if (tries_rema e200: 69 6e 69 6e 67 5f 70 29 20 7b 0a 09 09 09 09 2a ining_p) {.....* e210: 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 5f tries_remaining_ e220: 70 20 3d 20 74 72 69 65 73 5f 72 65 6d 61 69 6e p = tries_remain e230: 69 6e 67 3b 0a 09 09 09 7d 0a 0a 09 09 09 72 65 ing;....}.....re e240: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC e250: 5f 45 5f 42 41 44 50 49 4e 29 3b 0a 09 09 7d 0a _E_BADPIN);...}. e260: 0a 09 09 69 66 20 28 72 65 73 70 6f 6e 73 65 5f ...if (response_ e270: 63 6f 64 65 20 3d 3d 20 30 78 36 39 38 33 29 20 code == 0x6983) e280: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU e290: 47 5f 50 52 49 4e 54 46 28 22 50 49 4e 20 56 65 G_PRINTF("PIN Ve e2a0: 72 69 66 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 rification faile e2b0: 64 2c 20 64 65 76 69 63 65 20 69 73 20 6c 6f 63 d, device is loc e2c0: 6b 65 64 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 ked");.....retur e2d0: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f n(CACKEY_PCSC_E_ e2e0: 4c 4f 43 4b 45 44 29 3b 0a 09 09 7d 0a 0a 09 09 LOCKED);...}.... e2f0: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC e300: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. e310: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG e320: 5f 50 52 49 4e 54 46 28 22 50 49 4e 20 56 65 72 _PRINTF("PIN Ver e330: 69 66 69 63 61 74 69 6f 6e 20 73 75 63 63 65 65 ification succee e340: 64 65 64 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 ded");...return( e350: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK e360: 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 );.}../*. * SYNP e370: 4f 53 49 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a OSIS. * .... e380: 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a *. * ARGUMENTS. e390: 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a * .... *. * e3a0: 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a RETURN VALUE. * e3b0: 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 4e .... *. * N e3c0: 4f 54 45 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a OTES. * .... e3d0: 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63 61 *. */.static ca e3e0: 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f ckey_ret cackey_ e3f0: 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 28 73 74 token_present(st e400: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ruct cackey_slot e410: 20 2a 73 6c 6f 74 29 20 7b 0a 09 63 61 63 6b 65 *slot) {..cacke e420: 79 5f 72 65 74 20 70 63 73 63 5f 63 6f 6e 6e 65 y_ret pcsc_conne e430: 63 74 5f 72 65 74 3b 0a 09 44 57 4f 52 44 20 72 ct_ret;..DWORD r e440: 65 61 64 65 72 5f 6c 65 6e 2c 20 73 74 61 74 65 eader_len, state e450: 2c 20 70 72 6f 74 6f 63 6f 6c 2c 20 61 74 72 5f , protocol, atr_ e460: 6c 65 6e 3b 0a 09 42 59 54 45 20 61 74 72 5b 4d len;..BYTE atr[M e470: 41 58 5f 41 54 52 5f 53 49 5a 45 5d 3b 0a 09 4c AX_ATR_SIZE];..L e480: 4f 4e 47 20 73 74 61 74 75 73 5f 72 65 74 2c 20 ONG status_ret, e490: 73 63 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 scard_reconn_ret e4a0: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG e4b0: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. e4c0: 22 29 3b 0a 0a 09 70 63 73 63 5f 63 6f 6e 6e 65 ");...pcsc_conne e4d0: 63 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f ct_ret = cackey_ e4e0: 63 6f 6e 6e 65 63 74 5f 63 61 72 64 28 73 6c 6f connect_card(slo e4f0: 74 29 3b 0a 09 69 66 20 28 70 63 73 63 5f 63 6f t);..if (pcsc_co e500: 6e 6e 65 63 74 5f 72 65 74 20 21 3d 20 43 41 43 nnect_ret != CAC e510: 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b KEY_PCSC_S_OK) { e520: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ e530: 50 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 PRINTF("Unable t e540: 6f 20 63 6f 6e 6e 65 63 74 20 74 6f 20 63 61 72 o connect to car e550: 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 74 6f 6b d, returning tok e560: 65 6e 20 61 62 73 65 6e 74 22 29 3b 0a 0a 09 09 en absent");.... e570: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC e580: 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 SC_E_TOKENABSENT e590: 29 3b 0a 09 7d 0a 0a 09 61 74 72 5f 6c 65 6e 20 );..}...atr_len e5a0: 3d 20 73 69 7a 65 6f 66 28 61 74 72 29 3b 0a 09 = sizeof(atr);.. e5b0: 73 74 61 74 75 73 5f 72 65 74 20 3d 20 53 43 61 status_ret = SCa e5c0: 72 64 53 74 61 74 75 73 28 73 6c 6f 74 2d 3e 70 rdStatus(slot->p e5d0: 63 73 63 5f 63 61 72 64 2c 20 4e 55 4c 4c 2c 20 csc_card, NULL, e5e0: 26 72 65 61 64 65 72 5f 6c 65 6e 2c 20 26 73 74 &reader_len, &st e5f0: 61 74 65 2c 20 26 70 72 6f 74 6f 63 6f 6c 2c 20 ate, &protocol, e600: 61 74 72 2c 20 26 61 74 72 5f 6c 65 6e 29 3b 0a atr, &atr_len);. e610: 09 69 66 20 28 73 74 61 74 75 73 5f 72 65 74 20 .if (status_ret e620: 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 != SCARD_S_SUCCE e630: 53 53 29 20 7b 0a 09 09 73 6c 6f 74 2d 3e 73 6c SS) {...slot->sl e640: 6f 74 5f 72 65 73 65 74 20 3d 20 31 3b 0a 09 09 ot_reset = 1;... e650: 73 6c 6f 74 2d 3e 74 6f 6b 65 6e 5f 66 6c 61 67 slot->token_flag e660: 73 20 3d 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52 45 s = CKF_LOGIN_RE e670: 51 55 49 52 45 44 3b 0a 0a 09 09 69 66 20 28 73 QUIRED;....if (s e680: 74 61 74 75 73 5f 72 65 74 20 3d 3d 20 53 43 41 tatus_ret == SCA e690: 52 44 5f 57 5f 52 45 53 45 54 5f 43 41 52 44 29 RD_W_RESET_CARD) e6a0: 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB e6b0: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 73 65 74 UG_PRINTF("Reset e6c0: 20 72 65 71 75 69 72 65 64 2c 20 70 6c 65 61 73 required, pleas e6d0: 65 20 68 6f 6c 64 2e 2e 2e 22 29 3b 0a 0a 09 09 e hold...");.... e6e0: 09 73 63 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 .scard_reconn_re e6f0: 74 20 3d 20 53 43 61 72 64 52 65 63 6f 6e 6e 65 t = SCardReconne e700: 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 ct(slot->pcsc_ca e710: 72 64 2c 20 53 43 41 52 44 5f 53 48 41 52 45 5f rd, SCARD_SHARE_ e720: 53 48 41 52 45 44 2c 20 53 43 41 52 44 5f 50 52 SHARED, SCARD_PR e730: 4f 54 4f 43 4f 4c 5f 54 30 2c 20 53 43 41 52 44 OTOCOL_T0, SCARD e740: 5f 52 45 53 45 54 5f 43 41 52 44 2c 20 26 70 72 _RESET_CARD, &pr e750: 6f 74 6f 63 6f 6c 29 3b 0a 09 09 09 69 66 20 28 otocol);....if ( e760: 73 63 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 scard_reconn_ret e770: 20 3d 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 == SCARD_S_SUCC e780: 45 53 53 29 20 7b 0a 09 09 09 09 2f 2a 20 52 65 ESS) {...../* Re e790: 2d 65 73 74 61 62 6c 69 73 68 20 74 72 61 6e 73 -establish trans e7a0: 61 63 74 69 6f 6e 2c 20 69 66 20 69 74 20 77 61 action, if it wa e7b0: 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 09 09 09 s present */.... e7c0: 09 69 66 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 .if (slot->trans e7d0: 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3e 20 30 action_depth > 0 e7e0: 29 20 7b 0a 09 09 09 09 09 73 6c 6f 74 2d 3e 74 ) {......slot->t e7f0: 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 ransaction_depth e800: 2d 2d 3b 0a 09 09 09 09 09 63 61 63 6b 65 79 5f --;......cackey_ e810: 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f begin_transactio e820: 6e 28 73 6c 6f 74 29 3b 0a 09 09 09 09 7d 0a 0a n(slot);.....}.. e830: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG e840: 5f 50 52 49 4e 54 46 28 22 52 65 73 65 74 20 73 _PRINTF("Reset s e850: 75 63 63 65 73 73 66 75 6c 2c 20 72 65 71 75 65 uccessful, reque e860: 72 79 69 6e 67 22 29 3b 0a 09 09 09 09 73 74 61 rying");.....sta e870: 74 75 73 5f 72 65 74 20 3d 20 53 43 61 72 64 53 tus_ret = SCardS e880: 74 61 74 75 73 28 73 6c 6f 74 2d 3e 70 63 73 63 tatus(slot->pcsc e890: 5f 63 61 72 64 2c 20 4e 55 4c 4c 2c 20 26 72 65 _card, NULL, &re e8a0: 61 64 65 72 5f 6c 65 6e 2c 20 26 73 74 61 74 65 ader_len, &state e8b0: 2c 20 26 70 72 6f 74 6f 63 6f 6c 2c 20 61 74 72 , &protocol, atr e8c0: 2c 20 26 61 74 72 5f 6c 65 6e 29 3b 0a 09 09 09 , &atr_len);.... e8d0: 09 69 66 20 28 73 74 61 74 75 73 5f 72 65 74 20 .if (status_ret e8e0: 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 != SCARD_S_SUCCE e8f0: 53 53 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 SS) {......CACKE e900: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" e910: 53 74 69 6c 6c 20 75 6e 61 62 6c 65 20 74 6f 20 Still unable to e920: 71 75 65 72 79 20 63 61 72 64 20 73 74 61 74 75 query card statu e930: 73 2c 20 72 65 74 75 72 6e 69 6e 67 20 74 6f 6b s, returning tok e940: 65 6e 20 61 62 73 65 6e 74 2e 20 20 53 43 61 72 en absent. SCar e950: 64 53 74 61 74 75 73 28 29 20 3d 20 25 73 22 2c dStatus() = %s", e960: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 CACKEY_DEBUG_FU e970: 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 NC_SCARDERR_TO_S e980: 54 52 28 73 74 61 74 75 73 5f 72 65 74 29 29 3b TR(status_ret)); e990: 0a 0a 09 09 09 09 09 72 65 74 75 72 6e 28 43 41 .......return(CA e9a0: 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 CKEY_PCSC_E_TOKE e9b0: 4e 41 42 53 45 4e 54 29 3b 0a 09 09 09 09 7d 0a NABSENT);.....}. e9c0: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 ...} else {..... e9d0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI e9e0: 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 72 NTF("Unable to r e9f0: 65 63 6f 6e 6e 65 63 74 20 74 6f 20 63 61 72 64 econnect to card ea00: 2c 20 72 65 74 75 72 6e 69 6e 67 20 74 6f 6b 65 , returning toke ea10: 6e 20 61 62 73 65 6e 74 2e 20 20 53 43 61 72 64 n absent. SCard ea20: 52 65 63 6f 6e 6e 65 63 74 28 29 20 3d 20 25 73 Reconnect() = %s ea30: 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ", CACKEY_DEBUG_ ea40: 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f FUNC_SCARDERR_TO ea50: 5f 53 54 52 28 73 63 61 72 64 5f 72 65 63 6f 6e _STR(scard_recon ea60: 6e 5f 72 65 74 29 29 3b 0a 0a 09 09 09 09 72 65 n_ret));......re ea70: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC ea80: 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 29 3b _E_TOKENABSENT); ea90: 0a 09 09 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b ....}...} else { eaa0: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG eab0: 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 _PRINTF("Unable eac0: 74 6f 20 71 75 65 72 79 20 63 61 72 64 20 73 74 to query card st ead0: 61 74 75 73 2c 20 72 65 74 75 72 6e 69 6e 67 20 atus, returning eae0: 74 6f 6b 65 6e 20 61 62 73 65 6e 74 2e 20 20 53 token absent. S eaf0: 43 61 72 64 53 74 61 74 75 73 28 29 20 3d 20 25 CardStatus() = % eb00: 73 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 s", CACKEY_DEBUG eb10: 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 _FUNC_SCARDERR_T eb20: 4f 5f 53 54 52 28 73 74 61 74 75 73 5f 72 65 74 O_STR(status_ret eb30: 29 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 ));.....return(C eb40: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b ACKEY_PCSC_E_TOK eb50: 45 4e 41 42 53 45 4e 54 29 3b 0a 09 09 7d 0a 09 ENABSENT);...}.. eb60: 7d 0a 0a 09 69 66 20 28 28 73 74 61 74 65 20 26 }...if ((state & eb70: 20 53 43 41 52 44 5f 41 42 53 45 4e 54 29 20 3d SCARD_ABSENT) = eb80: 3d 20 53 43 41 52 44 5f 41 42 53 45 4e 54 29 20 = SCARD_ABSENT) eb90: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG eba0: 5f 50 52 49 4e 54 46 28 22 43 61 72 64 20 69 73 _PRINTF("Card is ebb0: 20 61 62 73 65 6e 74 2c 20 72 65 74 75 72 6e 69 absent, returni ebc0: 6e 67 20 74 6f 6b 65 6e 20 61 62 73 65 6e 74 22 ng token absent" ebd0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 );....return(CAC ebe0: 4b 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e KEY_PCSC_E_TOKEN ebf0: 41 42 53 45 4e 54 29 3b 0a 09 7d 0a 0a 09 43 41 ABSENT);..}...CA ec00: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT ec10: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 74 6f 6b F("Returning tok ec20: 65 6e 20 70 72 65 73 65 6e 74 2e 22 29 3b 0a 0a en present.");.. ec30: 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 .return(CACKEY_P ec40: 43 53 43 5f 53 5f 54 4f 4b 45 4e 50 52 45 53 45 CSC_S_TOKENPRESE ec50: 4e 54 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 NT);.}../*. * SY ec60: 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 2e 2e NPOSIS. * .. ec70: 2e 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 .. *. * ARGUMENT ec80: 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a S. * .... *. ec90: 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a * RETURN VALUE. eca0: 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a * .... *. * ecb0: 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 2e 2e NOTES. * .. ecc0: 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 .. *. */.static ecd0: 73 73 69 7a 65 5f 74 20 63 61 63 6b 65 79 5f 70 ssize_t cackey_p ece0: 63 73 63 5f 69 64 65 6e 74 69 74 79 5f 74 6f 5f csc_identity_to_ ecf0: 6c 61 62 65 6c 28 73 74 72 75 63 74 20 63 61 63 label(struct cac ed00: 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 key_pcsc_identit ed10: 79 20 2a 69 64 65 6e 74 69 74 79 2c 20 75 6e 73 y *identity, uns ed20: 69 67 6e 65 64 20 63 68 61 72 20 2a 6c 61 62 65 igned char *labe ed30: 6c 5f 62 75 66 2c 20 75 6e 73 69 67 6e 65 64 20 l_buf, unsigned ed40: 6c 6f 6e 67 20 6c 61 62 65 6c 5f 62 75 66 5f 6c long label_buf_l ed50: 65 6e 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 en) {..unsigned ed60: 6c 6f 6e 67 20 63 65 72 74 69 66 69 63 61 74 65 long certificate ed70: 5f 6c 65 6e 3b 0a 09 63 68 61 72 20 2a 6c 61 62 _len;..char *lab ed80: 65 6c 5f 61 73 6e 31 3b 0a 09 76 6f 69 64 20 2a el_asn1;..void * ed90: 63 65 72 74 69 66 69 63 61 74 65 3b 0a 09 69 6e certificate;..in eda0: 74 20 78 35 30 39 5f 72 65 61 64 5f 72 65 74 3b t x509_read_ret; edb0: 0a 0a 09 63 65 72 74 69 66 69 63 61 74 65 20 3d ...certificate = edc0: 20 69 64 65 6e 74 69 74 79 2d 3e 63 65 72 74 69 identity->certi edd0: 66 69 63 61 74 65 3b 0a 09 63 65 72 74 69 66 69 ficate;..certifi ede0: 63 61 74 65 5f 6c 65 6e 20 3d 20 69 64 65 6e 74 cate_len = ident edf0: 69 74 79 2d 3e 63 65 72 74 69 66 69 63 61 74 65 ity->certificate ee00: 5f 6c 65 6e 3b 0a 0a 09 69 66 20 28 63 65 72 74 _len;...if (cert ee10: 69 66 69 63 61 74 65 5f 6c 65 6e 20 3c 20 30 29 ificate_len < 0) ee20: 20 7b 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b {...return(-1); ee30: 0a 09 7d 0a 0a 09 78 35 30 39 5f 72 65 61 64 5f ..}...x509_read_ ee40: 72 65 74 20 3d 20 78 35 30 39 5f 74 6f 5f 73 75 ret = x509_to_su ee50: 62 6a 65 63 74 28 63 65 72 74 69 66 69 63 61 74 bject(certificat ee60: 65 2c 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c e, certificate_l ee70: 65 6e 2c 20 28 76 6f 69 64 20 2a 2a 29 20 26 6c en, (void **) &l ee80: 61 62 65 6c 5f 61 73 6e 31 29 3b 0a 09 69 66 20 abel_asn1);..if ee90: 28 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3c (x509_read_ret < eea0: 20 30 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 2d 0) {...return(- eeb0: 31 29 3b 0a 09 7d 0a 0a 09 78 35 30 39 5f 72 65 1);..}...x509_re eec0: 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f 64 6e ad_ret = x509_dn eed0: 5f 74 6f 5f 73 74 72 69 6e 67 28 6c 61 62 65 6c _to_string(label eee0: 5f 61 73 6e 31 2c 20 78 35 30 39 5f 72 65 61 64 _asn1, x509_read eef0: 5f 72 65 74 2c 20 28 63 68 61 72 20 2a 29 20 6c _ret, (char *) l ef00: 61 62 65 6c 5f 62 75 66 2c 20 6c 61 62 65 6c 5f abel_buf, label_ ef10: 62 75 66 5f 6c 65 6e 2c 20 22 43 4e 22 29 3b 0a buf_len, "CN");. ef20: 09 69 66 20 28 78 35 30 39 5f 72 65 61 64 5f 72 .if (x509_read_r ef30: 65 74 20 3c 3d 20 30 29 20 7b 0a 09 09 78 35 30 et <= 0) {...x50 ef40: 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 30 9_read_ret = x50 ef50: 39 5f 64 6e 5f 74 6f 5f 73 74 72 69 6e 67 28 6c 9_dn_to_string(l ef60: 61 62 65 6c 5f 61 73 6e 31 2c 20 78 35 30 39 5f abel_asn1, x509_ ef70: 72 65 61 64 5f 72 65 74 2c 20 28 63 68 61 72 20 read_ret, (char ef80: 2a 29 20 6c 61 62 65 6c 5f 62 75 66 2c 20 6c 61 *) label_buf, la ef90: 62 65 6c 5f 62 75 66 5f 6c 65 6e 2c 20 4e 55 4c bel_buf_len, NUL efa0: 4c 29 3b 0a 0a 09 09 69 66 20 28 78 35 30 39 5f L);....if (x509_ efb0: 72 65 61 64 5f 72 65 74 20 3c 3d 20 30 29 20 7b read_ret <= 0) { efc0: 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. efd0: 09 09 7d 0a 09 7d 0a 0a 23 69 66 64 65 66 20 43 ..}..}..#ifdef C efe0: 41 43 4b 45 59 5f 50 41 52 41 4e 4f 49 44 0a 23 ACKEY_PARANOID.# eff0: 20 20 69 66 64 65 66 20 5f 50 4f 53 49 58 5f 53 ifdef _POSIX_S f000: 53 49 5a 45 5f 4d 41 58 0a 09 69 66 20 28 78 35 SIZE_MAX..if (x5 f010: 30 39 5f 72 65 61 64 5f 72 65 74 20 3e 20 5f 50 09_read_ret > _P f020: 4f 53 49 58 5f 53 53 49 5a 45 5f 4d 41 58 29 20 OSIX_SSIZE_MAX) f030: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG f040: 5f 50 52 49 4e 54 46 28 22 78 35 30 39 5f 72 65 _PRINTF("x509_re f050: 61 64 5f 72 65 74 20 65 78 63 65 65 64 73 20 6d ad_ret exceeds m f060: 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c 20 72 65 aximum value, re f070: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu f080: 72 65 2e 20 28 6d 61 78 20 3d 20 25 6c 69 2c 20 re. (max = %li, f090: 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 x509_read_ret = f0a0: 25 6c 75 29 22 2c 20 28 6c 6f 6e 67 29 20 5f 50 %lu)", (long) _P f0b0: 4f 53 49 58 5f 53 53 49 5a 45 5f 4d 41 58 2c 20 OSIX_SSIZE_MAX, f0c0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) f0d0: 78 35 30 39 5f 72 65 61 64 5f 72 65 74 29 3b 0a x509_read_ret);. f0e0: 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. f0f0: 7d 0a 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 }.# endif.#endi f100: 66 0a 0a 09 72 65 74 75 72 6e 28 78 35 30 39 5f f...return(x509_ f110: 72 65 61 64 5f 72 65 74 29 3b 0a 7d 0a 0a 2f 2a read_ret);.}../* f120: 20 52 65 74 75 72 6e 73 20 30 20 6f 6e 20 73 75 Returns 0 on su f130: 63 63 65 73 73 20 2a 2f 0a 73 74 61 74 69 63 20 ccess */.static f140: 69 6e 74 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 int cackey_mutex f150: 5f 63 72 65 61 74 65 28 76 6f 69 64 20 2a 2a 6d _create(void **m f160: 75 74 65 78 29 20 7b 0a 09 70 74 68 72 65 61 64 utex) {..pthread f170: 5f 6d 75 74 65 78 5f 74 20 2a 70 74 68 72 65 61 _mutex_t *pthrea f180: 64 5f 6d 75 74 65 78 3b 0a 09 69 6e 74 20 70 74 d_mutex;..int pt f190: 68 72 65 61 64 5f 72 65 74 76 61 6c 3b 0a 09 43 hread_retval;..C f1a0: 4b 5f 52 56 20 63 75 73 74 6f 6d 5f 72 65 74 76 K_RV custom_retv f1b0: 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 al;...CACKEY_DEB f1c0: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle f1d0: 64 2e 22 29 3b 0a 0a 09 69 66 20 28 28 63 61 63 d.");...if ((cac f1e0: 6b 65 79 5f 61 72 67 73 2e 66 6c 61 67 73 20 26 key_args.flags & f1f0: 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f CKF_OS_LOCKING_ f200: 4f 4b 29 20 3d 3d 20 43 4b 46 5f 4f 53 5f 4c 4f OK) == CKF_OS_LO f210: 43 4b 49 4e 47 5f 4f 4b 29 20 7b 0a 09 09 70 74 CKING_OK) {...pt f220: 68 72 65 61 64 5f 6d 75 74 65 78 20 3d 20 6d 61 hread_mutex = ma f230: 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 70 74 68 lloc(sizeof(*pth f240: 72 65 61 64 5f 6d 75 74 65 78 29 29 3b 0a 09 09 read_mutex));... f250: 69 66 20 28 21 70 74 68 72 65 61 64 5f 6d 75 74 if (!pthread_mut f260: 65 78 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f ex) {....CACKEY_ f270: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 61 DEBUG_PRINTF("Fa f280: 69 6c 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 iled to allocate f290: 20 6d 65 6d 6f 72 79 2e 22 29 3b 0a 0a 09 09 09 memory.");..... f2a0: 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a return(-1);...}. f2b0: 0a 09 09 70 74 68 72 65 61 64 5f 72 65 74 76 61 ...pthread_retva f2c0: 6c 20 3d 20 70 74 68 72 65 61 64 5f 6d 75 74 65 l = pthread_mute f2d0: 78 5f 69 6e 69 74 28 70 74 68 72 65 61 64 5f 6d x_init(pthread_m f2e0: 75 74 65 78 2c 20 4e 55 4c 4c 29 3b 0a 09 09 69 utex, NULL);...i f2f0: 66 20 28 70 74 68 72 65 61 64 5f 72 65 74 76 61 f (pthread_retva f300: 6c 20 21 3d 20 30 29 20 7b 0a 09 09 09 43 41 43 l != 0) {....CAC f310: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF f320: 28 22 70 74 68 72 65 61 64 5f 6d 75 74 65 78 5f ("pthread_mutex_ f330: 69 6e 69 74 28 29 20 72 65 74 75 72 6e 65 64 20 init() returned f340: 65 72 72 6f 72 20 28 25 69 29 2e 22 2c 20 70 74 error (%i).", pt f350: 68 72 65 61 64 5f 72 65 74 76 61 6c 29 3b 0a 0a hread_retval);.. f360: 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. f370: 09 7d 0a 0a 09 09 2a 6d 75 74 65 78 20 3d 20 70 .}....*mutex = p f380: 74 68 72 65 61 64 5f 6d 75 74 65 78 3b 0a 09 7d thread_mutex;..} f390: 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 28 63 61 else {...if (ca f3a0: 63 6b 65 79 5f 61 72 67 73 2e 43 72 65 61 74 65 ckey_args.Create f3b0: 4d 75 74 65 78 29 20 7b 0a 09 09 09 63 75 73 74 Mutex) {....cust f3c0: 6f 6d 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b om_retval = cack f3d0: 65 79 5f 61 72 67 73 2e 43 72 65 61 74 65 4d 75 ey_args.CreateMu f3e0: 74 65 78 28 6d 75 74 65 78 29 3b 0a 0a 09 09 09 tex(mutex);..... f3f0: 69 66 20 28 63 75 73 74 6f 6d 5f 72 65 74 76 61 if (custom_retva f400: 6c 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 l != CKR_OK) {.. f410: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ f420: 50 52 49 4e 54 46 28 22 63 61 63 6b 65 79 5f 61 PRINTF("cackey_a f430: 72 67 73 2e 43 72 65 61 74 65 4d 75 74 65 78 28 rgs.CreateMutex( f440: 29 20 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 ) returned error f450: 20 28 25 6c 69 29 2e 22 2c 20 28 6c 6f 6e 67 29 (%li).", (long) f460: 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 29 3b custom_retval); f470: 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 2d 31 29 ......return(-1) f480: 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 ;....}...}..}... f490: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI f4a0: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 73 NTF("Returning s f4b0: 75 63 65 73 73 66 75 6c 6c 79 20 28 30 29 22 29 ucessfully (0)") f4c0: 3b 0a 0a 09 72 65 74 75 72 6e 28 30 29 3b 0a 7d ;...return(0);.} f4d0: 0a 0a 2f 2a 20 52 65 74 75 72 6e 73 20 30 20 6f ../* Returns 0 o f4e0: 6e 20 73 75 63 63 65 73 73 20 2a 2f 0a 73 74 61 n success */.sta f4f0: 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 6d tic int cackey_m f500: 75 74 65 78 5f 6c 6f 63 6b 28 76 6f 69 64 20 2a utex_lock(void * f510: 6d 75 74 65 78 29 20 7b 0a 09 70 74 68 72 65 61 mutex) {..pthrea f520: 64 5f 6d 75 74 65 78 5f 74 20 2a 70 74 68 72 65 d_mutex_t *pthre f530: 61 64 5f 6d 75 74 65 78 3b 0a 09 69 6e 74 20 70 ad_mutex;..int p f540: 74 68 72 65 61 64 5f 72 65 74 76 61 6c 3b 0a 09 thread_retval;.. f550: 43 4b 5f 52 56 20 63 75 73 74 6f 6d 5f 72 65 74 CK_RV custom_ret f560: 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 val;...CACKEY_DE f570: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call f580: 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 28 63 61 ed.");...if ((ca f590: 63 6b 65 79 5f 61 72 67 73 2e 66 6c 61 67 73 20 ckey_args.flags f5a0: 26 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 & CKF_OS_LOCKING f5b0: 5f 4f 4b 29 20 3d 3d 20 43 4b 46 5f 4f 53 5f 4c _OK) == CKF_OS_L f5c0: 4f 43 4b 49 4e 47 5f 4f 4b 29 20 7b 0a 09 09 70 OCKING_OK) {...p f5d0: 74 68 72 65 61 64 5f 6d 75 74 65 78 20 3d 20 6d thread_mutex = m f5e0: 75 74 65 78 3b 0a 0a 09 09 70 74 68 72 65 61 64 utex;....pthread f5f0: 5f 72 65 74 76 61 6c 20 3d 20 70 74 68 72 65 61 _retval = pthrea f600: 64 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 70 74 68 d_mutex_lock(pth f610: 72 65 61 64 5f 6d 75 74 65 78 29 3b 0a 09 09 69 read_mutex);...i f620: 66 20 28 70 74 68 72 65 61 64 5f 72 65 74 76 61 f (pthread_retva f630: 6c 20 21 3d 20 30 29 20 7b 0a 09 09 09 43 41 43 l != 0) {....CAC f640: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF f650: 28 22 70 74 68 72 65 61 64 5f 6d 75 74 65 78 5f ("pthread_mutex_ f660: 6c 6f 63 6b 28 29 20 72 65 74 75 72 6e 65 64 20 lock() returned f670: 65 72 72 6f 72 20 28 25 69 29 2e 22 2c 20 70 74 error (%i).", pt f680: 68 72 65 61 64 5f 72 65 74 76 61 6c 29 3b 0a 0a hread_retval);.. f690: 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. f6a0: 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 .}..} else {...i f6b0: 66 20 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 4c f (cackey_args.L f6c0: 6f 63 6b 4d 75 74 65 78 29 20 7b 0a 09 09 09 63 ockMutex) {....c f6d0: 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 3d 20 63 ustom_retval = c f6e0: 61 63 6b 65 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d ackey_args.LockM f6f0: 75 74 65 78 28 6d 75 74 65 78 29 3b 0a 0a 09 09 utex(mutex);.... f700: 09 69 66 20 28 63 75 73 74 6f 6d 5f 72 65 74 76 .if (custom_retv f710: 61 6c 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a al != CKR_OK) {. f720: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG f730: 5f 50 52 49 4e 54 46 28 22 63 61 63 6b 65 79 5f _PRINTF("cackey_ f740: 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 28 29 args.LockMutex() f750: 20 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 returned error f760: 28 25 6c 69 29 2e 22 2c 20 28 6c 6f 6e 67 29 20 (%li).", (long) f770: 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 29 3b 0a custom_retval);. f780: 0a 09 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b .....return(-1); f790: 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 43 ....}...}..}...C f7a0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN f7b0: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 73 75 TF("Returning su f7c0: 63 65 73 73 66 75 6c 6c 79 20 28 30 29 22 29 3b cessfully (0)"); f7d0: 0a 0a 09 72 65 74 75 72 6e 28 30 29 3b 0a 7d 0a ...return(0);.}. f7e0: 0a 2f 2a 20 52 65 74 75 72 6e 73 20 30 20 6f 6e ./* Returns 0 on f7f0: 20 73 75 63 63 65 73 73 20 2a 2f 0a 73 74 61 74 success */.stat f800: 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 6d 75 ic int cackey_mu f810: 74 65 78 5f 75 6e 6c 6f 63 6b 28 76 6f 69 64 20 tex_unlock(void f820: 2a 6d 75 74 65 78 29 20 7b 0a 09 70 74 68 72 65 *mutex) {..pthre f830: 61 64 5f 6d 75 74 65 78 5f 74 20 2a 70 74 68 72 ad_mutex_t *pthr f840: 65 61 64 5f 6d 75 74 65 78 3b 0a 09 69 6e 74 20 ead_mutex;..int f850: 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c 3b 0a pthread_retval;. f860: 09 43 4b 5f 52 56 20 63 75 73 74 6f 6d 5f 72 65 .CK_RV custom_re f870: 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 tval;...CACKEY_D f880: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal f890: 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 28 63 led.");...if ((c f8a0: 61 63 6b 65 79 5f 61 72 67 73 2e 66 6c 61 67 73 ackey_args.flags f8b0: 20 26 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e & CKF_OS_LOCKIN f8c0: 47 5f 4f 4b 29 20 3d 3d 20 43 4b 46 5f 4f 53 5f G_OK) == CKF_OS_ f8d0: 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 7b 0a 09 09 LOCKING_OK) {... f8e0: 70 74 68 72 65 61 64 5f 6d 75 74 65 78 20 3d 20 pthread_mutex = f8f0: 6d 75 74 65 78 3b 0a 0a 09 09 70 74 68 72 65 61 mutex;....pthrea f900: 64 5f 72 65 74 76 61 6c 20 3d 20 70 74 68 72 65 d_retval = pthre f910: 61 64 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ad_mutex_unlock( f920: 70 74 68 72 65 61 64 5f 6d 75 74 65 78 29 3b 0a pthread_mutex);. f930: 09 09 69 66 20 28 70 74 68 72 65 61 64 5f 72 65 ..if (pthread_re f940: 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 09 tval != 0) {.... f950: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI f960: 4e 54 46 28 22 70 74 68 72 65 61 64 5f 6d 75 74 NTF("pthread_mut f970: 65 78 5f 75 6e 6c 6f 63 6b 28 29 20 72 65 74 75 ex_unlock() retu f980: 72 6e 65 64 20 65 72 72 6f 72 20 28 25 69 29 2e rned error (%i). f990: 22 2c 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 ", pthread_retva f9a0: 6c 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d l);.....return(- f9b0: 31 29 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 1);...}..} else f9c0: 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 61 {...if (cackey_a f9d0: 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 29 rgs.UnlockMutex) f9e0: 20 7b 0a 09 09 09 63 75 73 74 6f 6d 5f 72 65 74 {....custom_ret f9f0: 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 61 72 67 val = cackey_arg fa00: 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 28 6d 75 s.UnlockMutex(mu fa10: 74 65 78 29 3b 0a 0a 09 09 09 69 66 20 28 63 75 tex);.....if (cu fa20: 73 74 6f 6d 5f 72 65 74 76 61 6c 20 21 3d 20 43 stom_retval != C fa30: 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 43 41 43 KR_OK) {.....CAC fa40: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF fa50: 28 22 63 61 63 6b 65 79 5f 61 72 67 73 2e 55 6e ("cackey_args.Un fa60: 6c 6f 63 6b 4d 75 74 65 78 28 29 20 72 65 74 75 lockMutex() retu fa70: 72 6e 65 64 20 65 72 72 6f 72 20 28 25 6c 69 29 rned error (%li) fa80: 2e 22 2c 20 28 6c 6f 6e 67 29 20 63 75 73 74 6f .", (long) custo fa90: 6d 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 09 m_retval);...... faa0: 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 09 7d return(-1);....} fab0: 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ...}..}...CACKEY fac0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R fad0: 65 74 75 72 6e 69 6e 67 20 73 75 63 65 73 73 66 eturning sucessf fae0: 75 6c 6c 79 20 28 30 29 22 29 3b 0a 0a 09 72 65 ully (0)");...re faf0: 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 73 74 61 74 turn(0);.}..stat fb00: 69 63 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f ic CK_ATTRIBUTE_ fb10: 50 54 52 20 63 61 63 6b 65 79 5f 67 65 74 5f 61 PTR cackey_get_a fb20: 74 74 72 69 62 75 74 65 73 28 43 4b 5f 4f 42 4a ttributes(CK_OBJ fb30: 45 43 54 5f 43 4c 41 53 53 20 6f 62 6a 65 63 74 ECT_CLASS object fb40: 63 6c 61 73 73 2c 20 73 74 72 75 63 74 20 63 61 class, struct ca fb50: 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 ckey_pcsc_identi fb60: 74 79 20 2a 69 64 65 6e 74 69 74 79 2c 20 75 6e ty *identity, un fb70: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 65 6e signed long iden fb80: 74 69 74 79 5f 6e 75 6d 2c 20 43 4b 5f 55 4c 4f tity_num, CK_ULO fb90: 4e 47 5f 50 54 52 20 70 75 6c 43 6f 75 6e 74 29 NG_PTR pulCount) fba0: 20 7b 0a 09 73 74 61 74 69 63 20 43 4b 5f 42 42 {..static CK_BB fbb0: 4f 4f 4c 20 63 6b 5f 74 72 75 65 20 3d 20 31 3b OOL ck_true = 1; fbc0: 0a 09 73 74 61 74 69 63 20 43 4b 5f 42 42 4f 4f ..static CK_BBOO fbd0: 4c 20 63 6b 5f 66 61 6c 73 65 20 3d 20 30 3b 0a L ck_false = 0;. fbe0: 09 43 4b 5f 55 4c 4f 4e 47 20 6e 75 6d 61 74 74 .CK_ULONG numatt fbf0: 72 73 20 3d 20 30 2c 20 72 65 74 76 61 6c 5f 63 rs = 0, retval_c fc00: 6f 75 6e 74 3b 0a 09 43 4b 5f 41 54 54 52 49 42 ount;..CK_ATTRIB fc10: 55 54 45 5f 54 59 50 45 20 63 75 72 72 5f 61 74 UTE_TYPE curr_at fc20: 74 72 5f 74 79 70 65 3b 0a 09 43 4b 5f 41 54 54 tr_type;..CK_ATT fc30: 52 49 42 55 54 45 20 63 75 72 72 5f 61 74 74 72 RIBUTE curr_attr fc40: 2c 20 2a 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 56 , *retval;..CK_V fc50: 4f 49 44 5f 50 54 52 20 70 56 61 6c 75 65 3b 0a OID_PTR pValue;. fc60: 09 43 4b 5f 55 4c 4f 4e 47 20 75 6c 56 61 6c 75 .CK_ULONG ulValu fc70: 65 4c 65 6e 3b 0a 09 43 4b 5f 4f 42 4a 45 43 54 eLen;..CK_OBJECT fc80: 5f 43 4c 41 53 53 20 63 6b 5f 6f 62 6a 65 63 74 _CLASS ck_object fc90: 5f 63 6c 61 73 73 3b 0a 09 43 4b 5f 43 45 52 54 _class;..CK_CERT fca0: 49 46 49 43 41 54 45 5f 54 59 50 45 20 63 6b 5f IFICATE_TYPE ck_ fcb0: 63 65 72 74 69 66 69 63 61 74 65 5f 74 79 70 65 certificate_type fcc0: 3b 0a 09 43 4b 5f 4b 45 59 5f 54 59 50 45 20 63 ;..CK_KEY_TYPE c fcd0: 6b 5f 6b 65 79 5f 74 79 70 65 3b 0a 09 43 4b 5f k_key_type;..CK_ fce0: 55 54 46 38 43 48 41 52 20 75 63 54 6d 70 42 75 UTF8CHAR ucTmpBu fcf0: 66 5b 31 30 32 34 5d 3b 0a 09 75 6e 73 69 67 6e f[1024];..unsign fd00: 65 64 20 63 68 61 72 20 2a 63 65 72 74 69 66 69 ed char *certifi fd10: 63 61 74 65 3b 0a 09 73 73 69 7a 65 5f 74 20 63 cate;..ssize_t c fd20: 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3d ertificate_len = fd30: 20 2d 31 2c 20 78 35 30 39 5f 72 65 61 64 5f 72 -1, x509_read_r fd40: 65 74 3b 0a 09 69 6e 74 20 70 56 61 6c 75 65 5f et;..int pValue_ fd50: 66 72 65 65 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 free;...CACKEY_D fd60: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal fd70: 6c 65 64 20 28 6f 62 6a 65 63 74 43 6c 61 73 73 led (objectClass fd80: 20 3d 20 25 6c 75 2c 20 69 64 65 6e 74 69 74 79 = %lu, identity fd90: 5f 6e 75 6d 20 3d 20 25 6c 75 29 2e 22 2c 20 28 _num = %lu).", ( fda0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6f unsigned long) o fdb0: 62 6a 65 63 74 63 6c 61 73 73 2c 20 69 64 65 6e bjectclass, iden fdc0: 74 69 74 79 5f 6e 75 6d 29 3b 0a 0a 09 69 66 20 tity_num);...if fdd0: 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 (objectclass != fde0: 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 20 CKO_CERTIFICATE fdf0: 26 26 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 && objectclass ! fe00: 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b 45 59 = CKO_PUBLIC_KEY fe10: 20 26 26 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 && objectclass fe20: 21 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b != CKO_PRIVATE_K fe30: 45 59 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 EY) {...CACKEY_D fe40: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret fe50: 75 72 6e 69 6e 67 20 30 20 6f 62 6a 65 63 74 73 urning 0 objects fe60: 20 28 4e 55 4c 4c 29 2c 20 69 6e 76 61 6c 69 64 (NULL), invalid fe70: 20 6f 62 6a 65 63 74 20 63 6c 61 73 73 22 29 3b object class"); fe80: 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 ....return(NULL) fe90: 3b 0a 09 7d 0a 0a 09 2f 2a 20 47 65 74 20 43 65 ;..}.../* Get Ce fea0: 72 74 20 2a 2f 0a 09 69 66 20 28 69 64 65 6e 74 rt */..if (ident feb0: 69 74 79 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 ity == NULL) {.. fec0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR fed0: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning fee0: 30 20 6f 62 6a 65 63 74 73 20 28 4e 55 4c 4c 29 0 objects (NULL) fef0: 2c 20 69 6e 76 61 6c 69 64 20 69 64 65 6e 74 69 , invalid identi ff00: 79 20 70 72 6f 76 69 64 65 64 22 29 3b 0a 0a 09 y provided");... ff10: 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 .return(NULL);.. ff20: 7d 0a 0a 09 63 65 72 74 69 66 69 63 61 74 65 20 }...certificate ff30: 3d 20 69 64 65 6e 74 69 74 79 2d 3e 63 65 72 74 = identity->cert ff40: 69 66 69 63 61 74 65 3b 0a 09 63 65 72 74 69 66 ificate;..certif ff50: 69 63 61 74 65 5f 6c 65 6e 20 3d 20 69 64 65 6e icate_len = iden ff60: 74 69 74 79 2d 3e 63 65 72 74 69 66 69 63 61 74 tity->certificat ff70: 65 5f 6c 65 6e 3b 0a 0a 09 69 66 20 28 63 65 72 e_len;...if (cer ff80: 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3d 3d 20 tificate_len == ff90: 2d 31 20 7c 7c 20 63 65 72 74 69 66 69 63 61 74 -1 || certificat ffa0: 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 e == NULL) {...C ffb0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN ffc0: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 30 20 TF("Returning 0 ffd0: 6f 62 6a 65 63 74 73 20 28 4e 55 4c 4c 29 2c 20 objects (NULL), ffe0: 74 68 69 73 20 69 64 65 6e 74 69 74 79 20 64 6f this identity do fff0: 65 73 20 6e 6f 74 20 68 61 76 65 20 61 6e 20 58 es not have an X 10000 2e 35 30 39 20 63 65 72 74 69 66 69 63 61 74 65 .509 certificate 10010 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 associated with 10020 20 69 74 20 61 6e 64 20 77 69 6c 6c 20 6e 6f 74 it and will not 10030 20 77 6f 72 6b 22 29 3b 0a 0a 09 09 72 65 74 75 work");....retu 10040 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 2f rn(NULL);..}.../ 10050 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 63 65 * Verify that ce 10060 72 74 69 66 69 63 61 74 65 20 69 73 20 41 53 4e rtificate is ASN 10070 2e 31 20 65 6e 63 6f 64 65 64 20 58 2e 35 30 39 .1 encoded X.509 10080 20 63 65 72 74 69 66 69 63 61 74 65 20 2a 2f 0a certificate */. 10090 09 69 66 20 28 78 35 30 39 5f 74 6f 5f 73 65 72 .if (x509_to_ser 100a0 69 61 6c 28 63 65 72 74 69 66 69 63 61 74 65 2c ial(certificate, 100b0 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e certificate_len 100c0 2c 20 4e 55 4c 4c 29 20 3c 20 30 29 20 7b 0a 09 , NULL) < 0) {.. 100d0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 100e0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 100f0 30 20 6f 62 6a 65 63 74 73 20 28 4e 55 4c 4c 29 0 objects (NULL) 10100 2c 20 74 68 65 20 58 2e 35 30 39 20 63 65 72 74 , the X.509 cert 10110 69 66 69 63 61 74 65 20 61 73 73 6f 63 69 61 74 ificate associat 10120 65 64 20 77 69 74 68 20 74 68 69 73 20 69 64 65 ed with this ide 10130 6e 74 69 74 79 20 69 73 20 6e 6f 74 20 76 61 6c ntity is not val 10140 69 64 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 id");....return( 10150 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 72 65 74 76 NULL);..}...retv 10160 61 6c 5f 63 6f 75 6e 74 20 3d 20 31 36 3b 0a 09 al_count = 16;.. 10170 72 65 74 76 61 6c 20 3d 20 6d 61 6c 6c 6f 63 28 retval = malloc( 10180 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 2a 20 73 retval_count * s 10190 69 7a 65 6f 66 28 2a 72 65 74 76 61 6c 29 29 3b izeof(*retval)); 101a0 0a 0a 09 66 6f 72 20 28 63 75 72 72 5f 61 74 74 ...for (curr_att 101b0 72 5f 74 79 70 65 20 3d 20 30 3b 20 63 75 72 72 r_type = 0; curr 101c0 5f 61 74 74 72 5f 74 79 70 65 20 3c 20 30 78 63 _attr_type < 0xc 101d0 65 35 33 36 33 35 66 3b 20 63 75 72 72 5f 61 74 e53635f; curr_at 101e0 74 72 5f 74 79 70 65 2b 2b 29 20 7b 0a 09 09 69 tr_type++) {...i 101f0 66 20 28 63 75 72 72 5f 61 74 74 72 5f 74 79 70 f (curr_attr_typ 10200 65 20 3d 3d 20 30 78 38 30 30 29 20 7b 0a 09 09 e == 0x800) {... 10210 09 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 20 .curr_attr_type 10220 3d 20 30 78 63 65 35 33 36 33 30 30 3b 0a 09 09 = 0xce536300;... 10230 7d 0a 0a 09 09 70 56 61 6c 75 65 5f 66 72 65 65 }....pValue_free 10240 20 3d 20 30 3b 0a 09 09 70 56 61 6c 75 65 20 3d = 0;...pValue = 10250 20 4e 55 4c 4c 3b 0a 09 09 75 6c 56 61 6c 75 65 NULL;...ulValue 10260 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47 29 20 Len = (CK_LONG) 10270 2d 31 3b 0a 0a 09 09 73 77 69 74 63 68 20 28 63 -1;....switch (c 10280 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 20 7b urr_attr_type) { 10290 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 43 4c 41 ....case CKA_CLA 102a0 53 53 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 SS:.....CACKEY_D 102b0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 EBUG_PRINTF("Req 102c0 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 uesting attribut 102d0 65 20 43 4b 41 5f 43 4c 41 53 53 20 28 30 78 25 e CKA_CLASS (0x% 102e0 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 08lx) ...", (uns 102f0 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 igned long) curr 10300 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 _attr_type);.... 10310 09 09 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c 61 73 ..ck_object_clas 10320 73 20 3d 20 6f 62 6a 65 63 74 63 6c 61 73 73 3b s = objectclass; 10330 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 ......pValue = & 10340 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c 61 73 73 3b ck_object_class; 10350 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 .....ulValueLen 10360 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 6f 62 6a 65 = sizeof(ck_obje 10370 63 74 5f 63 6c 61 73 73 29 3b 0a 0a 09 09 09 09 ct_class);...... 10380 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 10390 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e NTF(" ... return 103a0 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 ing %lu (%p/%lu) 103b0 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 103c0 67 29 20 2a 28 28 43 4b 5f 4f 42 4a 45 43 54 5f g) *((CK_OBJECT_ 103d0 43 4c 41 53 53 20 2a 29 20 70 56 61 6c 75 65 29 CLASS *) pValue) 103e0 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 , pValue, (unsig 103f0 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 ned long) ulValu 10400 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 eLen);......brea 10410 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 k;....case CKA_T 10420 4f 4b 45 4e 3a 0a 09 09 09 09 43 41 43 4b 45 59 OKEN:.....CACKEY 10430 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 10440 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 equesting attrib 10450 75 74 65 20 43 4b 41 5f 54 4f 4b 45 4e 20 28 30 ute CKA_TOKEN (0 10460 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 x%08lx) ...", (u 10470 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 nsigned long) cu 10480 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a rr_attr_type);.. 10490 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b ....pValue = &ck 104a0 5f 74 72 75 65 3b 0a 09 09 09 09 75 6c 56 61 6c _true;.....ulVal 104b0 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 ueLen = sizeof(c 104c0 6b 5f 74 72 75 65 29 3b 0a 0a 09 09 09 09 43 41 k_true);......CA 104d0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 104e0 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e F(" ... returnin 104f0 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c g %lu (%p/%lu)", 10500 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 10510 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 *((CK_BBOOL *) 10520 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c pValue), pValue, 10530 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 10540 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... 10550 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas 10560 65 20 43 4b 41 5f 4d 4f 44 49 46 49 41 42 4c 45 e CKA_MODIFIABLE 10570 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB 10580 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque 10590 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute 105a0 43 4b 41 5f 4d 4f 44 49 46 49 41 42 4c 45 20 28 CKA_MODIFIABLE ( 105b0 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 0x%08lx) ...", ( 105c0 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 unsigned long) c 105d0 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a urr_attr_type);. 105e0 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 .....pValue = &c 105f0 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 09 75 6c 56 k_false;.....ulV 10600 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 alueLen = sizeof 10610 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 0a 09 09 09 (ck_false);..... 10620 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 10630 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 INTF(" ... retur 10640 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 ning %lu (%p/%lu 10650 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f )", (unsigned lo 10660 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 ng) *((CK_BBOOL 10670 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c *) pValue), pVal 10680 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f ue, (unsigned lo 10690 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b ng) ulValueLen); 106a0 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 106b0 63 61 73 65 20 43 4b 41 5f 4c 41 42 45 4c 3a 0a case CKA_LABEL:. 106c0 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 106d0 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 _PRINTF("Request 106e0 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b ing attribute CK 106f0 41 5f 4c 41 42 45 4c 20 28 30 78 25 30 38 6c 78 A_LABEL (0x%08lx 10700 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 ) ...", (unsigne 10710 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 d long) curr_att 10720 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 2f 2a r_type);....../* 10730 20 58 58 58 3a 20 44 65 74 65 72 6d 69 6e 65 20 XXX: Determine 10740 6e 61 6d 65 20 2a 2f 0a 09 09 09 09 75 6c 56 61 name */.....ulVa 10750 6c 75 65 4c 65 6e 20 3d 20 73 6e 70 72 69 6e 74 lueLen = snprint 10760 66 28 75 63 54 6d 70 42 75 66 2c 20 73 69 7a 65 f(ucTmpBuf, size 10770 6f 66 28 75 63 54 6d 70 42 75 66 29 2c 20 22 49 of(ucTmpBuf), "I 10780 64 65 6e 74 69 74 79 20 23 25 6c 75 22 2c 20 28 dentity #%lu", ( 10790 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 69 unsigned long) i 107a0 64 65 6e 74 69 74 79 5f 6e 75 6d 29 3b 0a 09 09 dentity_num);... 107b0 09 09 70 56 61 6c 75 65 20 3d 20 75 63 54 6d 70 ..pValue = ucTmp 107c0 42 75 66 3b 0a 0a 09 09 09 09 69 66 20 28 75 6c Buf;......if (ul 107d0 56 61 6c 75 65 4c 65 6e 20 3e 3d 20 73 69 7a 65 ValueLen >= size 107e0 6f 66 28 75 63 54 6d 70 42 75 66 29 29 20 7b 0a of(ucTmpBuf)) {. 107f0 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 .....ulValueLen 10800 3d 20 30 3b 0a 09 09 09 09 09 70 56 61 6c 75 65 = 0;......pValue 10810 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 7d 0a 0a = NULL;.....}.. 10820 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 10830 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 _PRINTF(" ... re 10840 74 75 72 6e 69 6e 67 20 28 25 70 2f 25 6c 75 29 turning (%p/%lu) 10850 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 ", pValue, (unsi 10860 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c gned long) ulVal 10870 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 ueLen);......bre 10880 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f ak;....case CKA_ 10890 56 41 4c 55 45 3a 0a 09 09 09 09 43 41 43 4b 45 VALUE:.....CACKE 108a0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 108b0 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri 108c0 62 75 74 65 20 43 4b 41 5f 56 41 4c 55 45 20 28 bute CKA_VALUE ( 108d0 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 0x%08lx) ...", ( 108e0 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 unsigned long) c 108f0 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a urr_attr_type);. 10900 0a 09 09 09 09 73 77 69 74 63 68 20 28 6f 62 6a .....switch (obj 10910 65 63 74 63 6c 61 73 73 29 20 7b 0a 09 09 09 09 ectclass) {..... 10920 09 63 61 73 65 20 43 4b 4f 5f 50 52 49 56 41 54 .case CKO_PRIVAT 10930 45 5f 4b 45 59 3a 0a 09 09 09 09 09 09 43 41 43 E_KEY:.......CAC 10940 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 10950 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 (" ... but not g 10960 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 etting it becaus 10970 65 20 77 65 20 61 72 65 20 61 20 70 72 69 76 61 e we are a priva 10980 74 65 20 6b 65 79 2e 22 29 3b 0a 0a 09 09 09 09 te key.");...... 10990 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 63 61 ..break;......ca 109a0 73 65 20 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b 45 se CKO_PUBLIC_KE 109b0 59 3a 0a 09 09 09 09 09 09 2f 2a 20 58 58 58 3a Y:......./* XXX: 109c0 20 54 4f 44 4f 20 2a 2f 0a 0a 09 09 09 09 09 09 TODO */........ 109d0 62 72 65 61 6b 3b 0a 09 09 09 09 09 63 61 73 65 break;......case 109e0 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 CKO_CERTIFICATE 109f0 3a 0a 09 09 09 09 09 09 70 56 61 6c 75 65 20 3d :.......pValue = 10a00 20 63 65 72 74 69 66 69 63 61 74 65 3b 0a 09 09 certificate;... 10a10 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = 10a20 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e certificate_len 10a30 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a ;........break;. 10a40 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 ....}......CACKE 10a50 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 10a60 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 ... returning % 10a70 70 2f 25 6c 75 22 2c 20 70 56 61 6c 75 65 2c 20 p/%lu", pValue, 10a80 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 10a90 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 ulValueLen);.... 10aa0 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 ..break;....case 10ab0 20 43 4b 41 5f 49 53 53 55 45 52 3a 0a 09 09 09 CKA_ISSUER:.... 10ac0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 10ad0 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting 10ae0 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 49 attribute CKA_I 10af0 53 53 55 45 52 20 28 30 78 25 30 38 6c 78 29 20 SSUER (0x%08lx) 10b00 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 ...", (unsigned 10b10 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f long) curr_attr_ 10b20 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 type);......if ( 10b30 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43 objectclass != C 10b40 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 29 20 KO_CERTIFICATE) 10b50 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {......CACKEY_DE 10b60 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... 10b70 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 but not getting 10b80 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20 61 it because we a 10b90 72 65 20 6e 6f 74 20 61 20 63 65 72 74 69 66 69 re not a certifi 10ba0 63 61 74 65 2e 22 29 3b 0a 0a 09 09 09 09 09 62 cate.");.......b 10bb0 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 reak;.....}..... 10bc0 09 69 66 20 28 63 65 72 74 69 66 69 63 61 74 65 .if (certificate 10bd0 5f 6c 65 6e 20 3e 3d 20 30 29 20 7b 0a 09 09 09 _len >= 0) {.... 10be0 09 09 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 ..x509_read_ret 10bf0 3d 20 78 35 30 39 5f 74 6f 5f 69 73 73 75 65 72 = x509_to_issuer 10c00 28 63 65 72 74 69 66 69 63 61 74 65 2c 20 63 65 (certificate, ce 10c10 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 2c 20 26 rtificate_len, & 10c20 70 56 61 6c 75 65 29 3b 0a 09 09 09 09 09 69 66 pValue);......if 10c30 20 28 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 (x509_read_ret 10c40 3c 20 30 29 20 7b 0a 09 09 09 09 09 09 70 56 61 < 0) {.......pVa 10c50 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 lue = NULL;..... 10c60 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 .} else {....... 10c70 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 78 35 30 ulValueLen = x50 10c80 39 5f 72 65 61 64 5f 72 65 74 3b 0a 09 09 09 09 9_read_ret;..... 10c90 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 .}.....}......CA 10ca0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 10cb0 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e F(" ... returnin 10cc0 67 20 25 70 2f 25 6c 75 22 2c 20 70 56 61 6c 75 g %p/%lu", pValu 10cd0 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e e, (unsigned lon 10ce0 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a g) ulValueLen);. 10cf0 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c 10d00 61 73 65 20 43 4b 41 5f 53 45 52 49 41 4c 5f 4e ase CKA_SERIAL_N 10d10 55 4d 42 45 52 3a 0a 09 09 09 09 43 41 43 4b 45 UMBER:.....CACKE 10d20 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 10d30 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri 10d40 62 75 74 65 20 43 4b 41 5f 53 45 52 49 41 4c 5f bute CKA_SERIAL_ 10d50 4e 55 4d 42 45 52 20 28 30 78 25 30 38 6c 78 29 NUMBER (0x%08lx) 10d60 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned 10d70 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr 10d80 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 _type);......if 10d90 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 (objectclass != 10da0 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 29 CKO_CERTIFICATE) 10db0 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 {......CACKEY_D 10dc0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e EBUG_PRINTF(" .. 10dd0 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e . but not gettin 10de0 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20 g it because we 10df0 61 72 65 20 6e 6f 74 20 61 20 63 65 72 74 69 66 are not a certif 10e00 69 63 61 74 65 2e 22 29 3b 0a 0a 09 09 09 09 09 icate.");....... 10e10 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 break;.....}.... 10e20 09 09 69 66 20 28 63 65 72 74 69 66 69 63 61 74 ..if (certificat 10e30 65 5f 6c 65 6e 20 3e 3d 20 30 29 20 7b 0a 09 09 e_len >= 0) {... 10e40 09 09 09 78 35 30 39 5f 72 65 61 64 5f 72 65 74 ...x509_read_ret 10e50 20 3d 20 78 35 30 39 5f 74 6f 5f 73 65 72 69 61 = x509_to_seria 10e60 6c 28 63 65 72 74 69 66 69 63 61 74 65 2c 20 63 l(certificate, c 10e70 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 2c 20 ertificate_len, 10e80 26 70 56 61 6c 75 65 29 3b 0a 09 09 09 09 09 69 &pValue);......i 10e90 66 20 28 78 35 30 39 5f 72 65 61 64 5f 72 65 74 f (x509_read_ret 10ea0 20 3c 20 30 29 20 7b 0a 09 09 09 09 09 09 70 56 < 0) {.......pV 10eb0 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 alue = NULL;.... 10ec0 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 ..} else {...... 10ed0 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 78 35 .ulValueLen = x5 10ee0 30 39 5f 72 65 61 64 5f 72 65 74 3b 0a 09 09 09 09_read_ret;.... 10ef0 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 ..}.....}......C 10f00 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 10f10 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 TF(" ... returni 10f20 6e 67 20 28 25 70 2f 25 6c 75 29 22 2c 20 70 56 ng (%p/%lu)", pV 10f30 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 alue, (unsigned 10f40 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e long) ulValueLen 10f50 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 );......break;.. 10f60 09 09 63 61 73 65 20 43 4b 41 5f 53 55 42 4a 45 ..case CKA_SUBJE 10f70 43 54 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 CT:.....CACKEY_D 10f80 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 EBUG_PRINTF("Req 10f90 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 uesting attribut 10fa0 65 20 43 4b 41 5f 53 55 42 4a 45 43 54 20 28 30 e CKA_SUBJECT (0 10fb0 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 x%08lx) ...", (u 10fc0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 nsigned long) cu 10fd0 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a rr_attr_type);.. 10fe0 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c ....if (objectcl 10ff0 61 73 73 20 21 3d 20 43 4b 4f 5f 43 45 52 54 49 ass != CKO_CERTI 11000 46 49 43 41 54 45 29 20 7b 0a 09 09 09 09 09 43 FICATE) {......C 11010 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 11020 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 TF(" ... but not 11030 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 getting it beca 11040 75 73 65 20 77 65 20 61 72 65 20 6e 6f 74 20 61 use we are not a 11050 20 63 65 72 74 69 66 69 63 61 74 65 2e 22 29 3b certificate."); 11060 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 .......break;... 11070 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 63 65 72 ..}......if (cer 11080 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3e 3d 20 tificate_len >= 11090 30 29 20 7b 0a 09 09 09 09 09 78 35 30 39 5f 72 0) {......x509_r 110a0 65 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f 74 ead_ret = x509_t 110b0 6f 5f 73 75 62 6a 65 63 74 28 63 65 72 74 69 66 o_subject(certif 110c0 69 63 61 74 65 2c 20 63 65 72 74 69 66 69 63 61 icate, certifica 110d0 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 65 29 te_len, &pValue) 110e0 3b 0a 09 09 09 09 09 69 66 20 28 78 35 30 39 5f ;......if (x509_ 110f0 72 65 61 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a read_ret < 0) {. 11100 09 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 4e ......pValue = N 11110 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 6c 73 65 ULL;......} else 11120 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 6c 75 65 {.......ulValue 11130 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 64 5f Len = x509_read_ 11140 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 ret;......}..... 11150 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 }......CACKEY_DE 11160 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... 11170 20 72 65 74 75 72 6e 69 6e 67 20 25 70 2f 25 6c returning %p/%l 11180 75 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 u", pValue, (uns 11190 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 igned long) ulVa 111a0 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 lueLen);......br 111b0 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 eak;....case CKA 111c0 5f 49 44 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f _ID:.....CACKEY_ 111d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 111e0 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 questing attribu 111f0 74 65 20 43 4b 41 5f 49 44 20 28 30 78 25 30 38 te CKA_ID (0x%08 11200 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig 11210 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a 11220 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... 11230 75 63 54 6d 70 42 75 66 5b 30 5d 20 3d 20 28 28 ucTmpBuf[0] = (( 11240 69 64 65 6e 74 69 74 79 5f 6e 75 6d 20 2b 20 31 identity_num + 1 11250 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a ) >> 8) & 0xff;. 11260 09 09 09 09 75 63 54 6d 70 42 75 66 5b 31 5d 20 ....ucTmpBuf[1] 11270 3d 20 20 28 69 64 65 6e 74 69 74 79 5f 6e 75 6d = (identity_num 11280 20 2b 20 31 29 20 26 20 30 78 66 66 3b 0a 0a 09 + 1) & 0xff;... 11290 09 09 09 70 56 61 6c 75 65 20 3d 20 26 75 63 54 ...pValue = &ucT 112a0 6d 70 42 75 66 3b 0a 09 09 09 09 75 6c 56 61 6c mpBuf;.....ulVal 112b0 75 65 4c 65 6e 20 3d 20 32 3b 0a 0a 09 09 09 09 ueLen = 2;...... 112c0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 112d0 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e NTF(" ... return 112e0 69 6e 67 20 25 70 2f 25 6c 75 22 2c 20 70 56 61 ing %p/%lu", pVa 112f0 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c lue, (unsigned l 11300 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 ong) ulValueLen) 11310 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 ;......break;... 11320 09 63 61 73 65 20 43 4b 41 5f 43 45 52 54 49 46 .case CKA_CERTIF 11330 49 43 41 54 45 5f 54 59 50 45 3a 0a 09 09 09 09 ICATE_TYPE:..... 11340 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 11350 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 NTF("Requesting 11360 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 43 45 attribute CKA_CE 11370 52 54 49 46 49 43 41 54 45 5f 54 59 50 45 20 28 RTIFICATE_TYPE ( 11380 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 0x%08lx) ...", ( 11390 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 unsigned long) c 113a0 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a urr_attr_type);. 113b0 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 .....if (objectc 113c0 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43 45 52 54 lass != CKO_CERT 113d0 49 46 49 43 41 54 45 29 20 7b 0a 09 09 09 09 09 IFICATE) {...... 113e0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 113f0 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f NTF(" ... but no 11400 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 t getting it bec 11410 61 75 73 65 20 77 65 20 61 72 65 20 6e 6f 74 20 ause we are not 11420 61 20 63 65 72 74 69 66 69 63 61 74 65 2e 22 29 a certificate.") 11430 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 ;.......break;.. 11440 09 09 09 7d 0a 0a 09 09 09 09 2f 2a 20 57 65 20 ...}....../* We 11450 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 only support one 11460 20 63 65 72 74 69 66 69 63 61 74 65 20 74 79 70 certificate typ 11470 65 20 2a 2f 0a 09 09 09 09 63 6b 5f 63 65 72 74 e */.....ck_cert 11480 69 66 69 63 61 74 65 5f 74 79 70 65 20 3d 20 43 ificate_type = C 11490 4b 43 5f 58 5f 35 30 39 3b 0a 0a 09 09 09 09 70 KC_X_509;......p 114a0 56 61 6c 75 65 20 3d 20 26 63 6b 5f 63 65 72 74 Value = &ck_cert 114b0 69 66 69 63 61 74 65 5f 74 79 70 65 3b 0a 09 09 ificate_type;... 114c0 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 ..ulValueLen = s 114d0 69 7a 65 6f 66 28 63 6b 5f 63 65 72 74 69 66 69 izeof(ck_certifi 114e0 63 61 74 65 5f 74 79 70 65 29 3b 0a 0a 09 09 09 cate_type);..... 114f0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 11500 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 INTF(" ... retur 11510 6e 69 6e 67 20 43 4b 43 5f 58 5f 35 30 39 20 28 ning CKC_X_509 ( 11520 25 6c 75 29 20 28 25 70 2f 25 6c 75 29 22 2c 20 %lu) (%p/%lu)", 11530 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 11540 2a 28 28 43 4b 5f 43 45 52 54 49 46 49 43 41 54 *((CK_CERTIFICAT 11550 45 5f 54 59 50 45 20 2a 29 20 70 56 61 6c 75 65 E_TYPE *) pValue 11560 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 ), pValue, (unsi 11570 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c gned long) ulVal 11580 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 ueLen);......bre 11590 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f ak;....case CKA_ 115a0 4b 45 59 5f 54 59 50 45 3a 0a 09 09 09 09 43 41 KEY_TYPE:.....CA 115b0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 115c0 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 F("Requesting at 115d0 74 72 69 62 75 74 65 20 43 4b 41 5f 4b 45 59 5f tribute CKA_KEY_ 115e0 54 59 50 45 20 28 30 78 25 30 38 6c 78 29 20 2e TYPE (0x%08lx) . 115f0 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 11600 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 11610 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f ype);......if (o 11620 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b bjectclass != CK 11630 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 20 26 26 O_PRIVATE_KEY && 11640 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 objectclass != 11650 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b 45 59 29 20 CKO_PUBLIC_KEY) 11660 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {......CACKEY_DE 11670 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... 11680 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 but not getting 11690 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20 61 it because we a 116a0 72 65 20 6e 6f 74 20 61 20 6b 65 79 2e 22 29 3b re not a key."); 116b0 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 .......break;... 116c0 09 09 7d 0a 0a 09 09 09 09 2f 2a 20 57 65 20 6f ..}....../* We o 116d0 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 nly support one 116e0 6b 65 79 20 74 79 70 65 20 2a 2f 0a 09 09 09 09 key type */..... 116f0 63 6b 5f 6b 65 79 5f 74 79 70 65 20 3d 20 43 4b ck_key_type = CK 11700 4b 5f 52 53 41 3b 0a 0a 09 09 09 09 70 56 61 6c K_RSA;......pVal 11710 75 65 20 3d 20 26 63 6b 5f 6b 65 79 5f 74 79 70 ue = &ck_key_typ 11720 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 e;.....ulValueLe 11730 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 6b 65 n = sizeof(ck_ke 11740 79 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 43 41 y_type);......CA 11750 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 11760 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e F(" ... returnin 11770 67 20 43 4b 4b 5f 52 53 41 20 28 25 6c 75 29 20 g CKK_RSA (%lu) 11780 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 (%p/%lu)", (unsi 11790 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b gned long) *((CK 117a0 5f 43 45 52 54 49 46 49 43 41 54 45 5f 54 59 50 _CERTIFICATE_TYP 117b0 45 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 E *) pValue), pV 117c0 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 alue, (unsigned 117d0 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e long) ulValueLen 117e0 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 );......break;.. 117f0 09 09 63 61 73 65 20 43 4b 41 5f 53 49 47 4e 3a ..case CKA_SIGN: 11800 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 11810 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 G_PRINTF("Reques 11820 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 ting attribute C 11830 4b 41 5f 53 49 47 4e 20 28 30 78 25 30 38 6c 78 KA_SIGN (0x%08lx 11840 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 ) ...", (unsigne 11850 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 d long) curr_att 11860 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 r_type);......if 11870 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d (objectclass == 11880 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 CKO_PRIVATE_KEY 11890 29 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 65 20 ) {......pValue 118a0 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 = &ck_true;..... 118b0 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 .ulValueLen = si 118c0 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a 09 zeof(ck_true);.. 118d0 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 ...} else {..... 118e0 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 66 61 .pValue = &ck_fa 118f0 6c 73 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75 lse;......ulValu 11900 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b eLen = sizeof(ck 11910 5f 66 61 6c 73 65 29 3b 0a 09 09 09 09 7d 0a 0a _false);.....}.. 11920 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 11930 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 _PRINTF(" ... re 11940 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f turning %lu (%p/ 11950 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 %lu)", (unsigned 11960 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f long) *((CK_BBO 11970 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 OL *) pValue), p 11980 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 Value, (unsigned 11990 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 long) ulValueLe 119a0 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a n);......break;. 119b0 09 09 09 63 61 73 65 20 43 4b 41 5f 53 49 47 4e ...case CKA_SIGN 119c0 5f 52 45 43 4f 56 45 52 3a 0a 09 09 09 09 43 41 _RECOVER:.....CA 119d0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 119e0 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 F("Requesting at 119f0 74 72 69 62 75 74 65 20 43 4b 41 5f 53 49 47 4e tribute CKA_SIGN 11a00 5f 52 45 43 4f 56 45 52 20 28 30 78 25 30 38 6c _RECOVER (0x%08l 11a10 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e x) ...", (unsign 11a20 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 ed long) curr_at 11a30 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 2f tr_type);....../ 11a40 2a 20 57 65 20 63 75 72 72 65 6e 74 6c 79 20 6f * We currently o 11a50 6e 6c 79 20 73 75 70 70 6f 72 74 20 22 53 69 67 nly support "Sig 11a60 6e 20 77 69 74 68 20 41 70 70 65 6e 64 69 78 22 n with Appendix" 11a70 20 2a 2f 0a 09 09 09 09 70 56 61 6c 75 65 20 3d */.....pValue = 11a80 20 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 09 &ck_false;..... 11a90 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a ulValueLen = siz 11aa0 65 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 0a eof(ck_false);.. 11ab0 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 11ac0 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 _PRINTF(" ... re 11ad0 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f turning %lu (%p/ 11ae0 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 %lu)", (unsigned 11af0 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f long) *((CK_BBO 11b00 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 OL *) pValue), p 11b10 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 Value, (unsigned 11b20 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 long) ulValueLe 11b30 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a n);......break;. 11b40 09 09 09 63 61 73 65 20 43 4b 41 5f 44 45 43 52 ...case CKA_DECR 11b50 59 50 54 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f YPT:.....CACKEY_ 11b60 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 11b70 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 questing attribu 11b80 74 65 20 43 4b 41 5f 44 45 43 52 59 50 54 20 28 te CKA_DECRYPT ( 11b90 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 0x%08lx) ...", ( 11ba0 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 unsigned long) c 11bb0 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a urr_attr_type);. 11bc0 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 .....if (objectc 11bd0 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 50 52 49 56 lass == CKO_PRIV 11be0 41 54 45 5f 4b 45 59 20 7c 7c 20 6f 62 6a 65 63 ATE_KEY || objec 11bf0 74 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 50 55 tclass == CKO_PU 11c00 42 4c 49 43 5f 4b 45 59 29 20 7b 0a 09 09 09 09 BLIC_KEY) {..... 11c10 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74 72 .pValue = &ck_tr 11c20 75 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75 65 ue;......ulValue 11c30 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f Len = sizeof(ck_ 11c40 74 72 75 65 29 3b 0a 09 09 09 09 7d 20 65 6c 73 true);.....} els 11c50 65 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 65 20 e {......pValue 11c60 3d 20 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 = &ck_false;.... 11c70 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 ..ulValueLen = s 11c80 69 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b izeof(ck_false); 11c90 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b .....}......CACK 11ca0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 11cb0 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning 11cc0 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 %lu (%p/%lu)", ( 11cd0 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a unsigned long) * 11ce0 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 ((CK_BBOOL *) pV 11cf0 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 alue), pValue, ( 11d00 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 unsigned long) u 11d10 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 lValueLen);..... 11d20 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 .break;....case 11d30 43 4b 41 5f 53 45 4e 53 49 54 49 56 45 3a 0a 09 CKA_SENSITIVE:.. 11d40 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 11d50 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti 11d60 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA 11d70 5f 53 45 4e 53 49 54 49 56 45 20 28 30 78 25 30 _SENSITIVE (0x%0 11d80 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 8lx) ...", (unsi 11d90 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f gned long) curr_ 11da0 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 attr_type);..... 11db0 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 .if (objectclass 11dc0 20 3d 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f == CKO_PRIVATE_ 11dd0 4b 45 59 29 20 7b 0a 09 09 09 09 09 70 56 61 6c KEY) {......pVal 11de0 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 ue = &ck_true;.. 11df0 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = 11e00 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 sizeof(ck_true) 11e10 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 ;.....} else {.. 11e20 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b ....pValue = &ck 11e30 5f 66 61 6c 73 65 3b 0a 09 09 09 09 09 75 6c 56 _false;......ulV 11e40 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 alueLen = sizeof 11e50 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 09 09 09 09 (ck_false);..... 11e60 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 }......CACKEY_DE 11e70 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... 11e80 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 returning %lu ( 11e90 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 %p/%lu)", (unsig 11ea0 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f ned long) *((CK_ 11eb0 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 BBOOL *) pValue) 11ec0 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 , pValue, (unsig 11ed0 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 ned long) ulValu 11ee0 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 eLen);......brea 11ef0 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 45 k;....case CKA_E 11f00 58 54 52 41 43 54 41 42 4c 45 3a 0a 09 09 09 09 XTRACTABLE:..... 11f10 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 11f20 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 NTF("Requesting 11f30 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 45 58 attribute CKA_EX 11f40 54 52 41 43 54 41 42 4c 45 20 28 30 78 25 30 38 TRACTABLE (0x%08 11f50 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig 11f60 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a 11f70 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... 11f80 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 if (objectclass 11f90 3d 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b == CKO_PRIVATE_K 11fa0 45 59 29 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 EY) {......pValu 11fb0 65 20 3d 20 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 e = &ck_false;.. 11fc0 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = 11fd0 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 sizeof(ck_true) 11fe0 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 ;.....} else {.. 11ff0 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b ....pValue = &ck 12000 5f 74 72 75 65 3b 0a 09 09 09 09 09 75 6c 56 61 _true;......ulVa 12010 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 lueLen = sizeof( 12020 63 6b 5f 66 61 6c 73 65 29 3b 0a 09 09 09 09 7d ck_false);.....} 12030 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 12040 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... 12050 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 returning %lu (% 12060 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e p/%lu)", (unsign 12070 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 ed long) *((CK_B 12080 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c BOOL *) pValue), 12090 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e pValue, (unsign 120a0 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 ed long) ulValue 120b0 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b Len);......break 120c0 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 4d 4f ;....case CKA_MO 120d0 44 55 4c 55 53 3a 0a 09 09 09 09 43 41 43 4b 45 DULUS:.....CACKE 120e0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 120f0 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri 12100 62 75 74 65 20 43 4b 41 5f 4d 4f 44 55 4c 55 53 bute CKA_MODULUS 12110 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", 12120 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 12130 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) 12140 3b 0a 0a 09 09 09 09 69 66 20 28 63 65 72 74 69 ;......if (certi 12150 66 69 63 61 74 65 5f 6c 65 6e 20 3e 3d 20 30 29 ficate_len >= 0) 12160 20 7b 0a 09 09 09 09 09 78 35 30 39 5f 72 65 61 {......x509_rea 12170 64 5f 72 65 74 20 3d 20 78 35 30 39 5f 74 6f 5f d_ret = x509_to_ 12180 6d 6f 64 75 6c 75 73 28 63 65 72 74 69 66 69 63 modulus(certific 12190 61 74 65 2c 20 63 65 72 74 69 66 69 63 61 74 65 ate, certificate 121a0 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 65 29 3b 0a _len, &pValue);. 121b0 09 09 09 09 09 69 66 20 28 78 35 30 39 5f 72 65 .....if (x509_re 121c0 61 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 ad_ret < 0) {... 121d0 09 09 09 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c ....pValue = NUL 121e0 4c 3b 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b L;......} else { 121f0 0a 09 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 .......ulValueLe 12200 6e 20 3d 20 78 35 30 39 5f 72 65 61 64 5f 72 65 n = x509_read_re 12210 74 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a t;......}.....}. 12220 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 12230 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 G_PRINTF(" ... r 12240 65 74 75 72 6e 69 6e 67 20 28 25 70 2f 25 6c 75 eturning (%p/%lu 12250 29 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 )", pValue, (uns 12260 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 igned long) ulVa 12270 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 lueLen);......br 12280 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 eak;....case CKA 12290 5f 50 55 42 4c 49 43 5f 45 58 50 4f 4e 45 4e 54 _PUBLIC_EXPONENT 122a0 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB 122b0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque 122c0 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute 122d0 43 4b 41 5f 50 55 42 4c 49 43 5f 45 58 50 4f 4e CKA_PUBLIC_EXPON 122e0 45 4e 54 20 28 30 78 25 30 38 6c 78 29 20 2e 2e ENT (0x%08lx) .. 122f0 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f .", (unsigned lo 12300 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 ng) curr_attr_ty 12310 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 63 65 pe);......if (ce 12320 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3e 3d rtificate_len >= 12330 20 30 29 20 7b 0a 09 09 09 09 09 78 35 30 39 5f 0) {......x509_ 12340 72 65 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f read_ret = x509_ 12350 74 6f 5f 65 78 70 6f 6e 65 6e 74 28 63 65 72 74 to_exponent(cert 12360 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 66 69 ificate, certifi 12370 63 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 cate_len, &pValu 12380 65 29 3b 0a 09 09 09 09 09 69 66 20 28 78 35 30 e);......if (x50 12390 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 29 20 9_read_ret < 0) 123a0 7b 0a 09 09 09 09 09 09 70 56 61 6c 75 65 20 3d {.......pValue = 123b0 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 6c NULL;......} el 123c0 73 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 6c se {.......ulVal 123d0 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 ueLen = x509_rea 123e0 64 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 09 d_ret;......}... 123f0 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f ..}......CACKEY_ 12400 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 12410 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 28 25 70 .. returning (%p 12420 2f 25 6c 75 29 22 2c 20 70 56 61 6c 75 65 2c 20 /%lu)", pValue, 12430 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 12440 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 ulValueLen);.... 12450 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 ..break;....case 12460 20 43 4b 41 5f 54 52 55 53 54 5f 53 45 52 56 45 CKA_TRUST_SERVE 12470 52 5f 41 55 54 48 3a 0a 09 09 09 09 43 41 43 4b R_AUTH:.....CACK 12480 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 12490 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 "Requesting attr 124a0 69 62 75 74 65 20 43 4b 41 5f 54 52 55 53 54 5f ibute CKA_TRUST_ 124b0 53 45 52 56 45 52 5f 41 55 54 48 20 28 30 78 25 SERVER_AUTH (0x% 124c0 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 08lx) ...", (uns 124d0 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 igned long) curr 124e0 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 _attr_type);.... 124f0 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74 ..pValue = &ck_t 12500 72 75 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 rue;.....ulValue 12510 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f Len = sizeof(ck_ 12520 74 72 75 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b true);......CACK 12530 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 12540 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning 12550 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 %lu (%p/%lu)", ( 12560 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a unsigned long) * 12570 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 ((CK_BBOOL *) pV 12580 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 alue), pValue, ( 12590 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 unsigned long) u 125a0 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 lValueLen);..... 125b0 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 .break;....case 125c0 43 4b 41 5f 54 52 55 53 54 5f 43 4c 49 45 4e 54 CKA_TRUST_CLIENT 125d0 5f 41 55 54 48 3a 0a 09 09 09 09 43 41 43 4b 45 _AUTH:.....CACKE 125e0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 125f0 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri 12600 62 75 74 65 20 43 4b 41 5f 54 52 55 53 54 5f 43 bute CKA_TRUST_C 12610 4c 49 45 4e 54 5f 41 55 54 48 20 28 30 78 25 30 LIENT_AUTH (0x%0 12620 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 8lx) ...", (unsi 12630 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f gned long) curr_ 12640 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 attr_type);..... 12650 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74 72 .pValue = &ck_tr 12660 75 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c ue;.....ulValueL 12670 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 74 en = sizeof(ck_t 12680 72 75 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 rue);......CACKE 12690 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 126a0 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 ... returning % 126b0 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 lu (%p/%lu)", (u 126c0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 nsigned long) *( 126d0 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 (CK_BBOOL *) pVa 126e0 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 lue), pValue, (u 126f0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c nsigned long) ul 12700 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 ValueLen);...... 12710 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 break;....case C 12720 4b 41 5f 54 52 55 53 54 5f 43 4f 44 45 5f 53 49 KA_TRUST_CODE_SI 12730 47 4e 49 4e 47 3a 0a 09 09 09 09 43 41 43 4b 45 GNING:.....CACKE 12740 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 12750 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri 12760 62 75 74 65 20 43 4b 41 5f 54 52 55 53 54 5f 43 bute CKA_TRUST_C 12770 4f 44 45 5f 53 49 47 4e 49 4e 47 20 28 30 78 25 ODE_SIGNING (0x% 12780 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 08lx) ...", (uns 12790 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 igned long) curr 127a0 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 _attr_type);.... 127b0 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74 ..pValue = &ck_t 127c0 72 75 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 rue;.....ulValue 127d0 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f Len = sizeof(ck_ 127e0 74 72 75 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b true);......CACK 127f0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 12800 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning 12810 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 %lu (%p/%lu)", ( 12820 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a unsigned long) * 12830 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 ((CK_BBOOL *) pV 12840 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 alue), pValue, ( 12850 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 unsigned long) u 12860 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 lValueLen);..... 12870 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 .break;....case 12880 43 4b 41 5f 54 52 55 53 54 5f 45 4d 41 49 4c 5f CKA_TRUST_EMAIL_ 12890 50 52 4f 54 45 43 54 49 4f 4e 3a 0a 09 09 09 09 PROTECTION:..... 128a0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 128b0 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 NTF("Requesting 128c0 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 54 52 attribute CKA_TR 128d0 55 53 54 5f 45 4d 41 49 4c 5f 50 52 4f 54 45 43 UST_EMAIL_PROTEC 128e0 54 49 4f 4e 20 28 30 78 25 30 38 6c 78 29 20 2e TION (0x%08lx) . 128f0 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 12900 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 12910 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75 ype);......pValu 12920 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 e = &ck_true;... 12930 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 ..ulValueLen = s 12940 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a izeof(ck_true);. 12950 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 12960 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 G_PRINTF(" ... r 12970 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 eturning %lu (%p 12980 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 /%lu)", (unsigne 12990 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 d long) *((CK_BB 129a0 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 OOL *) pValue), 129b0 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 pValue, (unsigne 129c0 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c d long) ulValueL 129d0 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b en);......break; 129e0 0a 09 09 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 ....default:.... 129f0 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a .pValue = NULL;. 12a00 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = 12a10 20 28 43 4b 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 09 (CK_LONG) -1;.. 12a20 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 ...break;...}... 12a30 09 69 66 20 28 28 28 43 4b 5f 4c 4f 4e 47 29 20 .if (((CK_LONG) 12a40 75 6c 56 61 6c 75 65 4c 65 6e 29 20 21 3d 20 28 ulValueLen) != ( 12a50 28 43 4b 5f 4c 4f 4e 47 29 20 2d 31 29 29 20 7b (CK_LONG) -1)) { 12a60 0a 09 09 09 2f 2a 20 50 75 73 68 20 63 75 72 72 ..../* Push curr 12a70 5f 61 74 74 72 20 6f 6e 74 6f 20 74 68 65 20 73 _attr onto the s 12a80 74 61 63 6b 20 2a 2f 0a 09 09 09 63 75 72 72 5f tack */....curr_ 12a90 61 74 74 72 2e 74 79 70 65 20 3d 20 63 75 72 72 attr.type = curr 12aa0 5f 61 74 74 72 5f 74 79 70 65 3b 0a 09 09 09 63 _attr_type;....c 12ab0 75 72 72 5f 61 74 74 72 2e 75 6c 56 61 6c 75 65 urr_attr.ulValue 12ac0 4c 65 6e 20 3d 20 75 6c 56 61 6c 75 65 4c 65 6e Len = ulValueLen 12ad0 3b 0a 0a 09 09 09 63 75 72 72 5f 61 74 74 72 2e ;.....curr_attr. 12ae0 70 56 61 6c 75 65 20 3d 20 6d 61 6c 6c 6f 63 28 pValue = malloc( 12af0 63 75 72 72 5f 61 74 74 72 2e 75 6c 56 61 6c 75 curr_attr.ulValu 12b00 65 4c 65 6e 29 3b 0a 09 09 09 6d 65 6d 63 70 79 eLen);....memcpy 12b10 28 63 75 72 72 5f 61 74 74 72 2e 70 56 61 6c 75 (curr_attr.pValu 12b20 65 2c 20 70 56 61 6c 75 65 2c 20 63 75 72 72 5f e, pValue, curr_ 12b30 61 74 74 72 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 attr.ulValueLen) 12b40 3b 0a 0a 09 09 09 69 66 20 28 70 56 61 6c 75 65 ;.....if (pValue 12b50 5f 66 72 65 65 20 26 26 20 70 56 61 6c 75 65 29 _free && pValue) 12b60 20 7b 0a 09 09 09 09 66 72 65 65 28 70 56 61 6c {.....free(pVal 12b70 75 65 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 ue);....}.....if 12b80 20 28 6e 75 6d 61 74 74 72 73 20 3e 3d 20 72 65 (numattrs >= re 12b90 74 76 61 6c 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 tval_count) {... 12ba0 09 09 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 2a ..retval_count * 12bb0 3d 20 32 3b 0a 09 09 09 09 72 65 74 76 61 6c 20 = 2;.....retval 12bc0 3d 20 72 65 61 6c 6c 6f 63 28 72 65 74 76 61 6c = realloc(retval 12bd0 2c 20 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 2a , retval_count * 12be0 20 73 69 7a 65 6f 66 28 2a 72 65 74 76 61 6c 29 sizeof(*retval) 12bf0 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 6d 65 6d 63 );....}.....memc 12c00 70 79 28 26 72 65 74 76 61 6c 5b 6e 75 6d 61 74 py(&retval[numat 12c10 74 72 73 5d 2c 20 26 63 75 72 72 5f 61 74 74 72 trs], &curr_attr 12c20 2c 20 73 69 7a 65 6f 66 28 63 75 72 72 5f 61 74 , sizeof(curr_at 12c30 74 72 29 29 3b 0a 09 09 09 6e 75 6d 61 74 74 72 tr));....numattr 12c40 73 2b 2b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 s++;...}..}...if 12c50 20 28 6e 75 6d 61 74 74 72 73 20 21 3d 20 30 29 (numattrs != 0) 12c60 20 7b 0a 09 09 72 65 74 76 61 6c 5f 63 6f 75 6e {...retval_coun 12c70 74 20 3d 20 6e 75 6d 61 74 74 72 73 3b 0a 09 09 t = numattrs;... 12c80 72 65 74 76 61 6c 20 3d 20 72 65 61 6c 6c 6f 63 retval = realloc 12c90 28 72 65 74 76 61 6c 2c 20 72 65 74 76 61 6c 5f (retval, retval_ 12ca0 63 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 28 2a count * sizeof(* 12cb0 72 65 74 76 61 6c 29 29 3b 0a 09 7d 20 65 6c 73 retval));..} els 12cc0 65 20 7b 0a 09 09 66 72 65 65 28 72 65 74 76 61 e {...free(retva 12cd0 6c 29 3b 0a 0a 09 09 72 65 74 76 61 6c 20 3d 20 l);....retval = 12ce0 4e 55 4c 4c 3b 0a 09 7d 0a 0a 09 2a 70 75 6c 43 NULL;..}...*pulC 12cf0 6f 75 6e 74 20 3d 20 6e 75 6d 61 74 74 72 73 3b ount = numattrs; 12d00 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 12d10 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 12d20 67 20 25 6c 75 20 6f 62 6a 65 63 74 73 20 28 25 g %lu objects (% 12d30 70 29 2e 22 2c 20 6e 75 6d 61 74 74 72 73 2c 20 p).", numattrs, 12d40 72 65 74 76 61 6c 29 3b 0a 0a 09 72 65 74 75 72 retval);...retur 12d50 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 n(retval);.}..st 12d60 61 74 69 63 20 76 6f 69 64 20 63 61 63 6b 65 79 atic void cackey 12d70 5f 66 72 65 65 5f 69 64 65 6e 74 69 74 69 65 73 _free_identities 12d80 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 69 (struct cackey_i 12d90 64 65 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 74 dentity *identit 12da0 69 65 73 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f ies, unsigned lo 12db0 6e 67 20 69 64 65 6e 74 69 74 69 65 73 5f 63 6f ng identities_co 12dc0 75 6e 74 29 20 7b 0a 09 43 4b 5f 41 54 54 52 49 unt) {..CK_ATTRI 12dd0 42 55 54 45 20 2a 63 75 72 72 5f 61 74 74 72 3b BUTE *curr_attr; 12de0 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 ..unsigned long 12df0 69 64 5f 69 64 78 2c 20 61 74 74 72 5f 69 64 78 id_idx, attr_idx 12e00 3b 0a 0a 09 69 66 20 28 69 64 65 6e 74 69 74 69 ;...if (identiti 12e10 65 73 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 69 64 es == NULL || id 12e20 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 20 3d entities_count = 12e30 3d 20 30 29 20 7b 0a 09 09 72 65 74 75 72 6e 3b = 0) {...return; 12e40 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 5f 69 64 ..}...for (id_id 12e50 78 20 3d 20 30 3b 20 69 64 5f 69 64 78 20 3c 20 x = 0; id_idx < 12e60 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 identities_count 12e70 3b 20 69 64 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 ; id_idx++) {... 12e80 69 66 20 28 69 64 65 6e 74 69 74 69 65 73 5b 69 if (identities[i 12e90 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 d_idx].attribute 12ea0 73 29 20 7b 0a 09 09 09 66 6f 72 20 28 61 74 74 s) {....for (att 12eb0 72 5f 69 64 78 20 3d 20 30 3b 20 61 74 74 72 5f r_idx = 0; attr_ 12ec0 69 64 78 20 3c 20 69 64 65 6e 74 69 74 69 65 73 idx < identities 12ed0 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 [id_idx].attribu 12ee0 74 65 73 5f 63 6f 75 6e 74 3b 20 61 74 74 72 5f tes_count; attr_ 12ef0 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 63 75 72 idx++) {.....cur 12f00 72 5f 61 74 74 72 20 3d 20 26 69 64 65 6e 74 69 r_attr = &identi 12f10 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 ties[id_idx].att 12f20 72 69 62 75 74 65 73 5b 61 74 74 72 5f 69 64 78 ributes[attr_idx 12f30 5d 3b 0a 0a 09 09 09 09 69 66 20 28 63 75 72 72 ];......if (curr 12f40 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 29 20 7b _attr->pValue) { 12f50 0a 09 09 09 09 09 66 72 65 65 28 63 75 72 72 5f ......free(curr_ 12f60 61 74 74 72 2d 3e 70 56 61 6c 75 65 29 3b 0a 09 attr->pValue);.. 12f70 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 69 66 ...}....}.....if 12f80 20 28 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f (identities[id_ 12f90 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 29 idx].attributes) 12fa0 20 7b 0a 09 09 09 09 66 72 65 65 28 69 64 65 6e {.....free(iden 12fb0 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 tities[id_idx].a 12fc0 74 74 72 69 62 75 74 65 73 29 3b 0a 09 09 09 7d ttributes);....} 12fd0 0a 0a 09 09 09 63 61 63 6b 65 79 5f 66 72 65 65 .....cackey_free 12fe0 5f 63 65 72 74 73 28 69 64 65 6e 74 69 74 69 65 _certs(identitie 12ff0 73 5b 69 64 5f 69 64 78 5d 2e 70 63 73 63 5f 69 s[id_idx].pcsc_i 13000 64 65 6e 74 69 74 79 2c 20 31 2c 20 31 29 3b 0a dentity, 1, 1);. 13010 09 09 7d 0a 09 7d 0a 0a 09 66 72 65 65 28 69 64 ..}..}...free(id 13020 65 6e 74 69 74 69 65 73 29 3b 0a 7d 0a 0a 73 74 entities);.}..st 13030 61 74 69 63 20 73 74 72 75 63 74 20 63 61 63 6b atic struct cack 13040 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 63 61 63 ey_identity *cac 13050 6b 65 79 5f 72 65 61 64 5f 69 64 65 6e 74 69 74 key_read_identit 13060 69 65 73 28 73 74 72 75 63 74 20 63 61 63 6b 65 ies(struct cacke 13070 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e y_slot *slot, un 13080 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 69 64 73 signed long *ids 13090 5f 66 6f 75 6e 64 29 20 7b 0a 09 73 74 72 75 63 _found) {..struc 130a0 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 t cackey_pcsc_id 130b0 65 6e 74 69 74 79 20 2a 70 63 73 63 5f 69 64 65 entity *pcsc_ide 130c0 6e 74 69 74 69 65 73 3b 0a 09 73 74 72 75 63 74 ntities;..struct 130d0 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 cackey_identity 130e0 20 2a 69 64 65 6e 74 69 74 69 65 73 3b 0a 09 75 *identities;..u 130f0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6e 75 6d nsigned long num 13100 5f 69 64 73 2c 20 69 64 5f 69 64 78 2c 20 63 75 _ids, id_idx, cu 13110 72 72 5f 69 64 5f 74 79 70 65 3b 0a 09 75 6e 73 rr_id_type;..uns 13120 69 67 6e 65 64 20 6c 6f 6e 67 20 6e 75 6d 5f 63 igned long num_c 13130 65 72 74 73 2c 20 63 65 72 74 5f 69 64 78 3b 0a erts, cert_idx;. 13140 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 13150 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 13160 3b 0a 0a 09 69 66 20 28 69 64 73 5f 66 6f 75 6e ;...if (ids_foun 13170 64 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 d == NULL) {...C 13180 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 13190 54 46 28 22 45 72 72 6f 72 2e 20 20 69 64 73 5f TF("Error. ids_ 131a0 66 6f 75 6e 64 20 69 73 20 4e 55 4c 4c 22 29 3b found is NULL"); 131b0 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 ....return(NULL) 131c0 3b 0a 09 7d 0a 0a 09 70 63 73 63 5f 69 64 65 6e ;..}...pcsc_iden 131d0 74 69 74 69 65 73 20 3d 20 63 61 63 6b 65 79 5f tities = cackey_ 131e0 72 65 61 64 5f 63 65 72 74 73 28 73 6c 6f 74 2c read_certs(slot, 131f0 20 4e 55 4c 4c 2c 20 26 6e 75 6d 5f 63 65 72 74 NULL, &num_cert 13200 73 29 3b 0a 09 69 66 20 28 70 63 73 63 5f 69 64 s);..if (pcsc_id 13210 65 6e 74 69 74 69 65 73 20 21 3d 20 4e 55 4c 4c entities != NULL 13220 29 20 7b 0a 09 09 2f 2a 20 43 6f 6e 76 65 72 74 ) {.../* Convert 13230 20 6e 75 6d 62 65 72 20 6f 66 20 43 65 72 74 73 number of Certs 13240 20 74 6f 20 6e 75 6d 62 65 72 20 6f 66 20 6f 62 to number of ob 13250 6a 65 63 74 73 20 2a 2f 0a 09 09 6e 75 6d 5f 69 jects */...num_i 13260 64 73 20 3d 20 28 43 4b 4f 5f 50 52 49 56 41 54 ds = (CKO_PRIVAT 13270 45 5f 4b 45 59 20 2d 20 43 4b 4f 5f 43 45 52 54 E_KEY - CKO_CERT 13280 49 46 49 43 41 54 45 20 2b 20 31 29 20 2a 20 6e IFICATE + 1) * n 13290 75 6d 5f 63 65 72 74 73 3b 0a 0a 09 09 69 64 65 um_certs;....ide 132a0 6e 74 69 74 69 65 73 20 3d 20 6d 61 6c 6c 6f 63 ntities = malloc 132b0 28 6e 75 6d 5f 69 64 73 20 2a 20 73 69 7a 65 6f (num_ids * sizeo 132c0 66 28 2a 69 64 65 6e 74 69 74 69 65 73 29 29 3b f(*identities)); 132d0 0a 0a 09 09 69 64 5f 69 64 78 20 3d 20 30 3b 0a ....id_idx = 0;. 132e0 09 09 66 6f 72 20 28 63 65 72 74 5f 69 64 78 20 ..for (cert_idx 132f0 3d 20 30 3b 20 63 65 72 74 5f 69 64 78 20 3c 20 = 0; cert_idx < 13300 6e 75 6d 5f 63 65 72 74 73 3b 20 63 65 72 74 5f num_certs; cert_ 13310 69 64 78 2b 2b 29 20 7b 0a 09 09 09 66 6f 72 20 idx++) {....for 13320 28 63 75 72 72 5f 69 64 5f 74 79 70 65 20 3d 20 (curr_id_type = 13330 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 3b CKO_CERTIFICATE; 13340 20 63 75 72 72 5f 69 64 5f 74 79 70 65 20 3c 3d curr_id_type <= 13350 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 CKO_PRIVATE_KEY 13360 3b 20 63 75 72 72 5f 69 64 5f 74 79 70 65 2b 2b ; curr_id_type++ 13370 29 20 7b 0a 09 09 09 09 69 64 65 6e 74 69 74 69 ) {.....identiti 13380 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 es[id_idx].attri 13390 62 75 74 65 73 20 3d 20 63 61 63 6b 65 79 5f 67 butes = cackey_g 133a0 65 74 5f 61 74 74 72 69 62 75 74 65 73 28 63 75 et_attributes(cu 133b0 72 72 5f 69 64 5f 74 79 70 65 2c 20 26 70 63 73 rr_id_type, &pcs 133c0 63 5f 69 64 65 6e 74 69 74 69 65 73 5b 63 65 72 c_identities[cer 133d0 74 5f 69 64 78 5d 2c 20 63 65 72 74 5f 69 64 78 t_idx], cert_idx 133e0 2c 20 26 69 64 65 6e 74 69 74 69 65 73 5b 69 64 , &identities[id 133f0 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 _idx].attributes 13400 5f 63 6f 75 6e 74 29 3b 0a 0a 09 09 09 09 69 66 _count);......if 13410 20 28 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f (identities[id_ 13420 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 20 idx].attributes 13430 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 09 == NULL) {...... 13440 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 identities[id_id 13450 78 5d 2e 61 74 74 72 69 62 75 74 65 73 5f 63 6f x].attributes_co 13460 75 6e 74 20 3d 20 30 3b 0a 09 09 09 09 7d 0a 0a unt = 0;.....}.. 13470 09 09 09 09 69 64 65 6e 74 69 74 69 65 73 5b 69 ....identities[i 13480 64 5f 69 64 78 5d 2e 70 63 73 63 5f 69 64 65 6e d_idx].pcsc_iden 13490 74 69 74 79 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 tity = malloc(si 134a0 7a 65 6f 66 28 2a 69 64 65 6e 74 69 74 69 65 73 zeof(*identities 134b0 5b 69 64 5f 69 64 78 5d 2e 70 63 73 63 5f 69 64 [id_idx].pcsc_id 134c0 65 6e 74 69 74 79 29 29 3b 0a 09 09 09 09 6d 65 entity));.....me 134d0 6d 63 70 79 28 69 64 65 6e 74 69 74 69 65 73 5b mcpy(identities[ 134e0 69 64 5f 69 64 78 5d 2e 70 63 73 63 5f 69 64 65 id_idx].pcsc_ide 134f0 6e 74 69 74 79 2c 20 26 70 63 73 63 5f 69 64 65 ntity, &pcsc_ide 13500 6e 74 69 74 69 65 73 5b 63 65 72 74 5f 69 64 78 ntities[cert_idx 13510 5d 2c 20 73 69 7a 65 6f 66 28 2a 69 64 65 6e 74 ], sizeof(*ident 13520 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 70 63 ities[id_idx].pc 13530 73 63 5f 69 64 65 6e 74 69 74 79 29 29 3b 0a 0a sc_identity));.. 13540 09 09 09 09 69 64 65 6e 74 69 74 69 65 73 5b 69 ....identities[i 13550 64 5f 69 64 78 5d 2e 70 63 73 63 5f 69 64 65 6e d_idx].pcsc_iden 13560 74 69 74 79 2d 3e 63 65 72 74 69 66 69 63 61 74 tity->certificat 13570 65 20 3d 20 6d 61 6c 6c 6f 63 28 70 63 73 63 5f e = malloc(pcsc_ 13580 69 64 65 6e 74 69 74 69 65 73 5b 63 65 72 74 5f identities[cert_ 13590 69 64 78 5d 2e 63 65 72 74 69 66 69 63 61 74 65 idx].certificate 135a0 5f 6c 65 6e 29 3b 0a 09 09 09 09 6d 65 6d 63 70 _len);.....memcp 135b0 79 28 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f y(identities[id_ 135c0 69 64 78 5d 2e 70 63 73 63 5f 69 64 65 6e 74 69 idx].pcsc_identi 135d0 74 79 2d 3e 63 65 72 74 69 66 69 63 61 74 65 2c ty->certificate, 135e0 20 70 63 73 63 5f 69 64 65 6e 74 69 74 69 65 73 pcsc_identities 135f0 5b 63 65 72 74 5f 69 64 78 5d 2e 63 65 72 74 69 [cert_idx].certi 13600 66 69 63 61 74 65 2c 20 70 63 73 63 5f 69 64 65 ficate, pcsc_ide 13610 6e 74 69 74 69 65 73 5b 63 65 72 74 5f 69 64 78 ntities[cert_idx 13620 5d 2e 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 ].certificate_le 13630 6e 29 3b 0a 0a 09 09 09 09 69 64 5f 69 64 78 2b n);......id_idx+ 13640 2b 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 63 +;....}...}....c 13650 61 63 6b 65 79 5f 66 72 65 65 5f 63 65 72 74 73 ackey_free_certs 13660 28 70 63 73 63 5f 69 64 65 6e 74 69 74 69 65 73 (pcsc_identities 13670 2c 20 6e 75 6d 5f 63 65 72 74 73 2c 20 31 29 3b , num_certs, 1); 13680 0a 0a 09 09 2a 69 64 73 5f 66 6f 75 6e 64 20 3d ....*ids_found = 13690 20 6e 75 6d 5f 69 64 73 3b 0a 09 09 72 65 74 75 num_ids;...retu 136a0 72 6e 28 69 64 65 6e 74 69 74 69 65 73 29 3b 0a rn(identities);. 136b0 09 7d 0a 0a 09 2a 69 64 73 5f 66 6f 75 6e 64 20 .}...*ids_found 136c0 3d 20 30 3b 0a 09 72 65 74 75 72 6e 28 4e 55 4c = 0;..return(NUL 136d0 4c 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 L);.}..CK_DEFINE 136e0 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 136f0 20 43 5f 49 6e 69 74 69 61 6c 69 7a 65 29 28 43 C_Initialize)(C 13700 4b 5f 56 4f 49 44 5f 50 54 52 20 70 49 6e 69 74 K_VOID_PTR pInit 13710 41 72 67 73 29 20 7b 0a 09 43 4b 5f 43 5f 49 4e Args) {..CK_C_IN 13720 49 54 49 41 4c 49 5a 45 5f 41 52 47 53 20 43 4b ITIALIZE_ARGS CK 13730 5f 50 54 52 20 61 72 67 73 3b 0a 09 75 69 6e 74 _PTR args;..uint 13740 33 32 5f 74 20 69 64 78 3b 0a 09 69 6e 74 20 6d 32_t idx;..int m 13750 75 74 65 78 5f 69 6e 69 74 5f 72 65 74 3b 0a 0a utex_init_ret;.. 13760 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 13770 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 13780 0a 0a 09 69 66 20 28 70 49 6e 69 74 41 72 67 73 ...if (pInitArgs 13790 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 61 72 != NULL) {...ar 137a0 67 73 20 3d 20 70 49 6e 69 74 41 72 67 73 3b 0a gs = pInitArgs;. 137b0 09 09 6d 65 6d 63 70 79 28 26 63 61 63 6b 65 79 ..memcpy(&cackey 137c0 5f 61 72 67 73 2c 20 61 72 67 73 2c 20 73 69 7a _args, args, siz 137d0 65 6f 66 28 63 61 63 6b 65 79 5f 61 72 67 73 29 eof(cackey_args) 137e0 29 3b 0a 0a 09 09 69 66 20 28 61 72 67 73 2d 3e );....if (args-> 137f0 43 72 65 61 74 65 4d 75 74 65 78 20 3d 3d 20 4e CreateMutex == N 13800 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 44 65 73 ULL || args->Des 13810 74 72 6f 79 4d 75 74 65 78 20 3d 3d 20 4e 55 4c troyMutex == NUL 13820 4c 20 7c 7c 20 61 72 67 73 2d 3e 4c 6f 63 6b 4d L || args->LockM 13830 75 74 65 78 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 utex == NULL || 13840 61 72 67 73 2d 3e 55 6e 6c 6f 63 6b 4d 75 74 65 args->UnlockMute 13850 78 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 x == NULL) {.... 13860 69 66 20 28 61 72 67 73 2d 3e 43 72 65 61 74 65 if (args->Create 13870 4d 75 74 65 78 20 21 3d 20 4e 55 4c 4c 20 7c 7c Mutex != NULL || 13880 20 61 72 67 73 2d 3e 44 65 73 74 72 6f 79 4d 75 args->DestroyMu 13890 74 65 78 20 21 3d 20 4e 55 4c 4c 20 7c 7c 20 61 tex != NULL || a 138a0 72 67 73 2d 3e 4c 6f 63 6b 4d 75 74 65 78 20 21 rgs->LockMutex ! 138b0 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e = NULL || args-> 138c0 55 6e 6c 6f 63 6b 4d 75 74 65 78 20 21 3d 20 4e UnlockMutex != N 138d0 55 4c 4c 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 ULL) {.....CACKE 138e0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 138f0 45 72 72 6f 72 2e 20 53 6f 6d 65 2c 20 62 75 74 Error. Some, but 13900 20 6e 6f 74 20 41 6c 6c 20 74 68 72 65 61 64 69 not All threadi 13910 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 70 72 ng primitives pr 13920 6f 76 69 64 65 64 2e 22 29 3b 0a 0a 09 09 09 09 ovided.");...... 13930 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM 13940 45 4e 54 53 5f 42 41 44 29 3b 0a 09 09 09 7d 0a ENTS_BAD);....}. 13950 09 09 7d 0a 0a 09 09 69 66 20 28 61 72 67 73 2d ..}....if (args- 13960 3e 70 52 65 73 65 72 76 65 64 20 21 3d 20 4e 55 >pReserved != NU 13970 4c 4c 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f LL) {....CACKEY_ 13980 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 13990 72 6f 72 2e 20 70 52 65 73 65 72 76 65 64 20 69 ror. pReserved i 139a0 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a s not NULL.");.. 139b0 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 139c0 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 09 GUMENTS_BAD);... 139d0 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 63 61 }..} else {...ca 139e0 63 6b 65 79 5f 61 72 67 73 2e 43 72 65 61 74 65 ckey_args.Create 139f0 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 Mutex = NULL;... 13a00 63 61 63 6b 65 79 5f 61 72 67 73 2e 44 65 73 74 cackey_args.Dest 13a10 72 6f 79 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b royMutex = NULL; 13a20 0a 09 09 63 61 63 6b 65 79 5f 61 72 67 73 2e 4c ...cackey_args.L 13a30 6f 63 6b 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b ockMutex = NULL; 13a40 0a 09 09 63 61 63 6b 65 79 5f 61 72 67 73 2e 55 ...cackey_args.U 13a50 6e 6c 6f 63 6b 4d 75 74 65 78 20 3d 20 4e 55 4c nlockMutex = NUL 13a60 4c 3b 0a 09 09 63 61 63 6b 65 79 5f 61 72 67 73 L;...cackey_args 13a70 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 09 7d 0a 0a .flags = 0;..}.. 13a80 09 69 66 20 28 63 61 63 6b 65 79 5f 69 6e 69 74 .if (cackey_init 13a90 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 13aa0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 13ab0 28 22 45 72 72 6f 72 2e 20 20 41 6c 72 65 61 64 ("Error. Alread 13ac0 79 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 y initialized.") 13ad0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 13ae0 43 52 59 50 54 4f 4b 49 5f 41 4c 52 45 41 44 59 CRYPTOKI_ALREADY 13af0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 13b00 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 }...for (idx = 0 13b10 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 ; idx < (sizeof( 13b20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 13b30 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 13b40 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 3b 20 _sessions[0])); 13b50 69 64 78 2b 2b 29 20 7b 0a 09 09 63 61 63 6b 65 idx++) {...cacke 13b60 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. 13b70 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 7d 0a 0a active = 0;..}.. 13b80 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 .for (idx = 0; i 13b90 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 dx < (sizeof(cac 13ba0 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a key_slots) / siz 13bb0 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 eof(cackey_slots 13bc0 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b 0a [0])); idx++) {. 13bd0 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 ..cackey_slots[i 13be0 64 78 5d 2e 61 63 74 69 76 65 20 3d 20 30 3b 0a dx].active = 0;. 13bf0 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 ..cackey_slots[i 13c00 64 78 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 20 dx].pcsc_reader 13c10 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 6b 65 79 = NULL;...cackey 13c20 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 74 72 61 6e _slots[idx].tran 13c30 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3d 20 saction_depth = 13c40 30 3b 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 0;...cackey_slot 13c50 73 5b 69 64 78 5d 2e 73 6c 6f 74 5f 72 65 73 65 s[idx].slot_rese 13c60 74 20 3d 20 30 3b 0a 09 09 63 61 63 6b 65 79 5f t = 0;...cackey_ 13c70 73 6c 6f 74 73 5b 69 64 78 5d 2e 74 6f 6b 65 6e slots[idx].token 13c80 5f 66 6c 61 67 73 20 3d 20 30 3b 0a 09 09 63 61 _flags = 0;...ca 13c90 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e ckey_slots[idx]. 13ca0 6c 61 62 65 6c 20 3d 20 4e 55 4c 4c 3b 0a 09 7d label = NULL;..} 13cb0 0a 0a 09 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 ...cackey_initia 13cc0 6c 69 7a 65 64 20 3d 20 31 3b 0a 0a 09 69 66 20 lized = 1;...if 13cd0 28 21 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b (!cackey_biglock 13ce0 5f 69 6e 69 74 29 20 7b 0a 09 09 6d 75 74 65 78 _init) {...mutex 13cf0 5f 69 6e 69 74 5f 72 65 74 20 3d 20 63 61 63 6b _init_ret = cack 13d00 65 79 5f 6d 75 74 65 78 5f 63 72 65 61 74 65 28 ey_mutex_create( 13d10 26 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 &cackey_biglock) 13d20 3b 0a 0a 09 09 69 66 20 28 6d 75 74 65 78 5f 69 ;....if (mutex_i 13d30 6e 69 74 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a nit_ret != 0) {. 13d40 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 13d50 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 13d60 4d 75 74 65 78 20 69 6e 69 74 69 61 6c 69 7a 61 Mutex initializa 13d70 74 69 6f 6e 20 66 61 69 6c 65 64 2e 22 29 3b 0a tion failed.");. 13d80 0a 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 13d90 41 4e 54 5f 4c 4f 43 4b 29 3b 0a 09 09 7d 0a 0a ANT_LOCK);...}.. 13da0 09 09 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b ..cackey_biglock 13db0 5f 69 6e 69 74 20 3d 20 31 3b 0a 09 7d 0a 0a 09 _init = 1;..}... 13dc0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 13dd0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 13de0 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR 13df0 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C 13e00 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 KR_OK);.}..CK_DE 13e10 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 13e20 5f 52 56 2c 20 43 5f 46 69 6e 61 6c 69 7a 65 29 _RV, C_Finalize) 13e30 28 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 52 65 (CK_VOID_PTR pRe 13e40 73 65 72 76 65 64 29 20 7b 0a 09 75 69 6e 74 33 served) {..uint3 13e50 32 5f 74 20 69 64 78 3b 0a 0a 09 43 41 43 4b 45 2_t idx;...CACKE 13e60 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 13e70 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 13e80 28 70 52 65 73 65 72 76 65 64 20 21 3d 20 4e 55 (pReserved != NU 13e90 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 13ea0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 13eb0 6f 72 2e 20 70 52 65 73 65 72 76 65 64 20 69 73 or. pReserved is 13ec0 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 not NULL.");... 13ed0 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 13ee0 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 13ef0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 13f00 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 13f10 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 13f20 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 13f30 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 13f40 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 13f50 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 13f60 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 66 6f 72 LIZED);..}...for 13f70 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c (idx = 0; idx < 13f80 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 13f90 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 13fa0 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 13fb0 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 ns[0])); idx++) 13fc0 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 {...if (cackey_s 13fd0 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 63 74 essions[idx].act 13fe0 69 76 65 29 20 7b 0a 09 09 09 43 5f 43 6c 6f 73 ive) {....C_Clos 13ff0 65 53 65 73 73 69 6f 6e 28 69 64 78 29 3b 0a 09 eSession(idx);.. 14000 09 7d 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 .}..}...cackey_s 14010 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f lots_disconnect_ 14020 61 6c 6c 28 29 3b 0a 0a 09 66 6f 72 20 28 69 64 all();...for (id 14030 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 28 73 69 x = 0; idx < (si 14040 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 14050 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 14060 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 3b 20 69 ey_slots[0])); i 14070 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63 61 dx++) {...if (ca 14080 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e ckey_slots[idx]. 14090 70 63 73 63 5f 72 65 61 64 65 72 29 20 7b 0a 09 pcsc_reader) {.. 140a0 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f 73 6c ..free(cackey_sl 140b0 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 72 65 ots[idx].pcsc_re 140c0 61 64 65 72 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 ader);...}..}... 140d0 63 61 63 6b 65 79 5f 70 63 73 63 5f 64 69 73 63 cackey_pcsc_disc 140e0 6f 6e 6e 65 63 74 28 29 3b 0a 0a 09 63 61 63 6b onnect();...cack 140f0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d ey_initialized = 14100 20 30 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 0;...CACKEY_DEB 14110 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 14120 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 14130 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 14140 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 14150 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 14160 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 ION(CK_RV, C_Get 14170 49 6e 66 6f 29 28 43 4b 5f 49 4e 46 4f 5f 50 54 Info)(CK_INFO_PT 14180 52 20 70 49 6e 66 6f 29 20 7b 0a 09 73 74 61 74 R pInfo) {..stat 14190 69 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20 6d ic CK_UTF8CHAR m 141a0 61 6e 75 66 61 63 74 75 72 65 72 49 44 5b 5d 20 anufacturerID[] 141b0 3d 20 22 55 2e 53 2e 20 47 6f 76 65 72 6e 6d 65 = "U.S. Governme 141c0 6e 74 22 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f nt";..static CK_ 141d0 55 54 46 38 43 48 41 52 20 6c 69 62 72 61 72 79 UTF8CHAR library 141e0 44 65 73 63 72 69 70 74 69 6f 6e 5b 5d 20 3d 20 Description[] = 141f0 22 43 41 43 4b 65 79 22 3b 0a 0a 09 43 41 43 4b "CACKey";...CACK 14200 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 14210 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 14220 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 (pInfo == NULL) 14230 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 14240 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 14250 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 pInfo is NULL." 14260 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 14270 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b _ARGUMENTS_BAD); 14280 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ..}...if (!cacke 14290 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 142a0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 142b0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 142c0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 142d0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 142e0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 142f0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 14300 0a 09 70 49 6e 66 6f 2d 3e 63 72 79 70 74 6f 6b ..pInfo->cryptok 14310 69 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d iVersion.major = 14320 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54 4f ((CACKEY_CRYPTO 14330 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 29 KI_VERSION_CODE) 14340 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a >> 16) & 0xff;. 14350 09 70 49 6e 66 6f 2d 3e 63 72 79 70 74 6f 6b 69 .pInfo->cryptoki 14360 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 Version.minor = 14370 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b ((CACKEY_CRYPTOK 14380 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 29 20 I_VERSION_CODE) 14390 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a 09 >> 8) & 0xff;... 143a0 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d 61 memset(pInfo->ma 143b0 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 27 20 nufacturerID, ' 143c0 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d ', sizeof(pInfo- 143d0 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 >manufacturerID) 143e0 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f );..memcpy(pInfo 143f0 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 ->manufacturerID 14400 2c 20 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 , manufacturerID 14410 2c 20 73 69 7a 65 6f 66 28 6d 61 6e 75 66 61 63 , sizeof(manufac 14420 74 75 72 65 72 49 44 29 20 2d 20 31 29 3b 0a 0a turerID) - 1);.. 14430 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 .pInfo->flags = 14440 30 78 30 30 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 0x00;...memset(p 14450 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 44 65 73 Info->libraryDes 14460 63 72 69 70 74 69 6f 6e 2c 20 27 20 27 2c 20 73 cription, ' ', s 14470 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6c 69 62 izeof(pInfo->lib 14480 72 61 72 79 44 65 73 63 72 69 70 74 69 6f 6e 29 raryDescription) 14490 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f );..memcpy(pInfo 144a0 2d 3e 6c 69 62 72 61 72 79 44 65 73 63 72 69 70 ->libraryDescrip 144b0 74 69 6f 6e 2c 20 6c 69 62 72 61 72 79 44 65 73 tion, libraryDes 144c0 63 72 69 70 74 69 6f 6e 2c 20 73 69 7a 65 6f 66 cription, sizeof 144d0 28 6c 69 62 72 61 72 79 44 65 73 63 72 69 70 74 (libraryDescript 144e0 69 6f 6e 29 20 2d 20 31 29 3b 0a 0a 09 70 49 6e ion) - 1);...pIn 144f0 66 6f 2d 3e 6c 69 62 72 61 72 79 56 65 72 73 69 fo->libraryVersi 14500 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 61 63 6b on.major = (cack 14510 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 20 ey_getversion() 14520 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a 09 >> 16) & 0xff;.. 14530 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 56 65 pInfo->libraryVe 14540 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 63 rsion.minor = (c 14550 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f 6e ackey_getversion 14560 28 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b () >> 8) & 0xff; 14570 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 14580 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 14590 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", 145a0 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 CKR_OK);...retur 145b0 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a n(CKR_OK);.}../* 145c0 0a 20 2a 20 50 72 6f 63 65 73 73 20 6c 69 73 74 . * Process list 145d0 20 6f 66 20 72 65 61 64 65 72 73 2c 20 61 6e 64 of readers, and 145e0 20 63 72 65 61 74 65 20 6d 61 70 70 69 6e 67 20 create mapping 145f0 62 65 74 77 65 65 6e 20 72 65 61 64 65 72 20 6e between reader n 14600 61 6d 65 20 61 6e 64 20 73 6c 6f 74 20 49 44 0a ame and slot ID. 14610 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 */.CK_DEFINE_FU 14620 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 14630 47 65 74 53 6c 6f 74 4c 69 73 74 29 28 43 4b 5f GetSlotList)(CK_ 14640 42 42 4f 4f 4c 20 74 6f 6b 65 6e 50 72 65 73 65 BBOOL tokenPrese 14650 6e 74 2c 20 43 4b 5f 53 4c 4f 54 5f 49 44 5f 50 nt, CK_SLOT_ID_P 14660 54 52 20 70 53 6c 6f 74 4c 69 73 74 2c 20 43 4b TR pSlotList, CK 14670 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 43 6f _ULONG_PTR pulCo 14680 75 6e 74 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 unt) {..int mute 14690 78 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 70 x_retval;..int p 146a0 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 3b csc_connect_ret; 146b0 0a 09 43 4b 5f 55 4c 4f 4e 47 20 63 6f 75 6e 74 ..CK_ULONG count 146c0 2c 20 73 6c 6f 74 5f 63 6f 75 6e 74 20 3d 20 30 , slot_count = 0 146d0 2c 20 63 75 72 72 73 6c 6f 74 3b 0a 09 63 68 61 , currslot;..cha 146e0 72 20 2a 70 63 73 63 5f 72 65 61 64 65 72 73 2c r *pcsc_readers, 146f0 20 2a 70 63 73 63 5f 72 65 61 64 65 72 73 5f 73 *pcsc_readers_s 14700 2c 20 2a 70 63 73 63 5f 72 65 61 64 65 72 73 5f , *pcsc_readers_ 14710 65 3b 0a 09 44 57 4f 52 44 20 70 63 73 63 5f 72 e;..DWORD pcsc_r 14720 65 61 64 65 72 73 5f 6c 65 6e 3b 0a 09 4c 4f 4e eaders_len;..LON 14730 47 20 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 G scard_listread 14740 65 72 73 5f 72 65 74 3b 0a 09 73 69 7a 65 5f 74 ers_ret;..size_t 14750 20 63 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e curr_reader_len 14760 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 14770 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 14780 22 29 3b 0a 0a 09 69 66 20 28 70 75 6c 43 6f 75 ");...if (pulCou 14790 6e 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 nt == NULL) {... 147a0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 147b0 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 43 NTF("Error. pulC 147c0 6f 75 6e 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b ount is NULL."); 147d0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 ....return(CKR_A 147e0 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 RGUMENTS_BAD);.. 147f0 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f }...if (!cackey_ 14800 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 14810 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 14820 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 14830 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 14840 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 14850 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 14860 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 14870 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 14880 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b ackey_mutex_lock 14890 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 148a0 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 148b0 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 148c0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 148d0 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 F("Error. Locki 148e0 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 148f0 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 14900 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 14910 09 2f 2a 20 43 6c 65 61 72 20 6c 69 73 74 20 6f ./* Clear list o 14920 66 20 73 6c 6f 74 73 20 2a 2f 0a 09 69 66 20 28 f slots */..if ( 14930 70 53 6c 6f 74 4c 69 73 74 29 20 7b 0a 09 09 43 pSlotList) {...C 14940 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 14950 54 46 28 22 50 75 72 67 69 6e 67 20 61 6c 6c 20 TF("Purging all 14960 73 6c 6f 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e slot information 14970 2e 22 29 3b 0a 0a 09 09 2f 2a 20 4f 6e 6c 79 20 .");..../* Only 14980 75 70 64 61 74 65 20 74 68 65 20 6c 69 73 74 20 update the list 14990 6f 66 20 73 6c 6f 74 73 20 69 66 20 77 65 20 61 of slots if we a 149a0 72 65 20 61 63 74 75 61 6c 6c 79 20 62 65 69 6e re actually bein 149b0 67 20 73 75 70 70 6c 79 20 74 68 65 20 73 6c 6f g supply the slo 149c0 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f t information */ 149d0 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f ...cackey_slots_ 149e0 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 29 disconnect_all() 149f0 3b 0a 0a 09 09 66 6f 72 20 28 63 75 72 72 73 6c ;....for (currsl 14a00 6f 74 20 3d 20 30 3b 20 63 75 72 72 73 6c 6f 74 ot = 0; currslot 14a10 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 < (sizeof(cacke 14a20 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f y_slots) / sizeo 14a30 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 f(cackey_slots[0 14a40 5d 29 29 3b 20 63 75 72 72 73 6c 6f 74 2b 2b 29 ])); currslot++) 14a50 20 7b 0a 09 09 09 69 66 20 28 63 61 63 6b 65 79 {....if (cackey 14a60 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d _slots[currslot] 14a70 2e 70 63 73 63 5f 72 65 61 64 65 72 29 20 7b 0a .pcsc_reader) {. 14a80 09 09 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f ....free(cackey_ 14a90 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e slots[currslot]. 14aa0 70 63 73 63 5f 72 65 61 64 65 72 29 3b 0a 0a 09 pcsc_reader);... 14ab0 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ...cackey_slots[ 14ac0 63 75 72 72 73 6c 6f 74 5d 2e 70 63 73 63 5f 72 currslot].pcsc_r 14ad0 65 61 64 65 72 20 3d 20 4e 55 4c 4c 3b 0a 09 09 eader = NULL;... 14ae0 09 7d 0a 0a 09 09 09 69 66 20 28 63 61 63 6b 65 .}.....if (cacke 14af0 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 y_slots[currslot 14b00 5d 2e 6c 61 62 65 6c 29 20 7b 0a 09 09 09 09 66 ].label) {.....f 14b10 72 65 65 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 ree(cackey_slots 14b20 5b 63 75 72 72 73 6c 6f 74 5d 2e 6c 61 62 65 6c [currslot].label 14b30 29 3b 0a 0a 09 09 09 09 63 61 63 6b 65 79 5f 73 );......cackey_s 14b40 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 6c lots[currslot].l 14b50 61 62 65 6c 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 abel = NULL;.... 14b60 7d 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f }.....cackey_slo 14b70 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 61 63 74 ts[currslot].act 14b80 69 76 65 20 3d 20 30 3b 0a 09 09 7d 0a 09 7d 0a ive = 0;...}..}. 14b90 0a 09 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 6c ../* Determine l 14ba0 69 73 74 20 6f 66 20 72 65 61 64 65 72 73 20 2a ist of readers * 14bb0 2f 0a 09 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f /..pcsc_connect_ 14bc0 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 70 63 73 ret = cackey_pcs 14bd0 63 5f 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 69 66 c_connect();..if 14be0 20 28 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 (pcsc_connect_r 14bf0 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 et != CACKEY_PCS 14c00 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b C_S_OK) {...CACK 14c10 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 14c20 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 50 "Connection to P 14c30 43 2f 53 43 20 66 61 69 6c 65 64 2c 20 61 73 73 C/SC failed, ass 14c40 75 6d 69 6e 67 20 6e 6f 20 73 6c 6f 74 73 22 29 uming no slots") 14c50 3b 0a 0a 09 09 73 6c 6f 74 5f 63 6f 75 6e 74 20 ;....slot_count 14c60 3d 20 30 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 = 0;..} else {.. 14c70 09 70 63 73 63 5f 72 65 61 64 65 72 73 5f 6c 65 .pcsc_readers_le 14c80 6e 20 3d 20 30 3b 0a 0a 09 09 73 63 61 72 64 5f n = 0;....scard_ 14c90 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 20 listreaders_ret 14ca0 3d 20 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 = SCardListReade 14cb0 72 73 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 5f rs(*cackey_pcsc_ 14cc0 68 61 6e 64 6c 65 2c 20 4e 55 4c 4c 2c 20 4e 55 handle, NULL, NU 14cd0 4c 4c 2c 20 26 70 63 73 63 5f 72 65 61 64 65 72 LL, &pcsc_reader 14ce0 73 5f 6c 65 6e 29 3b 0a 09 09 69 66 20 28 73 63 s_len);...if (sc 14cf0 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f ard_listreaders_ 14d00 72 65 74 20 3d 3d 20 53 43 41 52 44 5f 53 5f 53 ret == SCARD_S_S 14d10 55 43 43 45 53 53 20 26 26 20 70 63 73 63 5f 72 UCCESS && pcsc_r 14d20 65 61 64 65 72 73 5f 6c 65 6e 20 21 3d 20 30 29 eaders_len != 0) 14d30 20 7b 0a 09 09 09 70 63 73 63 5f 72 65 61 64 65 {....pcsc_reade 14d40 72 73 20 3d 20 6d 61 6c 6c 6f 63 28 70 63 73 63 rs = malloc(pcsc 14d50 5f 72 65 61 64 65 72 73 5f 6c 65 6e 29 3b 0a 09 _readers_len);.. 14d60 09 09 70 63 73 63 5f 72 65 61 64 65 72 73 5f 73 ..pcsc_readers_s 14d70 20 3d 20 70 63 73 63 5f 72 65 61 64 65 72 73 3b = pcsc_readers; 14d80 0a 0a 09 09 09 73 63 61 72 64 5f 6c 69 73 74 72 .....scard_listr 14d90 65 61 64 65 72 73 5f 72 65 74 20 3d 20 53 43 61 eaders_ret = SCa 14da0 72 64 4c 69 73 74 52 65 61 64 65 72 73 28 2a 63 rdListReaders(*c 14db0 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c ackey_pcsc_handl 14dc0 65 2c 20 4e 55 4c 4c 2c 20 70 63 73 63 5f 72 65 e, NULL, pcsc_re 14dd0 61 64 65 72 73 2c 20 26 70 63 73 63 5f 72 65 61 aders, &pcsc_rea 14de0 64 65 72 73 5f 6c 65 6e 29 3b 0a 09 09 09 69 66 ders_len);....if 14df0 20 28 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 (scard_listread 14e00 65 72 73 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 ers_ret == SCARD 14e10 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 _S_SUCCESS) {... 14e20 09 09 70 63 73 63 5f 72 65 61 64 65 72 73 5f 65 ..pcsc_readers_e 14e30 20 3d 20 70 63 73 63 5f 72 65 61 64 65 72 73 20 = pcsc_readers 14e40 2b 20 70 63 73 63 5f 72 65 61 64 65 72 73 5f 6c + pcsc_readers_l 14e50 65 6e 3b 0a 0a 09 09 09 09 2f 2a 20 53 74 61 72 en;....../* Star 14e60 74 20 77 69 74 68 20 53 6c 6f 74 20 49 44 20 31 t with Slot ID 1 14e70 2c 20 74 6f 20 61 76 6f 69 64 20 61 20 62 75 67 , to avoid a bug 14e80 20 69 6e 20 47 44 4d 20 6f 6e 20 52 48 45 4c 20 in GDM on RHEL 14e90 2a 2f 0a 09 09 09 09 2f 2a 20 42 75 67 20 35 39 */...../* Bug 59 14ea0 34 39 31 31 3a 20 68 74 74 70 73 3a 2f 2f 62 75 4911: https://bu 14eb0 67 7a 69 6c 6c 61 2e 72 65 64 68 61 74 2e 63 6f gzilla.redhat.co 14ec0 6d 2f 73 68 6f 77 5f 62 75 67 2e 63 67 69 3f 69 m/show_bug.cgi?i 14ed0 64 3d 35 39 34 39 31 31 20 2a 2f 0a 09 09 09 09 d=594911 */..... 14ee0 63 75 72 72 73 6c 6f 74 20 3d 20 31 3b 0a 09 09 currslot = 1;... 14ef0 09 09 77 68 69 6c 65 20 28 70 63 73 63 5f 72 65 ..while (pcsc_re 14f00 61 64 65 72 73 20 3c 20 70 63 73 63 5f 72 65 61 aders < pcsc_rea 14f10 64 65 72 73 5f 65 29 20 7b 0a 09 09 09 09 09 63 ders_e) {......c 14f20 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e 20 3d urr_reader_len = 14f30 20 73 74 72 6c 65 6e 28 70 63 73 63 5f 72 65 61 strlen(pcsc_rea 14f40 64 65 72 73 29 3b 0a 0a 09 09 09 09 09 69 66 20 ders);.......if 14f50 28 28 70 63 73 63 5f 72 65 61 64 65 72 73 20 2b ((pcsc_readers + 14f60 20 63 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e curr_reader_len 14f70 29 20 3e 20 70 63 73 63 5f 72 65 61 64 65 72 73 ) > pcsc_readers 14f80 5f 65 29 20 7b 0a 09 09 09 09 09 09 62 72 65 61 _e) {.......brea 14f90 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 k;......}....... 14fa0 69 66 20 28 63 75 72 72 5f 72 65 61 64 65 72 5f if (curr_reader_ 14fb0 6c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 09 09 len == 0) {..... 14fc0 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a ..break;......}. 14fd0 0a 09 09 09 09 09 69 66 20 28 63 75 72 72 73 6c ......if (currsl 14fe0 6f 74 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 ot >= (sizeof(ca 14ff0 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 ckey_slots) / si 15000 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 15010 73 5b 30 5d 29 29 29 20 7b 0a 09 09 09 09 09 09 s[0]))) {....... 15020 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 15030 4e 54 46 28 22 46 6f 75 6e 64 20 6d 6f 72 65 20 NTF("Found more 15040 72 65 61 64 65 72 73 20 74 68 61 6e 20 73 6c 6f readers than slo 15050 74 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 ts are available 15060 21 22 29 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 !");........brea 15070 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 k;......}....... 15080 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 15090 4e 54 46 28 22 46 6f 75 6e 64 20 72 65 61 64 65 NTF("Found reade 150a0 72 3a 20 25 73 22 2c 20 70 63 73 63 5f 72 65 61 r: %s", pcsc_rea 150b0 64 65 72 73 29 3b 0a 0a 09 09 09 09 09 2f 2a 20 ders);......./* 150c0 4f 6e 6c 79 20 75 70 64 61 74 65 20 74 68 65 20 Only update the 150d0 6c 69 73 74 20 6f 66 20 73 6c 6f 74 73 20 69 66 list of slots if 150e0 20 77 65 20 61 72 65 20 61 63 74 75 61 6c 6c 79 we are actually 150f0 20 62 65 69 6e 67 20 61 73 6b 65 64 20 73 75 70 being asked sup 15100 70 6c 79 20 74 68 65 20 73 6c 6f 74 20 69 6e 66 ply the slot inf 15110 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 09 09 09 09 ormation */..... 15120 09 69 66 20 28 70 53 6c 6f 74 4c 69 73 74 29 20 .if (pSlotList) 15130 7b 0a 09 09 09 09 09 09 63 61 63 6b 65 79 5f 73 {.......cackey_s 15140 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 61 lots[currslot].a 15150 63 74 69 76 65 20 3d 20 31 3b 0a 09 09 09 09 09 ctive = 1;...... 15160 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 .cackey_slots[cu 15170 72 72 73 6c 6f 74 5d 2e 70 63 73 63 5f 72 65 61 rrslot].pcsc_rea 15180 64 65 72 20 3d 20 73 74 72 64 75 70 28 70 63 73 der = strdup(pcs 15190 63 5f 72 65 61 64 65 72 73 29 3b 0a 09 09 09 09 c_readers);..... 151a0 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 ..cackey_slots[c 151b0 75 72 72 73 6c 6f 74 5d 2e 70 63 73 63 5f 63 61 urrslot].pcsc_ca 151c0 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 rd_connected = 0 151d0 3b 0a 09 09 09 09 09 09 63 61 63 6b 65 79 5f 73 ;.......cackey_s 151e0 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 74 lots[currslot].t 151f0 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 ransaction_depth 15200 20 3d 20 30 3b 0a 09 09 09 09 09 09 63 61 63 6b = 0;.......cack 15210 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f ey_slots[currslo 15220 74 5d 2e 73 6c 6f 74 5f 72 65 73 65 74 20 3d 20 t].slot_reset = 15230 31 3b 0a 09 09 09 09 09 09 63 61 63 6b 65 79 5f 1;.......cackey_ 15240 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e slots[currslot]. 15250 74 6f 6b 65 6e 5f 66 6c 61 67 73 20 3d 20 43 4b token_flags = CK 15260 46 5f 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 F_LOGIN_REQUIRED 15270 3b 0a 09 09 09 09 09 09 63 61 63 6b 65 79 5f 73 ;.......cackey_s 15280 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 6c lots[currslot].l 15290 61 62 65 6c 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 abel = NULL;.... 152a0 09 09 7d 0a 09 09 09 09 09 63 75 72 72 73 6c 6f ..}......currslo 152b0 74 2b 2b 3b 0a 0a 09 09 09 09 09 70 63 73 63 5f t++;.......pcsc_ 152c0 72 65 61 64 65 72 73 20 2b 3d 20 63 75 72 72 5f readers += curr_ 152d0 72 65 61 64 65 72 5f 6c 65 6e 20 2b 20 31 3b 0a reader_len + 1;. 152e0 09 09 09 09 7d 0a 0a 09 09 09 09 2f 2a 20 53 74 ....}....../* St 152f0 61 72 74 20 77 69 74 68 20 53 6c 6f 74 20 49 44 art with Slot ID 15300 20 31 2c 20 74 6f 20 61 76 6f 69 64 20 61 20 62 1, to avoid a b 15310 75 67 20 69 6e 20 47 44 4d 20 6f 6e 20 52 48 45 ug in GDM on RHE 15320 4c 20 2a 2f 0a 09 09 09 09 2f 2a 20 42 75 67 20 L */...../* Bug 15330 35 39 34 39 31 31 3a 20 68 74 74 70 73 3a 2f 2f 594911: https:// 15340 62 75 67 7a 69 6c 6c 61 2e 72 65 64 68 61 74 2e bugzilla.redhat. 15350 63 6f 6d 2f 73 68 6f 77 5f 62 75 67 2e 63 67 69 com/show_bug.cgi 15360 3f 69 64 3d 35 39 34 39 31 31 20 2a 2f 0a 09 09 ?id=594911 */... 15370 09 09 69 66 20 28 63 75 72 72 73 6c 6f 74 20 3e ..if (currslot > 15380 20 31 29 20 7b 0a 09 09 09 09 09 2f 2a 20 53 74 1) {....../* St 15390 61 72 74 20 77 69 74 68 20 53 6c 6f 74 20 49 44 art with Slot ID 153a0 20 31 2c 20 74 6f 20 61 76 6f 69 64 20 61 20 62 1, to avoid a b 153b0 75 67 20 69 6e 20 47 44 4d 20 6f 6e 20 52 48 45 ug in GDM on RHE 153c0 4c 20 2a 2f 0a 09 09 09 09 09 2f 2a 20 42 75 67 L */....../* Bug 153d0 20 35 39 34 39 31 31 3a 20 68 74 74 70 73 3a 2f 594911: https:/ 153e0 2f 62 75 67 7a 69 6c 6c 61 2e 72 65 64 68 61 74 /bugzilla.redhat 153f0 2e 63 6f 6d 2f 73 68 6f 77 5f 62 75 67 2e 63 67 .com/show_bug.cg 15400 69 3f 69 64 3d 35 39 34 39 31 31 20 2a 2f 0a 09 i?id=594911 */.. 15410 09 09 09 09 73 6c 6f 74 5f 63 6f 75 6e 74 20 3d ....slot_count = 15420 20 63 75 72 72 73 6c 6f 74 20 2d 20 31 3b 0a 09 currslot - 1;.. 15430 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65 20 7b ...}....} else { 15440 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 15450 47 5f 50 52 49 4e 54 46 28 22 53 65 63 6f 6e 64 G_PRINTF("Second 15460 20 63 61 6c 6c 20 74 6f 20 53 43 61 72 64 4c 69 call to SCardLi 15470 73 74 52 65 61 64 65 72 73 20 66 61 69 6c 65 64 stReaders failed 15480 2c 20 72 65 74 75 72 6e 20 25 73 2f 25 6c 69 22 , return %s/%li" 15490 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F 154a0 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f UNC_SCARDERR_TO_ 154b0 53 54 52 28 73 63 61 72 64 5f 6c 69 73 74 72 65 STR(scard_listre 154c0 61 64 65 72 73 5f 72 65 74 29 2c 20 28 6c 6f 6e aders_ret), (lon 154d0 67 29 20 73 63 61 72 64 5f 6c 69 73 74 72 65 61 g) scard_listrea 154e0 64 65 72 73 5f 72 65 74 29 3b 0a 09 09 09 7d 0a ders_ret);....}. 154f0 0a 09 09 09 66 72 65 65 28 70 63 73 63 5f 72 65 ....free(pcsc_re 15500 61 64 65 72 73 5f 73 29 3b 0a 09 09 7d 20 65 6c aders_s);...} el 15510 73 65 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 se {....CACKEY_D 15520 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 69 72 EBUG_PRINTF("Fir 15530 73 74 20 63 61 6c 6c 20 74 6f 20 53 43 61 72 64 st call to SCard 15540 4c 69 73 74 52 65 61 64 65 72 73 20 66 61 69 6c ListReaders fail 15550 65 64 2c 20 72 65 74 75 72 6e 20 25 73 2f 25 6c ed, return %s/%l 15560 69 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 i", CACKEY_DEBUG 15570 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 _FUNC_SCARDERR_T 15580 4f 5f 53 54 52 28 73 63 61 72 64 5f 6c 69 73 74 O_STR(scard_list 15590 72 65 61 64 65 72 73 5f 72 65 74 29 2c 20 28 6c readers_ret), (l 155a0 6f 6e 67 29 20 73 63 61 72 64 5f 6c 69 73 74 72 ong) scard_listr 155b0 65 61 64 65 72 73 5f 72 65 74 29 3b 0a 09 09 7d eaders_ret);...} 155c0 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 155d0 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 155e0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 155f0 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 15600 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 15610 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 15620 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 15630 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 . Unlocking fai 15640 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 15650 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 15660 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 ROR);..}...if (p 15670 53 6c 6f 74 4c 69 73 74 20 3d 3d 20 4e 55 4c 4c SlotList == NULL 15680 29 20 7b 0a 09 09 2a 70 75 6c 43 6f 75 6e 74 20 ) {...*pulCount 15690 3d 20 73 6c 6f 74 5f 63 6f 75 6e 74 3b 0a 0a 09 = slot_count;... 156a0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 156b0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 156c0 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK 156d0 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e R_OK);....return 156e0 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 63 (CKR_OK);..}...c 156f0 6f 75 6e 74 20 3d 20 2a 70 75 6c 43 6f 75 6e 74 ount = *pulCount 15700 3b 0a 09 69 66 20 28 63 6f 75 6e 74 20 3c 20 73 ;..if (count < s 15710 6c 6f 74 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 43 lot_count) {...C 15720 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 15730 54 46 28 22 45 72 72 6f 72 2e 20 55 73 65 72 20 TF("Error. User 15740 61 6c 6c 6f 63 61 74 65 64 20 25 6c 75 20 65 6e allocated %lu en 15750 74 72 69 65 73 2c 20 62 75 74 20 77 65 20 68 61 tries, but we ha 15760 76 65 20 25 6c 75 20 65 6e 74 72 69 65 73 2e 22 ve %lu entries." 15770 2c 20 63 6f 75 6e 74 2c 20 73 6c 6f 74 5f 63 6f , count, slot_co 15780 75 6e 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 unt);....return( 15790 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 CKR_BUFFER_TOO_S 157a0 4d 41 4c 4c 29 3b 09 0a 09 7d 0a 0a 09 66 6f 72 MALL);...}...for 157b0 20 28 63 75 72 72 73 6c 6f 74 20 3d 20 30 3b 20 (currslot = 0; 157c0 63 75 72 72 73 6c 6f 74 20 3c 20 73 6c 6f 74 5f currslot < slot_ 157d0 63 6f 75 6e 74 3b 20 63 75 72 72 73 6c 6f 74 2b count; currslot+ 157e0 2b 29 20 7b 0a 09 09 2f 2a 20 53 74 61 72 74 20 +) {.../* Start 157f0 77 69 74 68 20 53 6c 6f 74 20 49 44 20 31 2c 20 with Slot ID 1, 15800 74 6f 20 61 76 6f 69 64 20 61 20 62 75 67 20 69 to avoid a bug i 15810 6e 20 47 44 4d 20 6f 6e 20 52 48 45 4c 20 2a 2f n GDM on RHEL */ 15820 0a 09 09 2f 2a 20 42 75 67 20 35 39 34 39 31 31 .../* Bug 594911 15830 3a 20 68 74 74 70 73 3a 2f 2f 62 75 67 7a 69 6c : https://bugzil 15840 6c 61 2e 72 65 64 68 61 74 2e 63 6f 6d 2f 73 68 la.redhat.com/sh 15850 6f 77 5f 62 75 67 2e 63 67 69 3f 69 64 3d 35 39 ow_bug.cgi?id=59 15860 34 39 31 31 20 2a 2f 0a 09 09 70 53 6c 6f 74 4c 4911 */...pSlotL 15870 69 73 74 5b 63 75 72 72 73 6c 6f 74 5d 20 3d 20 ist[currslot] = 15880 63 75 72 72 73 6c 6f 74 20 2b 20 31 3b 0a 09 7d currslot + 1;..} 15890 0a 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 73 ...*pulCount = s 158a0 6c 6f 74 5f 63 6f 75 6e 74 3b 0a 0a 09 43 41 43 lot_count;...CAC 158b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 158c0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 158d0 4f 4b 20 28 25 69 29 2e 20 20 46 6f 75 6e 64 20 OK (%i). Found 158e0 25 6c 75 20 72 65 61 64 65 72 73 2e 22 2c 20 43 %lu readers.", C 158f0 4b 52 5f 4f 4b 2c 20 28 75 6e 73 69 67 6e 65 64 KR_OK, (unsigned 15900 20 6c 6f 6e 67 29 20 73 6c 6f 74 5f 63 6f 75 6e long) slot_coun 15910 74 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 t);...return(CKR 15920 5f 4f 4b 29 3b 0a 0a 09 74 6f 6b 65 6e 50 72 65 _OK);...tokenPre 15930 73 65 6e 74 20 3d 20 74 6f 6b 65 6e 50 72 65 73 sent = tokenPres 15940 65 6e 74 3b 20 2f 2a 20 53 75 70 72 65 73 73 20 ent; /* Supress 15950 75 6e 75 73 65 64 20 76 61 72 69 61 62 6c 65 20 unused variable 15960 77 61 72 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 43 4b warning */.}..CK 15970 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 15980 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 53 6c 6f (CK_RV, C_GetSlo 15990 74 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49 tInfo)(CK_SLOT_I 159a0 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 53 4c 4f D slotID, CK_SLO 159b0 54 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f T_INFO_PTR pInfo 159c0 29 20 7b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 ) {..static CK_U 159d0 54 46 38 43 48 41 52 20 73 6c 6f 74 44 65 73 63 TF8CHAR slotDesc 159e0 72 69 70 74 69 6f 6e 5b 5d 20 3d 20 22 43 41 43 ription[] = "CAC 159f0 4b 65 79 20 53 6c 6f 74 22 3b 0a 09 69 6e 74 20 Key Slot";..int 15a00 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 09 69 mutex_retval;..i 15a10 6e 74 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 nt bytes_to_copy 15a20 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 15a30 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 15a40 22 29 3b 0a 0a 09 69 66 20 28 70 49 6e 66 6f 20 ");...if (pInfo 15a50 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 15a60 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 15a70 28 22 45 72 72 6f 72 2e 20 70 49 6e 66 6f 20 69 ("Error. pInfo i 15a80 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 s NULL.");....re 15a90 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 15aa0 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if 15ab0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 15ac0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 15ad0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15ae0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 15af0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 15b00 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 15b10 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 15b20 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6c ED);..}...if (sl 15b30 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 otID < 0 || slot 15b40 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 ID >= (sizeof(ca 15b50 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 ckey_slots) / si 15b60 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 15b70 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b s[0]))) {...CACK 15b80 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 15b90 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 "Error. Invalid 15ba0 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 slot requested ( 15bb0 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 %lu), outside of 15bc0 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 valid range", s 15bd0 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 lotID);....retur 15be0 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e n(CKR_SLOT_ID_IN 15bf0 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 VALID);..}...mut 15c00 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 15c10 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 ey_mutex_lock(ca 15c20 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 15c30 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 15c40 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 15c50 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15c60 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 Error. Locking 15c70 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 15c80 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 15c90 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 _ERROR);..}...if 15ca0 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 (cackey_slots[s 15cb0 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d lotID].active == 15cc0 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 15cd0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 15ce0 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 or. Invalid slot 15cf0 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 requested (%lu) 15d00 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65 , slot not curre 15d10 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20 73 6c ntly active", sl 15d20 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b 65 79 otID);....cackey 15d30 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 15d40 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 15d50 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f ..return(CKR_SLO 15d60 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 T_ID_INVALID);.. 15d70 7d 0a 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 }...pInfo->flags 15d80 20 3d 20 43 4b 46 5f 52 45 4d 4f 56 41 42 4c 45 = CKF_REMOVABLE 15d90 5f 44 45 56 49 43 45 20 7c 20 43 4b 46 5f 48 57 _DEVICE | CKF_HW 15da0 5f 53 4c 4f 54 3b 0a 0a 09 69 66 20 28 63 61 63 _SLOT;...if (cac 15db0 6b 65 79 5f 74 6f 6b 65 6e 5f 70 72 65 73 65 6e key_token_presen 15dc0 74 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b t(&cackey_slots[ 15dd0 73 6c 6f 74 49 44 5d 29 20 3d 3d 20 43 41 43 4b slotID]) == CACK 15de0 45 59 5f 50 43 53 43 5f 53 5f 54 4f 4b 45 4e 50 EY_PCSC_S_TOKENP 15df0 52 45 53 45 4e 54 29 20 7b 0a 09 09 70 49 6e 66 RESENT) {...pInf 15e00 6f 2d 3e 66 6c 61 67 73 20 7c 3d 20 43 4b 46 5f o->flags |= CKF_ 15e10 54 4f 4b 45 4e 5f 50 52 45 53 45 4e 54 3b 0a 09 TOKEN_PRESENT;.. 15e20 7d 0a 0a 09 62 79 74 65 73 5f 74 6f 5f 63 6f 70 }...bytes_to_cop 15e30 79 20 3d 20 73 74 72 6c 65 6e 28 63 61 63 6b 65 y = strlen(cacke 15e40 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e y_slots[slotID]. 15e50 70 63 73 63 5f 72 65 61 64 65 72 29 3b 0a 09 69 pcsc_reader);..i 15e60 66 20 28 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d f (sizeof(pInfo- 15e70 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 >manufacturerID) 15e80 20 3c 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 < bytes_to_copy 15e90 29 20 7b 0a 09 09 62 79 74 65 73 5f 74 6f 5f 63 ) {...bytes_to_c 15ea0 6f 70 79 20 3d 20 73 69 7a 65 6f 66 28 70 49 6e opy = sizeof(pIn 15eb0 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 fo->manufacturer 15ec0 49 44 29 3b 0a 09 7d 0a 09 6d 65 6d 63 70 79 28 ID);..}..memcpy( 15ed0 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 pInfo->manufactu 15ee0 72 65 72 49 44 2c 20 63 61 63 6b 65 79 5f 73 6c rerID, cackey_sl 15ef0 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 70 63 73 63 ots[slotID].pcsc 15f00 5f 72 65 61 64 65 72 2c 20 62 79 74 65 73 5f 74 _reader, bytes_t 15f10 6f 5f 63 6f 70 79 29 3b 0a 0a 09 6d 75 74 65 78 o_copy);...mutex 15f20 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 15f30 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 15f40 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 15f50 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 15f60 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 15f70 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15f80 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e Error. Unlockin 15f90 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 15fa0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 15fb0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 15fc0 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 73 6c memset(pInfo->sl 15fd0 6f 74 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 27 otDescription, ' 15fe0 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f ', sizeof(pInfo 15ff0 2d 3e 73 6c 6f 74 44 65 73 63 72 69 70 74 69 6f ->slotDescriptio 16000 6e 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e n));..memcpy(pIn 16010 66 6f 2d 3e 73 6c 6f 74 44 65 73 63 72 69 70 74 fo->slotDescript 16020 69 6f 6e 2c 20 73 6c 6f 74 44 65 73 63 72 69 70 ion, slotDescrip 16030 74 69 6f 6e 2c 20 73 69 7a 65 6f 66 28 73 6c 6f tion, sizeof(slo 16040 74 44 65 73 63 72 69 70 74 69 6f 6e 29 20 2d 20 tDescription) - 16050 31 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 1);...memset(pIn 16060 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 fo->manufacturer 16070 49 44 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 ID, ' ', sizeof( 16080 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 pInfo->manufactu 16090 72 65 72 49 44 29 29 3b 0a 0a 09 70 49 6e 66 6f rerID));...pInfo 160a0 2d 3e 68 61 72 64 77 61 72 65 56 65 72 73 69 6f ->hardwareVersio 160b0 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 61 63 6b 65 n.major = (cacke 160c0 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 20 3e y_getversion() > 160d0 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a 09 70 > 16) & 0xff;..p 160e0 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 65 56 65 Info->hardwareVe 160f0 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 63 rsion.minor = (c 16100 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f 6e ackey_getversion 16110 28 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b () >> 8) & 0xff; 16120 0a 0a 09 70 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 ...pInfo->firmwa 16130 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 reVersion.major 16140 3d 20 30 78 30 30 3b 0a 09 70 49 6e 66 6f 2d 3e = 0x00;..pInfo-> 16150 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f 6e 2e firmwareVersion. 16160 6d 69 6e 6f 72 20 3d 20 30 78 30 30 3b 0a 0a 09 minor = 0x00;... 16170 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 16180 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 16190 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR 161a0 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C 161b0 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 KR_OK);.}..CK_DE 161c0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 161d0 5f 52 56 2c 20 43 5f 47 65 74 54 6f 6b 65 6e 49 _RV, C_GetTokenI 161e0 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 nfo)(CK_SLOT_ID 161f0 73 6c 6f 74 49 44 2c 20 43 4b 5f 54 4f 4b 45 4e slotID, CK_TOKEN 16200 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 _INFO_PTR pInfo) 16210 20 7b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 54 {..static CK_UT 16220 46 38 43 48 41 52 20 6d 61 6e 75 66 61 63 74 75 F8CHAR manufactu 16230 72 65 72 49 44 5b 5d 20 3d 20 22 55 2e 53 2e 20 rerID[] = "U.S. 16240 47 6f 76 65 72 6e 6d 65 6e 74 22 3b 0a 09 73 74 Government";..st 16250 61 74 69 63 20 43 4b 5f 55 54 46 38 43 48 41 52 atic CK_UTF8CHAR 16260 20 64 65 66 61 75 6c 74 4c 61 62 65 6c 5b 5d 20 defaultLabel[] 16270 3d 20 22 55 6e 6b 6e 6f 77 6e 20 54 6f 6b 65 6e = "Unknown Token 16280 22 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 54 ";..static CK_UT 16290 46 38 43 48 41 52 20 6d 6f 64 65 6c 5b 5d 20 3d F8CHAR model[] = 162a0 20 22 43 41 43 20 54 6f 6b 65 6e 22 3b 0a 09 73 "CAC Token";..s 162b0 74 72 75 63 74 20 63 61 63 6b 65 79 5f 70 63 73 truct cackey_pcs 162c0 63 5f 69 64 65 6e 74 69 74 79 20 2a 70 63 73 63 c_identity *pcsc 162d0 5f 69 64 65 6e 74 69 74 69 65 73 3b 0a 09 75 6e _identities;..un 162e0 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6e 75 6d 5f signed long num_ 162f0 63 65 72 74 73 3b 0a 09 73 73 69 7a 65 5f 74 20 certs;..ssize_t 16300 6c 61 62 65 6c 5f 72 65 74 3b 0a 09 69 6e 74 20 label_ret;..int 16310 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 09 69 mutex_retval;..i 16320 6e 74 20 75 73 65 5f 64 65 66 61 75 6c 74 5f 6c nt use_default_l 16330 61 62 65 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 abel;...CACKEY_D 16340 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 16350 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 49 led.");...if (pI 16360 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 nfo == NULL) {.. 16370 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 16380 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 49 6e INTF("Error. pIn 16390 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a fo is NULL.");.. 163a0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG 163b0 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a UMENTS_BAD);..}. 163c0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 163d0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 163e0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 163f0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 16400 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 16410 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 16420 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 16430 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 16440 20 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 (slotID < 0 || 16450 73 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f slotID >= (sizeo 16460 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 f(cackey_slots) 16470 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ 16480 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 slots[0]))) {... 16490 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 164a0 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 NTF("Error. Inva 164b0 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 lid slot request 164c0 65 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 ed (%lu), outsid 164d0 65 20 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 e of valid range 164e0 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 ", slotID);....r 164f0 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 eturn(CKR_SLOT_I 16500 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a D_INVALID);..}.. 16510 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 16520 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 cackey_mutex_loc 16530 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 16540 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 16550 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 16560 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 16570 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b TF("Error. Lock 16580 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 16590 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 165a0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 165b0 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f ..if (cackey_slo 165c0 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 ts[slotID].activ 165d0 65 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b e == 0) {...CACK 165e0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 165f0 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 "Error. Invalid 16600 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 slot requested ( 16610 25 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 %lu), slot not c 16620 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 urrently active" 16630 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 , slotID);....ca 16640 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 16650 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 16660 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 16670 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 _SLOT_ID_INVALID 16680 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b );..}...if (cack 16690 65 79 5f 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 ey_token_present 166a0 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 (&cackey_slots[s 166b0 6c 6f 74 49 44 5d 29 20 21 3d 20 43 41 43 4b 45 lotID]) != CACKE 166c0 59 5f 50 43 53 43 5f 53 5f 54 4f 4b 45 4e 50 52 Y_PCSC_S_TOKENPR 166d0 45 53 45 4e 54 29 20 7b 0a 09 09 43 41 43 4b 45 ESENT) {...CACKE 166e0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 166f0 4e 6f 20 74 6f 6b 65 6e 20 69 73 20 70 72 65 73 No token is pres 16700 65 6e 74 20 69 6e 20 73 6c 6f 74 49 44 20 3d 20 ent in slotID = 16710 25 6c 75 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a %lu", slotID);.. 16720 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 16730 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 16740 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72 6e lock);....return 16750 28 43 4b 52 5f 54 4f 4b 45 4e 5f 4e 4f 54 5f 50 (CKR_TOKEN_NOT_P 16760 52 45 53 45 4e 54 29 3b 0a 09 7d 0a 0a 09 6d 75 RESENT);..}...mu 16770 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 16780 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 16790 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 167a0 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 167b0 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 167c0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 167d0 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 167e0 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 167f0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 16800 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 16810 0a 0a 09 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 .../* Determine 16820 74 6f 6b 65 6e 20 6c 61 62 65 6c 20 66 72 6f 6d token label from 16830 20 63 65 72 74 69 66 69 63 61 74 65 73 20 2a 2f certificates */ 16840 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e ..memset(pInfo-> 16850 6c 61 62 65 6c 2c 20 27 20 27 2c 20 73 69 7a 65 label, ' ', size 16860 6f 66 28 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 29 of(pInfo->label) 16870 29 3b 0a 09 75 73 65 5f 64 65 66 61 75 6c 74 5f );..use_default_ 16880 6c 61 62 65 6c 20 3d 20 31 3b 0a 0a 09 69 66 20 label = 1;...if 16890 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c (cackey_slots[sl 168a0 6f 74 49 44 5d 2e 6c 61 62 65 6c 20 3d 3d 20 4e otID].label == N 168b0 55 4c 4c 29 20 7b 0a 09 09 70 63 73 63 5f 69 64 ULL) {...pcsc_id 168c0 65 6e 74 69 74 69 65 73 20 3d 20 63 61 63 6b 65 entities = cacke 168d0 79 5f 72 65 61 64 5f 63 65 72 74 73 28 26 63 61 y_read_certs(&ca 168e0 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 ckey_slots[slotI 168f0 44 5d 2c 20 4e 55 4c 4c 2c 20 26 6e 75 6d 5f 63 D], NULL, &num_c 16900 65 72 74 73 29 3b 0a 09 09 69 66 20 28 70 63 73 erts);...if (pcs 16910 63 5f 69 64 65 6e 74 69 74 69 65 73 20 21 3d 20 c_identities != 16920 4e 55 4c 4c 29 20 7b 0a 09 09 09 69 66 20 28 6e NULL) {....if (n 16930 75 6d 5f 63 65 72 74 73 20 3e 20 30 29 20 7b 0a um_certs > 0) {. 16940 09 09 09 09 6c 61 62 65 6c 5f 72 65 74 20 3d 20 ....label_ret = 16950 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e cackey_pcsc_iden 16960 74 69 74 79 5f 74 6f 5f 6c 61 62 65 6c 28 70 63 tity_to_label(pc 16970 73 63 5f 69 64 65 6e 74 69 74 69 65 73 2c 20 70 sc_identities, p 16980 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20 73 69 7a Info->label, siz 16990 65 6f 66 28 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c eof(pInfo->label 169a0 29 29 3b 0a 09 09 09 09 69 66 20 28 6c 61 62 65 ));.....if (labe 169b0 6c 5f 72 65 74 20 3e 20 30 29 20 7b 0a 09 09 09 l_ret > 0) {.... 169c0 09 09 75 73 65 5f 64 65 66 61 75 6c 74 5f 6c 61 ..use_default_la 169d0 62 65 6c 20 3d 20 30 3b 0a 0a 09 09 09 09 09 63 bel = 0;.......c 169e0 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 ackey_slots[slot 169f0 49 44 5d 2e 6c 61 62 65 6c 20 3d 20 6d 61 6c 6c ID].label = mall 16a00 6f 63 28 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d oc(sizeof(pInfo- 16a10 3e 6c 61 62 65 6c 29 29 3b 0a 0a 09 09 09 09 09 >label));....... 16a20 6d 65 6d 63 70 79 28 63 61 63 6b 65 79 5f 73 6c memcpy(cackey_sl 16a30 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 6c 61 62 65 ots[slotID].labe 16a40 6c 2c 20 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c l, pInfo->label, 16a50 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6c sizeof(pInfo->l 16a60 61 62 65 6c 29 29 3b 0a 09 09 09 09 7d 0a 09 09 abel));.....}... 16a70 09 7d 0a 0a 09 09 09 63 61 63 6b 65 79 5f 66 72 .}.....cackey_fr 16a80 65 65 5f 63 65 72 74 73 28 70 63 73 63 5f 69 64 ee_certs(pcsc_id 16a90 65 6e 74 69 74 69 65 73 2c 20 6e 75 6d 5f 63 65 entities, num_ce 16aa0 72 74 73 2c 20 31 29 3b 0a 09 09 7d 0a 09 7d 20 rts, 1);...}..} 16ab0 65 6c 73 65 20 7b 0a 09 09 6d 65 6d 63 70 79 28 else {...memcpy( 16ac0 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20 63 61 pInfo->label, ca 16ad0 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 ckey_slots[slotI 16ae0 44 5d 2e 6c 61 62 65 6c 2c 20 73 69 7a 65 6f 66 D].label, sizeof 16af0 28 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 29 29 3b (pInfo->label)); 16b00 0a 0a 09 09 75 73 65 5f 64 65 66 61 75 6c 74 5f ....use_default_ 16b10 6c 61 62 65 6c 20 3d 20 30 3b 0a 09 7d 0a 0a 09 label = 0;..}... 16b20 69 66 20 28 75 73 65 5f 64 65 66 61 75 6c 74 5f if (use_default_ 16b30 6c 61 62 65 6c 29 20 7b 0a 09 09 6d 65 6d 63 70 label) {...memcp 16b40 79 28 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20 y(pInfo->label, 16b50 64 65 66 61 75 6c 74 4c 61 62 65 6c 2c 20 73 69 defaultLabel, si 16b60 7a 65 6f 66 28 64 65 66 61 75 6c 74 4c 61 62 65 zeof(defaultLabe 16b70 6c 29 20 2d 20 31 29 3b 0a 09 7d 0a 0a 09 6d 65 l) - 1);..}...me 16b80 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 mset(pInfo->manu 16b90 66 61 63 74 75 72 65 72 49 44 2c 20 27 20 27 2c facturerID, ' ', 16ba0 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d sizeof(pInfo->m 16bb0 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 29 3b anufacturerID)); 16bc0 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e ..memcpy(pInfo-> 16bd0 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 manufacturerID, 16be0 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 manufacturerID, 16bf0 73 69 7a 65 6f 66 28 6d 61 6e 75 66 61 63 74 75 sizeof(manufactu 16c00 72 65 72 49 44 29 20 2d 20 31 29 3b 0a 0a 09 6d rerID) - 1);...m 16c10 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d 6f 64 emset(pInfo->mod 16c20 65 6c 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 el, ' ', sizeof( 16c30 70 49 6e 66 6f 2d 3e 6d 6f 64 65 6c 29 29 3b 0a pInfo->model));. 16c40 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6d .memcpy(pInfo->m 16c50 6f 64 65 6c 2c 20 6d 6f 64 65 6c 2c 20 73 69 7a odel, model, siz 16c60 65 6f 66 28 6d 6f 64 65 6c 29 20 2d 20 31 29 3b eof(model) - 1); 16c70 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d ...memset(pInfo- 16c80 3e 73 65 72 69 61 6c 4e 75 6d 62 65 72 2c 20 27 >serialNumber, ' 16c90 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f ', sizeof(pInfo 16ca0 2d 3e 73 65 72 69 61 6c 4e 75 6d 62 65 72 29 29 ->serialNumber)) 16cb0 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f ;...memset(pInfo 16cc0 2d 3e 75 74 63 54 69 6d 65 2c 20 27 20 27 2c 20 ->utcTime, ' ', 16cd0 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 75 74 sizeof(pInfo->ut 16ce0 63 54 69 6d 65 29 29 3b 0a 0a 09 70 49 6e 66 6f cTime));...pInfo 16cf0 2d 3e 68 61 72 64 77 61 72 65 56 65 72 73 69 6f ->hardwareVersio 16d00 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 61 63 6b 65 n.major = (cacke 16d10 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 20 3e y_getversion() > 16d20 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a 09 70 > 16) & 0xff;..p 16d30 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 65 56 65 Info->hardwareVe 16d40 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 63 rsion.minor = (c 16d50 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f 6e ackey_getversion 16d60 28 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b () >> 8) & 0xff; 16d70 0a 0a 09 70 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 ...pInfo->firmwa 16d80 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 reVersion.major 16d90 3d 20 30 78 30 30 3b 0a 09 70 49 6e 66 6f 2d 3e = 0x00;..pInfo-> 16da0 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f 6e 2e firmwareVersion. 16db0 6d 69 6e 6f 72 20 3d 20 30 78 30 30 3b 0a 0a 09 minor = 0x00;... 16dc0 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 43 pInfo->flags = C 16dd0 4b 46 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 KF_WRITE_PROTECT 16de0 45 44 20 7c 20 43 4b 46 5f 55 53 45 52 5f 50 49 ED | CKF_USER_PI 16df0 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 44 20 7c 20 N_INITIALIZED | 16e00 43 4b 46 5f 54 4f 4b 45 4e 5f 49 4e 49 54 49 41 CKF_TOKEN_INITIA 16e10 4c 49 5a 45 44 20 7c 20 63 61 63 6b 65 79 5f 73 LIZED | cackey_s 16e20 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 74 6f 6b lots[slotID].tok 16e30 65 6e 5f 66 6c 61 67 73 3b 0a 0a 09 70 49 6e 66 en_flags;...pInf 16e40 6f 2d 3e 75 6c 4d 61 78 53 65 73 73 69 6f 6e 43 o->ulMaxSessionC 16e50 6f 75 6e 74 20 3d 20 28 73 69 7a 65 6f 66 28 63 ount = (sizeof(c 16e60 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 ackey_sessions) 16e70 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ 16e80 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 20 2d 20 sessions[0])) - 16e90 31 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 53 65 73 1;..pInfo->ulSes 16ea0 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 43 4b 5f 55 sionCount = CK_U 16eb0 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 NAVAILABLE_INFOR 16ec0 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e MATION;..pInfo-> 16ed0 75 6c 4d 61 78 52 77 53 65 73 73 69 6f 6e 43 6f ulMaxRwSessionCo 16ee0 75 6e 74 20 3d 20 30 3b 0a 09 70 49 6e 66 6f 2d unt = 0;..pInfo- 16ef0 3e 75 6c 52 77 53 65 73 73 69 6f 6e 43 6f 75 6e >ulRwSessionCoun 16f00 74 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 t = CK_UNAVAILAB 16f10 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a LE_INFORMATION;. 16f20 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 50 69 6e .pInfo->ulMaxPin 16f30 4c 65 6e 20 3d 20 31 32 38 3b 0a 09 70 49 6e 66 Len = 128;..pInf 16f40 6f 2d 3e 75 6c 4d 69 6e 50 69 6e 4c 65 6e 20 3d o->ulMinPinLen = 16f50 20 30 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 54 6f 0;..pInfo->ulTo 16f60 74 61 6c 50 75 62 6c 69 63 4d 65 6d 6f 72 79 20 talPublicMemory 16f70 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45 = CK_UNAVAILABLE 16f80 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 _INFORMATION;..p 16f90 49 6e 66 6f 2d 3e 75 6c 46 72 65 65 50 75 62 6c Info->ulFreePubl 16fa0 69 63 4d 65 6d 6f 72 79 20 3d 20 43 4b 5f 55 4e icMemory = CK_UN 16fb0 41 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d AVAILABLE_INFORM 16fc0 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 ATION;..pInfo->u 16fd0 6c 54 6f 74 61 6c 50 72 69 76 61 74 65 4d 65 6d lTotalPrivateMem 16fe0 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c ory = CK_UNAVAIL 16ff0 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e ABLE_INFORMATION 17000 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 46 72 65 65 ;..pInfo->ulFree 17010 50 72 69 76 61 74 65 4d 65 6d 6f 72 79 20 3d 20 PrivateMemory = 17020 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 CK_UNAVAILABLE_I 17030 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 0a 09 43 41 NFORMATION;...CA 17040 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 17050 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 17060 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f _OK (%i)", CKR_O 17070 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 K);...return(CKR 17080 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 _OK);.}..CK_DEFI 17090 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 170a0 56 2c 20 43 5f 57 61 69 74 46 6f 72 53 6c 6f 74 V, C_WaitForSlot 170b0 45 76 65 6e 74 29 28 43 4b 5f 46 4c 41 47 53 20 Event)(CK_FLAGS 170c0 66 6c 61 67 73 2c 20 43 4b 5f 53 4c 4f 54 5f 49 flags, CK_SLOT_I 170d0 44 5f 50 54 52 20 70 53 6c 6f 74 49 44 2c 20 43 D_PTR pSlotID, C 170e0 4b 5f 56 4f 49 44 5f 50 54 52 20 70 52 65 73 65 K_VOID_PTR pRese 170f0 72 76 65 64 29 20 7b 0a 09 43 41 43 4b 45 59 5f rved) {..CACKEY_ 17100 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 17110 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 lled.");...if (p 17120 52 65 73 65 72 76 65 64 20 21 3d 20 4e 55 4c 4c Reserved != NULL 17130 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 17140 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 17150 2e 20 70 52 65 73 65 72 76 65 64 20 69 73 20 6e . pReserved is n 17160 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 ot NULL.");....r 17170 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 eturn(CKR_ARGUME 17180 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 NTS_BAD);..}...i 17190 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 171a0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 171b0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 171c0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 171d0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 171e0 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 171f0 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 17200 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 17210 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 17220 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 17230 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 17240 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 17250 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 17260 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 17270 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 17280 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 17290 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 172a0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 TION(CK_RV, C_Ge 172b0 74 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 29 28 tMechanismList)( 172c0 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 CK_SLOT_ID slotI 172d0 44 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f D, CK_MECHANISM_ 172e0 54 59 50 45 5f 50 54 52 20 70 4d 65 63 68 61 6e TYPE_PTR pMechan 172f0 69 73 6d 4c 69 73 74 2c 20 43 4b 5f 55 4c 4f 4e ismList, CK_ULON 17300 47 5f 50 54 52 20 70 75 6c 43 6f 75 6e 74 29 20 G_PTR pulCount) 17310 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 17320 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 17330 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 17340 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 17350 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 17360 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 17370 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 17380 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 17390 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 173a0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 173b0 09 69 66 20 28 70 75 6c 43 6f 75 6e 74 20 3d 3d .if (pulCount == 173c0 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 NULL) {...CACKE 173d0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 173e0 45 72 72 6f 72 2e 20 20 70 75 6c 43 6f 75 6e 74 Error. pulCount 173f0 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 is NULL.");.... 17400 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM 17410 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 ENTS_BAD);..}... 17420 69 66 20 28 70 4d 65 63 68 61 6e 69 73 6d 4c 69 if (pMechanismLi 17430 73 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 st == NULL) {... 17440 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 33 3b 0a 0a *pulCount = 3;.. 17450 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 17460 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 17470 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C 17480 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 KR_OK);....retur 17490 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 n(CKR_OK);..}... 174a0 69 66 20 28 2a 70 75 6c 43 6f 75 6e 74 20 3c 20 if (*pulCount < 174b0 33 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 3) {...CACKEY_DE 174c0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 174d0 72 2e 20 20 42 75 66 66 65 72 20 74 6f 6f 20 73 r. Buffer too s 174e0 6d 61 6c 6c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 mall.");....retu 174f0 72 6e 28 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f rn(CKR_BUFFER_TO 17500 4f 5f 53 4d 41 4c 4c 29 3b 0a 09 7d 0a 0a 09 70 O_SMALL);..}...p 17510 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 5b 30 5d MechanismList[0] 17520 20 3d 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 3b = CKM_RSA_PKCS; 17530 0a 09 70 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 ..pMechanismList 17540 5b 31 5d 20 3d 20 43 4b 4d 5f 53 48 41 31 5f 52 [1] = CKM_SHA1_R 17550 53 41 5f 50 4b 43 53 3b 0a 09 2a 70 75 6c 43 6f SA_PKCS;..*pulCo 17560 75 6e 74 20 3d 20 32 3b 0a 0a 09 43 41 43 4b 45 unt = 2;...CACKE 17570 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 17580 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 17590 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b (%i)", CKR_OK); 175a0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 175b0 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 175c0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 175d0 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 6d 49 6e C_GetMechanismIn 175e0 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 fo)(CK_SLOT_ID s 175f0 6c 6f 74 49 44 2c 20 43 4b 5f 4d 45 43 48 41 4e lotID, CK_MECHAN 17600 49 53 4d 5f 54 59 50 45 20 74 79 70 65 2c 20 43 ISM_TYPE type, C 17610 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 49 4e 46 4f K_MECHANISM_INFO 17620 5f 50 54 52 20 70 49 6e 66 6f 29 20 7b 0a 09 69 _PTR pInfo) {..i 17630 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b nt mutex_retval; 17640 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 17650 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 17660 29 3b 0a 0a 09 69 66 20 28 70 49 6e 66 6f 20 3d );...if (pInfo = 17670 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK 17680 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 17690 22 45 72 72 6f 72 2e 20 70 49 6e 66 6f 20 69 73 "Error. pInfo is 176a0 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 NULL.");....ret 176b0 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 urn(CKR_ARGUMENT 176c0 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 S_BAD);..}...if 176d0 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 176e0 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 176f0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 17700 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 17710 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 17720 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 17730 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 17740 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6c 6f D);..}...if (slo 17750 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 tID < 0 || slotI 17760 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 D >= (sizeof(cac 17770 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a key_slots) / siz 17780 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 eof(cackey_slots 17790 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE 177a0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 177b0 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 Error. Invalid s 177c0 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 lot requested (% 177d0 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 lu), outside of 177e0 76 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 6c valid range", sl 177f0 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e otID);....return 17800 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 (CKR_SLOT_ID_INV 17810 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 ALID);..}...mute 17820 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 17830 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 y_mutex_lock(cac 17840 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 17850 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 17860 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 17870 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 17880 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 rror. Locking f 17890 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 ailed.");....ret 178a0 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 178b0 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 ERROR);..}...if 178c0 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c (cackey_slots[sl 178d0 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d 20 otID].active == 178e0 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 178f0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 17900 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 r. Invalid slot 17910 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c requested (%lu), 17920 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65 6e slot not curren 17930 74 6c 79 20 61 63 74 69 76 65 22 2c 20 73 6c 6f tly active", slo 17940 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f tID);....cackey_ 17950 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 17960 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 17970 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 .return(CKR_SLOT 17980 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d _ID_INVALID);..} 17990 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 179a0 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 = cackey_mutex_u 179b0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 179c0 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 179d0 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 179e0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 179f0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 17a00 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Unlocking failed 17a10 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 17a20 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 17a30 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 58 58 58 3a 20 );..}.../* XXX: 17a40 54 68 69 73 20 69 73 20 75 6e 74 65 73 74 65 64 This is untested 17a50 2c 20 61 6e 64 20 66 75 72 74 68 65 72 20 49 27 , and further I' 17a60 6d 20 6e 6f 74 20 72 65 61 6c 6c 79 20 73 75 72 m not really sur 17a70 65 20 69 66 20 74 68 69 73 20 69 73 20 63 6f 72 e if this is cor 17a80 72 65 63 74 2e 20 2a 2f 0a 09 73 77 69 74 63 68 rect. */..switch 17a90 20 28 74 79 70 65 29 20 7b 0a 09 09 63 61 73 65 (type) {...case 17aa0 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 3a 0a 09 CKM_RSA_PKCS:.. 17ab0 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 ..pInfo->ulMinKe 17ac0 79 53 69 7a 65 20 3d 20 35 31 32 3b 0a 09 09 09 ySize = 512;.... 17ad0 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 4b 65 79 53 pInfo->ulMaxKeyS 17ae0 69 7a 65 20 3d 20 38 31 39 32 3b 0a 09 09 09 70 ize = 8192;....p 17af0 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 43 4b Info->flags = CK 17b00 46 5f 48 57 20 7c 20 43 4b 46 5f 45 4e 43 52 59 F_HW | CKF_ENCRY 17b10 50 54 20 7c 20 43 4b 46 5f 44 45 43 52 59 50 54 PT | CKF_DECRYPT 17b20 20 7c 20 43 4b 46 5f 53 49 47 4e 20 7c 20 43 4b | CKF_SIGN | CK 17b30 46 5f 56 45 52 49 46 59 3b 0a 09 09 09 62 72 65 F_VERIFY;....bre 17b40 61 6b 3b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 ak;...case CKM_R 17b50 53 41 5f 58 5f 35 30 39 3a 0a 09 09 09 70 49 6e SA_X_509:....pIn 17b60 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 53 69 7a 65 fo->ulMinKeySize 17b70 20 3d 20 35 31 32 3b 0a 09 09 09 70 49 6e 66 6f = 512;....pInfo 17b80 2d 3e 75 6c 4d 61 78 4b 65 79 53 69 7a 65 20 3d ->ulMaxKeySize = 17b90 20 38 31 39 32 3b 0a 09 09 09 70 49 6e 66 6f 2d 8192;....pInfo- 17ba0 3e 66 6c 61 67 73 20 3d 20 43 4b 46 5f 48 57 20 >flags = CKF_HW 17bb0 7c 20 43 4b 46 5f 45 4e 43 52 59 50 54 20 7c 20 | CKF_ENCRYPT | 17bc0 43 4b 46 5f 44 45 43 52 59 50 54 20 7c 20 43 4b CKF_DECRYPT | CK 17bd0 46 5f 53 49 47 4e 20 7c 20 43 4b 46 5f 56 45 52 F_SIGN | CKF_VER 17be0 49 46 59 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 IFY;....break;.. 17bf0 09 63 61 73 65 20 43 4b 4d 5f 53 48 41 31 5f 52 .case CKM_SHA1_R 17c00 53 41 5f 50 4b 43 53 3a 0a 09 09 09 70 49 6e 66 SA_PKCS:....pInf 17c10 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 53 69 7a 65 20 o->ulMinKeySize 17c20 3d 20 35 31 32 3b 0a 09 09 09 70 49 6e 66 6f 2d = 512;....pInfo- 17c30 3e 75 6c 4d 61 78 4b 65 79 53 69 7a 65 20 3d 20 >ulMaxKeySize = 17c40 38 31 39 32 3b 0a 09 09 09 70 49 6e 66 6f 2d 3e 8192;....pInfo-> 17c50 66 6c 61 67 73 20 3d 20 43 4b 46 5f 48 57 20 7c flags = CKF_HW | 17c60 20 43 4b 46 5f 53 49 47 4e 20 7c 20 43 4b 46 5f CKF_SIGN | CKF_ 17c70 56 45 52 49 46 59 3b 0a 09 09 09 62 72 65 61 6b VERIFY;....break 17c80 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 17c90 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 17ca0 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 17cb0 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 )", CKR_OK);...r 17cc0 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 17cd0 0a 0a 2f 2a 20 57 65 20 64 6f 6e 27 74 20 73 75 ../* We don't su 17ce0 70 70 6f 72 74 20 74 68 69 73 20 6d 65 74 68 6f pport this metho 17cf0 64 2e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f d. */.CK_DEFINE_ 17d00 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 17d10 43 5f 49 6e 69 74 54 6f 6b 65 6e 29 28 43 4b 5f C_InitToken)(CK_ 17d20 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 SLOT_ID slotID, 17d30 43 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 CK_UTF8CHAR_PTR 17d40 70 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 pPin, CK_ULONG u 17d50 6c 50 69 6e 4c 65 6e 2c 20 43 4b 5f 55 54 46 38 lPinLen, CK_UTF8 17d60 43 48 41 52 5f 50 54 52 20 70 4c 61 62 65 6c 29 CHAR_PTR pLabel) 17d70 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 17d80 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 17d90 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 17da0 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 17db0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 17dc0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 17dd0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 17de0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 17df0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 17e00 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 17e10 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 17e20 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 17e30 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 45 CKR_TOKEN_WRITE 17e40 5f 50 52 4f 54 45 43 54 45 44 20 28 25 69 29 22 _PROTECTED (%i)" 17e50 2c 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 , CKR_TOKEN_WRIT 17e60 45 5f 50 52 4f 54 45 43 54 45 44 29 3b 0a 0a 09 E_PROTECTED);... 17e70 72 65 74 75 72 6e 28 43 4b 52 5f 54 4f 4b 45 4e return(CKR_TOKEN 17e80 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 _WRITE_PROTECTED 17e90 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 64 6f 6e 27 );.}../* We don' 17ea0 74 20 73 75 70 70 6f 72 74 20 74 68 69 73 20 6d t support this m 17eb0 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b 5f 44 45 46 ethod. */.CK_DEF 17ec0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 17ed0 52 56 2c 20 43 5f 49 6e 69 74 50 49 4e 29 28 43 RV, C_InitPIN)(C 17ee0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 17ef0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 55 54 hSession, CK_UT 17f00 46 38 43 48 41 52 5f 50 54 52 20 70 50 69 6e 2c F8CHAR_PTR pPin, 17f10 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 69 6e 4c CK_ULONG ulPinL 17f20 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 en) {..CACKEY_DE 17f30 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 17f40 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 17f50 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 17f60 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 17f70 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 17f80 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 17f90 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 17fa0 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 17fb0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 17fc0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 17fd0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 17fe0 69 6e 67 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 ing CKR_TOKEN_WR 17ff0 49 54 45 5f 50 52 4f 54 45 43 54 45 44 20 28 25 ITE_PROTECTED (% 18000 69 29 22 2c 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 i)", CKR_TOKEN_W 18010 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 29 3b RITE_PROTECTED); 18020 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 54 4f ...return(CKR_TO 18030 4b 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 KEN_WRITE_PROTEC 18040 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 64 TED);.}../* We d 18050 6f 6e 27 74 20 73 75 70 70 6f 72 74 20 74 68 69 on't support thi 18060 73 20 6d 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b 5f s method. */.CK_ 18070 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 18080 43 4b 5f 52 56 2c 20 43 5f 53 65 74 50 49 4e 29 CK_RV, C_SetPIN) 18090 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 180a0 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 180b0 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 4f 6c UTF8CHAR_PTR pOl 180c0 64 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 dPin, CK_ULONG u 180d0 6c 4f 6c 64 50 69 6e 4c 65 6e 2c 20 43 4b 5f 55 lOldPinLen, CK_U 180e0 54 46 38 43 48 41 52 5f 50 54 52 20 70 4e 65 77 TF8CHAR_PTR pNew 180f0 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c Pin, CK_ULONG ul 18100 4e 65 77 50 69 6e 4c 65 6e 29 20 7b 0a 09 43 41 NewPinLen) {..CA 18110 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 18120 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 18130 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 18140 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 18150 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 18160 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 18170 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 18180 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 18190 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 181a0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 181b0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 181c0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 181d0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 181e0 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 181f0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 18200 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 18210 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 18220 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 18230 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 18240 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 4f CTION(CK_RV, C_O 18250 70 65 6e 53 65 73 73 69 6f 6e 29 28 43 4b 5f 53 penSession)(CK_S 18260 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 43 LOT_ID slotID, C 18270 4b 5f 46 4c 41 47 53 20 66 6c 61 67 73 2c 20 43 K_FLAGS flags, C 18280 4b 5f 56 4f 49 44 5f 50 54 52 20 70 41 70 70 6c K_VOID_PTR pAppl 18290 69 63 61 74 69 6f 6e 2c 20 43 4b 5f 4e 4f 54 49 ication, CK_NOTI 182a0 46 59 20 6e 6f 74 69 66 79 2c 20 43 4b 5f 53 45 FY notify, CK_SE 182b0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 50 54 52 SSION_HANDLE_PTR 182c0 20 70 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 75 phSession) {..u 182d0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 78 nsigned long idx 182e0 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 ;..int mutex_ret 182f0 76 61 6c 3b 0a 09 69 6e 74 20 66 6f 75 6e 64 5f val;..int found_ 18300 73 65 73 73 69 6f 6e 20 3d 20 30 3b 0a 0a 09 43 session = 0;...C 18310 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 18320 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 18330 09 69 66 20 28 28 66 6c 61 67 73 20 26 20 43 4b .if ((flags & CK 18340 46 5f 53 45 52 49 41 4c 5f 53 45 53 53 49 4f 4e F_SERIAL_SESSION 18350 29 20 21 3d 20 43 4b 46 5f 53 45 52 49 41 4c 5f ) != CKF_SERIAL_ 18360 53 45 53 53 49 4f 4e 29 20 7b 0a 09 09 72 65 74 SESSION) {...ret 18370 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 18380 50 41 52 41 4c 4c 45 4c 5f 4e 4f 54 5f 53 55 50 PARALLEL_NOT_SUP 18390 50 4f 52 54 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 PORTED);..}...if 183a0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 183b0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 183c0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 183d0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 183e0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 183f0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 18400 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 18410 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6c ED);..}...if (sl 18420 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 otID < 0 || slot 18430 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 ID >= (sizeof(ca 18440 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 ckey_slots) / si 18450 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 18460 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b s[0]))) {...CACK 18470 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 18480 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 "Error. Invalid 18490 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 slot requested ( 184a0 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 %lu), outside of 184b0 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 valid range", s 184c0 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 lotID);....retur 184d0 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e n(CKR_SLOT_ID_IN 184e0 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 VALID);..}...mut 184f0 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 18500 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 ey_mutex_lock(ca 18510 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 18520 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 18530 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 18540 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 18550 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 Error. Locking 18560 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 18570 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 18580 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 _ERROR);..}...if 18590 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 (cackey_slots[s 185a0 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d lotID].active == 185b0 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 185c0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 185d0 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 or. Invalid slot 185e0 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 requested (%lu) 185f0 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65 , slot not curre 18600 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20 73 6c ntly active", sl 18610 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b 65 79 otID);....cackey 18620 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 18630 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 18640 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f ..return(CKR_SLO 18650 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 T_ID_INVALID);.. 18660 7d 0a 0a 09 2f 2a 20 56 65 72 69 66 79 20 74 68 }.../* Verify th 18670 61 74 20 74 68 65 20 63 61 72 64 20 69 73 20 61 at the card is a 18680 63 74 75 61 6c 6c 79 20 69 6e 20 74 68 65 20 73 ctually in the s 18690 6c 6f 74 2e 20 2a 2f 0a 09 2f 2a 20 58 58 58 3a lot. */../* XXX: 186a0 20 43 68 65 63 6b 20 74 6f 20 6d 61 6b 65 20 73 Check to make s 186b0 75 72 65 20 74 68 69 73 20 69 73 20 69 6e 20 74 ure this is in t 186c0 68 65 20 50 4b 43 53 23 31 31 20 73 70 65 63 69 he PKCS#11 speci 186d0 66 69 63 61 74 69 6f 6e 20 2a 2f 0a 09 69 66 20 fication */..if 186e0 28 63 61 63 6b 65 79 5f 74 6f 6b 65 6e 5f 70 72 (cackey_token_pr 186f0 65 73 65 6e 74 28 26 63 61 63 6b 65 79 5f 73 6c esent(&cackey_sl 18700 6f 74 73 5b 73 6c 6f 74 49 44 5d 29 20 21 3d 20 ots[slotID]) != 18710 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 54 4f CACKEY_PCSC_S_TO 18720 4b 45 4e 50 52 45 53 45 4e 54 29 20 7b 0a 09 09 KENPRESENT) {... 18730 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 18740 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 43 61 72 NTF("Error. Car 18750 64 20 6e 6f 74 20 70 72 65 73 65 6e 74 2e 20 20 d not present. 18760 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 44 45 Returning CKR_DE 18770 56 49 43 45 5f 52 45 4d 4f 56 45 44 22 29 3b 0a VICE_REMOVED");. 18780 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 18790 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 187a0 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72 glock);....retur 187b0 6e 28 43 4b 52 5f 44 45 56 49 43 45 5f 52 45 4d n(CKR_DEVICE_REM 187c0 4f 56 45 44 29 3b 0a 09 7d 0a 0a 09 66 6f 72 20 OVED);..}...for 187d0 28 69 64 78 20 3d 20 31 3b 20 69 64 78 20 3c 20 (idx = 1; idx < 187e0 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 (sizeof(cackey_s 187f0 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f essions) / sizeo 18800 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 18810 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b s[0])); idx++) { 18820 0a 09 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 ...if (!cackey_s 18830 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 63 74 essions[idx].act 18840 69 76 65 29 20 7b 0a 09 09 09 66 6f 75 6e 64 5f ive) {....found_ 18850 73 65 73 73 69 6f 6e 20 3d 20 31 3b 0a 0a 09 09 session = 1;.... 18860 09 2a 70 68 53 65 73 73 69 6f 6e 20 3d 20 69 64 .*phSession = id 18870 78 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 x;.....cackey_se 18880 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 63 74 69 ssions[idx].acti 18890 76 65 20 3d 20 31 3b 0a 09 09 09 63 61 63 6b 65 ve = 1;....cacke 188a0 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. 188b0 73 6c 6f 74 49 44 20 3d 20 73 6c 6f 74 49 44 3b slotID = slotID; 188c0 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 ....cackey_sessi 188d0 6f 6e 73 5b 69 64 78 5d 2e 73 74 61 74 65 20 3d ons[idx].state = 188e0 20 43 4b 53 5f 52 4f 5f 50 55 42 4c 49 43 5f 53 CKS_RO_PUBLIC_S 188f0 45 53 53 49 4f 4e 3b 0a 09 09 09 63 61 63 6b 65 ESSION;....cacke 18900 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. 18910 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 3b 0a 09 flags = flags;.. 18920 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 18930 73 5b 69 64 78 5d 2e 75 6c 44 65 76 69 63 65 45 s[idx].ulDeviceE 18940 72 72 6f 72 20 3d 20 30 3b 0a 09 09 09 63 61 63 rror = 0;....cac 18950 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 key_sessions[idx 18960 5d 2e 70 41 70 70 6c 69 63 61 74 69 6f 6e 20 3d ].pApplication = 18970 20 70 41 70 70 6c 69 63 61 74 69 6f 6e 3b 0a 09 pApplication;.. 18980 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 18990 73 5b 69 64 78 5d 2e 4e 6f 74 69 66 79 20 3d 20 s[idx].Notify = 189a0 6e 6f 74 69 66 79 3b 0a 0a 09 09 09 63 61 63 6b notify;.....cack 189b0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d ey_sessions[idx] 189c0 2e 69 64 65 6e 74 69 74 69 65 73 20 3d 20 4e 55 .identities = NU 189d0 4c 4c 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 LL;....cackey_se 189e0 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 69 64 65 6e ssions[idx].iden 189f0 74 69 74 69 65 73 5f 63 6f 75 6e 74 20 3d 20 30 tities_count = 0 18a00 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 ;.....cackey_ses 18a10 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 65 61 72 63 sions[idx].searc 18a20 68 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a 0a 09 h_active = 0;... 18a30 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 18a40 73 5b 69 64 78 5d 2e 73 69 67 6e 5f 61 63 74 69 s[idx].sign_acti 18a50 76 65 20 3d 20 30 3b 0a 0a 09 09 09 63 61 63 6b ve = 0;.....cack 18a60 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d ey_sessions[idx] 18a70 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 20 .decrypt_active 18a80 3d 20 30 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f = 0;.....cackey_ 18a90 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 69 64 sessions[idx].id 18aa0 65 6e 74 69 74 69 65 73 20 3d 20 63 61 63 6b 65 entities = cacke 18ab0 79 5f 72 65 61 64 5f 69 64 65 6e 74 69 74 69 65 y_read_identitie 18ac0 73 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b s(&cackey_slots[ 18ad0 73 6c 6f 74 49 44 5d 2c 20 26 63 61 63 6b 65 79 slotID], &cackey 18ae0 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 69 _sessions[idx].i 18af0 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 dentities_count) 18b00 3b 0a 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 ;......break;... 18b10 7d 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 }..}...mutex_ret 18b20 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 18b30 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 18b40 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 18b50 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 18b60 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 18b70 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 18b80 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 18b90 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 18ba0 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 18bb0 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 RROR);..}...if ( 18bc0 21 66 6f 75 6e 64 5f 73 65 73 73 69 6f 6e 29 20 !found_session) 18bd0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 18be0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 18bf0 6e 67 20 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 43 ng CKR_SESSION_C 18c00 4f 55 4e 54 20 28 25 69 29 22 2c 20 43 4b 52 5f OUNT (%i)", CKR_ 18c10 53 45 53 53 49 4f 4e 5f 43 4f 55 4e 54 29 3b 0a SESSION_COUNT);. 18c20 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 ...return(CKR_SE 18c30 53 53 49 4f 4e 5f 43 4f 55 4e 54 29 3b 0a 09 7d SSION_COUNT);..} 18c40 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 18c50 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 18c60 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", 18c70 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 CKR_OK);...retur 18c80 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b n(CKR_OK);.}..CK 18c90 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 18ca0 28 43 4b 5f 52 56 2c 20 43 5f 43 6c 6f 73 65 53 (CK_RV, C_CloseS 18cb0 65 73 73 69 6f 6e 29 28 43 4b 5f 53 45 53 53 49 ession)(CK_SESSI 18cc0 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 18cd0 6f 6e 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 on) {..int mutex 18ce0 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 _retval;...CACKE 18cf0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 18d00 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 18d10 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 18d20 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 18d30 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 18d40 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 18d50 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 18d60 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 18d70 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 18d80 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 D);..}...if (hSe 18d90 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 ssion == 0 || hS 18da0 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f ession >= (sizeo 18db0 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 18dc0 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 18dd0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 ey_sessions[0])) 18de0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 18df0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 18e00 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f . Session out o 18e10 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 f range.");..... 18e20 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 18e30 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 18e40 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f ID);..}...mutex_ 18e50 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 18e60 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 mutex_lock(cacke 18e70 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 18e80 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 18e90 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 18ea0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 18eb0 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 or. Locking fai 18ec0 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 18ed0 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 18ee0 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 ROR);..}...if (! 18ef0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 18f00 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 hSession].active 18f10 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 18f20 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 18f30 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 18f40 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 18f50 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 18f60 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 on not active.") 18f70 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 18f80 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 18f90 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 18fa0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 18fb0 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 hSession].active 18fc0 20 3d 20 30 3b 0a 09 63 61 63 6b 65 79 5f 66 72 = 0;..cackey_fr 18fd0 65 65 5f 69 64 65 6e 74 69 74 69 65 73 28 63 61 ee_identities(ca 18fe0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 18ff0 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 ession].identiti 19000 65 73 2c 20 63 61 63 6b 65 79 5f 73 65 73 73 69 es, cackey_sessi 19010 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 ons[hSession].id 19020 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 3b entities_count); 19030 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 19040 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 = cackey_mutex_u 19050 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 19060 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 19070 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 19080 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 19090 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 190a0 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Unlocking failed 190b0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 190c0 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 190d0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 190e0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 190f0 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 urning CKR_OK (% 19100 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 i)", CKR_OK);... 19110 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a return(CKR_OK);. 19120 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 19130 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 CTION(CK_RV, C_C 19140 6c 6f 73 65 41 6c 6c 53 65 73 73 69 6f 6e 73 29 loseAllSessions) 19150 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 (CK_SLOT_ID slot 19160 49 44 29 20 7b 0a 09 75 69 6e 74 33 32 5f 74 20 ID) {..uint32_t 19170 69 64 78 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f idx;..int mutex_ 19180 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 retval;...CACKEY 19190 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 191a0 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 191b0 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 191c0 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 191d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 191e0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 191f0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 19200 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 19210 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 19220 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6c 6f 74 );..}...if (slot 19230 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 ID < 0 || slotID 19240 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b >= (sizeof(cack 19250 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 ey_slots) / size 19260 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b of(cackey_slots[ 19270 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 0]))) {...CACKEY 19280 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 19290 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c rror. Invalid sl 192a0 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c ot requested (%l 192b0 75 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 76 u), outside of v 192c0 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f alid range", slo 192d0 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 tID);....return( 192e0 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 CKR_SLOT_ID_INVA 192f0 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 LID);..}...mutex 19300 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 19310 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b _mutex_lock(cack 19320 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 19330 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 19340 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 19350 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 19360 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 ror. Locking fa 19370 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 19380 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 19390 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 RROR);..}...if ( 193a0 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo 193b0 74 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 tID].active == 0 193c0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 193d0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 193e0 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 . Invalid slot r 193f0 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 equested (%lu), 19400 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 slot not current 19410 6c 79 20 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 ly active", slot 19420 49 44 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d ID);....cackey_m 19430 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 19440 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 19450 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f return(CKR_SLOT_ 19460 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a ID_INVALID);..}. 19470 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 ..for (idx = 0; 19480 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 idx < (sizeof(ca 19490 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f ckey_sessions) / 194a0 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s 194b0 65 73 73 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 64 essions[0])); id 194c0 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63 61 63 x++) {...if (cac 194d0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 key_sessions[idx 194e0 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 09 69 ].active) {....i 194f0 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f f (cackey_sessio 19500 6e 73 5b 69 64 78 5d 2e 73 6c 6f 74 49 44 20 21 ns[idx].slotID ! 19510 3d 20 73 6c 6f 74 49 44 29 20 7b 0a 09 09 09 09 = slotID) {..... 19520 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 7d 0a 0a continue;....}.. 19530 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 19540 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 19550 67 6c 6f 63 6b 29 3b 0a 09 09 09 43 5f 43 6c 6f glock);....C_Clo 19560 73 65 53 65 73 73 69 6f 6e 28 69 64 78 29 3b 0a seSession(idx);. 19570 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 19580 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 19590 6f 63 6b 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 6d ock);...}..}...m 195a0 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 195b0 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 195c0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 195d0 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 195e0 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 195f0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 19600 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f TF("Error. Unlo 19610 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 19620 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 19630 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 19640 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 19650 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 19660 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c ng CKR_OK (%i)", 19670 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 CKR_OK);...retu 19680 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 rn(CKR_OK);.}..C 19690 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 196a0 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 53 65 N(CK_RV, C_GetSe 196b0 73 73 69 6f 6e 49 6e 66 6f 29 28 43 4b 5f 53 45 ssionInfo)(CK_SE 196c0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 196d0 73 73 69 6f 6e 2c 20 43 4b 5f 53 45 53 53 49 4f ssion, CK_SESSIO 196e0 4e 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f N_INFO_PTR pInfo 196f0 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 ) {..int mutex_r 19700 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f etval;...CACKEY_ 19710 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 19720 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 lled.");...if (p 19730 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a Info == NULL) {. 19740 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 19750 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 49 RINTF("Error. pI 19760 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a nfo is NULL.");. 19770 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 19780 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} 19790 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 197a0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 197b0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 197c0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 197d0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 197e0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 197f0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 19800 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 IALIZED);..}...i 19810 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 f (hSession == 0 19820 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 || hSession >= 19830 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 (sizeof(cackey_s 19840 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f essions) / sizeo 19850 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 19860 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b s[0]))) {...CACK 19870 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 19880 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 19890 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 out of range.") 198a0 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 198b0 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 198c0 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 198d0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 198e0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b ackey_mutex_lock 198f0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 19900 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 19910 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 19920 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 19930 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 F("Error. Locki 19940 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 19950 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 19960 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 19970 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 .if (!cackey_ses 19980 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 19990 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b active) {...cack 199a0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 199b0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 199c0 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 199d0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 199e0 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 Session not act 199f0 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ive.");......ret 19a00 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 19a10 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 19a20 0a 09 7d 0a 0a 09 70 49 6e 66 6f 2d 3e 73 6c 6f ..}...pInfo->slo 19a30 74 49 44 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 tID = cackey_ses 19a40 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 19a50 73 6c 6f 74 49 44 3b 0a 09 70 49 6e 66 6f 2d 3e slotID;..pInfo-> 19a60 73 74 61 74 65 20 3d 20 63 61 63 6b 65 79 5f 73 state = cackey_s 19a70 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 19a80 5d 2e 73 74 61 74 65 3b 0a 09 70 49 6e 66 6f 2d ].state;..pInfo- 19a90 3e 66 6c 61 67 73 20 3d 20 63 61 63 6b 65 79 5f >flags = cackey_ 19aa0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 19ab0 6e 5d 2e 66 6c 61 67 73 3b 0a 09 70 49 6e 66 6f n].flags;..pInfo 19ac0 2d 3e 75 6c 44 65 76 69 63 65 45 72 72 6f 72 20 ->ulDeviceError 19ad0 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e = cackey_session 19ae0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 75 6c 44 65 s[hSession].ulDe 19af0 76 69 63 65 45 72 72 6f 72 3b 0a 0a 09 6d 75 74 viceError;...mut 19b00 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 19b10 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 19b20 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 19b30 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 19b40 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 19b50 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 19b60 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b ("Error. Unlock 19b70 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 19b80 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 19b90 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 19ba0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 19bb0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 19bc0 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C 19bd0 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return 19be0 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f (CKR_OK);.}..CK_ 19bf0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 19c00 43 4b 5f 52 56 2c 20 43 5f 47 65 74 4f 70 65 72 CK_RV, C_GetOper 19c10 61 74 69 6f 6e 53 74 61 74 65 29 28 43 4b 5f 53 ationState)(CK_S 19c20 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 19c30 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f ession, CK_BYTE_ 19c40 50 54 52 20 70 4f 70 65 72 61 74 69 6f 6e 53 74 PTR pOperationSt 19c50 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 ate, CK_ULONG_PT 19c60 52 20 70 75 6c 4f 70 65 72 61 74 69 6f 6e 53 74 R pulOperationSt 19c70 61 74 65 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 ateLen) {..CACKE 19c80 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 19c90 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 19ca0 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 19cb0 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 19cc0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 19cd0 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 19ce0 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 19cf0 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 19d00 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 19d10 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ 19d20 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 19d30 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 turning CKR_FUNC 19d40 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 19d50 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 ED (%i)", CKR_FU 19d60 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 19d70 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 RTED);...return( 19d80 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 19d90 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a _SUPPORTED);.}.. 19da0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 19db0 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 74 4f ON(CK_RV, C_SetO 19dc0 70 65 72 61 74 69 6f 6e 53 74 61 74 65 29 28 43 perationState)(C 19dd0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 19de0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 19df0 54 45 5f 50 54 52 20 70 4f 70 65 72 61 74 69 6f TE_PTR pOperatio 19e00 6e 53 74 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 nState, CK_ULONG 19e10 20 75 6c 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 ulOperationStat 19e20 65 4c 65 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f eLen, CK_OBJECT_ 19e30 48 41 4e 44 4c 45 20 68 45 6e 63 72 79 70 74 69 HANDLE hEncrypti 19e40 6f 6e 4b 65 79 2c 20 43 4b 5f 4f 42 4a 45 43 54 onKey, CK_OBJECT 19e50 5f 48 41 4e 44 4c 45 20 68 41 75 74 68 65 6e 74 _HANDLE hAuthent 19e60 69 63 61 74 69 6f 6e 4b 65 79 29 20 7b 0a 09 43 icationKey) {..C 19e70 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 19e80 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 19e90 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 19ea0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 19eb0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 19ec0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 19ed0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 19ee0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 19ef0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 19f00 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 19f10 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 19f20 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 19f30 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 19f40 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 19f50 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 19f60 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 19f70 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 19f80 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 19f90 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 19fa0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 19fb0 4c 6f 67 69 6e 29 28 43 4b 5f 53 45 53 53 49 4f Login)(CK_SESSIO 19fc0 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 19fd0 6e 2c 20 43 4b 5f 55 53 45 52 5f 54 59 50 45 20 n, CK_USER_TYPE 19fe0 75 73 65 72 54 79 70 65 2c 20 43 4b 5f 55 54 46 userType, CK_UTF 19ff0 38 43 48 41 52 5f 50 54 52 20 70 50 69 6e 2c 20 8CHAR_PTR pPin, 1a000 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 69 6e 4c 65 CK_ULONG ulPinLe 1a010 6e 29 20 7b 0a 09 43 4b 5f 53 4c 4f 54 5f 49 44 n) {..CK_SLOT_ID 1a020 20 73 6c 6f 74 49 44 3b 0a 09 69 6e 74 20 6d 75 slotID;..int mu 1a030 74 65 78 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 tex_retval;..int 1a040 20 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 tries_remaining 1a050 3b 0a 09 69 6e 74 20 6c 6f 67 69 6e 5f 72 65 74 ;..int login_ret 1a060 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 1a070 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 1a080 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 1a090 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 1a0a0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1a0b0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1a0c0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 1a0d0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1a0e0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 1a0f0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 1a100 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d ..if (hSession = 1a110 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 = 0 || hSession 1a120 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 >= (sizeof(cacke 1a130 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 y_sessions) / si 1a140 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 1a150 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 ions[0]))) {...C 1a160 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1a170 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 1a180 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 ion out of range 1a190 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 1a1a0 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 1a1b0 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 1a1c0 0a 0a 09 69 66 20 28 75 73 65 72 54 79 70 65 20 ...if (userType 1a1d0 21 3d 20 43 4b 55 5f 55 53 45 52 29 20 7b 0a 09 != CKU_USER) {.. 1a1e0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1a1f0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 57 65 INTF("Error. We 1a200 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 55 53 only support US 1a210 45 52 20 6d 6f 64 65 2c 20 61 73 6b 65 64 20 66 ER mode, asked f 1a220 6f 72 20 25 6c 75 20 6d 6f 64 65 2e 22 2c 20 28 or %lu mode.", ( 1a230 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 unsigned long) u 1a240 73 65 72 54 79 70 65 29 0a 0a 09 09 72 65 74 75 serType)....retu 1a250 72 6e 28 43 4b 52 5f 55 53 45 52 5f 54 59 50 45 rn(CKR_USER_TYPE 1a260 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 1a270 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 1a280 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b ackey_mutex_lock 1a290 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1a2a0 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 1a2b0 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 1a2c0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1a2d0 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 F("Error. Locki 1a2e0 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 1a2f0 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 1a300 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 1a310 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 .if (!cackey_ses 1a320 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1a330 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b active) {...cack 1a340 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 1a350 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 1a360 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 1a370 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1a380 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 Session not act 1a390 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ive.");......ret 1a3a0 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 1a3b0 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 1a3c0 0a 09 7d 0a 0a 09 73 6c 6f 74 49 44 20 3d 20 63 ..}...slotID = c 1a3d0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1a3e0 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f 74 49 44 3b Session].slotID; 1a3f0 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 3c 20 ...if (slotID < 1a400 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 28 0 || slotID >= ( 1a410 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c sizeof(cackey_sl 1a420 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 ots) / sizeof(ca 1a430 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 ckey_slots[0]))) 1a440 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1a450 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1a460 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 Invalid slot re 1a470 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 6f quested (%lu), o 1a480 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 64 20 utside of valid 1a490 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 3b range", slotID); 1a4a0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 1a4b0 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 1a4c0 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 }...if (cackey_s 1a4d0 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 lots[slotID].act 1a4e0 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 ive == 0) {...CA 1a4f0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1a500 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 F("Error. Invali 1a510 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 d slot requested 1a520 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 (%lu), slot not 1a530 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 currently activ 1a540 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 e", slotID);.... 1a550 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 1a560 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1a570 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 ck);....return(C 1a580 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 1a590 29 3b 0a 09 7d 0a 0a 09 6c 6f 67 69 6e 5f 72 65 );..}...login_re 1a5a0 74 20 3d 20 63 61 63 6b 65 79 5f 6c 6f 67 69 6e t = cackey_login 1a5b0 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 (&cackey_slots[s 1a5c0 6c 6f 74 49 44 5d 2c 20 70 50 69 6e 2c 20 75 6c lotID], pPin, ul 1a5d0 50 69 6e 4c 65 6e 2c 20 26 74 72 69 65 73 5f 72 PinLen, &tries_r 1a5e0 65 6d 61 69 6e 69 6e 67 29 3b 0a 09 69 66 20 28 emaining);..if ( 1a5f0 6c 6f 67 69 6e 5f 72 65 74 20 21 3d 20 43 41 43 login_ret != CAC 1a600 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b KEY_PCSC_S_OK) { 1a610 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 1a620 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 1a630 67 6c 6f 63 6b 29 3b 0a 0a 09 09 69 66 20 28 6c glock);....if (l 1a640 6f 67 69 6e 5f 72 65 74 20 3d 3d 20 43 41 43 4b ogin_ret == CACK 1a650 45 59 5f 50 43 53 43 5f 45 5f 4c 4f 43 4b 45 44 EY_PCSC_E_LOCKED 1a660 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE 1a670 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1a680 72 2e 20 20 54 6f 6b 65 6e 20 69 73 20 6c 6f 63 r. Token is loc 1a690 6b 65 64 2e 22 29 3b 0a 0a 09 09 09 63 61 63 6b ked.");.....cack 1a6a0 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d ey_slots[slotID] 1a6b0 2e 74 6f 6b 65 6e 5f 66 6c 61 67 73 20 7c 3d 20 .token_flags |= 1a6c0 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 4c 4f 43 CKF_USER_PIN_LOC 1a6d0 4b 45 44 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 KED;.....return( 1a6e0 43 4b 52 5f 50 49 4e 5f 4c 4f 43 4b 45 44 29 3b CKR_PIN_LOCKED); 1a6f0 0a 09 09 7d 20 65 6c 73 65 20 69 66 20 28 6c 6f ...} else if (lo 1a700 67 69 6e 5f 72 65 74 20 3d 3d 20 43 41 43 4b 45 gin_ret == CACKE 1a710 59 5f 50 43 53 43 5f 45 5f 42 41 44 50 49 4e 29 Y_PCSC_E_BADPIN) 1a720 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB 1a730 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1a740 2e 20 20 49 6e 76 61 6c 69 64 20 50 49 4e 2e 22 . Invalid PIN." 1a750 29 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 6c );.....cackey_sl 1a760 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 74 6f 6b 65 ots[slotID].toke 1a770 6e 5f 66 6c 61 67 73 20 7c 3d 20 43 4b 46 5f 55 n_flags |= CKF_U 1a780 53 45 52 5f 50 49 4e 5f 43 4f 55 4e 54 5f 4c 4f SER_PIN_COUNT_LO 1a790 57 3b 0a 0a 09 09 09 69 66 20 28 74 72 69 65 73 W;.....if (tries 1a7a0 5f 72 65 6d 61 69 6e 69 6e 67 20 3d 3d 20 31 29 _remaining == 1) 1a7b0 20 7b 0a 09 09 09 09 63 61 63 6b 65 79 5f 73 6c {.....cackey_sl 1a7c0 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 74 6f 6b 65 ots[slotID].toke 1a7d0 6e 5f 66 6c 61 67 73 20 7c 3d 20 43 4b 46 5f 55 n_flags |= CKF_U 1a7e0 53 45 52 5f 50 49 4e 5f 46 49 4e 41 4c 5f 54 52 SER_PIN_FINAL_TR 1a7f0 59 3b 0a 09 09 09 7d 0a 0a 09 09 09 72 65 74 75 Y;....}.....retu 1a800 72 6e 28 43 4b 52 5f 50 49 4e 5f 49 4e 43 4f 52 rn(CKR_PIN_INCOR 1a810 52 45 43 54 29 3b 0a 09 09 7d 0a 0a 09 09 43 41 RECT);...}....CA 1a820 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1a830 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6b 6e 6f F("Error. Unkno 1a840 77 6e 20 65 72 72 6f 72 20 72 65 74 75 72 6e 65 wn error returne 1a850 64 20 66 72 6f 6d 20 63 61 63 6b 65 79 5f 6c 6f d from cackey_lo 1a860 67 69 6e 28 29 20 28 25 69 29 22 2c 20 6c 6f 67 gin() (%i)", log 1a870 69 6e 5f 72 65 74 29 3b 0a 0a 09 09 72 65 74 75 in_ret);....retu 1a880 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 1a890 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b RROR);..}...cack 1a8a0 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d ey_slots[slotID] 1a8b0 2e 74 6f 6b 65 6e 5f 66 6c 61 67 73 20 26 3d 20 .token_flags &= 1a8c0 7e 28 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 4c ~(CKF_USER_PIN_L 1a8d0 4f 43 4b 45 44 20 7c 20 43 4b 46 5f 55 53 45 52 OCKED | CKF_USER 1a8e0 5f 50 49 4e 5f 43 4f 55 4e 54 5f 4c 4f 57 20 7c _PIN_COUNT_LOW | 1a8f0 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52 45 51 55 49 CKF_LOGIN_REQUI 1a900 52 45 44 20 7c 20 43 4b 46 5f 55 53 45 52 5f 50 RED | CKF_USER_P 1a910 49 4e 5f 46 49 4e 41 4c 5f 54 52 59 29 3b 0a 0a IN_FINAL_TRY);.. 1a920 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 1a930 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 74 61 74 65 [hSession].state 1a940 20 3d 20 43 4b 53 5f 52 4f 5f 55 53 45 52 5f 46 = CKS_RO_USER_F 1a950 55 4e 43 54 49 4f 4e 53 3b 0a 0a 09 6d 75 74 65 UNCTIONS;...mute 1a960 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 1a970 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 1a980 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 1a990 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 1a9a0 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 1a9b0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1a9c0 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 "Error. Unlocki 1a9d0 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 1a9e0 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 1a9f0 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 1aa00 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1aa10 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 1aa20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK 1aa30 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 R_OK);...return( 1aa40 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 CKR_OK);.}..CK_D 1aa50 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 1aa60 4b 5f 52 56 2c 20 43 5f 4c 6f 67 6f 75 74 29 28 K_RV, C_Logout)( 1aa70 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 1aa80 45 20 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 43 E hSession) {..C 1aa90 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 K_SLOT_ID slotID 1aaa0 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 ;..int mutex_ret 1aab0 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 val;...CACKEY_DE 1aac0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 1aad0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 1aae0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 1aaf0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1ab00 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1ab10 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 1ab20 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1ab30 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 1ab40 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 1ab50 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f .}...if (hSessio 1ab60 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 n == 0 || hSessi 1ab70 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 on >= (sizeof(ca 1ab80 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f ckey_sessions) / 1ab90 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s 1aba0 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a essions[0]))) {. 1abb0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1abc0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 1abd0 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 ession out of ra 1abe0 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 nge.");......ret 1abf0 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 1ac00 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 1ac10 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 1ac20 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 1ac30 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 x_lock(cackey_bi 1ac40 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 glock);..if (mut 1ac50 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 1ac60 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1ac70 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1ac80 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e Locking failed. 1ac90 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1aca0 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 1acb0 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack 1acc0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1acd0 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a sion].active) {. 1ace0 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 1acf0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 1ad00 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 lock);....CACKEY 1ad10 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1ad20 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e rror. Session n 1ad30 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 ot active.");... 1ad40 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 ...return(CKR_SE 1ad50 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 SSION_HANDLE_INV 1ad60 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 ALID);..}...slot 1ad70 49 44 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 ID = cackey_sess 1ad80 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 1ad90 6c 6f 74 49 44 3b 0a 0a 09 69 66 20 28 73 6c 6f lotID;...if (slo 1ada0 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 tID < 0 || slotI 1adb0 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 D >= (sizeof(cac 1adc0 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a key_slots) / siz 1add0 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 eof(cackey_slots 1ade0 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE 1adf0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1ae00 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 Error. Invalid s 1ae10 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 lot requested (% 1ae20 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 lu), outside of 1ae30 76 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 6c valid range", sl 1ae40 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e otID);....return 1ae50 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 1ae60 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 OR);..}...if (ca 1ae70 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 ckey_slots[slotI 1ae80 44 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 D].active == 0) 1ae90 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1aea0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1aeb0 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 Invalid slot req 1aec0 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c uested (%lu), sl 1aed0 6f 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 ot not currently 1aee0 20 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 active", slotID 1aef0 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 );....cackey_mut 1af00 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 1af10 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 _biglock);....re 1af20 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 1af30 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 63 61 _ERROR);..}...ca 1af40 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1af50 65 73 73 69 6f 6e 5d 2e 73 74 61 74 65 20 3d 20 ession].state = 1af60 43 4b 53 5f 52 4f 5f 50 55 42 4c 49 43 5f 53 45 CKS_RO_PUBLIC_SE 1af70 53 53 49 4f 4e 3b 0a 09 63 61 63 6b 65 79 5f 73 SSION;..cackey_s 1af80 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 74 6f 6b lots[slotID].tok 1af90 65 6e 5f 66 6c 61 67 73 20 3d 20 43 4b 46 5f 4c en_flags = CKF_L 1afa0 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 3b 0a 0a OGIN_REQUIRED;.. 1afb0 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 1afc0 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 1afd0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1afe0 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 1aff0 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 1b000 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1b010 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e INTF("Error. Un 1b020 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 locking failed." 1b030 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1b040 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 1b050 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 1b060 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1b070 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 1b080 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 1b090 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 1b0a0 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 1b0b0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 72 65 ION(CK_RV, C_Cre 1b0c0 61 74 65 4f 62 6a 65 63 74 29 28 43 4b 5f 53 45 ateObject)(CK_SE 1b0d0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 1b0e0 73 73 69 6f 6e 2c 20 43 4b 5f 41 54 54 52 49 42 ssion, CK_ATTRIB 1b0f0 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 UTE_PTR pTemplat 1b100 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f e, CK_ULONG ulCo 1b110 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 unt, CK_OBJECT_H 1b120 41 4e 44 4c 45 5f 50 54 52 20 70 68 4f 62 6a 65 ANDLE_PTR phObje 1b130 63 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 ct) {..CACKEY_DE 1b140 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 1b150 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 1b160 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 1b170 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1b180 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1b190 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 1b1a0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1b1b0 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 1b1c0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 1b1d0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 1b1e0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 1b1f0 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 1b200 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 1b210 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 1b220 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1b230 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 1b240 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1b250 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 1b260 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 1b270 4b 5f 52 56 2c 20 43 5f 43 6f 70 79 4f 62 6a 65 K_RV, C_CopyObje 1b280 63 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 ct)(CK_SESSION_H 1b290 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 1b2a0 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 1b2b0 20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 41 54 54 hObject, CK_ATT 1b2c0 52 49 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 RIBUTE_PTR pTemp 1b2d0 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 late, CK_ULONG u 1b2e0 6c 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 lCount, CK_OBJEC 1b2f0 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4e T_HANDLE_PTR phN 1b300 65 77 4f 62 6a 65 63 74 29 20 7b 0a 09 43 41 43 ewObject) {..CAC 1b310 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1b320 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 1b330 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 1b340 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 1b350 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1b360 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 1b370 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 1b380 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 1b390 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 1b3a0 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 1b3b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1b3c0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 1b3d0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1b3e0 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 1b3f0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1b400 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 1b410 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 1b420 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 1b430 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 1b440 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 TION(CK_RV, C_De 1b450 73 74 72 6f 79 4f 62 6a 65 63 74 29 28 43 4b 5f stroyObject)(CK_ 1b460 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 1b470 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 Session, CK_OBJE 1b480 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 CT_HANDLE hObjec 1b490 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 t) {..CACKEY_DEB 1b4a0 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 1b4b0 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 1b4c0 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 1b4d0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1b4e0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1b4f0 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 1b500 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1b510 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 1b520 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 1b530 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 1b540 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1b550 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 1b560 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 1b570 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 1b580 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 1b590 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 1b5a0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1b5b0 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 1b5c0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 1b5d0 5f 52 56 2c 20 43 5f 47 65 74 4f 62 6a 65 63 74 _RV, C_GetObject 1b5e0 53 69 7a 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e Size)(CK_SESSION 1b5f0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 1b600 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 1b610 4c 45 20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 55 LE hObject, CK_U 1b620 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 7a 65 LONG_PTR pulSize 1b630 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 1b640 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 1b650 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 1b660 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1b670 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1b680 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1b690 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1b6a0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1b6b0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1b6c0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1b6d0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1b6e0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1b6f0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 1b700 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 1b710 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 1b720 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1b730 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 1b740 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1b750 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 1b760 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1b770 52 56 2c 20 43 5f 47 65 74 41 74 74 72 69 62 75 RV, C_GetAttribu 1b780 74 65 56 61 6c 75 65 29 28 43 4b 5f 53 45 53 53 teValue)(CK_SESS 1b790 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 1b7a0 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 ion, CK_OBJECT_H 1b7b0 41 4e 44 4c 45 20 68 4f 62 6a 65 63 74 2c 20 43 ANDLE hObject, C 1b7c0 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 K_ATTRIBUTE_PTR 1b7d0 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c pTemplate, CK_UL 1b7e0 4f 4e 47 20 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 ONG ulCount) {.. 1b7f0 43 4b 5f 41 54 54 52 49 42 55 54 45 20 2a 63 75 CK_ATTRIBUTE *cu 1b800 72 72 5f 61 74 74 72 3b 0a 09 73 74 72 75 63 74 rr_attr;..struct 1b810 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 cackey_identity 1b820 20 2a 69 64 65 6e 74 69 74 79 3b 0a 09 75 6e 73 *identity;..uns 1b830 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 65 6e 74 igned long ident 1b840 69 74 79 5f 69 64 78 2c 20 61 74 74 72 5f 69 64 ity_idx, attr_id 1b850 78 2c 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 x, sess_attr_idx 1b860 2c 20 6e 75 6d 5f 69 64 73 3b 0a 09 69 6e 74 20 , num_ids;..int 1b870 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 09 43 mutex_retval;..C 1b880 4b 5f 52 56 20 72 65 74 76 61 6c 20 3d 20 43 4b K_RV retval = CK 1b890 52 5f 4f 4b 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 R_OK;..CK_VOID_P 1b8a0 54 52 20 70 56 61 6c 75 65 3b 0a 09 43 4b 5f 55 TR pValue;..CK_U 1b8b0 4c 4f 4e 47 20 75 6c 56 61 6c 75 65 4c 65 6e 3b LONG ulValueLen; 1b8c0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1b8d0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 1b8e0 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 1b8f0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 1b900 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1b910 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 1b920 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 1b930 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1b940 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 1b950 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 1b960 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d .if (hSession == 1b970 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 0 || hSession > 1b980 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 = (sizeof(cackey 1b990 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a _sessions) / siz 1b9a0 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi 1b9b0 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 ons[0]))) {...CA 1b9c0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1b9d0 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 1b9e0 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e on out of range. 1b9f0 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 1ba00 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 CKR_SESSION_HAND 1ba10 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 1ba20 0a 09 69 66 20 28 68 4f 62 6a 65 63 74 20 3d 3d ..if (hObject == 1ba30 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 1ba40 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1ba50 6f 72 2e 20 20 4f 62 6a 65 63 74 20 68 61 6e 64 or. Object hand 1ba60 6c 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e le out of range. 1ba70 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 1ba80 43 4b 52 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CKR_OBJECT_HANDL 1ba90 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 1baa0 09 69 66 20 28 75 6c 43 6f 75 6e 74 20 3d 3d 20 .if (ulCount == 1bab0 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 74 20 0) {.../* Short 1bac0 63 69 72 63 75 69 74 2c 20 69 66 20 7a 65 72 6f circuit, if zero 1bad0 20 6f 62 6a 65 63 74 73 20 77 65 72 65 20 73 70 objects were sp 1bae0 65 63 69 66 69 65 64 20 72 65 74 75 72 6e 20 7a ecified return z 1baf0 65 72 6f 20 69 74 65 6d 73 20 69 6d 6d 65 64 69 ero items immedi 1bb00 61 74 65 6c 79 20 2a 2f 0a 09 09 43 41 43 4b 45 ately */...CACKE 1bb10 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1bb20 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 1bb30 20 28 25 69 29 20 28 73 68 6f 72 74 20 63 69 72 (%i) (short cir 1bb40 63 75 69 74 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b cuit)", CKR_OK); 1bb50 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ....return(CKR_O 1bb60 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 54 65 K);..}...if (pTe 1bb70 6d 70 6c 61 74 65 20 3d 3d 20 4e 55 4c 4c 29 20 mplate == NULL) 1bb80 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1bb90 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1bba0 20 70 54 65 6d 70 6c 61 74 65 20 69 73 20 4e 55 pTemplate is NU 1bbb0 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 1bbc0 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 1bbd0 41 44 29 3b 0a 09 7d 0a 0a 09 69 64 65 6e 74 69 AD);..}...identi 1bbe0 74 79 5f 69 64 78 20 3d 20 68 4f 62 6a 65 63 74 ty_idx = hObject 1bbf0 20 2d 20 31 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 - 1;...mutex_re 1bc00 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 1bc10 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 1bc20 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 1bc30 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 1bc40 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1bc50 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1bc60 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 1bc70 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1bc80 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 1bc90 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 R);..}...if (!ca 1bca0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1bcb0 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 ession].active) 1bcc0 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 1bcd0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 1bce0 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 1bcf0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1bd00 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 1bd10 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 1bd20 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 1bd30 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 1bd40 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6e 75 NVALID);..}...nu 1bd50 6d 5f 69 64 73 20 3d 20 63 61 63 6b 65 79 5f 73 m_ids = cackey_s 1bd60 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1bd70 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 ].identities_cou 1bd80 6e 74 3b 0a 0a 09 69 66 20 28 69 64 65 6e 74 69 nt;...if (identi 1bd90 74 79 5f 69 64 78 20 3e 3d 20 6e 75 6d 5f 69 64 ty_idx >= num_id 1bda0 73 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 s) {...cackey_mu 1bdb0 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 1bdc0 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....C 1bdd0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1bde0 54 46 28 22 45 72 72 6f 72 2e 20 20 4f 62 6a 65 TF("Error. Obje 1bdf0 63 74 20 68 61 6e 64 6c 65 20 6f 75 74 20 6f 66 ct handle out of 1be00 20 72 61 6e 67 65 2e 20 20 69 64 65 6e 74 69 74 range. identit 1be10 79 5f 69 64 78 20 3d 20 25 6c 75 2c 20 6e 75 6d y_idx = %lu, num 1be20 5f 69 64 73 20 3d 20 25 6c 75 2e 22 2c 20 28 75 _ids = %lu.", (u 1be30 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 69 64 nsigned long) id 1be40 65 6e 74 69 74 79 5f 69 64 78 2c 20 28 75 6e 73 entity_idx, (uns 1be50 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6e 75 6d 5f igned long) num_ 1be60 69 64 73 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 ids);....return( 1be70 43 4b 52 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CKR_OBJECT_HANDL 1be80 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 1be90 09 69 64 65 6e 74 69 74 79 20 3d 20 26 63 61 63 .identity = &cac 1bea0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1beb0 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 ssion].identitie 1bec0 73 5b 69 64 65 6e 74 69 74 79 5f 69 64 78 5d 3b s[identity_idx]; 1bed0 0a 0a 09 66 6f 72 20 28 61 74 74 72 5f 69 64 78 ...for (attr_idx 1bee0 20 3d 20 30 3b 20 61 74 74 72 5f 69 64 78 20 3c = 0; attr_idx < 1bef0 20 75 6c 43 6f 75 6e 74 3b 20 61 74 74 72 5f 69 ulCount; attr_i 1bf00 64 78 2b 2b 29 20 7b 0a 09 09 63 75 72 72 5f 61 dx++) {...curr_a 1bf10 74 74 72 20 3d 20 26 70 54 65 6d 70 6c 61 74 65 ttr = &pTemplate 1bf20 5b 61 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 70 [attr_idx];....p 1bf30 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 Value = NULL;... 1bf40 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 28 43 4b ulValueLen = (CK 1bf50 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 0a 09 09 43 41 _LONG) -1;....CA 1bf60 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1bf70 46 28 22 4c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 F("Looking for a 1bf80 74 74 72 69 62 75 74 65 20 30 78 25 30 38 6c 78 ttribute 0x%08lx 1bf90 20 28 69 64 65 6e 74 69 74 79 3a 25 6c 75 29 20 (identity:%lu) 1bfa0 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 ...", (unsigned 1bfb0 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 2d long) curr_attr- 1bfc0 3e 74 79 70 65 2c 20 28 75 6e 73 69 67 6e 65 64 >type, (unsigned 1bfd0 20 6c 6f 6e 67 29 20 69 64 65 6e 74 69 74 79 5f long) identity_ 1bfe0 69 64 78 29 3b 0a 0a 09 09 66 6f 72 20 28 73 65 idx);....for (se 1bff0 73 73 5f 61 74 74 72 5f 69 64 78 20 3d 20 30 3b ss_attr_idx = 0; 1c000 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 20 3c sess_attr_idx < 1c010 20 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 identity->attri 1c020 62 75 74 65 73 5f 63 6f 75 6e 74 3b 20 73 65 73 butes_count; ses 1c030 73 5f 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a s_attr_idx++) {. 1c040 09 09 09 69 66 20 28 69 64 65 6e 74 69 74 79 2d ...if (identity- 1c050 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 >attributes[sess 1c060 5f 61 74 74 72 5f 69 64 78 5d 2e 74 79 70 65 20 _attr_idx].type 1c070 3d 3d 20 63 75 72 72 5f 61 74 74 72 2d 3e 74 79 == curr_attr->ty 1c080 70 65 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 pe) {.....CACKEY 1c090 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 1c0a0 2e 2e 2e 20 66 6f 75 6e 64 20 69 74 2c 20 70 56 ... found it, pV 1c0b0 61 6c 75 65 20 3d 20 25 70 2c 20 75 6c 56 61 6c alue = %p, ulVal 1c0c0 75 65 4c 65 6e 20 3d 20 25 6c 75 22 2c 20 69 64 ueLen = %lu", id 1c0d0 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 75 74 entity->attribut 1c0e0 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 es[sess_attr_idx 1c0f0 5d 2e 70 56 61 6c 75 65 2c 20 69 64 65 6e 74 69 ].pValue, identi 1c100 74 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 ty->attributes[s 1c110 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c ess_attr_idx].ul 1c120 56 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 09 09 0a ValueLen);...... 1c130 09 09 09 09 70 56 61 6c 75 65 20 3d 20 69 64 65 ....pValue = ide 1c140 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 75 74 65 ntity->attribute 1c150 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d s[sess_attr_idx] 1c160 2e 70 56 61 6c 75 65 3b 0a 09 09 09 09 75 6c 56 .pValue;.....ulV 1c170 61 6c 75 65 4c 65 6e 20 3d 20 69 64 65 6e 74 69 alueLen = identi 1c180 74 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 ty->attributes[s 1c190 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c ess_attr_idx].ul 1c1a0 56 61 6c 75 65 4c 65 6e 3b 0a 09 09 09 7d 0a 09 ValueLen;....}.. 1c1b0 09 7d 0a 0a 09 09 69 66 20 28 63 75 72 72 5f 61 .}....if (curr_a 1c1c0 74 74 72 2d 3e 70 56 61 6c 75 65 20 26 26 20 70 ttr->pValue && p 1c1d0 56 61 6c 75 65 29 20 7b 0a 09 09 09 69 66 20 28 Value) {....if ( 1c1e0 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c curr_attr->ulVal 1c1f0 75 65 4c 65 6e 20 3e 3d 20 75 6c 56 61 6c 75 65 ueLen >= ulValue 1c200 4c 65 6e 29 20 7b 0a 09 09 09 09 6d 65 6d 63 70 Len) {.....memcp 1c210 79 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 y(curr_attr->pVa 1c220 6c 75 65 2c 20 70 56 61 6c 75 65 2c 20 75 6c 56 lue, pValue, ulV 1c230 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 09 7d 20 65 alueLen);....} e 1c240 6c 73 65 20 7b 0a 09 09 09 09 75 6c 56 61 6c 75 lse {.....ulValu 1c250 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47 29 eLen = (CK_LONG) 1c260 20 2d 31 3b 0a 0a 09 09 09 09 72 65 74 76 61 6c -1;......retval 1c270 20 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f = CKR_BUFFER_TO 1c280 4f 5f 53 4d 41 4c 4c 3b 0a 09 09 09 7d 0a 09 09 O_SMALL;....}... 1c290 7d 0a 0a 09 09 63 75 72 72 5f 61 74 74 72 2d 3e }....curr_attr-> 1c2a0 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 75 6c 56 ulValueLen = ulV 1c2b0 61 6c 75 65 4c 65 6e 3b 0a 09 7d 0a 0a 09 6d 75 alueLen;..}...mu 1c2c0 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 1c2d0 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1c2e0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1c2f0 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 1c300 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 1c310 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1c320 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 1c330 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 1c340 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 1c350 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 1c360 0a 0a 09 69 66 20 28 72 65 74 76 61 6c 20 3d 3d ...if (retval == 1c370 20 43 4b 52 5f 41 54 54 52 49 42 55 54 45 5f 54 CKR_ATTRIBUTE_T 1c380 59 50 45 5f 49 4e 56 41 4c 49 44 29 20 7b 0a 09 YPE_INVALID) {.. 1c390 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1c3a0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 1c3b0 43 4b 52 5f 41 54 54 52 49 42 55 54 45 5f 54 59 CKR_ATTRIBUTE_TY 1c3c0 50 45 5f 49 4e 56 41 4c 49 44 20 28 25 69 29 22 PE_INVALID (%i)" 1c3d0 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c 29 3b , (int) retval); 1c3e0 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 72 65 74 ..} else if (ret 1c3f0 76 61 6c 20 3d 3d 20 43 4b 52 5f 42 55 46 46 45 val == CKR_BUFFE 1c400 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a 09 R_TOO_SMALL) {.. 1c410 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1c420 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 1c430 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 CKR_BUFFER_TOO_S 1c440 4d 41 4c 4c 20 28 25 69 29 22 2c 20 28 69 6e 74 MALL (%i)", (int 1c450 29 20 72 65 74 76 61 6c 29 3b 0a 09 7d 20 65 6c ) retval);..} el 1c460 73 65 20 69 66 20 28 72 65 74 76 61 6c 20 3d 3d se if (retval == 1c470 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 CKR_OK) {...CAC 1c480 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1c490 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1c4a0 4f 4b 20 28 25 69 29 22 2c 20 28 69 6e 74 29 20 OK (%i)", (int) 1c4b0 72 65 74 76 61 6c 29 3b 0a 09 7d 20 65 6c 73 65 retval);..} else 1c4c0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1c4d0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 1c4e0 69 6e 67 20 25 69 22 2c 20 28 69 6e 74 29 20 72 ing %i", (int) r 1c4f0 65 74 76 61 6c 29 3b 0a 09 7d 0a 0a 09 72 65 74 etval);..}...ret 1c500 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a urn(retval);.}.. 1c510 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 1c520 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 74 41 ON(CK_RV, C_SetA 1c530 74 74 72 69 62 75 74 65 56 61 6c 75 65 29 28 43 ttributeValue)(C 1c540 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 1c550 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 hSession, CK_OB 1c560 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a JECT_HANDLE hObj 1c570 65 63 74 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 ect, CK_ATTRIBUT 1c580 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c E_PTR pTemplate, 1c590 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e CK_ULONG ulCoun 1c5a0 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 t) {..CACKEY_DEB 1c5b0 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 1c5c0 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 1c5d0 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 1c5e0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1c5f0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1c600 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 1c610 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1c620 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 1c630 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 1c640 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 1c650 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1c660 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 1c670 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 1c680 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 1c690 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 1c6a0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 1c6b0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1c6c0 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 1c6d0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 1c6e0 5f 52 56 2c 20 43 5f 46 69 6e 64 4f 62 6a 65 63 _RV, C_FindObjec 1c6f0 74 73 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 tsInit)(CK_SESSI 1c700 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 1c710 6f 6e 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45 on, CK_ATTRIBUTE 1c720 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 _PTR pTemplate, 1c730 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 CK_ULONG ulCount 1c740 29 20 7b 0a 09 43 4b 5f 53 4c 4f 54 5f 49 44 20 ) {..CK_SLOT_ID 1c750 73 6c 6f 74 49 44 3b 0a 09 69 6e 74 20 6d 75 74 slotID;..int mut 1c760 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 ex_retval;...CAC 1c770 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1c780 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 1c790 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 1c7a0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 1c7b0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1c7c0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 1c7d0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 1c7e0 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 1c7f0 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 1c800 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 ZED);..}...if (h 1c810 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 Session == 0 || 1c820 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a hSession >= (siz 1c830 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi 1c840 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 ons) / sizeof(ca 1c850 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d ckey_sessions[0] 1c860 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ))) {...CACKEY_D 1c870 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1c880 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 or. Session out 1c890 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 of range.");... 1c8a0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 ...return(CKR_SE 1c8b0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 SSION_HANDLE_INV 1c8c0 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 ALID);..}...mute 1c8d0 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 1c8e0 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 y_mutex_lock(cac 1c8f0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 1c900 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 1c910 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 1c920 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1c930 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 rror. Locking f 1c940 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 ailed.");....ret 1c950 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 1c960 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 ERROR);..}...if 1c970 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (!cackey_session 1c980 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 s[hSession].acti 1c990 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d ve) {...cackey_m 1c9a0 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 1c9b0 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 1c9c0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1c9d0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 NTF("Error. Ses 1c9e0 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e sion not active. 1c9f0 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 1ca00 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 CKR_SESSION_HAND 1ca10 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 1ca20 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73 ..if (cackey_ses 1ca30 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1ca40 73 65 61 72 63 68 5f 61 63 74 69 76 65 29 20 7b search_active) { 1ca50 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 1ca60 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 1ca70 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 1ca80 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1ca90 45 72 72 6f 72 2e 20 20 53 65 61 72 63 68 20 61 Error. Search a 1caa0 6c 72 65 61 64 79 20 61 63 74 69 76 65 2e 22 29 lready active.") 1cab0 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 1cac0 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 41 43 54 49 R_OPERATION_ACTI 1cad0 56 45 29 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 49 44 VE);..}...slotID 1cae0 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f = cackey_sessio 1caf0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f ns[hSession].slo 1cb00 74 49 44 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 49 tID;...if (slotI 1cb10 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 D < 0 || slotID 1cb20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 >= (sizeof(cacke 1cb30 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f y_slots) / sizeo 1cb40 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 f(cackey_slots[0 1cb50 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ]))) {...CACKEY_ 1cb60 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1cb70 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f ror. Invalid slo 1cb80 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 t requested (%lu 1cb90 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 ), outside of va 1cba0 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 lid range", slot 1cbb0 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 ID);....return(C 1cbc0 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 1cbd0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b );..}...if (cack 1cbe0 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d ey_slots[slotID] 1cbf0 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a .active == 0) {. 1cc00 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1cc10 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e RINTF("Error. In 1cc20 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 valid slot reque 1cc30 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 sted (%lu), slot 1cc40 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 not currently a 1cc50 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b ctive", slotID); 1cc60 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 ....cackey_mutex 1cc70 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 1cc80 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 iglock);....retu 1cc90 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 1cca0 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 RROR);..}...if ( 1ccb0 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo 1ccc0 74 49 44 5d 2e 73 6c 6f 74 5f 72 65 73 65 74 29 tID].slot_reset) 1ccd0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1cce0 47 5f 50 52 49 4e 54 46 28 22 54 68 65 20 73 6c G_PRINTF("The sl 1ccf0 6f 74 20 68 61 73 20 62 65 65 6e 20 72 65 73 65 ot has been rese 1cd00 74 20 73 69 6e 63 65 20 77 65 20 6c 61 73 74 20 t since we last 1cd10 6c 6f 6f 6b 65 64 20 66 6f 72 20 69 64 65 6e 74 looked for ident 1cd20 69 74 69 65 73 20 2d 2d 20 72 65 73 63 61 6e 6e ities -- rescann 1cd30 69 6e 67 22 29 3b 0a 0a 09 09 69 66 20 28 63 61 ing");....if (ca 1cd40 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1cd50 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 ession].identiti 1cd60 65 73 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 es != NULL) {... 1cd70 09 63 61 63 6b 65 79 5f 66 72 65 65 5f 69 64 65 .cackey_free_ide 1cd80 6e 74 69 74 69 65 73 28 63 61 63 6b 65 79 5f 73 ntities(cackey_s 1cd90 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1cda0 5d 2e 69 64 65 6e 74 69 74 69 65 73 2c 20 63 61 ].identities, ca 1cdb0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1cdc0 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 ession].identiti 1cdd0 65 73 5f 63 6f 75 6e 74 29 3b 0a 0a 09 09 09 63 es_count);.....c 1cde0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1cdf0 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 Session].identit 1ce00 69 65 73 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 63 ies = NULL;....c 1ce10 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1ce20 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 Session].identit 1ce30 69 65 73 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 ies_count = 0;.. 1ce40 09 7d 0a 0a 09 09 69 66 20 28 63 61 63 6b 65 79 .}....if (cackey 1ce50 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 6c _slots[slotID].l 1ce60 61 62 65 6c 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a abel != NULL) {. 1ce70 09 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f 73 ...free(cackey_s 1ce80 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 6c 61 62 lots[slotID].lab 1ce90 65 6c 29 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 el);....cackey_s 1cea0 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 6c 61 62 lots[slotID].lab 1ceb0 65 6c 20 3d 20 4e 55 4c 4c 3b 0a 09 09 7d 0a 0a el = NULL;...}.. 1cec0 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 ..cackey_slots[s 1ced0 6c 6f 74 49 44 5d 2e 73 6c 6f 74 5f 72 65 73 65 lotID].slot_rese 1cee0 74 20 3d 20 30 3b 0a 09 09 63 61 63 6b 65 79 5f t = 0;...cackey_ 1cef0 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 74 6f slots[slotID].to 1cf00 6b 65 6e 5f 66 6c 61 67 73 20 3d 20 43 4b 46 5f ken_flags = CKF_ 1cf10 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 3b 0a LOGIN_REQUIRED;. 1cf20 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f .}...if (cackey_ 1cf30 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1cf40 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 3d 3d n].identities == 1cf50 20 4e 55 4c 4c 29 20 7b 0a 09 09 63 61 63 6b 65 NULL) {...cacke 1cf60 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 1cf70 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 ion].identities 1cf80 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 69 64 = cackey_read_id 1cf90 65 6e 74 69 74 69 65 73 28 26 63 61 63 6b 65 79 entities(&cackey 1cfa0 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2c 20 _slots[slotID], 1cfb0 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 &cackey_sessions 1cfc0 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 [hSession].ident 1cfd0 69 74 69 65 73 5f 63 6f 75 6e 74 29 3b 0a 09 7d ities_count);..} 1cfe0 0a 0a 09 69 66 20 28 70 54 65 6d 70 6c 61 74 65 ...if (pTemplate 1cff0 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 69 66 != NULL) {...if 1d000 20 28 75 6c 43 6f 75 6e 74 20 21 3d 20 30 29 20 (ulCount != 0) 1d010 7b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 {....cackey_sess 1d020 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 1d030 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e earch_query_coun 1d040 74 20 3d 20 75 6c 43 6f 75 6e 74 3b 0a 09 09 09 t = ulCount;.... 1d050 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1d060 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 hSession].search 1d070 5f 71 75 65 72 79 20 3d 20 6d 61 6c 6c 6f 63 28 _query = malloc( 1d080 75 6c 43 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 ulCount * sizeof 1d090 28 2a 70 54 65 6d 70 6c 61 74 65 29 29 3b 0a 0a (*pTemplate));.. 1d0a0 09 09 09 6d 65 6d 63 70 79 28 63 61 63 6b 65 79 ...memcpy(cackey 1d0b0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1d0c0 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 on].search_query 1d0d0 2c 20 70 54 65 6d 70 6c 61 74 65 2c 20 75 6c 43 , pTemplate, ulC 1d0e0 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 28 2a 70 ount * sizeof(*p 1d0f0 54 65 6d 70 6c 61 74 65 29 29 3b 0a 09 09 7d 20 Template));...} 1d100 65 6c 73 65 20 7b 0a 09 09 09 63 61 63 6b 65 79 else {....cackey 1d110 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1d120 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 on].search_query 1d130 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 09 09 63 _count = 0;....c 1d140 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1d150 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 1d160 71 75 65 72 79 20 3d 20 4e 55 4c 4c 3b 0a 09 09 query = NULL;... 1d170 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 }..} else {...if 1d180 20 28 75 6c 43 6f 75 6e 74 20 21 3d 20 30 29 20 (ulCount != 0) 1d190 7b 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {....cackey_mute 1d1a0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 1d1b0 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 09 43 41 biglock);.....CA 1d1c0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1d1d0 46 28 22 45 72 72 6f 72 2e 20 20 53 65 61 72 63 F("Error. Searc 1d1e0 68 20 71 75 65 72 79 20 73 70 65 63 69 66 69 65 h query specifie 1d1f0 64 20 61 73 20 4e 55 4c 4c 2c 20 62 75 74 20 6e d as NULL, but n 1d200 75 6d 62 65 72 20 6f 66 20 71 75 65 72 79 20 74 umber of query t 1d210 65 72 6d 73 20 6e 6f 74 20 73 70 65 63 69 66 69 erms not specifi 1d220 65 64 20 61 73 20 30 2e 22 29 3b 0a 0a 09 09 09 ed as 0.");..... 1d230 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d return(CKR_ARGUM 1d240 45 4e 54 53 5f 42 41 44 29 3b 0a 09 09 7d 0a 0a ENTS_BAD);...}.. 1d250 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 1d260 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 s[hSession].sear 1d270 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 20 3d ch_query_count = 1d280 20 30 3b 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 0;...cackey_ses 1d290 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1d2a0 73 65 61 72 63 68 5f 71 75 65 72 79 20 3d 20 4e search_query = N 1d2b0 55 4c 4c 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 ULL;..}...cackey 1d2c0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1d2d0 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 74 69 76 on].search_activ 1d2e0 65 20 3d 20 31 3b 0a 09 63 61 63 6b 65 79 5f 73 e = 1;..cackey_s 1d2f0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1d300 5d 2e 73 65 61 72 63 68 5f 63 75 72 72 5f 69 64 ].search_curr_id 1d310 20 3d 20 30 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 = 0;...mutex_re 1d320 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 1d330 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 1d340 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 1d350 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 1d360 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 1d370 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1d380 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 or. Unlocking f 1d390 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 ailed.");....ret 1d3a0 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 1d3b0 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 ERROR);..}...CAC 1d3c0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1d3d0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1d3e0 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b OK (%i)", CKR_OK 1d3f0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 1d400 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e OK);.}..CK_DEFIN 1d410 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 1d420 2c 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 29 , C_FindObjects) 1d430 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 1d440 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 1d450 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 OBJECT_HANDLE_PT 1d460 52 20 70 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 55 R phObject, CK_U 1d470 4c 4f 4e 47 20 75 6c 4d 61 78 4f 62 6a 65 63 74 LONG ulMaxObject 1d480 43 6f 75 6e 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f Count, CK_ULONG_ 1d490 50 54 52 20 70 75 6c 4f 62 6a 65 63 74 43 6f 75 PTR pulObjectCou 1d4a0 6e 74 29 20 7b 0a 09 73 74 72 75 63 74 20 63 61 nt) {..struct ca 1d4b0 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 63 ckey_identity *c 1d4c0 75 72 72 5f 69 64 3b 0a 09 43 4b 5f 41 54 54 52 urr_id;..CK_ATTR 1d4d0 49 42 55 54 45 20 2a 63 75 72 72 5f 61 74 74 72 IBUTE *curr_attr 1d4e0 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 63 75 72 72 ;..CK_ULONG curr 1d4f0 5f 69 64 5f 69 64 78 2c 20 63 75 72 72 5f 6f 75 _id_idx, curr_ou 1d500 74 5f 69 64 5f 69 64 78 2c 20 63 75 72 72 5f 61 t_id_idx, curr_a 1d510 74 74 72 5f 69 64 78 2c 20 73 65 73 73 5f 61 74 ttr_idx, sess_at 1d520 74 72 5f 69 64 78 3b 0a 09 43 4b 5f 55 4c 4f 4e tr_idx;..CK_ULON 1d530 47 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 2c G matched_count, 1d540 20 70 72 65 76 5f 6d 61 74 63 68 65 64 5f 63 6f prev_matched_co 1d550 75 6e 74 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f unt;..int mutex_ 1d560 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 retval;...CACKEY 1d570 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 1d580 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 1d590 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 1d5a0 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 1d5b0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1d5c0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 1d5d0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 1d5e0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 1d5f0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 1d600 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 75 6c 4f );..}...if (pulO 1d610 62 6a 65 63 74 43 6f 75 6e 74 20 3d 3d 20 4e 55 bjectCount == NU 1d620 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 1d630 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1d640 6f 72 2e 20 20 70 75 6c 4f 62 6a 65 63 74 43 6f or. pulObjectCo 1d650 75 6e 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a unt is NULL.");. 1d660 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 1d670 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} 1d680 0a 0a 09 69 66 20 28 70 68 4f 62 6a 65 63 74 20 ...if (phObject 1d690 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c 4d 61 78 == NULL && ulMax 1d6a0 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 3d 20 30 ObjectCount == 0 1d6b0 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 74 20 63 ) {.../* Short c 1d6c0 69 72 63 75 69 74 2c 20 69 66 20 7a 65 72 6f 20 ircuit, if zero 1d6d0 6f 62 6a 65 63 74 73 20 77 65 72 65 20 73 70 65 objects were spe 1d6e0 63 69 66 69 65 64 20 72 65 74 75 72 6e 20 7a 65 cified return ze 1d6f0 72 6f 20 69 74 65 6d 73 20 69 6d 6d 65 64 69 61 ro items immedia 1d700 74 65 6c 79 20 2a 2f 0a 09 09 2a 70 75 6c 4f 62 tely */...*pulOb 1d710 6a 65 63 74 43 6f 75 6e 74 20 3d 20 30 3b 0a 0a jectCount = 0;.. 1d720 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1d730 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 1d740 20 43 4b 52 5f 4f 4b 20 28 25 69 29 20 28 73 68 CKR_OK (%i) (sh 1d750 6f 72 74 20 63 69 72 63 75 69 74 29 22 2c 20 43 ort circuit)", C 1d760 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 KR_OK);....retur 1d770 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 n(CKR_OK);..}... 1d780 69 66 20 28 70 68 4f 62 6a 65 63 74 20 3d 3d 20 if (phObject == 1d790 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY 1d7a0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1d7b0 72 72 6f 72 2e 20 20 70 68 4f 62 6a 65 63 74 20 rror. phObject 1d7c0 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 is NULL.");....r 1d7d0 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 eturn(CKR_ARGUME 1d7e0 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 NTS_BAD);..}...i 1d7f0 66 20 28 75 6c 4d 61 78 4f 62 6a 65 63 74 43 6f f (ulMaxObjectCo 1d800 75 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 unt == 0) {...CA 1d810 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1d820 46 28 22 45 72 72 6f 72 2e 20 20 4d 61 78 69 6d F("Error. Maxim 1d830 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 6f 62 6a um number of obj 1d840 65 63 74 73 20 73 70 65 63 69 66 69 65 64 20 61 ects specified a 1d850 73 20 7a 65 72 6f 2e 22 29 3b 0a 0a 09 09 72 65 s zero.");....re 1d860 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 1d870 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if 1d880 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 (hSession == 0 1d890 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 || hSession >= ( 1d8a0 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 1d8b0 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 1d8c0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 1d8d0 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE 1d8e0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1d8f0 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 1d900 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b out of range."); 1d910 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 1d920 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 1d930 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d INVALID);..}...m 1d940 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 1d950 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( 1d960 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 1d970 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 1d980 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 1d990 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1d9a0 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e ("Error. Lockin 1d9b0 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 1d9c0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 1d9d0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 1d9e0 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 if (!cackey_sess 1d9f0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 ions[hSession].a 1da00 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 ctive) {...cacke 1da10 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 1da20 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 1da30 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1da40 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1da50 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 Session not acti 1da60 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 ve.");......retu 1da70 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 rn(CKR_SESSION_H 1da80 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a ANDLE_INVALID);. 1da90 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 1daa0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1dab0 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 74 69 76 on].search_activ 1dac0 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 e) {...cackey_mu 1dad0 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 1dae0 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....C 1daf0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1db00 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 61 72 TF("Error. Sear 1db10 63 68 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 ch not active.") 1db20 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 1db30 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f R_OPERATION_NOT_ 1db40 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1db50 0a 0a 09 63 75 72 72 5f 6f 75 74 5f 69 64 5f 69 ...curr_out_id_i 1db60 64 78 20 3d 20 30 3b 0a 09 66 6f 72 20 28 63 75 dx = 0;..for (cu 1db70 72 72 5f 69 64 5f 69 64 78 20 3d 20 63 61 63 6b rr_id_idx = cack 1db80 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1db90 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 63 75 72 sion].search_cur 1dba0 72 5f 69 64 3b 20 63 75 72 72 5f 69 64 5f 69 64 r_id; curr_id_id 1dbb0 78 20 3c 20 63 61 63 6b 65 79 5f 73 65 73 73 69 x < cackey_sessi 1dbc0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 ons[hSession].id 1dbd0 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 20 26 entities_count & 1dbe0 26 20 75 6c 4d 61 78 4f 62 6a 65 63 74 43 6f 75 & ulMaxObjectCou 1dbf0 6e 74 3b 20 63 75 72 72 5f 69 64 5f 69 64 78 2b nt; curr_id_idx+ 1dc00 2b 29 20 7b 0a 09 09 63 75 72 72 5f 69 64 20 3d +) {...curr_id = 1dc10 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e &cackey_session 1dc20 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 1dc30 74 69 74 69 65 73 5b 63 75 72 72 5f 69 64 5f 69 tities[curr_id_i 1dc40 64 78 5d 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 dx];....CACKEY_D 1dc50 45 42 55 47 5f 50 52 49 4e 54 46 28 22 50 72 6f EBUG_PRINTF("Pro 1dc60 63 65 73 73 69 6e 67 20 69 64 65 6e 74 69 74 79 cessing identity 1dc70 3a 25 6c 75 22 2c 20 28 75 6e 73 69 67 6e 65 64 :%lu", (unsigned 1dc80 20 6c 6f 6e 67 29 20 63 75 72 72 5f 69 64 5f 69 long) curr_id_i 1dc90 64 78 29 3b 0a 0a 09 09 6d 61 74 63 68 65 64 5f dx);....matched_ 1dca0 63 6f 75 6e 74 20 3d 20 30 3b 0a 0a 09 09 66 6f count = 0;....fo 1dcb0 72 20 28 63 75 72 72 5f 61 74 74 72 5f 69 64 78 r (curr_attr_idx 1dcc0 20 3d 20 30 3b 20 63 75 72 72 5f 61 74 74 72 5f = 0; curr_attr_ 1dcd0 69 64 78 20 3c 20 63 61 63 6b 65 79 5f 73 65 73 idx < cackey_ses 1dce0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1dcf0 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 search_query_cou 1dd00 6e 74 3b 20 63 75 72 72 5f 61 74 74 72 5f 69 64 nt; curr_attr_id 1dd10 78 2b 2b 29 20 7b 0a 09 09 09 70 72 65 76 5f 6d x++) {....prev_m 1dd20 61 74 63 68 65 64 5f 63 6f 75 6e 74 20 3d 20 6d atched_count = m 1dd30 61 74 63 68 65 64 5f 63 6f 75 6e 74 3b 0a 0a 09 atched_count;... 1dd40 09 09 63 75 72 72 5f 61 74 74 72 20 3d 20 26 63 ..curr_attr = &c 1dd50 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1dd60 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 1dd70 71 75 65 72 79 5b 63 75 72 72 5f 61 74 74 72 5f query[curr_attr_ 1dd80 69 64 78 5d 3b 0a 0a 09 09 09 43 41 43 4b 45 59 idx];.....CACKEY 1dd90 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 1dda0 20 43 68 65 63 6b 69 6e 67 20 66 6f 72 20 61 74 Checking for at 1ddb0 74 72 69 62 75 74 65 20 30 78 25 30 38 6c 78 20 tribute 0x%08lx 1ddc0 69 6e 20 69 64 65 6e 74 69 74 79 3a 25 69 2e 2e in identity:%i.. 1ddd0 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f .", (unsigned lo 1dde0 6e 67 29 20 63 75 72 72 5f 61 74 74 72 2d 3e 74 ng) curr_attr->t 1ddf0 79 70 65 2c 20 28 69 6e 74 29 20 63 75 72 72 5f ype, (int) curr_ 1de00 69 64 5f 69 64 78 29 3b 0a 09 09 09 43 41 43 4b id_idx);....CACK 1de10 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 EY_DEBUG_PRINTBU 1de20 46 28 22 20 20 20 20 56 61 6c 75 65 20 6c 6f 6f F(" Value loo 1de30 6b 69 6e 67 20 66 6f 72 3a 22 2c 20 63 75 72 72 king for:", curr 1de40 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 2c 20 63 _attr->pValue, c 1de50 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 urr_attr->ulValu 1de60 65 4c 65 6e 29 3b 0a 0a 09 09 09 66 6f 72 20 28 eLen);.....for ( 1de70 73 65 73 73 5f 61 74 74 72 5f 69 64 78 20 3d 20 sess_attr_idx = 1de80 30 3b 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 0; sess_attr_idx 1de90 20 3c 20 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 < curr_id->attr 1dea0 69 62 75 74 65 73 5f 63 6f 75 6e 74 3b 20 73 65 ibutes_count; se 1deb0 73 73 5f 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b ss_attr_idx++) { 1dec0 0a 09 09 09 09 69 66 20 28 63 75 72 72 5f 69 64 .....if (curr_id 1ded0 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 ->attributes[ses 1dee0 73 5f 61 74 74 72 5f 69 64 78 5d 2e 74 79 70 65 s_attr_idx].type 1def0 20 3d 3d 20 63 75 72 72 5f 61 74 74 72 2d 3e 74 == curr_attr->t 1df00 79 70 65 29 20 7b 0a 09 09 09 09 09 43 41 43 4b ype) {......CACK 1df10 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1df20 22 20 20 20 20 2e 2e 2e 20 66 6f 75 6e 64 20 6d " ... found m 1df30 61 74 63 68 69 6e 67 20 74 79 70 65 20 2e 2e 2e atching type ... 1df40 22 29 3b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f ");......CACKEY_ 1df50 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 DEBUG_PRINTBUF(" 1df60 20 20 20 20 2e 2e 2e 20 6f 75 72 20 76 61 6c 75 ... our valu 1df70 65 3a 22 2c 20 63 75 72 72 5f 69 64 2d 3e 61 74 e:", curr_id->at 1df80 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 tributes[sess_at 1df90 74 72 5f 69 64 78 5d 2e 70 56 61 6c 75 65 2c 20 tr_idx].pValue, 1dfa0 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 curr_id->attribu 1dfb0 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 tes[sess_attr_id 1dfc0 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a x].ulValueLen);. 1dfd0 0a 09 09 09 09 09 69 66 20 28 63 75 72 72 5f 61 ......if (curr_a 1dfe0 74 74 72 2d 3e 70 56 61 6c 75 65 20 3d 3d 20 4e ttr->pValue == N 1dff0 55 4c 4c 29 20 7b 0a 09 09 09 09 09 09 43 41 43 ULL) {.......CAC 1e000 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1e010 28 22 20 20 20 20 20 20 20 2e 2e 2e 20 66 6f 75 (" ... fou 1e020 6e 64 20 77 69 6c 64 63 61 72 64 20 6d 61 74 63 nd wildcard matc 1e030 68 22 29 3b 0a 0a 09 09 09 09 09 09 6d 61 74 63 h");........matc 1e040 68 65 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 0a 09 09 hed_count++;.... 1e050 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 ....break;...... 1e060 7d 0a 0a 20 09 09 09 09 09 69 66 20 28 63 75 72 }.. .....if (cur 1e070 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c r_attr->ulValueL 1e080 65 6e 20 3d 3d 20 63 75 72 72 5f 69 64 2d 3e 61 en == curr_id->a 1e090 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 ttributes[sess_a 1e0a0 74 74 72 5f 69 64 78 5d 2e 75 6c 56 61 6c 75 65 ttr_idx].ulValue 1e0b0 4c 65 6e 20 26 26 20 6d 65 6d 63 6d 70 28 63 75 Len && memcmp(cu 1e0c0 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 2c rr_attr->pValue, 1e0d0 20 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 69 62 curr_id->attrib 1e0e0 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 utes[sess_attr_i 1e0f0 64 78 5d 2e 70 56 61 6c 75 65 2c 20 63 75 72 72 dx].pValue, curr 1e100 5f 69 64 2d 3e 61 74 74 72 69 62 75 74 65 73 5b _id->attributes[ 1e110 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 sess_attr_idx].u 1e120 6c 56 61 6c 75 65 4c 65 6e 29 20 3d 3d 20 30 29 lValueLen) == 0) 1e130 20 7b 0a 09 09 09 09 09 09 43 41 43 4b 45 59 5f {.......CACKEY_ 1e140 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 20 DEBUG_PRINTF(" 1e150 20 20 20 20 20 2e 2e 2e 20 66 6f 75 6e 64 20 65 ... found e 1e160 78 61 63 74 20 6d 61 74 63 68 22 29 3b 0a 0a 09 xact match");... 1e170 09 09 09 09 09 6d 61 74 63 68 65 64 5f 63 6f 75 .....matched_cou 1e180 6e 74 2b 2b 3b 0a 0a 09 09 09 09 09 09 62 72 65 nt++;........bre 1e190 61 6b 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d ak;......}.....} 1e1a0 0a 09 09 09 7d 0a 0a 09 09 09 2f 2a 20 49 66 20 ....}...../* If 1e1b0 74 68 65 20 61 74 74 72 69 62 75 74 65 20 63 6f the attribute co 1e1c0 75 6c 64 20 6e 6f 74 20 62 65 20 6d 61 74 63 68 uld not be match 1e1d0 65 64 2c 20 64 6f 20 6e 6f 74 20 74 72 79 20 74 ed, do not try t 1e1e0 6f 20 6d 61 74 63 68 20 61 64 64 69 74 69 6f 6e o match addition 1e1f0 61 6c 20 61 74 74 72 69 62 75 74 65 73 20 2a 2f al attributes */ 1e200 0a 09 09 09 69 66 20 28 70 72 65 76 5f 6d 61 74 ....if (prev_mat 1e210 63 68 65 64 5f 63 6f 75 6e 74 20 3d 3d 20 6d 61 ched_count == ma 1e220 74 63 68 65 64 5f 63 6f 75 6e 74 29 20 7b 0a 09 tched_count) {.. 1e230 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 7d 0a 09 ...break;....}.. 1e240 09 7d 0a 0a 09 09 69 66 20 28 6d 61 74 63 68 65 .}....if (matche 1e250 64 5f 63 6f 75 6e 74 20 3d 3d 20 63 61 63 6b 65 d_count == cacke 1e260 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 1e270 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 ion].search_quer 1e280 79 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09 43 41 y_count) {....CA 1e290 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1e2a0 46 28 22 20 20 2e 2e 2e 20 41 6c 6c 20 25 69 20 F(" ... All %i 1e2b0 61 74 74 72 69 62 75 74 65 73 20 63 68 65 63 6b attributes check 1e2c0 65 64 20 66 6f 72 20 66 6f 75 6e 64 2c 20 61 64 ed for found, ad 1e2d0 64 69 6e 67 20 69 64 65 6e 74 69 74 79 3a 25 69 ding identity:%i 1e2e0 20 74 6f 20 72 65 74 75 72 6e 65 64 20 6c 69 73 to returned lis 1e2f0 74 22 2c 20 28 69 6e 74 29 20 63 61 63 6b 65 79 t", (int) cackey 1e300 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1e310 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 on].search_query 1e320 5f 63 6f 75 6e 74 2c 20 28 69 6e 74 29 20 63 75 _count, (int) cu 1e330 72 72 5f 69 64 5f 69 64 78 29 3b 0a 0a 09 09 09 rr_id_idx);..... 1e340 70 68 4f 62 6a 65 63 74 5b 63 75 72 72 5f 6f 75 phObject[curr_ou 1e350 74 5f 69 64 5f 69 64 78 5d 20 3d 20 63 75 72 72 t_id_idx] = curr 1e360 5f 69 64 5f 69 64 78 20 2b 20 31 3b 0a 0a 09 09 _id_idx + 1;.... 1e370 09 75 6c 4d 61 78 4f 62 6a 65 63 74 43 6f 75 6e .ulMaxObjectCoun 1e380 74 2d 2d 3b 0a 0a 09 09 09 63 75 72 72 5f 6f 75 t--;.....curr_ou 1e390 74 5f 69 64 5f 69 64 78 2b 2b 3b 0a 09 09 7d 20 t_id_idx++;...} 1e3a0 65 6c 73 65 20 7b 0a 09 09 09 43 41 43 4b 45 59 else {....CACKEY 1e3b0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 1e3c0 20 2e 2e 2e 20 4e 6f 74 20 61 6c 6c 20 25 69 20 ... Not all %i 1e3d0 28 6f 6e 6c 79 20 66 6f 75 6e 64 20 25 69 29 20 (only found %i) 1e3e0 61 74 74 72 69 62 75 74 65 73 20 63 68 65 63 6b attributes check 1e3f0 65 64 20 66 6f 72 20 66 6f 75 6e 64 2c 20 6e 6f ed for found, no 1e400 74 20 61 64 64 69 6e 67 20 69 64 65 6e 74 69 74 t adding identit 1e410 79 3a 25 69 22 2c 20 28 69 6e 74 29 20 63 61 63 y:%i", (int) cac 1e420 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1e430 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 ssion].search_qu 1e440 65 72 79 5f 63 6f 75 6e 74 2c 20 28 69 6e 74 29 ery_count, (int) 1e450 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 2c 20 matched_count, 1e460 28 69 6e 74 29 20 63 75 72 72 5f 69 64 5f 69 64 (int) curr_id_id 1e470 78 29 3b 0a 09 09 7d 0a 09 7d 0a 09 63 61 63 6b x);...}..}..cack 1e480 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1e490 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 63 75 72 sion].search_cur 1e4a0 72 5f 69 64 20 3d 20 63 75 72 72 5f 69 64 5f 69 r_id = curr_id_i 1e4b0 64 78 3b 0a 09 2a 70 75 6c 4f 62 6a 65 63 74 43 dx;..*pulObjectC 1e4c0 6f 75 6e 74 20 3d 20 63 75 72 72 5f 6f 75 74 5f ount = curr_out_ 1e4d0 69 64 5f 69 64 78 3b 0a 0a 09 6d 75 74 65 78 5f id_idx;...mutex_ 1e4e0 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 1e4f0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 1e500 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 1e510 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 1e520 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 1e530 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1e540 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 1e550 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 1e560 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 1e570 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 L_ERROR);..}...C 1e580 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1e590 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1e5a0 52 5f 4f 4b 20 28 25 69 29 2c 20 6e 75 6d 20 6f R_OK (%i), num o 1e5b0 62 6a 65 63 74 73 20 3d 20 25 6c 75 22 2c 20 43 bjects = %lu", C 1e5c0 4b 52 5f 4f 4b 2c 20 2a 70 75 6c 4f 62 6a 65 63 KR_OK, *pulObjec 1e5d0 74 43 6f 75 6e 74 29 3b 0a 0a 09 72 65 74 75 72 tCount);...retur 1e5e0 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b n(CKR_OK);.}..CK 1e5f0 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 1e600 28 43 4b 5f 52 56 2c 20 43 5f 46 69 6e 64 4f 62 (CK_RV, C_FindOb 1e610 6a 65 63 74 73 46 69 6e 61 6c 29 28 43 4b 5f 53 jectsFinal)(CK_S 1e620 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 1e630 65 73 73 69 6f 6e 29 20 7b 0a 09 69 6e 74 20 6d ession) {..int m 1e640 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 utex_retval;...C 1e650 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1e660 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 1e670 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 1e680 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 1e690 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1e6a0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 1e6b0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 1e6c0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 1e6d0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 1e6e0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 LIZED);..}...if 1e6f0 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c (hSession == 0 | 1e700 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 | hSession >= (s 1e710 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 1e720 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 sions) / sizeof( 1e730 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1e740 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 0]))) {...CACKEY 1e750 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1e760 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f rror. Session o 1e770 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a ut of range.");. 1e780 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 1e790 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 1e7a0 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 NVALID);..}...mu 1e7b0 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 1e7c0 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 key_mutex_lock(c 1e7d0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 1e7e0 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 1e7f0 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 1e800 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1e810 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 "Error. Locking 1e820 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 1e830 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 1e840 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i 1e850 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 1e860 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 ons[hSession].ac 1e870 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 tive) {...cackey 1e880 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 1e890 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 1e8a0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1e8b0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 1e8c0 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 ession not activ 1e8d0 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 1e8e0 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 1e8f0 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 1e900 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f }...if (!cackey_ 1e910 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1e920 6e 5d 2e 73 65 61 72 63 68 5f 61 63 74 69 76 65 n].search_active 1e930 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 1e940 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 1e950 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 1e960 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1e970 46 28 22 45 72 72 6f 72 2e 20 20 53 65 61 72 63 F("Error. Searc 1e980 68 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b h not active."); 1e990 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 1e9a0 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 _OPERATION_NOT_I 1e9b0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 1e9c0 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 1e9d0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 s[hSession].sear 1e9e0 63 68 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 ch_active = 0;.. 1e9f0 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 if (cackey_sessi 1ea00 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 ons[hSession].se 1ea10 61 72 63 68 5f 71 75 65 72 79 29 20 7b 0a 09 09 arch_query) {... 1ea20 66 72 65 65 28 63 61 63 6b 65 79 5f 73 65 73 73 free(cackey_sess 1ea30 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 1ea40 65 61 72 63 68 5f 71 75 65 72 79 29 3b 0a 09 7d earch_query);..} 1ea50 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 1ea60 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 = cackey_mutex_u 1ea70 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 1ea80 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 1ea90 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 1eaa0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1eab0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1eac0 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Unlocking failed 1ead0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1eae0 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 1eaf0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 1eb00 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 1eb10 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 urning CKR_OK (% 1eb20 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 i)", CKR_OK);... 1eb30 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a return(CKR_OK);. 1eb40 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 1eb50 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 45 CTION(CK_RV, C_E 1eb60 6e 63 72 79 70 74 49 6e 69 74 29 28 43 4b 5f 53 ncryptInit)(CK_S 1eb70 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 1eb80 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 ession, CK_MECHA 1eb90 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e NISM_PTR pMechan 1eba0 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 ism, CK_OBJECT_H 1ebb0 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 ANDLE hKey) {..C 1ebc0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1ebd0 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 1ebe0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 1ebf0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 1ec00 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1ec10 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 1ec20 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 1ec30 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 1ec40 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 1ec50 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 1ec60 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1ec70 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1ec80 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1ec90 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 1eca0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1ecb0 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 1ecc0 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 1ecd0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1ece0 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 1ecf0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 1ed00 45 6e 63 72 79 70 74 29 28 43 4b 5f 53 45 53 53 Encrypt)(CK_SESS 1ed10 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 1ed20 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 1ed30 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 pData, CK_ULONG 1ed40 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 ulDataLen, CK_B 1ed50 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 74 YTE_PTR pEncrypt 1ed60 65 64 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 edData, CK_ULONG 1ed70 5f 50 54 52 20 70 75 6c 45 6e 63 72 79 70 74 65 _PTR pulEncrypte 1ed80 64 44 61 74 61 4c 65 6e 29 20 7b 0a 09 43 41 43 dDataLen) {..CAC 1ed90 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1eda0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 1edb0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 1edc0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 1edd0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1ede0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 1edf0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 1ee00 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 1ee10 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 1ee20 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 1ee30 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1ee40 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 1ee50 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1ee60 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 1ee70 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1ee80 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 1ee90 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 1eea0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 1eeb0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 1eec0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 45 6e TION(CK_RV, C_En 1eed0 63 72 79 70 74 55 70 64 61 74 65 29 28 43 4b 5f cryptUpdate)(CK_ 1eee0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 1eef0 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 1ef00 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 _PTR pPart, CK_U 1ef10 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 6e 2c 20 LONG ulPartLen, 1ef20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 CK_BYTE_PTR pEnc 1ef30 72 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 ryptedPart, CK_U 1ef40 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 45 6e 63 72 LONG_PTR pulEncr 1ef50 79 70 74 65 64 50 61 72 74 4c 65 6e 29 20 7b 0a yptedPartLen) {. 1ef60 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1ef70 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1ef80 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1ef90 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1efa0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1efb0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1efc0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1efd0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1efe0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1eff0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 1f000 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1f010 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1f020 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1f030 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 1f040 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1f050 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 1f060 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 1f070 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1f080 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1f090 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1f0a0 43 5f 45 6e 63 72 79 70 74 46 69 6e 61 6c 29 28 C_EncryptFinal)( 1f0b0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 1f0c0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 1f0d0 59 54 45 5f 50 54 52 20 70 4c 61 73 74 45 6e 63 YTE_PTR pLastEnc 1f0e0 72 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 ryptedPart, CK_U 1f0f0 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 4c 61 73 74 LONG_PTR pulLast 1f100 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e EncryptedPartLen 1f110 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 1f120 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 1f130 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 1f140 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1f150 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1f160 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1f170 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1f180 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1f190 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1f1a0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1f1b0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1f1c0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1f1d0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 1f1e0 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 1f1f0 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 1f200 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1f210 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 1f220 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 1f230 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 1f240 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1f250 52 56 2c 20 43 5f 44 65 63 72 79 70 74 49 6e 69 RV, C_DecryptIni 1f260 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 t)(CK_SESSION_HA 1f270 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 1f280 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 K_MECHANISM_PTR 1f290 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f pMechanism, CK_O 1f2a0 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 BJECT_HANDLE hKe 1f2b0 79 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f y) {..int mutex_ 1f2c0 72 65 74 76 61 6c 3b 0a 0a 09 68 4b 65 79 2d 2d retval;...hKey-- 1f2d0 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 1f2e0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 1f2f0 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 1f300 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 1f310 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1f320 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1f330 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 1f340 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1f350 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 1f360 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 1f370 0a 09 69 66 20 28 70 4d 65 63 68 61 6e 69 73 6d ..if (pMechanism 1f380 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 == NULL) {...CA 1f390 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1f3a0 46 28 22 45 72 72 6f 72 2e 20 70 4d 65 63 68 61 F("Error. pMecha 1f3b0 6e 69 73 6d 20 69 73 20 4e 55 4c 4c 2e 22 29 3b nism is NULL."); 1f3c0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 ....return(CKR_A 1f3d0 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 RGUMENTS_BAD);.. 1f3e0 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 6e 69 }...if (pMechani 1f3f0 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 20 21 3d sm->mechanism != 1f400 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 29 20 7b CKM_RSA_PKCS) { 1f410 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1f420 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 PRINTF("Error. p 1f430 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 Mechanism->mecha 1f440 6e 69 73 6d 20 6e 6f 74 20 73 70 65 63 69 66 69 nism not specifi 1f450 65 64 20 61 73 20 43 4b 4d 5f 52 53 41 5f 50 4b ed as CKM_RSA_PK 1f460 43 53 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 CS");....return( 1f470 43 4b 52 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 41 CKR_MECHANISM_PA 1f480 52 41 4d 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d RAM_INVALID);..} 1f490 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 ...if (hSession 1f4a0 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e == 0 || hSession 1f4b0 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b >= (sizeof(cack 1f4c0 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 1f4d0 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 1f4e0 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 sions[0]))) {... 1f4f0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1f500 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 NTF("Error. Ses 1f510 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 sion out of rang 1f520 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 1f530 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 1f540 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 1f550 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 1f560 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 1f570 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 1f580 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 1f590 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 1f5a0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1f5b0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 1f5c0 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 1f5d0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1f5e0 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 1f5f0 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 1f600 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1f610 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 on].active) {... 1f620 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 1f630 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1f640 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 1f650 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1f660 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 or. Session not 1f670 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 active.");..... 1f680 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 1f690 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 1f6a0 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 ID);..}...if (ca 1f6b0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1f6c0 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f ession].decrypt_ 1f6d0 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b active) {...cack 1f6e0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 1f6f0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 1f700 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 1f710 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1f720 20 44 65 63 72 79 70 74 20 61 6c 72 65 61 64 79 Decrypt already 1f730 20 69 6e 20 70 72 6f 67 72 65 73 73 2e 22 29 3b in progress."); 1f740 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 1f750 5f 4f 50 45 52 41 54 49 4f 4e 5f 41 43 54 49 56 _OPERATION_ACTIV 1f760 45 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 4b 65 E);..}...if (hKe 1f770 79 20 3e 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 y >= cackey_sess 1f780 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 ions[hSession].i 1f790 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 dentities_count) 1f7a0 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 1f7b0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 1f7c0 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 1f7d0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1f7e0 28 22 45 72 72 6f 72 2e 20 20 4b 65 79 20 68 61 ("Error. Key ha 1f7f0 6e 64 6c 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 ndle out of rang 1f800 65 20 28 72 65 71 75 65 73 74 65 64 20 6b 65 79 e (requested key 1f810 20 25 6c 75 2c 20 6f 6e 6c 79 20 25 6c 75 20 69 %lu, only %lu i 1f820 64 65 6e 74 69 74 69 65 73 20 61 76 61 69 6c 61 dentities availa 1f830 62 6c 65 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 ble).", (unsigne 1f840 64 20 6c 6f 6e 67 29 20 68 4b 65 79 2c 20 28 75 d long) hKey, (u 1f850 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 61 nsigned long) ca 1f860 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1f870 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 ession].identiti 1f880 65 73 5f 63 6f 75 6e 74 29 3b 0a 0a 09 09 72 65 es_count);....re 1f890 74 75 72 6e 28 43 4b 52 5f 4b 45 59 5f 48 41 4e turn(CKR_KEY_HAN 1f8a0 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 1f8b0 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio 1f8c0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 ns[hSession].dec 1f8d0 72 79 70 74 5f 61 63 74 69 76 65 20 3d 20 31 3b rypt_active = 1; 1f8e0 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio 1f8f0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 ns[hSession].dec 1f900 72 79 70 74 5f 6d 65 63 68 61 6e 69 73 6d 20 3d rypt_mechanism = 1f910 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 pMechanism->mec 1f920 68 61 6e 69 73 6d 3b 0a 09 63 61 63 6b 65 79 5f hanism;..cackey_ 1f930 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1f940 6e 5d 2e 64 65 63 72 79 70 74 5f 6d 65 63 68 5f n].decrypt_mech_ 1f950 70 61 72 6d 20 3d 20 70 4d 65 63 68 61 6e 69 73 parm = pMechanis 1f960 6d 2d 3e 70 50 61 72 61 6d 65 74 65 72 3b 0a 09 m->pParameter;.. 1f970 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1f980 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 hSession].decryp 1f990 74 5f 6d 65 63 68 5f 70 61 72 6d 6c 65 6e 20 3d t_mech_parmlen = 1f9a0 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 75 6c 50 pMechanism->ulP 1f9b0 61 72 61 6d 65 74 65 72 4c 65 6e 3b 0a 09 63 61 arameterLen;..ca 1f9c0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1f9d0 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f ession].decrypt_ 1f9e0 69 64 65 6e 74 69 74 79 20 3d 20 26 63 61 63 6b identity = &cack 1f9f0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1fa00 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 sion].identities 1fa10 5b 68 4b 65 79 5d 3b 0a 0a 09 6d 75 74 65 78 5f [hKey];...mutex_ 1fa20 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 1fa30 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 1fa40 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 1fa50 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 1fa60 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 1fa70 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1fa80 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 1fa90 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 1faa0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 1fab0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 L_ERROR);..}...C 1fac0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1fad0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1fae0 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ 1faf0 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b OK);...return(CK 1fb00 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 R_OK);.}..CK_DEF 1fb10 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1fb20 52 56 2c 20 43 5f 44 65 63 72 79 70 74 29 28 43 RV, C_Decrypt)(C 1fb30 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 1fb40 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 1fb50 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 TE_PTR pEncrypte 1fb60 64 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 dData, CK_ULONG 1fb70 75 6c 45 6e 63 72 79 70 74 65 64 44 61 74 61 4c ulEncryptedDataL 1fb80 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 en, CK_BYTE_PTR 1fb90 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 5f pData, CK_ULONG_ 1fba0 50 54 52 20 70 75 6c 44 61 74 61 4c 65 6e 29 20 PTR pulDataLen) 1fbb0 7b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 64 61 74 61 {..CK_ULONG data 1fbc0 6c 65 6e 5f 75 70 64 61 74 65 2c 20 64 61 74 61 len_update, data 1fbd0 6c 65 6e 5f 66 69 6e 61 6c 3b 0a 09 43 4b 5f 52 len_final;..CK_R 1fbe0 56 20 64 65 63 72 79 70 74 5f 72 65 74 3b 0a 0a V decrypt_ret;.. 1fbf0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1fc00 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1fc10 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 1fc20 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 1fc30 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1fc40 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 1fc50 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 1fc60 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 1fc70 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 1fc80 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 IALIZED);..}...i 1fc90 66 20 28 70 75 6c 44 61 74 61 4c 65 6e 20 3d 3d f (pulDataLen == 1fca0 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 NULL) {...CACKE 1fcb0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1fcc0 45 72 72 6f 72 2e 20 70 75 6c 44 61 74 61 4c 65 Error. pulDataLe 1fcd0 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 n is NULL.");... 1fce0 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 1fcf0 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 1fd00 09 64 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 20 .datalen_update 1fd10 3d 20 2a 70 75 6c 44 61 74 61 4c 65 6e 3b 0a 0a = *pulDataLen;.. 1fd20 09 64 65 63 72 79 70 74 5f 72 65 74 20 3d 20 43 .decrypt_ret = C 1fd30 5f 44 65 63 72 79 70 74 55 70 64 61 74 65 28 68 _DecryptUpdate(h 1fd40 53 65 73 73 69 6f 6e 2c 20 70 45 6e 63 72 79 70 Session, pEncryp 1fd50 74 65 64 44 61 74 61 2c 20 75 6c 45 6e 63 72 79 tedData, ulEncry 1fd60 70 74 65 64 44 61 74 61 4c 65 6e 2c 20 70 44 61 ptedDataLen, pDa 1fd70 74 61 2c 20 26 64 61 74 61 6c 65 6e 5f 75 70 64 ta, &datalen_upd 1fd80 61 74 65 29 3b 0a 09 69 66 20 28 64 65 63 72 79 ate);..if (decry 1fd90 70 74 5f 72 65 74 20 21 3d 20 43 4b 52 5f 4f 4b pt_ret != CKR_OK 1fda0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1fdb0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1fdc0 2e 20 20 44 65 63 72 79 70 74 55 70 64 61 74 65 . DecryptUpdate 1fdd0 28 29 20 72 65 74 75 72 6e 65 64 20 66 61 69 6c () returned fail 1fde0 75 72 65 20 28 72 76 20 3d 20 25 6c 75 29 2e 22 ure (rv = %lu)." 1fdf0 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 1fe00 29 20 64 65 63 72 79 70 74 5f 72 65 74 29 3b 0a ) decrypt_ret);. 1fe10 0a 09 09 72 65 74 75 72 6e 28 64 65 63 72 79 70 ...return(decryp 1fe20 74 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 69 66 20 t_ret);..}...if 1fe30 28 70 44 61 74 61 29 20 7b 0a 09 09 70 44 61 74 (pData) {...pDat 1fe40 61 20 2b 3d 20 64 61 74 61 6c 65 6e 5f 75 70 64 a += datalen_upd 1fe50 61 74 65 3b 0a 09 7d 0a 09 64 61 74 61 6c 65 6e ate;..}..datalen 1fe60 5f 66 69 6e 61 6c 20 3d 20 2a 70 75 6c 44 61 74 _final = *pulDat 1fe70 61 4c 65 6e 20 2d 20 64 61 74 61 6c 65 6e 5f 75 aLen - datalen_u 1fe80 70 64 61 74 65 3b 0a 0a 09 64 65 63 72 79 70 74 pdate;...decrypt 1fe90 5f 72 65 74 20 3d 20 43 5f 44 65 63 72 79 70 74 _ret = C_Decrypt 1fea0 46 69 6e 61 6c 28 68 53 65 73 73 69 6f 6e 2c 20 Final(hSession, 1feb0 70 44 61 74 61 2c 20 26 64 61 74 61 6c 65 6e 5f pData, &datalen_ 1fec0 66 69 6e 61 6c 29 3b 0a 09 69 66 20 28 64 65 63 final);..if (dec 1fed0 72 79 70 74 5f 72 65 74 20 21 3d 20 43 4b 52 5f rypt_ret != CKR_ 1fee0 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 OK) {...CACKEY_D 1fef0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1ff00 6f 72 2e 20 20 44 65 63 72 79 70 74 46 69 6e 61 or. DecryptFina 1ff10 6c 28 29 20 72 65 74 75 72 6e 65 64 20 66 61 69 l() returned fai 1ff20 6c 75 72 65 20 28 72 76 20 3d 20 25 6c 75 29 2e lure (rv = %lu). 1ff30 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 1ff40 67 29 20 64 65 63 72 79 70 74 5f 72 65 74 29 3b g) decrypt_ret); 1ff50 0a 0a 09 09 72 65 74 75 72 6e 28 64 65 63 72 79 ....return(decry 1ff60 70 74 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 2a 70 pt_ret);..}...*p 1ff70 75 6c 44 61 74 61 4c 65 6e 20 3d 20 64 61 74 61 ulDataLen = data 1ff80 6c 65 6e 5f 75 70 64 61 74 65 20 2b 20 64 61 74 len_update + dat 1ff90 61 6c 65 6e 5f 66 69 6e 61 6c 3b 0a 0a 09 43 41 alen_final;...CA 1ffa0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1ffb0 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 1ffc0 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f _OK (%i)", CKR_O 1ffd0 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 K);...return(CKR 1ffe0 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 _OK);.}..CK_DEFI 1fff0 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 20000 56 2c 20 43 5f 44 65 63 72 79 70 74 55 70 64 61 V, C_DecryptUpda 20010 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 te)(CK_SESSION_H 20020 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 20030 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 CK_BYTE_PTR pEnc 20040 72 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 ryptedPart, CK_U 20050 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64 LONG ulEncrypted 20060 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 PartLen, CK_BYTE 20070 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 _PTR pPart, CK_U 20080 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 50 61 72 74 LONG_PTR pulPart 20090 4c 65 6e 29 20 7b 0a 09 73 74 61 74 69 63 20 43 Len) {..static C 200a0 4b 5f 42 59 54 45 20 62 75 66 5b 31 36 33 38 34 K_BYTE buf[16384 200b0 5d 3b 0a 09 73 73 69 7a 65 5f 74 20 62 75 66 6c ];..ssize_t bufl 200c0 65 6e 3b 0a 09 43 4b 5f 53 4c 4f 54 5f 49 44 20 en;..CK_SLOT_ID 200d0 73 6c 6f 74 49 44 3b 0a 09 43 4b 5f 52 56 20 72 slotID;..CK_RV r 200e0 65 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e 45 etval = CKR_GENE 200f0 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 69 6e 74 20 RAL_ERROR;..int 20100 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 mutex_retval;... 20110 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 20120 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 20130 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 20140 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 20150 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 20160 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 20170 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 20180 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 20190 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 201a0 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 201b0 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 (hSession == 0 201c0 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 || hSession >= ( 201d0 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 201e0 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 201f0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 20200 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE 20210 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 20220 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 20230 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b out of range."); 20240 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 20250 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 20260 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 20270 66 20 28 70 45 6e 63 72 79 70 74 65 64 50 61 72 f (pEncryptedPar 20280 74 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c 45 t == NULL && ulE 20290 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 ncryptedPartLen 202a0 3d 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f == 0) {.../* Sho 202b0 72 74 20 63 69 72 63 75 69 74 20 69 66 20 77 65 rt circuit if we 202c0 20 61 72 65 20 61 73 6b 65 64 20 74 6f 20 64 65 are asked to de 202d0 63 72 79 70 74 20 6e 6f 74 68 69 6e 67 2e 2e 2e crypt nothing... 202e0 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 */...CACKEY_DEB 202f0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 20300 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 20310 20 28 73 68 6f 72 74 20 63 69 72 63 75 69 74 29 (short circuit) 20320 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 ", CKR_OK);....r 20330 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 eturn(CKR_OK);.. 20340 7d 0a 0a 09 69 66 20 28 70 45 6e 63 72 79 70 74 }...if (pEncrypt 20350 65 64 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 20 edPart == NULL) 20360 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 20370 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 20380 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 20 69 pEncryptedPart i 20390 73 20 4e 55 4c 4c 2c 20 62 75 74 20 75 6c 45 6e s NULL, but ulEn 203a0 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 69 cryptedPartLen i 203b0 73 20 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 09 72 s not 0.");....r 203c0 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 eturn(CKR_ARGUME 203d0 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 NTS_BAD);..}...i 203e0 66 20 28 75 6c 45 6e 63 72 79 70 74 65 64 50 61 f (ulEncryptedPa 203f0 72 74 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 rtLen == 0) {... 20400 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 20410 4e 54 46 28 22 45 72 72 6f 72 2e 20 75 6c 45 6e NTF("Error. ulEn 20420 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 69 cryptedPartLen i 20430 73 20 30 2c 20 62 75 74 20 70 50 61 72 74 20 69 s 0, but pPart i 20440 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a s not NULL.");.. 20450 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 ..return(CKR_ARG 20460 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a UMENTS_BAD);..}. 20470 0a 09 69 66 20 28 70 75 6c 50 61 72 74 4c 65 6e ..if (pulPartLen 20480 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 == NULL) {...CA 20490 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 204a0 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 50 61 72 F("Error. pulPar 204b0 74 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 3b tLen is NULL."); 204c0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 ....return(CKR_A 204d0 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 RGUMENTS_BAD);.. 204e0 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 204f0 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 20500 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 20510 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 20520 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 20530 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 20540 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 20550 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 20560 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 20570 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 20580 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 20590 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 205a0 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 on].active) {... 205b0 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 205c0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 205d0 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 205e0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 205f0 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 or. Session not 20600 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 active.");..... 20610 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 20620 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 20630 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 ID);..}...if (!c 20640 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 20650 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 Session].decrypt 20660 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 _active) {...cac 20670 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 20680 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 20690 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 206a0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 206b0 20 20 44 65 63 72 79 70 74 20 6e 6f 74 20 61 63 Decrypt not ac 206c0 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 206d0 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 turn(CKR_OPERATI 206e0 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a ON_NOT_INITIALIZ 206f0 45 44 29 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 49 44 ED);..}...slotID 20700 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f = cackey_sessio 20710 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f ns[hSession].slo 20720 74 49 44 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 49 tID;...if (slotI 20730 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 D < 0 || slotID 20740 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 >= (sizeof(cacke 20750 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f y_slots) / sizeo 20760 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 f(cackey_slots[0 20770 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ]))) {...CACKEY_ 20780 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 20790 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f ror. Invalid slo 207a0 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 t requested (%lu 207b0 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 ), outside of va 207c0 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 lid range", slot 207d0 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 ID);....return(C 207e0 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 207f0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b );..}...if (cack 20800 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d ey_slots[slotID] 20810 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a .active == 0) {. 20820 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 20830 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e RINTF("Error. In 20840 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 valid slot reque 20850 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 sted (%lu), slot 20860 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 not currently a 20870 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b ctive", slotID); 20880 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 ....cackey_mutex 20890 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 208a0 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 iglock);....retu 208b0 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 208c0 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 RROR);..}...swit 208d0 63 68 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 ch (cackey_sessi 208e0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 ons[hSession].de 208f0 63 72 79 70 74 5f 6d 65 63 68 61 6e 69 73 6d 29 crypt_mechanism) 20900 20 7b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 53 {...case CKM_RS 20910 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 73 A_PKCS:..../* As 20920 6b 20 63 61 72 64 20 74 6f 20 64 65 63 72 79 70 k card to decryp 20930 74 20 2a 2f 0a 09 09 09 62 75 66 6c 65 6e 20 3d t */....buflen = 20940 20 63 61 63 6b 65 79 5f 73 69 67 6e 64 65 63 72 cackey_signdecr 20950 79 70 74 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 ypt(&cackey_slot 20960 73 5b 73 6c 6f 74 49 44 5d 2c 20 63 61 63 6b 65 s[slotID], cacke 20970 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 20980 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 69 64 65 ion].decrypt_ide 20990 6e 74 69 74 79 2c 20 70 45 6e 63 72 79 70 74 65 ntity, pEncrypte 209a0 64 50 61 72 74 2c 20 75 6c 45 6e 63 72 79 70 74 dPart, ulEncrypt 209b0 65 64 50 61 72 74 4c 65 6e 2c 20 62 75 66 2c 20 edPartLen, buf, 209c0 73 69 7a 65 6f 66 28 62 75 66 29 2c 20 30 2c 20 sizeof(buf), 0, 209d0 31 29 3b 0a 0a 09 09 09 69 66 20 28 62 75 66 6c 1);.....if (bufl 209e0 65 6e 20 3c 20 30 29 20 7b 0a 09 09 09 09 2f 2a en < 0) {...../* 209f0 20 44 65 63 72 79 70 74 69 6f 6e 20 66 61 69 6c Decryption fail 20a00 65 64 2e 20 2a 2f 0a 09 09 09 09 69 66 20 28 62 ed. */.....if (b 20a10 75 66 6c 65 6e 20 3d 3d 20 43 41 43 4b 45 59 5f uflen == CACKEY_ 20a20 50 43 53 43 5f 45 5f 4e 45 45 44 4c 4f 47 49 4e PCSC_E_NEEDLOGIN 20a30 29 20 7b 0a 09 09 09 09 09 72 65 74 76 61 6c 20 ) {......retval 20a40 3d 20 43 4b 52 5f 55 53 45 52 5f 4e 4f 54 5f 4c = CKR_USER_NOT_L 20a50 4f 47 47 45 44 5f 49 4e 3b 0a 09 09 09 09 7d 20 OGGED_IN;.....} 20a60 65 6c 73 65 20 69 66 20 28 62 75 66 6c 65 6e 20 else if (buflen 20a70 3d 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 == CACKEY_PCSC_E 20a80 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 29 20 7b 0a _TOKENABSENT) {. 20a90 09 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b .....retval = CK 20aa0 52 5f 44 45 56 49 43 45 5f 52 45 4d 4f 56 45 44 R_DEVICE_REMOVED 20ab0 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 ;.....} else {.. 20ac0 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 ....retval = CKR 20ad0 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 3b 0a _GENERAL_ERROR;. 20ae0 09 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65 20 ....}....} else 20af0 69 66 20 28 28 28 75 6e 73 69 67 6e 65 64 20 6c if (((unsigned l 20b00 6f 6e 67 29 20 62 75 66 6c 65 6e 29 20 3e 20 2a ong) buflen) > * 20b10 70 75 6c 50 61 72 74 4c 65 6e 20 26 26 20 70 50 pulPartLen && pP 20b20 61 72 74 29 20 7b 0a 09 09 09 09 2f 2a 20 44 65 art) {...../* De 20b30 63 72 79 70 74 65 64 20 64 61 74 61 20 74 6f 6f crypted data too 20b40 20 6c 61 72 67 65 20 2a 2f 0a 09 09 09 09 72 65 large */.....re 20b50 74 76 61 6c 20 3d 20 43 4b 52 5f 42 55 46 46 45 tval = CKR_BUFFE 20b60 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b 0a 09 09 09 R_TOO_SMALL;.... 20b70 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 69 66 20 } else {.....if 20b80 28 70 50 61 72 74 29 20 7b 0a 09 09 09 09 09 6d (pPart) {......m 20b90 65 6d 63 70 79 28 70 50 61 72 74 2c 20 62 75 66 emcpy(pPart, buf 20ba0 2c 20 62 75 66 6c 65 6e 29 3b 0a 09 09 09 09 7d , buflen);.....} 20bb0 0a 0a 09 09 09 09 2a 70 75 6c 50 61 72 74 4c 65 ......*pulPartLe 20bc0 6e 20 3d 20 62 75 66 6c 65 6e 3b 0a 0a 09 09 09 n = buflen;..... 20bd0 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 4f 4b .retval = CKR_OK 20be0 3b 0a 09 09 09 7d 0a 0a 09 09 09 62 72 65 61 6b ;....}.....break 20bf0 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 20c00 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 20c10 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 20c20 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 20c30 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 20c40 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 20c50 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 20c60 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 20c70 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 20c80 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 20c90 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b RROR);..}...CACK 20ca0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 20cb0 22 52 65 74 75 72 6e 69 6e 67 20 25 69 22 2c 20 "Returning %i", 20cc0 28 69 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a 0a (int) retval);.. 20cd0 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b .return(retval); 20ce0 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 20cf0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 20d00 44 65 63 72 79 70 74 46 69 6e 61 6c 29 28 43 4b DecryptFinal)(CK 20d10 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 20d20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 hSession, CK_BYT 20d30 45 5f 50 54 52 20 70 4c 61 73 74 50 61 72 74 2c E_PTR pLastPart, 20d40 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 CK_ULONG_PTR pu 20d50 6c 4c 61 73 74 50 61 72 74 4c 65 6e 29 20 7b 0a lLastPartLen) {. 20d60 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 .int mutex_retva 20d70 6c 3b 0a 09 69 6e 74 20 74 65 72 6d 69 6e 61 74 l;..int terminat 20d80 65 5f 64 65 63 72 79 70 74 20 3d 20 31 3b 0a 0a e_decrypt = 1;.. 20d90 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 20da0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 20db0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 20dc0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 20dd0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 20de0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 20df0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 20e00 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 20e10 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 20e20 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 IALIZED);..}...i 20e30 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 f (hSession == 0 20e40 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 || hSession >= 20e50 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 (sizeof(cackey_s 20e60 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f essions) / sizeo 20e70 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 20e80 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b s[0]))) {...CACK 20e90 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 20ea0 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 20eb0 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 out of range.") 20ec0 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 20ed0 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 20ee0 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 20ef0 69 66 20 28 70 75 6c 4c 61 73 74 50 61 72 74 4c if (pulLastPartL 20f00 65 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 en == NULL) {... 20f10 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 20f20 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 4c NTF("Error. pulL 20f30 61 73 74 50 61 72 74 4c 65 6e 20 69 73 20 4e 55 astPartLen is NU 20f40 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 20f50 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 20f60 41 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f AD);..}...mutex_ 20f70 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 20f80 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 mutex_lock(cacke 20f90 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 20fa0 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 20fb0 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 20fc0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 20fd0 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 or. Locking fai 20fe0 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 20ff0 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 21000 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 ROR);..}...if (! 21010 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 21020 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 hSession].active 21030 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 21040 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 21050 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 21060 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 21070 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 21080 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 on not active.") 21090 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 210a0 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 210b0 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 210c0 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 if (!cackey_sess 210d0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 ions[hSession].d 210e0 65 63 72 79 70 74 5f 61 63 74 69 76 65 29 20 7b ecrypt_active) { 210f0 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 21100 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 21110 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 21120 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 21130 45 72 72 6f 72 2e 20 20 44 65 63 72 79 70 74 20 Error. Decrypt 21140 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 not active.");.. 21150 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ....return(CKR_O 21160 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 PERATION_NOT_INI 21170 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 21180 2a 70 75 6c 4c 61 73 74 50 61 72 74 4c 65 6e 20 *pulLastPartLen 21190 3d 20 30 3b 0a 0a 09 69 66 20 28 70 4c 61 73 74 = 0;...if (pLast 211a0 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a Part == NULL) {. 211b0 09 09 74 65 72 6d 69 6e 61 74 65 5f 64 65 63 72 ..terminate_decr 211c0 79 70 74 20 3d 20 30 3b 0a 09 7d 0a 0a 09 69 66 ypt = 0;..}...if 211d0 20 28 74 65 72 6d 69 6e 61 74 65 5f 64 65 63 72 (terminate_decr 211e0 79 70 74 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ypt) {...cackey_ 211f0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 21200 6e 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76 n].decrypt_activ 21210 65 20 3d 20 30 3b 0a 09 7d 0a 0a 09 6d 75 74 65 e = 0;..}...mute 21220 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 21230 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 21240 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 21250 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 21260 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 21270 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 21280 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 "Error. Unlocki 21290 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 212a0 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 212b0 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 212c0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 212d0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 212e0 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK 212f0 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 R_OK);...return( 21300 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 CKR_OK);.}..CK_D 21310 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 21320 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 49 6e K_RV, C_DigestIn 21330 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 it)(CK_SESSION_H 21340 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 21350 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 CK_MECHANISM_PTR 21360 20 70 4d 65 63 68 61 6e 69 73 6d 29 20 7b 0a 09 pMechanism) {.. 21370 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 21380 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 21390 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 213a0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 213b0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 213c0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 213d0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 213e0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 213f0 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 21400 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 21410 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 21420 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 21430 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 21440 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C 21450 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 21460 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re 21470 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO 21480 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 21490 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 214a0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 214b0 5f 44 69 67 65 73 74 29 28 43 4b 5f 53 45 53 53 _Digest)(CK_SESS 214c0 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 214d0 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 214e0 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 pData, CK_ULONG 214f0 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 ulDataLen, CK_B 21500 59 54 45 5f 50 54 52 20 70 44 69 67 65 73 74 2c YTE_PTR pDigest, 21510 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 CK_ULONG_PTR pu 21520 6c 44 69 67 65 73 74 4c 65 6e 29 20 7b 0a 09 43 lDigestLen) {..C 21530 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 21540 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 21550 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 21560 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 21570 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 21580 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 21590 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 215a0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 215b0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 215c0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 215d0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 215e0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 215f0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 21600 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 21610 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 21620 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 21630 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 21640 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 21650 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 21660 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 21670 44 69 67 65 73 74 55 70 64 61 74 65 29 28 43 4b DigestUpdate)(CK 21680 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 21690 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 hSession, CK_BYT 216a0 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f E_PTR pPart, CK_ 216b0 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 6e 29 ULONG ulPartLen) 216c0 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 216d0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 216e0 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 216f0 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 21700 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 21710 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 21720 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 21730 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 21740 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 21750 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 21760 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 21770 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 21780 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 21790 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 217a0 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 217b0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 217c0 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 217d0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 217e0 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 217f0 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 21800 56 2c 20 43 5f 44 69 67 65 73 74 4b 65 79 29 28 V, C_DigestKey)( 21810 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 21820 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f E hSession, CK_O 21830 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 BJECT_HANDLE hKe 21840 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 y) {..CACKEY_DEB 21850 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 21860 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 21870 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 21880 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 21890 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 218a0 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 218b0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 218c0 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 218d0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 218e0 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 218f0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 21900 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 21910 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 21920 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 21930 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 21940 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 21950 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 21960 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 21970 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 21980 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 46 69 6e _RV, C_DigestFin 21990 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 al)(CK_SESSION_H 219a0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 219b0 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 69 67 CK_BYTE_PTR pDig 219c0 65 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 est, CK_ULONG_PT 219d0 52 20 70 75 6c 44 69 67 65 73 74 4c 65 6e 29 20 R pulDigestLen) 219e0 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 219f0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 21a00 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 21a10 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 21a20 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 21a30 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 21a40 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 21a50 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 21a60 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 21a70 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 21a80 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 21a90 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 21aa0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 21ab0 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 21ac0 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 21ad0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 21ae0 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 21af0 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 21b00 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN 21b10 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 21b20 2c 20 43 5f 53 69 67 6e 49 6e 69 74 29 28 43 4b , C_SignInit)(CK 21b30 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 21b40 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 hSession, CK_MEC 21b50 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 HANISM_PTR pMech 21b60 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 anism, CK_OBJECT 21b70 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a _HANDLE hKey) {. 21b80 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 .int mutex_retva 21b90 6c 3b 0a 0a 09 68 4b 65 79 2d 2d 3b 0a 0a 09 43 l;...hKey--;...C 21ba0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 21bb0 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 21bc0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 21bd0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 21be0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 21bf0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 21c00 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 21c10 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 21c20 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 21c30 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 LIZED);..}...if 21c40 28 70 4d 65 63 68 61 6e 69 73 6d 20 3d 3d 20 4e (pMechanism == N 21c50 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ULL) {...CACKEY_ 21c60 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 21c70 72 6f 72 2e 20 70 4d 65 63 68 61 6e 69 73 6d 20 ror. pMechanism 21c80 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 is NULL.");....r 21c90 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 eturn(CKR_ARGUME 21ca0 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 NTS_BAD);..}...i 21cb0 66 20 28 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d f (pMechanism->m 21cc0 65 63 68 61 6e 69 73 6d 20 21 3d 20 43 4b 4d 5f echanism != CKM_ 21cd0 52 53 41 5f 50 4b 43 53 20 26 26 20 70 4d 65 63 RSA_PKCS && pMec 21ce0 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 hanism->mechanis 21cf0 6d 20 21 3d 20 43 4b 4d 5f 53 48 41 31 5f 52 53 m != CKM_SHA1_RS 21d00 41 5f 50 4b 43 53 29 20 7b 0a 09 09 43 41 43 4b A_PKCS) {...CACK 21d10 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 21d20 22 45 72 72 6f 72 2e 20 70 4d 65 63 68 61 6e 69 "Error. pMechani 21d30 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 20 6e 6f sm->mechanism no 21d40 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20 43 t specified as C 21d50 4b 4d 5f 52 53 41 5f 50 4b 43 53 20 6f 72 20 43 KM_RSA_PKCS or C 21d60 4b 4d 5f 53 48 41 31 5f 52 53 41 5f 50 4b 43 53 KM_SHA1_RSA_PKCS 21d70 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 21d80 52 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 41 52 41 R_MECHANISM_PARA 21d90 4d 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a M_INVALID);..}.. 21da0 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d .if (hSession == 21db0 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 0 || hSession > 21dc0 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 = (sizeof(cackey 21dd0 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a _sessions) / siz 21de0 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi 21df0 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 ons[0]))) {...CA 21e00 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 21e10 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 21e20 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e on out of range. 21e30 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 21e40 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 CKR_SESSION_HAND 21e50 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 21e60 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 21e70 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f cackey_mutex_lo 21e80 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 21e90 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 21ea0 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 21eb0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 21ec0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 NTF("Error. Loc 21ed0 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 21ee0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 21ef0 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 21f00 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 ...if (!cackey_s 21f10 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 21f20 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 ].active) {...ca 21f30 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 21f40 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 21f50 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 21f60 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 21f70 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 . Session not a 21f80 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 ctive.");......r 21f90 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 21fa0 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 21fb0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b );..}...if (cack 21fc0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 21fd0 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 sion].sign_activ 21fe0 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 e) {...cackey_mu 21ff0 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 22000 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....C 22010 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 22020 54 46 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e TF("Error. Sign 22030 20 61 6c 72 65 61 64 79 20 69 6e 20 70 72 6f 67 already in prog 22040 72 65 73 73 2e 22 29 3b 0a 09 09 0a 09 09 72 65 ress.");......re 22050 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 turn(CKR_OPERATI 22060 4f 4e 5f 41 43 54 49 56 45 29 3b 0a 09 7d 0a 0a ON_ACTIVE);..}.. 22070 09 69 66 20 28 68 4b 65 79 20 3e 3d 20 63 61 63 .if (hKey >= cac 22080 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 22090 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 ssion].identitie 220a0 73 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 63 61 63 s_count) {...cac 220b0 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 220c0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 220d0 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 220e0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 220f0 20 20 4b 65 79 20 68 61 6e 64 6c 65 20 6f 75 74 Key handle out 22100 20 6f 66 20 72 61 6e 67 65 20 28 72 65 71 75 65 of range (reque 22110 73 74 65 64 20 6b 65 79 20 25 6c 75 2c 20 6f 6e sted key %lu, on 22120 6c 79 20 25 6c 75 20 69 64 65 6e 74 69 74 69 65 ly %lu identitie 22130 73 20 61 76 61 69 6c 61 62 6c 65 29 2e 22 2c 20 s available).", 22140 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 22150 68 4b 65 79 2c 20 28 75 6e 73 69 67 6e 65 64 20 hKey, (unsigned 22160 6c 6f 6e 67 29 20 63 61 63 6b 65 79 5f 73 65 73 long) cackey_ses 22170 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 22180 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 identities_count 22190 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 221a0 5f 4b 45 59 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 _KEY_HANDLE_INVA 221b0 4c 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 LID);..}...cacke 221c0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 221d0 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 ion].sign_active 221e0 20 3d 20 31 3b 0a 0a 09 63 61 63 6b 65 79 5f 73 = 1;...cackey_s 221f0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 22200 5d 2e 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 6d ].sign_mechanism 22210 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d = pMechanism->m 22220 65 63 68 61 6e 69 73 6d 3b 0a 0a 09 63 61 63 6b echanism;...cack 22230 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 22240 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c 65 sion].sign_bufle 22250 6e 20 3d 20 31 32 38 3b 0a 09 63 61 63 6b 65 79 n = 128;..cackey 22260 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 22270 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73 65 64 on].sign_bufused 22280 20 3d 20 30 3b 0a 09 63 61 63 6b 65 79 5f 73 65 = 0;..cackey_se 22290 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 222a0 2e 73 69 67 6e 5f 62 75 66 20 3d 20 6d 61 6c 6c .sign_buf = mall 222b0 6f 63 28 73 69 7a 65 6f 66 28 2a 63 61 63 6b 65 oc(sizeof(*cacke 222c0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 222d0 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20 2a ion].sign_buf) * 222e0 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 222f0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 22300 62 75 66 6c 65 6e 29 3b 0a 0a 09 43 41 43 4b 45 buflen);...CACKE 22310 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 22320 53 65 73 73 69 6f 6e 20 25 6c 75 20 73 69 67 6e Session %lu sign 22330 5f 69 64 65 6e 74 69 74 79 20 69 73 20 25 70 20 _identity is %p 22340 28 69 64 65 6e 74 69 74 79 20 23 25 6c 75 29 22 (identity #%lu)" 22350 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 22360 29 20 68 53 65 73 73 69 6f 6e 2c 20 26 63 61 63 ) hSession, &cac 22370 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 22380 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 ssion].identitie 22390 73 5b 68 4b 65 79 5d 2c 20 28 75 6e 73 69 67 6e s[hKey], (unsign 223a0 65 64 20 6c 6f 6e 67 29 20 68 4b 65 79 29 3b 0a ed long) hKey);. 223b0 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 223c0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 223d0 69 64 65 6e 74 69 74 79 20 3d 20 26 63 61 63 6b identity = &cack 223e0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 223f0 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 sion].identities 22400 5b 68 4b 65 79 5d 3b 0a 0a 09 6d 75 74 65 78 5f [hKey];...mutex_ 22410 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 22420 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 22430 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 22440 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 22450 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 22460 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 22470 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 22480 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 22490 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 224a0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 L_ERROR);..}...C 224b0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 224c0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 224d0 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ 224e0 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b OK);...return(CK 224f0 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 R_OK);.}..CK_DEF 22500 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 22510 52 56 2c 20 43 5f 53 69 67 6e 29 28 43 4b 5f 53 RV, C_Sign)(CK_S 22520 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 22530 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f ession, CK_BYTE_ 22540 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c PTR pData, CK_UL 22550 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43 ONG ulDataLen, C 22560 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 67 6e K_BYTE_PTR pSign 22570 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 5f ature, CK_ULONG_ 22580 50 54 52 20 70 75 6c 53 69 67 6e 61 74 75 72 65 PTR pulSignature 22590 4c 65 6e 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 Len) {..unsigned 225a0 20 6c 6f 6e 67 20 73 74 61 72 74 5f 73 69 67 6e long start_sign 225b0 5f 62 75 66 75 73 65 64 3b 0a 09 43 4b 5f 52 56 _bufused;..CK_RV 225c0 20 73 69 67 6e 5f 72 65 74 3b 0a 0a 09 43 41 43 sign_ret;...CAC 225d0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 225e0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 225f0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 22600 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 22610 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 22620 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 22630 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 22640 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 22650 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 22660 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 ZED);..}...if (h 22670 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 Session == 0 || 22680 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a hSession >= (siz 22690 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi 226a0 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 ons) / sizeof(ca 226b0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d ckey_sessions[0] 226c0 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ))) {...CACKEY_D 226d0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 226e0 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 or. Session out 226f0 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 of range.");... 22700 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 ...return(CKR_SE 22710 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 SSION_HANDLE_INV 22720 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 73 74 61 72 ALID);..}...star 22730 74 5f 73 69 67 6e 5f 62 75 66 75 73 65 64 20 3d t_sign_bufused = 22740 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 22750 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 22760 62 75 66 75 73 65 64 3b 0a 0a 09 73 69 67 6e 5f bufused;...sign_ 22770 72 65 74 20 3d 20 43 5f 53 69 67 6e 55 70 64 61 ret = C_SignUpda 22780 74 65 28 68 53 65 73 73 69 6f 6e 2c 20 70 44 61 te(hSession, pDa 22790 74 61 2c 20 75 6c 44 61 74 61 4c 65 6e 29 3b 0a ta, ulDataLen);. 227a0 09 69 66 20 28 73 69 67 6e 5f 72 65 74 20 21 3d .if (sign_ret != 227b0 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 CKR_OK) {...CAC 227c0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 227d0 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 55 70 ("Error. SignUp 227e0 64 61 74 65 28 29 20 72 65 74 75 72 6e 65 64 20 date() returned 227f0 66 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 6c failure (rv = %l 22800 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 u).", (unsigned 22810 6c 6f 6e 67 29 20 73 69 67 6e 5f 72 65 74 29 3b long) sign_ret); 22820 0a 0a 09 09 72 65 74 75 72 6e 28 73 69 67 6e 5f ....return(sign_ 22830 72 65 74 29 3b 0a 09 7d 0a 0a 09 73 69 67 6e 5f ret);..}...sign_ 22840 72 65 74 20 3d 20 43 5f 53 69 67 6e 46 69 6e 61 ret = C_SignFina 22850 6c 28 68 53 65 73 73 69 6f 6e 2c 20 70 53 69 67 l(hSession, pSig 22860 6e 61 74 75 72 65 2c 20 70 75 6c 53 69 67 6e 61 nature, pulSigna 22870 74 75 72 65 4c 65 6e 29 3b 0a 09 69 66 20 28 73 tureLen);..if (s 22880 69 67 6e 5f 72 65 74 20 21 3d 20 43 4b 52 5f 4f ign_ret != CKR_O 22890 4b 29 20 7b 0a 09 09 69 66 20 28 73 69 67 6e 5f K) {...if (sign_ 228a0 72 65 74 20 3d 3d 20 43 4b 52 5f 42 55 46 46 45 ret == CKR_BUFFE 228b0 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a 09 R_TOO_SMALL) {.. 228c0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 228d0 52 49 4e 54 46 28 22 53 69 67 6e 46 69 6e 61 6c RINTF("SignFinal 228e0 28 29 20 72 65 74 75 72 6e 65 64 20 43 4b 52 5f () returned CKR_ 228f0 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c BUFFER_TOO_SMALL 22900 20 28 72 76 20 3d 20 25 6c 75 29 2c 20 75 6e 64 (rv = %lu), und 22910 6f 69 6e 67 20 43 5f 53 69 67 6e 55 70 64 61 74 oing C_SignUpdat 22920 65 28 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 e()", (unsigned 22930 6c 6f 6e 67 29 20 73 69 67 6e 5f 72 65 74 29 3b long) sign_ret); 22940 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 .....cackey_sess 22950 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 22960 69 67 6e 5f 62 75 66 75 73 65 64 20 3d 20 73 74 ign_bufused = st 22970 61 72 74 5f 73 69 67 6e 5f 62 75 66 75 73 65 64 art_sign_bufused 22980 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 73 69 67 ;.....return(sig 22990 6e 5f 72 65 74 29 3b 0a 09 09 7d 0a 0a 09 09 43 n_ret);...}....C 229a0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 229b0 54 46 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e TF("Error. Sign 229c0 46 69 6e 61 6c 28 29 20 72 65 74 75 72 6e 65 64 Final() returned 229d0 20 66 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 failure (rv = % 229e0 6c 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 lu).", (unsigned 229f0 20 6c 6f 6e 67 29 20 73 69 67 6e 5f 72 65 74 29 long) sign_ret) 22a00 3b 0a 0a 09 09 72 65 74 75 72 6e 28 73 69 67 6e ;....return(sign 22a10 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b _ret);..}...CACK 22a20 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 22a30 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 22a40 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) 22a50 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O 22a60 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 K);.}..CK_DEFINE 22a70 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 22a80 20 43 5f 53 69 67 6e 55 70 64 61 74 65 29 28 43 C_SignUpdate)(C 22a90 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 22aa0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 22ab0 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b TE_PTR pPart, CK 22ac0 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 6e _ULONG ulPartLen 22ad0 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 ) {..int mutex_r 22ae0 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f etval;...CACKEY_ 22af0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 22b00 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 22b10 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 22b20 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 22b30 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 22b40 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 22b50 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 22b60 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 22b70 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 22b80 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 ;..}...if (hSess 22b90 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 ion == 0 || hSes 22ba0 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 sion >= (sizeof( 22bb0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 22bc0 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 22bd0 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 _sessions[0]))) 22be0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 22bf0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 22c00 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 Session out of 22c10 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 range.");......r 22c20 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 22c30 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 22c40 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 50 61 72 );..}...if (pPar 22c50 74 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c 50 t == NULL && ulP 22c60 61 72 74 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 artLen == 0) {.. 22c70 09 2f 2a 20 53 68 6f 72 74 20 63 69 72 63 75 69 ./* Short circui 22c80 74 20 69 66 20 77 65 20 61 72 65 20 61 73 6b 65 t if we are aske 22c90 64 20 74 6f 20 73 69 67 6e 20 6e 6f 74 68 69 6e d to sign nothin 22ca0 67 2e 2e 2e 20 2a 2f 0a 09 09 43 41 43 4b 45 59 g... */...CACKEY 22cb0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 22cc0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 eturning CKR_OK 22cd0 28 25 69 29 20 28 73 68 6f 72 74 20 63 69 72 63 (%i) (short circ 22ce0 75 69 74 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a uit)", CKR_OK);. 22cf0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 22d00 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 50 61 72 );..}...if (pPar 22d10 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 t == NULL) {...C 22d20 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 22d30 54 46 28 22 45 72 72 6f 72 2e 20 70 50 61 72 74 TF("Error. pPart 22d40 20 69 73 20 4e 55 4c 4c 2c 20 62 75 74 20 75 6c is NULL, but ul 22d50 50 61 72 74 4c 65 6e 20 69 73 20 6e 6f 74 20 30 PartLen is not 0 22d60 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 22d70 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD 22d80 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 6c 50 61 );..}...if (ulPa 22d90 72 74 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 rtLen == 0) {... 22da0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 22db0 4e 54 46 28 22 45 72 72 6f 72 2e 20 75 6c 50 61 NTF("Error. ulPa 22dc0 72 74 4c 65 6e 20 69 73 20 30 2c 20 62 75 74 20 rtLen is 0, but 22dd0 70 50 61 72 74 20 69 73 20 6e 6f 74 20 4e 55 4c pPart is not NUL 22de0 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 L.");....return( 22df0 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA 22e00 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 D);..}...mutex_r 22e10 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 22e20 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 utex_lock(cackey 22e30 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 22e40 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 22e50 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 22e60 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 22e70 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c r. Locking fail 22e80 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 22e90 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 22ea0 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 OR);..}...if (!c 22eb0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 22ec0 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 Session].active) 22ed0 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 22ee0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 22ef0 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 22f00 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 22f10 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 22f20 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b n not active."); 22f30 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 22f40 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 22f50 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 22f60 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 22f70 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 22f80 67 6e 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 gn_active) {...c 22f90 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 22fa0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 22fb0 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 22fc0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 22fd0 72 2e 20 20 53 69 67 6e 20 6e 6f 74 20 61 63 74 r. Sign not act 22fe0 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ive.");......ret 22ff0 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f urn(CKR_OPERATIO 23000 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 N_NOT_INITIALIZE 23010 44 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 68 20 D);..}...switch 23020 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 23030 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 23040 6d 65 63 68 61 6e 69 73 6d 29 20 7b 0a 09 09 63 mechanism) {...c 23050 61 73 65 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 ase CKM_RSA_PKCS 23060 3a 0a 09 09 09 2f 2a 20 41 63 63 75 6d 75 6c 61 :..../* Accumula 23070 74 65 20 64 69 72 65 63 74 6c 79 20 2a 2f 0a 09 te directly */.. 23080 09 09 69 66 20 28 28 63 61 63 6b 65 79 5f 73 65 ..if ((cackey_se 23090 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 230a0 2e 73 69 67 6e 5f 62 75 66 75 73 65 64 20 2b 20 .sign_bufused + 230b0 75 6c 50 61 72 74 4c 65 6e 29 20 3e 20 63 61 63 ulPartLen) > cac 230c0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 230d0 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c ssion].sign_bufl 230e0 65 6e 29 20 7b 0a 09 09 09 09 63 61 63 6b 65 79 en) {.....cackey 230f0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 23100 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c 65 6e 20 on].sign_buflen 23110 2a 3d 20 32 3b 0a 0a 09 09 09 09 63 61 63 6b 65 *= 2;......cacke 23120 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 23130 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 20 3d 20 ion].sign_buf = 23140 72 65 61 6c 6c 6f 63 28 63 61 63 6b 65 79 5f 73 realloc(cackey_s 23150 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 23160 5d 2e 73 69 67 6e 5f 62 75 66 2c 20 73 69 7a 65 ].sign_buf, size 23170 6f 66 28 2a 63 61 63 6b 65 79 5f 73 65 73 73 69 of(*cackey_sessi 23180 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 23190 67 6e 5f 62 75 66 29 20 2a 20 63 61 63 6b 65 79 gn_buf) * cackey 231a0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 231b0 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c 65 6e 29 on].sign_buflen) 231c0 3b 0a 09 09 09 7d 0a 0a 09 09 09 6d 65 6d 63 70 ;....}.....memcp 231d0 79 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e y(cackey_session 231e0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 231f0 5f 62 75 66 20 2b 20 63 61 63 6b 65 79 5f 73 65 _buf + cackey_se 23200 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 23210 2e 73 69 67 6e 5f 62 75 66 75 73 65 64 2c 20 70 .sign_bufused, p 23220 50 61 72 74 2c 20 75 6c 50 61 72 74 4c 65 6e 29 Part, ulPartLen) 23230 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 ;.....cackey_ses 23240 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 23250 73 69 67 6e 5f 62 75 66 75 73 65 64 20 2b 3d 20 sign_bufused += 23260 75 6c 50 61 72 74 4c 65 6e 3b 0a 0a 09 09 09 62 ulPartLen;.....b 23270 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 43 4b 4d reak;...case CKM 23280 5f 53 48 41 31 5f 52 53 41 5f 50 4b 43 53 3a 0a _SHA1_RSA_PKCS:. 23290 09 09 09 2f 2a 20 58 58 58 3a 20 41 63 63 75 6d .../* XXX: Accum 232a0 75 6c 61 74 65 20 69 6e 74 6f 20 61 20 53 48 41 ulate into a SHA 232b0 31 20 68 61 73 68 20 2a 2f 0a 09 09 09 63 61 63 1 hash */....cac 232c0 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 232d0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 232e0 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ;.....CACKEY_DEB 232f0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 23300 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 23310 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 23320 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 23330 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 23340 44 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 D);.....return(C 23350 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 23360 53 55 50 50 4f 52 54 45 44 29 3b 0a 09 09 09 62 SUPPORTED);....b 23370 72 65 61 6b 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 reak;..}...mutex 23380 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 23390 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 233a0 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 233b0 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 233c0 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 233d0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 233e0 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e Error. Unlockin 233f0 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 23400 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 23410 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 23420 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 23430 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 23440 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR 23450 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C 23460 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 KR_OK);.}..CK_DE 23470 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 23480 5f 52 56 2c 20 43 5f 53 69 67 6e 46 69 6e 61 6c _RV, C_SignFinal 23490 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 234a0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 234b0 5f 42 59 54 45 5f 50 54 52 20 70 53 69 67 6e 61 _BYTE_PTR pSigna 234c0 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 ture, CK_ULONG_P 234d0 54 52 20 70 75 6c 53 69 67 6e 61 74 75 72 65 4c TR pulSignatureL 234e0 65 6e 29 20 7b 0a 09 73 74 61 74 69 63 20 43 4b en) {..static CK 234f0 5f 42 59 54 45 20 73 69 67 62 75 66 5b 31 30 32 _BYTE sigbuf[102 23500 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 20 73 69 67 4];..ssize_t sig 23510 62 75 66 6c 65 6e 3b 0a 09 43 4b 5f 53 4c 4f 54 buflen;..CK_SLOT 23520 5f 49 44 20 73 6c 6f 74 49 44 3b 0a 09 43 4b 5f _ID slotID;..CK_ 23530 52 56 20 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f RV retval = CKR_ 23540 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 GENERAL_ERROR;.. 23550 69 6e 74 20 74 65 72 6d 69 6e 61 74 65 5f 73 69 int terminate_si 23560 67 6e 20 3d 20 31 3b 0a 09 69 6e 74 20 6d 75 74 gn = 1;..int mut 23570 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 ex_retval;...CAC 23580 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 23590 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 235a0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 235b0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 235c0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 235d0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 235e0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 235f0 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 23600 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 23610 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 ZED);..}...if (p 23620 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 20 3d ulSignatureLen = 23630 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK 23640 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 23650 22 45 72 72 6f 72 2e 20 70 75 6c 53 69 67 6e 61 "Error. pulSigna 23660 74 75 72 65 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e tureLen is NULL. 23670 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 23680 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 R_ARGUMENTS_BAD) 23690 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 ;..}...if (hSess 236a0 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 ion == 0 || hSes 236b0 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 sion >= (sizeof( 236c0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 236d0 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 236e0 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 _sessions[0]))) 236f0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 23700 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 23710 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 Session out of 23720 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 range.");......r 23730 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 23740 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 23750 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 );..}...mutex_re 23760 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 23770 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 23780 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 23790 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 237a0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 237b0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 237c0 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 237d0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 237e0 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 237f0 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 R);..}...if (!ca 23800 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 23810 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 ession].active) 23820 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 23830 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 23840 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 23850 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 23860 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 23870 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 23880 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 23890 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 238a0 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 NVALID);..}...if 238b0 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f (!cackey_sessio 238c0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 238d0 6e 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 n_active) {...ca 238e0 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 238f0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 23900 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 );....CACKEY_DEB 23910 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 23920 2e 20 20 53 69 67 6e 20 6e 6f 74 20 61 63 74 69 . Sign not acti 23930 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 ve.");......retu 23940 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e rn(CKR_OPERATION 23950 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 23960 29 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 49 44 20 3d );..}...slotID = 23970 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 23980 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f 74 49 [hSession].slotI 23990 44 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 D;...if (slotID 239a0 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d < 0 || slotID >= 239b0 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 239c0 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 slots) / sizeof( 239d0 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 cackey_slots[0]) 239e0 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE 239f0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 23a00 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 r. Invalid slot 23a10 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c requested (%lu), 23a20 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 outside of vali 23a30 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 d range", slotID 23a40 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 23a50 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 23a60 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 ..}...if (cackey 23a70 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 _slots[slotID].a 23a80 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09 09 ctive == 0) {... 23a90 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 23aa0 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 NTF("Error. Inva 23ab0 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 lid slot request 23ac0 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 6e ed (%lu), slot n 23ad0 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 ot currently act 23ae0 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a ive", slotID);.. 23af0 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 23b00 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 23b10 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72 6e lock);....return 23b20 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 23b30 4f 52 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 68 OR);..}...switch 23b40 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (cackey_session 23b50 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 23b60 5f 6d 65 63 68 61 6e 69 73 6d 29 20 7b 0a 09 09 _mechanism) {... 23b70 63 61 73 65 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 case CKM_RSA_PKC 23b80 53 3a 0a 09 09 09 2f 2a 20 41 73 6b 20 63 61 72 S:..../* Ask car 23b90 64 20 74 6f 20 73 69 67 6e 20 2a 2f 0a 09 09 09 d to sign */.... 23ba0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 23bb0 4e 54 46 28 22 41 73 6b 69 6e 67 20 74 6f 20 73 NTF("Asking to s 23bc0 69 67 6e 20 66 72 6f 6d 20 69 64 65 6e 74 69 74 ign from identit 23bd0 79 20 25 70 20 69 6e 20 73 65 73 73 69 6f 6e 20 y %p in session 23be0 25 6c 75 22 2c 20 63 61 63 6b 65 79 5f 73 65 73 %lu", cackey_ses 23bf0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 23c00 73 69 67 6e 5f 69 64 65 6e 74 69 74 79 2c 20 28 sign_identity, ( 23c10 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 unsigned long) h 23c20 53 65 73 73 69 6f 6e 29 3b 0a 09 09 09 73 69 67 Session);....sig 23c30 62 75 66 6c 65 6e 20 3d 20 63 61 63 6b 65 79 5f buflen = cackey_ 23c40 73 69 67 6e 64 65 63 72 79 70 74 28 26 63 61 63 signdecrypt(&cac 23c50 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 key_slots[slotID 23c60 5d 2c 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ], cackey_sessio 23c70 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 23c80 6e 5f 69 64 65 6e 74 69 74 79 2c 20 63 61 63 6b n_identity, cack 23c90 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 23ca0 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 2c 20 sion].sign_buf, 23cb0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 23cc0 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 hSession].sign_b 23cd0 75 66 75 73 65 64 2c 20 73 69 67 62 75 66 2c 20 ufused, sigbuf, 23ce0 73 69 7a 65 6f 66 28 73 69 67 62 75 66 29 2c 20 sizeof(sigbuf), 23cf0 31 2c 20 30 29 3b 0a 0a 09 09 09 69 66 20 28 73 1, 0);.....if (s 23d00 69 67 62 75 66 6c 65 6e 20 3c 20 30 29 20 7b 0a igbuflen < 0) {. 23d10 09 09 09 09 2f 2a 20 53 69 67 6e 69 6e 67 20 66 ..../* Signing f 23d20 61 69 6c 65 64 2e 20 2a 2f 0a 09 09 09 09 69 66 ailed. */.....if 23d30 20 28 73 69 67 62 75 66 6c 65 6e 20 3d 3d 20 43 (sigbuflen == C 23d40 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 4e 45 45 ACKEY_PCSC_E_NEE 23d50 44 4c 4f 47 49 4e 29 20 7b 0a 09 09 09 09 09 72 DLOGIN) {......r 23d60 65 74 76 61 6c 20 3d 20 43 4b 52 5f 55 53 45 52 etval = CKR_USER 23d70 5f 4e 4f 54 5f 4c 4f 47 47 45 44 5f 49 4e 3b 0a _NOT_LOGGED_IN;. 23d80 09 09 09 09 7d 20 65 6c 73 65 20 69 66 20 28 73 ....} else if (s 23d90 69 67 62 75 66 6c 65 6e 20 3d 3d 20 43 41 43 4b igbuflen == CACK 23da0 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 EY_PCSC_E_TOKENA 23db0 42 53 45 4e 54 29 20 7b 0a 09 09 09 09 09 72 65 BSENT) {......re 23dc0 74 76 61 6c 20 3d 20 43 4b 52 5f 44 45 56 49 43 tval = CKR_DEVIC 23dd0 45 5f 52 45 4d 4f 56 45 44 3b 0a 09 09 09 09 7d E_REMOVED;.....} 23de0 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 72 65 74 else {......ret 23df0 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e 45 52 41 val = CKR_GENERA 23e00 4c 5f 45 52 52 4f 52 3b 0a 09 09 09 09 7d 0a 09 L_ERROR;.....}.. 23e10 09 09 7d 20 65 6c 73 65 20 69 66 20 28 28 28 75 ..} else if (((u 23e20 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 69 nsigned long) si 23e30 67 62 75 66 6c 65 6e 29 20 3e 20 2a 70 75 6c 53 gbuflen) > *pulS 23e40 69 67 6e 61 74 75 72 65 4c 65 6e 20 26 26 20 70 ignatureLen && p 23e50 53 69 67 6e 61 74 75 72 65 29 20 7b 0a 09 09 09 Signature) {.... 23e60 09 2f 2a 20 53 69 67 6e 65 64 20 64 61 74 61 20 ./* Signed data 23e70 74 6f 6f 20 6c 61 72 67 65 20 2a 2f 0a 09 09 09 too large */.... 23e80 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 23e90 49 4e 54 46 28 22 72 65 74 76 61 6c 20 3d 20 43 INTF("retval = C 23ea0 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d KR_BUFFER_TOO_SM 23eb0 41 4c 4c 3b 20 20 73 69 67 62 75 66 6c 65 6e 20 ALL; sigbuflen 23ec0 3d 20 25 6c 75 2c 20 70 75 6c 53 69 67 6e 61 74 = %lu, pulSignat 23ed0 75 72 65 4c 65 6e 20 3d 20 25 6c 75 22 2c 20 28 ureLen = %lu", ( 23ee0 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 unsigned long) s 23ef0 69 67 62 75 66 6c 65 6e 2c 20 28 75 6e 73 69 67 igbuflen, (unsig 23f00 6e 65 64 20 6c 6f 6e 67 29 20 2a 70 75 6c 53 69 ned long) *pulSi 23f10 67 6e 61 74 75 72 65 4c 65 6e 29 3b 0a 0a 09 09 gnatureLen);.... 23f20 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 42 ..retval = CKR_B 23f30 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b UFFER_TOO_SMALL; 23f40 0a 0a 09 09 09 09 74 65 72 6d 69 6e 61 74 65 5f ......terminate_ 23f50 73 69 67 6e 20 3d 20 30 3b 0a 09 09 09 7d 20 65 sign = 0;....} e 23f60 6c 73 65 20 7b 0a 09 09 09 09 74 65 72 6d 69 6e lse {.....termin 23f70 61 74 65 5f 73 69 67 6e 20 3d 20 30 3b 0a 0a 09 ate_sign = 0;... 23f80 09 09 09 69 66 20 28 70 53 69 67 6e 61 74 75 72 ...if (pSignatur 23f90 65 29 20 7b 0a 09 09 09 09 09 6d 65 6d 63 70 79 e) {......memcpy 23fa0 28 70 53 69 67 6e 61 74 75 72 65 2c 20 73 69 67 (pSignature, sig 23fb0 62 75 66 2c 20 73 69 67 62 75 66 6c 65 6e 29 3b buf, sigbuflen); 23fc0 0a 0a 09 09 09 09 09 74 65 72 6d 69 6e 61 74 65 .......terminate 23fd0 5f 73 69 67 6e 20 3d 20 31 3b 0a 09 09 09 09 7d _sign = 1;.....} 23fe0 0a 0a 09 09 09 09 2a 70 75 6c 53 69 67 6e 61 74 ......*pulSignat 23ff0 75 72 65 4c 65 6e 20 3d 20 73 69 67 62 75 66 6c ureLen = sigbufl 24000 65 6e 3b 0a 0a 09 09 09 09 72 65 74 76 61 6c 20 en;......retval 24010 3d 20 43 4b 52 5f 4f 4b 3b 0a 09 09 09 7d 0a 0a = CKR_OK;....}.. 24020 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 ...break;...case 24030 20 43 4b 4d 5f 53 48 41 31 5f 52 53 41 5f 50 4b CKM_SHA1_RSA_PK 24040 43 53 3a 0a 09 09 09 2f 2a 20 58 58 58 3a 20 41 CS:..../* XXX: A 24050 63 63 75 6d 75 6c 61 74 65 20 69 6e 74 6f 20 61 ccumulate into a 24060 20 53 48 41 31 20 68 61 73 68 20 2a 2f 0a 09 09 SHA1 hash */... 24070 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e .cackey_mutex_un 24080 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 24090 6f 63 6b 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 ock);.....CACKEY 240a0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 240b0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 240c0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 240d0 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 240e0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 240f0 4f 52 54 45 44 29 3b 0a 0a 09 09 09 72 65 74 75 ORTED);.....retu 24100 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 24110 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 24120 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 69 ...break;..}...i 24130 66 20 28 74 65 72 6d 69 6e 61 74 65 5f 73 69 67 f (terminate_sig 24140 6e 29 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 n) {...if (cacke 24150 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 24160 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20 7b ion].sign_buf) { 24170 0a 09 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f ....free(cackey_ 24180 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 24190 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 3b 0a 09 09 n].sign_buf);... 241a0 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 73 }....cackey_sess 241b0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 241c0 69 67 6e 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a ign_active = 0;. 241d0 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 .}...mutex_retva 241e0 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 241f0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 24200 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 24210 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 24220 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 24230 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 24240 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c Unlocking fail 24250 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 24260 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 24270 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 OR);..}...CACKEY 24280 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 24290 65 74 75 72 6e 69 6e 67 20 25 69 22 2c 20 28 69 eturning %i", (i 242a0 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a 0a 09 72 nt) retval);...r 242b0 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d eturn(retval);.} 242c0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 242d0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 TION(CK_RV, C_Si 242e0 67 6e 52 65 63 6f 76 65 72 49 6e 69 74 29 28 43 gnRecoverInit)(C 242f0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 24300 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 hSession, CK_ME 24310 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 CHANISM_PTR pMec 24320 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 hanism, CK_OBJEC 24330 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b T_HANDLE hKey) { 24340 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 24350 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 24360 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 24370 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 24380 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 24390 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 243a0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 243b0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 243c0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 243d0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 243e0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 243f0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 24400 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 24410 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 24420 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 24430 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 24440 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 24450 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 24460 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 24470 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 24480 20 43 5f 53 69 67 6e 52 65 63 6f 76 65 72 29 28 C_SignRecover)( 24490 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 244a0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 244b0 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 YTE_PTR pData, C 244c0 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 K_ULONG ulDataLe 244d0 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 244e0 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c Signature, CK_UL 244f0 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 ONG_PTR pulSigna 24500 74 75 72 65 4c 65 6e 29 20 7b 0a 09 43 41 43 4b tureLen) {..CACK 24510 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 24520 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 24530 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 24540 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 24550 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 24560 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 24570 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 24580 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 24590 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 245a0 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 245b0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 245c0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 245d0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 245e0 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 245f0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 24600 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 24610 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 24620 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 24630 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 24640 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 ION(CK_RV, C_Ver 24650 69 66 79 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 ifyInit)(CK_SESS 24660 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 24670 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 ion, CK_MECHANIS 24680 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d M_PTR pMechanism 24690 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 246a0 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b LE hKey) {..CACK 246b0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 246c0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 246d0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 246e0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 246f0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 24700 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 24710 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 24720 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 24730 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 24740 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 24750 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 24760 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 24770 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 24780 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 24790 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 247a0 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 247b0 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 247c0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 247d0 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 247e0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 ION(CK_RV, C_Ver 247f0 69 66 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f ify)(CK_SESSION_ 24800 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 24810 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 61 CK_BYTE_PTR pDa 24820 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 ta, CK_ULONG ulD 24830 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f ataLen, CK_BYTE_ 24840 50 54 52 20 70 53 69 67 6e 61 74 75 72 65 2c 20 PTR pSignature, 24850 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 69 67 6e 61 CK_ULONG ulSigna 24860 74 75 72 65 4c 65 6e 29 20 7b 0a 09 43 41 43 4b tureLen) {..CACK 24870 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 24880 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 24890 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 248a0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 248b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 248c0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 248d0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 248e0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 248f0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 24900 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 24910 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 24920 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 24930 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 24940 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 24950 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 24960 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 24970 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 24980 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 24990 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 249a0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 ION(CK_RV, C_Ver 249b0 69 66 79 55 70 64 61 74 65 29 28 43 4b 5f 53 45 ifyUpdate)(CK_SE 249c0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 249d0 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 ssion, CK_BYTE_P 249e0 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f TR pPart, CK_ULO 249f0 4e 47 20 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a NG ulPartLen) {. 24a00 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 24a10 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 24a20 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 24a30 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 24a40 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 24a50 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 24a60 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 24a70 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 24a80 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 24a90 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 24aa0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 24ab0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 24ac0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 24ad0 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 24ae0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 24af0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 24b00 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 24b10 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 24b20 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 24b30 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 24b40 43 5f 56 65 72 69 66 79 46 69 6e 61 6c 29 28 43 C_VerifyFinal)(C 24b50 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 24b60 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 24b70 54 45 5f 50 54 52 20 70 53 69 67 6e 61 74 75 72 TE_PTR pSignatur 24b80 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 69 e, CK_ULONG ulSi 24b90 67 6e 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09 43 gnatureLen) {..C 24ba0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 24bb0 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 24bc0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 24bd0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 24be0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 24bf0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 24c00 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 24c10 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 24c20 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 24c30 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 24c40 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 24c50 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 24c60 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 24c70 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 24c80 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 24c90 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 24ca0 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 24cb0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 24cc0 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 24cd0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 24ce0 56 65 72 69 66 79 52 65 63 6f 76 65 72 49 6e 69 VerifyRecoverIni 24cf0 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 t)(CK_SESSION_HA 24d00 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 24d10 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 K_MECHANISM_PTR 24d20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f pMechanism, CK_O 24d30 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 BJECT_HANDLE hKe 24d40 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 y) {..CACKEY_DEB 24d50 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 24d60 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 24d70 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 24d80 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 24d90 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 24da0 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 24db0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 24dc0 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 24dd0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 24de0 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 24df0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 24e00 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 24e10 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 24e20 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 24e30 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 24e40 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 24e50 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 24e60 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 24e70 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 24e80 5f 52 56 2c 20 43 5f 56 65 72 69 66 79 52 65 63 _RV, C_VerifyRec 24e90 6f 76 65 72 29 28 43 4b 5f 53 45 53 53 49 4f 4e over)(CK_SESSION 24ea0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 24eb0 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 , CK_BYTE_PTR pS 24ec0 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f ignature, CK_ULO 24ed0 4e 47 20 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 NG ulSignatureLe 24ee0 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 24ef0 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 Data, CK_ULONG_P 24f00 54 52 20 70 75 6c 44 61 74 61 4c 65 6e 29 20 7b TR pulDataLen) { 24f10 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 24f20 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 24f30 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 24f40 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 24f50 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 24f60 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 24f70 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 24f80 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 24f90 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 24fa0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 24fb0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 24fc0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 24fd0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 24fe0 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 24ff0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 25000 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 25010 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 25020 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 25030 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 25040 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 25050 20 43 5f 44 69 67 65 73 74 45 6e 63 72 79 70 74 C_DigestEncrypt 25060 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 Update)(CK_SESSI 25070 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 25080 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 25090 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 pPart, CK_ULONG 250a0 75 6c 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 ulPartLen, CK_BY 250b0 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 TE_PTR pEncrypte 250c0 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f dPart, CK_ULONG_ 250d0 50 54 52 20 70 75 6c 45 6e 63 72 79 70 74 65 64 PTR pulEncrypted 250e0 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b PartLen) {..CACK 250f0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 25100 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 25110 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 25120 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 25130 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 25140 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 25150 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 25160 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 25170 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 25180 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 25190 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 251a0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 251b0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 251c0 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 251d0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 251e0 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 251f0 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 25200 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 25210 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 25220 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 ION(CK_RV, C_Dec 25230 72 79 70 74 44 69 67 65 73 74 55 70 64 61 74 65 ryptDigestUpdate 25240 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 25250 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 25260 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 _BYTE_PTR pEncry 25270 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f ptedPart, CK_ULO 25280 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64 50 61 NG ulEncryptedPa 25290 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 rtLen, CK_BYTE_P 252a0 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f TR pPart, CK_ULO 252b0 4e 47 5f 50 54 52 20 70 75 6c 50 61 72 74 4c 65 NG_PTR pulPartLe 252c0 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 n) {..CACKEY_DEB 252d0 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 252e0 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 252f0 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 25300 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 25310 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 25320 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 25330 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 25340 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 25350 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 25360 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 25370 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 25380 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 25390 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 253a0 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 253b0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 253c0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 253d0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 253e0 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 253f0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 25400 5f 52 56 2c 20 43 5f 53 69 67 6e 45 6e 63 72 79 _RV, C_SignEncry 25410 70 74 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 ptUpdate)(CK_SES 25420 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 25430 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 sion, CK_BYTE_PT 25440 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e R pPart, CK_ULON 25450 47 20 75 6c 50 61 72 74 4c 65 6e 2c 20 43 4b 5f G ulPartLen, CK_ 25460 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 BYTE_PTR pEncryp 25470 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e tedPart, CK_ULON 25480 47 5f 50 54 52 20 70 75 6c 45 6e 63 72 79 70 74 G_PTR pulEncrypt 25490 65 64 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 edPartLen) {..CA 254a0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 254b0 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 254c0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 254d0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 254e0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 254f0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 25500 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 25510 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 25520 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 25530 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 25540 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 25550 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 25560 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 25570 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 25580 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 25590 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 255a0 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 255b0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 255c0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 255d0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 CTION(CK_RV, C_D 255e0 65 63 72 79 70 74 56 65 72 69 66 79 55 70 64 61 ecryptVerifyUpda 255f0 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 te)(CK_SESSION_H 25600 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 25610 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 CK_BYTE_PTR pEnc 25620 72 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 ryptedPart, CK_U 25630 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64 LONG ulEncrypted 25640 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 PartLen, CK_BYTE 25650 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 _PTR pPart, CK_U 25660 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 50 61 72 74 LONG_PTR pulPart 25670 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Len) {..CACKEY_D 25680 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 25690 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 256a0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 256b0 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 256c0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 256d0 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 256e0 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 256f0 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 25700 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 25710 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 25720 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 25730 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 25740 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 25750 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 25760 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 25770 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 25780 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 25790 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 257a0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 257b0 43 4b 5f 52 56 2c 20 43 5f 47 65 6e 65 72 61 74 CK_RV, C_Generat 257c0 65 4b 65 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e eKey)(CK_SESSION 257d0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 257e0 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 , CK_MECHANISM_P 257f0 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 TR pMechanism, C 25800 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 K_ATTRIBUTE_PTR 25810 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c pTemplate, CK_UL 25820 4f 4e 47 20 75 6c 43 6f 75 6e 74 2c 20 43 4b 5f ONG ulCount, CK_ 25830 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 OBJECT_HANDLE_PT 25840 52 20 70 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b R phKey) {..CACK 25850 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 25860 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 25870 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 25880 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 25890 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 258a0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 258b0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 258c0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 258d0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 258e0 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 258f0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 25900 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 25910 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 25920 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 25930 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 25940 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 25950 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 25960 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 25970 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 25980 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 6e ION(CK_RV, C_Gen 25990 65 72 61 74 65 4b 65 79 50 61 69 72 29 28 43 4b erateKeyPair)(CK 259a0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 259b0 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 hSession, CK_MEC 259c0 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 HANISM_PTR pMech 259d0 61 6e 69 73 6d 2c 20 43 4b 5f 41 54 54 52 49 42 anism, CK_ATTRIB 259e0 55 54 45 5f 50 54 52 20 70 50 75 62 6c 69 63 4b UTE_PTR pPublicK 259f0 65 79 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 eyTemplate, CK_U 25a00 4c 4f 4e 47 20 75 6c 50 75 62 6c 69 63 4b 65 79 LONG ulPublicKey 25a10 41 74 74 72 69 62 75 74 65 43 6f 75 6e 74 2c 20 AttributeCount, 25a20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 CK_ATTRIBUTE_PTR 25a30 20 70 50 72 69 76 61 74 65 4b 65 79 54 65 6d 70 pPrivateKeyTemp 25a40 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 late, CK_ULONG u 25a50 6c 50 72 69 76 61 74 65 4b 65 79 41 74 74 72 69 lPrivateKeyAttri 25a60 62 75 74 65 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 buteCount, CK_OB 25a70 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 JECT_HANDLE_PTR 25a80 70 68 50 75 62 6c 69 63 4b 65 79 2c 20 43 4b 5f phPublicKey, CK_ 25a90 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 OBJECT_HANDLE_PT 25aa0 52 20 70 68 50 72 69 76 61 74 65 4b 65 79 29 20 R phPrivateKey) 25ab0 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 25ac0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 25ad0 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 25ae0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 25af0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 25b00 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 25b10 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 25b20 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 25b30 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 25b40 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 25b50 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 25b60 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 25b70 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 25b80 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 25b90 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 25ba0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 25bb0 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 25bc0 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 25bd0 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN 25be0 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 25bf0 2c 20 43 5f 57 72 61 70 4b 65 79 29 28 43 4b 5f , C_WrapKey)(CK_ 25c00 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 25c10 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 Session, CK_MECH 25c20 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 ANISM_PTR pMecha 25c30 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f nism, CK_OBJECT_ 25c40 48 41 4e 44 4c 45 20 68 57 72 61 70 70 69 6e 67 HANDLE hWrapping 25c50 4b 65 79 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 Key, CK_OBJECT_H 25c60 41 4e 44 4c 45 20 68 4b 65 79 2c 20 43 4b 5f 42 ANDLE hKey, CK_B 25c70 59 54 45 5f 50 54 52 20 70 57 72 61 70 70 65 64 YTE_PTR pWrapped 25c80 4b 65 79 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 Key, CK_ULONG_PT 25c90 52 20 70 75 6c 57 72 61 70 70 65 64 4b 65 79 4c R pulWrappedKeyL 25ca0 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 en) {..CACKEY_DE 25cb0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 25cc0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 25cd0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 25ce0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 25cf0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 25d00 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 25d10 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 25d20 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 25d30 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 25d40 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 25d50 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 25d60 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 25d70 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 25d80 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 25d90 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 25da0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 25db0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 25dc0 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 25dd0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 25de0 4b 5f 52 56 2c 20 43 5f 55 6e 77 72 61 70 4b 65 K_RV, C_UnwrapKe 25df0 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 y)(CK_SESSION_HA 25e00 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 25e10 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 K_MECHANISM_PTR 25e20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f pMechanism, CK_O 25e30 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 55 6e BJECT_HANDLE hUn 25e40 77 72 61 70 70 69 6e 67 4b 65 79 2c 20 43 4b 5f wrappingKey, CK_ 25e50 42 59 54 45 5f 50 54 52 20 70 57 72 61 70 70 65 BYTE_PTR pWrappe 25e60 64 4b 65 79 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 dKey, CK_ULONG u 25e70 6c 57 72 61 70 70 65 64 4b 65 79 4c 65 6e 2c 20 lWrappedKeyLen, 25e80 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 CK_ATTRIBUTE_PTR 25e90 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 pTemplate, CK_U 25ea0 4c 4f 4e 47 20 75 6c 41 74 74 72 69 62 75 74 65 LONG ulAttribute 25eb0 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 Count, CK_OBJECT 25ec0 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4b 65 _HANDLE_PTR phKe 25ed0 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 y) {..CACKEY_DEB 25ee0 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 25ef0 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 25f00 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 25f10 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 25f20 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 25f30 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 25f40 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 25f50 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 25f60 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 25f70 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 25f80 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 25f90 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 25fa0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 25fb0 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 25fc0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 25fd0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 25fe0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 25ff0 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 26000 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 26010 5f 52 56 2c 20 43 5f 44 65 72 69 76 65 4b 65 79 _RV, C_DeriveKey 26020 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 26030 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 26040 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 _MECHANISM_PTR p 26050 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 Mechanism, CK_OB 26060 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 42 61 73 JECT_HANDLE hBas 26070 65 4b 65 79 2c 20 43 4b 5f 41 54 54 52 49 42 55 eKey, CK_ATTRIBU 26080 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 TE_PTR pTemplate 26090 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 41 74 74 , CK_ULONG ulAtt 260a0 72 69 62 75 74 65 43 6f 75 6e 74 2c 20 43 4b 5f ributeCount, CK_ 260b0 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 OBJECT_HANDLE_PT 260c0 52 20 70 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b R phKey) {..CACK 260d0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 260e0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 260f0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 26100 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 26110 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 26120 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 26130 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 26140 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 26150 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 26160 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 26170 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 26180 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 26190 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 261a0 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 261b0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 261c0 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 261d0 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 261e0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 261f0 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 26200 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 65 ION(CK_RV, C_See 26210 64 52 61 6e 64 6f 6d 29 28 43 4b 5f 53 45 53 53 dRandom)(CK_SESS 26220 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 26230 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 26240 20 70 53 65 65 64 2c 20 43 4b 5f 55 4c 4f 4e 47 pSeed, CK_ULONG 26250 20 75 6c 53 65 65 64 4c 65 6e 29 20 7b 0a 09 43 ulSeedLen) {..C 26260 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 26270 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 26280 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 26290 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 262a0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 262b0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 262c0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 262d0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 262e0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 262f0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 26300 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 26310 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 26320 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 26330 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 26340 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 26350 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 26360 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 26370 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 26380 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 26390 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 263a0 47 65 6e 65 72 61 74 65 52 61 6e 64 6f 6d 29 28 GenerateRandom)( 263b0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 263c0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 263d0 59 54 45 5f 50 54 52 20 70 52 61 6e 64 6f 6d 44 YTE_PTR pRandomD 263e0 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c ata, CK_ULONG ul 263f0 52 61 6e 64 6f 6d 4c 65 6e 29 20 7b 0a 09 43 41 RandomLen) {..CA 26400 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 26410 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 26420 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 26430 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 26440 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 26450 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 26460 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 26470 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 26480 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 26490 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 264a0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 264b0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 264c0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 264d0 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 264e0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 264f0 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 26500 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 26510 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 26520 7d 0a 0a 2f 2a 20 44 65 70 72 65 63 61 74 65 64 }../* Deprecated 26530 20 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 43 4b 5f Function */.CK_ 26540 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 26550 43 4b 5f 52 56 2c 20 43 5f 47 65 74 46 75 6e 63 CK_RV, C_GetFunc 26560 74 69 6f 6e 53 74 61 74 75 73 29 28 43 4b 5f 53 tionStatus)(CK_S 26570 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 26580 65 73 73 69 6f 6e 29 20 7b 0a 09 43 41 43 4b 45 ession) {..CACKE 26590 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 265a0 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 43 41 43 Called.");...CAC 265b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 265c0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 265d0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 FUNCTION_NOT_PAR 265e0 41 4c 4c 45 4c 20 28 25 69 29 22 2c 20 43 4b 52 ALLEL (%i)", CKR 265f0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 _FUNCTION_NOT_PA 26600 52 41 4c 4c 45 4c 29 3b 0a 0a 09 72 65 74 75 72 RALLEL);...retur 26610 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 26620 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a 09 OT_PARALLEL);... 26630 68 53 65 73 73 69 6f 6e 20 3d 20 68 53 65 73 73 hSession = hSess 26640 69 6f 6e 3b 20 2f 2a 20 53 75 70 72 65 73 73 20 ion; /* Supress 26650 75 6e 75 73 65 64 20 76 61 72 69 61 62 6c 65 20 unused variable 26660 77 61 72 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f 2a warning */.}../* 26670 20 44 65 70 72 65 63 61 74 65 64 20 46 75 6e 63 Deprecated Func 26680 74 69 6f 6e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e tion */.CK_DEFIN 26690 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 266a0 2c 20 43 5f 43 61 6e 63 65 6c 46 75 6e 63 74 69 , C_CancelFuncti 266b0 6f 6e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 on)(CK_SESSION_H 266c0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 20 ANDLE hSession) 266d0 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 266e0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 266f0 29 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 );...CACKEY_DEBU 26700 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 26710 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 26720 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 20 28 25 _NOT_PARALLEL (% 26730 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 26740 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 3b N_NOT_PARALLEL); 26750 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 26760 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c NCTION_NOT_PARAL 26770 4c 45 4c 29 3b 0a 0a 09 68 53 65 73 73 69 6f 6e LEL);...hSession 26780 20 3d 20 68 53 65 73 73 69 6f 6e 3b 20 2f 2a 20 = hSession; /* 26790 53 75 70 72 65 73 73 20 75 6e 75 73 65 64 20 76 Supress unused v 267a0 61 72 69 61 62 6c 65 20 77 61 72 6e 69 6e 67 20 ariable warning 267b0 2a 2f 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f */.}..CK_DEFINE_ 267c0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 267d0 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 4c 69 73 C_GetFunctionLis 267e0 74 29 28 43 4b 5f 46 55 4e 43 54 49 4f 4e 5f 4c t)(CK_FUNCTION_L 267f0 49 53 54 5f 50 54 52 5f 50 54 52 20 70 70 46 75 IST_PTR_PTR ppFu 26800 6e 63 74 69 6f 6e 4c 69 73 74 29 20 7b 0a 09 43 nctionList) {..C 26810 4b 5f 46 55 4e 43 54 49 4f 4e 5f 4c 49 53 54 5f K_FUNCTION_LIST_ 26820 50 54 52 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 PTR pFunctionLis 26830 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 t;...CACKEY_DEBU 26840 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 26850 2e 22 29 3b 0a 0a 09 69 66 20 28 70 70 46 75 6e .");...if (ppFun 26860 63 74 69 6f 6e 4c 69 73 74 20 3d 3d 20 4e 55 4c ctionList == NUL 26870 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 L) {...CACKEY_DE 26880 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 26890 72 2e 20 70 70 46 75 6e 63 74 69 6f 6e 4c 69 73 r. ppFunctionLis 268a0 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 t is NULL.");... 268b0 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 268c0 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 268d0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 20 3d .pFunctionList = 268e0 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a malloc(sizeof(* 268f0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 29 29 3b pFunctionList)); 26900 0a 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ...pFunctionList 26910 2d 3e 76 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 ->version.major 26920 3d 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54 = ((CACKEY_CRYPT 26930 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 OKI_VERSION_CODE 26940 29 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b ) >> 16) & 0xff; 26950 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 26960 3e 76 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d >version.minor = 26970 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54 4f ((CACKEY_CRYPTO 26980 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 29 KI_VERSION_CODE) 26990 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a >> 8) & 0xff;.. 269a0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 269b0 43 5f 49 6e 69 74 69 61 6c 69 7a 65 20 3d 20 43 C_Initialize = C 269c0 5f 49 6e 69 74 69 61 6c 69 7a 65 3b 0a 09 70 46 _Initialize;..pF 269d0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 unctionList->C_F 269e0 69 6e 61 6c 69 7a 65 20 3d 20 43 5f 46 69 6e 61 inalize = C_Fina 269f0 6c 69 7a 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e lize;..pFunction 26a00 4c 69 73 74 2d 3e 43 5f 47 65 74 49 6e 66 6f 20 List->C_GetInfo 26a10 3d 20 43 5f 47 65 74 49 6e 66 6f 3b 0a 09 70 46 = C_GetInfo;..pF 26a20 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 unctionList->C_G 26a30 65 74 53 6c 6f 74 4c 69 73 74 20 3d 20 43 5f 47 etSlotList = C_G 26a40 65 74 53 6c 6f 74 4c 69 73 74 3b 0a 09 70 46 75 etSlotList;..pFu 26a50 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge 26a60 74 53 6c 6f 74 49 6e 66 6f 20 3d 20 43 5f 47 65 tSlotInfo = C_Ge 26a70 74 53 6c 6f 74 49 6e 66 6f 3b 0a 09 70 46 75 6e tSlotInfo;..pFun 26a80 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 ctionList->C_Get 26a90 54 6f 6b 65 6e 49 6e 66 6f 20 3d 20 43 5f 47 65 TokenInfo = C_Ge 26aa0 74 54 6f 6b 65 6e 49 6e 66 6f 3b 0a 09 70 46 75 tTokenInfo;..pFu 26ab0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 57 61 nctionList->C_Wa 26ac0 69 74 46 6f 72 53 6c 6f 74 45 76 65 6e 74 20 3d itForSlotEvent = 26ad0 20 43 5f 57 61 69 74 46 6f 72 53 6c 6f 74 45 76 C_WaitForSlotEv 26ae0 65 6e 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ent;..pFunctionL 26af0 69 73 74 2d 3e 43 5f 47 65 74 4d 65 63 68 61 6e ist->C_GetMechan 26b00 69 73 6d 4c 69 73 74 20 3d 20 43 5f 47 65 74 4d ismList = C_GetM 26b10 65 63 68 61 6e 69 73 6d 4c 69 73 74 3b 0a 09 70 echanismList;..p 26b20 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 26b30 47 65 74 4d 65 63 68 61 6e 69 73 6d 49 6e 66 6f GetMechanismInfo 26b40 20 3d 20 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 = C_GetMechanis 26b50 6d 49 6e 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f mInfo;..pFunctio 26b60 6e 4c 69 73 74 2d 3e 43 5f 49 6e 69 74 54 6f 6b nList->C_InitTok 26b70 65 6e 20 3d 20 43 5f 49 6e 69 74 54 6f 6b 65 6e en = C_InitToken 26b80 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 26b90 2d 3e 43 5f 49 6e 69 74 50 49 4e 20 3d 20 43 5f ->C_InitPIN = C_ 26ba0 49 6e 69 74 50 49 4e 3b 0a 09 70 46 75 6e 63 74 InitPIN;..pFunct 26bb0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 50 49 ionList->C_SetPI 26bc0 4e 20 3d 20 43 5f 53 65 74 50 49 4e 3b 0a 09 70 N = C_SetPIN;..p 26bd0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 26be0 4f 70 65 6e 53 65 73 73 69 6f 6e 20 3d 20 43 5f OpenSession = C_ 26bf0 4f 70 65 6e 53 65 73 73 69 6f 6e 3b 0a 09 70 46 OpenSession;..pF 26c00 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 unctionList->C_C 26c10 6c 6f 73 65 53 65 73 73 69 6f 6e 20 3d 20 43 5f loseSession = C_ 26c20 43 6c 6f 73 65 53 65 73 73 69 6f 6e 3b 0a 09 70 CloseSession;..p 26c30 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 26c40 43 6c 6f 73 65 41 6c 6c 53 65 73 73 69 6f 6e 73 CloseAllSessions 26c50 20 3d 20 43 5f 43 6c 6f 73 65 41 6c 6c 53 65 73 = C_CloseAllSes 26c60 73 69 6f 6e 73 3b 0a 09 70 46 75 6e 63 74 69 6f sions;..pFunctio 26c70 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 53 65 73 73 nList->C_GetSess 26c80 69 6f 6e 49 6e 66 6f 20 3d 20 43 5f 47 65 74 53 ionInfo = C_GetS 26c90 65 73 73 69 6f 6e 49 6e 66 6f 3b 0a 09 70 46 75 essionInfo;..pFu 26ca0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge 26cb0 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 20 tOperationState 26cc0 3d 20 43 5f 47 65 74 4f 70 65 72 61 74 69 6f 6e = C_GetOperation 26cd0 53 74 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f State;..pFunctio 26ce0 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 4f 70 65 72 nList->C_SetOper 26cf0 61 74 69 6f 6e 53 74 61 74 65 20 3d 20 43 5f 53 ationState = C_S 26d00 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 etOperationState 26d10 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 26d20 2d 3e 43 5f 4c 6f 67 69 6e 20 3d 20 43 5f 4c 6f ->C_Login = C_Lo 26d30 67 69 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c gin;..pFunctionL 26d40 69 73 74 2d 3e 43 5f 4c 6f 67 6f 75 74 20 3d 20 ist->C_Logout = 26d50 43 5f 4c 6f 67 6f 75 74 3b 0a 09 70 46 75 6e 63 C_Logout;..pFunc 26d60 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 72 65 61 tionList->C_Crea 26d70 74 65 4f 62 6a 65 63 74 20 3d 20 43 5f 43 72 65 teObject = C_Cre 26d80 61 74 65 4f 62 6a 65 63 74 3b 0a 09 70 46 75 6e ateObject;..pFun 26d90 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 6f 70 ctionList->C_Cop 26da0 79 4f 62 6a 65 63 74 20 3d 20 43 5f 43 6f 70 79 yObject = C_Copy 26db0 4f 62 6a 65 63 74 3b 0a 09 70 46 75 6e 63 74 69 Object;..pFuncti 26dc0 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 73 74 72 6f onList->C_Destro 26dd0 79 4f 62 6a 65 63 74 20 3d 20 43 5f 44 65 73 74 yObject = C_Dest 26de0 72 6f 79 4f 62 6a 65 63 74 3b 0a 09 70 46 75 6e royObject;..pFun 26df0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 ctionList->C_Get 26e00 4f 62 6a 65 63 74 53 69 7a 65 20 3d 20 43 5f 47 ObjectSize = C_G 26e10 65 74 4f 62 6a 65 63 74 53 69 7a 65 3b 0a 09 70 etObjectSize;..p 26e20 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 26e30 47 65 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 GetAttributeValu 26e40 65 20 3d 20 43 5f 47 65 74 41 74 74 72 69 62 75 e = C_GetAttribu 26e50 74 65 56 61 6c 75 65 3b 0a 09 70 46 75 6e 63 74 teValue;..pFunct 26e60 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 41 74 ionList->C_SetAt 26e70 74 72 69 62 75 74 65 56 61 6c 75 65 20 3d 20 43 tributeValue = C 26e80 5f 53 65 74 41 74 74 72 69 62 75 74 65 56 61 6c _SetAttributeVal 26e90 75 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 ue;..pFunctionLi 26ea0 73 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 st->C_FindObject 26eb0 73 49 6e 69 74 20 3d 20 43 5f 46 69 6e 64 4f 62 sInit = C_FindOb 26ec0 6a 65 63 74 73 49 6e 69 74 3b 0a 09 70 46 75 6e jectsInit;..pFun 26ed0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e ctionList->C_Fin 26ee0 64 4f 62 6a 65 63 74 73 20 3d 20 43 5f 46 69 6e dObjects = C_Fin 26ef0 64 4f 62 6a 65 63 74 73 3b 0a 09 70 46 75 6e 63 dObjects;..pFunc 26f00 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 tionList->C_Find 26f10 4f 62 6a 65 63 74 73 46 69 6e 61 6c 20 3d 20 43 ObjectsFinal = C 26f20 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 69 6e 61 _FindObjectsFina 26f30 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 l;..pFunctionLis 26f40 74 2d 3e 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 t->C_EncryptInit 26f50 20 3d 20 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 = C_EncryptInit 26f60 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 26f70 2d 3e 43 5f 45 6e 63 72 79 70 74 20 3d 20 43 5f ->C_Encrypt = C_ 26f80 45 6e 63 72 79 70 74 3b 0a 09 70 46 75 6e 63 74 Encrypt;..pFunct 26f90 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 72 79 ionList->C_Encry 26fa0 70 74 55 70 64 61 74 65 20 3d 20 43 5f 45 6e 63 ptUpdate = C_Enc 26fb0 72 79 70 74 55 70 64 61 74 65 3b 0a 09 70 46 75 ryptUpdate;..pFu 26fc0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e nctionList->C_En 26fd0 63 72 79 70 74 46 69 6e 61 6c 20 3d 20 43 5f 45 cryptFinal = C_E 26fe0 6e 63 72 79 70 74 46 69 6e 61 6c 3b 0a 09 70 46 ncryptFinal;..pF 26ff0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 unctionList->C_D 27000 65 63 72 79 70 74 49 6e 69 74 20 3d 20 43 5f 44 ecryptInit = C_D 27010 65 63 72 79 70 74 49 6e 69 74 3b 0a 09 70 46 75 ecryptInit;..pFu 27020 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 nctionList->C_De 27030 63 72 79 70 74 20 3d 20 43 5f 44 65 63 72 79 70 crypt = C_Decryp 27040 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t;..pFunctionLis 27050 74 2d 3e 43 5f 44 65 63 72 79 70 74 55 70 64 61 t->C_DecryptUpda 27060 74 65 20 3d 20 43 5f 44 65 63 72 79 70 74 55 70 te = C_DecryptUp 27070 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e date;..pFunction 27080 4c 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 46 List->C_DecryptF 27090 69 6e 61 6c 20 3d 20 43 5f 44 65 63 72 79 70 74 inal = C_Decrypt 270a0 46 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f Final;..pFunctio 270b0 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 49 nList->C_DigestI 270c0 6e 69 74 20 3d 20 43 5f 44 69 67 65 73 74 49 6e nit = C_DigestIn 270d0 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 it;..pFunctionLi 270e0 73 74 2d 3e 43 5f 44 69 67 65 73 74 20 3d 20 43 st->C_Digest = C 270f0 5f 44 69 67 65 73 74 3b 0a 09 70 46 75 6e 63 74 _Digest;..pFunct 27100 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 73 ionList->C_Diges 27110 74 55 70 64 61 74 65 20 3d 20 43 5f 44 69 67 65 tUpdate = C_Dige 27120 73 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 stUpdate;..pFunc 27130 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 tionList->C_Dige 27140 73 74 4b 65 79 20 3d 20 43 5f 44 69 67 65 73 74 stKey = C_Digest 27150 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c Key;..pFunctionL 27160 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 46 69 6e ist->C_DigestFin 27170 61 6c 20 3d 20 43 5f 44 69 67 65 73 74 46 69 6e al = C_DigestFin 27180 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 al;..pFunctionLi 27190 73 74 2d 3e 43 5f 53 69 67 6e 49 6e 69 74 20 3d st->C_SignInit = 271a0 20 43 5f 53 69 67 6e 49 6e 69 74 3b 0a 09 70 46 C_SignInit;..pF 271b0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 unctionList->C_S 271c0 69 67 6e 20 3d 20 43 5f 53 69 67 6e 3b 0a 09 70 ign = C_Sign;..p 271d0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 271e0 53 69 67 6e 55 70 64 61 74 65 20 3d 20 43 5f 53 SignUpdate = C_S 271f0 69 67 6e 55 70 64 61 74 65 3b 0a 09 70 46 75 6e ignUpdate;..pFun 27200 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 ctionList->C_Sig 27210 6e 46 69 6e 61 6c 20 3d 20 43 5f 53 69 67 6e 46 nFinal = C_SignF 27220 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e inal;..pFunction 27230 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 52 65 63 6f List->C_SignReco 27240 76 65 72 49 6e 69 74 20 3d 20 43 5f 53 69 67 6e verInit = C_Sign 27250 52 65 63 6f 76 65 72 49 6e 69 74 3b 0a 09 70 46 RecoverInit;..pF 27260 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 unctionList->C_S 27270 69 67 6e 52 65 63 6f 76 65 72 20 3d 20 43 5f 53 ignRecover = C_S 27280 69 67 6e 52 65 63 6f 76 65 72 3b 0a 09 70 46 75 ignRecover;..pFu 27290 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 nctionList->C_Ve 272a0 72 69 66 79 49 6e 69 74 20 3d 20 43 5f 56 65 72 rifyInit = C_Ver 272b0 69 66 79 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 ifyInit;..pFunct 272c0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 ionList->C_Verif 272d0 79 20 3d 20 43 5f 56 65 72 69 66 79 3b 0a 09 70 y = C_Verify;..p 272e0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 272f0 56 65 72 69 66 79 55 70 64 61 74 65 20 3d 20 43 VerifyUpdate = C 27300 5f 56 65 72 69 66 79 55 70 64 61 74 65 3b 0a 09 _VerifyUpdate;.. 27310 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 27320 5f 56 65 72 69 66 79 46 69 6e 61 6c 20 3d 20 43 _VerifyFinal = C 27330 5f 56 65 72 69 66 79 46 69 6e 61 6c 3b 0a 09 70 _VerifyFinal;..p 27340 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 27350 56 65 72 69 66 79 52 65 63 6f 76 65 72 49 6e 69 VerifyRecoverIni 27360 74 20 3d 20 43 5f 56 65 72 69 66 79 52 65 63 6f t = C_VerifyReco 27370 76 65 72 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 verInit;..pFunct 27380 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 ionList->C_Verif 27390 79 52 65 63 6f 76 65 72 20 3d 20 43 5f 56 65 72 yRecover = C_Ver 273a0 69 66 79 52 65 63 6f 76 65 72 3b 0a 09 70 46 75 ifyRecover;..pFu 273b0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 nctionList->C_Di 273c0 67 65 73 74 45 6e 63 72 79 70 74 55 70 64 61 74 gestEncryptUpdat 273d0 65 20 3d 20 43 5f 44 69 67 65 73 74 45 6e 63 72 e = C_DigestEncr 273e0 79 70 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e yptUpdate;..pFun 273f0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 ctionList->C_Dec 27400 72 79 70 74 44 69 67 65 73 74 55 70 64 61 74 65 ryptDigestUpdate 27410 20 3d 20 43 5f 44 65 63 72 79 70 74 44 69 67 65 = C_DecryptDige 27420 73 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 stUpdate;..pFunc 27430 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e tionList->C_Sign 27440 45 6e 63 72 79 70 74 55 70 64 61 74 65 20 3d 20 EncryptUpdate = 27450 43 5f 53 69 67 6e 45 6e 63 72 79 70 74 55 70 64 C_SignEncryptUpd 27460 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ate;..pFunctionL 27470 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 56 65 ist->C_DecryptVe 27480 72 69 66 79 55 70 64 61 74 65 20 3d 20 43 5f 44 rifyUpdate = C_D 27490 65 63 72 79 70 74 56 65 72 69 66 79 55 70 64 61 ecryptVerifyUpda 274a0 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 te;..pFunctionLi 274b0 73 74 2d 3e 43 5f 47 65 6e 65 72 61 74 65 4b 65 st->C_GenerateKe 274c0 79 20 3d 20 43 5f 47 65 6e 65 72 61 74 65 4b 65 y = C_GenerateKe 274d0 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 y;..pFunctionLis 274e0 74 2d 3e 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 t->C_GenerateKey 274f0 50 61 69 72 20 3d 20 43 5f 47 65 6e 65 72 61 74 Pair = C_Generat 27500 65 4b 65 79 50 61 69 72 3b 0a 09 70 46 75 6e 63 eKeyPair;..pFunc 27510 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 57 72 61 70 tionList->C_Wrap 27520 4b 65 79 20 3d 20 43 5f 57 72 61 70 4b 65 79 3b Key = C_WrapKey; 27530 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 27540 3e 43 5f 55 6e 77 72 61 70 4b 65 79 20 3d 20 43 >C_UnwrapKey = C 27550 5f 55 6e 77 72 61 70 4b 65 79 3b 0a 09 70 46 75 _UnwrapKey;..pFu 27560 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 nctionList->C_De 27570 72 69 76 65 4b 65 79 20 3d 20 43 5f 44 65 72 69 riveKey = C_Deri 27580 76 65 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f veKey;..pFunctio 27590 6e 4c 69 73 74 2d 3e 43 5f 53 65 65 64 52 61 6e nList->C_SeedRan 275a0 64 6f 6d 20 3d 20 43 5f 53 65 65 64 52 61 6e 64 dom = C_SeedRand 275b0 6f 6d 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 om;..pFunctionLi 275c0 73 74 2d 3e 43 5f 47 65 6e 65 72 61 74 65 52 61 st->C_GenerateRa 275d0 6e 64 6f 6d 20 3d 20 43 5f 47 65 6e 65 72 61 74 ndom = C_Generat 275e0 65 52 61 6e 64 6f 6d 3b 0a 09 70 46 75 6e 63 74 eRandom;..pFunct 275f0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 46 75 ionList->C_GetFu 27600 6e 63 74 69 6f 6e 53 74 61 74 75 73 20 3d 20 43 nctionStatus = C 27610 5f 47 65 74 46 75 6e 63 74 69 6f 6e 53 74 61 74 _GetFunctionStat 27620 75 73 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 us;..pFunctionLi 27630 73 74 2d 3e 43 5f 43 61 6e 63 65 6c 46 75 6e 63 st->C_CancelFunc 27640 74 69 6f 6e 20 3d 20 43 5f 43 61 6e 63 65 6c 46 tion = C_CancelF 27650 75 6e 63 74 69 6f 6e 3b 0a 09 70 46 75 6e 63 74 unction;..pFunct 27660 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 46 75 ionList->C_GetFu 27670 6e 63 74 69 6f 6e 4c 69 73 74 20 3d 20 43 5f 47 nctionList = C_G 27680 65 74 46 75 6e 63 74 69 6f 6e 4c 69 73 74 3b 0a etFunctionList;. 27690 0a 09 2a 70 70 46 75 6e 63 74 69 6f 6e 4c 69 73 ..*ppFunctionLis 276a0 74 20 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t = pFunctionLis 276b0 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 t;...CACKEY_DEBU 276c0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 276d0 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 276e0 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret 276f0 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}..