Artifact 3db9c71bd582f1de927c38de753a5daef74cf47a:
- File
cackey.c
— part of check-in
[a5af46b2b5]
at
2012-07-30 05:06:18
on branch trunk
— Updated to cache certificate information
Added a C_FindObject() speed test macro
Updated to reset slot less frequently (user: rkeene, size: 186158) [annotate] [blame] [check-ins using]
0000: 23 69 66 64 65 66 20 48 41 56 45 5f 43 4f 4e 46 #ifdef HAVE_CONF 0010: 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 IG_H.#include "c 0020: 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a onfig.h".#endif. 0030: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 57 49 4e .#ifdef HAVE_WIN 0040: 54 59 50 45 53 5f 48 0a 23 20 20 69 6e 63 6c 75 TYPES_H.# inclu 0050: 64 65 20 3c 77 69 6e 74 79 70 65 73 2e 68 3e 0a de <wintypes.h>. 0060: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 #endif.#ifdef HA 0070: 56 45 5f 50 43 53 43 4c 49 54 45 5f 48 0a 23 20 VE_PCSCLITE_H.# 0080: 20 69 6e 63 6c 75 64 65 20 3c 70 63 73 63 6c 69 include <pcscli 0090: 74 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 te.h>.#endif.#if 00a0: 64 65 66 20 48 41 56 45 5f 57 49 4e 53 43 41 52 def HAVE_WINSCAR 00b0: 44 5f 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c D_H.# include < 00c0: 77 69 6e 73 63 61 72 64 2e 68 3e 0a 23 65 6e 64 winscard.h>.#end 00d0: 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 if.#ifdef HAVE_S 00e0: 54 44 49 4e 54 5f 48 0a 23 20 20 69 6e 63 6c 75 TDINT_H.# inclu 00f0: 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 de <stdint.h>.#e 0100: 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 ndif.#ifdef HAVE 0110: 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 20 20 69 _INTTYPES_H.# i 0120: 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73 nclude <inttypes 0130: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 .h>.#endif.#ifde 0140: 66 20 48 41 56 45 5f 53 54 44 4c 49 42 5f 48 0a f HAVE_STDLIB_H. 0150: 23 20 20 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c # include <stdl 0160: 69 62 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 ib.h>.#endif.#if 0170: 64 65 66 20 48 41 56 45 5f 55 4e 49 53 54 44 5f def HAVE_UNISTD_ 0180: 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c 75 6e H.# include <un 0190: 69 73 74 64 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 istd.h>.#endif.# 01a0: 69 66 64 65 66 20 48 41 56 45 5f 53 54 52 49 4e ifdef HAVE_STRIN 01b0: 47 5f 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c G_H.# include < 01c0: 73 74 72 69 6e 67 2e 68 3e 0a 23 65 6e 64 69 66 string.h>.#endif 01d0: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 50 54 48 .#ifdef HAVE_PTH 01e0: 52 45 41 44 5f 48 0a 23 20 20 69 6e 63 6c 75 64 READ_H.# includ 01f0: 65 20 3c 70 74 68 72 65 61 64 2e 68 3e 0a 23 65 e <pthread.h>.#e 0200: 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 ndif.#ifdef HAVE 0210: 5f 4c 49 4d 49 54 53 5f 48 0a 23 20 20 69 6e 63 _LIMITS_H.# inc 0220: 6c 75 64 65 20 3c 6c 69 6d 69 74 73 2e 68 3e 0a lude <limits.h>. 0230: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 #endif.#ifdef HA 0240: 56 45 5f 53 54 44 49 4f 5f 48 0a 23 20 20 69 6e VE_STDIO_H.# in 0250: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a clude <stdio.h>. 0260: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 #endif.#ifdef HA 0270: 56 45 5f 5a 4c 49 42 5f 48 0a 23 20 20 69 66 64 VE_ZLIB_H.# ifd 0280: 65 66 20 48 41 56 45 5f 4c 49 42 5a 0a 23 20 20 ef HAVE_LIBZ.# 0290: 20 20 69 6e 63 6c 75 64 65 20 3c 7a 6c 69 62 2e include <zlib. 02a0: 68 3e 0a 23 20 20 65 6e 64 69 66 0a 23 65 6c 73 h>.# endif.#els 02b0: 65 0a 23 20 20 69 66 64 65 66 20 48 41 56 45 5f e.# ifdef HAVE_ 02c0: 4c 49 42 5a 0a 23 20 20 20 20 75 6e 64 65 66 20 LIBZ.# undef 02d0: 48 41 56 45 5f 4c 49 42 5a 0a 23 20 20 65 6e 64 HAVE_LIBZ.# end 02e0: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 if.#endif.#ifdef 02f0: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 53 45 CACKEY_DEBUG_SE 0300: 41 52 43 48 5f 53 50 45 45 44 54 45 53 54 0a 23 ARCH_SPEEDTEST.# 0310: 20 20 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 include <sys/t 0320: 69 6d 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 23 ime.h>.#endif..# 0330: 64 65 66 69 6e 65 20 43 4b 5f 50 54 52 20 2a 0a define CK_PTR *. 0340: 23 64 65 66 69 6e 65 20 43 4b 5f 44 45 46 49 4e #define CK_DEFIN 0350: 45 5f 46 55 4e 43 54 49 4f 4e 28 72 65 74 75 72 E_FUNCTION(retur 0360: 6e 54 79 70 65 2c 20 6e 61 6d 65 29 20 72 65 74 nType, name) ret 0370: 75 72 6e 54 79 70 65 20 6e 61 6d 65 0a 23 64 65 urnType name.#de 0380: 66 69 6e 65 20 43 4b 5f 44 45 43 4c 41 52 45 5f fine CK_DECLARE_ 0390: 46 55 4e 43 54 49 4f 4e 28 72 65 74 75 72 6e 54 FUNCTION(returnT 03a0: 79 70 65 2c 20 6e 61 6d 65 29 20 72 65 74 75 72 ype, name) retur 03b0: 6e 54 79 70 65 20 6e 61 6d 65 0a 23 64 65 66 69 nType name.#defi 03c0: 6e 65 20 43 4b 5f 44 45 43 4c 41 52 45 5f 46 55 ne CK_DECLARE_FU 03d0: 4e 43 54 49 4f 4e 5f 50 4f 49 4e 54 45 52 28 72 NCTION_POINTER(r 03e0: 65 74 75 72 6e 54 79 70 65 2c 20 6e 61 6d 65 29 eturnType, name) 03f0: 20 72 65 74 75 72 6e 54 79 70 65 20 28 2a 20 6e returnType (* n 0400: 61 6d 65 29 0a 23 64 65 66 69 6e 65 20 43 4b 5f ame).#define CK_ 0410: 43 41 4c 4c 42 41 43 4b 5f 46 55 4e 43 54 49 4f CALLBACK_FUNCTIO 0420: 4e 28 72 65 74 75 72 6e 54 79 70 65 2c 20 6e 61 N(returnType, na 0430: 6d 65 29 20 72 65 74 75 72 6e 54 79 70 65 20 28 me) returnType ( 0440: 2a 20 6e 61 6d 65 29 0a 23 69 66 6e 64 65 66 20 * name).#ifndef 0450: 4e 55 4c 4c 5f 50 54 52 0a 23 20 20 64 65 66 69 NULL_PTR.# defi 0460: 6e 65 20 4e 55 4c 4c 5f 50 54 52 20 30 0a 23 65 ne NULL_PTR 0.#e 0470: 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 ndif..#include " 0480: 70 6b 63 73 31 31 2e 68 22 0a 23 69 6e 63 6c 75 pkcs11.h".#inclu 0490: 64 65 20 22 70 6b 63 73 31 31 6e 2e 68 22 0a 23 de "pkcs11n.h".# 04a0: 69 6e 63 6c 75 64 65 20 22 61 73 6e 31 2d 78 35 include "asn1-x5 04b0: 30 39 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 09.h".#include " 04c0: 73 68 61 31 2e 68 22 0a 23 69 6e 63 6c 75 64 65 sha1.h".#include 04d0: 20 22 6d 64 35 2e 68 22 0a 0a 2f 2a 0a 20 2a 20 "md5.h"../*. * 04e0: 49 6e 63 6c 75 64 65 20 74 68 65 73 65 20 73 6f Include these so 04f0: 75 72 63 65 20 66 69 6c 65 73 20 69 6e 20 74 68 urce files in th 0500: 69 73 20 74 72 61 6e 73 6c 61 74 69 6f 6e 20 75 is translation u 0510: 6e 69 74 20 73 6f 20 74 68 61 74 20 77 65 20 63 nit so that we c 0520: 61 6e 20 62 69 6e 64 20 74 6f 0a 20 2a 20 66 75 an bind to. * fu 0530: 6e 63 74 69 6f 6e 73 20 61 6e 64 20 6e 6f 74 20 nctions and not 0540: 69 6e 63 6c 75 64 65 20 61 6e 79 20 73 79 6d 62 include any symb 0550: 6f 6c 73 20 69 6e 20 74 68 65 20 6f 75 74 70 75 ols in the outpu 0560: 74 20 73 68 61 72 65 64 20 6f 62 6a 65 63 74 2e t shared object. 0570: 0a 20 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 61 . */.#include "a 0580: 73 6e 31 2d 78 35 30 39 2e 63 22 0a 23 69 6e 63 sn1-x509.c".#inc 0590: 6c 75 64 65 20 22 73 68 61 31 2e 63 22 0a 23 69 lude "sha1.c".#i 05a0: 6e 63 6c 75 64 65 20 22 6d 64 35 2e 63 22 0a 0a nclude "md5.c".. 05b0: 23 69 66 6e 64 65 66 20 43 41 43 4b 45 59 5f 43 #ifndef CACKEY_C 05c0: 52 59 50 54 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f RYPTOKI_VERSION_ 05d0: 43 4f 44 45 0a 23 20 20 64 65 66 69 6e 65 20 43 CODE.# define C 05e0: 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56 ACKEY_CRYPTOKI_V 05f0: 45 52 53 49 4f 4e 5f 43 4f 44 45 20 30 78 30 32 ERSION_CODE 0x02 0600: 31 65 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 1e00.#endif../* 0610: 47 53 43 2d 49 53 20 76 32 2e 31 20 44 65 66 69 GSC-IS v2.1 Defi 0620: 6e 69 74 69 6f 6e 73 20 2a 2f 0a 2f 2a 2a 20 43 nitions */./** C 0630: 6c 61 73 73 65 73 20 2a 2a 2f 0a 23 64 65 66 69 lasses **/.#defi 0640: 6e 65 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 ne GSCIS_CLASS_I 0650: 53 4f 37 38 31 36 20 20 20 20 20 20 20 20 20 20 SO7816 0660: 20 30 78 30 30 0a 23 64 65 66 69 6e 65 20 47 53 0x00.#define GS 0670: 43 49 53 5f 43 4c 41 53 53 5f 47 4c 4f 42 41 4c CIS_CLASS_GLOBAL 0680: 5f 50 4c 41 54 46 4f 52 4d 20 20 20 30 78 38 30 _PLATFORM 0x80 0690: 0a 0a 2f 2a 2a 20 49 6e 73 74 72 75 63 74 69 6f ../** Instructio 06a0: 6e 73 20 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 ns **/.#define G 06b0: 53 43 49 53 5f 49 4e 53 54 52 5f 47 45 54 5f 52 SCIS_INSTR_GET_R 06c0: 45 53 50 4f 4e 53 45 20 20 20 20 20 20 30 78 43 ESPONSE 0xC 06d0: 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 0.#define GSCIS_ 06e0: 49 4e 53 54 52 5f 52 45 41 44 5f 42 49 4e 41 52 INSTR_READ_BINAR 06f0: 59 20 20 20 20 20 20 20 30 78 42 30 0a 23 64 65 Y 0xB0.#de 0700: 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 fine GSCIS_INSTR 0710: 5f 55 50 44 41 54 45 5f 42 49 4e 41 52 59 20 20 _UPDATE_BINARY 0720: 20 20 20 30 78 44 36 0a 23 64 65 66 69 6e 65 20 0xD6.#define 0730: 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 45 4c 45 GSCIS_INSTR_SELE 0740: 43 54 20 20 20 20 20 20 20 20 20 20 20 20 30 78 CT 0x 0750: 41 34 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 A4.#define GSCIS 0760: 5f 49 4e 53 54 52 5f 45 58 54 45 52 4e 41 4c 5f _INSTR_EXTERNAL_ 0770: 41 55 54 48 20 20 20 20 20 30 78 38 32 0a 23 64 AUTH 0x82.#d 0780: 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 efine GSCIS_INST 0790: 52 5f 47 45 54 5f 43 48 41 4c 4c 45 4e 47 45 20 R_GET_CHALLENGE 07a0: 20 20 20 20 30 78 38 34 0a 23 64 65 66 69 6e 65 0x84.#define 07b0: 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 49 4e 54 GSCIS_INSTR_INT 07c0: 45 52 4e 41 4c 5f 41 55 54 48 20 20 20 20 20 30 ERNAL_AUTH 0 07d0: 78 38 38 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x88.#define GSCI 07e0: 53 5f 49 4e 53 54 52 5f 56 45 52 49 46 59 20 20 S_INSTR_VERIFY 07f0: 20 20 20 20 20 20 20 20 20 20 30 78 32 30 0a 23 0x20.# 0800: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 define GSCIS_INS 0810: 54 52 5f 53 49 47 4e 20 20 20 20 20 20 20 20 20 TR_SIGN 0820: 20 20 20 20 20 30 78 32 41 0a 23 64 65 66 69 6e 0x2A.#defin 0830: 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 47 45 e GSCIS_INSTR_GE 0840: 54 5f 50 52 4f 50 20 20 20 20 20 20 20 20 20 20 T_PROP 0850: 30 78 35 36 0a 23 64 65 66 69 6e 65 20 47 53 43 0x56.#define GSC 0860: 49 53 5f 49 4e 53 54 52 5f 47 45 54 5f 41 43 52 IS_INSTR_GET_ACR 0870: 20 20 20 20 20 20 20 20 20 20 20 30 78 34 43 0a 0x4C. 0880: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e #define GSCIS_IN 0890: 53 54 52 5f 52 45 41 44 5f 42 55 46 46 45 52 20 STR_READ_BUFFER 08a0: 20 20 20 20 20 20 30 78 35 32 0a 23 64 65 66 69 0x52.#defi 08b0: 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 ne GSCIS_INSTR_S 08c0: 49 47 4e 44 45 43 52 59 50 54 20 20 20 20 20 20 IGNDECRYPT 08d0: 20 30 78 34 32 0a 0a 23 64 65 66 69 6e 65 20 47 0x42..#define G 08e0: 53 43 49 53 5f 50 41 52 41 4d 5f 53 45 4c 45 43 SCIS_PARAM_SELEC 08f0: 54 5f 41 50 50 4c 45 54 20 20 20 20 20 30 78 30 T_APPLET 0x0 0900: 34 0a 0a 2f 2a 2a 20 54 61 67 73 20 2a 2a 2f 0a 4../** Tags **/. 0910: 2f 2a 2a 2a 20 43 43 43 20 54 61 67 73 20 2a 2a /*** CCC Tags ** 0920: 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 */.#define GSCIS 0930: 5f 54 41 47 5f 43 41 52 44 49 44 20 20 20 20 20 _TAG_CARDID 0940: 20 20 20 20 20 20 20 20 20 30 78 46 30 0a 23 64 0xF0.#d 0950: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0960: 43 43 43 5f 56 45 52 20 20 20 20 20 20 20 20 20 CCC_VER 0970: 20 20 20 20 30 78 46 31 0a 23 64 65 66 69 6e 65 0xF1.#define 0980: 20 47 53 43 49 53 5f 54 41 47 5f 43 43 47 5f 56 GSCIS_TAG_CCG_V 0990: 45 52 20 20 20 20 20 20 20 20 20 20 20 20 20 30 ER 0 09a0: 78 46 32 0a 23 64 65 66 69 6e 65 20 47 53 43 49 xF2.#define GSCI 09b0: 53 5f 54 41 47 5f 43 41 52 44 55 52 4c 20 20 20 S_TAG_CARDURL 09c0: 20 20 20 20 20 20 20 20 20 20 30 78 46 33 0a 23 0xF3.# 09d0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 09e0: 5f 50 4b 43 53 31 35 20 20 20 20 20 20 20 20 20 _PKCS15 09f0: 20 20 20 20 20 30 78 46 34 0a 23 64 65 66 69 6e 0xF4.#defin 0a00: 65 20 47 53 43 49 53 5f 54 41 47 5f 52 45 47 5f e GSCIS_TAG_REG_ 0a10: 44 41 54 41 5f 4d 4f 44 45 4c 20 20 20 20 20 20 DATA_MODEL 0a20: 30 78 46 35 0a 23 64 65 66 69 6e 65 20 47 53 43 0xF5.#define GSC 0a30: 49 53 5f 54 41 47 5f 41 43 52 5f 54 41 42 4c 45 IS_TAG_ACR_TABLE 0a40: 20 20 20 20 20 20 20 20 20 20 20 30 78 46 36 0a 0xF6. 0a50: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0a60: 47 5f 43 41 52 44 5f 41 50 44 55 20 20 20 20 20 G_CARD_APDU 0a70: 20 20 20 20 20 20 30 78 46 37 0a 23 64 65 66 69 0xF7.#defi 0a80: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 52 45 44 ne GSCIS_TAG_RED 0a90: 49 52 45 43 54 49 4f 4e 20 20 20 20 20 20 20 20 IRECTION 0aa0: 20 30 78 46 41 0a 23 64 65 66 69 6e 65 20 47 53 0xFA.#define GS 0ab0: 43 49 53 5f 54 41 47 5f 43 54 20 20 20 20 20 20 CIS_TAG_CT 0ac0: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 46 42 0xFB 0ad0: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0ae0: 41 47 5f 53 54 20 20 20 20 20 20 20 20 20 20 20 AG_ST 0af0: 20 20 20 20 20 20 20 30 78 46 43 0a 23 64 65 66 0xFC.#def 0b00: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4e 45 ine GSCIS_TAG_NE 0b10: 58 54 43 43 43 20 20 20 20 20 20 20 20 20 20 20 XTCCC 0b20: 20 20 30 78 46 44 0a 0a 2f 2a 2a 2a 20 47 65 6e 0xFD../*** Gen 0b30: 65 72 61 6c 20 2d 20 45 46 20 32 32 30 30 20 2a eral - EF 2200 * 0b40: 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 43 49 **/.#define GSCI 0b50: 53 5f 54 41 47 5f 46 4e 41 4d 45 20 20 20 20 20 S_TAG_FNAME 0b60: 20 20 20 20 20 20 20 20 20 20 30 78 30 31 0a 23 0x01.# 0b70: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0b80: 5f 4d 4e 41 4d 45 20 20 20 20 20 20 20 20 20 20 _MNAME 0b90: 20 20 20 20 20 30 78 30 32 0a 23 64 65 66 69 6e 0x02.#defin 0ba0: 65 20 47 53 43 49 53 5f 54 41 47 5f 4c 4e 41 4d e GSCIS_TAG_LNAM 0bb0: 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 E 0bc0: 30 78 30 33 0a 23 64 65 66 69 6e 65 20 47 53 43 0x03.#define GSC 0bd0: 49 53 5f 54 41 47 5f 53 55 46 46 49 58 20 20 20 IS_TAG_SUFFIX 0be0: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 34 0a 0x04. 0bf0: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0c00: 47 5f 47 4f 56 54 5f 41 47 45 4e 43 59 20 20 20 G_GOVT_AGENCY 0c10: 20 20 20 20 20 20 30 78 30 35 0a 23 64 65 66 69 0x05.#defi 0c20: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 52 ne GSCIS_TAG_BUR 0c30: 45 41 55 20 20 20 20 20 20 20 20 20 20 20 20 20 EAU 0c40: 20 30 78 30 36 0a 23 64 65 66 69 6e 65 20 47 53 0x06.#define GS 0c50: 43 49 53 5f 54 41 47 5f 42 55 52 45 41 55 5f 43 CIS_TAG_BUREAU_C 0c60: 4f 44 45 20 20 20 20 20 20 20 20 20 30 78 30 37 ODE 0x07 0c70: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0c80: 41 47 5f 44 45 50 54 5f 43 4f 44 45 20 20 20 20 AG_DEPT_CODE 0c90: 20 20 20 20 20 20 20 30 78 30 38 0a 23 64 65 66 0x08.#def 0ca0: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 54 49 ine GSCIS_TAG_TI 0cb0: 54 4c 45 20 20 20 20 20 20 20 20 20 20 20 20 20 TLE 0cc0: 20 20 30 78 30 39 0a 23 64 65 66 69 6e 65 20 47 0x09.#define G 0cd0: 53 43 49 53 5f 54 41 47 5f 42 55 49 4c 44 49 4e SCIS_TAG_BUILDIN 0ce0: 47 20 20 20 20 20 20 20 20 20 20 20 20 30 78 31 G 0x1 0cf0: 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 0.#define GSCIS_ 0d00: 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 31 TAG_OFFICE_ADDR1 0d10: 20 20 20 20 20 20 20 20 30 78 31 31 0a 23 64 65 0x11.#de 0d20: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4f fine GSCIS_TAG_O 0d30: 46 46 49 43 45 5f 41 44 44 52 32 20 20 20 20 20 FFICE_ADDR2 0d40: 20 20 20 30 78 31 32 0a 23 64 65 66 69 6e 65 20 0x12.#define 0d50: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 0d60: 5f 43 49 54 59 20 20 20 20 20 20 20 20 20 30 78 _CITY 0x 0d70: 31 33 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 13.#define GSCIS 0d80: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 53 54 41 54 _TAG_OFFICE_STAT 0d90: 45 20 20 20 20 20 20 20 20 30 78 31 34 0a 23 64 E 0x14.#d 0da0: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0db0: 4f 46 46 49 43 45 5f 5a 49 50 20 20 20 20 20 20 OFFICE_ZIP 0dc0: 20 20 20 20 30 78 31 35 0a 23 64 65 66 69 6e 65 0x15.#define 0dd0: 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 GSCIS_TAG_OFFIC 0de0: 45 5f 43 4f 55 4e 54 52 59 20 20 20 20 20 20 30 E_COUNTRY 0 0df0: 78 31 36 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x16.#define GSCI 0e00: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 4f S_TAG_OFFICE_PHO 0e10: 4e 45 20 20 20 20 20 20 20 20 30 78 31 37 0a 23 NE 0x17.# 0e20: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0e30: 5f 4f 46 46 49 43 45 5f 50 48 4f 4e 45 5f 45 58 _OFFICE_PHONE_EX 0e40: 54 20 20 20 20 30 78 31 38 0a 23 64 65 66 69 6e T 0x18.#defin 0e50: 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 e GSCIS_TAG_OFFI 0e60: 43 45 5f 46 41 58 20 20 20 20 20 20 20 20 20 20 CE_FAX 0e70: 30 78 31 39 0a 23 64 65 66 69 6e 65 20 47 53 43 0x19.#define GSC 0e80: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 45 4d IS_TAG_OFFICE_EM 0e90: 41 49 4c 20 20 20 20 20 20 20 20 30 78 31 41 0a AIL 0x1A. 0ea0: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0eb0: 47 5f 4f 46 46 49 43 45 5f 52 4f 4f 4d 20 20 20 G_OFFICE_ROOM 0ec0: 20 20 20 20 20 20 30 78 31 42 0a 23 64 65 66 69 0x1B.#defi 0ed0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4e 4f 4e ne GSCIS_TAG_NON 0ee0: 47 4f 56 5f 41 47 45 4e 43 59 20 20 20 20 20 20 GOV_AGENCY 0ef0: 20 30 78 31 43 0a 23 64 65 66 69 6e 65 20 47 53 0x1C.#define GS 0f00: 43 49 53 5f 54 41 47 5f 53 53 4e 5f 44 45 53 49 CIS_TAG_SSN_DESI 0f10: 47 4e 41 54 4f 52 20 20 20 20 20 20 30 78 31 44 GNATOR 0x1D 0f20: 0a 0a 2f 2a 2a 2a 20 50 49 49 20 2d 20 45 46 20 ../*** PII - EF 0f30: 32 31 30 30 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 2100 ***/.#defin 0f40: 65 20 47 53 43 49 53 5f 54 41 47 5f 53 53 4e 20 e GSCIS_TAG_SSN 0f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0f60: 30 78 32 30 0a 23 64 65 66 69 6e 65 20 47 53 43 0x20.#define GSC 0f70: 49 53 5f 54 41 47 5f 44 4f 42 20 20 20 20 20 20 IS_TAG_DOB 0f80: 20 20 20 20 20 20 20 20 20 20 20 30 78 32 31 0a 0x21. 0f90: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0fa0: 47 5f 47 45 4e 44 45 52 20 20 20 20 20 20 20 20 G_GENDER 0fb0: 20 20 20 20 20 20 30 78 32 32 0a 0a 2f 2a 2a 2a 0x22../*** 0fc0: 20 4c 6f 67 69 6e 20 49 6e 66 6f 72 6d 61 74 69 Login Informati 0fd0: 6f 6e 20 2d 20 45 46 20 34 30 30 30 20 2a 2a 2a on - EF 4000 *** 0fe0: 2f 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f /.#define GSCIS_ 0ff0: 54 41 47 5f 55 53 45 52 49 44 20 20 20 20 20 20 TAG_USERID 1000: 20 20 20 20 20 20 20 20 30 78 34 30 0a 23 64 65 0x40.#de 1010: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 44 fine GSCIS_TAG_D 1020: 4f 4d 41 49 4e 20 20 20 20 20 20 20 20 20 20 20 OMAIN 1030: 20 20 20 30 78 34 31 0a 23 64 65 66 69 6e 65 20 0x41.#define 1040: 47 53 43 49 53 5f 54 41 47 5f 50 41 53 53 57 4f GSCIS_TAG_PASSWO 1050: 52 44 20 20 20 20 20 20 20 20 20 20 20 20 30 78 RD 0x 1060: 34 32 0a 0a 2f 2a 2a 2a 20 43 61 72 64 20 49 6e 42../*** Card In 1070: 66 6f 72 6d 61 74 69 6f 6e 20 2d 20 45 46 20 35 formation - EF 5 1080: 30 30 30 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 000 ***/.#define 1090: 20 47 53 43 49 53 5f 54 41 47 5f 49 53 53 55 45 GSCIS_TAG_ISSUE 10a0: 52 49 44 20 20 20 20 20 20 20 20 20 20 20 20 30 RID 0 10b0: 78 35 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x50.#define GSCI 10c0: 53 5f 54 41 47 5f 53 45 52 4e 4f 20 20 20 20 20 S_TAG_SERNO 10d0: 20 20 20 20 20 20 20 20 20 20 30 78 35 31 0a 23 0x51.# 10e0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 10f0: 5f 49 53 53 55 45 5f 44 41 54 45 20 20 20 20 20 _ISSUE_DATE 1100: 20 20 20 20 20 30 78 35 32 0a 23 64 65 66 69 6e 0x52.#defin 1110: 65 20 47 53 43 49 53 5f 54 41 47 5f 45 58 50 49 e GSCIS_TAG_EXPI 1120: 52 45 5f 44 41 54 45 20 20 20 20 20 20 20 20 20 RE_DATE 1130: 30 78 35 33 0a 23 64 65 66 69 6e 65 20 47 53 43 0x53.#define GSC 1140: 49 53 5f 54 41 47 5f 43 41 52 44 5f 54 59 50 45 IS_TAG_CARD_TYPE 1150: 20 20 20 20 20 20 20 20 20 20 20 30 78 35 34 0a 0x54. 1160: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 1170: 47 5f 53 45 43 55 52 49 54 59 5f 43 4f 44 45 20 G_SECURITY_CODE 1180: 20 20 20 20 20 20 30 78 35 37 0a 23 64 65 66 69 0x57.#defi 1190: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 ne GSCIS_TAG_CAR 11a0: 44 49 44 5f 41 49 44 20 20 20 20 20 20 20 20 20 DID_AID 11b0: 20 30 78 35 38 0a 0a 2f 2a 2a 2a 20 50 4b 49 20 0x58../*** PKI 11c0: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 2d 20 45 46 Information - EF 11d0: 20 37 30 30 30 20 2a 2a 2a 2f 0a 23 64 65 66 69 7000 ***/.#defi 11e0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 ne GSCIS_TAG_CER 11f0: 54 49 46 49 43 41 54 45 20 20 20 20 20 20 20 20 TIFICATE 1200: 20 30 78 37 30 0a 23 64 65 66 69 6e 65 20 47 53 0x70.#define GS 1210: 43 49 53 5f 54 41 47 5f 43 45 52 54 5f 49 53 53 CIS_TAG_CERT_ISS 1220: 55 45 5f 44 41 54 45 20 20 20 20 20 30 78 37 31 UE_DATE 0x71 1230: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 1240: 41 47 5f 43 45 52 54 5f 45 58 50 49 52 45 5f 44 AG_CERT_EXPIRE_D 1250: 41 54 45 20 20 20 20 30 78 37 32 0a 0a 2f 2a 2a ATE 0x72../** 1260: 20 41 70 70 6c 65 74 20 49 44 73 20 2a 2a 2f 0a Applet IDs **/. 1270: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 41 49 #define GSCIS_AI 1280: 44 5f 43 43 43 20 20 20 20 20 20 20 20 20 20 20 D_CCC 1290: 20 20 20 20 20 20 30 78 41 30 2c 20 30 78 30 30 0xA0, 0x00 12a0: 2c 20 30 78 30 30 2c 20 30 78 30 31 2c 20 30 78 , 0x00, 0x01, 0x 12b0: 31 36 2c 20 30 78 44 42 2c 20 30 78 30 30 0a 0a 16, 0xDB, 0x00.. 12c0: 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 /* Maximum size 12d0: 6f 66 20 64 61 74 61 20 70 6f 72 74 69 6f 6e 20 of data portion 12e0: 6f 66 20 41 50 44 55 73 20 2a 2f 0a 2f 2a 2a 20 of APDUs */./** 12f0: 44 6f 20 6e 6f 74 20 73 65 74 20 74 68 69 73 20 Do not set this 1300: 61 62 6f 76 65 20 32 35 30 20 2a 2a 2f 0a 23 64 above 250 **/.#d 1310: 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 41 50 44 efine CACKEY_APD 1320: 55 5f 4d 54 55 20 20 20 20 20 20 20 20 20 20 20 U_MTU 1330: 20 20 20 20 32 35 30 0a 0a 2f 2a 20 41 54 52 20 250../* ATR 1340: 49 66 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 If not available 1350: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4d 41 58 5f */.#ifndef MAX_ 1360: 41 54 52 5f 53 49 5a 45 0a 23 64 65 66 69 6e 65 ATR_SIZE.#define 1370: 20 4d 41 58 5f 41 54 52 5f 53 49 5a 45 20 31 30 MAX_ATR_SIZE 10 1380: 32 34 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 24.#endif..#ifde 1390: 66 20 43 41 43 4b 45 59 5f 44 45 42 55 47 0a 23 f CACKEY_DEBUG.# 13a0: 20 20 69 66 64 65 66 20 48 41 56 45 5f 54 49 4d ifdef HAVE_TIM 13b0: 45 5f 48 0a 23 20 20 20 20 69 6e 63 6c 75 64 65 E_H.# include 13c0: 20 3c 74 69 6d 65 2e 68 3e 0a 73 74 61 74 69 63 <time.h>.static 13d0: 20 74 69 6d 65 5f 74 20 63 61 63 6b 65 79 5f 64 time_t cackey_d 13e0: 65 62 75 67 5f 73 74 61 72 74 5f 74 69 6d 65 20 ebug_start_time 13f0: 3d 20 30 3b 0a 23 20 20 20 20 64 65 66 69 6e 65 = 0;.# define 1400: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 CACKEY_DEBUG_PR 1410: 49 4e 54 54 49 4d 45 20 7b 20 69 66 20 28 63 61 INTTIME { if (ca 1420: 63 6b 65 79 5f 64 65 62 75 67 5f 73 74 61 72 74 ckey_debug_start 1430: 5f 74 69 6d 65 20 3d 3d 20 30 29 20 7b 20 63 61 _time == 0) { ca 1440: 63 6b 65 79 5f 64 65 62 75 67 5f 73 74 61 72 74 ckey_debug_start 1450: 5f 74 69 6d 65 20 3d 20 74 69 6d 65 28 4e 55 4c _time = time(NUL 1460: 4c 29 3b 20 7d 3b 20 66 70 72 69 6e 74 66 28 63 L); }; fprintf(c 1470: 61 63 6b 65 79 5f 64 65 62 75 67 5f 66 64 28 29 ackey_debug_fd() 1480: 2c 20 22 5b 25 6c 75 5d 3a 20 22 2c 20 28 75 6e , "[%lu]: ", (un 1490: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 74 69 signed long) (ti 14a0: 6d 65 28 4e 55 4c 4c 29 20 2d 20 63 61 63 6b 65 me(NULL) - cacke 14b0: 79 5f 64 65 62 75 67 5f 73 74 61 72 74 5f 74 69 y_debug_start_ti 14c0: 6d 65 29 29 3b 20 7d 0a 23 20 20 65 6c 73 65 0a me)); }.# else. 14d0: 23 20 20 20 20 64 65 66 69 6e 65 20 43 41 43 4b # define CACK 14e0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 54 49 EY_DEBUG_PRINTTI 14f0: 4d 45 20 2f 2a 2a 2f 0a 23 20 20 65 6e 64 69 66 ME /**/.# endif 1500: 0a 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b ..# define CACK 1510: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1520: 78 2e 2e 2e 29 20 7b 20 43 41 43 4b 45 59 5f 44 x...) { CACKEY_D 1530: 45 42 55 47 5f 50 52 49 4e 54 54 49 4d 45 3b 20 EBUG_PRINTTIME; 1540: 66 70 72 69 6e 74 66 28 63 61 63 6b 65 79 5f 64 fprintf(cackey_d 1550: 65 62 75 67 5f 66 64 28 29 2c 20 22 25 73 28 29 ebug_fd(), "%s() 1560: 3a 25 69 3a 20 22 2c 20 5f 5f 66 75 6e 63 5f 5f :%i: ", __func__ 1570: 2c 20 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 66 70 72 , __LINE__); fpr 1580: 69 6e 74 66 28 63 61 63 6b 65 79 5f 64 65 62 75 intf(cackey_debu 1590: 67 5f 66 64 28 29 2c 20 78 29 3b 20 66 70 72 69 g_fd(), x); fpri 15a0: 6e 74 66 28 63 61 63 6b 65 79 5f 64 65 62 75 67 ntf(cackey_debug 15b0: 5f 66 64 28 29 2c 20 22 5c 6e 22 29 3b 20 66 66 _fd(), "\n"); ff 15c0: 6c 75 73 68 28 63 61 63 6b 65 79 5f 64 65 62 75 lush(cackey_debu 15d0: 67 5f 66 64 28 29 29 3b 20 7d 0a 23 20 20 64 65 g_fd()); }.# de 15e0: 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 fine CACKEY_DEBU 15f0: 47 5f 50 52 49 4e 54 42 55 46 28 66 2c 20 78 2c G_PRINTBUF(f, x, 1600: 20 79 29 20 7b 20 75 6e 73 69 67 6e 65 64 20 63 y) { unsigned c 1610: 68 61 72 20 2a 54 4d 50 42 55 46 3b 20 75 6e 73 har *TMPBUF; uns 1620: 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 78 3b 20 igned long idx; 1630: 54 4d 50 42 55 46 20 3d 20 28 75 6e 73 69 67 6e TMPBUF = (unsign 1640: 65 64 20 63 68 61 72 20 2a 29 20 28 78 29 3b 20 ed char *) (x); 1650: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1660: 4e 54 54 49 4d 45 3b 20 66 70 72 69 6e 74 66 28 NTTIME; fprintf( 1670: 63 61 63 6b 65 79 5f 64 65 62 75 67 5f 66 64 28 cackey_debug_fd( 1680: 29 2c 20 22 25 73 28 29 3a 25 69 3a 20 25 73 20 ), "%s():%i: %s 1690: 20 28 25 73 2f 25 6c 75 20 3d 20 7b 25 30 32 78 (%s/%lu = {%02x 16a0: 22 2c 20 5f 5f 66 75 6e 63 5f 5f 2c 20 5f 5f 4c ", __func__, __L 16b0: 49 4e 45 5f 5f 2c 20 66 2c 20 23 78 2c 20 28 75 INE__, f, #x, (u 16c0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 79 nsigned long) (y 16d0: 29 2c 20 54 4d 50 42 55 46 5b 30 5d 29 3b 20 66 ), TMPBUF[0]); f 16e0: 6f 72 20 28 69 64 78 20 3d 20 31 3b 20 69 64 78 or (idx = 1; idx 16f0: 20 3c 20 28 79 29 3b 20 69 64 78 2b 2b 29 20 7b < (y); idx++) { 1700: 20 66 70 72 69 6e 74 66 28 63 61 63 6b 65 79 5f fprintf(cackey_ 1710: 64 65 62 75 67 5f 66 64 28 29 2c 20 22 2c 20 25 debug_fd(), ", % 1720: 30 32 78 22 2c 20 54 4d 50 42 55 46 5b 69 64 78 02x", TMPBUF[idx 1730: 5d 29 3b 20 7d 3b 20 66 70 72 69 6e 74 66 28 63 ]); }; fprintf(c 1740: 61 63 6b 65 79 5f 64 65 62 75 67 5f 66 64 28 29 ackey_debug_fd() 1750: 2c 20 22 7d 29 5c 6e 22 29 3b 20 66 66 6c 75 73 , "})\n"); fflus 1760: 68 28 63 61 63 6b 65 79 5f 64 65 62 75 67 5f 66 h(cackey_debug_f 1770: 64 28 29 29 3b 20 7d 0a 23 20 20 64 65 66 69 6e d()); }.# defin 1780: 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 e CACKEY_DEBUG_P 1790: 45 52 52 4f 52 28 78 29 20 7b 20 66 70 72 69 6e ERROR(x) { fprin 17a0: 74 66 28 63 61 63 6b 65 79 5f 64 65 62 75 67 5f tf(cackey_debug_ 17b0: 66 64 28 29 2c 20 22 25 73 28 29 3a 25 69 3a 20 fd(), "%s():%i: 17c0: 22 2c 20 5f 5f 66 75 6e 63 5f 5f 2c 20 5f 5f 4c ", __func__, __L 17d0: 49 4e 45 5f 5f 29 3b 20 43 41 43 4b 45 59 5f 44 INE__); CACKEY_D 17e0: 45 42 55 47 5f 50 52 49 4e 54 54 49 4d 45 3b 20 EBUG_PRINTTIME; 17f0: 70 65 72 72 6f 72 28 78 29 3b 20 66 66 6c 75 73 perror(x); fflus 1800: 68 28 63 61 63 6b 65 79 5f 64 65 62 75 67 5f 66 h(cackey_debug_f 1810: 64 28 29 29 3b 20 7d 0a 23 20 20 64 65 66 69 6e d()); }.# defin 1820: 65 20 66 72 65 65 28 78 29 20 7b 20 43 41 43 4b e free(x) { CACK 1830: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1840: 22 46 52 45 45 28 25 70 29 20 28 25 73 29 22 2c "FREE(%p) (%s)", 1850: 20 28 76 6f 69 64 20 2a 29 20 78 2c 20 23 78 29 (void *) x, #x) 1860: 3b 20 66 72 65 65 28 78 29 3b 20 7d 0a 0a 73 74 ; free(x); }..st 1870: 61 74 69 63 20 46 49 4c 45 20 2a 63 61 63 6b 65 atic FILE *cacke 1880: 79 5f 64 65 62 75 67 5f 66 64 28 76 6f 69 64 29 y_debug_fd(void) 1890: 20 7b 0a 09 73 74 61 74 69 63 20 46 49 4c 45 20 {..static FILE 18a0: 2a 66 64 20 3d 20 4e 55 4c 4c 3b 0a 09 63 68 61 *fd = NULL;..cha 18b0: 72 20 2a 6c 6f 67 66 69 6c 65 3b 0a 0a 09 69 66 r *logfile;...if 18c0: 20 28 66 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a (fd != NULL) {. 18d0: 09 09 72 65 74 75 72 6e 28 66 64 29 3b 0a 09 7d ..return(fd);..} 18e0: 0a 0a 09 2f 2a 0a 09 20 2a 20 4c 6f 67 20 74 6f .../*.. * Log to 18f0: 20 73 74 64 65 72 72 20 69 6e 69 74 69 61 6c 6c stderr initiall 1900: 79 20 73 6f 20 77 65 20 63 61 6e 20 75 73 65 20 y so we can use 1910: 64 65 62 75 67 67 69 6e 67 20 77 69 74 68 69 6e debugging within 1920: 0a 09 20 2a 20 74 68 69 73 20 66 75 6e 63 74 69 .. * this functi 1930: 6f 6e 20 77 69 74 68 6f 75 74 20 67 65 74 74 69 on without getti 1940: 6e 67 20 69 6e 74 6f 20 61 6e 20 69 6e 66 69 6e ng into an infin 1950: 69 74 65 20 6c 6f 6f 70 0a 09 20 2a 2f 0a 09 66 ite loop.. */..f 1960: 64 20 3d 20 73 74 64 65 72 72 3b 0a 0a 09 6c 6f d = stderr;...lo 1970: 67 66 69 6c 65 20 3d 20 67 65 74 65 6e 76 28 22 gfile = getenv(" 1980: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 4c 4f 47 CACKEY_DEBUG_LOG 1990: 46 49 4c 45 22 29 3b 0a 09 69 66 20 28 6c 6f 67 FILE");..if (log 19a0: 66 69 6c 65 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a file != NULL) {. 19b0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 19c0: 52 49 4e 54 46 28 22 46 6f 75 6e 64 20 65 6e 76 RINTF("Found env 19d0: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c ironment variabl 19e0: 65 3a 20 25 73 22 2c 20 6c 6f 67 66 69 6c 65 29 e: %s", logfile) 19f0: 3b 0a 0a 09 09 6c 6f 67 66 69 6c 65 20 3d 20 73 ;....logfile = s 1a00: 74 72 63 68 72 28 6c 6f 67 66 69 6c 65 2c 20 27 trchr(logfile, ' 1a10: 3d 27 29 3b 0a 09 09 69 66 20 28 6c 6f 67 66 69 =');...if (logfi 1a20: 6c 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 le == NULL) {... 1a30: 09 6c 6f 67 66 69 6c 65 20 3d 20 67 65 74 65 6e .logfile = geten 1a40: 76 28 22 43 41 43 4b 45 59 5f 44 45 42 55 47 5f v("CACKEY_DEBUG_ 1a50: 4c 4f 47 46 49 4c 45 22 29 3b 0a 09 09 7d 20 65 LOGFILE");...} e 1a60: 6c 73 65 20 7b 0a 09 09 09 6c 6f 67 66 69 6c 65 lse {....logfile 1a70: 2b 2b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 ++;...}..}...if 1a80: 28 6c 6f 67 66 69 6c 65 20 21 3d 20 4e 55 4c 4c (logfile != NULL 1a90: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1aa0: 55 47 5f 50 52 49 4e 54 46 28 22 46 6f 75 6e 64 UG_PRINTF("Found 1ab0: 20 6c 6f 67 20 66 69 6c 65 3a 20 25 73 22 2c 20 log file: %s", 1ac0: 6c 6f 67 66 69 6c 65 29 3b 0a 0a 09 09 66 64 20 logfile);....fd 1ad0: 3d 20 66 6f 70 65 6e 28 6c 6f 67 66 69 6c 65 2c = fopen(logfile, 1ae0: 20 22 61 22 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 "a");..}...if ( 1af0: 66 64 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 fd == NULL) {... 1b00: 66 64 20 3d 20 73 74 64 65 72 72 3b 0a 09 7d 0a fd = stderr;..}. 1b10: 0a 09 69 66 20 28 66 64 20 3d 3d 20 73 74 64 65 ..if (fd == stde 1b20: 72 72 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 rr) {...CACKEY_D 1b30: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 1b40: 75 72 6e 69 6e 67 20 73 74 64 65 72 72 22 29 3b urning stderr"); 1b50: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 43 41 43 ..} else {...CAC 1b60: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1b70: 28 22 52 65 74 75 72 6e 69 6e 67 20 25 70 22 2c ("Returning %p", 1b80: 20 28 76 6f 69 64 20 2a 29 20 66 64 29 3b 0a 09 (void *) fd);.. 1b90: 7d 0a 0a 09 72 65 74 75 72 6e 28 66 64 29 3b 0a }...return(fd);. 1ba0: 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 2a }..static void * 1bb0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN 1bc0: 43 5f 4d 41 4c 4c 4f 43 28 73 69 7a 65 5f 74 20 C_MALLOC(size_t 1bd0: 73 69 7a 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 size, const char 1be0: 20 2a 66 75 6e 63 2c 20 69 6e 74 20 6c 69 6e 65 *func, int line 1bf0: 29 20 7b 0a 09 76 6f 69 64 20 2a 72 65 74 76 61 ) {..void *retva 1c00: 6c 3b 0a 0a 09 72 65 74 76 61 6c 20 3d 20 6d 61 l;...retval = ma 1c10: 6c 6c 6f 63 28 73 69 7a 65 29 3b 0a 0a 09 43 41 lloc(size);...CA 1c20: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1c30: 54 49 4d 45 3b 0a 09 66 70 72 69 6e 74 66 28 63 TIME;..fprintf(c 1c40: 61 63 6b 65 79 5f 64 65 62 75 67 5f 66 64 28 29 ackey_debug_fd() 1c50: 2c 20 22 25 73 28 29 3a 25 69 3a 20 22 2c 20 66 , "%s():%i: ", f 1c60: 75 6e 63 2c 20 6c 69 6e 65 29 3b 0a 09 66 70 72 unc, line);..fpr 1c70: 69 6e 74 66 28 63 61 63 6b 65 79 5f 64 65 62 75 intf(cackey_debu 1c80: 67 5f 66 64 28 29 2c 20 22 4d 41 4c 4c 4f 43 28 g_fd(), "MALLOC( 1c90: 29 20 3d 20 25 70 22 2c 20 72 65 74 76 61 6c 29 ) = %p", retval) 1ca0: 3b 0a 09 66 70 72 69 6e 74 66 28 63 61 63 6b 65 ;..fprintf(cacke 1cb0: 79 5f 64 65 62 75 67 5f 66 64 28 29 2c 20 22 5c y_debug_fd(), "\ 1cc0: 6e 22 29 3b 0a 09 66 66 6c 75 73 68 28 63 61 63 n");..fflush(cac 1cd0: 6b 65 79 5f 64 65 62 75 67 5f 66 64 28 29 29 3b key_debug_fd()); 1ce0: 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c ...return(retval 1cf0: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 );.}..static voi 1d00: 64 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 47 5f d *CACKEY_DEBUG_ 1d10: 46 55 4e 43 5f 52 45 41 4c 4c 4f 43 28 76 6f 69 FUNC_REALLOC(voi 1d20: 64 20 2a 70 74 72 2c 20 73 69 7a 65 5f 74 20 73 d *ptr, size_t s 1d30: 69 7a 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 ize, const char 1d40: 2a 66 75 6e 63 2c 20 69 6e 74 20 6c 69 6e 65 29 *func, int line) 1d50: 20 7b 0a 09 76 6f 69 64 20 2a 72 65 74 76 61 6c {..void *retval 1d60: 3b 0a 0a 09 72 65 74 76 61 6c 20 3d 20 72 65 61 ;...retval = rea 1d70: 6c 6c 6f 63 28 70 74 72 2c 20 73 69 7a 65 29 3b lloc(ptr, size); 1d80: 0a 0a 09 69 66 20 28 72 65 74 76 61 6c 20 21 3d ...if (retval != 1d90: 20 70 74 72 29 20 7b 0a 09 09 43 41 43 4b 45 59 ptr) {...CACKEY 1da0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 54 49 4d 45 _DEBUG_PRINTTIME 1db0: 3b 0a 09 09 66 70 72 69 6e 74 66 28 63 61 63 6b ;...fprintf(cack 1dc0: 65 79 5f 64 65 62 75 67 5f 66 64 28 29 2c 20 22 ey_debug_fd(), " 1dd0: 25 73 28 29 3a 25 69 3a 20 22 2c 20 66 75 6e 63 %s():%i: ", func 1de0: 2c 20 6c 69 6e 65 29 3b 0a 09 09 66 70 72 69 6e , line);...fprin 1df0: 74 66 28 63 61 63 6b 65 79 5f 64 65 62 75 67 5f tf(cackey_debug_ 1e00: 66 64 28 29 2c 20 22 52 45 41 4c 4c 4f 43 28 25 fd(), "REALLOC(% 1e10: 70 29 20 3d 20 25 70 22 2c 20 70 74 72 2c 20 72 p) = %p", ptr, r 1e20: 65 74 76 61 6c 29 3b 0a 09 09 66 70 72 69 6e 74 etval);...fprint 1e30: 66 28 63 61 63 6b 65 79 5f 64 65 62 75 67 5f 66 f(cackey_debug_f 1e40: 64 28 29 2c 20 22 5c 6e 22 29 3b 0a 09 09 66 66 d(), "\n");...ff 1e50: 6c 75 73 68 28 63 61 63 6b 65 79 5f 64 65 62 75 lush(cackey_debu 1e60: 67 5f 66 64 28 29 29 3b 0a 09 7d 0a 0a 09 69 66 g_fd());..}...if 1e70: 20 28 72 65 74 76 61 6c 20 3d 3d 20 4e 55 4c 4c (retval == NULL 1e80: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1e90: 55 47 5f 50 52 49 4e 54 46 28 22 20 2a 2a 2a 20 UG_PRINTF(" *** 1ea0: 45 52 52 4f 52 20 2a 2a 2a 20 72 65 61 6c 6c 6f ERROR *** reallo 1eb0: 63 20 72 65 74 75 72 6e 65 64 20 4e 55 4c 4c 20 c returned NULL 1ec0: 28 73 69 7a 65 20 3d 20 25 6c 75 29 22 2c 20 28 (size = %lu)", ( 1ed0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 unsigned long) s 1ee0: 69 7a 65 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 ize);..}...retur 1ef0: 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 n(retval);.}..st 1f00: 61 74 69 63 20 63 68 61 72 20 2a 43 41 43 4b 45 atic char *CACKE 1f10: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 54 52 Y_DEBUG_FUNC_STR 1f20: 44 55 50 28 63 6f 6e 73 74 20 63 68 61 72 20 2a DUP(const char * 1f30: 70 74 72 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 ptr, const char 1f40: 2a 66 75 6e 63 2c 20 69 6e 74 20 6c 69 6e 65 29 *func, int line) 1f50: 20 7b 0a 09 63 68 61 72 20 2a 72 65 74 76 61 6c {..char *retval 1f60: 3b 0a 0a 09 72 65 74 76 61 6c 20 3d 20 73 74 72 ;...retval = str 1f70: 64 75 70 28 70 74 72 29 3b 0a 0a 09 43 41 43 4b dup(ptr);...CACK 1f80: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 54 49 EY_DEBUG_PRINTTI 1f90: 4d 45 3b 0a 09 66 70 72 69 6e 74 66 28 63 61 63 ME;..fprintf(cac 1fa0: 6b 65 79 5f 64 65 62 75 67 5f 66 64 28 29 2c 20 key_debug_fd(), 1fb0: 22 25 73 28 29 3a 25 69 3a 20 22 2c 20 66 75 6e "%s():%i: ", fun 1fc0: 63 2c 20 6c 69 6e 65 29 3b 0a 09 66 70 72 69 6e c, line);..fprin 1fd0: 74 66 28 63 61 63 6b 65 79 5f 64 65 62 75 67 5f tf(cackey_debug_ 1fe0: 66 64 28 29 2c 20 22 53 54 52 44 55 50 5f 4d 41 fd(), "STRDUP_MA 1ff0: 4c 4c 4f 43 28 29 20 3d 20 25 70 22 2c 20 72 65 LLOC() = %p", re 2000: 74 76 61 6c 29 3b 0a 09 66 70 72 69 6e 74 66 28 tval);..fprintf( 2010: 63 61 63 6b 65 79 5f 64 65 62 75 67 5f 66 64 28 cackey_debug_fd( 2020: 29 2c 20 22 5c 6e 22 29 3b 0a 09 66 66 6c 75 73 ), "\n");..fflus 2030: 68 28 63 61 63 6b 65 79 5f 64 65 62 75 67 5f 66 h(cackey_debug_f 2040: 64 28 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 d());...return(r 2050: 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 etval);.}..stati 2060: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 43 41 c const char *CA 2070: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 2080: 54 41 47 5f 54 4f 5f 53 54 52 28 75 6e 73 69 67 TAG_TO_STR(unsig 2090: 6e 65 64 20 63 68 61 72 20 74 61 67 29 20 7b 0a ned char tag) {. 20a0: 09 73 77 69 74 63 68 20 28 74 61 67 29 20 7b 0a .switch (tag) {. 20b0: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 20c0: 5f 43 41 52 44 49 44 3a 0a 09 09 09 72 65 74 75 _CARDID:....retu 20d0: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 43 41 rn("GSCIS_TAG_CA 20e0: 52 44 49 44 22 29 3b 0a 09 09 63 61 73 65 20 47 RDID");...case G 20f0: 53 43 49 53 5f 54 41 47 5f 43 43 43 5f 56 45 52 SCIS_TAG_CCC_VER 2100: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 2110: 49 53 5f 54 41 47 5f 43 43 43 5f 56 45 52 22 29 IS_TAG_CCC_VER") 2120: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 2130: 41 47 5f 43 43 47 5f 56 45 52 3a 0a 09 09 09 72 AG_CCG_VER:....r 2140: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 2150: 5f 43 43 47 5f 56 45 52 22 29 3b 0a 09 09 63 61 _CCG_VER");...ca 2160: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 se GSCIS_TAG_CAR 2170: 44 55 52 4c 3a 0a 09 09 09 72 65 74 75 72 6e 28 DURL:....return( 2180: 22 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 55 "GSCIS_TAG_CARDU 2190: 52 4c 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 RL");...case GSC 21a0: 49 53 5f 54 41 47 5f 50 4b 43 53 31 35 3a 0a 09 IS_TAG_PKCS15:.. 21b0: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 21c0: 54 41 47 5f 50 4b 43 53 31 35 22 29 3b 0a 09 09 TAG_PKCS15");... 21d0: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 52 case GSCIS_TAG_R 21e0: 45 47 5f 44 41 54 41 5f 4d 4f 44 45 4c 3a 0a 09 EG_DATA_MODEL:.. 21f0: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 2200: 54 41 47 5f 52 45 47 5f 44 41 54 41 5f 4d 4f 44 TAG_REG_DATA_MOD 2210: 45 4c 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 EL");...case GSC 2220: 49 53 5f 54 41 47 5f 41 43 52 5f 54 41 42 4c 45 IS_TAG_ACR_TABLE 2230: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 2240: 49 53 5f 54 41 47 5f 41 43 52 5f 54 41 42 4c 45 IS_TAG_ACR_TABLE 2250: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 2260: 5f 54 41 47 5f 43 41 52 44 5f 41 50 44 55 3a 0a _TAG_CARD_APDU:. 2270: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 2280: 5f 54 41 47 5f 43 41 52 44 5f 41 50 44 55 22 29 _TAG_CARD_APDU") 2290: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 22a0: 41 47 5f 52 45 44 49 52 45 43 54 49 4f 4e 3a 0a AG_REDIRECTION:. 22b0: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 22c0: 5f 54 41 47 5f 52 45 44 49 52 45 43 54 49 4f 4e _TAG_REDIRECTION 22d0: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 22e0: 5f 54 41 47 5f 43 54 3a 0a 09 09 09 72 65 74 75 _TAG_CT:....retu 22f0: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 43 54 rn("GSCIS_TAG_CT 2300: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 2310: 5f 54 41 47 5f 53 54 3a 0a 09 09 09 72 65 74 75 _TAG_ST:....retu 2320: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 53 54 rn("GSCIS_TAG_ST 2330: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 2340: 5f 54 41 47 5f 4e 45 58 54 43 43 43 3a 0a 09 09 _TAG_NEXTCCC:... 2350: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 2360: 41 47 5f 4e 45 58 54 43 43 43 22 29 3b 0a 09 09 AG_NEXTCCC");... 2370: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 46 case GSCIS_TAG_F 2380: 4e 41 4d 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 NAME:....return( 2390: 22 47 53 43 49 53 5f 54 41 47 5f 46 4e 41 4d 45 "GSCIS_TAG_FNAME 23a0: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 23b0: 5f 54 41 47 5f 4d 4e 41 4d 45 3a 0a 09 09 09 72 _TAG_MNAME:....r 23c0: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 23d0: 5f 4d 4e 41 4d 45 22 29 3b 0a 09 09 63 61 73 65 _MNAME");...case 23e0: 20 47 53 43 49 53 5f 54 41 47 5f 4c 4e 41 4d 45 GSCIS_TAG_LNAME 23f0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 2400: 49 53 5f 54 41 47 5f 4c 4e 41 4d 45 22 29 3b 0a IS_TAG_LNAME");. 2410: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 2420: 5f 53 55 46 46 49 58 3a 0a 09 09 09 72 65 74 75 _SUFFIX:....retu 2430: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 53 55 rn("GSCIS_TAG_SU 2440: 46 46 49 58 22 29 3b 0a 09 09 63 61 73 65 20 47 FFIX");...case G 2450: 53 43 49 53 5f 54 41 47 5f 47 4f 56 54 5f 41 47 SCIS_TAG_GOVT_AG 2460: 45 4e 43 59 3a 0a 09 09 09 72 65 74 75 72 6e 28 ENCY:....return( 2470: 22 47 53 43 49 53 5f 54 41 47 5f 47 4f 56 54 5f "GSCIS_TAG_GOVT_ 2480: 41 47 45 4e 43 59 22 29 3b 0a 09 09 63 61 73 65 AGENCY");...case 2490: 20 47 53 43 49 53 5f 54 41 47 5f 42 55 52 45 41 GSCIS_TAG_BUREA 24a0: 55 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 U:....return("GS 24b0: 43 49 53 5f 54 41 47 5f 42 55 52 45 41 55 22 29 CIS_TAG_BUREAU") 24c0: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 24d0: 41 47 5f 42 55 52 45 41 55 5f 43 4f 44 45 3a 0a AG_BUREAU_CODE:. 24e0: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 24f0: 5f 54 41 47 5f 42 55 52 45 41 55 5f 43 4f 44 45 _TAG_BUREAU_CODE 2500: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 2510: 5f 54 41 47 5f 44 45 50 54 5f 43 4f 44 45 3a 0a _TAG_DEPT_CODE:. 2520: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 2530: 5f 54 41 47 5f 44 45 50 54 5f 43 4f 44 45 22 29 _TAG_DEPT_CODE") 2540: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 2550: 41 47 5f 54 49 54 4c 45 3a 0a 09 09 09 72 65 74 AG_TITLE:....ret 2560: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 54 urn("GSCIS_TAG_T 2570: 49 54 4c 45 22 29 3b 0a 09 09 63 61 73 65 20 47 ITLE");...case G 2580: 53 43 49 53 5f 54 41 47 5f 42 55 49 4c 44 49 4e SCIS_TAG_BUILDIN 2590: 47 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 G:....return("GS 25a0: 43 49 53 5f 54 41 47 5f 42 55 49 4c 44 49 4e 47 CIS_TAG_BUILDING 25b0: 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 ");...case GSCIS 25c0: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 52 _TAG_OFFICE_ADDR 25d0: 31 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 1:....return("GS 25e0: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 41 CIS_TAG_OFFICE_A 25f0: 44 44 52 31 22 29 3b 0a 09 09 63 61 73 65 20 47 DDR1");...case G 2600: 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f SCIS_TAG_OFFICE_ 2610: 41 44 44 52 32 3a 0a 09 09 09 72 65 74 75 72 6e ADDR2:....return 2620: 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 ("GSCIS_TAG_OFFI 2630: 43 45 5f 41 44 44 52 32 22 29 3b 0a 09 09 63 61 CE_ADDR2");...ca 2640: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 se GSCIS_TAG_OFF 2650: 49 43 45 5f 43 49 54 59 3a 0a 09 09 09 72 65 74 ICE_CITY:....ret 2660: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f urn("GSCIS_TAG_O 2670: 46 46 49 43 45 5f 43 49 54 59 22 29 3b 0a 09 09 FFICE_CITY");... 2680: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f case GSCIS_TAG_O 2690: 46 46 49 43 45 5f 53 54 41 54 45 3a 0a 09 09 09 FFICE_STATE:.... 26a0: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 26b0: 47 5f 4f 46 46 49 43 45 5f 53 54 41 54 45 22 29 G_OFFICE_STATE") 26c0: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 26d0: 41 47 5f 4f 46 46 49 43 45 5f 5a 49 50 3a 0a 09 AG_OFFICE_ZIP:.. 26e0: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 26f0: 54 41 47 5f 4f 46 46 49 43 45 5f 5a 49 50 22 29 TAG_OFFICE_ZIP") 2700: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 2710: 41 47 5f 4f 46 46 49 43 45 5f 43 4f 55 4e 54 52 AG_OFFICE_COUNTR 2720: 59 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 Y:....return("GS 2730: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 43 CIS_TAG_OFFICE_C 2740: 4f 55 4e 54 52 59 22 29 3b 0a 09 09 63 61 73 65 OUNTRY");...case 2750: 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 GSCIS_TAG_OFFIC 2760: 45 5f 50 48 4f 4e 45 3a 0a 09 09 09 72 65 74 75 E_PHONE:....retu 2770: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 rn("GSCIS_TAG_OF 2780: 46 49 43 45 5f 50 48 4f 4e 45 22 29 3b 0a 09 09 FICE_PHONE");... 2790: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f case GSCIS_TAG_O 27a0: 46 46 49 43 45 5f 50 48 4f 4e 45 5f 45 58 54 3a FFICE_PHONE_EXT: 27b0: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 27c0: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 4f S_TAG_OFFICE_PHO 27d0: 4e 45 5f 45 58 54 22 29 3b 0a 09 09 63 61 73 65 NE_EXT");...case 27e0: 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 GSCIS_TAG_OFFIC 27f0: 45 5f 46 41 58 3a 0a 09 09 09 72 65 74 75 72 6e E_FAX:....return 2800: 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 ("GSCIS_TAG_OFFI 2810: 43 45 5f 46 41 58 22 29 3b 0a 09 09 63 61 73 65 CE_FAX");...case 2820: 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 GSCIS_TAG_OFFIC 2830: 45 5f 45 4d 41 49 4c 3a 0a 09 09 09 72 65 74 75 E_EMAIL:....retu 2840: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 rn("GSCIS_TAG_OF 2850: 46 49 43 45 5f 45 4d 41 49 4c 22 29 3b 0a 09 09 FICE_EMAIL");... 2860: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f case GSCIS_TAG_O 2870: 46 46 49 43 45 5f 52 4f 4f 4d 3a 0a 09 09 09 72 FFICE_ROOM:....r 2880: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 2890: 5f 4f 46 46 49 43 45 5f 52 4f 4f 4d 22 29 3b 0a _OFFICE_ROOM");. 28a0: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 28b0: 5f 4e 4f 4e 47 4f 56 5f 41 47 45 4e 43 59 3a 0a _NONGOV_AGENCY:. 28c0: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 28d0: 5f 54 41 47 5f 4e 4f 4e 47 4f 56 5f 41 47 45 4e _TAG_NONGOV_AGEN 28e0: 43 59 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 CY");...case GSC 28f0: 49 53 5f 54 41 47 5f 53 53 4e 5f 44 45 53 49 47 IS_TAG_SSN_DESIG 2900: 4e 41 54 4f 52 3a 0a 09 09 09 72 65 74 75 72 6e NATOR:....return 2910: 28 22 47 53 43 49 53 5f 54 41 47 5f 53 53 4e 5f ("GSCIS_TAG_SSN_ 2920: 44 45 53 49 47 4e 41 54 4f 52 22 29 3b 0a 09 09 DESIGNATOR");... 2930: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 53 case GSCIS_TAG_S 2940: 53 4e 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 SN:....return("G 2950: 53 43 49 53 5f 54 41 47 5f 53 53 4e 22 29 3b 0a SCIS_TAG_SSN");. 2960: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 2970: 5f 44 4f 42 3a 0a 09 09 09 72 65 74 75 72 6e 28 _DOB:....return( 2980: 22 47 53 43 49 53 5f 54 41 47 5f 44 4f 42 22 29 "GSCIS_TAG_DOB") 2990: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 29a0: 41 47 5f 47 45 4e 44 45 52 3a 0a 09 09 09 72 65 AG_GENDER:....re 29b0: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 29c0: 47 45 4e 44 45 52 22 29 3b 0a 09 09 63 61 73 65 GENDER");...case 29d0: 20 47 53 43 49 53 5f 54 41 47 5f 55 53 45 52 49 GSCIS_TAG_USERI 29e0: 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 D:....return("GS 29f0: 43 49 53 5f 54 41 47 5f 55 53 45 52 49 44 22 29 CIS_TAG_USERID") 2a00: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 2a10: 41 47 5f 44 4f 4d 41 49 4e 3a 0a 09 09 09 72 65 AG_DOMAIN:....re 2a20: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 2a30: 44 4f 4d 41 49 4e 22 29 3b 0a 09 09 63 61 73 65 DOMAIN");...case 2a40: 20 47 53 43 49 53 5f 54 41 47 5f 50 41 53 53 57 GSCIS_TAG_PASSW 2a50: 4f 52 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 ORD:....return(" 2a60: 47 53 43 49 53 5f 54 41 47 5f 50 41 53 53 57 4f GSCIS_TAG_PASSWO 2a70: 52 44 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 RD");...case GSC 2a80: 49 53 5f 54 41 47 5f 49 53 53 55 45 52 49 44 3a IS_TAG_ISSUERID: 2a90: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 2aa0: 53 5f 54 41 47 5f 49 53 53 55 45 52 49 44 22 29 S_TAG_ISSUERID") 2ab0: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 ;...case GSCIS_T 2ac0: 41 47 5f 53 45 52 4e 4f 3a 0a 09 09 09 72 65 74 AG_SERNO:....ret 2ad0: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 53 urn("GSCIS_TAG_S 2ae0: 45 52 4e 4f 22 29 3b 0a 09 09 63 61 73 65 20 47 ERNO");...case G 2af0: 53 43 49 53 5f 54 41 47 5f 49 53 53 55 45 5f 44 SCIS_TAG_ISSUE_D 2b00: 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 ATE:....return(" 2b10: 47 53 43 49 53 5f 54 41 47 5f 49 53 53 55 45 5f GSCIS_TAG_ISSUE_ 2b20: 44 41 54 45 22 29 3b 0a 09 09 63 61 73 65 20 47 DATE");...case G 2b30: 53 43 49 53 5f 54 41 47 5f 45 58 50 49 52 45 5f SCIS_TAG_EXPIRE_ 2b40: 44 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 DATE:....return( 2b50: 22 47 53 43 49 53 5f 54 41 47 5f 45 58 50 49 52 "GSCIS_TAG_EXPIR 2b60: 45 5f 44 41 54 45 22 29 3b 0a 09 09 63 61 73 65 E_DATE");...case 2b70: 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 5f GSCIS_TAG_CARD_ 2b80: 54 59 50 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 TYPE:....return( 2b90: 22 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 5f "GSCIS_TAG_CARD_ 2ba0: 54 59 50 45 22 29 3b 0a 09 09 63 61 73 65 20 47 TYPE");...case G 2bb0: 53 43 49 53 5f 54 41 47 5f 53 45 43 55 52 49 54 SCIS_TAG_SECURIT 2bc0: 59 5f 43 4f 44 45 3a 0a 09 09 09 72 65 74 75 72 Y_CODE:....retur 2bd0: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 53 45 43 n("GSCIS_TAG_SEC 2be0: 55 52 49 54 59 5f 43 4f 44 45 22 29 3b 0a 09 09 URITY_CODE");... 2bf0: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 case GSCIS_TAG_C 2c00: 41 52 44 49 44 5f 41 49 44 3a 0a 09 09 09 72 65 ARDID_AID:....re 2c10: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 2c20: 43 41 52 44 49 44 5f 41 49 44 22 29 3b 0a 09 09 CARDID_AID");... 2c30: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 case GSCIS_TAG_C 2c40: 45 52 54 49 46 49 43 41 54 45 3a 0a 09 09 09 72 ERTIFICATE:....r 2c50: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 2c60: 5f 43 45 52 54 49 46 49 43 41 54 45 22 29 3b 0a _CERTIFICATE");. 2c70: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG 2c80: 5f 43 45 52 54 5f 49 53 53 55 45 5f 44 41 54 45 _CERT_ISSUE_DATE 2c90: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 2ca0: 49 53 5f 54 41 47 5f 43 45 52 54 5f 49 53 53 55 IS_TAG_CERT_ISSU 2cb0: 45 5f 44 41 54 45 22 29 3b 0a 09 09 63 61 73 65 E_DATE");...case 2cc0: 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 5f GSCIS_TAG_CERT_ 2cd0: 45 58 50 49 52 45 5f 44 41 54 45 3a 0a 09 09 09 EXPIRE_DATE:.... 2ce0: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 2cf0: 47 5f 43 45 52 54 5f 45 58 50 49 52 45 5f 44 41 G_CERT_EXPIRE_DA 2d00: 54 45 22 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 TE");..}...retur 2d10: 6e 28 22 55 4e 4b 4e 4f 57 4e 22 29 3b 0a 7d 0a n("UNKNOWN");.}. 2d20: 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 .static const ch 2d30: 61 72 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 47 ar *CACKEY_DEBUG 2d40: 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 _FUNC_SCARDERR_T 2d50: 4f 5f 53 54 52 28 4c 4f 4e 47 20 72 65 74 63 6f O_STR(LONG retco 2d60: 64 65 29 20 7b 0a 09 73 77 69 74 63 68 20 28 72 de) {..switch (r 2d70: 65 74 63 6f 64 65 29 20 7b 0a 09 09 63 61 73 65 etcode) {...case 2d80: 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 SCARD_S_SUCCESS 2d90: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 :....return("SCA 2da0: 52 44 5f 53 5f 53 55 43 43 45 53 53 22 29 3b 0a RD_S_SUCCESS");. 2db0: 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 43 ..case SCARD_E_C 2dc0: 41 4e 43 45 4c 4c 45 44 3a 0a 09 09 09 72 65 74 ANCELLED:....ret 2dd0: 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 43 41 4e urn("SCARD_E_CAN 2de0: 43 45 4c 4c 45 44 22 29 3b 0a 09 09 63 61 73 65 CELLED");...case 2df0: 20 53 43 41 52 44 5f 45 5f 43 41 4e 54 5f 44 49 SCARD_E_CANT_DI 2e00: 53 50 4f 53 45 3a 0a 09 09 09 72 65 74 75 72 6e SPOSE:....return 2e10: 28 22 53 43 41 52 44 5f 45 5f 43 41 4e 54 5f 44 ("SCARD_E_CANT_D 2e20: 49 53 50 4f 53 45 22 29 3b 0a 09 09 63 61 73 65 ISPOSE");...case 2e30: 20 53 43 41 52 44 5f 45 5f 49 4e 53 55 46 46 49 SCARD_E_INSUFFI 2e40: 43 49 45 4e 54 5f 42 55 46 46 45 52 3a 0a 09 09 CIENT_BUFFER:... 2e50: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 2e60: 5f 49 4e 53 55 46 46 49 43 49 45 4e 54 5f 42 55 _INSUFFICIENT_BU 2e70: 46 46 45 52 22 29 3b 0a 09 09 63 61 73 65 20 53 FFER");...case S 2e80: 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 41 CARD_E_INVALID_A 2e90: 54 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 TR:....return("S 2ea0: 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 41 CARD_E_INVALID_A 2eb0: 54 52 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 TR");...case SCA 2ec0: 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 48 41 4e RD_E_INVALID_HAN 2ed0: 44 4c 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 DLE:....return(" 2ee0: 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f SCARD_E_INVALID_ 2ef0: 48 41 4e 44 4c 45 22 29 3b 0a 09 09 63 61 73 65 HANDLE");...case 2f00: 20 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 SCARD_E_INVALID 2f10: 5f 50 41 52 41 4d 45 54 45 52 3a 0a 09 09 09 72 _PARAMETER:....r 2f20: 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 49 eturn("SCARD_E_I 2f30: 4e 56 41 4c 49 44 5f 50 41 52 41 4d 45 54 45 52 NVALID_PARAMETER 2f40: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 2f50: 5f 45 5f 49 4e 56 41 4c 49 44 5f 54 41 52 47 45 _E_INVALID_TARGE 2f60: 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 T:....return("SC 2f70: 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 54 41 ARD_E_INVALID_TA 2f80: 52 47 45 54 22 29 3b 0a 09 09 63 61 73 65 20 53 RGET");...case S 2f90: 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 56 CARD_E_INVALID_V 2fa0: 41 4c 55 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 ALUE:....return( 2fb0: 22 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 "SCARD_E_INVALID 2fc0: 5f 56 41 4c 55 45 22 29 3b 0a 09 09 63 61 73 65 _VALUE");...case 2fd0: 20 53 43 41 52 44 5f 45 5f 4e 4f 5f 4d 45 4d 4f SCARD_E_NO_MEMO 2fe0: 52 59 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 RY:....return("S 2ff0: 43 41 52 44 5f 45 5f 4e 4f 5f 4d 45 4d 4f 52 59 CARD_E_NO_MEMORY 3000: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 3010: 5f 45 5f 55 4e 4b 4e 4f 57 4e 5f 52 45 41 44 45 _E_UNKNOWN_READE 3020: 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 R:....return("SC 3030: 41 52 44 5f 45 5f 55 4e 4b 4e 4f 57 4e 5f 52 45 ARD_E_UNKNOWN_RE 3040: 41 44 45 52 22 29 3b 0a 09 09 63 61 73 65 20 53 ADER");...case S 3050: 43 41 52 44 5f 45 5f 54 49 4d 45 4f 55 54 3a 0a CARD_E_TIMEOUT:. 3060: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 3070: 5f 45 5f 54 49 4d 45 4f 55 54 22 29 3b 0a 09 09 _E_TIMEOUT");... 3080: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 53 48 41 case SCARD_E_SHA 3090: 52 49 4e 47 5f 56 49 4f 4c 41 54 49 4f 4e 3a 0a RING_VIOLATION:. 30a0: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 30b0: 5f 45 5f 53 48 41 52 49 4e 47 5f 56 49 4f 4c 41 _E_SHARING_VIOLA 30c0: 54 49 4f 4e 22 29 3b 0a 09 09 63 61 73 65 20 53 TION");...case S 30d0: 43 41 52 44 5f 45 5f 4e 4f 5f 53 4d 41 52 54 43 CARD_E_NO_SMARTC 30e0: 41 52 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 ARD:....return(" 30f0: 53 43 41 52 44 5f 45 5f 4e 4f 5f 53 4d 41 52 54 SCARD_E_NO_SMART 3100: 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 20 53 CARD");...case S 3110: 43 41 52 44 5f 45 5f 55 4e 4b 4e 4f 57 4e 5f 43 CARD_E_UNKNOWN_C 3120: 41 52 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 ARD:....return(" 3130: 53 43 41 52 44 5f 45 5f 55 4e 4b 4e 4f 57 4e 5f SCARD_E_UNKNOWN_ 3140: 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 20 53 CARD");...case S 3150: 43 41 52 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 CARD_E_PROTO_MIS 3160: 4d 41 54 43 48 3a 0a 09 09 09 72 65 74 75 72 6e MATCH:....return 3170: 28 22 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f 5f ("SCARD_E_PROTO_ 3180: 4d 49 53 4d 41 54 43 48 22 29 3b 0a 09 09 63 61 MISMATCH");...ca 3190: 73 65 20 53 43 41 52 44 5f 45 5f 4e 4f 54 5f 52 se SCARD_E_NOT_R 31a0: 45 41 44 59 3a 0a 09 09 09 72 65 74 75 72 6e 28 EADY:....return( 31b0: 22 53 43 41 52 44 5f 45 5f 4e 4f 54 5f 52 45 41 "SCARD_E_NOT_REA 31c0: 44 59 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 DY");...case SCA 31d0: 52 44 5f 45 5f 53 59 53 54 45 4d 5f 43 41 4e 43 RD_E_SYSTEM_CANC 31e0: 45 4c 4c 45 44 3a 0a 09 09 09 72 65 74 75 72 6e ELLED:....return 31f0: 28 22 53 43 41 52 44 5f 45 5f 53 59 53 54 45 4d ("SCARD_E_SYSTEM 3200: 5f 43 41 4e 43 45 4c 4c 45 44 22 29 3b 0a 09 09 _CANCELLED");... 3210: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 4e 4f 54 case SCARD_E_NOT 3220: 5f 54 52 41 4e 53 41 43 54 45 44 3a 0a 09 09 09 _TRANSACTED:.... 3230: 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f return("SCARD_E_ 3240: 4e 4f 54 5f 54 52 41 4e 53 41 43 54 45 44 22 29 NOT_TRANSACTED") 3250: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 ;...case SCARD_E 3260: 5f 52 45 41 44 45 52 5f 55 4e 41 56 41 49 4c 41 _READER_UNAVAILA 3270: 42 4c 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 BLE:....return(" 3280: 53 43 41 52 44 5f 45 5f 52 45 41 44 45 52 5f 55 SCARD_E_READER_U 3290: 4e 41 56 41 49 4c 41 42 4c 45 22 29 3b 0a 09 09 NAVAILABLE");... 32a0: 63 61 73 65 20 53 43 41 52 44 5f 57 5f 55 4e 53 case SCARD_W_UNS 32b0: 55 50 50 4f 52 54 45 44 5f 43 41 52 44 3a 0a 09 UPPORTED_CARD:.. 32c0: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 32d0: 57 5f 55 4e 53 55 50 50 4f 52 54 45 44 5f 43 41 W_UNSUPPORTED_CA 32e0: 52 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 RD");...case SCA 32f0: 52 44 5f 57 5f 55 4e 52 45 53 50 4f 4e 53 49 56 RD_W_UNRESPONSIV 3300: 45 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 E_CARD:....retur 3310: 6e 28 22 53 43 41 52 44 5f 57 5f 55 4e 52 45 53 n("SCARD_W_UNRES 3320: 50 4f 4e 53 49 56 45 5f 43 41 52 44 22 29 3b 0a PONSIVE_CARD");. 3330: 09 09 63 61 73 65 20 53 43 41 52 44 5f 57 5f 55 ..case SCARD_W_U 3340: 4e 50 4f 57 45 52 45 44 5f 43 41 52 44 3a 0a 09 NPOWERED_CARD:.. 3350: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 3360: 57 5f 55 4e 50 4f 57 45 52 45 44 5f 43 41 52 44 W_UNPOWERED_CARD 3370: 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ");...case SCARD 3380: 5f 57 5f 52 45 53 45 54 5f 43 41 52 44 3a 0a 09 _W_RESET_CARD:.. 3390: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 33a0: 57 5f 52 45 53 45 54 5f 43 41 52 44 22 29 3b 0a W_RESET_CARD");. 33b0: 09 09 63 61 73 65 20 53 43 41 52 44 5f 57 5f 52 ..case SCARD_W_R 33c0: 45 4d 4f 56 45 44 5f 43 41 52 44 3a 0a 09 09 09 EMOVED_CARD:.... 33d0: 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 57 5f return("SCARD_W_ 33e0: 52 45 4d 4f 56 45 44 5f 43 41 52 44 22 29 3b 0a REMOVED_CARD");. 33f0: 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 50 ..case SCARD_E_P 3400: 43 49 5f 54 4f 4f 5f 53 4d 41 4c 4c 3a 0a 09 09 CI_TOO_SMALL:... 3410: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 3420: 5f 50 43 49 5f 54 4f 4f 5f 53 4d 41 4c 4c 22 29 _PCI_TOO_SMALL") 3430: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 ;...case SCARD_E 3440: 5f 52 45 41 44 45 52 5f 55 4e 53 55 50 50 4f 52 _READER_UNSUPPOR 3450: 54 45 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 TED:....return(" 3460: 53 43 41 52 44 5f 45 5f 52 45 41 44 45 52 5f 55 SCARD_E_READER_U 3470: 4e 53 55 50 50 4f 52 54 45 44 22 29 3b 0a 09 09 NSUPPORTED");... 3480: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 44 55 50 case SCARD_E_DUP 3490: 4c 49 43 41 54 45 5f 52 45 41 44 45 52 3a 0a 09 LICATE_READER:.. 34a0: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 34b0: 45 5f 44 55 50 4c 49 43 41 54 45 5f 52 45 41 44 E_DUPLICATE_READ 34c0: 45 52 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 ER");...case SCA 34d0: 52 44 5f 45 5f 43 41 52 44 5f 55 4e 53 55 50 50 RD_E_CARD_UNSUPP 34e0: 4f 52 54 45 44 3a 0a 09 09 09 72 65 74 75 72 6e ORTED:....return 34f0: 28 22 53 43 41 52 44 5f 45 5f 43 41 52 44 5f 55 ("SCARD_E_CARD_U 3500: 4e 53 55 50 50 4f 52 54 45 44 22 29 3b 0a 09 09 NSUPPORTED");... 3510: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 4e 4f 5f case SCARD_E_NO_ 3520: 53 45 52 56 49 43 45 3a 0a 09 09 09 72 65 74 75 SERVICE:....retu 3530: 72 6e 28 22 53 43 41 52 44 5f 45 5f 4e 4f 5f 53 rn("SCARD_E_NO_S 3540: 45 52 56 49 43 45 22 29 3b 0a 09 09 63 61 73 65 ERVICE");...case 3550: 20 53 43 41 52 44 5f 45 5f 53 45 52 56 49 43 45 SCARD_E_SERVICE 3560: 5f 53 54 4f 50 50 45 44 3a 0a 09 09 09 72 65 74 _STOPPED:....ret 3570: 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 53 45 52 urn("SCARD_E_SER 3580: 56 49 43 45 5f 53 54 4f 50 50 45 44 22 29 3b 0a VICE_STOPPED");. 3590: 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 55 ..case SCARD_E_U 35a0: 4e 53 55 50 50 4f 52 54 45 44 5f 46 45 41 54 55 NSUPPORTED_FEATU 35b0: 52 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 RE:....return("S 35c0: 43 41 52 44 5f 45 5f 55 4e 53 55 50 50 4f 52 54 CARD_E_UNSUPPORT 35d0: 45 44 5f 46 45 41 54 55 52 45 22 29 3b 0a 23 69 ED_FEATURE");.#i 35e0: 66 64 65 66 20 53 43 41 52 44 5f 57 5f 49 4e 53 fdef SCARD_W_INS 35f0: 45 52 54 45 44 5f 43 41 52 44 0a 09 09 63 61 73 ERTED_CARD...cas 3600: 65 20 53 43 41 52 44 5f 57 5f 49 4e 53 45 52 54 e SCARD_W_INSERT 3610: 45 44 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 ED_CARD:....retu 3620: 72 6e 28 22 53 43 41 52 44 5f 57 5f 49 4e 53 45 rn("SCARD_W_INSE 3630: 52 54 45 44 5f 43 41 52 44 22 29 3b 0a 23 65 6e RTED_CARD");.#en 3640: 64 69 66 0a 23 69 66 64 65 66 20 53 43 41 52 44 dif.#ifdef SCARD 3650: 5f 45 5f 4e 4f 5f 52 45 41 44 45 52 53 5f 41 56 _E_NO_READERS_AV 3660: 41 49 4c 41 42 4c 45 0a 09 09 63 61 73 65 20 53 AILABLE...case S 3670: 43 41 52 44 5f 45 5f 4e 4f 5f 52 45 41 44 45 52 CARD_E_NO_READER 3680: 53 5f 41 56 41 49 4c 41 42 4c 45 3a 0a 09 09 09 S_AVAILABLE:.... 3690: 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f return("SCARD_E_ 36a0: 4e 4f 5f 52 45 41 44 45 52 53 5f 41 56 41 49 4c NO_READERS_AVAIL 36b0: 41 42 4c 45 22 29 3b 0a 23 65 6e 64 69 66 0a 09 ABLE");.#endif.. 36c0: 7d 0a 0a 09 72 65 74 75 72 6e 28 22 55 4e 4b 4e }...return("UNKN 36d0: 4f 57 4e 22 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 OWN");.}..static 36e0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 43 41 43 const char *CAC 36f0: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 4f KEY_DEBUG_FUNC_O 3700: 42 4a 49 44 5f 54 4f 5f 53 54 52 28 75 69 6e 74 BJID_TO_STR(uint 3710: 31 36 5f 74 20 6f 62 6a 69 64 29 20 7b 0a 09 73 16_t objid) {..s 3720: 77 69 74 63 68 20 28 6f 62 6a 69 64 29 20 7b 0a witch (objid) {. 3730: 09 09 63 61 73 65 20 30 78 32 30 30 30 3a 0a 09 ..case 0x2000:.. 3740: 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 ..return("CACKEY 3750: 5f 54 4c 56 5f 4f 42 4a 49 44 5f 47 45 4e 45 52 _TLV_OBJID_GENER 3760: 41 4c 49 4e 46 4f 22 29 3b 0a 09 09 63 61 73 65 ALINFO");...case 3770: 20 30 78 32 31 30 30 3a 0a 09 09 09 72 65 74 75 0x2100:....retu 3780: 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f rn("CACKEY_TLV_O 3790: 42 4a 49 44 5f 50 52 4f 50 45 52 53 4f 4e 41 4c BJID_PROPERSONAL 37a0: 49 4e 46 4f 22 29 3b 0a 09 09 63 61 73 65 20 30 INFO");...case 0 37b0: 78 33 30 30 30 3a 0a 09 09 09 72 65 74 75 72 6e x3000:....return 37c0: 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a ("CACKEY_TLV_OBJ 37d0: 49 44 5f 41 43 43 45 53 53 43 4f 4e 54 52 4f 4c ID_ACCESSCONTROL 37e0: 22 29 3b 0a 09 09 63 61 73 65 20 30 78 34 30 30 ");...case 0x400 37f0: 30 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 0:....return("CA 3800: 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 4c CKEY_TLV_OBJID_L 3810: 4f 47 49 4e 22 29 3b 0a 09 09 63 61 73 65 20 30 OGIN");...case 0 3820: 78 35 30 30 30 3a 0a 09 09 09 72 65 74 75 72 6e x5000:....return 3830: 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a ("CACKEY_TLV_OBJ 3840: 49 44 5f 43 41 52 44 49 4e 46 4f 22 29 3b 0a 09 ID_CARDINFO");.. 3850: 09 63 61 73 65 20 30 78 36 30 30 30 3a 0a 09 09 .case 0x6000:... 3860: 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f .return("CACKEY_ 3870: 54 4c 56 5f 4f 42 4a 49 44 5f 42 49 4f 4d 45 54 TLV_OBJID_BIOMET 3880: 52 49 43 53 22 29 3b 0a 09 09 63 61 73 65 20 30 RICS");...case 0 3890: 78 37 30 30 30 3a 0a 09 09 09 72 65 74 75 72 6e x7000:....return 38a0: 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a ("CACKEY_TLV_OBJ 38b0: 49 44 5f 44 49 47 49 54 41 4c 53 49 47 43 45 52 ID_DIGITALSIGCER 38c0: 54 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 32 T");...case 0x02 38d0: 30 30 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 00:....return("C 38e0: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 38f0: 43 41 43 5f 50 45 52 53 4f 4e 22 29 3b 0a 09 09 CAC_PERSON");... 3900: 63 61 73 65 20 30 78 30 32 30 32 3a 0a 09 09 09 case 0x0202:.... 3910: 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 return("CACKEY_T 3920: 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 42 45 4e LV_OBJID_CAC_BEN 3930: 45 46 49 54 53 22 29 3b 0a 09 09 63 61 73 65 20 EFITS");...case 3940: 30 78 30 32 30 33 3a 0a 09 09 09 72 65 74 75 72 0x0203:....retur 3950: 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 n("CACKEY_TLV_OB 3960: 4a 49 44 5f 43 41 43 5f 4f 54 48 45 52 42 45 4e JID_CAC_OTHERBEN 3970: 45 46 49 54 53 22 29 3b 0a 09 09 63 61 73 65 20 EFITS");...case 3980: 30 78 30 32 30 31 3a 0a 09 09 09 72 65 74 75 72 0x0201:....retur 3990: 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 n("CACKEY_TLV_OB 39a0: 4a 49 44 5f 43 41 43 5f 50 45 52 53 4f 4e 4e 45 JID_CAC_PERSONNE 39b0: 4c 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 32 L");...case 0x02 39c0: 46 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 FE:....return("C 39d0: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 39e0: 43 41 43 5f 50 4b 49 43 45 52 54 22 29 3b 0a 09 CAC_PKICERT");.. 39f0: 7d 0a 09 0a 09 72 65 74 75 72 6e 28 22 55 4e 4b }....return("UNK 3a00: 4e 4f 57 4e 22 29 3b 0a 7d 0a 0a 73 74 61 74 69 NOWN");.}..stati 3a10: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 43 41 c const char *CA 3a20: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 3a30: 41 50 50 54 59 50 45 5f 54 4f 5f 53 54 52 28 75 APPTYPE_TO_STR(u 3a40: 69 6e 74 38 5f 74 20 61 70 70 74 79 70 65 29 20 int8_t apptype) 3a50: 7b 0a 09 73 77 69 74 63 68 20 28 61 70 70 74 79 {..switch (appty 3a60: 70 65 29 20 7b 0a 09 09 63 61 73 65 20 30 78 30 pe) {...case 0x0 3a70: 30 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 4e 4f 0:....return("NO 3a80: 4e 45 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 NE");...case 0x0 3a90: 31 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 1:....return("CA 3aa0: 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 47 45 4e CKEY_TLV_APP_GEN 3ab0: 45 52 49 43 22 29 3b 0a 09 09 63 61 73 65 20 30 ERIC");...case 0 3ac0: 78 30 32 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 x02:....return(" 3ad0: 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 53 CACKEY_TLV_APP_S 3ae0: 4b 49 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 KI");...case 0x0 3af0: 33 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 3:....return("CA 3b00: 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 47 45 4e CKEY_TLV_APP_GEN 3b10: 45 52 49 43 20 7c 20 43 41 43 4b 45 59 5f 54 4c ERIC | CACKEY_TL 3b20: 56 5f 41 50 50 5f 53 4b 49 22 29 3b 0a 09 09 63 V_APP_SKI");...c 3b30: 61 73 65 20 30 78 30 34 3a 0a 09 09 09 72 65 74 ase 0x04:....ret 3b40: 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f urn("CACKEY_TLV_ 3b50: 41 50 50 5f 50 4b 49 22 29 3b 0a 09 09 63 61 73 APP_PKI");...cas 3b60: 65 20 30 78 30 35 3a 0a 09 09 09 72 65 74 75 72 e 0x05:....retur 3b70: 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 n("CACKEY_TLV_AP 3b80: 50 5f 47 45 4e 45 52 49 43 20 7c 20 43 41 43 4b P_GENERIC | CACK 3b90: 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 22 29 EY_TLV_APP_PKI") 3ba0: 3b 0a 09 09 63 61 73 65 20 30 78 30 36 3a 0a 09 ;...case 0x06:.. 3bb0: 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 ..return("CACKEY 3bc0: 5f 54 4c 56 5f 41 50 50 5f 53 4b 49 20 7c 20 43 _TLV_APP_SKI | C 3bd0: 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b ACKEY_TLV_APP_PK 3be0: 49 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 37 I");...case 0x07 3bf0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 :....return("CAC 3c00: 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 47 45 4e 45 KEY_TLV_APP_GENE 3c10: 52 49 43 20 7c 20 43 41 43 4b 45 59 5f 54 4c 56 RIC | CACKEY_TLV 3c20: 5f 41 50 50 5f 53 4b 49 20 7c 20 43 41 43 4b 45 _APP_SKI | CACKE 3c30: 59 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 22 29 3b Y_TLV_APP_PKI"); 3c40: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 22 49 4e ..}...return("IN 3c50: 56 41 4c 49 44 22 29 3b 0a 7d 0a 0a 73 74 61 74 VALID");.}..stat 3c60: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 43 ic const char *C 3c70: 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC 3c80: 5f 41 54 54 52 49 42 55 54 45 5f 54 4f 5f 53 54 _ATTRIBUTE_TO_ST 3c90: 52 28 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 54 R(CK_ATTRIBUTE_T 3ca0: 59 50 45 20 61 74 74 72 29 20 7b 0a 09 73 77 69 YPE attr) {..swi 3cb0: 74 63 68 20 28 61 74 74 72 29 20 7b 0a 09 09 63 tch (attr) {...c 3cc0: 61 73 65 20 43 4b 41 5f 43 4c 41 53 53 3a 0a 09 ase CKA_CLASS:.. 3cd0: 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 43 4c ..return("CKA_CL 3ce0: 41 53 53 22 29 3b 0a 09 09 63 61 73 65 20 43 4b ASS");...case CK 3cf0: 41 5f 54 4f 4b 45 4e 3a 0a 09 09 09 72 65 74 75 A_TOKEN:....retu 3d00: 72 6e 28 22 43 4b 41 5f 54 4f 4b 45 4e 22 29 3b rn("CKA_TOKEN"); 3d10: 0a 09 09 63 61 73 65 20 43 4b 41 5f 50 52 49 56 ...case CKA_PRIV 3d20: 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 ATE:....return(" 3d30: 43 4b 41 5f 50 52 49 56 41 54 45 22 29 3b 0a 09 CKA_PRIVATE");.. 3d40: 09 63 61 73 65 20 43 4b 41 5f 4c 41 42 45 4c 3a .case CKA_LABEL: 3d50: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f ....return("CKA_ 3d60: 4c 41 42 45 4c 22 29 3b 0a 09 09 63 61 73 65 20 LABEL");...case 3d70: 43 4b 41 5f 41 50 50 4c 49 43 41 54 49 4f 4e 3a CKA_APPLICATION: 3d80: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f ....return("CKA_ 3d90: 41 50 50 4c 49 43 41 54 49 4f 4e 22 29 3b 0a 09 APPLICATION");.. 3da0: 09 63 61 73 65 20 43 4b 41 5f 56 41 4c 55 45 3a .case CKA_VALUE: 3db0: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f ....return("CKA_ 3dc0: 56 41 4c 55 45 22 29 3b 0a 09 09 63 61 73 65 20 VALUE");...case 3dd0: 43 4b 41 5f 4f 42 4a 45 43 54 5f 49 44 3a 0a 09 CKA_OBJECT_ID:.. 3de0: 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 4f 42 ..return("CKA_OB 3df0: 4a 45 43 54 5f 49 44 22 29 3b 0a 09 09 63 61 73 JECT_ID");...cas 3e00: 65 20 43 4b 41 5f 43 45 52 54 49 46 49 43 41 54 e CKA_CERTIFICAT 3e10: 45 5f 54 59 50 45 3a 0a 09 09 09 72 65 74 75 72 E_TYPE:....retur 3e20: 6e 28 22 43 4b 41 5f 43 45 52 54 49 46 49 43 41 n("CKA_CERTIFICA 3e30: 54 45 5f 54 59 50 45 22 29 3b 0a 09 09 63 61 73 TE_TYPE");...cas 3e40: 65 20 43 4b 41 5f 49 53 53 55 45 52 3a 0a 09 09 e CKA_ISSUER:... 3e50: 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 49 53 53 .return("CKA_ISS 3e60: 55 45 52 22 29 3b 0a 09 09 63 61 73 65 20 43 4b UER");...case CK 3e70: 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52 3a A_SERIAL_NUMBER: 3e80: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f ....return("CKA_ 3e90: 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52 22 29 3b SERIAL_NUMBER"); 3ea0: 0a 09 09 63 61 73 65 20 43 4b 41 5f 41 43 5f 49 ...case CKA_AC_I 3eb0: 53 53 55 45 52 3a 0a 09 09 09 72 65 74 75 72 6e SSUER:....return 3ec0: 28 22 43 4b 41 5f 41 43 5f 49 53 53 55 45 52 22 ("CKA_AC_ISSUER" 3ed0: 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 4f 57 );...case CKA_OW 3ee0: 4e 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 NER:....return(" 3ef0: 43 4b 41 5f 4f 57 4e 45 52 22 29 3b 0a 09 09 63 CKA_OWNER");...c 3f00: 61 73 65 20 43 4b 41 5f 41 54 54 52 5f 54 59 50 ase CKA_ATTR_TYP 3f10: 45 53 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 ES:....return("C 3f20: 4b 41 5f 41 54 54 52 5f 54 59 50 45 53 22 29 3b KA_ATTR_TYPES"); 3f30: 0a 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 ...case CKA_TRUS 3f40: 54 45 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 TED:....return(" 3f50: 43 4b 41 5f 54 52 55 53 54 45 44 22 29 3b 0a 09 CKA_TRUSTED");.. 3f60: 09 63 61 73 65 20 43 4b 41 5f 4b 45 59 5f 54 59 .case CKA_KEY_TY 3f70: 50 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 PE:....return("C 3f80: 4b 41 5f 4b 45 59 5f 54 59 50 45 22 29 3b 0a 09 KA_KEY_TYPE");.. 3f90: 09 63 61 73 65 20 43 4b 41 5f 53 55 42 4a 45 43 .case CKA_SUBJEC 3fa0: 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b T:....return("CK 3fb0: 41 5f 53 55 42 4a 45 43 54 22 29 3b 0a 09 09 63 A_SUBJECT");...c 3fc0: 61 73 65 20 43 4b 41 5f 49 44 3a 0a 09 09 09 72 ase CKA_ID:....r 3fd0: 65 74 75 72 6e 28 22 43 4b 41 5f 49 44 22 29 3b eturn("CKA_ID"); 3fe0: 0a 09 09 63 61 73 65 20 43 4b 41 5f 53 45 4e 53 ...case CKA_SENS 3ff0: 49 54 49 56 45 3a 0a 09 09 09 72 65 74 75 72 6e ITIVE:....return 4000: 28 22 43 4b 41 5f 53 45 4e 53 49 54 49 56 45 22 ("CKA_SENSITIVE" 4010: 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 45 4e );...case CKA_EN 4020: 43 52 59 50 54 3a 0a 09 09 09 72 65 74 75 72 6e CRYPT:....return 4030: 28 22 43 4b 41 5f 45 4e 43 52 59 50 54 22 29 3b ("CKA_ENCRYPT"); 4040: 0a 09 09 63 61 73 65 20 43 4b 41 5f 44 45 43 52 ...case CKA_DECR 4050: 59 50 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 YPT:....return(" 4060: 43 4b 41 5f 44 45 43 52 59 50 54 22 29 3b 0a 09 CKA_DECRYPT");.. 4070: 09 63 61 73 65 20 43 4b 41 5f 57 52 41 50 3a 0a .case CKA_WRAP:. 4080: 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 57 ...return("CKA_W 4090: 52 41 50 22 29 3b 0a 09 09 63 61 73 65 20 43 4b RAP");...case CK 40a0: 41 5f 55 4e 57 52 41 50 3a 0a 09 09 09 72 65 74 A_UNWRAP:....ret 40b0: 75 72 6e 28 22 43 4b 41 5f 55 4e 57 52 41 50 22 urn("CKA_UNWRAP" 40c0: 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 53 49 );...case CKA_SI 40d0: 47 4e 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 GN:....return("C 40e0: 4b 41 5f 53 49 47 4e 22 29 3b 0a 09 09 63 61 73 KA_SIGN");...cas 40f0: 65 20 43 4b 41 5f 53 49 47 4e 5f 52 45 43 4f 56 e CKA_SIGN_RECOV 4100: 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 ER:....return("C 4110: 4b 41 5f 53 49 47 4e 5f 52 45 43 4f 56 45 52 22 KA_SIGN_RECOVER" 4120: 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 56 45 );...case CKA_VE 4130: 52 49 46 59 3a 0a 09 09 09 72 65 74 75 72 6e 28 RIFY:....return( 4140: 22 43 4b 41 5f 56 45 52 49 46 59 22 29 3b 0a 09 "CKA_VERIFY");.. 4150: 09 63 61 73 65 20 43 4b 41 5f 56 45 52 49 46 59 .case CKA_VERIFY 4160: 5f 52 45 43 4f 56 45 52 3a 0a 09 09 09 72 65 74 _RECOVER:....ret 4170: 75 72 6e 28 22 43 4b 41 5f 56 45 52 49 46 59 5f urn("CKA_VERIFY_ 4180: 52 45 43 4f 56 45 52 22 29 3b 0a 09 09 63 61 73 RECOVER");...cas 4190: 65 20 43 4b 41 5f 44 45 52 49 56 45 3a 0a 09 09 e CKA_DERIVE:... 41a0: 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 44 45 52 .return("CKA_DER 41b0: 49 56 45 22 29 3b 0a 09 09 63 61 73 65 20 43 4b IVE");...case CK 41c0: 41 5f 53 54 41 52 54 5f 44 41 54 45 3a 0a 09 09 A_START_DATE:... 41d0: 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 53 54 41 .return("CKA_STA 41e0: 52 54 5f 44 41 54 45 22 29 3b 0a 09 09 63 61 73 RT_DATE");...cas 41f0: 65 20 43 4b 41 5f 45 4e 44 5f 44 41 54 45 3a 0a e CKA_END_DATE:. 4200: 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 45 ...return("CKA_E 4210: 4e 44 5f 44 41 54 45 22 29 3b 0a 09 09 63 61 73 ND_DATE");...cas 4220: 65 20 43 4b 41 5f 4d 4f 44 55 4c 55 53 3a 0a 09 e CKA_MODULUS:.. 4230: 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 4d 4f ..return("CKA_MO 4240: 44 55 4c 55 53 22 29 3b 0a 09 09 63 61 73 65 20 DULUS");...case 4250: 43 4b 41 5f 4d 4f 44 55 4c 55 53 5f 42 49 54 53 CKA_MODULUS_BITS 4260: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 :....return("CKA 4270: 5f 4d 4f 44 55 4c 55 53 5f 42 49 54 53 22 29 3b _MODULUS_BITS"); 4280: 0a 09 09 63 61 73 65 20 43 4b 41 5f 50 55 42 4c ...case CKA_PUBL 4290: 49 43 5f 45 58 50 4f 4e 45 4e 54 3a 0a 09 09 09 IC_EXPONENT:.... 42a0: 72 65 74 75 72 6e 28 22 43 4b 41 5f 50 55 42 4c return("CKA_PUBL 42b0: 49 43 5f 45 58 50 4f 4e 45 4e 54 22 29 3b 0a 09 IC_EXPONENT");.. 42c0: 09 63 61 73 65 20 43 4b 41 5f 50 52 49 56 41 54 .case CKA_PRIVAT 42d0: 45 5f 45 58 50 4f 4e 45 4e 54 3a 0a 09 09 09 72 E_EXPONENT:....r 42e0: 65 74 75 72 6e 28 22 43 4b 41 5f 50 52 49 56 41 eturn("CKA_PRIVA 42f0: 54 45 5f 45 58 50 4f 4e 45 4e 54 22 29 3b 0a 09 TE_EXPONENT");.. 4300: 09 63 61 73 65 20 43 4b 41 5f 50 52 49 4d 45 5f .case CKA_PRIME_ 4310: 31 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 1:....return("CK 4320: 41 5f 50 52 49 4d 45 5f 31 22 29 3b 0a 09 09 63 A_PRIME_1");...c 4330: 61 73 65 20 43 4b 41 5f 50 52 49 4d 45 5f 32 3a ase CKA_PRIME_2: 4340: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f ....return("CKA_ 4350: 50 52 49 4d 45 5f 32 22 29 3b 0a 09 09 63 61 73 PRIME_2");...cas 4360: 65 20 43 4b 41 5f 45 58 50 4f 4e 45 4e 54 5f 31 e CKA_EXPONENT_1 4370: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 :....return("CKA 4380: 5f 45 58 50 4f 4e 45 4e 54 5f 31 22 29 3b 0a 09 _EXPONENT_1");.. 4390: 09 63 61 73 65 20 43 4b 41 5f 45 58 50 4f 4e 45 .case CKA_EXPONE 43a0: 4e 54 5f 32 3a 0a 09 09 09 72 65 74 75 72 6e 28 NT_2:....return( 43b0: 22 43 4b 41 5f 45 58 50 4f 4e 45 4e 54 5f 32 22 "CKA_EXPONENT_2" 43c0: 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 43 4f );...case CKA_CO 43d0: 45 46 46 49 43 49 45 4e 54 3a 0a 09 09 09 72 65 EFFICIENT:....re 43e0: 74 75 72 6e 28 22 43 4b 41 5f 43 4f 45 46 46 49 turn("CKA_COEFFI 43f0: 43 49 45 4e 54 22 29 3b 0a 09 09 63 61 73 65 20 CIENT");...case 4400: 43 4b 41 5f 50 52 49 4d 45 3a 0a 09 09 09 72 65 CKA_PRIME:....re 4410: 74 75 72 6e 28 22 43 4b 41 5f 50 52 49 4d 45 22 turn("CKA_PRIME" 4420: 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 53 55 );...case CKA_SU 4430: 42 50 52 49 4d 45 3a 0a 09 09 09 72 65 74 75 72 BPRIME:....retur 4440: 6e 28 22 43 4b 41 5f 53 55 42 50 52 49 4d 45 22 n("CKA_SUBPRIME" 4450: 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 42 41 );...case CKA_BA 4460: 53 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 SE:....return("C 4470: 4b 41 5f 42 41 53 45 22 29 3b 0a 09 09 63 61 73 KA_BASE");...cas 4480: 65 20 43 4b 41 5f 50 52 49 4d 45 5f 42 49 54 53 e CKA_PRIME_BITS 4490: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 :....return("CKA 44a0: 5f 50 52 49 4d 45 5f 42 49 54 53 22 29 3b 0a 09 _PRIME_BITS");.. 44b0: 09 63 61 73 65 20 43 4b 41 5f 53 55 42 5f 50 52 .case CKA_SUB_PR 44c0: 49 4d 45 5f 42 49 54 53 3a 0a 09 09 09 72 65 74 IME_BITS:....ret 44d0: 75 72 6e 28 22 43 4b 41 5f 53 55 42 5f 50 52 49 urn("CKA_SUB_PRI 44e0: 4d 45 5f 42 49 54 53 22 29 3b 0a 09 09 63 61 73 ME_BITS");...cas 44f0: 65 20 43 4b 41 5f 56 41 4c 55 45 5f 42 49 54 53 e CKA_VALUE_BITS 4500: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 :....return("CKA 4510: 5f 56 41 4c 55 45 5f 42 49 54 53 22 29 3b 0a 09 _VALUE_BITS");.. 4520: 09 63 61 73 65 20 43 4b 41 5f 56 41 4c 55 45 5f .case CKA_VALUE_ 4530: 4c 45 4e 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 LEN:....return(" 4540: 43 4b 41 5f 56 41 4c 55 45 5f 4c 45 4e 22 29 3b CKA_VALUE_LEN"); 4550: 0a 09 09 63 61 73 65 20 43 4b 41 5f 45 58 54 52 ...case CKA_EXTR 4560: 41 43 54 41 42 4c 45 3a 0a 09 09 09 72 65 74 75 ACTABLE:....retu 4570: 72 6e 28 22 43 4b 41 5f 45 58 54 52 41 43 54 41 rn("CKA_EXTRACTA 4580: 42 4c 45 22 29 3b 0a 09 09 63 61 73 65 20 43 4b BLE");...case CK 4590: 41 5f 4c 4f 43 41 4c 3a 0a 09 09 09 72 65 74 75 A_LOCAL:....retu 45a0: 72 6e 28 22 43 4b 41 5f 4c 4f 43 41 4c 22 29 3b rn("CKA_LOCAL"); 45b0: 0a 09 09 63 61 73 65 20 43 4b 41 5f 4e 45 56 45 ...case CKA_NEVE 45c0: 52 5f 45 58 54 52 41 43 54 41 42 4c 45 3a 0a 09 R_EXTRACTABLE:.. 45d0: 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 4e 45 ..return("CKA_NE 45e0: 56 45 52 5f 45 58 54 52 41 43 54 41 42 4c 45 22 VER_EXTRACTABLE" 45f0: 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 41 4c );...case CKA_AL 4600: 57 41 59 53 5f 53 45 4e 53 49 54 49 56 45 3a 0a WAYS_SENSITIVE:. 4610: 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 41 ...return("CKA_A 4620: 4c 57 41 59 53 5f 53 45 4e 53 49 54 49 56 45 22 LWAYS_SENSITIVE" 4630: 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 4b 45 );...case CKA_KE 4640: 59 5f 47 45 4e 5f 4d 45 43 48 41 4e 49 53 4d 3a Y_GEN_MECHANISM: 4650: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f ....return("CKA_ 4660: 4b 45 59 5f 47 45 4e 5f 4d 45 43 48 41 4e 49 53 KEY_GEN_MECHANIS 4670: 4d 22 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f M");...case CKA_ 4680: 4d 4f 44 49 46 49 41 42 4c 45 3a 0a 09 09 09 72 MODIFIABLE:....r 4690: 65 74 75 72 6e 28 22 43 4b 41 5f 4d 4f 44 49 46 eturn("CKA_MODIF 46a0: 49 41 42 4c 45 22 29 3b 0a 09 09 63 61 73 65 20 IABLE");...case 46b0: 43 4b 41 5f 45 43 44 53 41 5f 50 41 52 41 4d 53 CKA_ECDSA_PARAMS 46c0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 :....return("CKA 46d0: 5f 45 43 44 53 41 5f 50 41 52 41 4d 53 22 29 3b _ECDSA_PARAMS"); 46e0: 0a 09 09 63 61 73 65 20 43 4b 41 5f 45 43 5f 50 ...case CKA_EC_P 46f0: 4f 49 4e 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 OINT:....return( 4700: 22 43 4b 41 5f 45 43 5f 50 4f 49 4e 54 22 29 3b "CKA_EC_POINT"); 4710: 0a 09 09 63 61 73 65 20 43 4b 41 5f 53 45 43 4f ...case CKA_SECO 4720: 4e 44 41 52 59 5f 41 55 54 48 3a 0a 09 09 09 72 NDARY_AUTH:....r 4730: 65 74 75 72 6e 28 22 43 4b 41 5f 53 45 43 4f 4e eturn("CKA_SECON 4740: 44 41 52 59 5f 41 55 54 48 22 29 3b 0a 09 09 63 DARY_AUTH");...c 4750: 61 73 65 20 43 4b 41 5f 41 55 54 48 5f 50 49 4e ase CKA_AUTH_PIN 4760: 5f 46 4c 41 47 53 3a 0a 09 09 09 72 65 74 75 72 _FLAGS:....retur 4770: 6e 28 22 43 4b 41 5f 41 55 54 48 5f 50 49 4e 5f n("CKA_AUTH_PIN_ 4780: 46 4c 41 47 53 22 29 3b 0a 09 09 63 61 73 65 20 FLAGS");...case 4790: 43 4b 41 5f 48 57 5f 46 45 41 54 55 52 45 5f 54 CKA_HW_FEATURE_T 47a0: 59 50 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 YPE:....return(" 47b0: 43 4b 41 5f 48 57 5f 46 45 41 54 55 52 45 5f 54 CKA_HW_FEATURE_T 47c0: 59 50 45 22 29 3b 0a 09 09 63 61 73 65 20 43 4b YPE");...case CK 47d0: 41 5f 52 45 53 45 54 5f 4f 4e 5f 49 4e 49 54 3a A_RESET_ON_INIT: 47e0: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f ....return("CKA_ 47f0: 52 45 53 45 54 5f 4f 4e 5f 49 4e 49 54 22 29 3b RESET_ON_INIT"); 4800: 0a 09 09 63 61 73 65 20 43 4b 41 5f 48 41 53 5f ...case CKA_HAS_ 4810: 52 45 53 45 54 3a 0a 09 09 09 72 65 74 75 72 6e RESET:....return 4820: 28 22 43 4b 41 5f 48 41 53 5f 52 45 53 45 54 22 ("CKA_HAS_RESET" 4830: 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 56 45 );...case CKA_VE 4840: 4e 44 4f 52 5f 44 45 46 49 4e 45 44 3a 0a 09 09 NDOR_DEFINED:... 4850: 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 56 45 4e .return("CKA_VEN 4860: 44 4f 52 5f 44 45 46 49 4e 45 44 22 29 3b 0a 09 DOR_DEFINED");.. 4870: 7d 0a 0a 09 72 65 74 75 72 6e 28 22 55 4e 4b 4e }...return("UNKN 4880: 4f 57 4e 22 29 3b 0a 7d 0a 0a 23 20 20 64 65 66 OWN");.}..# def 4890: 69 6e 65 20 6d 61 6c 6c 6f 63 28 78 29 20 43 41 ine malloc(x) CA 48a0: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 48b0: 4d 41 4c 4c 4f 43 28 78 2c 20 5f 5f 66 75 6e 63 MALLOC(x, __func 48c0: 5f 5f 2c 20 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 __, __LINE__).# 48d0: 20 64 65 66 69 6e 65 20 72 65 61 6c 6c 6f 63 28 define realloc( 48e0: 78 2c 20 79 29 20 43 41 43 4b 45 59 5f 44 45 42 x, y) CACKEY_DEB 48f0: 55 47 5f 46 55 4e 43 5f 52 45 41 4c 4c 4f 43 28 UG_FUNC_REALLOC( 4900: 78 2c 20 79 2c 20 5f 5f 66 75 6e 63 5f 5f 2c 20 x, y, __func__, 4910: 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 20 69 66 64 __LINE__).# ifd 4920: 65 66 20 73 74 72 64 75 70 0a 23 20 20 20 20 75 ef strdup.# u 4930: 6e 64 65 66 20 73 74 72 64 75 70 0a 23 20 20 65 ndef strdup.# e 4940: 6e 64 69 66 0a 23 20 20 64 65 66 69 6e 65 20 73 ndif.# define s 4950: 74 72 64 75 70 28 78 29 20 43 41 43 4b 45 59 5f trdup(x) CACKEY_ 4960: 44 45 42 55 47 5f 46 55 4e 43 5f 53 54 52 44 55 DEBUG_FUNC_STRDU 4970: 50 28 78 2c 20 5f 5f 66 75 6e 63 5f 5f 2c 20 5f P(x, __func__, _ 4980: 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6c 73 65 0a 23 _LINE__).#else.# 4990: 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f define CACKEY_ 49a0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 78 2e 2e DEBUG_PRINTF(x.. 49b0: 2e 29 20 2f 2a 2a 2f 0a 23 20 20 64 65 66 69 6e .) /**/.# defin 49c0: 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 e CACKEY_DEBUG_P 49d0: 52 49 4e 54 42 55 46 28 66 2c 20 78 2c 20 79 29 RINTBUF(f, x, y) 49e0: 20 2f 2a 2a 2f 0a 23 20 20 64 65 66 69 6e 65 20 /**/.# define 49f0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 45 52 CACKEY_DEBUG_PER 4a00: 52 4f 52 28 78 29 20 2f 2a 2a 2f 0a 23 20 20 64 ROR(x) /**/.# d 4a10: 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 efine CACKEY_DEB 4a20: 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54 4f 5f 53 UG_FUNC_TAG_TO_S 4a30: 54 52 28 78 29 20 22 44 45 42 55 47 5f 44 49 53 TR(x) "DEBUG_DIS 4a40: 41 42 4c 45 44 22 0a 23 20 20 64 65 66 69 6e 65 ABLED".# define 4a50: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 CACKEY_DEBUG_FU 4a60: 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 NC_SCARDERR_TO_S 4a70: 54 52 28 78 29 20 22 44 45 42 55 47 5f 44 49 53 TR(x) "DEBUG_DIS 4a80: 41 42 4c 45 44 22 0a 23 20 20 64 65 66 69 6e 65 ABLED".# define 4a90: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 CACKEY_DEBUG_FU 4aa0: 4e 43 5f 4f 42 4a 49 44 5f 54 4f 5f 53 54 52 28 NC_OBJID_TO_STR( 4ab0: 78 29 20 22 44 45 42 55 47 5f 44 49 53 41 42 4c x) "DEBUG_DISABL 4ac0: 45 44 22 0a 23 20 20 64 65 66 69 6e 65 20 43 41 ED".# define CA 4ad0: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 4ae0: 41 50 50 54 59 50 45 5f 54 4f 5f 53 54 52 28 78 APPTYPE_TO_STR(x 4af0: 29 20 22 44 45 42 55 47 5f 44 49 53 41 42 4c 45 ) "DEBUG_DISABLE 4b00: 44 22 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 D".# define CAC 4b10: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 41 KEY_DEBUG_FUNC_A 4b20: 54 54 52 49 42 55 54 45 5f 54 4f 5f 53 54 52 28 TTRIBUTE_TO_STR( 4b30: 78 29 20 22 44 45 42 55 47 5f 44 49 53 41 42 4c x) "DEBUG_DISABL 4b40: 45 44 22 0a 23 65 6e 64 69 66 0a 0a 73 74 72 75 ED".#endif..stru 4b50: 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 ct cackey_pcsc_i 4b60: 64 65 6e 74 69 74 79 20 7b 0a 09 75 6e 73 69 67 dentity {..unsig 4b70: 6e 65 64 20 63 68 61 72 20 61 70 70 6c 65 74 5b ned char applet[ 4b80: 37 5d 3b 0a 09 75 69 6e 74 31 36 5f 74 20 66 69 7];..uint16_t fi 4b90: 6c 65 3b 0a 0a 09 73 69 7a 65 5f 74 20 63 65 72 le;...size_t cer 4ba0: 74 69 66 69 63 61 74 65 5f 6c 65 6e 3b 0a 09 75 tificate_len;..u 4bb0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 63 65 nsigned char *ce 4bc0: 72 74 69 66 69 63 61 74 65 3b 0a 0a 09 73 73 69 rtificate;...ssi 4bd0: 7a 65 5f 74 20 6b 65 79 73 69 7a 65 3b 0a 7d 3b ze_t keysize;.}; 4be0: 0a 0a 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f ..struct cackey_ 4bf0: 69 64 65 6e 74 69 74 79 20 7b 0a 09 73 74 72 75 identity {..stru 4c00: 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 ct cackey_pcsc_i 4c10: 64 65 6e 74 69 74 79 20 2a 70 63 73 63 5f 69 64 dentity *pcsc_id 4c20: 65 6e 74 69 74 79 3b 0a 0a 09 43 4b 5f 41 54 54 entity;...CK_ATT 4c30: 52 49 42 55 54 45 20 2a 61 74 74 72 69 62 75 74 RIBUTE *attribut 4c40: 65 73 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 61 74 es;..CK_ULONG at 4c50: 74 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 3b 0a tributes_count;. 4c60: 7d 3b 0a 0a 73 74 72 75 63 74 20 63 61 63 6b 65 };..struct cacke 4c70: 79 5f 73 65 73 73 69 6f 6e 20 7b 0a 09 69 6e 74 y_session {..int 4c80: 20 61 63 74 69 76 65 3b 0a 0a 09 43 4b 5f 53 4c active;...CK_SL 4c90: 4f 54 5f 49 44 20 73 6c 6f 74 49 44 3b 0a 0a 09 OT_ID slotID;... 4ca0: 43 4b 5f 53 54 41 54 45 20 73 74 61 74 65 3b 0a CK_STATE state;. 4cb0: 09 43 4b 5f 46 4c 41 47 53 20 66 6c 61 67 73 3b .CK_FLAGS flags; 4cc0: 0a 09 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 65 76 ..CK_ULONG ulDev 4cd0: 69 63 65 45 72 72 6f 72 3b 0a 09 43 4b 5f 56 4f iceError;..CK_VO 4ce0: 49 44 5f 50 54 52 20 70 41 70 70 6c 69 63 61 74 ID_PTR pApplicat 4cf0: 69 6f 6e 3b 0a 09 43 4b 5f 4e 4f 54 49 46 59 20 ion;..CK_NOTIFY 4d00: 4e 6f 74 69 66 79 3b 0a 0a 09 73 74 72 75 63 74 Notify;...struct 4d10: 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 cackey_identity 4d20: 20 2a 69 64 65 6e 74 69 74 69 65 73 3b 0a 09 75 *identities;..u 4d30: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 65 nsigned long ide 4d40: 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 3b 0a 0a ntities_count;.. 4d50: 09 69 6e 74 20 73 65 61 72 63 68 5f 61 63 74 69 .int search_acti 4d60: 76 65 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 ve;..CK_ATTRIBUT 4d70: 45 5f 50 54 52 20 73 65 61 72 63 68 5f 71 75 65 E_PTR search_que 4d80: 72 79 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 73 65 ry;..CK_ULONG se 4d90: 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 arch_query_count 4da0: 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ;..unsigned long 4db0: 20 73 65 61 72 63 68 5f 63 75 72 72 5f 69 64 3b search_curr_id; 4dc0: 0a 0a 09 69 6e 74 20 73 69 67 6e 5f 61 63 74 69 ...int sign_acti 4dd0: 76 65 3b 0a 09 43 4b 5f 4d 45 43 48 41 4e 49 53 ve;..CK_MECHANIS 4de0: 4d 5f 54 59 50 45 20 73 69 67 6e 5f 6d 65 63 68 M_TYPE sign_mech 4df0: 61 6e 69 73 6d 3b 0a 09 43 4b 5f 42 59 54 45 5f anism;..CK_BYTE_ 4e00: 50 54 52 20 73 69 67 6e 5f 62 75 66 3b 0a 09 75 PTR sign_buf;..u 4e10: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 73 69 67 nsigned long sig 4e20: 6e 5f 62 75 66 6c 65 6e 3b 0a 09 75 6e 73 69 67 n_buflen;..unsig 4e30: 6e 65 64 20 6c 6f 6e 67 20 73 69 67 6e 5f 62 75 ned long sign_bu 4e40: 66 75 73 65 64 3b 0a 09 73 74 72 75 63 74 20 63 fused;..struct c 4e50: 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 2a ackey_identity * 4e60: 73 69 67 6e 5f 69 64 65 6e 74 69 74 79 3b 0a 0a sign_identity;.. 4e70: 09 69 6e 74 20 64 65 63 72 79 70 74 5f 61 63 74 .int decrypt_act 4e80: 69 76 65 3b 0a 09 43 4b 5f 4d 45 43 48 41 4e 49 ive;..CK_MECHANI 4e90: 53 4d 5f 54 59 50 45 20 64 65 63 72 79 70 74 5f SM_TYPE decrypt_ 4ea0: 6d 65 63 68 61 6e 69 73 6d 3b 0a 09 43 4b 5f 56 mechanism;..CK_V 4eb0: 4f 49 44 5f 50 54 52 20 64 65 63 72 79 70 74 5f OID_PTR decrypt_ 4ec0: 6d 65 63 68 5f 70 61 72 6d 3b 0a 09 43 4b 5f 55 mech_parm;..CK_U 4ed0: 4c 4f 4e 47 20 64 65 63 72 79 70 74 5f 6d 65 63 LONG decrypt_mec 4ee0: 68 5f 70 61 72 6d 6c 65 6e 3b 0a 09 73 74 72 75 h_parmlen;..stru 4ef0: 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 ct cackey_identi 4f00: 74 79 20 2a 64 65 63 72 79 70 74 5f 69 64 65 6e ty *decrypt_iden 4f10: 74 69 74 79 3b 0a 7d 3b 0a 0a 73 74 72 75 63 74 tity;.};..struct 4f20: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 7b 0a 09 cackey_slot {.. 4f30: 69 6e 74 20 61 63 74 69 76 65 3b 0a 09 69 6e 74 int active;..int 4f40: 20 69 6e 74 65 72 6e 61 6c 3b 0a 0a 09 63 68 61 internal;...cha 4f50: 72 20 2a 70 63 73 63 5f 72 65 61 64 65 72 3b 0a r *pcsc_reader;. 4f60: 0a 09 69 6e 74 20 70 63 73 63 5f 63 61 72 64 5f ..int pcsc_card_ 4f70: 63 6f 6e 6e 65 63 74 65 64 3b 0a 09 53 43 41 52 connected;..SCAR 4f80: 44 48 41 4e 44 4c 45 20 70 63 73 63 5f 63 61 72 DHANDLE pcsc_car 4f90: 64 3b 0a 0a 09 69 6e 74 20 74 72 61 6e 73 61 63 d;...int transac 4fa0: 74 69 6f 6e 5f 64 65 70 74 68 3b 0a 09 69 6e 74 tion_depth;..int 4fb0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 5f 6e 65 65 transaction_nee 4fc0: 64 5f 68 77 5f 6c 6f 63 6b 3b 0a 0a 09 69 6e 74 d_hw_lock;...int 4fd0: 20 73 6c 6f 74 5f 72 65 73 65 74 3b 0a 0a 09 43 slot_reset;...C 4fe0: 4b 5f 46 4c 41 47 53 20 74 6f 6b 65 6e 5f 66 6c K_FLAGS token_fl 4ff0: 61 67 73 3b 0a 0a 09 75 6e 73 69 67 6e 65 64 20 ags;...unsigned 5000: 63 68 61 72 20 2a 6c 61 62 65 6c 3b 0a 0a 09 44 char *label;...D 5010: 57 4f 52 44 20 70 72 6f 74 6f 63 6f 6c 3b 0a 0a WORD protocol;.. 5020: 09 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 63 61 .unsigned int ca 5030: 63 68 65 64 5f 63 65 72 74 73 5f 63 6f 75 6e 74 ched_certs_count 5040: 3b 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 ;..struct cackey 5050: 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 2a _pcsc_identity * 5060: 63 61 63 68 65 64 5f 63 65 72 74 73 3b 0a 7d 3b cached_certs;.}; 5070: 0a 0a 74 79 70 65 64 65 66 20 65 6e 75 6d 20 7b ..typedef enum { 5080: 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 ..CACKEY_TLV_APP 5090: 5f 47 45 4e 45 52 49 43 20 3d 20 30 78 30 31 2c _GENERIC = 0x01, 50a0: 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 ..CACKEY_TLV_APP 50b0: 5f 53 4b 49 20 20 20 20 20 3d 20 30 78 30 32 2c _SKI = 0x02, 50c0: 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 ..CACKEY_TLV_APP 50d0: 5f 50 4b 49 20 20 20 20 20 3d 20 30 78 30 34 0a _PKI = 0x04. 50e0: 7d 20 63 61 63 6b 65 79 5f 74 6c 76 5f 61 70 70 } cackey_tlv_app 50f0: 74 79 70 65 3b 0a 0a 74 79 70 65 64 65 66 20 65 type;..typedef e 5100: 6e 75 6d 20 7b 0a 09 43 41 43 4b 45 59 5f 54 4c num {..CACKEY_TL 5110: 56 5f 4f 42 4a 49 44 5f 47 45 4e 45 52 41 4c 49 V_OBJID_GENERALI 5120: 4e 46 4f 20 20 20 20 20 20 20 3d 20 30 78 32 30 NFO = 0x20 5130: 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 00,..CACKEY_TLV_ 5140: 4f 42 4a 49 44 5f 50 52 4f 50 45 52 53 4f 4e 41 OBJID_PROPERSONA 5150: 4c 49 4e 46 4f 20 20 20 3d 20 30 78 32 31 30 30 LINFO = 0x2100 5160: 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 ,..CACKEY_TLV_OB 5170: 4a 49 44 5f 41 43 43 45 53 53 43 4f 4e 54 52 4f JID_ACCESSCONTRO 5180: 4c 20 20 20 20 20 3d 20 30 78 33 30 30 30 2c 0a L = 0x3000,. 5190: 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 .CACKEY_TLV_OBJI 51a0: 44 5f 4c 4f 47 49 4e 20 20 20 20 20 20 20 20 20 D_LOGIN 51b0: 20 20 20 20 3d 20 30 78 34 30 30 30 2c 0a 09 43 = 0x4000,..C 51c0: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 51d0: 43 41 52 44 49 4e 46 4f 20 20 20 20 20 20 20 20 CARDINFO 51e0: 20 20 3d 20 30 78 35 30 30 30 2c 0a 09 43 41 43 = 0x5000,..CAC 51f0: 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 42 49 KEY_TLV_OBJID_BI 5200: 4f 4d 45 54 52 49 43 53 20 20 20 20 20 20 20 20 OMETRICS 5210: 3d 20 30 78 36 30 30 30 2c 0a 09 43 41 43 4b 45 = 0x6000,..CACKE 5220: 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 44 49 47 49 Y_TLV_OBJID_DIGI 5230: 54 41 4c 53 49 47 43 45 52 54 20 20 20 20 3d 20 TALSIGCERT = 5240: 30 78 37 30 30 30 2c 0a 09 43 41 43 4b 45 59 5f 0x7000,..CACKEY_ 5250: 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 45 TLV_OBJID_CAC_PE 5260: 52 53 4f 4e 20 20 20 20 20 20 20 20 3d 20 30 78 RSON = 0x 5270: 30 32 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 0200,..CACKEY_TL 5280: 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 42 45 4e 45 V_OBJID_CAC_BENE 5290: 46 49 54 53 20 20 20 20 20 20 3d 20 30 78 30 32 FITS = 0x02 52a0: 30 32 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 02,..CACKEY_TLV_ 52b0: 4f 42 4a 49 44 5f 43 41 43 5f 4f 54 48 45 52 42 OBJID_CAC_OTHERB 52c0: 45 4e 45 46 49 54 53 20 3d 20 30 78 30 32 30 33 ENEFITS = 0x0203 52d0: 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 ,..CACKEY_TLV_OB 52e0: 4a 49 44 5f 43 41 43 5f 50 45 52 53 4f 4e 4e 45 JID_CAC_PERSONNE 52f0: 4c 20 20 20 20 20 3d 20 30 78 30 32 30 31 2c 0a L = 0x0201,. 5300: 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 .CACKEY_TLV_OBJI 5310: 44 5f 43 41 43 5f 50 4b 49 43 45 52 54 20 20 20 D_CAC_PKICERT 5320: 20 20 20 20 3d 20 30 78 30 32 46 45 0a 7d 20 63 = 0x02FE.} c 5330: 61 63 6b 65 79 5f 74 6c 76 5f 6f 62 6a 65 63 74 ackey_tlv_object 5340: 69 64 3b 0a 0a 74 79 70 65 64 65 66 20 65 6e 75 id;..typedef enu 5350: 6d 20 7b 0a 09 43 41 43 4b 45 59 5f 50 43 53 43 m {..CACKEY_PCSC 5360: 5f 53 5f 54 4f 4b 45 4e 50 52 45 53 45 4e 54 20 _S_TOKENPRESENT 5370: 20 20 20 3d 20 31 2c 0a 09 43 41 43 4b 45 59 5f = 1,..CACKEY_ 5380: 50 43 53 43 5f 53 5f 4f 4b 20 20 20 20 20 20 20 PCSC_S_OK 5390: 20 20 20 20 20 20 20 3d 20 30 2c 0a 09 43 41 43 = 0,..CAC 53a0: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 53b0: 49 43 20 20 20 20 20 20 20 20 20 3d 20 2d 31 2c IC = -1, 53c0: 0a 09 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f ..CACKEY_PCSC_E_ 53d0: 42 41 44 50 49 4e 20 20 20 20 20 20 20 20 20 20 BADPIN 53e0: 3d 20 2d 32 2c 0a 09 43 41 43 4b 45 59 5f 50 43 = -2,..CACKEY_PC 53f0: 53 43 5f 45 5f 4c 4f 43 4b 45 44 20 20 20 20 20 SC_E_LOCKED 5400: 20 20 20 20 20 3d 20 2d 33 2c 0a 09 43 41 43 4b = -3,..CACK 5410: 45 59 5f 50 43 53 43 5f 45 5f 4e 45 45 44 4c 4f EY_PCSC_E_NEEDLO 5420: 47 49 4e 20 20 20 20 20 20 20 3d 20 2d 34 2c 0a GIN = -4,. 5430: 09 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 .CACKEY_PCSC_E_T 5440: 4f 4b 45 4e 41 42 53 45 4e 54 20 20 20 20 20 3d OKENABSENT = 5450: 20 2d 36 2c 0a 09 43 41 43 4b 45 59 5f 50 43 53 -6,..CACKEY_PCS 5460: 43 5f 45 5f 52 45 54 52 59 20 20 20 20 20 20 20 C_E_RETRY 5470: 20 20 20 20 3d 20 2d 37 0a 7d 20 63 61 63 6b 65 = -7.} cacke 5480: 79 5f 72 65 74 3b 0a 0a 73 74 72 75 63 74 20 63 y_ret;..struct c 5490: 61 63 6b 65 79 5f 74 6c 76 5f 63 61 72 64 75 72 ackey_tlv_cardur 54a0: 6c 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 l {..unsigned ch 54b0: 61 72 20 20 20 20 20 20 20 20 72 69 64 5b 35 5d ar rid[5] 54c0: 3b 0a 09 63 61 63 6b 65 79 5f 74 6c 76 5f 61 70 ;..cackey_tlv_ap 54d0: 70 74 79 70 65 20 20 20 61 70 70 74 79 70 65 3b ptype apptype; 54e0: 0a 09 63 61 63 6b 65 79 5f 74 6c 76 5f 6f 62 6a ..cackey_tlv_obj 54f0: 65 63 74 69 64 20 20 6f 62 6a 65 63 74 69 64 3b ectid objectid; 5500: 0a 09 63 61 63 6b 65 79 5f 74 6c 76 5f 6f 62 6a ..cackey_tlv_obj 5510: 65 63 74 69 64 20 20 61 70 70 69 64 3b 0a 09 75 ectid appid;..u 5520: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 20 20 20 nsigned char 5530: 20 20 20 20 70 69 6e 69 64 3b 0a 7d 3b 0a 0a 73 pinid;.};..s 5540: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 truct cackey_tlv 5550: 5f 65 6e 74 69 74 79 3b 0a 73 74 72 75 63 74 20 _entity;.struct 5560: 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 cackey_tlv_entit 5570: 79 20 7b 0a 09 75 69 6e 74 38 5f 74 20 74 61 67 y {..uint8_t tag 5580: 3b 0a 09 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 ;..size_t length 5590: 3b 0a 0a 09 75 6e 69 6f 6e 20 7b 0a 09 09 76 6f ;...union {...vo 55a0: 69 64 20 2a 76 61 6c 75 65 3b 0a 09 09 73 74 72 id *value;...str 55b0: 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 63 uct cackey_tlv_c 55c0: 61 72 64 75 72 6c 20 2a 76 61 6c 75 65 5f 63 61 ardurl *value_ca 55d0: 72 64 75 72 6c 3b 0a 09 09 75 69 6e 74 38 5f 74 rdurl;...uint8_t 55e0: 20 76 61 6c 75 65 5f 62 79 74 65 3b 0a 09 7d 3b value_byte;..}; 55f0: 0a 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 ...struct cackey 5600: 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a 5f 6e 65 _tlv_entity *_ne 5610: 78 74 3b 0a 7d 3b 0a 0a 2f 2a 20 43 41 43 4b 45 xt;.};../* CACKE 5620: 59 20 47 6c 6f 62 61 6c 20 48 61 6e 64 6c 65 73 Y Global Handles 5630: 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 */.static void 5640: 2a 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 20 *cackey_biglock 5650: 3d 20 4e 55 4c 4c 3b 0a 73 74 61 74 69 63 20 73 = NULL;.static s 5660: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 65 73 truct cackey_ses 5670: 73 69 6f 6e 20 63 61 63 6b 65 79 5f 73 65 73 73 sion cackey_sess 5680: 69 6f 6e 73 5b 31 32 38 5d 3b 0a 73 74 61 74 69 ions[128];.stati 5690: 63 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f c struct cackey_ 56a0: 73 6c 6f 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 slot cackey_slot 56b0: 73 5b 31 32 38 5d 3b 0a 73 74 61 74 69 63 20 69 s[128];.static i 56c0: 6e 74 20 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 nt cackey_initia 56d0: 6c 69 7a 65 64 20 3d 20 30 3b 0a 73 74 61 74 69 lized = 0;.stati 56e0: 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 62 69 67 c int cackey_big 56f0: 6c 6f 63 6b 5f 69 6e 69 74 20 3d 20 30 3b 0a 43 lock_init = 0;.C 5700: 4b 5f 43 5f 49 4e 49 54 49 41 4c 49 5a 45 5f 41 K_C_INITIALIZE_A 5710: 52 47 53 20 63 61 63 6b 65 79 5f 61 72 67 73 3b RGS cackey_args; 5720: 0a 0a 2f 2a 2a 20 45 78 74 72 61 20 63 65 72 74 ../** Extra cert 5730: 69 66 69 63 61 74 65 73 20 74 6f 20 69 6e 63 6c ificates to incl 5740: 75 64 65 20 69 6e 20 74 6f 6b 65 6e 20 2a 2a 2f ude in token **/ 5750: 0a 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 70 .struct cackey_p 5760: 63 73 63 5f 69 64 65 6e 74 69 74 79 20 65 78 74 csc_identity ext 5770: 72 61 5f 63 65 72 74 73 5b 5d 20 3d 20 7b 0a 23 ra_certs[] = {.# 5780: 69 6e 63 6c 75 64 65 20 22 63 61 63 6b 65 79 5f include "cackey_ 5790: 62 75 69 6c 74 69 6e 5f 63 65 72 74 73 2e 68 22 builtin_certs.h" 57a0: 0a 7d 3b 0a 0a 2f 2a 20 50 43 53 43 20 47 6c 6f .};../* PCSC Glo 57b0: 62 61 6c 20 48 61 6e 64 6c 65 73 20 2a 2f 0a 73 bal Handles */.s 57c0: 74 61 74 69 63 20 4c 50 53 43 41 52 44 43 4f 4e tatic LPSCARDCON 57d0: 54 45 58 54 20 63 61 63 6b 65 79 5f 70 63 73 63 TEXT cackey_pcsc 57e0: 5f 68 61 6e 64 6c 65 20 3d 20 4e 55 4c 4c 3b 0a _handle = NULL;. 57f0: 0a 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 .static unsigned 5800: 20 6c 6f 6e 67 20 63 61 63 6b 65 79 5f 67 65 74 long cackey_get 5810: 76 65 72 73 69 6f 6e 28 76 6f 69 64 29 20 7b 0a version(void) {. 5820: 09 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 .static unsigned 5830: 20 6c 6f 6e 67 20 72 65 74 76 61 6c 20 3d 20 32 long retval = 2 5840: 35 35 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 55;..unsigned lo 5850: 6e 67 20 6d 61 6a 6f 72 20 3d 20 30 3b 0a 09 75 ng major = 0;..u 5860: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6d 69 6e nsigned long min 5870: 6f 72 20 3d 20 30 3b 0a 09 63 68 61 72 20 2a 6d or = 0;..char *m 5880: 61 6a 6f 72 5f 73 74 72 20 3d 20 4e 55 4c 4c 3b ajor_str = NULL; 5890: 0a 09 63 68 61 72 20 2a 6d 69 6e 6f 72 5f 73 74 ..char *minor_st 58a0: 72 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 43 41 43 4b r = NULL;...CACK 58b0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 58c0: 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 58d0: 20 28 72 65 74 76 61 6c 20 21 3d 20 32 35 35 29 (retval != 255) 58e0: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 58f0: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 5900: 69 6e 67 20 30 78 25 6c 78 20 28 63 61 63 68 65 ing 0x%lx (cache 5910: 64 29 2e 22 2c 20 72 65 74 76 61 6c 29 3b 0a 0a d).", retval);.. 5920: 09 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 ..return(retval) 5930: 3b 0a 09 7d 0a 0a 09 72 65 74 76 61 6c 20 3d 20 ;..}...retval = 5940: 30 3b 0a 0a 23 69 66 64 65 66 20 50 41 43 4b 41 0;..#ifdef PACKA 5950: 47 45 5f 56 45 52 53 49 4f 4e 0a 20 20 20 20 20 GE_VERSION. 5960: 20 20 20 6d 61 6a 6f 72 5f 73 74 72 20 3d 20 50 major_str = P 5970: 41 43 4b 41 47 45 5f 56 45 52 53 49 4f 4e 3b 0a ACKAGE_VERSION;. 5980: 09 69 66 20 28 6d 61 6a 6f 72 5f 73 74 72 29 20 .if (major_str) 5990: 7b 0a 09 20 20 20 20 20 20 20 20 6d 61 6a 6f 72 {.. major 59a0: 20 3d 20 73 74 72 74 6f 75 6c 28 6d 61 6a 6f 72 = strtoul(major 59b0: 5f 73 74 72 2c 20 26 6d 69 6e 6f 72 5f 73 74 72 _str, &minor_str 59c0: 2c 20 31 30 29 3b 0a 0a 09 09 69 66 20 28 6d 69 , 10);....if (mi 59d0: 6e 6f 72 5f 73 74 72 29 20 7b 0a 09 09 09 6d 69 nor_str) {....mi 59e0: 6e 6f 72 20 3d 20 73 74 72 74 6f 75 6c 28 6d 69 nor = strtoul(mi 59f0: 6e 6f 72 5f 73 74 72 20 2b 20 31 2c 20 4e 55 4c nor_str + 1, NUL 5a00: 4c 2c 20 31 30 29 3b 0a 09 09 7d 0a 09 7d 0a 0a L, 10);...}..}.. 5a10: 09 72 65 74 76 61 6c 20 3d 20 28 6d 61 6a 6f 72 .retval = (major 5a20: 20 3c 3c 20 31 36 29 20 7c 20 28 6d 69 6e 6f 72 << 16) | (minor 5a30: 20 3c 3c 20 38 29 3b 0a 23 65 6e 64 69 66 0a 0a << 8);.#endif.. 5a40: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 5a50: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 5a60: 30 78 25 6c 78 22 2c 20 72 65 74 76 61 6c 29 3b 0x%lx", retval); 5a70: 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c ...return(retval 5a80: 29 3b 0a 7d 0a 0a 2f 2a 20 50 43 2f 53 43 20 52 );.}../* PC/SC R 5a90: 65 6c 61 74 65 64 20 46 75 6e 63 74 69 6f 6e 73 elated Functions 5aa0: 20 2a 2f 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 */./*. * SYNPOS 5ab0: 49 53 0a 20 2a 20 20 20 20 20 76 6f 69 64 20 63 IS. * void c 5ac0: 61 63 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 ackey_slots_disc 5ad0: 6f 6e 6e 65 63 74 5f 61 6c 6c 28 76 6f 69 64 29 onnect_all(void) 5ae0: 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 ;. *. * ARGUMENT 5af0: 53 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a S. * None. * 5b00: 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 . * RETURN VALUE 5b10: 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 2a 0a . * None. *. 5b20: 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 * NOTES. * 5b30: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 64 69 This function di 5b40: 73 63 6f 6e 6e 65 63 74 73 20 66 72 6f 6d 20 61 sconnects from a 5b50: 6c 6c 20 63 61 72 64 73 2e 0a 20 2a 0a 20 2a 2f ll cards.. *. */ 5b60: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 61 63 .static void cac 5b70: 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e key_slots_discon 5b80: 6e 65 63 74 5f 61 6c 6c 28 76 6f 69 64 29 20 7b nect_all(void) { 5b90: 0a 09 75 69 6e 74 33 32 5f 74 20 69 64 78 3b 0a ..uint32_t idx;. 5ba0: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 5bb0: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 5bc0: 3b 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 ;...for (idx = 0 5bd0: 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 ; idx < (sizeof( 5be0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 cackey_slots) / 5bf0: 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c sizeof(cackey_sl 5c00: 6f 74 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 ots[0])); idx++) 5c10: 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f {...if (cackey_ 5c20: 73 6c 6f 74 73 5b 69 64 78 5d 2e 69 6e 74 65 72 slots[idx].inter 5c30: 6e 61 6c 29 20 7b 0a 09 09 09 2f 2a 20 53 6b 69 nal) {..../* Ski 5c40: 70 20 69 6e 74 65 72 6e 61 6c 20 73 6c 6f 74 73 p internal slots 5c50: 20 2a 2f 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b */....continue; 5c60: 0a 09 09 7d 0a 0a 09 09 69 66 20 28 63 61 63 6b ...}....if (cack 5c70: 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 ey_slots[idx].pc 5c80: 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 sc_card_connecte 5c90: 64 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 d) {....CACKEY_D 5ca0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 43 61 EBUG_PRINTF("SCa 5cb0: 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 25 6c 75 rdDisconnect(%lu 5cc0: 29 20 63 61 6c 6c 65 64 22 2c 20 28 75 6e 73 69 ) called", (unsi 5cd0: 67 6e 65 64 20 6c 6f 6e 67 29 20 69 64 78 29 3b gned long) idx); 5ce0: 0a 0a 09 09 09 53 43 61 72 64 44 69 73 63 6f 6e .....SCardDiscon 5cf0: 6e 65 63 74 28 63 61 63 6b 65 79 5f 73 6c 6f 74 nect(cackey_slot 5d00: 73 5b 69 64 78 5d 2e 70 63 73 63 5f 63 61 72 64 s[idx].pcsc_card 5d10: 2c 20 53 43 41 52 44 5f 4c 45 41 56 45 5f 43 41 , SCARD_LEAVE_CA 5d20: 52 44 29 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 RD);...}....if ( 5d30: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx 5d40: 5d 2e 6c 61 62 65 6c 29 20 7b 0a 09 09 09 66 72 ].label) {....fr 5d50: 65 65 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ee(cackey_slots[ 5d60: 69 64 78 5d 2e 6c 61 62 65 6c 29 3b 0a 0a 09 09 idx].label);.... 5d70: 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 .cackey_slots[id 5d80: 78 5d 2e 6c 61 62 65 6c 20 3d 20 4e 55 4c 4c 3b x].label = NULL; 5d90: 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 ...}....cackey_s 5da0: 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 63 lots[idx].pcsc_c 5db0: 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 ard_connected = 5dc0: 30 3b 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 0;...cackey_slot 5dd0: 73 5b 69 64 78 5d 2e 74 72 61 6e 73 61 63 74 69 s[idx].transacti 5de0: 6f 6e 5f 64 65 70 74 68 20 3d 20 30 3b 0a 09 09 on_depth = 0;... 5df0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx 5e00: 5d 2e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 6e 65 ].transaction_ne 5e10: 65 64 5f 68 77 5f 6c 6f 63 6b 20 3d 20 30 3b 0a ed_hw_lock = 0;. 5e20: 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c ...if (cackey_sl 5e30: 6f 74 73 5b 69 64 78 5d 2e 61 63 74 69 76 65 29 ots[idx].active) 5e40: 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB 5e50: 55 47 5f 50 52 49 4e 54 46 28 22 4d 61 72 6b 69 UG_PRINTF("Marki 5e60: 6e 67 20 61 63 74 69 76 65 20 73 6c 6f 74 20 25 ng active slot % 5e70: 6c 75 20 61 73 20 62 65 69 6e 67 20 72 65 73 65 lu as being rese 5e80: 74 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f t", (unsigned lo 5e90: 6e 67 29 20 69 64 78 29 3b 0a 09 09 7d 0a 0a 09 ng) idx);...}... 5ea0: 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 .cackey_slots[id 5eb0: 78 5d 2e 73 6c 6f 74 5f 72 65 73 65 74 20 3d 20 x].slot_reset = 5ec0: 31 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 1;..}...CACKEY_D 5ed0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 5ee0: 75 72 6e 69 6e 67 22 29 3b 0a 0a 09 72 65 74 75 urning");...retu 5ef0: 72 6e 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e rn;.}../*. * SYN 5f00: 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 POSIS. * cac 5f10: 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 70 key_ret cackey_p 5f20: 63 73 63 5f 63 6f 6e 6e 65 63 74 28 76 6f 69 64 csc_connect(void 5f30: 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e );. *. * ARGUMEN 5f40: 54 53 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 TS. * None. 5f50: 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 *. * RETURN VALU 5f60: 45 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 5f E. * CACKEY_ 5f70: 50 43 53 43 5f 53 5f 4f 4b 20 20 20 20 20 20 20 PCSC_S_OK 5f80: 20 20 4f 6e 20 73 75 63 63 65 73 73 0a 20 2a 20 On success. * 5f90: 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f CACKEY_PCSC_ 5fa0: 45 5f 47 45 4e 45 52 49 43 20 20 20 20 4f 6e 20 E_GENERIC On 5fb0: 65 72 72 6f 72 0a 20 2a 0a 20 2a 20 4e 4f 54 45 error. *. * NOTE 5fc0: 53 0a 20 2a 20 20 20 20 20 54 68 69 73 20 66 75 S. * This fu 5fd0: 6e 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 73 20 nction connects 5fe0: 74 6f 20 74 68 65 20 50 43 2f 53 43 20 43 6f 6e to the PC/SC Con 5ff0: 6e 65 63 74 69 6f 6e 20 4d 61 6e 61 67 65 72 20 nection Manager 6000: 61 6e 64 20 75 70 64 61 74 65 73 20 74 68 65 0a and updates the. 6010: 20 2a 20 20 20 20 20 67 6c 6f 62 61 6c 20 68 61 * global ha 6020: 6e 64 6c 65 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 ndle.. *. */.sta 6030: 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 63 tic cackey_ret c 6040: 61 63 6b 65 79 5f 70 63 73 63 5f 63 6f 6e 6e 65 ackey_pcsc_conne 6050: 63 74 28 76 6f 69 64 29 20 7b 0a 09 4c 4f 4e 47 ct(void) {..LONG 6060: 20 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 scard_est_conte 6070: 78 74 5f 72 65 74 3b 0a 23 69 66 64 65 66 20 48 xt_ret;.#ifdef H 6080: 41 56 45 5f 53 43 41 52 44 49 53 56 41 4c 49 44 AVE_SCARDISVALID 6090: 43 4f 4e 54 45 58 54 0a 09 4c 4f 4e 47 20 73 63 CONTEXT..LONG sc 60a0: 61 72 64 5f 69 73 76 61 6c 69 64 5f 72 65 74 3b ard_isvalid_ret; 60b0: 0a 23 65 6e 64 69 66 0a 0a 09 43 41 43 4b 45 59 .#endif...CACKEY 60c0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 60d0: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 60e0: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 60f0: 6c 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 le == NULL) {... 6100: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 6110: 6c 65 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 le = malloc(size 6120: 6f 66 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 5f of(*cackey_pcsc_ 6130: 68 61 6e 64 6c 65 29 29 3b 0a 09 09 69 66 20 28 handle));...if ( 6140: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 6150: 6c 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 le == NULL) {... 6160: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 6170: 49 4e 54 46 28 22 43 61 6c 6c 20 74 6f 20 6d 61 INTF("Call to ma 6180: 6c 6c 6f 63 28 29 20 66 61 69 6c 65 64 2c 20 72 lloc() failed, r 6190: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail 61a0: 75 72 65 22 29 3b 0a 0a 09 09 09 63 61 63 6b 65 ure");.....cacke 61b0: 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 y_slots_disconne 61c0: 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 09 72 65 ct_all();.....re 61d0: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC 61e0: 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 09 7d _E_GENERIC);...} 61f0: 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 6200: 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 45 73 _PRINTF("SCardEs 6210: 74 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 28 29 tablishContext() 6220: 20 63 61 6c 6c 65 64 22 29 3b 0a 09 09 73 63 61 called");...sca 6230: 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 rd_est_context_r 6240: 65 74 20 3d 20 53 43 61 72 64 45 73 74 61 62 6c et = SCardEstabl 6250: 69 73 68 43 6f 6e 74 65 78 74 28 53 43 41 52 44 ishContext(SCARD 6260: 5f 53 43 4f 50 45 5f 53 59 53 54 45 4d 2c 20 4e _SCOPE_SYSTEM, N 6270: 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 63 61 63 6b 65 ULL, NULL, cacke 6280: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a y_pcsc_handle);. 6290: 09 09 69 66 20 28 73 63 61 72 64 5f 65 73 74 5f ..if (scard_est_ 62a0: 63 6f 6e 74 65 78 74 5f 72 65 74 20 21 3d 20 53 context_ret != S 62b0: 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 CARD_S_SUCCESS) 62c0: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU 62d0: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 20 74 G_PRINTF("Call t 62e0: 6f 20 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 o SCardEstablish 62f0: 43 6f 6e 74 65 78 74 20 66 61 69 6c 65 64 20 28 Context failed ( 6300: 72 65 74 75 72 6e 65 64 20 25 73 2f 25 6c 69 29 returned %s/%li) 6310: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f 6320: 61 69 6c 75 72 65 22 2c 20 43 41 43 4b 45 59 5f ailure", CACKEY_ 6330: 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 DEBUG_FUNC_SCARD 6340: 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 ERR_TO_STR(scard 6350: 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 _est_context_ret 6360: 29 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f ), (long) scard_ 6370: 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 29 est_context_ret) 6380: 3b 0a 0a 09 09 09 66 72 65 65 28 63 61 63 6b 65 ;.....free(cacke 6390: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a y_pcsc_handle);. 63a0: 09 09 09 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 ...cackey_pcsc_h 63b0: 61 6e 64 6c 65 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 andle = NULL;... 63c0: 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f 64 ..cackey_slots_d 63d0: 69 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 29 3b isconnect_all(); 63e0: 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b .....return(CACK 63f0: 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 EY_PCSC_E_GENERI 6400: 43 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 23 69 66 64 C);...}..}..#ifd 6410: 65 66 20 48 41 56 45 5f 53 43 41 52 44 49 53 56 ef HAVE_SCARDISV 6420: 41 4c 49 44 43 4f 4e 54 45 58 54 0a 09 43 41 43 ALIDCONTEXT..CAC 6430: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 6440: 28 22 53 43 61 72 64 49 73 56 61 6c 69 64 43 6f ("SCardIsValidCo 6450: 6e 74 65 78 74 28 29 20 63 61 6c 6c 65 64 22 29 ntext() called") 6460: 3b 0a 09 73 63 61 72 64 5f 69 73 76 61 6c 69 64 ;..scard_isvalid 6470: 5f 72 65 74 20 3d 20 53 43 61 72 64 49 73 56 61 _ret = SCardIsVa 6480: 6c 69 64 43 6f 6e 74 65 78 74 28 2a 63 61 63 6b lidContext(*cack 6490: 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b ey_pcsc_handle); 64a0: 0a 09 69 66 20 28 73 63 61 72 64 5f 69 73 76 61 ..if (scard_isva 64b0: 6c 69 64 5f 72 65 74 20 21 3d 20 53 43 41 52 44 lid_ret != SCARD 64c0: 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 _S_SUCCESS) {... 64d0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 64e0: 4e 54 46 28 22 48 61 6e 64 6c 65 20 68 61 73 20 NTF("Handle has 64f0: 62 65 63 6f 6d 65 20 69 6e 76 61 6c 69 64 20 28 become invalid ( 6500: 53 43 61 72 64 49 73 56 61 6c 69 64 43 6f 6e 74 SCardIsValidCont 6510: 65 78 74 20 3d 20 25 73 2f 25 6c 69 29 2c 20 74 ext = %s/%li), t 6520: 72 79 69 6e 67 20 74 6f 20 72 65 2d 65 73 74 61 rying to re-esta 6530: 62 6c 69 73 68 2e 2e 2e 22 2c 20 43 41 43 4b 45 blish...", CACKE 6540: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 Y_DEBUG_FUNC_SCA 6550: 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 RDERR_TO_STR(sca 6560: 72 64 5f 69 73 76 61 6c 69 64 5f 72 65 74 29 2c rd_isvalid_ret), 6570: 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f 69 73 (long) scard_is 6580: 76 61 6c 69 64 5f 72 65 74 29 3b 0a 0a 09 09 43 valid_ret);....C 6590: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 65a0: 54 46 28 22 53 43 61 72 64 45 73 74 61 62 6c 69 TF("SCardEstabli 65b0: 73 68 43 6f 6e 74 65 78 74 28 29 20 63 61 6c 6c shContext() call 65c0: 65 64 22 29 3b 0a 09 09 73 63 61 72 64 5f 65 73 ed");...scard_es 65d0: 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20 3d 20 t_context_ret = 65e0: 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 43 6f SCardEstablishCo 65f0: 6e 74 65 78 74 28 53 43 41 52 44 5f 53 43 4f 50 ntext(SCARD_SCOP 6600: 45 5f 53 59 53 54 45 4d 2c 20 4e 55 4c 4c 2c 20 E_SYSTEM, NULL, 6610: 4e 55 4c 4c 2c 20 63 61 63 6b 65 79 5f 70 63 73 NULL, cackey_pcs 6620: 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 09 69 66 20 c_handle);...if 6630: 28 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 (scard_est_conte 6640: 78 74 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f xt_ret != SCARD_ 6650: 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 S_SUCCESS) {.... 6660: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 6670: 4e 54 46 28 22 43 61 6c 6c 20 74 6f 20 53 43 61 NTF("Call to SCa 6680: 72 64 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 rdEstablishConte 6690: 78 74 20 66 61 69 6c 65 64 20 28 72 65 74 75 72 xt failed (retur 66a0: 6e 65 64 20 25 73 2f 25 6c 69 29 2c 20 72 65 74 ned %s/%li), ret 66b0: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 66c0: 65 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 e", CACKEY_DEBUG 66d0: 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 _FUNC_SCARDERR_T 66e0: 4f 5f 53 54 52 28 73 63 61 72 64 5f 65 73 74 5f O_STR(scard_est_ 66f0: 63 6f 6e 74 65 78 74 5f 72 65 74 29 2c 20 28 6c context_ret), (l 6700: 6f 6e 67 29 20 73 63 61 72 64 5f 65 73 74 5f 63 ong) scard_est_c 6710: 6f 6e 74 65 78 74 5f 72 65 74 29 3b 0a 0a 09 09 ontext_ret);.... 6720: 09 66 72 65 65 28 63 61 63 6b 65 79 5f 70 63 73 .free(cackey_pcs 6730: 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 09 09 63 61 c_handle);....ca 6740: 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 ckey_pcsc_handle 6750: 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 63 61 63 = NULL;.....cac 6760: 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e key_slots_discon 6770: 6e 65 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 09 nect_all();..... 6780: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 6790: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 67a0: 09 7d 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 .}....CACKEY_DEB 67b0: 55 47 5f 50 52 49 4e 54 46 28 22 48 61 6e 64 6c UG_PRINTF("Handl 67c0: 65 20 68 61 73 20 62 65 65 6e 20 72 65 2d 65 73 e has been re-es 67d0: 74 61 62 6c 69 73 68 65 64 22 29 3b 0a 09 7d 0a tablished");..}. 67e0: 23 65 6e 64 69 66 0a 0a 09 43 41 43 4b 45 59 5f #endif...CACKEY_ 67f0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 DEBUG_PRINTF("Su 6800: 63 65 73 73 66 75 6c 6c 79 20 63 6f 6e 6e 65 63 cessfully connec 6810: 74 65 64 20 74 6f 20 50 43 2f 53 43 2c 20 72 65 ted to PC/SC, re 6820: 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 turning in succe 6830: 73 73 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 ss");...return(C 6840: 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 ACKEY_PCSC_S_OK) 6850: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f ;.}../*. * SYNPO 6860: 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 SIS. * cacke 6870: 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 70 63 73 y_ret cackey_pcs 6880: 63 5f 64 69 73 63 6f 6e 6e 65 63 74 28 76 6f 69 c_disconnect(voi 6890: 64 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 d);. *. * ARGUME 68a0: 4e 54 53 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a NTS. * None. 68b0: 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c *. * RETURN VAL 68c0: 55 45 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 UE. * CACKEY 68d0: 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 20 20 20 20 _PCSC_S_OK 68e0: 20 20 20 4f 6e 20 73 75 63 63 65 73 73 0a 20 2a On success. * 68f0: 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 CACKEY_PCSC 6900: 5f 45 5f 47 45 4e 45 52 49 43 20 20 20 20 4f 6e _E_GENERIC On 6910: 20 65 72 72 6f 72 0a 20 2a 0a 20 2a 20 4e 4f 54 error. *. * NOT 6920: 45 53 0a 20 2a 20 20 20 20 20 54 68 69 73 20 66 ES. * This f 6930: 75 6e 63 74 69 6f 6e 20 64 69 73 63 6f 6e 6e 65 unction disconne 6940: 63 74 73 20 66 72 6f 6d 20 74 68 65 20 50 43 2f cts from the PC/ 6950: 53 43 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 SC Connection ma 6960: 6e 61 67 65 72 20 61 6e 64 20 75 70 64 61 74 65 nager and update 6970: 73 0a 20 2a 20 20 20 20 20 74 68 65 20 67 6c 6f s. * the glo 6980: 62 61 6c 20 68 61 6e 64 6c 65 2e 0a 20 2a 0a 20 bal handle.. *. 6990: 2a 2f 0a 73 74 61 74 69 63 20 63 61 63 6b 65 79 */.static cackey 69a0: 5f 72 65 74 20 63 61 63 6b 65 79 5f 70 63 73 63 _ret cackey_pcsc 69b0: 5f 64 69 73 63 6f 6e 6e 65 63 74 28 76 6f 69 64 _disconnect(void 69c0: 29 20 7b 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f ) {..LONG scard_ 69d0: 72 65 6c 5f 63 6f 6e 74 65 78 74 5f 72 65 74 3b rel_context_ret; 69e0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 69f0: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 6a00: 29 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f );...if (cackey_ 6a10: 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 3d 20 4e pcsc_handle == N 6a20: 55 4c 4c 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 ULL) {...return( 6a30: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK 6a40: 29 3b 0a 09 7d 0a 0a 09 73 63 61 72 64 5f 72 65 );..}...scard_re 6a50: 6c 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20 3d 20 l_context_ret = 6a60: 53 43 61 72 64 52 65 6c 65 61 73 65 43 6f 6e 74 SCardReleaseCont 6a70: 65 78 74 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 ext(*cackey_pcsc 6a80: 5f 68 61 6e 64 6c 65 29 3b 0a 0a 09 69 66 20 28 _handle);...if ( 6a90: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 6aa0: 6c 65 29 20 7b 0a 09 09 66 72 65 65 28 63 61 63 le) {...free(cac 6ab0: 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 key_pcsc_handle) 6ac0: 3b 0a 09 0a 09 09 63 61 63 6b 65 79 5f 70 63 73 ;.....cackey_pcs 6ad0: 63 5f 68 61 6e 64 6c 65 20 3d 20 4e 55 4c 4c 3b c_handle = NULL; 6ae0: 0a 09 7d 0a 0a 09 69 66 20 28 73 63 61 72 64 5f ..}...if (scard_ 6af0: 72 65 6c 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20 rel_context_ret 6b00: 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 != SCARD_S_SUCCE 6b10: 53 53 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 43 SS) {...return(C 6b20: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e ACKEY_PCSC_E_GEN 6b30: 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 ERIC);..}...retu 6b40: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 rn(CACKEY_PCSC_S 6b50: 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 _OK);.}../*. * S 6b60: 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 76 YNPOSIS. * v 6b70: 6f 69 64 20 63 61 63 6b 65 79 5f 6d 61 72 6b 5f oid cackey_mark_ 6b80: 73 6c 6f 74 5f 72 65 73 65 74 28 73 74 72 75 63 slot_reset(struc 6b90: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 t cackey_slot *s 6ba0: 6c 6f 74 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 lot);. *. * ARGU 6bb0: 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 4e 6f 6e MENTS. * Non 6bc0: 65 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 e. *. * RETURN V 6bd0: 41 4c 55 45 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 ALUE. * None 6be0: 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 . *. * NOTES. * 6bf0: 20 20 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f This functio 6c00: 6e 20 6d 61 72 6b 73 20 61 20 73 6c 6f 74 20 68 n marks a slot h 6c10: 61 73 20 68 61 76 69 6e 67 20 62 65 65 6e 20 72 as having been r 6c20: 65 73 65 74 2c 20 74 6f 20 6c 61 74 65 72 20 62 eset, to later b 6c30: 65 20 63 6c 65 61 6e 65 64 20 75 70 2e 0a 20 2a e cleaned up.. * 6c40: 20 20 20 20 20 43 6c 65 61 6e 75 70 20 6f 6e 6c Cleanup onl 6c50: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 y happens when a 6c60: 20 50 4b 43 53 23 31 31 20 63 6c 69 65 6e 74 20 PKCS#11 client 6c70: 63 61 6c 6c 73 20 43 5f 46 69 6e 64 4f 62 6a 65 calls C_FindObje 6c80: 63 74 73 49 6e 69 74 2e 0a 20 2a 0a 20 2a 2f 0a ctsInit.. *. */. 6c90: 73 74 61 74 69 63 20 76 6f 69 64 20 63 61 63 6b static void cack 6ca0: 65 79 5f 6d 61 72 6b 5f 73 6c 6f 74 5f 72 65 73 ey_mark_slot_res 6cb0: 65 74 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 et(struct cackey 6cc0: 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a 09 _slot *slot) {.. 6cd0: 69 66 20 28 73 6c 6f 74 20 3d 3d 20 4e 55 4c 4c if (slot == NULL 6ce0: 29 20 7b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d ) {...return;..} 6cf0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 6d00: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 6d10: 29 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 2d 3e 70 );...if (slot->p 6d20: 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 csc_card_connect 6d30: 65 64 29 20 7b 0a 09 09 53 43 61 72 64 44 69 73 ed) {...SCardDis 6d40: 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e 70 63 connect(slot->pc 6d50: 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 4c sc_card, SCARD_L 6d60: 45 41 56 45 5f 43 41 52 44 29 3b 0a 09 7d 0a 0a EAVE_CARD);..}.. 6d70: 09 73 6c 6f 74 2d 3e 73 6c 6f 74 5f 72 65 73 65 .slot->slot_rese 6d80: 74 20 3d 20 31 3b 0a 09 73 6c 6f 74 2d 3e 70 63 t = 1;..slot->pc 6d90: 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 sc_card_connecte 6da0: 64 20 3d 20 30 3b 0a 09 73 6c 6f 74 2d 3e 74 6f d = 0;..slot->to 6db0: 6b 65 6e 5f 66 6c 61 67 73 20 3d 20 43 4b 46 5f ken_flags = CKF_ 6dc0: 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 3b 0a LOGIN_REQUIRED;. 6dd0: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 6de0: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 6df0: 2e 22 29 3b 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d .");...return;.} 6e00: 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 ../*. * SYNPOSIS 6e10: 0a 20 2a 20 20 20 20 20 4c 4f 4e 47 20 63 61 63 . * LONG cac 6e20: 6b 65 79 5f 72 65 63 6f 6e 6e 65 63 74 5f 63 61 key_reconnect_ca 6e30: 72 64 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 rd(struct cackey 6e40: 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 44 57 4f _slot *slot, DWO 6e50: 52 44 20 64 65 66 61 75 6c 74 5f 70 72 6f 74 6f RD default_proto 6e60: 63 6f 6c 2c 20 4c 50 44 57 4f 52 44 20 73 65 6c col, LPDWORD sel 6e70: 65 63 74 65 64 5f 70 72 6f 74 6f 63 6f 6c 29 3b ected_protocol); 6e80: 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 . *. * ARGUMENTS 6e90: 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 73 . * cackey_s 6ea0: 6c 6f 74 20 2a 73 6c 6f 74 0a 20 2a 20 20 20 20 lot *slot. * 6eb0: 20 20 20 20 20 53 6c 6f 74 20 74 6f 20 73 65 6e Slot to sen 6ec0: 64 20 63 6f 6d 6d 61 6e 64 73 20 74 6f 0a 20 2a d commands to. * 6ed0: 0a 20 2a 20 20 20 20 20 44 57 4f 52 44 20 64 65 . * DWORD de 6ee0: 66 61 75 6c 74 5f 70 72 6f 74 6f 63 6f 6c 0a 20 fault_protocol. 6ef0: 2a 20 20 20 20 20 20 20 20 20 50 72 6f 74 6f 63 * Protoc 6f00: 6f 6c 20 74 6f 20 61 74 74 65 6d 70 74 20 66 69 ol to attempt fi 6f10: 72 73 74 0a 20 2a 0a 20 2a 20 20 20 20 20 4c 50 rst. *. * LP 6f20: 44 57 4f 52 44 20 73 65 6c 65 63 74 65 64 5f 70 DWORD selected_p 6f30: 72 6f 74 6f 63 6f 6c 0a 20 2a 20 20 20 20 20 20 rotocol. * 6f40: 20 20 20 5b 4f 55 54 5d 20 50 72 6f 74 6f 63 6f [OUT] Protoco 6f50: 6c 20 73 65 6c 65 63 74 65 64 0a 20 2a 0a 20 2a l selected. *. * 6f60: 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a RETURN VALUE. * 6f70: 20 20 20 20 20 54 68 65 20 72 65 74 75 72 6e 20 The return 6f80: 76 61 6c 75 65 20 66 72 6f 6d 20 53 43 61 72 64 value from SCard 6f90: 52 65 63 6f 6e 6e 65 63 74 28 29 0a 20 2a 0a 20 Reconnect(). *. 6fa0: 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 54 * NOTES. * T 6fb0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 his function is 6fc0: 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 a wrapper around 6fd0: 20 53 43 61 72 64 52 65 63 6f 6e 6e 65 63 74 28 SCardReconnect( 6fe0: 29 0a 20 2a 0a 20 2a 20 20 20 20 20 54 68 65 20 ). *. * The 6ff0: 53 43 61 72 64 52 65 63 6f 6e 6e 65 63 74 28 29 SCardReconnect() 7000: 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 20 77 function call w 7010: 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20 66 69 ill be called fi 7020: 72 73 74 20 77 69 74 68 20 74 68 65 0a 20 2a 20 rst with the. * 7030: 20 20 20 20 64 77 50 72 65 66 65 72 72 65 64 50 dwPreferredP 7040: 72 6f 74 6f 63 6f 6c 73 20 6f 66 20 22 64 65 66 rotocols of "def 7050: 61 75 6c 74 5f 70 72 6f 74 6f 63 6f 6c 22 2e 20 ault_protocol". 7060: 20 49 66 20 74 68 61 74 20 63 61 6c 6c 20 72 65 If that call re 7070: 74 75 72 6e 73 0a 20 2a 20 20 20 20 20 53 43 41 turns. * SCA 7080: 52 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 RD_E_PROTO_MISMA 7090: 54 43 48 20 74 72 79 20 61 67 61 69 6e 20 77 69 TCH try again wi 70a0: 74 68 20 61 20 70 72 6f 74 6f 63 6f 6c 20 6f 66 th a protocol of 70b0: 20 54 3d 30 2c 20 61 6e 64 20 66 61 69 6c 69 6e T=0, and failin 70c0: 67 0a 20 2a 20 20 20 20 20 74 68 61 74 20 54 3d g. * that T= 70d0: 31 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 1.. *. */.static 70e0: 20 4c 4f 4e 47 20 63 61 63 6b 65 79 5f 72 65 63 LONG cackey_rec 70f0: 6f 6e 6e 65 63 74 5f 63 61 72 64 28 73 74 72 75 onnect_card(stru 7100: 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a ct cackey_slot * 7110: 73 6c 6f 74 2c 20 44 57 4f 52 44 20 64 65 66 61 slot, DWORD defa 7120: 75 6c 74 5f 70 72 6f 74 6f 63 6f 6c 2c 20 4c 50 ult_protocol, LP 7130: 44 57 4f 52 44 20 73 65 6c 65 63 74 65 64 5f 70 DWORD selected_p 7140: 72 6f 74 6f 63 6f 6c 29 20 7b 0a 09 4c 4f 4e 47 rotocol) {..LONG 7150: 20 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 3b scard_conn_ret; 7160: 0a 0a 09 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 ...scard_conn_re 7170: 74 20 3d 20 53 43 61 72 64 52 65 63 6f 6e 6e 65 t = SCardReconne 7180: 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 ct(slot->pcsc_ca 7190: 72 64 2c 20 53 43 41 52 44 5f 53 48 41 52 45 5f rd, SCARD_SHARE_ 71a0: 53 48 41 52 45 44 2c 20 64 65 66 61 75 6c 74 5f SHARED, default_ 71b0: 70 72 6f 74 6f 63 6f 6c 2c 20 53 43 41 52 44 5f protocol, SCARD_ 71c0: 52 45 53 45 54 5f 43 41 52 44 2c 20 73 65 6c 65 RESET_CARD, sele 71d0: 63 74 65 64 5f 70 72 6f 74 6f 63 6f 6c 29 3b 0a cted_protocol);. 71e0: 0a 09 69 66 20 28 73 63 61 72 64 5f 63 6f 6e 6e ..if (scard_conn 71f0: 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f 45 5f _ret == SCARD_E_ 7200: 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 29 20 PROTO_MISMATCH) 7210: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 7220: 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 52 65 _PRINTF("SCardRe 7230: 63 6f 6e 6e 65 63 74 28 29 20 72 65 74 75 72 6e connect() return 7240: 65 64 20 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f ed SCARD_E_PROTO 7250: 5f 4d 49 53 4d 41 54 43 48 2c 20 74 72 79 69 6e _MISMATCH, tryin 7260: 67 20 77 69 74 68 20 6a 75 73 74 20 54 3d 30 22 g with just T=0" 7270: 29 0a 09 09 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 )...scard_conn_r 7280: 65 74 20 3d 20 53 43 61 72 64 52 65 63 6f 6e 6e et = SCardReconn 7290: 65 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 ect(slot->pcsc_c 72a0: 61 72 64 2c 20 53 43 41 52 44 5f 53 48 41 52 45 ard, SCARD_SHARE 72b0: 5f 53 48 41 52 45 44 2c 20 53 43 41 52 44 5f 50 _SHARED, SCARD_P 72c0: 52 4f 54 4f 43 4f 4c 5f 54 30 2c 20 53 43 41 52 ROTOCOL_T0, SCAR 72d0: 44 5f 52 45 53 45 54 5f 43 41 52 44 2c 20 73 65 D_RESET_CARD, se 72e0: 6c 65 63 74 65 64 5f 70 72 6f 74 6f 63 6f 6c 29 lected_protocol) 72f0: 3b 0a 0a 09 09 69 66 20 28 73 63 61 72 64 5f 63 ;....if (scard_c 7300: 6f 6e 6e 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 onn_ret == SCARD 7310: 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 _E_PROTO_MISMATC 7320: 48 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 H) {....CACKEY_D 7330: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 43 61 EBUG_PRINTF("SCa 7340: 72 64 52 65 63 6f 6e 6e 65 63 74 28 29 20 72 65 rdReconnect() re 7350: 74 75 72 6e 65 64 20 53 43 41 52 44 5f 45 5f 50 turned SCARD_E_P 7360: 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 2c 20 74 ROTO_MISMATCH, t 7370: 72 79 69 6e 67 20 77 69 74 68 20 6a 75 73 74 20 rying with just 7380: 54 3d 31 22 29 0a 09 09 09 73 63 61 72 64 5f 63 T=1")....scard_c 7390: 6f 6e 6e 5f 72 65 74 20 3d 20 53 43 61 72 64 52 onn_ret = SCardR 73a0: 65 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e 70 econnect(slot->p 73b0: 63 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 5f csc_card, SCARD_ 73c0: 53 48 41 52 45 5f 53 48 41 52 45 44 2c 20 53 43 SHARE_SHARED, SC 73d0: 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31 2c ARD_PROTOCOL_T1, 73e0: 20 53 43 41 52 44 5f 52 45 53 45 54 5f 43 41 52 SCARD_RESET_CAR 73f0: 44 2c 20 73 65 6c 65 63 74 65 64 5f 70 72 6f 74 D, selected_prot 7400: 6f 63 6f 6c 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 ocol);...}..}... 7410: 72 65 74 75 72 6e 28 73 63 61 72 64 5f 63 6f 6e return(scard_con 7420: 6e 5f 72 65 74 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a n_ret);.}../*. * 7430: 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 SYNPOSIS. * 7440: 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b cackey_ret cack 7450: 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 72 64 28 ey_connect_card( 7460: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl 7470: 6f 74 20 2a 73 6c 6f 74 29 3b 0a 20 2a 0a 20 2a ot *slot);. *. * 7480: 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 ARGUMENTS. * 7490: 20 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 cackey_slot *s 74a0: 6c 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 53 lot. * S 74b0: 6c 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d 6d lot to send comm 74c0: 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 52 45 ands to. *. * RE 74d0: 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 TURN VALUE. * 74e0: 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f CACKEY_PCSC_S_ 74f0: 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e 20 73 75 OK On su 7500: 63 63 65 73 73 0a 20 2a 20 20 20 20 20 43 41 43 ccess. * CAC 7510: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 7520: 49 43 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 IC On error. 7530: 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 *. * NOTES. * 7540: 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a 2f 0a 73 74 None. *. */.st 7550: 61 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 atic cackey_ret 7560: 63 61 63 6b 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 cackey_connect_c 7570: 61 72 64 28 73 74 72 75 63 74 20 63 61 63 6b 65 ard(struct cacke 7580: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a y_slot *slot) {. 7590: 09 63 61 63 6b 65 79 5f 72 65 74 20 70 63 73 63 .cackey_ret pcsc 75a0: 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 3b 0a 09 44 _connect_ret;..D 75b0: 57 4f 52 44 20 70 72 6f 74 6f 63 6f 6c 3b 0a 09 WORD protocol;.. 75c0: 4c 4f 4e 47 20 73 63 61 72 64 5f 63 6f 6e 6e 5f LONG scard_conn_ 75d0: 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ret;...CACKEY_DE 75e0: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 75f0: 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 73 6c ed.");...if (!sl 7600: 6f 74 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ot) {...CACKEY_D 7610: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 49 6e 76 EBUG_PRINTF("Inv 7620: 61 6c 69 64 20 73 6c 6f 74 20 73 70 65 63 69 66 alid slot specif 7630: 69 65 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 ied, returning i 7640: 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 n failure");.... 7650: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 7660: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 7670: 7d 0a 0a 09 70 63 73 63 5f 63 6f 6e 6e 65 63 74 }...pcsc_connect 7680: 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 70 63 _ret = cackey_pc 7690: 73 63 5f 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 69 sc_connect();..i 76a0: 66 20 28 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f f (pcsc_connect_ 76b0: 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 ret != CACKEY_PC 76c0: 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 SC_S_OK) {...CAC 76d0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 76e0: 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 ("Connection to 76f0: 50 43 2f 53 43 20 66 61 69 6c 65 64 2c 20 72 65 PC/SC failed, re 7700: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu 7710: 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 re");....return( 7720: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 CACKEY_PCSC_E_GE 7730: 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 NERIC);..}.../* 7740: 43 6f 6e 6e 65 63 74 20 74 6f 20 72 65 61 64 65 Connect to reade 7750: 72 2c 20 69 66 20 6e 65 65 64 65 64 20 2a 2f 0a r, if needed */. 7760: 09 69 66 20 28 21 73 6c 6f 74 2d 3e 70 63 73 63 .if (!slot->pcsc 7770: 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 29 _card_connected) 7780: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 7790: 47 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 43 G_PRINTF("SCardC 77a0: 6f 6e 6e 65 63 74 28 25 73 29 20 63 61 6c 6c 65 onnect(%s) calle 77b0: 64 22 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 d", slot->pcsc_r 77c0: 65 61 64 65 72 29 3b 0a 09 09 73 63 61 72 64 5f eader);...scard_ 77d0: 63 6f 6e 6e 5f 72 65 74 20 3d 20 53 43 61 72 64 conn_ret = SCard 77e0: 43 6f 6e 6e 65 63 74 28 2a 63 61 63 6b 65 79 5f Connect(*cackey_ 77f0: 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 73 6c 6f pcsc_handle, slo 7800: 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 72 2c 20 t->pcsc_reader, 7810: 53 43 41 52 44 5f 53 48 41 52 45 5f 53 48 41 52 SCARD_SHARE_SHAR 7820: 45 44 2c 20 53 43 41 52 44 5f 50 52 4f 54 4f 43 ED, SCARD_PROTOC 7830: 4f 4c 5f 54 30 20 7c 20 53 43 41 52 44 5f 50 52 OL_T0 | SCARD_PR 7840: 4f 54 4f 43 4f 4c 5f 54 31 2c 20 26 73 6c 6f 74 OTOCOL_T1, &slot 7850: 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 26 70 72 ->pcsc_card, &pr 7860: 6f 74 6f 63 6f 6c 29 3b 0a 0a 09 09 69 66 20 28 otocol);....if ( 7870: 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 3d scard_conn_ret = 7880: 3d 20 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f 5f = SCARD_E_PROTO_ 7890: 4d 49 53 4d 41 54 43 48 29 20 7b 0a 09 09 09 43 MISMATCH) {....C 78a0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 78b0: 54 46 28 22 53 43 61 72 64 43 6f 6e 6e 65 63 74 TF("SCardConnect 78c0: 28 29 20 72 65 74 75 72 6e 65 64 20 53 43 41 52 () returned SCAR 78d0: 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 D_E_PROTO_MISMAT 78e0: 43 48 2c 20 74 72 79 69 6e 67 20 77 69 74 68 20 CH, trying with 78f0: 6a 75 73 74 20 54 3d 30 22 29 0a 09 09 09 73 63 just T=0")....sc 7900: 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 53 ard_conn_ret = S 7910: 43 61 72 64 43 6f 6e 6e 65 63 74 28 2a 63 61 63 CardConnect(*cac 7920: 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 2c key_pcsc_handle, 7930: 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 64 slot->pcsc_read 7940: 65 72 2c 20 53 43 41 52 44 5f 53 48 41 52 45 5f er, SCARD_SHARE_ 7950: 53 48 41 52 45 44 2c 20 53 43 41 52 44 5f 50 52 SHARED, SCARD_PR 7960: 4f 54 4f 43 4f 4c 5f 54 30 2c 20 26 73 6c 6f 74 OTOCOL_T0, &slot 7970: 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 26 70 72 ->pcsc_card, &pr 7980: 6f 74 6f 63 6f 6c 29 3b 0a 0a 09 09 09 69 66 20 otocol);.....if 7990: 28 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 (scard_conn_ret 79a0: 3d 3d 20 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f == SCARD_E_PROTO 79b0: 5f 4d 49 53 4d 41 54 43 48 29 20 7b 0a 09 09 09 _MISMATCH) {.... 79c0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 79d0: 49 4e 54 46 28 22 53 43 61 72 64 43 6f 6e 6e 65 INTF("SCardConne 79e0: 63 74 28 29 20 72 65 74 75 72 6e 65 64 20 53 43 ct() returned SC 79f0: 41 52 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d ARD_E_PROTO_MISM 7a00: 41 54 43 48 2c 20 74 72 79 69 6e 67 20 77 69 74 ATCH, trying wit 7a10: 68 20 6a 75 73 74 20 54 3d 31 22 29 0a 09 09 09 h just T=1").... 7a20: 09 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 .scard_conn_ret 7a30: 3d 20 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 2a = SCardConnect(* 7a40: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 7a50: 6c 65 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 le, slot->pcsc_r 7a60: 65 61 64 65 72 2c 20 53 43 41 52 44 5f 53 48 41 eader, SCARD_SHA 7a70: 52 45 5f 53 48 41 52 45 44 2c 20 53 43 41 52 44 RE_SHARED, SCARD 7a80: 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31 2c 20 26 73 _PROTOCOL_T1, &s 7a90: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 lot->pcsc_card, 7aa0: 26 70 72 6f 74 6f 63 6f 6c 29 3b 0a 09 09 09 7d &protocol);....} 7ab0: 0a 09 09 7d 0a 0a 09 09 69 66 20 28 73 63 61 72 ...}....if (scar 7ac0: 64 5f 63 6f 6e 6e 5f 72 65 74 20 3d 3d 20 53 43 d_conn_ret == SC 7ad0: 41 52 44 5f 57 5f 55 4e 50 4f 57 45 52 45 44 5f ARD_W_UNPOWERED_ 7ae0: 43 41 52 44 29 20 7b 0a 09 09 09 43 41 43 4b 45 CARD) {....CACKE 7af0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 7b00: 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 29 20 72 SCardConnect() r 7b10: 65 74 75 72 6e 65 64 20 53 43 41 52 44 5f 57 5f eturned SCARD_W_ 7b20: 55 4e 50 4f 57 45 52 45 44 5f 43 41 52 44 2c 20 UNPOWERED_CARD, 7b30: 74 72 79 69 6e 67 20 74 6f 20 72 65 2d 63 6f 6e trying to re-con 7b40: 6e 65 63 74 2e 2e 2e 22 29 3b 0a 0a 09 09 09 73 nect...");.....s 7b50: 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 card_conn_ret = 7b60: 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 2a 63 61 SCardConnect(*ca 7b70: 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 ckey_pcsc_handle 7b80: 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 , slot->pcsc_rea 7b90: 64 65 72 2c 20 53 43 41 52 44 5f 53 48 41 52 45 der, SCARD_SHARE 7ba0: 5f 44 49 52 45 43 54 2c 20 53 43 41 52 44 5f 50 _DIRECT, SCARD_P 7bb0: 52 4f 54 4f 43 4f 4c 5f 54 30 20 7c 20 53 43 41 ROTOCOL_T0 | SCA 7bc0: 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31 2c 20 RD_PROTOCOL_T1, 7bd0: 26 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 &slot->pcsc_card 7be0: 2c 20 26 70 72 6f 74 6f 63 6f 6c 29 3b 0a 0a 09 , &protocol);... 7bf0: 09 09 69 66 20 28 73 63 61 72 64 5f 63 6f 6e 6e ..if (scard_conn 7c00: 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f 45 5f _ret == SCARD_E_ 7c10: 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 29 20 PROTO_MISMATCH) 7c20: 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {.....CACKEY_DEB 7c30: 55 47 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 UG_PRINTF("SCard 7c40: 43 6f 6e 6e 65 63 74 28 29 20 72 65 74 75 72 6e Connect() return 7c50: 65 64 20 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f ed SCARD_E_PROTO 7c60: 5f 4d 49 53 4d 41 54 43 48 2c 20 74 72 79 69 6e _MISMATCH, tryin 7c70: 67 20 77 69 74 68 20 6a 75 73 74 20 54 3d 30 22 g with just T=0" 7c80: 29 0a 09 09 09 09 73 63 61 72 64 5f 63 6f 6e 6e ).....scard_conn 7c90: 5f 72 65 74 20 3d 20 53 43 61 72 64 43 6f 6e 6e _ret = SCardConn 7ca0: 65 63 74 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 ect(*cackey_pcsc 7cb0: 5f 68 61 6e 64 6c 65 2c 20 73 6c 6f 74 2d 3e 70 _handle, slot->p 7cc0: 63 73 63 5f 72 65 61 64 65 72 2c 20 53 43 41 52 csc_reader, SCAR 7cd0: 44 5f 53 48 41 52 45 5f 53 48 41 52 45 44 2c 20 D_SHARE_SHARED, 7ce0: 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 SCARD_PROTOCOL_T 7cf0: 30 2c 20 26 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 0, &slot->pcsc_c 7d00: 61 72 64 2c 20 26 70 72 6f 74 6f 63 6f 6c 29 3b ard, &protocol); 7d10: 0a 0a 09 09 09 09 69 66 20 28 73 63 61 72 64 5f ......if (scard_ 7d20: 63 6f 6e 6e 5f 72 65 74 20 3d 3d 20 53 43 41 52 conn_ret == SCAR 7d30: 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 D_E_PROTO_MISMAT 7d40: 43 48 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 CH) {......CACKE 7d50: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 7d60: 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 29 20 72 SCardConnect() r 7d70: 65 74 75 72 6e 65 64 20 53 43 41 52 44 5f 45 5f eturned SCARD_E_ 7d80: 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 2c 20 PROTO_MISMATCH, 7d90: 74 72 79 69 6e 67 20 77 69 74 68 20 6a 75 73 74 trying with just 7da0: 20 54 3d 31 22 29 0a 09 09 09 09 09 73 63 61 72 T=1")......scar 7db0: 64 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 53 43 61 d_conn_ret = SCa 7dc0: 72 64 43 6f 6e 6e 65 63 74 28 2a 63 61 63 6b 65 rdConnect(*cacke 7dd0: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 73 y_pcsc_handle, s 7de0: 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 72 lot->pcsc_reader 7df0: 2c 20 53 43 41 52 44 5f 53 48 41 52 45 5f 53 48 , SCARD_SHARE_SH 7e00: 41 52 45 44 2c 20 53 43 41 52 44 5f 50 52 4f 54 ARED, SCARD_PROT 7e10: 4f 43 4f 4c 5f 54 31 2c 20 26 73 6c 6f 74 2d 3e OCOL_T1, &slot-> 7e20: 70 63 73 63 5f 63 61 72 64 2c 20 26 70 72 6f 74 pcsc_card, &prot 7e30: 6f 63 6f 6c 29 3b 0a 09 09 09 09 7d 0a 09 09 09 ocol);.....}.... 7e40: 7d 0a 0a 09 09 09 73 63 61 72 64 5f 63 6f 6e 6e }.....scard_conn 7e50: 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 72 65 _ret = cackey_re 7e60: 63 6f 6e 6e 65 63 74 5f 63 61 72 64 28 73 6c 6f connect_card(slo 7e70: 74 2c 20 70 72 6f 74 6f 63 6f 6c 2c 20 26 70 72 t, protocol, &pr 7e80: 6f 74 6f 63 6f 6c 29 3b 0a 09 09 7d 0a 0a 09 09 otocol);...}.... 7e90: 69 66 20 28 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 if (scard_conn_r 7ea0: 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 et != SCARD_S_SU 7eb0: 43 43 45 53 53 29 20 7b 0a 09 09 09 43 41 43 4b CCESS) {....CACK 7ec0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 7ed0: 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 63 "Connection to c 7ee0: 61 72 64 20 66 61 69 6c 65 64 2c 20 72 65 74 75 ard failed, retu 7ef0: 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 rning in failure 7f00: 20 28 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 29 (SCardConnect() 7f10: 20 3d 20 25 73 2f 25 6c 69 29 22 2c 20 43 41 43 = %s/%li)", CAC 7f20: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 KEY_DEBUG_FUNC_S 7f30: 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 CARDERR_TO_STR(s 7f40: 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 29 2c 20 card_conn_ret), 7f50: 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f 63 6f 6e (long) scard_con 7f60: 6e 5f 72 65 74 29 3b 0a 0a 09 09 09 72 65 74 75 n_ret);.....retu 7f70: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 7f80: 5f 47 45 4e 45 52 49 43 29 3b 0a 09 09 7d 0a 0a _GENERIC);...}.. 7f90: 09 09 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 ..slot->pcsc_car 7fa0: 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 31 3b d_connected = 1; 7fb0: 0a 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 ...slot->transac 7fc0: 74 69 6f 6e 5f 64 65 70 74 68 20 3d 20 30 3b 0a tion_depth = 0;. 7fd0: 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 ..slot->transact 7fe0: 69 6f 6e 5f 6e 65 65 64 5f 68 77 5f 6c 6f 63 6b ion_need_hw_lock 7ff0: 20 3d 20 30 3b 0a 09 09 73 6c 6f 74 2d 3e 70 72 = 0;...slot->pr 8000: 6f 74 6f 63 6f 6c 20 3d 20 70 72 6f 74 6f 63 6f otocol = protoco 8010: 6c 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 43 l;..}...return(C 8020: 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 ACKEY_PCSC_S_OK) 8030: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f ;.}../*. * SYNPO 8040: 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 SIS. * cacke 8050: 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 62 65 67 y_ret cackey_beg 8060: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 in_transaction(s 8070: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f truct cackey_slo 8080: 74 20 2a 73 6c 6f 74 29 3b 0a 20 2a 0a 20 2a 20 t *slot);. *. * 8090: 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 ARGUMENTS. * 80a0: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c cackey_slot *sl 80b0: 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 53 6c ot. * Sl 80c0: 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 ot to send comma 80d0: 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 52 45 54 nds to. *. * RET 80e0: 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 URN VALUE. * 80f0: 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f CACKEY_PCSC_S_O 8100: 4b 20 20 20 20 20 20 20 20 20 4f 6e 20 73 75 63 K On suc 8110: 63 65 73 73 0a 20 2a 20 20 20 20 20 43 41 43 4b cess. * CACK 8120: 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 EY_PCSC_E_GENERI 8130: 43 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 2a C On error. * 8140: 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 . * NOTES. * 8150: 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e The transaction 8160: 20 73 68 6f 75 6c 64 20 62 65 20 74 65 72 6d 69 should be termi 8170: 6e 61 74 65 64 20 75 73 69 6e 67 20 22 63 61 63 nated using "cac 8180: 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 key_end_transact 8190: 69 6f 6e 22 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 ion". *. */.stat 81a0: 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 ic cackey_ret ca 81b0: 63 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e 73 ckey_begin_trans 81c0: 61 63 74 69 6f 6e 28 73 74 72 75 63 74 20 63 61 action(struct ca 81d0: 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 ckey_slot *slot) 81e0: 20 7b 0a 09 63 61 63 6b 65 79 5f 72 65 74 20 63 {..cackey_ret c 81f0: 61 63 6b 65 79 5f 63 6f 6e 6e 5f 72 65 74 3b 0a ackey_conn_ret;. 8200: 09 4c 4f 4e 47 20 73 63 61 72 64 5f 74 72 61 6e .LONG scard_tran 8210: 73 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f s_ret;...CACKEY_ 8220: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 8230: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 63 61 63 6b 65 lled.");...cacke 8240: 79 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 63 61 63 y_conn_ret = cac 8250: 6b 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 72 64 key_connect_card 8260: 28 73 6c 6f 74 29 3b 0a 09 69 66 20 28 63 61 63 (slot);..if (cac 8270: 6b 65 79 5f 63 6f 6e 6e 5f 72 65 74 20 21 3d 20 key_conn_ret != 8280: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK 8290: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 82a0: 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 6c UG_PRINTF("Unabl 82b0: 65 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 6f 20 e to connect to 82c0: 63 61 72 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 card, returning 82d0: 69 6e 20 65 72 72 6f 72 22 29 3b 0a 0a 09 09 72 in error");....r 82e0: 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 eturn(CACKEY_PCS 82f0: 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d C_E_GENERIC);..} 8300: 0a 0a 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 ...slot->transac 8310: 74 69 6f 6e 5f 64 65 70 74 68 2b 2b 3b 0a 0a 09 tion_depth++;... 8320: 69 66 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 if (slot->transa 8330: 63 74 69 6f 6e 5f 64 65 70 74 68 20 3e 20 31 20 ction_depth > 1 8340: 26 26 20 21 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 && !slot->transa 8350: 63 74 69 6f 6e 5f 6e 65 65 64 5f 68 77 5f 6c 6f ction_need_hw_lo 8360: 63 6b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ck) {...CACKEY_D 8370: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 41 6c 72 EBUG_PRINTF("Alr 8380: 65 61 64 79 20 69 6e 20 61 20 74 72 61 6e 73 61 eady in a transa 8390: 63 74 69 6f 6e 2c 20 70 65 72 66 6f 72 6d 69 6e ction, performin 83a0: 67 20 6e 6f 20 61 63 74 69 6f 6e 20 28 6e 65 77 g no action (new 83b0: 20 64 65 70 74 68 20 3d 20 25 69 29 22 2c 20 73 depth = %i)", s 83c0: 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e lot->transaction 83d0: 5f 64 65 70 74 68 29 3b 0a 0a 09 09 72 65 74 75 _depth);....retu 83e0: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 rn(CACKEY_PCSC_S 83f0: 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 2d _OK);..}...slot- 8400: 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 6e 65 65 >transaction_nee 8410: 64 5f 68 77 5f 6c 6f 63 6b 20 3d 20 30 3b 0a 0a d_hw_lock = 0;.. 8420: 09 73 63 61 72 64 5f 74 72 61 6e 73 5f 72 65 74 .scard_trans_ret 8430: 20 3d 20 53 43 61 72 64 42 65 67 69 6e 54 72 61 = SCardBeginTra 8440: 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 2d 3e 70 nsaction(slot->p 8450: 63 73 63 5f 63 61 72 64 29 3b 0a 09 69 66 20 28 csc_card);..if ( 8460: 73 63 61 72 64 5f 74 72 61 6e 73 5f 72 65 74 20 scard_trans_ret 8470: 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 != SCARD_S_SUCCE 8480: 53 53 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 SS) {...CACKEY_D 8490: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 EBUG_PRINTF("Una 84a0: 62 6c 65 20 74 6f 20 62 65 67 69 6e 20 74 72 61 ble to begin tra 84b0: 6e 73 61 63 74 69 6f 6e 2c 20 72 65 74 75 72 6e nsaction, return 84c0: 69 6e 67 20 69 6e 20 65 72 72 6f 72 22 29 3b 0a ing in error");. 84d0: 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 84e0: 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 _PCSC_E_GENERIC) 84f0: 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 8500: 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 63 65 BUG_PRINTF("Suce 8510: 73 73 66 75 6c 6c 79 20 62 65 67 61 6e 20 74 72 ssfully began tr 8520: 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 73 6c 6f ansaction on slo 8530: 74 20 28 25 73 29 22 2c 20 73 6c 6f 74 2d 3e 70 t (%s)", slot->p 8540: 63 73 63 5f 72 65 61 64 65 72 29 3b 0a 0a 09 72 csc_reader);...r 8550: 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 eturn(CACKEY_PCS 8560: 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 C_S_OK);.}../*. 8570: 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 * SYNPOSIS. * 8580: 20 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 cackey_ret cac 8590: 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 key_end_transact 85a0: 69 6f 6e 28 73 74 72 75 63 74 20 63 61 63 6b 65 ion(struct cacke 85b0: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 3b 0a 20 y_slot *slot);. 85c0: 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 *. * ARGUMENTS. 85d0: 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 73 6c 6f * cackey_slo 85e0: 74 20 2a 73 6c 6f 74 0a 20 2a 20 20 20 20 20 20 t *slot. * 85f0: 20 20 20 53 6c 6f 74 20 74 6f 20 73 65 6e 64 20 Slot to send 8600: 63 6f 6d 6d 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 commands to. *. 8610: 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 * RETURN VALUE. 8620: 2a 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 * CACKEY_PCS 8630: 43 5f 53 5f 4f 4b 20 20 20 20 20 20 20 20 20 4f C_S_OK O 8640: 6e 20 73 75 63 63 65 73 73 0a 20 2a 20 20 20 20 n success. * 8650: 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 CACKEY_PCSC_E_G 8660: 45 4e 45 52 49 43 20 20 20 20 4f 6e 20 65 72 72 ENERIC On err 8670: 6f 72 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 or. *. * NOTES. 8680: 2a 20 20 20 20 20 54 68 69 73 20 66 75 6e 63 74 * This funct 8690: 69 6f 6e 20 72 65 71 75 69 72 65 73 20 22 63 61 ion requires "ca 86a0: 63 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e 73 ckey_begin_trans 86b0: 61 63 74 69 6f 6e 22 20 74 6f 20 62 65 20 63 61 action" to be ca 86c0: 6c 6c 65 64 20 66 69 72 73 74 0a 20 2a 0a 20 2a lled first. *. * 86d0: 2f 0a 73 74 61 74 69 63 20 63 61 63 6b 65 79 5f /.static cackey_ 86e0: 72 65 74 20 63 61 63 6b 65 79 5f 65 6e 64 5f 74 ret cackey_end_t 86f0: 72 61 6e 73 61 63 74 69 6f 6e 28 73 74 72 75 63 ransaction(struc 8700: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 t cackey_slot *s 8710: 6c 6f 74 29 20 7b 0a 09 4c 4f 4e 47 20 73 63 61 lot) {..LONG sca 8720: 72 64 5f 74 72 61 6e 73 5f 72 65 74 3b 0a 0a 09 rd_trans_ret;... 8730: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 8740: 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 8750: 0a 09 69 66 20 28 21 73 6c 6f 74 2d 3e 70 63 73 ..if (!slot->pcs 8760: 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 c_card_connected 8770: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 8780: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 72 64 20 UG_PRINTF("Card 8790: 69 73 20 6e 6f 74 20 63 6f 6e 6e 65 63 74 65 64 is not connected 87a0: 2c 20 75 6e 61 62 6c 65 20 74 6f 20 65 6e 64 20 , unable to end 87b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 63 transaction on c 87c0: 61 72 64 22 29 3b 0a 0a 09 09 69 66 20 28 73 6c ard");....if (sl 87d0: 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f ot->transaction_ 87e0: 64 65 70 74 68 20 3e 20 30 29 20 7b 0a 09 09 09 depth > 0) {.... 87f0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 8800: 4e 54 46 28 22 44 65 63 72 65 61 73 69 6e 67 20 NTF("Decreasing 8810: 74 72 61 6e 73 61 63 74 69 6f 6e 20 64 65 70 74 transaction dept 8820: 68 20 61 6e 64 20 61 73 6b 69 6e 67 20 66 6f 72 h and asking for 8830: 20 61 20 68 61 72 64 77 61 72 65 20 6c 6f 63 6b a hardware lock 8840: 20 6f 6e 20 74 68 65 20 6e 65 78 74 20 62 65 67 on the next beg 8850: 69 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 28 in transaction ( 8860: 63 75 72 72 65 6e 74 20 64 65 70 74 68 20 3d 20 current depth = 8870: 25 69 29 22 2c 20 73 6c 6f 74 2d 3e 74 72 61 6e %i)", slot->tran 8880: 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 29 3b 0a saction_depth);. 8890: 0a 09 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 ....slot->transa 88a0: 63 74 69 6f 6e 5f 64 65 70 74 68 2d 2d 3b 0a 0a ction_depth--;.. 88b0: 09 09 09 69 66 20 28 73 6c 6f 74 2d 3e 74 72 61 ...if (slot->tra 88c0: 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3e nsaction_depth > 88d0: 20 30 29 20 7b 0a 09 09 09 09 73 6c 6f 74 2d 3e 0) {.....slot-> 88e0: 74 72 61 6e 73 61 63 74 69 6f 6e 5f 6e 65 65 64 transaction_need 88f0: 5f 68 77 5f 6c 6f 63 6b 20 3d 20 31 3b 0a 09 09 _hw_lock = 1;... 8900: 09 7d 0a 09 09 7d 0a 0a 09 09 72 65 74 75 72 6e .}...}....return 8910: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 (CACKEY_PCSC_E_G 8920: 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 69 66 ENERIC);..}...if 8930: 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 (slot->transact 8940: 69 6f 6e 5f 64 65 70 74 68 20 3d 3d 20 30 29 20 ion_depth == 0) 8950: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 8960: 5f 50 52 49 4e 54 46 28 22 54 65 72 6d 69 6e 61 _PRINTF("Termina 8970: 74 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69 ting a transacti 8980: 6f 6e 20 74 68 61 74 20 68 61 73 20 6e 6f 74 20 on that has not 8990: 62 65 67 75 6e 21 22 29 3b 0a 0a 09 09 72 65 74 begun!");....ret 89a0: 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f urn(CACKEY_PCSC_ 89b0: 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a E_GENERIC);..}.. 89c0: 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 .slot->transacti 89d0: 6f 6e 5f 64 65 70 74 68 2d 2d 3b 0a 0a 09 69 66 on_depth--;...if 89e0: 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 (slot->transact 89f0: 69 6f 6e 5f 64 65 70 74 68 20 3e 20 30 29 20 7b ion_depth > 0) { 8a00: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 8a10: 50 52 49 4e 54 46 28 22 54 72 61 6e 73 61 63 74 PRINTF("Transact 8a20: 69 6f 6e 73 20 73 74 69 6c 6c 20 69 6e 20 70 72 ions still in pr 8a30: 6f 67 72 65 73 73 2c 20 6e 6f 74 20 74 65 72 6d ogress, not term 8a40: 69 6e 61 74 69 6e 67 20 6f 6e 2d 63 61 72 64 20 inating on-card 8a50: 54 72 61 6e 73 61 63 74 69 6f 6e 20 28 63 75 72 Transaction (cur 8a60: 72 65 6e 74 20 64 65 70 74 68 20 3d 20 25 69 29 rent depth = %i) 8a70: 22 2c 20 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 ", slot->transac 8a80: 74 69 6f 6e 5f 64 65 70 74 68 29 3b 0a 0a 09 09 tion_depth);.... 8a90: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 8aa0: 53 43 5f 53 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 73 SC_S_OK);..}...s 8ab0: 63 61 72 64 5f 74 72 61 6e 73 5f 72 65 74 20 3d card_trans_ret = 8ac0: 20 53 43 61 72 64 45 6e 64 54 72 61 6e 73 61 63 SCardEndTransac 8ad0: 74 69 6f 6e 28 73 6c 6f 74 2d 3e 70 63 73 63 5f tion(slot->pcsc_ 8ae0: 63 61 72 64 2c 20 53 43 41 52 44 5f 4c 45 41 56 card, SCARD_LEAV 8af0: 45 5f 43 41 52 44 29 3b 0a 09 69 66 20 28 73 63 E_CARD);..if (sc 8b00: 61 72 64 5f 74 72 61 6e 73 5f 72 65 74 20 21 3d ard_trans_ret != 8b10: 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 SCARD_S_SUCCESS 8b20: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 8b30: 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 6c UG_PRINTF("Unabl 8b40: 65 20 74 6f 20 65 6e 64 20 74 72 61 6e 73 61 63 e to end transac 8b50: 74 69 6f 6e 2c 20 72 65 74 75 72 6e 69 6e 67 20 tion, returning 8b60: 69 6e 20 65 72 72 6f 72 22 29 3b 0a 0a 09 09 72 in error");....r 8b70: 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 eturn(CACKEY_PCS 8b80: 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d C_E_GENERIC);..} 8b90: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 8ba0: 50 52 49 4e 54 46 28 22 53 75 63 65 73 73 66 75 PRINTF("Sucessfu 8bb0: 6c 6c 79 20 74 65 72 6d 69 6e 61 74 65 64 20 74 lly terminated t 8bc0: 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 73 6c ransaction on sl 8bd0: 6f 74 20 28 25 73 29 22 2c 20 73 6c 6f 74 2d 3e ot (%s)", slot-> 8be0: 70 63 73 63 5f 72 65 61 64 65 72 29 3b 0a 0a 09 pcsc_reader);... 8bf0: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 8c00: 53 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 20 SC_S_OK);.}../* 8c10: 41 50 44 55 20 52 65 6c 61 74 65 64 20 46 75 6e APDU Related Fun 8c20: 63 74 69 6f 6e 73 20 2a 2f 0a 2f 2a 0a 20 2a 20 ctions */./*. * 8c30: 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 SYNPOSIS. * 8c40: 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 cackey_ret cacke 8c50: 79 5f 73 65 6e 64 5f 61 70 64 75 28 73 74 72 75 y_send_apdu(stru 8c60: 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a ct cackey_slot * 8c70: 73 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 slot, unsigned c 8c80: 68 61 72 20 63 6c 61 73 73 2c 20 75 6e 73 69 67 har class, unsig 8c90: 6e 65 64 20 63 68 61 72 20 69 6e 73 74 72 75 63 ned char instruc 8ca0: 74 69 6f 6e 2c 20 75 6e 73 69 67 6e 65 64 20 63 tion, unsigned c 8cb0: 68 61 72 20 70 31 2c 20 75 6e 73 69 67 6e 65 64 har p1, unsigned 8cc0: 20 63 68 61 72 20 70 32 2c 20 75 6e 73 69 67 6e char p2, unsign 8cd0: 65 64 20 63 68 61 72 20 6c 63 2c 20 75 6e 73 69 ed char lc, unsi 8ce0: 67 6e 65 64 20 63 68 61 72 20 2a 64 61 74 61 2c gned char *data, 8cf0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c unsigned char l 8d00: 65 2c 20 75 69 6e 74 31 36 5f 74 20 2a 72 65 73 e, uint16_t *res 8d10: 70 63 6f 64 65 2c 20 75 6e 73 69 67 6e 65 64 20 pcode, unsigned 8d20: 63 68 61 72 20 2a 72 65 73 70 64 61 74 61 2c 20 char *respdata, 8d30: 73 69 7a 65 5f 74 20 2a 72 65 73 70 64 61 74 61 size_t *respdata 8d40: 5f 6c 65 6e 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 _len);. *. * ARG 8d50: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 63 61 UMENTS. * ca 8d60: 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a ckey_slot *slot. 8d70: 20 2a 20 20 20 20 20 20 20 20 20 53 6c 6f 74 20 * Slot 8d80: 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 to send commands 8d90: 20 74 6f 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e to. *. * un 8da0: 73 69 67 6e 65 64 20 63 68 61 72 20 63 6c 61 73 signed char clas 8db0: 73 0a 20 2a 20 20 20 20 20 20 20 20 20 41 50 44 s. * APD 8dc0: 55 20 43 6c 61 73 73 20 28 47 53 43 49 53 5f 43 U Class (GSCIS_C 8dd0: 4c 41 53 53 5f 49 53 4f 37 38 31 36 20 6f 72 20 LASS_ISO7816 or 8de0: 47 53 43 49 53 5f 43 4c 41 53 53 5f 47 4c 4f 42 GSCIS_CLASS_GLOB 8df0: 41 4c 5f 50 4c 41 54 46 4f 52 4d 0a 20 2a 20 20 AL_PLATFORM. * 8e00: 20 20 20 20 20 20 20 75 73 75 61 6c 6c 79 29 2c usually), 8e10: 20 28 43 4c 41 29 0a 20 2a 0a 20 2a 20 20 20 20 (CLA). *. * 8e20: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 69 unsigned char i 8e30: 6e 73 74 72 75 63 74 69 6f 6e 0a 20 2a 20 20 20 nstruction. * 8e40: 20 20 20 20 20 20 41 50 44 55 20 49 6e 73 74 72 APDU Instr 8e50: 75 63 74 69 6f 6e 20 28 49 4e 53 29 0a 20 2a 0a uction (INS). *. 8e60: 20 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 * unsigned 8e70: 63 68 61 72 20 70 31 0a 20 2a 20 20 20 20 20 20 char p1. * 8e80: 20 20 20 41 50 44 55 20 50 61 72 61 6d 65 74 65 APDU Paramete 8e90: 72 20 31 20 28 50 31 29 0a 20 2a 0a 20 2a 20 20 r 1 (P1). *. * 8ea0: 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 unsigned char 8eb0: 20 70 32 0a 20 2a 20 20 20 20 20 20 20 20 20 41 p2. * A 8ec0: 50 44 55 20 50 61 72 61 6d 65 74 65 72 20 32 20 PDU Parameter 2 8ed0: 28 50 32 29 0a 20 2a 0a 20 2a 20 20 20 20 20 75 (P2). *. * u 8ee0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c 63 0a nsigned char lc. 8ef0: 20 2a 20 20 20 20 20 20 20 20 20 41 50 44 55 20 * APDU 8f00: 4c 65 6e 67 74 68 20 6f 66 20 43 6f 6e 74 65 6e Length of Conten 8f10: 74 20 28 4c 63 29 20 2d 2d 20 74 68 69 73 20 69 t (Lc) -- this i 8f20: 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 s the length of 8f30: 22 64 61 74 61 22 0a 20 2a 20 20 20 20 20 20 20 "data". * 8f40: 20 20 70 61 72 61 6d 65 74 65 72 2e 20 20 49 66 parameter. If 8f50: 20 22 64 61 74 61 22 20 69 73 20 73 70 65 63 69 "data" is speci 8f60: 66 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 74 68 fied as NULL, th 8f70: 69 73 20 70 61 72 61 6d 65 74 65 72 20 77 69 6c is parameter wil 8f80: 6c 0a 20 2a 20 20 20 20 20 20 20 20 20 62 65 20 l. * be 8f90: 69 67 6e 6f 72 65 64 2e 0a 20 2a 0a 20 2a 20 20 ignored.. *. * 8fa0: 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 unsigned char 8fb0: 20 2a 64 61 74 61 0a 20 2a 20 20 20 20 20 20 20 *data. * 8fc0: 20 20 50 6f 69 6e 74 65 72 20 74 6f 20 62 75 66 Pointer to buf 8fd0: 66 65 72 20 74 6f 20 73 65 6e 64 2e 20 20 49 74 fer to send. It 8fe0: 20 73 68 6f 75 6c 64 20 62 65 20 22 4c 63 22 20 should be "Lc" 8ff0: 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 49 66 0a bytes long. If. 9000: 20 2a 20 20 20 20 20 20 20 20 20 73 70 65 63 69 * speci 9010: 66 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 22 4c fied as NULL, "L 9020: 63 22 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 73 c" will not be s 9030: 65 6e 74 2c 20 61 6e 64 20 74 68 69 73 20 62 75 ent, and this bu 9040: 66 66 65 72 20 77 69 6c 6c 20 62 65 0a 20 2a 20 ffer will be. * 9050: 20 20 20 20 20 20 20 20 69 67 6e 6f 72 65 64 2e ignored. 9060: 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e 73 69 67 . *. * unsig 9070: 6e 65 64 20 63 68 61 72 20 6c 65 0a 20 2a 20 20 ned char le. * 9080: 20 20 20 20 20 20 20 41 50 44 55 20 4c 65 6e 67 APDU Leng 9090: 74 68 20 6f 66 20 45 78 70 65 63 74 61 74 69 6f th of Expectatio 90a0: 6e 20 28 4c 65 29 20 2d 2d 20 74 68 69 73 20 69 n (Le) -- this i 90b0: 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 s the length of 90c0: 74 68 65 0a 20 2a 20 20 20 20 20 20 20 20 20 65 the. * e 90d0: 78 70 65 63 74 65 64 20 72 65 70 6c 79 2e 20 20 xpected reply. 90e0: 49 66 20 74 68 69 73 20 69 73 20 73 70 65 63 69 If this is speci 90f0: 66 69 65 64 20 61 73 20 30 20 74 68 65 6e 20 69 fied as 0 then i 9100: 74 20 77 69 6c 6c 20 6e 6f 74 0a 20 2a 20 20 20 t will not. * 9110: 20 20 20 20 20 20 62 65 20 73 65 6e 74 2e 0a 20 be sent.. 9120: 2a 0a 20 2a 20 20 20 20 20 75 69 6e 74 31 36 5f *. * uint16_ 9130: 74 20 2a 72 65 73 70 63 6f 64 65 0a 20 2a 20 20 t *respcode. * 9140: 20 20 20 20 20 20 20 5b 4f 55 54 5d 20 50 6f 69 [OUT] Poi 9150: 6e 74 65 72 20 74 6f 20 73 74 6f 72 61 67 65 20 nter to storage 9160: 6f 66 20 41 50 44 55 20 72 65 73 70 6f 6e 73 65 of APDU response 9170: 20 63 6f 64 65 2e 20 20 49 66 20 74 68 69 73 20 code. If this 9180: 69 73 0a 20 2a 20 20 20 20 20 20 20 20 20 73 70 is. * sp 9190: 65 63 69 66 69 65 64 20 61 73 20 4e 55 4c 4c 2c ecified as NULL, 91a0: 20 74 68 65 20 72 65 73 70 6f 6e 73 65 20 63 6f the response co 91b0: 64 65 20 77 69 6c 6c 20 62 65 20 64 69 73 63 61 de will be disca 91c0: 72 64 65 64 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 rded.. *. * 91d0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 72 unsigned char *r 91e0: 65 73 70 64 61 74 61 0a 20 2a 20 20 20 20 20 20 espdata. * 91f0: 20 20 20 5b 4f 55 54 5d 20 50 6f 69 6e 74 65 72 [OUT] Pointer 9200: 20 74 6f 20 73 74 6f 72 61 67 65 20 6f 66 20 41 to storage of A 9210: 50 44 55 20 72 65 73 70 6f 6e 73 65 20 64 61 74 PDU response dat 9220: 61 2e 20 20 49 66 20 74 68 69 73 20 69 73 0a 20 a. If this is. 9230: 2a 20 20 20 20 20 20 20 20 20 73 70 65 63 69 66 * specif 9240: 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 74 68 65 ied as NULL, the 9250: 20 72 65 73 70 6f 6e 73 65 20 64 61 74 61 20 77 response data w 9260: 69 6c 6c 20 62 65 20 64 69 73 63 61 72 64 65 64 ill be discarded 9270: 2e 20 20 49 66 0a 20 2a 20 20 20 20 20 20 20 20 . If. * 9280: 20 74 68 65 20 22 72 65 73 70 64 61 74 61 5f 6c the "respdata_l 9290: 65 6e 22 20 70 61 72 61 6d 65 74 65 72 20 69 73 en" parameter is 92a0: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 4e 55 specified as NU 92b0: 4c 4c 2c 20 74 68 69 73 20 62 75 66 66 65 72 0a LL, this buffer. 92c0: 20 2a 20 20 20 20 20 20 20 20 20 77 69 6c 6c 20 * will 92d0: 6e 6f 74 20 62 65 20 75 70 64 61 74 65 64 2e 0a not be updated.. 92e0: 20 2a 0a 20 2a 20 20 20 20 20 73 69 7a 65 5f 74 *. * size_t 92f0: 20 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e 0a 20 *respdata_len. 9300: 2a 20 20 20 20 20 20 20 20 20 5b 49 4e 2c 20 4f * [IN, O 9310: 55 54 5d 20 50 6f 69 6e 74 65 72 20 69 6e 69 74 UT] Pointer init 9320: 69 61 6c 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e ialing containin 9330: 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 g the size of th 9340: 65 20 22 72 65 73 70 64 61 74 61 22 0a 20 2a 20 e "respdata". * 9350: 20 20 20 20 20 20 20 20 62 75 66 66 65 72 2e 20 buffer. 9360: 20 42 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e Before returnin 9370: 67 2c 20 74 68 65 20 70 6f 69 6e 74 65 64 20 74 g, the pointed t 9380: 6f 20 76 61 6c 75 65 20 69 73 20 75 70 64 61 74 o value is updat 9390: 65 64 20 74 6f 20 74 68 65 0a 20 2a 20 20 20 20 ed to the. * 93a0: 20 20 20 20 20 6e 75 6d 62 65 72 20 6f 66 20 62 number of b 93b0: 79 74 65 73 20 77 72 69 74 74 65 6e 20 74 6f 20 ytes written to 93c0: 74 68 65 20 62 75 66 66 65 72 2e 20 20 49 66 20 the buffer. If 93d0: 74 68 69 73 20 69 73 20 73 70 65 63 69 66 69 65 this is specifie 93e0: 64 20 61 73 0a 20 2a 20 20 20 20 20 20 20 20 20 d as. * 93f0: 4e 55 4c 4c 2c 20 69 74 20 77 69 6c 6c 20 6e 6f NULL, it will no 9400: 74 20 62 65 20 75 70 64 61 74 65 64 2c 20 61 6e t be updated, an 9410: 64 20 22 72 65 73 70 64 61 74 61 22 20 77 69 6c d "respdata" wil 9420: 6c 20 62 65 20 69 67 6e 6f 72 65 64 20 63 61 75 l be ignored cau 9430: 73 69 6e 67 0a 20 2a 20 20 20 20 20 20 20 20 20 sing. * 9440: 74 68 65 20 72 65 73 70 6f 6e 73 65 20 64 61 74 the response dat 9450: 61 20 74 6f 20 62 65 20 64 69 73 63 61 72 64 65 a to be discarde 9460: 64 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 d.. *. * RETURN 9470: 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 43 41 43 VALUE. * CAC 9480: 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 20 KEY_PCSC_S_OK 9490: 20 20 20 20 20 20 20 20 4f 6e 20 73 75 63 63 65 On succe 94a0: 73 73 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 ss. * CACKEY 94b0: 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 20 _PCSC_E_GENERIC 94c0: 20 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 2a On error. * 94d0: 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 CACKEY_PCSC 94e0: 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 20 20 _E_TOKENABSENT 94f0: 49 66 20 74 68 65 20 73 65 6e 64 69 6e 67 20 66 If the sending f 9500: 61 69 6c 65 64 20 62 65 63 61 75 73 65 20 74 68 ailed because th 9510: 65 20 74 6f 6b 65 6e 20 69 73 0a 20 2a 20 20 20 e token is. * 9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9530: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 62 73 abs 9540: 65 6e 74 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a ent. *. * NOTES. 9550: 20 2a 20 20 20 20 20 54 68 69 73 20 66 75 6e 63 * This func 9560: 74 69 6f 6e 20 77 69 6c 6c 20 63 6f 6e 6e 65 63 tion will connec 9570: 74 20 74 6f 20 74 68 65 20 50 43 2f 53 43 20 43 t to the PC/SC C 9580: 6f 6e 6e 65 63 74 69 6f 6e 20 4d 61 6e 61 67 65 onnection Manage 9590: 72 20 76 69 61 0a 20 2a 20 20 20 20 20 63 61 63 r via. * cac 95a0: 6b 65 79 5f 70 63 73 63 5f 63 6f 6e 6e 65 63 74 key_pcsc_connect 95b0: 28 29 20 69 66 20 6e 65 65 64 65 64 2e 0a 20 2a () if needed.. * 95c0: 0a 20 2a 20 20 20 20 20 49 74 20 77 69 6c 6c 20 . * It will 95d0: 63 6f 6e 6e 65 63 74 20 74 6f 20 74 68 65 20 63 connect to the c 95e0: 61 72 64 20 69 6e 20 74 68 65 20 72 65 61 64 65 ard in the reade 95f0: 72 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 r attached to th 9600: 65 20 73 6c 6f 74 0a 20 2a 20 20 20 20 20 73 70 e slot. * sp 9610: 65 63 69 66 69 65 64 2e 20 20 49 74 20 77 69 6c ecified. It wil 9620: 6c 20 72 65 63 6f 6e 6e 65 63 74 20 74 6f 20 74 l reconnect to t 9630: 68 65 20 63 61 72 64 20 69 66 20 74 68 65 20 63 he card if the c 9640: 6f 6e 6e 65 63 74 69 6f 6e 0a 20 2a 20 20 20 20 onnection. * 9650: 20 67 6f 65 73 20 61 77 61 79 2e 0a 20 2a 0a 20 goes away.. *. 9660: 2a 2f 0a 73 74 61 74 69 63 20 63 61 63 6b 65 79 */.static cackey 9670: 5f 72 65 74 20 63 61 63 6b 65 79 5f 73 65 6e 64 _ret cackey_send 9680: 5f 61 70 64 75 28 73 74 72 75 63 74 20 63 61 63 _apdu(struct cac 9690: 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 key_slot *slot, 96a0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 6c unsigned char cl 96b0: 61 73 73 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 ass, unsigned ch 96c0: 61 72 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 ar instruction, 96d0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 70 31 unsigned char p1 96e0: 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 , unsigned char 96f0: 70 32 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 p2, unsigned cha 9700: 72 20 6c 63 2c 20 75 6e 73 69 67 6e 65 64 20 63 r lc, unsigned c 9710: 68 61 72 20 2a 64 61 74 61 2c 20 75 6e 73 69 67 har *data, unsig 9720: 6e 65 64 20 63 68 61 72 20 6c 65 2c 20 75 69 6e ned char le, uin 9730: 74 31 36 5f 74 20 2a 72 65 73 70 63 6f 64 65 2c t16_t *respcode, 9740: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a unsigned char * 9750: 72 65 73 70 64 61 74 61 2c 20 73 69 7a 65 5f 74 respdata, size_t 9760: 20 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e 29 20 *respdata_len) 9770: 7b 0a 09 75 69 6e 74 38 5f 74 20 6d 61 6a 6f 72 {..uint8_t major 9780: 5f 72 63 2c 20 6d 69 6e 6f 72 5f 72 63 3b 0a 09 _rc, minor_rc;.. 9790: 73 69 7a 65 5f 74 20 62 79 74 65 73 5f 74 6f 5f size_t bytes_to_ 97a0: 63 6f 70 79 2c 20 74 6d 70 5f 72 65 73 70 64 61 copy, tmp_respda 97b0: 74 61 5f 6c 65 6e 3b 0a 09 4c 50 43 53 43 41 52 ta_len;..LPCSCAR 97c0: 44 5f 49 4f 5f 52 45 51 55 45 53 54 20 70 69 6f D_IO_REQUEST pio 97d0: 53 65 6e 64 50 63 69 3b 0a 09 44 57 4f 52 44 20 SendPci;..DWORD 97e0: 70 72 6f 74 6f 63 6f 6c 3b 0a 09 44 57 4f 52 44 protocol;..DWORD 97f0: 20 78 6d 69 74 5f 6c 65 6e 2c 20 72 65 63 76 5f xmit_len, recv_ 9800: 6c 65 6e 3b 0a 09 4c 4f 4e 47 20 73 63 61 72 64 len;..LONG scard 9810: 5f 78 6d 69 74 5f 72 65 74 2c 20 73 63 61 72 64 _xmit_ret, scard 9820: 5f 72 65 63 6f 6e 6e 5f 72 65 74 3b 0a 09 42 59 _reconn_ret;..BY 9830: 54 45 20 78 6d 69 74 5f 62 75 66 5b 31 30 32 34 TE xmit_buf[1024 9840: 5d 2c 20 72 65 63 76 5f 62 75 66 5b 31 30 32 34 ], recv_buf[1024 9850: 5d 3b 0a 09 69 6e 74 20 70 63 73 63 5f 63 6f 6e ];..int pcsc_con 9860: 6e 65 63 74 5f 72 65 74 2c 20 70 63 73 63 5f 67 nect_ret, pcsc_g 9870: 65 74 72 65 73 70 5f 72 65 74 3b 0a 09 69 6e 74 etresp_ret;..int 9880: 20 69 64 78 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 idx;...CACKEY_D 9890: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 98a0: 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 73 led.");...if (!s 98b0: 6c 6f 74 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f lot) {...CACKEY_ 98c0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 49 6e DEBUG_PRINTF("In 98d0: 76 61 6c 69 64 20 73 6c 6f 74 20 73 70 65 63 69 valid slot speci 98e0: 66 69 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 fied.");....retu 98f0: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 9900: 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 _GENERIC);..}... 9910: 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 pcsc_connect_ret 9920: 20 3d 20 63 61 63 6b 65 79 5f 63 6f 6e 6e 65 63 = cackey_connec 9930: 74 5f 63 61 72 64 28 73 6c 6f 74 29 3b 0a 09 69 t_card(slot);..i 9940: 66 20 28 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f f (pcsc_connect_ 9950: 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 ret != CACKEY_PC 9960: 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 SC_S_OK) {...CAC 9970: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 9980: 28 22 55 6e 61 62 6c 65 20 74 6f 20 63 6f 6e 6e ("Unable to conn 9990: 65 63 74 20 74 6f 20 63 61 72 64 2c 20 72 65 74 ect to card, ret 99a0: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 99b0: 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 e");....return(C 99c0: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e ACKEY_PCSC_E_GEN 99d0: 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 44 ERIC);..}.../* D 99e0: 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20 70 etermine which p 99f0: 72 6f 74 6f 63 6f 6c 20 74 6f 20 73 65 6e 64 20 rotocol to send 9a00: 75 73 69 6e 67 20 2a 2f 0a 09 73 77 69 74 63 68 using */..switch 9a10: 20 28 73 6c 6f 74 2d 3e 70 72 6f 74 6f 63 6f 6c (slot->protocol 9a20: 29 20 7b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ) {...case SCARD 9a30: 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 3a 0a 09 09 _PROTOCOL_T0:... 9a40: 09 70 69 6f 53 65 6e 64 50 63 69 20 3d 20 53 43 .pioSendPci = SC 9a50: 41 52 44 5f 50 43 49 5f 54 30 3b 0a 0a 09 09 09 ARD_PCI_T0;..... 9a60: 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 53 43 break;...case SC 9a70: 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31 3a ARD_PROTOCOL_T1: 9a80: 0a 09 09 09 70 69 6f 53 65 6e 64 50 63 69 20 3d ....pioSendPci = 9a90: 20 53 43 41 52 44 5f 50 43 49 5f 54 31 3b 0a 0a SCARD_PCI_T1;.. 9aa0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 64 65 66 61 ...break;...defa 9ab0: 75 6c 74 3a 0a 09 09 09 43 41 43 4b 45 59 5f 44 ult:....CACKEY_D 9ac0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 49 6e 76 EBUG_PRINTF("Inv 9ad0: 61 6c 69 64 20 70 72 6f 74 6f 63 6f 6c 20 66 6f alid protocol fo 9ae0: 75 6e 64 2c 20 61 62 6f 72 74 69 6e 67 2e 22 29 und, aborting.") 9af0: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 41 43 ;.....return(CAC 9b00: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 9b10: 49 43 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 54 72 61 IC);..}.../* Tra 9b20: 6e 73 6d 69 74 20 2a 2f 0a 09 78 6d 69 74 5f 6c nsmit */..xmit_l 9b30: 65 6e 20 3d 20 30 3b 0a 09 78 6d 69 74 5f 62 75 en = 0;..xmit_bu 9b40: 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 f[xmit_len++] = 9b50: 63 6c 61 73 73 3b 0a 09 78 6d 69 74 5f 62 75 66 class;..xmit_buf 9b60: 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 69 [xmit_len++] = i 9b70: 6e 73 74 72 75 63 74 69 6f 6e 3b 0a 09 78 6d 69 nstruction;..xmi 9b80: 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b t_buf[xmit_len++ 9b90: 5d 20 3d 20 70 31 3b 0a 09 78 6d 69 74 5f 62 75 ] = p1;..xmit_bu 9ba0: 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 f[xmit_len++] = 9bb0: 70 32 3b 0a 09 69 66 20 28 64 61 74 61 29 20 7b p2;..if (data) { 9bc0: 0a 09 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 ...xmit_buf[xmit 9bd0: 5f 6c 65 6e 2b 2b 5d 20 3d 20 6c 63 3b 0a 09 09 _len++] = lc;... 9be0: 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 for (idx = 0; id 9bf0: 78 20 3c 20 6c 63 3b 20 69 64 78 2b 2b 29 20 7b x < lc; idx++) { 9c00: 0a 09 09 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 ....xmit_buf[xmi 9c10: 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 64 61 74 61 5b t_len++] = data[ 9c20: 69 64 78 5d 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 idx];...}..}...i 9c30: 66 20 28 6c 65 20 21 3d 20 30 78 30 30 29 20 7b f (le != 0x00) { 9c40: 0a 09 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 ...xmit_buf[xmit 9c50: 5f 6c 65 6e 2b 2b 5d 20 3d 20 6c 65 3b 0a 09 7d _len++] = le;..} 9c60: 0a 0a 09 2f 2a 20 42 65 67 69 6e 20 53 6d 61 72 .../* Begin Smar 9c70: 74 63 61 72 64 20 54 72 61 6e 73 61 63 74 69 6f tcard Transactio 9c80: 6e 20 2a 2f 0a 09 63 61 63 6b 65 79 5f 62 65 67 n */..cackey_beg 9c90: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 in_transaction(s 9ca0: 6c 6f 74 29 3b 0a 0a 09 69 66 20 28 63 6c 61 73 lot);...if (clas 9cb0: 73 20 3d 3d 20 47 53 43 49 53 5f 43 4c 41 53 53 s == GSCIS_CLASS 9cc0: 5f 49 53 4f 37 38 31 36 20 26 26 20 69 6e 73 74 _ISO7816 && inst 9cd0: 72 75 63 74 69 6f 6e 20 3d 3d 20 47 53 43 49 53 ruction == GSCIS 9ce0: 5f 49 4e 53 54 52 5f 56 45 52 49 46 59 20 26 26 _INSTR_VERIFY && 9cf0: 20 70 31 20 3d 3d 20 30 78 30 30 20 26 26 20 70 p1 == 0x00 && p 9d00: 32 20 3d 3d 20 30 78 30 30 29 20 7b 0a 09 09 43 2 == 0x00) {...C 9d10: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 9d20: 54 46 28 22 53 65 6e 64 69 6e 67 20 41 50 44 55 TF("Sending APDU 9d30: 3a 20 3c 3c 63 65 6e 73 6f 72 65 64 3e 3e 22 29 : <<censored>>") 9d40: 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 43 41 ;..} else {...CA 9d50: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 9d60: 42 55 46 28 22 53 65 6e 64 69 6e 67 20 41 50 44 BUF("Sending APD 9d70: 55 3a 22 2c 20 78 6d 69 74 5f 62 75 66 2c 20 78 U:", xmit_buf, x 9d80: 6d 69 74 5f 6c 65 6e 29 3b 0a 09 7d 0a 0a 09 72 mit_len);..}...r 9d90: 65 63 76 5f 6c 65 6e 20 3d 20 73 69 7a 65 6f 66 ecv_len = sizeof 9da0: 28 72 65 63 76 5f 62 75 66 29 3b 0a 09 73 63 61 (recv_buf);..sca 9db0: 72 64 5f 78 6d 69 74 5f 72 65 74 20 3d 20 53 43 rd_xmit_ret = SC 9dc0: 61 72 64 54 72 61 6e 73 6d 69 74 28 73 6c 6f 74 ardTransmit(slot 9dd0: 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 70 69 6f ->pcsc_card, pio 9de0: 53 65 6e 64 50 63 69 2c 20 78 6d 69 74 5f 62 75 SendPci, xmit_bu 9df0: 66 2c 20 78 6d 69 74 5f 6c 65 6e 2c 20 4e 55 4c f, xmit_len, NUL 9e00: 4c 2c 20 72 65 63 76 5f 62 75 66 2c 20 26 72 65 L, recv_buf, &re 9e10: 63 76 5f 6c 65 6e 29 3b 0a 0a 09 69 66 20 28 73 cv_len);...if (s 9e20: 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 20 3d 3d card_xmit_ret == 9e30: 20 53 43 41 52 44 5f 45 5f 4e 4f 54 5f 54 52 41 SCARD_E_NOT_TRA 9e40: 4e 53 41 43 54 45 44 29 20 7b 0a 09 09 43 41 43 NSACTED) {...CAC 9e50: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 9e60: 28 22 46 61 69 6c 65 64 20 74 6f 20 73 65 6e 64 ("Failed to send 9e70: 20 41 50 44 55 20 74 6f 20 63 61 72 64 20 28 53 APDU to card (S 9e80: 43 61 72 64 54 72 61 6e 73 6d 69 74 28 29 20 3d CardTransmit() = 9e90: 20 25 73 2f 25 6c 78 29 2c 20 77 69 6c 6c 20 61 %s/%lx), will a 9ea0: 73 6b 20 63 61 6c 6c 69 6e 67 20 66 75 6e 63 74 sk calling funct 9eb0: 69 6f 6e 20 74 6f 20 72 65 74 72 79 20 28 6e 6f ion to retry (no 9ec0: 74 20 72 65 73 65 74 74 69 6e 67 20 63 61 72 64 t resetting card 9ed0: 29 2e 2e 2e 22 2c 20 43 41 43 4b 45 59 5f 44 45 )...", CACKEY_DE 9ee0: 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 BUG_FUNC_SCARDER 9ef0: 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f 78 R_TO_STR(scard_x 9f00: 6d 69 74 5f 72 65 74 29 2c 20 28 75 6e 73 69 67 mit_ret), (unsig 9f10: 6e 65 64 20 6c 6f 6e 67 29 20 73 63 61 72 64 5f ned long) scard_ 9f20: 78 6d 69 74 5f 72 65 74 29 3b 0a 0a 09 09 2f 2a xmit_ret);..../* 9f30: 20 42 65 67 69 6e 20 53 6d 61 72 74 63 61 72 64 Begin Smartcard 9f40: 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a Transaction */. 9f50: 09 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 ..cackey_end_tra 9f60: 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a nsaction(slot);. 9f70: 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 9f80: 5f 50 43 53 43 5f 45 5f 52 45 54 52 59 29 3b 0a _PCSC_E_RETRY);. 9f90: 09 7d 0a 0a 09 69 66 20 28 73 63 61 72 64 5f 78 .}...if (scard_x 9fa0: 6d 69 74 5f 72 65 74 20 21 3d 20 53 43 41 52 44 mit_ret != SCARD 9fb0: 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 _S_SUCCESS) {... 9fc0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 9fd0: 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 73 NTF("Failed to s 9fe0: 65 6e 64 20 41 50 44 55 20 74 6f 20 63 61 72 64 end APDU to card 9ff0: 20 28 53 43 61 72 64 54 72 61 6e 73 6d 69 74 28 (SCardTransmit( a000: 29 20 3d 20 25 73 2f 25 6c 78 29 22 2c 20 43 41 ) = %s/%lx)", CA a010: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ a020: 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 SCARDERR_TO_STR( a030: 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 2c scard_xmit_ret), a040: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) a050: 20 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 scard_xmit_ret) a060: 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU a070: 47 5f 50 52 49 4e 54 46 28 22 4d 61 72 6b 69 6e G_PRINTF("Markin a080: 67 20 73 6c 6f 74 20 61 73 20 68 61 76 69 6e 67 g slot as having a090: 20 62 65 65 6e 20 72 65 73 65 74 22 29 3b 0a 09 been reset");.. a0a0: 09 63 61 63 6b 65 79 5f 6d 61 72 6b 5f 73 6c 6f .cackey_mark_slo a0b0: 74 5f 72 65 73 65 74 28 73 6c 6f 74 29 3b 0a 0a t_reset(slot);.. a0c0: 09 09 69 66 20 28 73 63 61 72 64 5f 78 6d 69 74 ..if (scard_xmit a0d0: 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f 57 5f _ret == SCARD_W_ a0e0: 52 45 53 45 54 5f 43 41 52 44 29 20 7b 0a 09 09 RESET_CARD) {... a0f0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR a100: 49 4e 54 46 28 22 52 65 73 65 74 20 72 65 71 75 INTF("Reset requ a110: 69 72 65 64 2c 20 70 6c 65 61 73 65 20 68 6f 6c ired, please hol a120: 64 2e 2e 2e 22 29 3b 0a 0a 09 09 09 73 63 61 72 d...");.....scar a130: 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 20 3d 20 63 d_reconn_ret = c a140: 61 63 6b 65 79 5f 72 65 63 6f 6e 6e 65 63 74 5f ackey_reconnect_ a150: 63 61 72 64 28 73 6c 6f 74 2c 20 53 43 41 52 44 card(slot, SCARD a160: 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 20 7c 20 53 _PROTOCOL_T0 | S a170: 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31 CARD_PROTOCOL_T1 a180: 2c 20 26 70 72 6f 74 6f 63 6f 6c 29 3b 0a 0a 09 , &protocol);... a190: 09 09 69 66 20 28 73 63 61 72 64 5f 72 65 63 6f ..if (scard_reco a1a0: 6e 6e 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f nn_ret == SCARD_ a1b0: 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 S_SUCCESS) {.... a1c0: 09 2f 2a 20 55 70 64 61 74 65 20 70 72 6f 74 6f ./* Update proto a1d0: 63 6f 6c 20 2a 2f 0a 09 09 09 09 73 6c 6f 74 2d col */.....slot- a1e0: 3e 70 72 6f 74 6f 63 6f 6c 20 3d 20 70 72 6f 74 >protocol = prot a1f0: 6f 63 6f 6c 3b 0a 09 09 09 09 73 77 69 74 63 68 ocol;.....switch a200: 20 28 73 6c 6f 74 2d 3e 70 72 6f 74 6f 63 6f 6c (slot->protocol a210: 29 20 7b 0a 09 09 09 09 09 63 61 73 65 20 53 43 ) {......case SC a220: 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 3a ARD_PROTOCOL_T0: a230: 0a 09 09 09 09 09 09 70 69 6f 53 65 6e 64 50 63 .......pioSendPc a240: 69 20 3d 20 53 43 41 52 44 5f 50 43 49 5f 54 30 i = SCARD_PCI_T0 a250: 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a ;........break;. a260: 09 09 09 09 09 63 61 73 65 20 53 43 41 52 44 5f .....case SCARD_ a270: 50 52 4f 54 4f 43 4f 4c 5f 54 31 3a 0a 09 09 09 PROTOCOL_T1:.... a280: 09 09 09 70 69 6f 53 65 6e 64 50 63 69 20 3d 20 ...pioSendPci = a290: 53 43 41 52 44 5f 50 43 49 5f 54 31 3b 0a 0a 09 SCARD_PCI_T1;... a2a0: 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 .....break;..... a2b0: 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 09 09 09 .default:....... a2c0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI a2d0: 4e 54 46 28 22 49 6e 76 61 6c 69 64 20 70 72 6f NTF("Invalid pro a2e0: 74 6f 63 6f 6c 20 66 6f 75 6e 64 2c 20 62 75 74 tocol found, but a2f0: 20 74 6f 6f 20 6c 61 74 65 20 74 6f 20 64 6f 20 too late to do a300: 61 6e 79 74 68 69 6e 67 20 61 62 6f 75 74 20 69 anything about i a310: 74 20 6e 6f 77 20 2d 2d 20 74 72 79 69 6e 67 20 t now -- trying a320: 61 6e 79 77 61 79 2e 22 29 3b 0a 0a 09 09 09 09 anyway.");...... a330: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a ..break;.....}.. a340: 09 09 09 09 2f 2a 20 52 65 2d 65 73 74 61 62 6c ..../* Re-establ a350: 69 73 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c ish transaction, a360: 20 69 66 20 69 74 20 77 61 73 20 70 72 65 73 65 if it was prese a370: 6e 74 20 2a 2f 0a 09 09 09 09 69 66 20 28 73 6c nt */.....if (sl a380: 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f ot->transaction_ a390: 64 65 70 74 68 20 3e 20 30 29 20 7b 0a 09 09 09 depth > 0) {.... a3a0: 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 ..slot->transact a3b0: 69 6f 6e 5f 64 65 70 74 68 2d 2d 3b 0a 09 09 09 ion_depth--;.... a3c0: 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 ..slot->transact a3d0: 69 6f 6e 5f 6e 65 65 64 5f 68 77 5f 6c 6f 63 6b ion_need_hw_lock a3e0: 20 3d 20 31 3b 0a 09 09 09 09 09 63 61 63 6b 65 = 1;......cacke a3f0: 79 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 y_begin_transact a400: 69 6f 6e 28 73 6c 6f 74 29 3b 0a 09 09 09 09 7d ion(slot);.....} a410: 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB a420: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 73 65 74 UG_PRINTF("Reset a430: 20 73 75 63 63 65 73 73 66 75 6c 2c 20 72 65 74 successful, ret a440: 72 61 6e 73 6d 69 74 74 69 6e 67 22 29 3b 0a 0a ransmitting");.. a450: 09 09 09 09 72 65 63 76 5f 6c 65 6e 20 3d 20 73 ....recv_len = s a460: 69 7a 65 6f 66 28 72 65 63 76 5f 62 75 66 29 3b izeof(recv_buf); a470: 0a 09 09 09 09 73 63 61 72 64 5f 78 6d 69 74 5f .....scard_xmit_ a480: 72 65 74 20 3d 20 53 43 61 72 64 54 72 61 6e 73 ret = SCardTrans a490: 6d 69 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 mit(slot->pcsc_c a4a0: 61 72 64 2c 20 70 69 6f 53 65 6e 64 50 63 69 2c ard, pioSendPci, a4b0: 20 78 6d 69 74 5f 62 75 66 2c 20 78 6d 69 74 5f xmit_buf, xmit_ a4c0: 6c 65 6e 2c 20 4e 55 4c 4c 2c 20 72 65 63 76 5f len, NULL, recv_ a4d0: 62 75 66 2c 20 26 72 65 63 76 5f 6c 65 6e 29 3b buf, &recv_len); a4e0: 0a 0a 09 09 09 09 69 66 20 28 73 63 61 72 64 5f ......if (scard_ a4f0: 78 6d 69 74 5f 72 65 74 20 21 3d 20 53 43 41 52 xmit_ret != SCAR a500: 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 D_S_SUCCESS) {.. a510: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG a520: 5f 50 52 49 4e 54 46 28 22 52 65 74 72 61 6e 73 _PRINTF("Retrans a530: 6d 69 74 20 66 61 69 6c 65 64 2c 20 72 65 74 75 mit failed, retu a540: 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 rning in failure a550: 20 61 66 74 65 72 20 64 69 73 63 6f 6e 6e 65 63 after disconnec a560: 74 69 6e 67 20 74 68 65 20 63 61 72 64 20 28 53 ting the card (S a570: 43 61 72 64 54 72 61 6e 73 6d 69 74 20 3d 20 25 CardTransmit = % a580: 73 2f 25 6c 69 29 22 2c 20 43 41 43 4b 45 59 5f s/%li)", CACKEY_ a590: 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 DEBUG_FUNC_SCARD a5a0: 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 ERR_TO_STR(scard a5b0: 5f 78 6d 69 74 5f 72 65 74 29 2c 20 28 6c 6f 6e _xmit_ret), (lon a5c0: 67 29 20 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 g) scard_xmit_re a5d0: 74 29 3b 0a 0a 09 09 09 09 09 53 43 61 72 64 44 t);.......SCardD a5e0: 69 73 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e isconnect(slot-> a5f0: 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 pcsc_card, SCARD a600: 5f 4c 45 41 56 45 5f 43 41 52 44 29 3b 0a 09 09 _LEAVE_CARD);... a610: 09 09 09 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 ...slot->pcsc_ca a620: 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 rd_connected = 0 a630: 3b 0a 0a 09 09 09 09 09 2f 2a 20 45 6e 64 20 53 ;......./* End S a640: 6d 61 72 74 63 61 72 64 20 54 72 61 6e 73 61 63 martcard Transac a650: 74 69 6f 6e 20 2a 2f 0a 09 09 09 09 09 73 6c 6f tion */......slo a660: 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 t->transaction_d a670: 65 70 74 68 20 3d 20 31 3b 0a 09 09 09 09 09 63 epth = 1;......c a680: 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 ackey_end_transa a690: 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 ction(slot);.... a6a0: 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY a6b0: 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 _PCSC_E_TOKENABS a6c0: 45 4e 54 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d ENT);.....}....} a6d0: 20 65 6c 73 65 20 7b 0a 09 09 09 09 43 41 43 4b else {.....CACK a6e0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( a6f0: 22 44 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 63 "Disconnecting c a700: 61 72 64 22 29 3b 0a 0a 09 09 09 09 53 43 61 72 ard");......SCar a710: 64 44 69 73 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 dDisconnect(slot a720: 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 ->pcsc_card, SCA a730: 52 44 5f 4c 45 41 56 45 5f 43 41 52 44 29 3b 0a RD_LEAVE_CARD);. a740: 09 09 09 09 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 ....slot->pcsc_c a750: 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 ard_connected = a760: 30 3b 0a 0a 09 09 09 09 2f 2a 20 45 6e 64 20 53 0;....../* End S a770: 6d 61 72 74 63 61 72 64 20 54 72 61 6e 73 61 63 martcard Transac a780: 74 69 6f 6e 20 2a 2f 0a 09 09 09 09 73 6c 6f 74 tion */.....slot a790: 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 ->transaction_de a7a0: 70 74 68 20 3d 20 31 3b 0a 09 09 09 09 63 61 63 pth = 1;.....cac a7b0: 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 key_end_transact a7c0: 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 09 09 ion(slot);...... a7d0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI a7e0: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 NTF("Returning i a7f0: 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 09 09 09 n failure");.... a800: 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 .return(CACKEY_P a810: 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 4e CSC_E_TOKENABSEN a820: 54 29 3b 0a 09 09 09 7d 0a 09 09 7d 20 65 6c 73 T);....}...} els a830: 65 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 e {....CACKEY_DE a840: 42 55 47 5f 50 52 49 4e 54 46 28 22 44 69 73 63 BUG_PRINTF("Disc a850: 6f 6e 6e 65 63 74 69 6e 67 20 63 61 72 64 22 29 onnecting card") a860: 3b 0a 0a 09 09 09 53 43 61 72 64 44 69 73 63 6f ;.....SCardDisco a870: 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 nnect(slot->pcsc a880: 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 4c 45 41 _card, SCARD_LEA a890: 56 45 5f 43 41 52 44 29 3b 0a 09 09 09 73 6c 6f VE_CARD);....slo a8a0: 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e t->pcsc_card_con a8b0: 6e 65 63 74 65 64 20 3d 20 30 3b 0a 0a 09 09 09 nected = 0;..... a8c0: 2f 2a 20 45 6e 64 20 53 6d 61 72 74 63 61 72 64 /* End Smartcard a8d0: 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a Transaction */. a8e0: 09 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 ...slot->transac a8f0: 74 69 6f 6e 5f 64 65 70 74 68 20 3d 20 31 3b 0a tion_depth = 1;. a900: 09 09 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 ...cackey_end_tr a910: 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b ansaction(slot); a920: 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU a930: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return a940: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") a950: 3b 0a 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b ;....return(CACK a960: 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 EY_PCSC_E_TOKENA a970: 42 53 45 4e 54 29 3b 0a 09 09 7d 0a 09 7d 0a 0a BSENT);...}..}.. a980: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR a990: 49 4e 54 42 55 46 28 22 52 65 74 75 72 6e 65 64 INTBUF("Returned a9a0: 20 56 61 6c 75 65 3a 22 2c 20 72 65 63 76 5f 62 Value:", recv_b a9b0: 75 66 2c 20 72 65 63 76 5f 6c 65 6e 29 3b 0a 0a uf, recv_len);.. a9c0: 09 69 66 20 28 72 65 63 76 5f 6c 65 6e 20 3c 20 .if (recv_len < a9d0: 32 29 20 7b 0a 09 09 2f 2a 20 4d 69 6e 69 6d 61 2) {.../* Minima a9e0: 6c 20 72 65 73 70 6f 6e 73 65 20 6c 65 6e 67 74 l response lengt a9f0: 68 20 69 73 20 32 20 62 79 74 65 73 2c 20 72 65 h is 2 bytes, re aa00: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu aa10: 72 65 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 re */...CACKEY_D aa20: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 73 EBUG_PRINTF("Res aa30: 70 6f 6e 73 65 20 74 6f 6f 20 73 6d 61 6c 6c 2c ponse too small, aa40: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 returning in fa aa50: 69 6c 75 72 65 20 28 72 65 63 76 5f 6c 65 6e 20 ilure (recv_len aa60: 3d 20 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e = %lu)", (unsign aa70: 65 64 20 6c 6f 6e 67 29 20 72 65 63 76 5f 6c 65 ed long) recv_le aa80: 6e 29 3b 0a 0a 09 09 2f 2a 20 45 6e 64 20 53 6d n);..../* End Sm aa90: 61 72 74 63 61 72 64 20 54 72 61 6e 73 61 63 74 artcard Transact aaa0: 69 6f 6e 20 2a 2f 0a 09 09 63 61 63 6b 65 79 5f ion */...cackey_ aab0: 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 end_transaction( aac0: 73 6c 6f 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e slot);....return aad0: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 (CACKEY_PCSC_E_G aae0: 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 2f 2a ENERIC);..}.../* aaf0: 20 44 65 74 65 72 6d 69 6e 65 20 72 65 73 75 6c Determine resul ab00: 74 20 63 6f 64 65 20 2a 2f 0a 09 6d 61 6a 6f 72 t code */..major ab10: 5f 72 63 20 3d 20 72 65 63 76 5f 62 75 66 5b 72 _rc = recv_buf[r ab20: 65 63 76 5f 6c 65 6e 20 2d 20 32 5d 3b 0a 09 6d ecv_len - 2];..m ab30: 69 6e 6f 72 5f 72 63 20 3d 20 72 65 63 76 5f 62 inor_rc = recv_b ab40: 75 66 5b 72 65 63 76 5f 6c 65 6e 20 2d 20 31 5d uf[recv_len - 1] ab50: 3b 0a 09 69 66 20 28 72 65 73 70 63 6f 64 65 29 ;..if (respcode) ab60: 20 7b 0a 09 09 2a 72 65 73 70 63 6f 64 65 20 3d {...*respcode = ab70: 20 28 6d 61 6a 6f 72 5f 72 63 20 3c 3c 20 38 29 (major_rc << 8) ab80: 20 7c 20 6d 69 6e 6f 72 5f 72 63 3b 0a 09 7d 0a | minor_rc;..}. ab90: 0a 09 2f 2a 20 41 64 6a 75 73 74 20 6d 65 73 73 ../* Adjust mess aba0: 61 67 65 20 62 75 66 66 65 72 20 2a 2f 0a 09 72 age buffer */..r abb0: 65 63 76 5f 6c 65 6e 20 2d 3d 20 32 3b 0a 0a 09 ecv_len -= 2;... abc0: 2f 2a 20 41 64 64 20 62 79 74 65 73 20 74 6f 20 /* Add bytes to abd0: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 2a 2f 0a return value */. abe0: 09 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 .tmp_respdata_le abf0: 6e 20 3d 20 30 3b 0a 09 69 66 20 28 72 65 73 70 n = 0;..if (resp ac00: 64 61 74 61 20 26 26 20 72 65 73 70 64 61 74 61 data && respdata ac10: 5f 6c 65 6e 29 20 7b 0a 09 09 74 6d 70 5f 72 65 _len) {...tmp_re ac20: 73 70 64 61 74 61 5f 6c 65 6e 20 3d 20 2a 72 65 spdata_len = *re ac30: 73 70 64 61 74 61 5f 6c 65 6e 3b 0a 0a 09 09 62 spdata_len;....b ac40: 79 74 65 73 5f 74 6f 5f 63 6f 70 79 20 3d 20 2a ytes_to_copy = * ac50: 72 65 73 70 64 61 74 61 5f 6c 65 6e 3b 0a 0a 09 respdata_len;... ac60: 09 69 66 20 28 72 65 63 76 5f 6c 65 6e 20 3c 20 .if (recv_len < ac70: 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 20 7b bytes_to_copy) { ac80: 0a 09 09 09 62 79 74 65 73 5f 74 6f 5f 63 6f 70 ....bytes_to_cop ac90: 79 20 3d 20 72 65 63 76 5f 6c 65 6e 3b 0a 09 09 y = recv_len;... aca0: 7d 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 }....CACKEY_DEBU acb0: 47 5f 50 52 49 4e 54 46 28 22 43 6f 70 79 69 6e G_PRINTF("Copyin acc0: 67 20 25 6c 75 20 62 79 74 65 73 20 74 6f 20 74 g %lu bytes to t acd0: 68 65 20 62 75 66 66 65 72 20 28 72 65 63 76 27 he buffer (recv' ace0: 64 20 25 6c 75 20 62 79 74 65 73 2c 20 62 75 74 d %lu bytes, but acf0: 20 6f 6e 6c 79 20 25 6c 75 20 62 79 74 65 73 20 only %lu bytes ad00: 6c 65 66 74 20 69 6e 20 6f 75 72 20 62 75 66 66 left in our buff ad10: 65 72 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 er)", (unsigned ad20: 6c 6f 6e 67 29 20 62 79 74 65 73 5f 74 6f 5f 63 long) bytes_to_c ad30: 6f 70 79 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c opy, (unsigned l ad40: 6f 6e 67 29 20 72 65 63 76 5f 6c 65 6e 2c 20 28 ong) recv_len, ( ad50: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a unsigned long) * ad60: 72 65 73 70 64 61 74 61 5f 6c 65 6e 29 3b 0a 0a respdata_len);.. ad70: 09 09 6d 65 6d 63 70 79 28 72 65 73 70 64 61 74 ..memcpy(respdat ad80: 61 2c 20 72 65 63 76 5f 62 75 66 2c 20 62 79 74 a, recv_buf, byt ad90: 65 73 5f 74 6f 5f 63 6f 70 79 29 3b 0a 09 09 72 es_to_copy);...r ada0: 65 73 70 64 61 74 61 20 2b 3d 20 62 79 74 65 73 espdata += bytes adb0: 5f 74 6f 5f 63 6f 70 79 3b 0a 0a 09 09 2a 72 65 _to_copy;....*re adc0: 73 70 64 61 74 61 5f 6c 65 6e 20 3d 20 62 79 74 spdata_len = byt add0: 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a 09 09 74 6d es_to_copy;...tm ade0: 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 6e 20 2d p_respdata_len - adf0: 3d 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b = bytes_to_copy; ae00: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 ..} else {...if ae10: 28 72 65 63 76 5f 6c 65 6e 20 21 3d 20 30 29 20 (recv_len != 0) ae20: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU ae30: 47 5f 50 52 49 4e 54 46 28 22 54 68 72 6f 77 69 G_PRINTF("Throwi ae40: 6e 67 20 61 77 61 79 20 25 6c 75 20 62 79 74 65 ng away %lu byte ae50: 73 2c 20 6e 6f 77 68 65 72 65 20 74 6f 20 70 75 s, nowhere to pu ae60: 74 20 74 68 65 6d 21 22 2c 20 28 75 6e 73 69 67 t them!", (unsig ae70: 6e 65 64 20 6c 6f 6e 67 29 20 72 65 63 76 5f 6c ned long) recv_l ae80: 65 6e 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 en);...}..}...if ae90: 20 28 6d 61 6a 6f 72 5f 72 63 20 3d 3d 20 30 78 (major_rc == 0x aea0: 36 31 29 20 7b 0a 09 09 2f 2a 20 57 65 20 6e 65 61) {.../* We ne aeb0: 65 64 20 74 6f 20 52 45 41 44 20 2a 2f 0a 09 09 ed to READ */... aec0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI aed0: 4e 54 46 28 22 42 75 66 66 65 72 20 72 65 61 64 NTF("Buffer read aee0: 20 72 65 71 75 69 72 65 64 22 29 3b 0a 0a 09 09 required");.... aef0: 69 66 20 28 6d 69 6e 6f 72 5f 72 63 20 3d 3d 20 if (minor_rc == af00: 30 78 30 30 29 20 7b 0a 09 09 09 6d 69 6e 6f 72 0x00) {....minor af10: 5f 72 63 20 3d 20 43 41 43 4b 45 59 5f 41 50 44 _rc = CACKEY_APD af20: 55 5f 4d 54 55 3b 0a 09 09 7d 0a 0a 09 09 70 63 U_MTU;...}....pc af30: 73 63 5f 67 65 74 72 65 73 70 5f 72 65 74 20 3d sc_getresp_ret = af40: 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 cackey_send_apd af50: 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 4c u(slot, GSCIS_CL af60: 41 53 53 5f 49 53 4f 37 38 31 36 2c 20 47 53 43 ASS_ISO7816, GSC af70: 49 53 5f 49 4e 53 54 52 5f 47 45 54 5f 52 45 53 IS_INSTR_GET_RES af80: 50 4f 4e 53 45 2c 20 30 78 30 30 2c 20 30 78 30 PONSE, 0x00, 0x0 af90: 30 2c 20 30 2c 20 4e 55 4c 4c 2c 20 6d 69 6e 6f 0, 0, NULL, mino afa0: 72 5f 72 63 2c 20 72 65 73 70 63 6f 64 65 2c 20 r_rc, respcode, afb0: 72 65 73 70 64 61 74 61 2c 20 26 74 6d 70 5f 72 respdata, &tmp_r afc0: 65 73 70 64 61 74 61 5f 6c 65 6e 29 3b 0a 0a 09 espdata_len);... afd0: 09 69 66 20 28 70 63 73 63 5f 67 65 74 72 65 73 .if (pcsc_getres afe0: 70 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f p_ret != CACKEY_ aff0: 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 09 PCSC_S_OK) {.... b000: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI b010: 4e 54 46 28 22 42 75 66 66 65 72 20 72 65 61 64 NTF("Buffer read b020: 20 66 61 69 6c 65 64 21 20 20 52 65 74 75 72 6e failed! Return b030: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") b040: 3b 0a 0a 09 09 09 2f 2a 20 45 6e 64 20 53 6d 61 ;...../* End Sma b050: 72 74 63 61 72 64 20 54 72 61 6e 73 61 63 74 69 rtcard Transacti b060: 6f 6e 20 2a 2f 0a 09 09 09 63 61 63 6b 65 79 5f on */....cackey_ b070: 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 end_transaction( b080: 73 6c 6f 74 29 3b 0a 0a 09 09 09 69 66 20 28 70 slot);.....if (p b090: 63 73 63 5f 67 65 74 72 65 73 70 5f 72 65 74 20 csc_getresp_ret b0a0: 3d 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 == CACKEY_PCSC_E b0b0: 5f 52 45 54 52 59 29 20 7b 0a 09 09 09 09 72 65 _RETRY) {.....re b0c0: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC b0d0: 5f 45 5f 52 45 54 52 59 29 3b 0a 09 09 09 7d 0a _E_RETRY);....}. b0e0: 0a 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 ....return(CACKE b0f0: 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 Y_PCSC_E_GENERIC b100: 29 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 72 65 );...}....if (re b110: 73 70 64 61 74 61 5f 6c 65 6e 29 20 7b 0a 09 09 spdata_len) {... b120: 09 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e 20 2b .*respdata_len + b130: 3d 20 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c = tmp_respdata_l b140: 65 6e 3b 0a 09 09 7d 0a 0a 09 09 2f 2a 20 45 6e en;...}..../* En b150: 64 20 53 6d 61 72 74 63 61 72 64 20 54 72 61 6e d Smartcard Tran b160: 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 63 61 63 saction */...cac b170: 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 key_end_transact b180: 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 43 41 ion(slot);....CA b190: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT b1a0: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 F("Returning in b1b0: 73 75 63 63 65 73 73 20 28 62 75 66 66 65 72 20 success (buffer b1c0: 72 65 61 64 20 63 6f 6d 70 6c 65 74 65 29 22 29 read complete)") b1d0: 3b 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 ;...return(CACKE b1e0: 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 09 7d Y_PCSC_S_OK);..} b1f0: 0a 0a 09 2f 2a 20 45 6e 64 20 53 6d 61 72 74 63 .../* End Smartc b200: 61 72 64 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 ard Transaction b210: 2a 2f 0a 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 */..cackey_end_t b220: 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 ransaction(slot) b230: 3b 0a 0a 09 69 66 20 28 6d 61 6a 6f 72 5f 72 63 ;...if (major_rc b240: 20 3d 3d 20 30 78 39 30 29 20 7b 0a 09 09 2f 2a == 0x90) {.../* b250: 20 53 75 63 63 65 73 73 20 2a 2f 0a 09 09 43 41 Success */...CA b260: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT b270: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 F("Returning in b280: 73 75 63 63 65 73 73 20 28 6d 61 6a 6f 72 5f 72 success (major_r b290: 63 20 3d 20 30 78 39 30 29 22 29 3b 0a 0a 09 09 c = 0x90)");.... b2a0: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC b2b0: 53 43 5f 53 5f 4f 4b 29 3b 0a 09 7d 0a 0a 0a 09 SC_S_OK);..}.... b2c0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI b2d0: 4e 54 46 28 22 41 50 44 55 20 52 65 74 75 72 6e NTF("APDU Return b2e0: 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 72 65 74 ed an error, ret b2f0: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur b300: 65 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 41 e");...return(CA b310: 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 CKEY_PCSC_E_GENE b320: 52 49 43 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 RIC);.}../*. * S b330: 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 73 YNPOSIS. * s b340: 73 69 7a 65 5f 74 20 63 61 63 6b 65 79 5f 72 65 size_t cackey_re b350: 61 64 5f 62 75 66 66 65 72 28 73 74 72 75 63 74 ad_buffer(struct b360: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c cackey_slot *sl b370: 6f 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 ot, unsigned cha b380: 72 20 2a 62 75 66 66 65 72 2c 20 73 69 7a 65 5f r *buffer, size_ b390: 74 20 63 6f 75 6e 74 2c 20 75 6e 73 69 67 6e 65 t count, unsigne b3a0: 64 20 63 68 61 72 20 74 5f 6f 72 5f 76 2c 20 73 d char t_or_v, s b3b0: 69 7a 65 5f 74 20 69 6e 69 74 69 61 6c 5f 6f 66 ize_t initial_of b3c0: 66 73 65 74 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 fset);. *. * ARG b3d0: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 73 74 UMENTS. * st b3e0: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ruct cackey_slot b3f0: 20 2a 73 6c 6f 74 0a 20 2a 20 20 20 20 20 20 20 *slot. * b400: 20 20 53 6c 6f 74 20 74 6f 20 73 65 6e 64 20 63 Slot to send c b410: 6f 6d 6d 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a ommands to. *. * b420: 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 unsigned ch b430: 61 72 20 2a 62 75 66 66 65 72 0a 20 2a 20 20 20 ar *buffer. * b440: 20 20 20 20 20 20 5b 4f 55 54 5d 20 42 75 66 66 [OUT] Buff b450: 65 72 0a 20 2a 0a 20 2a 20 20 20 20 20 73 69 7a er. *. * siz b460: 65 5f 74 20 63 6f 75 6e 74 0a 20 2a 20 20 20 20 e_t count. * b470: 20 20 20 20 20 4e 75 6d 62 65 72 20 6f 66 20 62 Number of b b480: 79 74 65 73 20 74 6f 20 61 74 74 65 6d 70 74 20 ytes to attempt b490: 74 6f 20 72 65 61 64 0a 20 2a 0a 20 2a 20 20 20 to read. *. * b4a0: 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 unsigned char b4b0: 74 5f 6f 72 5f 76 0a 20 2a 20 20 20 20 20 20 20 t_or_v. * b4c0: 20 20 53 65 6c 65 63 74 20 74 68 65 20 54 2d 62 Select the T-b b4d0: 75 66 66 65 72 20 28 30 31 29 20 6f 72 20 56 2d uffer (01) or V- b4e0: 62 75 66 66 65 72 20 28 30 32 29 20 74 6f 20 72 buffer (02) to r b4f0: 65 61 64 20 66 72 6f 6d 2e 20 20 0a 20 2a 0a 20 ead from. . *. b500: 2a 20 20 20 20 20 73 69 7a 65 5f 74 20 69 6e 69 * size_t ini b510: 74 69 61 6c 5f 6f 66 66 73 65 74 0a 20 2a 20 20 tial_offset. * b520: 20 20 20 20 20 20 20 53 70 65 63 69 66 79 20 74 Specify t b530: 68 65 20 6f 66 66 73 65 74 20 74 6f 20 62 65 67 he offset to beg b540: 69 6e 20 74 68 65 20 72 65 61 64 20 66 72 6f 6d in the read from b550: 0a 20 2a 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e . *. *. * RETURN b560: 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 54 68 VALUE. * Th b570: 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 is function retu b580: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f rns the number o b590: 66 20 62 79 74 65 73 20 61 63 74 75 61 6c 6c 79 f bytes actually b5a0: 20 72 65 61 64 2c 20 6f 72 20 2d 31 20 6f 6e 20 read, or -1 on b5b0: 65 72 72 6f 72 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 error.. *. * NOT b5c0: 45 53 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 ES. * None. b5d0: 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 73 73 69 *. */.static ssi b5e0: 7a 65 5f 74 20 63 61 63 6b 65 79 5f 72 65 61 64 ze_t cackey_read b5f0: 5f 62 75 66 66 65 72 28 73 74 72 75 63 74 20 63 _buffer(struct c b600: 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 ackey_slot *slot b610: 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 , unsigned char b620: 2a 62 75 66 66 65 72 2c 20 73 69 7a 65 5f 74 20 *buffer, size_t b630: 63 6f 75 6e 74 2c 20 75 6e 73 69 67 6e 65 64 20 count, unsigned b640: 63 68 61 72 20 74 5f 6f 72 5f 76 2c 20 73 69 7a char t_or_v, siz b650: 65 5f 74 20 69 6e 69 74 69 61 6c 5f 6f 66 66 73 e_t initial_offs b660: 65 74 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 et) {..unsigned b670: 63 68 61 72 20 2a 69 6e 69 74 5f 62 75 66 66 65 char *init_buffe b680: 72 3b 0a 09 73 69 7a 65 5f 74 20 69 6e 69 74 5f r;..size_t init_ b690: 63 6f 75 6e 74 3b 0a 09 73 69 7a 65 5f 74 20 69 count;..size_t i b6a0: 6e 69 74 5f 69 6e 69 74 69 61 6c 5f 6f 66 66 73 nit_initial_offs b6b0: 65 74 3b 0a 0a 09 73 69 7a 65 5f 74 20 6f 66 66 et;...size_t off b6c0: 73 65 74 20 3d 20 30 2c 20 6d 61 78 5f 6f 66 66 set = 0, max_off b6d0: 73 65 74 2c 20 6d 61 78 5f 63 6f 75 6e 74 3b 0a set, max_count;. b6e0: 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 .unsigned char c b6f0: 6d 64 5b 32 5d 3b 0a 09 75 69 6e 74 31 36 5f 74 md[2];..uint16_t b700: 20 72 65 73 70 63 6f 64 65 3b 0a 09 69 6e 74 20 respcode;..int b710: 73 65 6e 64 5f 72 65 74 3b 0a 0a 09 43 41 43 4b send_ret;...CACK b720: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( b730: 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 6e "Called.");...in b740: 69 74 5f 62 75 66 66 65 72 20 3d 20 62 75 66 66 it_buffer = buff b750: 65 72 3b 0a 09 69 6e 69 74 5f 63 6f 75 6e 74 20 er;..init_count b760: 3d 20 63 6f 75 6e 74 3b 0a 09 69 6e 69 74 5f 69 = count;..init_i b770: 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 20 3d 20 nitial_offset = b780: 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 3b 0a initial_offset;. b790: 0a 09 6d 61 78 5f 6f 66 66 73 65 74 20 3d 20 63 ..max_offset = c b7a0: 6f 75 6e 74 3b 0a 09 6d 61 78 5f 63 6f 75 6e 74 ount;..max_count b7b0: 20 3d 20 43 41 43 4b 45 59 5f 41 50 44 55 5f 4d = CACKEY_APDU_M b7c0: 54 55 3b 0a 0a 09 69 66 20 28 74 5f 6f 72 5f 76 TU;...if (t_or_v b7d0: 20 21 3d 20 31 20 26 26 20 74 5f 6f 72 5f 76 20 != 1 && t_or_v b7e0: 21 3d 20 32 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 2) {...CACKEY b7f0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 49 _DEBUG_PRINTF("I b800: 6e 76 61 6c 69 64 20 54 20 6f 72 20 56 20 70 61 nvalid T or V pa b810: 72 61 6d 65 74 65 72 20 73 70 65 63 69 66 69 65 rameter specifie b820: 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 d, returning in b830: 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 failure");....re b840: 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 63 turn(-1);..}...c b850: 6d 64 5b 30 5d 20 3d 20 74 5f 6f 72 5f 76 3b 0a md[0] = t_or_v;. b860: 0a 09 77 68 69 6c 65 20 28 31 29 20 7b 0a 09 09 ..while (1) {... b870: 69 66 20 28 6f 66 66 73 65 74 20 3e 3d 20 6d 61 if (offset >= ma b880: 78 5f 6f 66 66 73 65 74 29 20 7b 0a 09 09 09 43 x_offset) {....C b890: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN b8a0: 54 46 28 22 42 75 66 66 65 72 20 74 6f 6f 20 73 TF("Buffer too s b8b0: 6d 61 6c 6c 2c 20 72 65 74 75 72 6e 69 6e 67 20 mall, returning b8c0: 77 68 61 74 20 77 65 20 67 6f 74 2e 2e 2e 22 29 what we got...") b8d0: 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d ;.....break;...} b8e0: 0a 0a 09 09 63 6f 75 6e 74 20 3d 20 6d 61 78 5f ....count = max_ b8f0: 6f 66 66 73 65 74 20 2d 20 6f 66 66 73 65 74 3b offset - offset; b900: 0a 09 09 69 66 20 28 63 6f 75 6e 74 20 3e 20 6d ...if (count > m b910: 61 78 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09 63 ax_count) {....c b920: 6f 75 6e 74 20 3d 20 6d 61 78 5f 63 6f 75 6e 74 ount = max_count b930: 3b 0a 09 09 7d 0a 0a 09 09 63 6d 64 5b 31 5d 20 ;...}....cmd[1] b940: 3d 20 63 6f 75 6e 74 3b 0a 0a 09 09 73 65 6e 64 = count;....send b950: 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 _ret = cackey_se b960: 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 nd_apdu(slot, GS b970: 43 49 53 5f 43 4c 41 53 53 5f 47 4c 4f 42 41 4c CIS_CLASS_GLOBAL b980: 5f 50 4c 41 54 46 4f 52 4d 2c 20 47 53 43 49 53 _PLATFORM, GSCIS b990: 5f 49 4e 53 54 52 5f 52 45 41 44 5f 42 55 46 46 _INSTR_READ_BUFF b9a0: 45 52 2c 20 28 28 69 6e 69 74 69 61 6c 5f 6f 66 ER, ((initial_of b9b0: 66 73 65 74 20 2b 20 6f 66 66 73 65 74 29 20 3e fset + offset) > b9c0: 3e 20 38 29 20 26 20 30 78 66 66 2c 20 28 69 6e > 8) & 0xff, (in b9d0: 69 74 69 61 6c 5f 6f 66 66 73 65 74 20 2b 20 6f itial_offset + o b9e0: 66 66 73 65 74 29 20 26 20 30 78 66 66 2c 20 73 ffset) & 0xff, s b9f0: 69 7a 65 6f 66 28 63 6d 64 29 2c 20 63 6d 64 2c izeof(cmd), cmd, ba00: 20 30 78 30 30 2c 20 26 72 65 73 70 63 6f 64 65 0x00, &respcode ba10: 2c 20 62 75 66 66 65 72 20 2b 20 6f 66 66 73 65 , buffer + offse ba20: 74 2c 20 26 63 6f 75 6e 74 29 3b 0a 0a 09 09 69 t, &count);....i ba30: 66 20 28 73 65 6e 64 5f 72 65 74 20 3d 3d 20 43 f (send_ret == C ba40: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 52 45 54 ACKEY_PCSC_E_RET ba50: 52 59 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f RY) {....CACKEY_ ba60: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 41 44 DEBUG_PRINTF("AD ba70: 50 55 20 53 65 6e 64 69 6e 67 20 66 61 69 6c 65 PU Sending faile ba80: 64 2c 20 72 65 74 72 79 69 6e 67 20 72 65 61 64 d, retrying read ba90: 20 62 75 66 66 65 72 22 29 3b 0a 0a 09 09 09 72 buffer");.....r baa0: 65 74 75 72 6e 28 63 61 63 6b 65 79 5f 72 65 61 eturn(cackey_rea bab0: 64 5f 62 75 66 66 65 72 28 73 6c 6f 74 2c 20 69 d_buffer(slot, i bac0: 6e 69 74 5f 62 75 66 66 65 72 2c 20 69 6e 69 74 nit_buffer, init bad0: 5f 63 6f 75 6e 74 2c 20 74 5f 6f 72 5f 76 2c 20 _count, t_or_v, bae0: 69 6e 69 74 5f 69 6e 69 74 69 61 6c 5f 6f 66 66 init_initial_off baf0: 73 65 74 29 29 3b 0a 09 09 7d 0a 0a 09 09 69 66 set));...}....if bb00: 20 28 73 65 6e 64 5f 72 65 74 20 21 3d 20 43 41 (send_ret != CA bb10: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 CKEY_PCSC_S_OK) bb20: 7b 0a 09 09 09 69 66 20 28 72 65 73 70 63 6f 64 {....if (respcod bb30: 65 20 3d 3d 20 30 78 36 41 38 36 29 20 7b 0a 09 e == 0x6A86) {.. bb40: 09 09 09 69 66 20 28 6d 61 78 5f 63 6f 75 6e 74 ...if (max_count bb50: 20 3d 3d 20 31 29 20 7b 0a 09 09 09 09 09 62 72 == 1) {......br bb60: 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 eak;.....}...... bb70: 6d 61 78 5f 63 6f 75 6e 74 20 3d 20 6d 61 78 5f max_count = max_ bb80: 63 6f 75 6e 74 20 2f 20 32 3b 0a 0a 09 09 09 09 count / 2;...... bb90: 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 7d 0a 0a continue;....}.. bba0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ bbb0: 50 52 49 4e 54 46 28 22 63 61 63 6b 65 79 5f 73 PRINTF("cackey_s bbc0: 65 6e 64 5f 61 70 64 75 28 29 20 66 61 69 6c 65 end_apdu() faile bbd0: 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 d, returning in bbe0: 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 09 72 failure");.....r bbf0: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a eturn(-1);...}.. bc00: 09 09 6f 66 66 73 65 74 20 2b 3d 20 63 6f 75 6e ..offset += coun bc10: 74 3b 0a 0a 09 09 69 66 20 28 63 6f 75 6e 74 20 t;....if (count bc20: 3c 20 6d 61 78 5f 63 6f 75 6e 74 29 20 7b 0a 09 < max_count) {.. bc30: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P bc40: 52 49 4e 54 46 28 22 53 68 6f 72 74 20 72 65 61 RINTF("Short rea bc50: 64 20 2d 2d 20 63 6f 75 6e 74 20 3d 20 25 69 2c d -- count = %i, bc60: 20 63 6d 64 5b 31 5d 20 3d 20 25 69 22 2c 20 28 cmd[1] = %i", ( bc70: 69 6e 74 29 20 63 6f 75 6e 74 2c 20 28 69 6e 74 int) count, (int bc80: 29 20 63 6d 64 5b 31 5d 29 3b 0a 0a 09 09 09 62 ) cmd[1]);.....b bc90: 72 65 61 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a 23 69 reak;...}..}..#i bca0: 66 64 65 66 20 43 41 43 4b 45 59 5f 50 41 52 41 fdef CACKEY_PARA bcb0: 4e 4f 49 44 0a 23 20 20 69 66 64 65 66 20 5f 50 NOID.# ifdef _P bcc0: 4f 53 49 58 5f 53 53 49 5a 45 5f 4d 41 58 0a 09 OSIX_SSIZE_MAX.. bcd0: 69 66 20 28 6f 66 66 73 65 74 20 3e 20 5f 50 4f if (offset > _PO bce0: 53 49 58 5f 53 53 49 5a 45 5f 4d 41 58 29 20 7b SIX_SSIZE_MAX) { bcf0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ bd00: 50 52 49 4e 54 46 28 22 4f 66 66 73 65 74 20 65 PRINTF("Offset e bd10: 78 63 65 65 64 73 20 6d 61 78 69 6d 75 6d 20 76 xceeds maximum v bd20: 61 6c 75 65 2c 20 72 65 74 75 72 6e 69 6e 67 20 alue, returning bd30: 69 6e 20 66 61 69 6c 75 72 65 2e 20 28 6d 61 78 in failure. (max bd40: 20 3d 20 25 6c 69 2c 20 6f 66 66 73 65 74 20 3d = %li, offset = bd50: 20 25 6c 75 29 22 2c 20 28 6c 6f 6e 67 29 20 5f %lu)", (long) _ bd60: 50 4f 53 49 58 5f 53 53 49 5a 45 5f 4d 41 58 2c POSIX_SSIZE_MAX, bd70: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) bd80: 20 6f 66 66 73 65 74 29 3b 0a 0a 09 09 72 65 74 offset);....ret bd90: 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 23 20 20 65 urn(-1);..}.# e bda0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 09 43 41 ndif.#endif...CA bdb0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT bdc0: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 F("Returning in bdd0: 73 75 63 63 65 73 73 2c 20 72 65 61 64 20 25 6c success, read %l bde0: 75 20 62 79 74 65 73 22 2c 20 28 75 6e 73 69 67 u bytes", (unsig bdf0: 6e 65 64 20 6c 6f 6e 67 29 20 6f 66 66 73 65 74 ned long) offset be00: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 6f 66 66 73 );...return(offs be10: 65 74 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 et);.}../*. * SY be20: 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 63 61 NPOSIS. * ca be30: 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f ckey_ret cackey_ be40: 73 65 6c 65 63 74 5f 61 70 70 6c 65 74 28 73 74 select_applet(st be50: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ruct cackey_slot be60: 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 64 *slot, unsigned be70: 20 63 68 61 72 20 2a 61 69 64 2c 20 73 69 7a 65 char *aid, size be80: 5f 74 20 61 69 64 5f 6c 65 6e 29 3b 0a 20 2a 0a _t aid_len);. *. be90: 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 * ARGUMENTS. * bea0: 20 20 20 20 73 74 72 75 63 74 20 63 61 63 6b 65 struct cacke beb0: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a 20 2a 20 y_slot *slot. * bec0: 20 20 20 20 20 20 20 20 53 6c 6f 74 20 74 6f 20 Slot to bed0: 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 20 74 6f send commands to bee0: 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e 73 69 67 . *. * unsig bef0: 6e 65 64 20 63 68 61 72 20 2a 61 69 64 0a 20 2a ned char *aid. * bf00: 20 20 20 20 20 20 20 20 20 42 75 66 66 65 72 20 Buffer bf10: 63 6f 6e 74 61 69 6e 69 6e 67 20 41 70 70 6c 65 containing Apple bf20: 74 20 49 44 20 74 6f 20 73 65 6c 65 63 74 0a 20 t ID to select. bf30: 2a 0a 20 2a 20 20 20 20 20 73 69 7a 65 5f 74 20 *. * size_t bf40: 61 69 64 5f 6c 65 6e 0a 20 2a 20 20 20 20 20 20 aid_len. * bf50: 20 20 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 Number of byt bf60: 65 73 20 69 6e 20 74 68 65 20 22 61 69 64 22 20 es in the "aid" bf70: 28 41 70 70 6c 65 74 20 49 44 29 20 70 61 72 61 (Applet ID) para bf80: 6d 65 74 65 72 0a 20 2a 0a 20 2a 20 52 45 54 55 meter. *. * RETU bf90: 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 RN VALUE. * bfa0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK bfb0: 20 20 20 20 20 20 20 20 20 4f 6e 20 73 75 63 63 On succ bfc0: 65 73 73 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 ess. * CACKE bfd0: 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 Y_PCSC_E_GENERIC bfe0: 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 2a 0a On error. *. bff0: 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 * NOTES. * c000: 4e 6f 6e 65 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 None. *. */.stat c010: 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 ic cackey_ret ca c020: 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c ckey_select_appl c030: 65 74 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 et(struct cackey c040: 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 _slot *slot, uns c050: 69 67 6e 65 64 20 63 68 61 72 20 2a 61 69 64 2c igned char *aid, c060: 20 73 69 7a 65 5f 74 20 61 69 64 5f 6c 65 6e 29 size_t aid_len) c070: 20 7b 0a 09 69 6e 74 20 73 65 6e 64 5f 72 65 74 {..int send_ret c080: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG c090: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. c0a0: 22 29 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ");...CACKEY_DEB c0b0: 55 47 5f 50 52 49 4e 54 42 55 46 28 22 53 65 6c UG_PRINTBUF("Sel c0c0: 65 63 74 69 6e 67 20 61 70 70 6c 65 74 3a 22 2c ecting applet:", c0d0: 20 61 69 64 2c 20 61 69 64 5f 6c 65 6e 29 3b 0a aid, aid_len);. c0e0: 0a 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 61 63 ..send_ret = cac c0f0: 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 73 6c key_send_apdu(sl c100: 6f 74 2c 20 47 53 43 49 53 5f 43 4c 41 53 53 5f ot, GSCIS_CLASS_ c110: 49 53 4f 37 38 31 36 2c 20 47 53 43 49 53 5f 49 ISO7816, GSCIS_I c120: 4e 53 54 52 5f 53 45 4c 45 43 54 2c 20 47 53 43 NSTR_SELECT, GSC c130: 49 53 5f 50 41 52 41 4d 5f 53 45 4c 45 43 54 5f IS_PARAM_SELECT_ c140: 41 50 50 4c 45 54 2c 20 30 78 30 30 2c 20 61 69 APPLET, 0x00, ai c150: 64 5f 6c 65 6e 2c 20 61 69 64 2c 20 30 78 30 30 d_len, aid, 0x00 c160: 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 , NULL, NULL, NU c170: 4c 4c 29 3b 0a 0a 09 69 66 20 28 73 65 6e 64 5f LL);...if (send_ c180: 72 65 74 20 3d 3d 20 43 41 43 4b 45 59 5f 50 43 ret == CACKEY_PC c190: 53 43 5f 45 5f 52 45 54 52 59 29 20 7b 0a 09 09 SC_E_RETRY) {... c1a0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI c1b0: 4e 54 46 28 22 41 44 50 55 20 53 65 6e 64 69 6e NTF("ADPU Sendin c1c0: 67 20 66 61 69 6c 65 64 2c 20 72 65 74 72 79 69 g failed, retryi c1d0: 6e 67 20 73 65 6c 65 63 74 20 61 70 70 6c 65 74 ng select applet c1e0: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 63 61 ");....return(ca c1f0: 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c ckey_select_appl c200: 65 74 28 73 6c 6f 74 2c 20 61 69 64 2c 20 61 69 et(slot, aid, ai c210: 64 5f 6c 65 6e 29 29 3b 0a 09 7d 0a 0a 09 69 66 d_len));..}...if c220: 20 28 73 65 6e 64 5f 72 65 74 20 21 3d 20 43 41 (send_ret != CA c230: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 CKEY_PCSC_S_OK) c240: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG c250: 5f 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 _PRINTF("Failed c260: 74 6f 20 6f 70 65 6e 20 61 70 70 6c 65 74 2c 20 to open applet, c270: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai c280: 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 lure");....retur c290: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f n(CACKEY_PCSC_E_ c2a0: 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 43 GENERIC);..}...C c2b0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN c2c0: 54 46 28 22 53 75 63 63 65 73 73 66 75 6c 6c 79 TF("Successfully c2d0: 20 73 65 6c 65 63 74 65 64 20 66 69 6c 65 22 29 selected file") c2e0: 3b 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b 45 ;...return(CACKE c2f0: 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a Y_PCSC_S_OK);.}. c300: 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a ./*. * SYNPOSIS. c310: 20 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 72 65 * cackey_re c320: 74 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f t cackey_select_ c330: 66 69 6c 65 28 73 74 72 75 63 74 20 63 61 63 6b file(struct cack c340: 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 ey_slot *slot, u c350: 69 6e 74 31 36 5f 74 20 65 66 29 3b 0a 20 2a 0a int16_t ef);. *. c360: 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 * ARGUMENTS. * c370: 20 20 20 20 73 74 72 75 63 74 20 63 61 63 6b 65 struct cacke c380: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a 20 2a 20 y_slot *slot. * c390: 20 20 20 20 20 20 20 20 53 6c 6f 74 20 74 6f 20 Slot to c3a0: 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 20 74 6f send commands to c3b0: 0a 20 2a 0a 20 2a 20 20 20 20 20 75 69 6e 74 31 . *. * uint1 c3c0: 36 5f 74 20 65 66 0a 20 2a 20 20 20 20 20 20 20 6_t ef. * c3d0: 20 20 45 6c 65 6d 65 6e 74 61 6c 20 46 69 6c 65 Elemental File c3e0: 20 74 6f 20 73 65 6c 65 63 74 0a 20 2a 0a 20 2a to select. *. * c3f0: 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a RETURN VALUE. * c400: 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 CACKEY_PCSC c410: 5f 53 5f 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e _S_OK On c420: 20 73 75 63 63 65 73 73 0a 20 2a 20 20 20 20 20 success. * c430: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 CACKEY_PCSC_E_GE c440: 4e 45 52 49 43 20 20 20 20 4f 6e 20 65 72 72 6f NERIC On erro c450: 72 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a r. *. * NOTES. * c460: 20 20 20 20 20 54 68 69 73 20 73 65 6c 65 63 74 This select c470: 73 20 61 6e 20 45 6c 65 6d 65 6e 74 61 72 79 20 s an Elementary c480: 46 69 6c 65 20 28 45 46 29 20 75 6e 64 65 72 20 File (EF) under c490: 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 73 65 the currently se c4a0: 6c 65 63 74 65 64 0a 20 2a 20 20 20 20 20 44 65 lected. * De c4b0: 64 69 63 61 74 65 64 20 46 69 6c 65 20 28 44 46 dicated File (DF c4c0: 29 0a 20 2a 0a 20 2a 20 20 20 20 20 54 79 70 69 ). *. * Typi c4d0: 63 61 6c 6c 79 20 74 68 69 73 20 69 73 20 63 61 cally this is ca c4e0: 6c 6c 65 64 20 61 66 74 65 72 20 73 65 6c 65 63 lled after selec c4f0: 74 69 6e 67 20 74 68 65 20 63 6f 72 72 65 63 74 ting the correct c500: 20 41 70 70 6c 65 74 20 28 75 73 69 6e 67 0a 20 Applet (using. c510: 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 73 65 6c * cackey_sel c520: 65 63 74 5f 61 70 70 6c 65 74 29 20 66 6f 72 20 ect_applet) for c530: 56 4d 20 63 61 72 64 73 0a 20 2a 0a 20 2a 2f 0a VM cards. *. */. c540: 73 74 61 74 69 63 20 63 61 63 6b 65 79 5f 72 65 static cackey_re c550: 74 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f t cackey_select_ c560: 66 69 6c 65 28 73 74 72 75 63 74 20 63 61 63 6b file(struct cack c570: 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 ey_slot *slot, u c580: 69 6e 74 31 36 5f 74 20 65 66 29 20 7b 0a 09 75 int16_t ef) {..u c590: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 66 69 64 nsigned char fid c5a0: 5f 62 75 66 5b 32 5d 3b 0a 09 69 6e 74 20 73 65 _buf[2];..int se c5b0: 6e 64 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 nd_ret;...CACKEY c5c0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C c5d0: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 2f 2a 20 4f alled.");.../* O c5e0: 70 65 6e 20 74 68 65 20 65 6c 65 6d 65 6e 74 61 pen the elementa c5f0: 72 79 20 66 69 6c 65 20 2a 2f 0a 09 66 69 64 5f ry file */..fid_ c600: 62 75 66 5b 30 5d 20 3d 20 28 65 66 20 3e 3e 20 buf[0] = (ef >> c610: 38 29 20 26 20 30 78 66 66 3b 0a 09 66 69 64 5f 8) & 0xff;..fid_ c620: 62 75 66 5b 31 5d 20 3d 20 65 66 20 26 20 30 78 buf[1] = ef & 0x c630: 66 66 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ff;...CACKEY_DEB c640: 55 47 5f 50 52 49 4e 54 46 28 22 53 65 6c 65 63 UG_PRINTF("Selec c650: 74 69 6e 67 20 66 69 6c 65 3a 20 25 30 34 6c 78 ting file: %04lx c660: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon c670: 67 29 20 65 66 29 3b 0a 0a 09 73 65 6e 64 5f 72 g) ef);...send_r c680: 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 et = cackey_send c690: 5f 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 _apdu(slot, GSCI c6a0: 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 31 36 2c S_CLASS_ISO7816, c6b0: 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 45 4c GSCIS_INSTR_SEL c6c0: 45 43 54 2c 20 30 78 30 32 2c 20 30 78 30 43 2c ECT, 0x02, 0x0C, c6d0: 20 73 69 7a 65 6f 66 28 66 69 64 5f 62 75 66 29 sizeof(fid_buf) c6e0: 2c 20 66 69 64 5f 62 75 66 2c 20 30 78 30 30 2c , fid_buf, 0x00, c6f0: 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c NULL, NULL, NUL c700: 4c 29 3b 0a 09 69 66 20 28 73 65 6e 64 5f 72 65 L);..if (send_re c710: 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 t != CACKEY_PCSC c720: 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 _S_OK) {...CACKE c730: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" c740: 46 61 69 6c 65 64 20 74 6f 20 6f 70 65 6e 20 66 Failed to open f c750: 69 6c 65 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 ile, returning i c760: 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 n failure");.... c770: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC c780: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. c790: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG c7a0: 5f 50 52 49 4e 54 46 28 22 53 75 63 63 65 73 73 _PRINTF("Success c7b0: 66 75 6c 6c 79 20 73 65 6c 65 63 74 65 64 20 66 fully selected f c7c0: 69 6c 65 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 ile");...return( c7d0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK c7e0: 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 );.}../*. * SYNP c7f0: 4f 53 49 53 0a 20 2a 20 20 20 20 20 76 6f 69 64 OSIS. * void c800: 20 63 61 63 6b 65 79 5f 66 72 65 65 5f 74 6c 76 cackey_free_tlv c810: 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 (struct cackey_t c820: 6c 76 5f 65 6e 74 69 74 79 20 2a 72 6f 6f 74 29 lv_entity *root) c830: 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 ;. *. * ARGUMENT c840: 53 0a 20 2a 20 20 20 20 20 73 74 72 75 63 74 20 S. * struct c850: 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 cackey_tlv_entit c860: 79 20 2a 72 6f 6f 74 0a 20 2a 20 20 20 20 20 20 y *root. * c870: 20 20 20 52 6f 6f 74 20 6f 66 20 74 68 65 20 54 Root of the T c880: 4c 56 20 6c 69 73 74 20 74 6f 20 73 74 61 72 74 LV list to start c890: 20 66 72 65 65 69 6e 67 0a 20 2a 0a 20 2a 20 52 freeing. *. * R c8a0: 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 ETURN VALUE. * c8b0: 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a 20 4e 4f None. *. * NO c8c0: 54 45 53 0a 20 2a 20 20 20 20 20 54 68 69 73 20 TES. * This c8d0: 66 75 6e 63 74 69 6f 6e 20 66 72 65 65 73 20 74 function frees t c8e0: 68 65 20 54 4c 56 20 6c 69 6e 6b 65 64 20 6c 69 he TLV linked li c8f0: 73 74 65 64 20 72 65 74 75 72 6e 65 64 20 66 72 sted returned fr c900: 6f 6d 0a 20 2a 20 20 20 20 20 22 63 61 63 6b 65 om. * "cacke c910: 79 5f 72 65 61 64 5f 74 6c 76 22 0a 20 2a 0a 20 y_read_tlv". *. c920: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 */.static void c c930: 61 63 6b 65 79 5f 66 72 65 65 5f 74 6c 76 28 73 ackey_free_tlv(s c940: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 truct cackey_tlv c950: 5f 65 6e 74 69 74 79 20 2a 72 6f 6f 74 29 20 7b _entity *root) { c960: 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f ..struct cackey_ c970: 74 6c 76 5f 65 6e 74 69 74 79 20 2a 63 75 72 72 tlv_entity *curr c980: 2c 20 2a 6e 65 78 74 3b 0a 0a 09 69 66 20 28 72 , *next;...if (r c990: 6f 6f 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 oot == NULL) {.. c9a0: 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 66 6f .return;..}...fo c9b0: 72 20 28 63 75 72 72 20 3d 20 72 6f 6f 74 3b 20 r (curr = root; c9c0: 63 75 72 72 3b 20 63 75 72 72 20 3d 20 6e 65 78 curr; curr = nex c9d0: 74 29 20 7b 0a 09 09 6e 65 78 74 20 3d 20 63 75 t) {...next = cu c9e0: 72 72 2d 3e 5f 6e 65 78 74 3b 0a 0a 09 09 73 77 rr->_next;....sw c9f0: 69 74 63 68 20 28 63 75 72 72 2d 3e 74 61 67 29 itch (curr->tag) ca00: 20 7b 0a 09 09 09 63 61 73 65 20 47 53 43 49 53 {....case GSCIS ca10: 5f 54 41 47 5f 41 43 52 5f 54 41 42 4c 45 3a 0a _TAG_ACR_TABLE:. ca20: 09 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA ca30: 47 5f 43 45 52 54 49 46 49 43 41 54 45 3a 0a 09 G_CERTIFICATE:.. ca40: 09 09 09 69 66 20 28 63 75 72 72 2d 3e 76 61 6c ...if (curr->val ca50: 75 65 29 20 7b 0a 09 09 09 09 09 66 72 65 65 28 ue) {......free( ca60: 63 75 72 72 2d 3e 76 61 6c 75 65 29 3b 0a 09 09 curr->value);... ca70: 09 09 7d 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 ..}.....break;.. ca80: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG ca90: 5f 43 41 52 44 55 52 4c 3a 0a 09 09 09 09 69 66 _CARDURL:.....if caa0: 20 28 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 (curr->value_ca cab0: 72 64 75 72 6c 29 20 7b 0a 09 09 09 09 09 66 72 rdurl) {......fr cac0: 65 65 28 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 ee(curr->value_c cad0: 61 72 64 75 72 6c 29 3b 0a 09 09 09 09 7d 0a 09 ardurl);.....}.. cae0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 ...break;...}... caf0: 09 66 72 65 65 28 63 75 72 72 29 3b 0a 09 7d 0a .free(curr);..}. cb00: 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a ..return;.}../*. cb10: 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 * SYNPOSIS. * cb20: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 .... *. * ARG cb30: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 2e 2e UMENTS. * .. cb40: 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 .. *. * RETURN V cb50: 41 4c 55 45 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a ALUE. * .... cb60: 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 *. * NOTES. * cb70: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 .... *. */.st cb80: 61 74 69 63 20 73 74 72 75 63 74 20 63 61 63 6b atic struct cack cb90: 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a 63 ey_tlv_entity *c cba0: 61 63 6b 65 79 5f 72 65 61 64 5f 74 6c 76 28 73 ackey_read_tlv(s cbb0: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f truct cackey_slo cbc0: 74 20 2a 73 6c 6f 74 29 20 7b 0a 09 73 74 72 75 t *slot) {..stru cbd0: 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e ct cackey_tlv_en cbe0: 74 69 74 79 20 2a 63 75 72 72 5f 65 6e 74 69 74 tity *curr_entit cbf0: 79 2c 20 2a 72 6f 6f 74 20 3d 20 4e 55 4c 4c 2c y, *root = NULL, cc00: 20 2a 6c 61 73 74 20 3d 20 4e 55 4c 4c 3b 0a 09 *last = NULL;.. cc10: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 74 6c unsigned char tl cc20: 65 6e 5f 62 75 66 5b 32 5d 2c 20 74 76 61 6c 5f en_buf[2], tval_ cc30: 62 75 66 5b 31 30 32 34 5d 2c 20 2a 74 76 61 6c buf[1024], *tval cc40: 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 ;..unsigned char cc50: 20 76 6c 65 6e 5f 62 75 66 5b 32 5d 2c 20 76 76 vlen_buf[2], vv cc60: 61 6c 5f 62 75 66 5b 38 31 39 32 5d 2c 20 2a 76 al_buf[8192], *v cc70: 76 61 6c 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 val;..unsigned c cc80: 68 61 72 20 2a 74 6d 70 62 75 66 3b 0a 09 75 6e har *tmpbuf;..un cc90: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 74 6d 70 62 signed long tmpb cca0: 75 66 6c 65 6e 3b 0a 09 73 73 69 7a 65 5f 74 20 uflen;..ssize_t ccb0: 74 6c 65 6e 2c 20 76 6c 65 6e 3b 0a 09 73 73 69 tlen, vlen;..ssi ccc0: 7a 65 5f 74 20 72 65 61 64 5f 72 65 74 3b 0a 09 ze_t read_ret;.. ccd0: 73 69 7a 65 5f 74 20 6f 66 66 73 65 74 5f 74 20 size_t offset_t cce0: 3d 20 30 2c 20 6f 66 66 73 65 74 5f 76 20 3d 20 = 0, offset_v = ccf0: 30 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 0;..unsigned cha cd00: 72 20 74 61 67 3b 0a 09 73 69 7a 65 5f 74 20 6c r tag;..size_t l cd10: 65 6e 67 74 68 3b 0a 23 69 66 64 65 66 20 48 41 ength;.#ifdef HA cd20: 56 45 5f 4c 49 42 5a 0a 09 69 6e 74 20 75 6e 63 VE_LIBZ..int unc cd30: 6f 6d 70 72 65 73 73 5f 72 65 74 3b 0a 23 65 6e ompress_ret;.#en cd40: 64 69 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 dif...CACKEY_DEB cd50: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle cd60: 64 2e 22 29 3b 0a 0a 09 72 65 61 64 5f 72 65 74 d.");...read_ret cd70: 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 = cackey_read_b cd80: 75 66 66 65 72 28 73 6c 6f 74 2c 20 74 6c 65 6e uffer(slot, tlen cd90: 5f 62 75 66 2c 20 73 69 7a 65 6f 66 28 74 6c 65 _buf, sizeof(tle cda0: 6e 5f 62 75 66 29 2c 20 31 2c 20 6f 66 66 73 65 n_buf), 1, offse cdb0: 74 5f 74 29 3b 0a 09 69 66 20 28 72 65 61 64 5f t_t);..if (read_ cdc0: 72 65 74 20 21 3d 20 73 69 7a 65 6f 66 28 74 6c ret != sizeof(tl cdd0: 65 6e 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 43 en_buf)) {...CAC cde0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF cdf0: 28 22 52 65 61 64 20 66 61 69 6c 65 64 2c 20 72 ("Read failed, r ce00: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail ce10: 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ure");....return ce20: 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 74 6c 65 (NULL);..}...tle ce30: 6e 20 3d 20 28 74 6c 65 6e 5f 62 75 66 5b 31 5d n = (tlen_buf[1] ce40: 20 3c 3c 20 38 29 20 7c 20 74 6c 65 6e 5f 62 75 << 8) | tlen_bu ce50: 66 5b 30 5d 3b 0a 0a 09 72 65 61 64 5f 72 65 74 f[0];...read_ret ce60: 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 = cackey_read_b ce70: 75 66 66 65 72 28 73 6c 6f 74 2c 20 76 6c 65 6e uffer(slot, vlen ce80: 5f 62 75 66 2c 20 73 69 7a 65 6f 66 28 76 6c 65 _buf, sizeof(vle ce90: 6e 5f 62 75 66 29 2c 20 32 2c 20 6f 66 66 73 65 n_buf), 2, offse cea0: 74 5f 76 29 3b 0a 09 69 66 20 28 72 65 61 64 5f t_v);..if (read_ ceb0: 72 65 74 20 21 3d 20 73 69 7a 65 6f 66 28 76 6c ret != sizeof(vl cec0: 65 6e 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 43 en_buf)) {...CAC ced0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF cee0: 28 22 52 65 61 64 20 66 61 69 6c 65 64 2c 20 72 ("Read failed, r cef0: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail cf00: 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ure");....return cf10: 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 76 6c 65 (NULL);..}...vle cf20: 6e 20 3d 20 28 76 6c 65 6e 5f 62 75 66 5b 31 5d n = (vlen_buf[1] cf30: 20 3c 3c 20 38 29 20 7c 20 76 6c 65 6e 5f 62 75 << 8) | vlen_bu cf40: 66 5b 30 5d 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 f[0];...CACKEY_D cf50: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 54 61 67 EBUG_PRINTF("Tag cf60: 20 4c 65 6e 67 74 68 20 3d 20 25 6c 75 2c 20 56 Length = %lu, V cf70: 61 6c 75 65 20 4c 65 6e 67 74 68 20 3d 20 25 6c alue Length = %l cf80: 75 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f u", (unsigned lo cf90: 6e 67 29 20 74 6c 65 6e 2c 20 28 75 6e 73 69 67 ng) tlen, (unsig cfa0: 6e 65 64 20 6c 6f 6e 67 29 20 76 6c 65 6e 29 3b ned long) vlen); cfb0: 0a 0a 09 6f 66 66 73 65 74 5f 74 20 2b 3d 20 32 ...offset_t += 2 cfc0: 3b 0a 09 6f 66 66 73 65 74 5f 76 20 2b 3d 20 32 ;..offset_v += 2 cfd0: 3b 0a 0a 09 69 66 20 28 74 6c 65 6e 20 3e 20 73 ;...if (tlen > s cfe0: 69 7a 65 6f 66 28 74 76 61 6c 5f 62 75 66 29 29 izeof(tval_buf)) cff0: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU d000: 47 5f 50 52 49 4e 54 46 28 22 54 61 67 20 6c 65 G_PRINTF("Tag le d010: 6e 67 74 68 20 69 73 20 74 6f 6f 20 6c 61 72 67 ngth is too larg d020: 65 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 e, returning in d030: 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 failure");....re d040: 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a turn(NULL);..}.. d050: 09 69 66 20 28 76 6c 65 6e 20 3e 20 73 69 7a 65 .if (vlen > size d060: 6f 66 28 76 76 61 6c 5f 62 75 66 29 29 20 7b 0a of(vval_buf)) {. d070: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P d080: 52 49 4e 54 46 28 22 56 61 6c 75 65 20 6c 65 6e RINTF("Value len d090: 67 74 68 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 gth is too large d0a0: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f d0b0: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 ailure");....ret d0c0: 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 urn(NULL);..}... d0d0: 72 65 61 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 read_ret = cacke d0e0: 79 5f 72 65 61 64 5f 62 75 66 66 65 72 28 73 6c y_read_buffer(sl d0f0: 6f 74 2c 20 74 76 61 6c 5f 62 75 66 2c 20 74 6c ot, tval_buf, tl d100: 65 6e 2c 20 31 2c 20 6f 66 66 73 65 74 5f 74 29 en, 1, offset_t) d110: 3b 0a 09 69 66 20 28 72 65 61 64 5f 72 65 74 20 ;..if (read_ret d120: 21 3d 20 74 6c 65 6e 29 20 7b 0a 09 09 43 41 43 != tlen) {...CAC d130: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF d140: 28 22 55 6e 61 62 6c 65 20 74 6f 20 72 65 61 64 ("Unable to read d150: 20 65 6e 74 69 72 65 20 54 2d 62 75 66 66 65 72 entire T-buffer d160: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f d170: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 ailure");....ret d180: 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 urn(NULL);..}... d190: 72 65 61 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 read_ret = cacke d1a0: 79 5f 72 65 61 64 5f 62 75 66 66 65 72 28 73 6c y_read_buffer(sl d1b0: 6f 74 2c 20 76 76 61 6c 5f 62 75 66 2c 20 76 6c ot, vval_buf, vl d1c0: 65 6e 2c 20 32 2c 20 6f 66 66 73 65 74 5f 76 29 en, 2, offset_v) d1d0: 3b 0a 09 69 66 20 28 72 65 61 64 5f 72 65 74 20 ;..if (read_ret d1e0: 21 3d 20 76 6c 65 6e 29 20 7b 0a 09 09 43 41 43 != vlen) {...CAC d1f0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF d200: 28 22 55 6e 61 62 6c 65 20 74 6f 20 72 65 61 64 ("Unable to read d210: 20 65 6e 74 69 72 65 20 56 2d 62 75 66 66 65 72 entire V-buffer d220: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f d230: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 ailure");....ret d240: 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 urn(NULL);..}... d250: 74 76 61 6c 20 3d 20 74 76 61 6c 5f 62 75 66 3b tval = tval_buf; d260: 0a 09 76 76 61 6c 20 3d 20 76 76 61 6c 5f 62 75 ..vval = vval_bu d270: 66 3b 0a 09 77 68 69 6c 65 20 28 74 6c 65 6e 20 f;..while (tlen d280: 3e 20 30 20 26 26 20 76 6c 65 6e 20 3e 20 30 29 > 0 && vlen > 0) d290: 20 7b 0a 09 09 74 61 67 20 3d 20 2a 74 76 61 6c {...tag = *tval d2a0: 3b 0a 09 09 74 76 61 6c 2b 2b 3b 0a 09 09 74 6c ;...tval++;...tl d2b0: 65 6e 2d 2d 3b 0a 0a 09 09 69 66 20 28 2a 74 76 en--;....if (*tv d2c0: 61 6c 20 3d 3d 20 30 78 66 66 29 20 7b 0a 09 09 al == 0xff) {... d2d0: 09 6c 65 6e 67 74 68 20 3d 20 28 74 76 61 6c 5b .length = (tval[ d2e0: 32 5d 20 3c 3c 20 38 29 20 7c 20 74 76 61 6c 5b 2] << 8) | tval[ d2f0: 31 5d 3b 0a 09 09 09 74 76 61 6c 20 2b 3d 20 33 1];....tval += 3 d300: 3b 0a 09 09 09 74 6c 65 6e 20 2d 3d 20 33 3b 0a ;....tlen -= 3;. d310: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 6c 65 ..} else {....le d320: 6e 67 74 68 20 3d 20 2a 74 76 61 6c 3b 0a 09 09 ngth = *tval;... d330: 09 74 76 61 6c 2b 2b 3b 0a 09 09 09 74 6c 65 6e .tval++;....tlen d340: 2d 2d 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b 45 --;...}....CACKE d350: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" d360: 54 61 67 3a 20 25 73 20 28 25 30 32 78 29 22 2c Tag: %s (%02x)", d370: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 CACKEY_DEBUG_FU d380: 4e 43 5f 54 41 47 5f 54 4f 5f 53 54 52 28 74 61 NC_TAG_TO_STR(ta d390: 67 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 69 6e g), (unsigned in d3a0: 74 29 20 74 61 67 29 3b 0a 09 09 43 41 43 4b 45 t) tag);...CACKE d3b0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 Y_DEBUG_PRINTBUF d3c0: 28 22 56 61 6c 75 65 3a 22 2c 20 76 76 61 6c 2c ("Value:", vval, d3d0: 20 6c 65 6e 67 74 68 29 3b 0a 0a 09 09 63 75 72 length);....cur d3e0: 72 5f 65 6e 74 69 74 79 20 3d 20 4e 55 4c 4c 3b r_entity = NULL; d3f0: 0a 09 09 73 77 69 74 63 68 20 28 74 61 67 29 20 ...switch (tag) d400: 7b 0a 09 09 09 63 61 73 65 20 47 53 43 49 53 5f {....case GSCIS_ d410: 54 41 47 5f 43 41 52 44 55 52 4c 3a 0a 09 09 09 TAG_CARDURL:.... d420: 09 63 75 72 72 5f 65 6e 74 69 74 79 20 3d 20 6d .curr_entity = m d430: 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 75 alloc(sizeof(*cu d440: 72 72 5f 65 6e 74 69 74 79 29 29 3b 0a 09 09 09 rr_entity));.... d450: 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 .curr_entity->va d460: 6c 75 65 5f 63 61 72 64 75 72 6c 20 3d 20 6d 61 lue_cardurl = ma d470: 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 75 72 lloc(sizeof(*cur d480: 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 5f r_entity->value_ d490: 63 61 72 64 75 72 6c 29 29 3b 0a 0a 09 09 09 09 cardurl));...... d4a0: 6d 65 6d 63 70 79 28 63 75 72 72 5f 65 6e 74 69 memcpy(curr_enti d4b0: 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 ty->value_cardur d4c0: 6c 2d 3e 72 69 64 2c 20 76 76 61 6c 2c 20 35 29 l->rid, vval, 5) d4d0: 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 ;.....curr_entit d4e0: 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c y->value_cardurl d4f0: 2d 3e 61 70 70 74 79 70 65 20 3d 20 76 76 61 6c ->apptype = vval d500: 5b 35 5d 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e [5];.....curr_en d510: 74 69 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 tity->value_card d520: 75 72 6c 2d 3e 6f 62 6a 65 63 74 69 64 20 3d 20 url->objectid = d530: 28 76 76 61 6c 5b 36 5d 20 3c 3c 20 38 29 20 7c (vval[6] << 8) | d540: 20 76 76 61 6c 5b 37 5d 3b 0a 09 09 09 09 63 75 vval[7];.....cu d550: 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 rr_entity->value d560: 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 69 64 20 _cardurl->appid d570: 3d 20 28 76 76 61 6c 5b 38 5d 20 3c 3c 20 38 29 = (vval[8] << 8) d580: 20 7c 20 76 76 61 6c 5b 39 5d 3b 0a 0a 09 09 09 | vval[9];..... d590: 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 74 61 .curr_entity->ta d5a0: 67 20 3d 20 74 61 67 3b 0a 09 09 09 09 63 75 72 g = tag;.....cur d5b0: 72 5f 65 6e 74 69 74 79 2d 3e 5f 6e 65 78 74 20 r_entity->_next d5c0: 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 09 62 72 65 = NULL;......bre d5d0: 61 6b 3b 0a 09 09 09 63 61 73 65 20 47 53 43 49 ak;....case GSCI d5e0: 53 5f 54 41 47 5f 41 43 52 5f 54 41 42 4c 45 3a S_TAG_ACR_TABLE: d5f0: 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 .....curr_entity d600: 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 = malloc(sizeof d610: 28 2a 63 75 72 72 5f 65 6e 74 69 74 79 29 29 3b (*curr_entity)); d620: 0a 09 09 09 09 74 6d 70 62 75 66 20 3d 20 6d 61 .....tmpbuf = ma d630: 6c 6c 6f 63 28 6c 65 6e 67 74 68 29 3b 0a 0a 09 lloc(length);... d640: 09 09 09 6d 65 6d 63 70 79 28 74 6d 70 62 75 66 ...memcpy(tmpbuf d650: 2c 20 76 76 61 6c 2c 20 6c 65 6e 67 74 68 29 3b , vval, length); d660: 0a 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 ......curr_entit d670: 79 2d 3e 74 61 67 20 3d 20 74 61 67 3b 0a 09 09 y->tag = tag;... d680: 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 6c ..curr_entity->l d690: 65 6e 67 74 68 20 3d 20 6c 65 6e 67 74 68 3b 0a ength = length;. d6a0: 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d ....curr_entity- d6b0: 3e 76 61 6c 75 65 20 3d 20 74 6d 70 62 75 66 3b >value = tmpbuf; d6c0: 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 .....curr_entity d6d0: 2d 3e 5f 6e 65 78 74 20 3d 20 4e 55 4c 4c 3b 0a ->_next = NULL;. d6e0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c d6f0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45 ase GSCIS_TAG_CE d700: 52 54 49 46 49 43 41 54 45 3a 0a 09 09 09 09 63 RTIFICATE:.....c d710: 75 72 72 5f 65 6e 74 69 74 79 20 3d 20 6d 61 6c urr_entity = mal d720: 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 75 72 72 loc(sizeof(*curr d730: 5f 65 6e 74 69 74 79 29 29 3b 0a 0a 23 69 66 64 _entity));..#ifd d740: 65 66 20 48 41 56 45 5f 4c 49 42 5a 0a 09 09 09 ef HAVE_LIBZ.... d750: 09 74 6d 70 62 75 66 6c 65 6e 20 3d 20 6c 65 6e .tmpbuflen = len d760: 67 74 68 20 2a 20 32 3b 0a 09 09 09 09 74 6d 70 gth * 2;.....tmp d770: 62 75 66 20 3d 20 6d 61 6c 6c 6f 63 28 74 6d 70 buf = malloc(tmp d780: 62 75 66 6c 65 6e 29 3b 0a 0a 09 09 09 09 75 6e buflen);......un d790: 63 6f 6d 70 72 65 73 73 5f 72 65 74 20 3d 20 75 compress_ret = u d7a0: 6e 63 6f 6d 70 72 65 73 73 28 74 6d 70 62 75 66 ncompress(tmpbuf d7b0: 2c 20 26 74 6d 70 62 75 66 6c 65 6e 2c 20 76 76 , &tmpbuflen, vv d7c0: 61 6c 2c 20 6c 65 6e 67 74 68 29 3b 0a 09 09 09 al, length);.... d7d0: 09 69 66 20 28 75 6e 63 6f 6d 70 72 65 73 73 5f .if (uncompress_ d7e0: 72 65 74 20 21 3d 20 5a 5f 4f 4b 29 20 7b 0a 09 ret != Z_OK) {.. d7f0: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG d800: 5f 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 _PRINTF("Failed d810: 74 6f 20 64 65 63 6f 6d 70 72 65 73 73 2c 20 75 to decompress, u d820: 6e 63 6f 6d 70 72 65 73 73 28 29 20 72 65 74 75 ncompress() retu d830: 72 6e 65 64 20 25 69 20 2d 2d 20 72 65 73 6f 72 rned %i -- resor d840: 74 69 6e 67 20 74 6f 20 64 69 72 65 63 74 20 63 ting to direct c d850: 6f 70 79 22 2c 20 75 6e 63 6f 6d 70 72 65 73 73 opy", uncompress d860: 5f 72 65 74 29 3b 0a 0a 09 09 09 09 09 74 6d 70 _ret);.......tmp d870: 62 75 66 6c 65 6e 20 3d 20 6c 65 6e 67 74 68 3b buflen = length; d880: 0a 09 09 09 09 09 6d 65 6d 63 70 79 28 74 6d 70 ......memcpy(tmp d890: 62 75 66 2c 20 76 76 61 6c 2c 20 6c 65 6e 67 74 buf, vval, lengt d8a0: 68 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 h);.....}......C d8b0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN d8c0: 54 42 55 46 28 22 44 65 63 6f 6d 70 72 65 73 73 TBUF("Decompress d8d0: 65 64 20 74 6f 3a 22 2c 20 74 6d 70 62 75 66 2c ed to:", tmpbuf, d8e0: 20 74 6d 70 62 75 66 6c 65 6e 29 3b 0a 23 65 6c tmpbuflen);.#el d8f0: 73 65 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 se.....CACKEY_DE d900: 42 55 47 5f 50 52 49 4e 54 46 28 22 4d 69 73 73 BUG_PRINTF("Miss d910: 69 6e 67 20 5a 4c 49 42 20 53 75 70 70 6f 72 74 ing ZLIB Support d920: 2c 20 74 68 69 73 20 63 65 72 74 69 66 69 63 61 , this certifica d930: 74 65 20 69 73 20 6c 69 6b 65 6c 79 20 75 73 65 te is likely use d940: 6c 65 73 73 2e 2e 2e 22 29 3b 0a 0a 09 09 09 09 less...");...... d950: 74 6d 70 62 75 66 6c 65 6e 20 3d 20 6c 65 6e 67 tmpbuflen = leng d960: 74 68 3b 0a 09 09 09 09 6d 65 6d 63 70 79 28 74 th;.....memcpy(t d970: 6d 70 62 75 66 2c 20 76 76 61 6c 2c 20 6c 65 6e mpbuf, vval, len d980: 67 74 68 29 3b 0a 23 65 6e 64 69 66 0a 0a 09 09 gth);.#endif.... d990: 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 74 ..curr_entity->t d9a0: 61 67 20 3d 20 74 61 67 3b 0a 09 09 09 09 63 75 ag = tag;.....cu d9b0: 72 72 5f 65 6e 74 69 74 79 2d 3e 6c 65 6e 67 74 rr_entity->lengt d9c0: 68 20 3d 20 74 6d 70 62 75 66 6c 65 6e 3b 0a 09 h = tmpbuflen;.. d9d0: 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e ...curr_entity-> d9e0: 76 61 6c 75 65 20 3d 20 74 6d 70 62 75 66 3b 0a value = tmpbuf;. d9f0: 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d ....curr_entity- da00: 3e 5f 6e 65 78 74 20 3d 20 4e 55 4c 4c 3b 0a 0a >_next = NULL;.. da10: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca da20: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 50 4b 43 se GSCIS_TAG_PKC da30: 53 31 35 3a 0a 09 09 09 09 63 75 72 72 5f 65 6e S15:.....curr_en da40: 74 69 74 79 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 tity = malloc(si da50: 7a 65 6f 66 28 2a 63 75 72 72 5f 65 6e 74 69 74 zeof(*curr_entit da60: 79 29 29 3b 0a 0a 09 09 09 09 63 75 72 72 5f 65 y));......curr_e da70: 6e 74 69 74 79 2d 3e 74 61 67 20 3d 20 74 61 67 ntity->tag = tag da80: 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 ;.....curr_entit da90: 79 2d 3e 76 61 6c 75 65 5f 62 79 74 65 20 3d 20 y->value_byte = daa0: 76 76 61 6c 5b 30 5d 3b 0a 09 09 09 09 63 75 72 vval[0];.....cur dab0: 72 5f 65 6e 74 69 74 79 2d 3e 5f 6e 65 78 74 20 r_entity->_next dac0: 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 09 62 72 65 = NULL;......bre dad0: 61 6b 3b 0a 09 09 7d 0a 0a 09 09 76 76 61 6c 20 ak;...}....vval dae0: 2b 3d 20 6c 65 6e 67 74 68 3b 0a 09 09 76 6c 65 += length;...vle daf0: 6e 20 2d 3d 20 6c 65 6e 67 74 68 3b 0a 0a 09 09 n -= length;.... db00: 69 66 20 28 63 75 72 72 5f 65 6e 74 69 74 79 20 if (curr_entity db10: 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 69 66 != NULL) {....if db20: 20 28 72 6f 6f 74 20 3d 3d 20 4e 55 4c 4c 29 20 (root == NULL) db30: 7b 0a 09 09 09 09 72 6f 6f 74 20 3d 20 63 75 72 {.....root = cur db40: 72 5f 65 6e 74 69 74 79 3b 0a 09 09 09 7d 0a 0a r_entity;....}.. db50: 09 09 09 69 66 20 28 6c 61 73 74 20 21 3d 20 4e ...if (last != N db60: 55 4c 4c 29 20 7b 0a 09 09 09 09 6c 61 73 74 2d ULL) {.....last- db70: 3e 5f 6e 65 78 74 20 3d 20 63 75 72 72 5f 65 6e >_next = curr_en db80: 74 69 74 79 3b 0a 09 09 09 7d 0a 0a 09 09 09 6c tity;....}.....l db90: 61 73 74 20 3d 20 63 75 72 72 5f 65 6e 74 69 74 ast = curr_entit dba0: 79 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 72 65 74 75 y;...}..}...retu dbb0: 72 6e 28 72 6f 6f 74 29 3b 0a 7d 0a 0a 2f 2a 0a rn(root);.}../*. dbc0: 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 * SYNPOSIS. * dbd0: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 .... *. * ARG dbe0: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 2e 2e UMENTS. * .. dbf0: 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 .. *. * RETURN V dc00: 41 4c 55 45 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a ALUE. * .... dc10: 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 *. * NOTES. * dc20: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 .... *. */.st dc30: 61 74 69 63 20 76 6f 69 64 20 63 61 63 6b 65 79 atic void cackey dc40: 5f 66 72 65 65 5f 63 65 72 74 73 28 73 74 72 75 _free_certs(stru dc50: 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 ct cackey_pcsc_i dc60: 64 65 6e 74 69 74 79 20 2a 73 74 61 72 74 2c 20 dentity *start, dc70: 73 69 7a 65 5f 74 20 63 6f 75 6e 74 2c 20 69 6e size_t count, in dc80: 74 20 66 72 65 65 5f 73 74 61 72 74 29 20 7b 0a t free_start) {. dc90: 09 73 69 7a 65 5f 74 20 69 64 78 3b 0a 0a 09 69 .size_t idx;...i dca0: 66 20 28 73 74 61 72 74 20 3d 3d 20 4e 55 4c 4c f (start == NULL dcb0: 29 20 7b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d ) {...return;..} dcc0: 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b ...for (idx = 0; dcd0: 20 69 64 78 20 3c 20 63 6f 75 6e 74 3b 20 69 64 idx < count; id dce0: 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 73 74 61 x++) {...if (sta dcf0: 72 74 5b 69 64 78 5d 2e 63 65 72 74 69 66 69 63 rt[idx].certific dd00: 61 74 65 29 20 7b 0a 09 09 09 66 72 65 65 28 73 ate) {....free(s dd10: 74 61 72 74 5b 69 64 78 5d 2e 63 65 72 74 69 66 tart[idx].certif dd20: 69 63 61 74 65 29 3b 0a 09 09 7d 0a 09 7d 0a 0a icate);...}..}.. dd30: 09 69 66 20 28 66 72 65 65 5f 73 74 61 72 74 29 .if (free_start) dd40: 20 7b 0a 09 09 66 72 65 65 28 73 74 61 72 74 29 {...free(start) dd50: 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d ;..}...return;.} dd60: 0a 0a 73 74 61 74 69 63 20 73 74 72 75 63 74 20 ..static struct dd70: 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e cackey_pcsc_iden dd80: 74 69 74 79 20 2a 63 61 63 6b 65 79 5f 63 6f 70 tity *cackey_cop dd90: 79 5f 63 65 72 74 73 28 73 74 72 75 63 74 20 63 y_certs(struct c dda0: 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 ackey_pcsc_ident ddb0: 69 74 79 20 2a 64 65 73 74 2c 20 73 74 72 75 63 ity *dest, struc ddc0: 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 t cackey_pcsc_id ddd0: 65 6e 74 69 74 79 20 2a 73 74 61 72 74 2c 20 73 entity *start, s dde0: 69 7a 65 5f 74 20 63 6f 75 6e 74 29 20 7b 0a 09 ize_t count) {.. ddf0: 73 69 7a 65 5f 74 20 69 64 78 3b 0a 0a 09 69 66 size_t idx;...if de00: 20 28 73 74 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 (start == NULL) de10: 20 7b 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c {...return(NULL de20: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 64 65 73 74 );..}...if (dest de30: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 64 65 == NULL) {...de de40: 73 74 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 st = malloc(size de50: 6f 66 28 2a 64 65 73 74 29 20 2a 20 63 6f 75 6e of(*dest) * coun de60: 74 29 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 t);..}...for (id de70: 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 63 6f 75 x = 0; idx < cou de80: 6e 74 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 6d nt; idx++) {...m de90: 65 6d 63 70 79 28 64 65 73 74 5b 69 64 78 5d 2e emcpy(dest[idx]. dea0: 61 70 70 6c 65 74 2c 20 73 74 61 72 74 5b 69 64 applet, start[id deb0: 78 5d 2e 61 70 70 6c 65 74 2c 20 73 69 7a 65 6f x].applet, sizeo dec0: 66 28 64 65 73 74 5b 69 64 78 5d 2e 61 70 70 6c f(dest[idx].appl ded0: 65 74 29 29 3b 0a 09 09 64 65 73 74 5b 69 64 78 et));...dest[idx dee0: 5d 2e 66 69 6c 65 20 3d 20 73 74 61 72 74 5b 69 ].file = start[i def0: 64 78 5d 2e 66 69 6c 65 3b 0a 09 09 64 65 73 74 dx].file;...dest df00: 5b 69 64 78 5d 2e 63 65 72 74 69 66 69 63 61 74 [idx].certificat df10: 65 5f 6c 65 6e 20 3d 20 73 74 61 72 74 5b 69 64 e_len = start[id df20: 78 5d 2e 63 65 72 74 69 66 69 63 61 74 65 5f 6c x].certificate_l df30: 65 6e 3b 0a 09 09 64 65 73 74 5b 69 64 78 5d 2e en;...dest[idx]. df40: 6b 65 79 73 69 7a 65 20 3d 20 73 74 61 72 74 5b keysize = start[ df50: 69 64 78 5d 2e 6b 65 79 73 69 7a 65 3b 0a 0a 09 idx].keysize;... df60: 09 64 65 73 74 5b 69 64 78 5d 2e 63 65 72 74 69 .dest[idx].certi df70: 66 69 63 61 74 65 20 3d 20 6d 61 6c 6c 6f 63 28 ficate = malloc( df80: 64 65 73 74 5b 69 64 78 5d 2e 63 65 72 74 69 66 dest[idx].certif df90: 69 63 61 74 65 5f 6c 65 6e 29 3b 0a 09 09 6d 65 icate_len);...me dfa0: 6d 63 70 79 28 64 65 73 74 5b 69 64 78 5d 2e 63 mcpy(dest[idx].c dfb0: 65 72 74 69 66 69 63 61 74 65 2c 20 73 74 61 72 ertificate, star dfc0: 74 5b 69 64 78 5d 2e 63 65 72 74 69 66 69 63 61 t[idx].certifica dfd0: 74 65 2c 20 64 65 73 74 5b 69 64 78 5d 2e 63 65 te, dest[idx].ce dfe0: 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 29 3b 0a rtificate_len);. dff0: 09 7d 0a 0a 09 72 65 74 75 72 6e 28 64 65 73 74 .}...return(dest e000: 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 );.}../*. * SYNP e010: 4f 53 49 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a OSIS. * .... e020: 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a *. * ARGUMENTS. e030: 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a * .... *. * e040: 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a RETURN VALUE. * e050: 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 4e .... *. * N e060: 4f 54 45 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a OTES. * .... e070: 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 73 74 *. */.static st e080: 72 75 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 ruct cackey_pcsc e090: 5f 69 64 65 6e 74 69 74 79 20 2a 63 61 63 6b 65 _identity *cacke e0a0: 79 5f 72 65 61 64 5f 63 65 72 74 73 28 73 74 72 y_read_certs(str e0b0: 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 uct cackey_slot e0c0: 2a 73 6c 6f 74 2c 20 73 74 72 75 63 74 20 63 61 *slot, struct ca e0d0: 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 ckey_pcsc_identi e0e0: 74 79 20 2a 63 65 72 74 73 2c 20 75 6e 73 69 67 ty *certs, unsig e0f0: 6e 65 64 20 6c 6f 6e 67 20 2a 63 6f 75 6e 74 29 ned long *count) e100: 20 7b 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 {..struct cacke e110: 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 y_pcsc_identity e120: 2a 63 75 72 72 5f 69 64 3b 0a 09 73 74 72 75 63 *curr_id;..struc e130: 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 t cackey_tlv_ent e140: 69 74 79 20 2a 63 63 63 5f 74 6c 76 2c 20 2a 63 ity *ccc_tlv, *c e150: 63 63 5f 63 75 72 72 2c 20 2a 61 70 70 5f 74 6c cc_curr, *app_tl e160: 76 2c 20 2a 61 70 70 5f 63 75 72 72 3b 0a 09 75 v, *app_curr;..u e170: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 63 63 nsigned char ccc e180: 5f 61 69 64 5b 5d 20 3d 20 7b 47 53 43 49 53 5f _aid[] = {GSCIS_ e190: 41 49 44 5f 43 43 43 7d 3b 0a 09 75 6e 73 69 67 AID_CCC};..unsig e1a0: 6e 65 64 20 63 68 61 72 20 63 75 72 72 5f 61 69 ned char curr_ai e1b0: 64 5b 37 5d 3b 0a 09 75 6e 73 69 67 6e 65 64 20 d[7];..unsigned e1c0: 6c 6f 6e 67 20 6f 75 74 69 64 78 20 3d 20 30 3b long outidx = 0; e1d0: 0a 09 63 61 63 6b 65 79 5f 72 65 74 20 74 72 61 ..cackey_ret tra e1e0: 6e 73 61 63 74 69 6f 6e 5f 72 65 74 3b 0a 09 69 nsaction_ret;..i e1f0: 6e 74 20 63 65 72 74 73 5f 72 65 73 69 7a 61 62 nt certs_resizab e200: 6c 65 3b 0a 09 69 6e 74 20 73 65 6e 64 5f 72 65 le;..int send_re e210: 74 2c 20 73 65 6c 65 63 74 5f 72 65 74 3b 0a 0a t, select_ret;.. e220: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR e230: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); e240: 0a 0a 09 69 66 20 28 63 6f 75 6e 74 20 3d 3d 20 ...if (count == e250: 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY e260: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 63 _DEBUG_PRINTF("c e270: 6f 75 6e 74 20 69 73 20 4e 55 4c 4c 2c 20 72 65 ount is NULL, re e280: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu e290: 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 re");....return( e2a0: 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 NULL);..}...if ( e2b0: 63 65 72 74 73 20 21 3d 20 4e 55 4c 4c 29 20 7b certs != NULL) { e2c0: 0a 09 09 69 66 20 28 2a 63 6f 75 6e 74 20 3d 3d ...if (*count == e2d0: 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 0) {....CACKEY_ e2e0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re e2f0: 71 75 65 73 74 65 64 20 77 65 20 72 65 74 75 72 quested we retur e300: 6e 20 30 20 6f 62 6a 65 63 74 73 2c 20 73 68 6f n 0 objects, sho e310: 72 74 2d 63 69 72 63 75 69 74 22 29 3b 0a 0a 09 rt-circuit");... e320: 09 09 72 65 74 75 72 6e 28 63 65 72 74 73 29 3b ..return(certs); e330: 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 21 73 ...}..}...if (!s e340: 6c 6f 74 2d 3e 73 6c 6f 74 5f 72 65 73 65 74 29 lot->slot_reset) e350: 20 7b 0a 09 09 69 66 20 28 73 6c 6f 74 2d 3e 63 {...if (slot->c e360: 61 63 68 65 64 5f 63 65 72 74 73 29 20 7b 0a 09 ached_certs) {.. e370: 09 09 69 66 20 28 63 65 72 74 73 20 3d 3d 20 4e ..if (certs == N e380: 55 4c 4c 29 20 7b 0a 09 09 09 09 63 65 72 74 73 ULL) {.....certs e390: 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 = malloc(sizeof e3a0: 28 2a 63 65 72 74 73 29 20 2a 20 73 6c 6f 74 2d (*certs) * slot- e3b0: 3e 63 61 63 68 65 64 5f 63 65 72 74 73 5f 63 6f >cached_certs_co e3c0: 75 6e 74 29 3b 0a 09 09 09 09 2a 63 6f 75 6e 74 unt);.....*count e3d0: 20 3d 20 73 6c 6f 74 2d 3e 63 61 63 68 65 64 5f = slot->cached_ e3e0: 63 65 72 74 73 5f 63 6f 75 6e 74 3b 0a 0a 09 09 certs_count;.... e3f0: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 69 66 .} else {.....if e400: 20 28 2a 63 6f 75 6e 74 20 3e 20 73 6c 6f 74 2d (*count > slot- e410: 3e 63 61 63 68 65 64 5f 63 65 72 74 73 5f 63 6f >cached_certs_co e420: 75 6e 74 29 20 7b 0a 09 09 09 09 09 2a 63 6f 75 unt) {......*cou e430: 6e 74 20 3d 20 73 6c 6f 74 2d 3e 63 61 63 68 65 nt = slot->cache e440: 64 5f 63 65 72 74 73 5f 63 6f 75 6e 74 3b 0a 09 d_certs_count;.. e450: 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 63 61 ...}....}.....ca e460: 63 6b 65 79 5f 63 6f 70 79 5f 63 65 72 74 73 28 ckey_copy_certs( e470: 63 65 72 74 73 2c 20 73 6c 6f 74 2d 3e 63 61 63 certs, slot->cac e480: 68 65 64 5f 63 65 72 74 73 2c 20 2a 63 6f 75 6e hed_certs, *coun e490: 74 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 63 t);.....return(c e4a0: 65 72 74 73 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 erts);...}..}... e4b0: 69 66 20 28 73 6c 6f 74 2d 3e 63 61 63 68 65 64 if (slot->cached e4c0: 5f 63 65 72 74 73 29 20 7b 0a 09 09 63 61 63 6b _certs) {...cack e4d0: 65 79 5f 66 72 65 65 5f 63 65 72 74 73 28 73 6c ey_free_certs(sl e4e0: 6f 74 2d 3e 63 61 63 68 65 64 5f 63 65 72 74 73 ot->cached_certs e4f0: 2c 20 73 6c 6f 74 2d 3e 63 61 63 68 65 64 5f 63 , slot->cached_c e500: 65 72 74 73 5f 63 6f 75 6e 74 2c 20 31 29 3b 0a erts_count, 1);. e510: 0a 09 09 73 6c 6f 74 2d 3e 63 61 63 68 65 64 5f ...slot->cached_ e520: 63 65 72 74 73 20 3d 20 4e 55 4c 4c 3b 0a 09 7d certs = NULL;..} e530: 0a 0a 09 2f 2a 20 42 65 67 69 6e 20 61 20 53 6d .../* Begin a Sm e540: 61 72 74 43 61 72 64 20 74 72 61 6e 73 61 63 74 artCard transact e550: 69 6f 6e 20 2a 2f 0a 09 74 72 61 6e 73 61 63 74 ion */..transact e560: 69 6f 6e 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 ion_ret = cackey e570: 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 _begin_transacti e580: 6f 6e 28 73 6c 6f 74 29 3b 0a 09 69 66 20 28 74 on(slot);..if (t e590: 72 61 6e 73 61 63 74 69 6f 6e 5f 72 65 74 20 21 ransaction_ret ! e5a0: 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f = CACKEY_PCSC_S_ e5b0: 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 OK) {...CACKEY_D e5c0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 EBUG_PRINTF("Una e5d0: 62 6c 65 20 62 65 67 69 6e 20 74 72 61 6e 73 61 ble begin transa e5e0: 63 74 69 6f 6e 2c 20 72 65 74 75 72 6e 69 6e 67 ction, returning e5f0: 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a in failure");.. e600: 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a ..return(NULL);. e610: 09 7d 0a 0a 09 69 66 20 28 63 65 72 74 73 20 3d .}...if (certs = e620: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 63 65 72 74 = NULL) {...cert e630: 73 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f s = malloc(sizeo e640: 66 28 2a 63 65 72 74 73 29 20 2a 20 35 29 3b 0a f(*certs) * 5);. e650: 09 09 2a 63 6f 75 6e 74 20 3d 20 35 3b 0a 09 09 ..*count = 5;... e660: 63 65 72 74 73 5f 72 65 73 69 7a 61 62 6c 65 20 certs_resizable e670: 3d 20 31 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 = 1;..} else {.. e680: 09 63 65 72 74 73 5f 72 65 73 69 7a 61 62 6c 65 .certs_resizable e690: 20 3d 20 30 3b 0a 09 7d 0a 0a 09 2f 2a 20 53 65 = 0;..}.../* Se e6a0: 6c 65 63 74 20 74 68 65 20 43 43 43 20 41 70 70 lect the CCC App e6b0: 6c 65 74 20 2a 2f 0a 09 73 65 6e 64 5f 72 65 74 let */..send_ret e6c0: 20 3d 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 = cackey_select e6d0: 5f 61 70 70 6c 65 74 28 73 6c 6f 74 2c 20 63 63 _applet(slot, cc e6e0: 63 5f 61 69 64 2c 20 73 69 7a 65 6f 66 28 63 63 c_aid, sizeof(cc e6f0: 63 5f 61 69 64 29 29 3b 0a 09 69 66 20 28 73 65 c_aid));..if (se e700: 6e 64 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 nd_ret != CACKEY e710: 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 _PCSC_S_OK) {... e720: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI e730: 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 73 NTF("Unable to s e740: 65 6c 65 63 74 20 43 43 43 20 41 70 70 6c 65 74 elect CCC Applet e750: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f e760: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 2f 2a 20 ailure");..../* e770: 54 65 72 6d 69 6e 61 74 65 20 53 6d 61 72 74 43 Terminate SmartC e780: 61 72 64 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 ard Transaction e790: 2a 2f 0a 09 09 63 61 63 6b 65 79 5f 65 6e 64 5f */...cackey_end_ e7a0: 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 transaction(slot e7b0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c );....return(NUL e7c0: 4c 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 52 65 61 64 L);..}.../* Read e7d0: 20 61 6c 6c 20 74 68 65 20 61 70 70 6c 65 74 73 all the applets e7e0: 20 66 72 6f 6d 20 74 68 65 20 43 43 43 27 73 20 from the CCC's e7f0: 54 4c 56 20 2a 2f 0a 09 63 63 63 5f 74 6c 76 20 TLV */..ccc_tlv e800: 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 74 6c = cackey_read_tl e810: 76 28 73 6c 6f 74 29 3b 0a 0a 09 2f 2a 20 4c 6f v(slot);.../* Lo e820: 6f 6b 20 66 6f 72 20 43 41 52 44 55 52 4c 73 20 ok for CARDURLs e830: 74 68 61 74 20 63 6f 6f 72 65 73 70 6f 6e 64 20 that coorespond e840: 74 6f 20 50 4b 49 20 61 70 70 6c 65 74 73 20 2a to PKI applets * e850: 2f 0a 09 66 6f 72 20 28 63 63 63 5f 63 75 72 72 /..for (ccc_curr e860: 20 3d 20 63 63 63 5f 74 6c 76 3b 20 63 63 63 5f = ccc_tlv; ccc_ e870: 63 75 72 72 3b 20 63 63 63 5f 63 75 72 72 20 3d curr; ccc_curr = e880: 20 63 63 63 5f 63 75 72 72 2d 3e 5f 6e 65 78 74 ccc_curr->_next e890: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB e8a0: 55 47 5f 50 52 49 4e 54 46 28 22 46 6f 75 6e 64 UG_PRINTF("Found e8b0: 20 74 61 67 3a 20 25 73 20 2e 2e 2e 20 22 2c 20 tag: %s ... ", e8c0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN e8d0: 43 5f 54 41 47 5f 54 4f 5f 53 54 52 28 63 63 63 C_TAG_TO_STR(ccc e8e0: 5f 63 75 72 72 2d 3e 74 61 67 29 29 3b 0a 0a 09 _curr->tag));... e8f0: 09 69 66 20 28 63 63 63 5f 63 75 72 72 2d 3e 74 .if (ccc_curr->t e900: 61 67 20 21 3d 20 47 53 43 49 53 5f 54 41 47 5f ag != GSCIS_TAG_ e910: 43 41 52 44 55 52 4c 29 20 7b 0a 09 09 09 43 41 CARDURL) {....CA e920: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT e930: 46 28 22 20 20 2e 2e 2e 20 73 6b 69 70 70 69 6e F(" ... skippin e940: 67 20 69 74 20 28 77 65 20 6f 6e 6c 79 20 63 61 g it (we only ca e950: 72 65 20 61 62 6f 75 74 20 43 41 52 44 55 52 4c re about CARDURL e960: 73 29 22 29 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e s)");.....contin e970: 75 65 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 28 ue;...}....if (( e980: 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f ccc_curr->value_ e990: 63 61 72 64 75 72 6c 2d 3e 61 70 70 74 79 70 65 cardurl->apptype e9a0: 20 26 20 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 & CACKEY_TLV_AP e9b0: 50 5f 50 4b 49 29 20 21 3d 20 43 41 43 4b 45 59 P_PKI) != CACKEY e9c0: 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 29 20 7b 0a _TLV_APP_PKI) {. e9d0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ e9e0: 50 52 49 4e 54 46 28 22 20 20 2e 2e 2e 20 73 6b PRINTF(" ... sk e9f0: 69 70 70 69 6e 67 20 69 74 20 28 77 65 20 6f 6e ipping it (we on ea00: 6c 79 20 63 61 72 65 20 61 62 6f 75 74 20 50 4b ly care about PK ea10: 49 20 61 70 70 6c 65 74 73 2c 20 74 68 69 73 20 I applets, this ea20: 61 70 70 6c 65 74 20 73 75 70 70 6f 72 74 73 3a applet supports: ea30: 20 25 73 2f 25 30 32 78 29 22 2c 20 43 41 43 4b %s/%02x)", CACK ea40: 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 41 50 EY_DEBUG_FUNC_AP ea50: 50 54 59 50 45 5f 54 4f 5f 53 54 52 28 63 63 63 PTYPE_TO_STR(ccc ea60: 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 _curr->value_car ea70: 64 75 72 6c 2d 3e 61 70 70 74 79 70 65 29 2c 20 durl->apptype), ea80: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 63 (unsigned int) c ea90: 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 cc_curr->value_c eaa0: 61 72 64 75 72 6c 2d 3e 61 70 70 74 79 70 65 29 ardurl->apptype) eab0: 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a ;.....continue;. eac0: 09 09 7d 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 ..}....CACKEY_DE ead0: 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 52 49 BUG_PRINTBUF("RI eae0: 44 3a 22 2c 20 63 63 63 5f 63 75 72 72 2d 3e 76 D:", ccc_curr->v eaf0: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 72 69 alue_cardurl->ri eb00: 64 2c 20 73 69 7a 65 6f 66 28 63 63 63 5f 63 75 d, sizeof(ccc_cu eb10: 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 rr->value_cardur eb20: 6c 2d 3e 72 69 64 29 29 3b 0a 09 09 43 41 43 4b l->rid));...CACK eb30: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( eb40: 22 41 70 70 49 44 20 3d 20 25 73 2f 25 30 34 6c "AppID = %s/%04l eb50: 78 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 x", CACKEY_DEBUG eb60: 5f 46 55 4e 43 5f 4f 42 4a 49 44 5f 54 4f 5f 53 _FUNC_OBJID_TO_S eb70: 54 52 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c TR(ccc_curr->val eb80: 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 69 ue_cardurl->appi eb90: 64 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f d), (unsigned lo eba0: 6e 67 29 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 ng) ccc_curr->va ebb0: 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 lue_cardurl->app ebc0: 69 64 29 3b 0a 09 09 43 41 43 4b 45 59 5f 44 45 id);...CACKEY_DE ebd0: 42 55 47 5f 50 52 49 4e 54 46 28 22 4f 62 6a 65 BUG_PRINTF("Obje ebe0: 63 74 49 44 20 3d 20 25 73 2f 25 30 34 6c 78 22 ctID = %s/%04lx" ebf0: 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F ec00: 55 4e 43 5f 4f 42 4a 49 44 5f 54 4f 5f 53 54 52 UNC_OBJID_TO_STR ec10: 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 (ccc_curr->value ec20: 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 6a 65 63 74 _cardurl->object ec30: 69 64 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c id), (unsigned l ec40: 6f 6e 67 29 20 63 63 63 5f 63 75 72 72 2d 3e 76 ong) ccc_curr->v ec50: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 alue_cardurl->ob ec60: 6a 65 63 74 69 64 29 3b 0a 0a 09 09 6d 65 6d 63 jectid);....memc ec70: 70 79 28 63 75 72 72 5f 61 69 64 2c 20 63 63 63 py(curr_aid, ccc ec80: 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 _curr->value_car ec90: 64 75 72 6c 2d 3e 72 69 64 2c 20 73 69 7a 65 6f durl->rid, sizeo eca0: 66 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 f(ccc_curr->valu ecb0: 65 5f 63 61 72 64 75 72 6c 2d 3e 72 69 64 29 29 e_cardurl->rid)) ecc0: 3b 0a 09 09 63 75 72 72 5f 61 69 64 5b 73 69 7a ;...curr_aid[siz ecd0: 65 6f 66 28 63 75 72 72 5f 61 69 64 29 20 2d 20 eof(curr_aid) - ece0: 32 5d 20 3d 20 28 63 63 63 5f 63 75 72 72 2d 3e 2] = (ccc_curr-> ecf0: 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 value_cardurl->a ed00: 70 70 69 64 20 3e 3e 20 38 29 20 26 20 30 78 66 ppid >> 8) & 0xf ed10: 66 3b 0a 09 09 63 75 72 72 5f 61 69 64 5b 73 69 f;...curr_aid[si ed20: 7a 65 6f 66 28 63 75 72 72 5f 61 69 64 29 20 2d zeof(curr_aid) - ed30: 20 31 5d 20 3d 20 63 63 63 5f 63 75 72 72 2d 3e 1] = ccc_curr-> ed40: 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 value_cardurl->a ed50: 70 70 69 64 20 26 20 30 78 66 66 3b 0a 0a 09 09 ppid & 0xff;.... ed60: 2f 2a 20 53 65 6c 65 63 74 20 66 6f 75 6e 64 20 /* Select found ed70: 61 70 70 6c 65 74 20 2e 2e 2e 20 2a 2f 0a 09 09 applet ... */... ed80: 73 65 6c 65 63 74 5f 72 65 74 20 3d 20 63 61 63 select_ret = cac ed90: 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c 65 key_select_apple eda0: 74 28 73 6c 6f 74 2c 20 63 75 72 72 5f 61 69 64 t(slot, curr_aid edb0: 2c 20 73 69 7a 65 6f 66 28 63 75 72 72 5f 61 69 , sizeof(curr_ai edc0: 64 29 29 3b 0a 09 09 69 66 20 28 73 65 6c 65 63 d));...if (selec edd0: 74 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f t_ret != CACKEY_ ede0: 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 09 PCSC_S_OK) {.... edf0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI ee00: 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 73 NTF("Failed to s ee10: 65 6c 65 63 74 20 61 70 70 6c 65 74 2c 20 73 6b elect applet, sk ee20: 69 70 70 69 6e 67 20 70 72 6f 63 65 73 73 69 6e ipping processin ee30: 67 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 g of this object ee40: 22 29 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 65 ");.....continue ee50: 3b 0a 09 09 7d 0a 0a 09 09 2f 2a 20 2e 2e 2e 20 ;...}..../* ... ee60: 61 6e 64 20 6f 62 6a 65 63 74 20 28 66 69 6c 65 and object (file ee70: 29 20 2a 2f 0a 09 09 73 65 6c 65 63 74 5f 72 65 ) */...select_re ee80: 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 t = cackey_selec ee90: 74 5f 66 69 6c 65 28 73 6c 6f 74 2c 20 63 63 63 t_file(slot, ccc eea0: 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 _curr->value_car eeb0: 64 75 72 6c 2d 3e 6f 62 6a 65 63 74 69 64 29 3b durl->objectid); eec0: 0a 09 09 69 66 20 28 73 65 6c 65 63 74 5f 72 65 ...if (select_re eed0: 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 t != CACKEY_PCSC eee0: 5f 53 5f 4f 4b 29 20 7b 0a 09 09 09 43 41 43 4b _S_OK) {....CACK eef0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( ef00: 22 46 61 69 6c 65 64 20 74 6f 20 73 65 6c 65 63 "Failed to selec ef10: 74 20 66 69 6c 65 2c 20 73 6b 69 70 70 69 6e 67 t file, skipping ef20: 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 74 processing of t ef30: 68 69 73 20 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 his object");... ef40: 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a ..continue;...}. ef50: 0a 09 09 2f 2a 20 50 72 6f 63 65 73 73 20 74 68 .../* Process th ef60: 69 73 20 66 69 6c 65 27 73 20 54 4c 56 20 6c 6f is file's TLV lo ef70: 6f 6b 69 6e 67 20 66 6f 72 20 63 65 72 74 69 66 oking for certif ef80: 69 63 61 74 65 73 20 2a 2f 0a 09 09 61 70 70 5f icates */...app_ ef90: 74 6c 76 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 tlv = cackey_rea efa0: 64 5f 74 6c 76 28 73 6c 6f 74 29 3b 0a 0a 09 09 d_tlv(slot);.... efb0: 66 6f 72 20 28 61 70 70 5f 63 75 72 72 20 3d 20 for (app_curr = efc0: 61 70 70 5f 74 6c 76 3b 20 61 70 70 5f 63 75 72 app_tlv; app_cur efd0: 72 3b 20 61 70 70 5f 63 75 72 72 20 3d 20 61 70 r; app_curr = ap efe0: 70 5f 63 75 72 72 2d 3e 5f 6e 65 78 74 29 20 7b p_curr->_next) { eff0: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG f000: 5f 50 52 49 4e 54 46 28 22 46 6f 75 6e 64 20 74 _PRINTF("Found t f010: 61 67 3a 20 25 73 22 2c 20 43 41 43 4b 45 59 5f ag: %s", CACKEY_ f020: 44 45 42 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54 DEBUG_FUNC_TAG_T f030: 4f 5f 53 54 52 28 61 70 70 5f 63 75 72 72 2d 3e O_STR(app_curr-> f040: 74 61 67 29 29 3b 0a 09 09 09 69 66 20 28 61 70 tag));....if (ap f050: 70 5f 63 75 72 72 2d 3e 74 61 67 20 21 3d 20 47 p_curr->tag != G f060: 53 43 49 53 5f 54 41 47 5f 43 45 52 54 49 46 49 SCIS_TAG_CERTIFI f070: 43 41 54 45 29 20 7b 0a 09 09 09 09 43 41 43 4b CATE) {.....CACK f080: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( f090: 22 20 20 2e 2e 2e 20 73 6b 69 70 70 69 6e 67 20 " ... skipping f0a0: 69 74 20 28 77 65 20 6f 6e 6c 79 20 63 61 72 65 it (we only care f0b0: 20 61 62 6f 75 74 20 43 45 52 54 49 46 49 43 41 about CERTIFICA f0c0: 54 45 73 29 22 29 3b 0a 0a 09 09 09 09 63 6f 6e TEs)");......con f0d0: 74 69 6e 75 65 3b 0a 09 09 09 7d 0a 0a 09 09 09 tinue;....}..... f0e0: 63 75 72 72 5f 69 64 20 3d 20 26 63 65 72 74 73 curr_id = &certs f0f0: 5b 6f 75 74 69 64 78 5d 3b 0a 09 09 09 6f 75 74 [outidx];....out f100: 69 64 78 2b 2b 3b 0a 0a 09 09 09 6d 65 6d 63 70 idx++;.....memcp f110: 79 28 63 75 72 72 5f 69 64 2d 3e 61 70 70 6c 65 y(curr_id->apple f120: 74 2c 20 63 75 72 72 5f 61 69 64 2c 20 73 69 7a t, curr_aid, siz f130: 65 6f 66 28 63 75 72 72 5f 69 64 2d 3e 61 70 70 eof(curr_id->app f140: 6c 65 74 29 29 3b 0a 09 09 09 63 75 72 72 5f 69 let));....curr_i f150: 64 2d 3e 66 69 6c 65 20 3d 20 63 63 63 5f 63 75 d->file = ccc_cu f160: 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 rr->value_cardur f170: 6c 2d 3e 6f 62 6a 65 63 74 69 64 3b 0a 09 09 09 l->objectid;.... f180: 63 75 72 72 5f 69 64 2d 3e 6b 65 79 73 69 7a 65 curr_id->keysize f190: 20 3d 20 2d 31 3b 0a 0a 09 09 09 43 41 43 4b 45 = -1;.....CACKE f1a0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" f1b0: 46 69 6c 6c 69 6e 67 20 63 75 72 72 5f 69 64 2d Filling curr_id- f1c0: 3e 61 70 70 6c 65 74 20 28 25 70 29 20 77 69 74 >applet (%p) wit f1d0: 68 20 25 6c 75 20 62 79 74 65 73 3a 22 2c 20 63 h %lu bytes:", c f1e0: 75 72 72 5f 69 64 2d 3e 61 70 70 6c 65 74 2c 20 urr_id->applet, f1f0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) f200: 73 69 7a 65 6f 66 28 63 75 72 72 5f 69 64 2d 3e sizeof(curr_id-> f210: 61 70 70 6c 65 74 29 29 3b 0a 09 09 09 43 41 43 applet));....CAC f220: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 KEY_DEBUG_PRINTB f230: 55 46 28 22 56 41 4c 3a 22 2c 20 63 75 72 72 5f UF("VAL:", curr_ f240: 69 64 2d 3e 61 70 70 6c 65 74 2c 20 73 69 7a 65 id->applet, size f250: 6f 66 28 63 75 72 72 5f 69 64 2d 3e 61 70 70 6c of(curr_id->appl f260: 65 74 29 29 3b 0a 0a 09 09 09 63 75 72 72 5f 69 et));.....curr_i f270: 64 2d 3e 63 65 72 74 69 66 69 63 61 74 65 5f 6c d->certificate_l f280: 65 6e 20 3d 20 61 70 70 5f 63 75 72 72 2d 3e 6c en = app_curr->l f290: 65 6e 67 74 68 3b 0a 0a 09 09 09 63 75 72 72 5f ength;.....curr_ f2a0: 69 64 2d 3e 63 65 72 74 69 66 69 63 61 74 65 20 id->certificate f2b0: 3d 20 6d 61 6c 6c 6f 63 28 63 75 72 72 5f 69 64 = malloc(curr_id f2c0: 2d 3e 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 ->certificate_le f2d0: 6e 29 3b 0a 09 09 09 6d 65 6d 63 70 79 28 63 75 n);....memcpy(cu f2e0: 72 72 5f 69 64 2d 3e 63 65 72 74 69 66 69 63 61 rr_id->certifica f2f0: 74 65 2c 20 61 70 70 5f 63 75 72 72 2d 3e 76 61 te, app_curr->va f300: 6c 75 65 2c 20 63 75 72 72 5f 69 64 2d 3e 63 65 lue, curr_id->ce f310: 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 29 3b 0a rtificate_len);. f320: 0a 09 09 09 69 66 20 28 6f 75 74 69 64 78 20 3e ....if (outidx > f330: 3d 20 2a 63 6f 75 6e 74 29 20 7b 0a 09 09 09 09 = *count) {..... f340: 69 66 20 28 63 65 72 74 73 5f 72 65 73 69 7a 61 if (certs_resiza f350: 62 6c 65 29 20 7b 0a 09 09 09 09 09 2a 63 6f 75 ble) {......*cou f360: 6e 74 20 2a 3d 20 32 3b 0a 09 09 09 09 09 63 65 nt *= 2;......ce f370: 72 74 73 20 3d 20 72 65 61 6c 6c 6f 63 28 63 65 rts = realloc(ce f380: 72 74 73 2c 20 73 69 7a 65 6f 66 28 2a 63 65 72 rts, sizeof(*cer f390: 74 73 29 20 2a 20 28 2a 63 6f 75 6e 74 29 29 3b ts) * (*count)); f3a0: 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 .....} else {... f3b0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a ...break;.....}. f3c0: 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 63 61 63 6b ...}...}....cack f3d0: 65 79 5f 66 72 65 65 5f 74 6c 76 28 61 70 70 5f ey_free_tlv(app_ f3e0: 74 6c 76 29 3b 0a 0a 09 09 69 66 20 28 6f 75 74 tlv);....if (out f3f0: 69 64 78 20 3e 3d 20 2a 63 6f 75 6e 74 29 20 7b idx >= *count) { f400: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 09 ....break;...}.. f410: 7d 0a 0a 09 63 61 63 6b 65 79 5f 66 72 65 65 5f }...cackey_free_ f420: 74 6c 76 28 63 63 63 5f 74 6c 76 29 3b 0a 0a 09 tlv(ccc_tlv);... f430: 2a 63 6f 75 6e 74 20 3d 20 6f 75 74 69 64 78 3b *count = outidx; f440: 0a 0a 09 69 66 20 28 63 65 72 74 73 5f 72 65 73 ...if (certs_res f450: 69 7a 61 62 6c 65 29 20 7b 0a 09 09 63 65 72 74 izable) {...cert f460: 73 20 3d 20 72 65 61 6c 6c 6f 63 28 63 65 72 74 s = realloc(cert f470: 73 2c 20 73 69 7a 65 6f 66 28 2a 63 65 72 74 73 s, sizeof(*certs f480: 29 20 2a 20 28 2a 63 6f 75 6e 74 29 29 3b 0a 09 ) * (*count));.. f490: 7d 0a 0a 09 73 6c 6f 74 2d 3e 63 61 63 68 65 64 }...slot->cached f4a0: 5f 63 65 72 74 73 20 3d 20 63 61 63 6b 65 79 5f _certs = cackey_ f4b0: 63 6f 70 79 5f 63 65 72 74 73 28 4e 55 4c 4c 2c copy_certs(NULL, f4c0: 20 63 65 72 74 73 2c 20 2a 63 6f 75 6e 74 29 3b certs, *count); f4d0: 0a 09 73 6c 6f 74 2d 3e 63 61 63 68 65 64 5f 63 ..slot->cached_c f4e0: 65 72 74 73 5f 63 6f 75 6e 74 20 3d 20 2a 63 6f erts_count = *co f4f0: 75 6e 74 3b 0a 0a 09 2f 2a 20 54 65 72 6d 69 6e unt;.../* Termin f500: 61 74 65 20 53 6d 61 72 74 43 61 72 64 20 54 72 ate SmartCard Tr f510: 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 63 61 ansaction */..ca f520: 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 ckey_end_transac f530: 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 72 65 tion(slot);...re f540: 74 75 72 6e 28 63 65 72 74 73 29 3b 0a 7d 0a 0a turn(certs);.}.. f550: 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 /*. * SYNPOSIS. f560: 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 * .... *. * f570: 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 ARGUMENTS. * f580: 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 .... *. * RETUR f590: 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 2e N VALUE. * . f5a0: 2e 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 ... *. * NOTES. f5b0: 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f * .... *. */ f5c0: 0a 73 74 61 74 69 63 20 73 73 69 7a 65 5f 74 20 .static ssize_t f5d0: 63 61 63 6b 65 79 5f 73 69 67 6e 64 65 63 72 79 cackey_signdecry f5e0: 70 74 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 pt(struct cackey f5f0: 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 73 74 72 _slot *slot, str f600: 75 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 uct cackey_ident f610: 69 74 79 20 2a 69 64 65 6e 74 69 74 79 2c 20 75 ity *identity, u f620: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 75 nsigned char *bu f630: 66 2c 20 73 69 7a 65 5f 74 20 62 75 66 6c 65 6e f, size_t buflen f640: 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 , unsigned char f650: 2a 6f 75 74 62 75 66 2c 20 73 69 7a 65 5f 74 20 *outbuf, size_t f660: 6f 75 74 62 75 66 6c 65 6e 2c 20 69 6e 74 20 70 outbuflen, int p f670: 61 64 49 6e 70 75 74 2c 20 69 6e 74 20 75 6e 70 adInput, int unp f680: 61 64 4f 75 74 70 75 74 29 20 7b 0a 09 75 6e 73 adOutput) {..uns f690: 69 67 6e 65 64 20 63 68 61 72 20 2a 74 6d 70 62 igned char *tmpb f6a0: 75 66 2c 20 2a 74 6d 70 62 75 66 5f 73 2c 20 2a uf, *tmpbuf_s, * f6b0: 6f 75 74 62 75 66 5f 73 3b 0a 09 75 6e 73 69 67 outbuf_s;..unsig f6c0: 6e 65 64 20 63 68 61 72 20 62 79 74 65 73 5f 74 ned char bytes_t f6d0: 6f 5f 73 65 6e 64 2c 20 70 31 3b 0a 09 75 6e 73 o_send, p1;..uns f6e0: 69 67 6e 65 64 20 63 68 61 72 20 62 6c 6f 63 6b igned char block f6f0: 74 79 70 65 3b 0a 09 63 61 63 6b 65 79 5f 72 65 type;..cackey_re f700: 74 20 73 65 6e 64 5f 72 65 74 3b 0a 09 75 69 6e t send_ret;..uin f710: 74 31 36 5f 74 20 72 65 73 70 63 6f 64 65 3b 0a t16_t respcode;. f720: 09 73 73 69 7a 65 5f 74 20 72 65 74 76 61 6c 20 .ssize_t retval f730: 3d 20 30 2c 20 75 6e 70 61 64 6f 66 66 73 65 74 = 0, unpadoffset f740: 3b 0a 09 73 69 7a 65 5f 74 20 74 6d 70 62 75 66 ;..size_t tmpbuf f750: 6c 65 6e 2c 20 70 61 64 6c 65 6e 2c 20 74 6d 70 len, padlen, tmp f760: 6f 75 74 62 75 66 6c 65 6e 3b 0a 09 69 6e 74 20 outbuflen;..int f770: 66 72 65 65 5f 74 6d 70 62 75 66 20 3d 20 30 3b free_tmpbuf = 0; f780: 0a 09 69 6e 74 20 6c 65 3b 0a 0a 09 43 41 43 4b ..int le;...CACK f790: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( f7a0: 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if f7b0: 20 28 73 6c 6f 74 20 3d 3d 20 4e 55 4c 4c 29 20 (slot == NULL) f7c0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG f7d0: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. f7e0: 20 73 6c 6f 74 20 69 73 20 4e 55 4c 4c 22 29 3b slot is NULL"); f7f0: 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. f800: 09 7d 0a 0a 09 69 66 20 28 62 75 66 20 3d 3d 20 .}...if (buf == f810: 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY f820: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E f830: 72 72 6f 72 2e 20 20 62 75 66 20 69 73 20 4e 55 rror. buf is NU f840: 4c 4c 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 LL");....return( f850: 2d 31 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 6f 75 -1);..}...if (ou f860: 74 62 75 66 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a tbuf == NULL) {. f870: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P f880: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 6f RINTF("Error. o f890: 75 74 62 75 66 20 69 73 20 4e 55 4c 4c 22 29 3b utbuf is NULL"); f8a0: 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. f8b0: 09 7d 0a 0a 09 69 66 20 28 69 64 65 6e 74 69 74 .}...if (identit f8c0: 79 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 y == NULL) {...C f8d0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN f8e0: 54 46 28 22 45 72 72 6f 72 2e 20 20 69 64 65 6e TF("Error. iden f8f0: 74 69 74 79 20 69 73 20 4e 55 4c 4c 22 29 3b 0a tity is NULL");. f900: 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. f910: 7d 0a 0a 09 69 66 20 28 69 64 65 6e 74 69 74 79 }...if (identity f920: 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 ->pcsc_identity f930: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC f940: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF f950: 28 22 45 72 72 6f 72 2e 20 20 69 64 65 6e 74 69 ("Error. identi f960: 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 74 ty->pcsc_identit f970: 79 20 69 73 20 4e 55 4c 4c 22 29 3b 0a 0a 09 09 y is NULL");.... f980: 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a return(-1);..}.. f990: 09 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 64 ./* Determine id f9a0: 65 6e 74 69 74 79 20 4b 65 79 20 73 69 7a 65 20 entity Key size f9b0: 2a 2f 0a 09 69 66 20 28 69 64 65 6e 74 69 74 79 */..if (identity f9c0: 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 74 79 2d ->pcsc_identity- f9d0: 3e 6b 65 79 73 69 7a 65 20 3c 20 30 29 20 7b 0a >keysize < 0) {. f9e0: 09 09 69 64 65 6e 74 69 74 79 2d 3e 70 63 73 63 ..identity->pcsc f9f0: 5f 69 64 65 6e 74 69 74 79 2d 3e 6b 65 79 73 69 _identity->keysi fa00: 7a 65 20 3d 20 78 35 30 39 5f 74 6f 5f 6b 65 79 ze = x509_to_key fa10: 73 69 7a 65 28 69 64 65 6e 74 69 74 79 2d 3e 70 size(identity->p fa20: 63 73 63 5f 69 64 65 6e 74 69 74 79 2d 3e 63 65 csc_identity->ce fa30: 72 74 69 66 69 63 61 74 65 2c 20 69 64 65 6e 74 rtificate, ident fa40: 69 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 ity->pcsc_identi fa50: 74 79 2d 3e 63 65 72 74 69 66 69 63 61 74 65 5f ty->certificate_ fa60: 6c 65 6e 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 50 61 len);..}.../* Pa fa70: 64 20 6d 65 73 73 61 67 65 20 74 6f 20 6b 65 79 d message to key fa80: 20 73 69 7a 65 20 2a 2f 0a 09 69 66 20 28 70 61 size */..if (pa fa90: 64 49 6e 70 75 74 29 20 7b 0a 09 09 69 66 20 28 dInput) {...if ( faa0: 69 64 65 6e 74 69 74 79 2d 3e 70 63 73 63 5f 69 identity->pcsc_i fab0: 64 65 6e 74 69 74 79 2d 3e 6b 65 79 73 69 7a 65 dentity->keysize fac0: 20 3e 20 30 29 20 7b 0a 09 09 09 69 66 20 28 62 > 0) {....if (b fad0: 75 66 6c 65 6e 20 21 3d 20 69 64 65 6e 74 69 74 uflen != identit fae0: 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 74 79 y->pcsc_identity faf0: 2d 3e 6b 65 79 73 69 7a 65 29 20 7b 0a 09 09 09 ->keysize) {.... fb00: 09 69 66 20 28 62 75 66 6c 65 6e 20 3e 20 28 69 .if (buflen > (i fb10: 64 65 6e 74 69 74 79 2d 3e 70 63 73 63 5f 69 64 dentity->pcsc_id fb20: 65 6e 74 69 74 79 2d 3e 6b 65 79 73 69 7a 65 20 entity->keysize fb30: 2b 20 33 29 29 20 7b 0a 09 09 09 09 09 43 41 43 + 3)) {......CAC fb40: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF fb50: 28 22 45 72 72 6f 72 2e 20 20 4d 65 73 73 61 67 ("Error. Messag fb60: 65 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 e is too large t fb70: 6f 20 73 69 67 6e 2f 64 65 63 72 79 70 74 22 29 o sign/decrypt") fb80: 3b 0a 0a 09 09 09 09 09 72 65 74 75 72 6e 28 2d ;.......return(- fb90: 31 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 74 1);.....}......t fba0: 6d 70 62 75 66 6c 65 6e 20 3d 20 69 64 65 6e 74 mpbuflen = ident fbb0: 69 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 ity->pcsc_identi fbc0: 74 79 2d 3e 6b 65 79 73 69 7a 65 3b 0a 09 09 09 ty->keysize;.... fbd0: 09 74 6d 70 62 75 66 20 3d 20 6d 61 6c 6c 6f 63 .tmpbuf = malloc fbe0: 28 74 6d 70 62 75 66 6c 65 6e 29 3b 0a 09 09 09 (tmpbuflen);.... fbf0: 09 66 72 65 65 5f 74 6d 70 62 75 66 20 3d 20 31 .free_tmpbuf = 1 fc00: 3b 0a 0a 09 09 09 09 70 61 64 6c 65 6e 20 3d 20 ;......padlen = fc10: 74 6d 70 62 75 66 6c 65 6e 20 2d 20 62 75 66 6c tmpbuflen - bufl fc20: 65 6e 20 2d 20 33 3b 0a 0a 09 09 09 09 2f 2a 20 en - 3;....../* fc30: 52 53 41 20 50 4b 43 53 23 31 20 45 4d 53 41 2d RSA PKCS#1 EMSA- fc40: 50 4b 43 53 31 2d 76 31 5f 35 20 50 61 64 64 69 PKCS1-v1_5 Paddi fc50: 6e 67 20 2a 2f 0a 09 09 09 09 74 6d 70 62 75 66 ng */.....tmpbuf fc60: 5b 30 5d 20 3d 20 30 78 30 30 3b 0a 09 09 09 09 [0] = 0x00;..... fc70: 74 6d 70 62 75 66 5b 31 5d 20 3d 20 30 78 30 31 tmpbuf[1] = 0x01 fc80: 3b 0a 09 09 09 09 6d 65 6d 73 65 74 28 26 74 6d ;.....memset(&tm fc90: 70 62 75 66 5b 32 5d 2c 20 30 78 46 46 2c 20 70 pbuf[2], 0xFF, p fca0: 61 64 6c 65 6e 29 3b 0a 09 09 09 09 74 6d 70 62 adlen);.....tmpb fcb0: 75 66 5b 70 61 64 6c 65 6e 20 2b 20 32 5d 3d 20 uf[padlen + 2]= fcc0: 30 78 30 30 3b 0a 09 09 09 09 6d 65 6d 63 70 79 0x00;.....memcpy fcd0: 28 26 74 6d 70 62 75 66 5b 70 61 64 6c 65 6e 20 (&tmpbuf[padlen fce0: 2b 20 33 5d 2c 20 62 75 66 2c 20 62 75 66 6c 65 + 3], buf, bufle fcf0: 6e 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f n);......CACKEY_ fd00: 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 DEBUG_PRINTBUF(" fd10: 55 6e 70 61 64 64 65 64 3a 22 2c 20 62 75 66 2c Unpadded:", buf, fd20: 20 62 75 66 6c 65 6e 29 3b 0a 09 09 09 09 43 41 buflen);.....CA fd30: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT fd40: 42 55 46 28 22 50 61 64 64 65 64 3a 22 2c 20 74 BUF("Padded:", t fd50: 6d 70 62 75 66 2c 20 74 6d 70 62 75 66 6c 65 6e mpbuf, tmpbuflen fd60: 29 3b 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 );....} else {.. fd70: 09 09 09 74 6d 70 62 75 66 20 3d 20 62 75 66 3b ...tmpbuf = buf; fd80: 0a 09 09 09 09 74 6d 70 62 75 66 6c 65 6e 20 3d .....tmpbuflen = fd90: 20 62 75 66 6c 65 6e 3b 0a 09 09 09 09 66 72 65 buflen;.....fre fda0: 65 5f 74 6d 70 62 75 66 20 3d 20 30 3b 0a 09 09 e_tmpbuf = 0;... fdb0: 09 09 70 61 64 6c 65 6e 20 3d 20 30 3b 0a 09 09 ..padlen = 0;... fdc0: 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 .}...} else {... fdd0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR fde0: 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 INTF("Unable to fdf0: 64 65 74 65 72 6d 69 6e 65 20 6b 65 79 20 73 69 determine key si fe00: 7a 65 2c 20 68 6f 70 69 6e 67 20 74 68 65 20 6d ze, hoping the m fe10: 65 73 73 61 67 65 20 69 73 20 70 72 6f 70 65 72 essage is proper fe20: 6c 79 20 70 61 64 64 65 64 21 22 29 3b 0a 0a 09 ly padded!");... fe30: 09 09 74 6d 70 62 75 66 20 3d 20 62 75 66 3b 0a ..tmpbuf = buf;. fe40: 09 09 09 74 6d 70 62 75 66 6c 65 6e 20 3d 20 62 ...tmpbuflen = b fe50: 75 66 6c 65 6e 3b 0a 09 09 09 66 72 65 65 5f 74 uflen;....free_t fe60: 6d 70 62 75 66 20 3d 20 30 3b 0a 09 09 09 70 61 mpbuf = 0;....pa fe70: 64 6c 65 6e 20 3d 20 30 3b 0a 09 09 7d 0a 09 7d dlen = 0;...}..} fe80: 20 65 6c 73 65 20 7b 0a 09 09 74 6d 70 62 75 66 else {...tmpbuf fe90: 20 3d 20 62 75 66 3b 0a 09 09 74 6d 70 62 75 66 = buf;...tmpbuf fea0: 6c 65 6e 20 3d 20 62 75 66 6c 65 6e 3b 0a 09 09 len = buflen;... feb0: 66 72 65 65 5f 74 6d 70 62 75 66 20 3d 20 30 3b free_tmpbuf = 0; fec0: 0a 09 09 70 61 64 6c 65 6e 20 3d 20 30 3b 0a 09 ...padlen = 0;.. fed0: 7d 0a 0a 09 2f 2a 20 42 65 67 69 6e 20 74 72 61 }.../* Begin tra fee0: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 63 61 63 nsaction */..cac fef0: 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 key_begin_transa ff00: 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 2f ction(slot);.../ ff10: 2a 20 53 65 6c 65 63 74 20 63 6f 72 72 65 63 74 * Select correct ff20: 20 61 70 70 6c 65 74 20 2a 2f 0a 09 43 41 43 4b applet */..CACK ff30: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( ff40: 22 53 65 6c 65 63 74 69 6e 67 20 61 70 70 6c 65 "Selecting apple ff50: 74 20 66 6f 75 6e 64 20 61 74 20 25 70 20 2e 2e t found at %p .. ff60: 2e 22 2c 20 69 64 65 6e 74 69 74 79 2d 3e 70 63 .", identity->pc ff70: 73 63 5f 69 64 65 6e 74 69 74 79 2d 3e 61 70 70 sc_identity->app ff80: 6c 65 74 29 3b 0a 09 63 61 63 6b 65 79 5f 73 65 let);..cackey_se ff90: 6c 65 63 74 5f 61 70 70 6c 65 74 28 73 6c 6f 74 lect_applet(slot ffa0: 2c 20 69 64 65 6e 74 69 74 79 2d 3e 70 63 73 63 , identity->pcsc ffb0: 5f 69 64 65 6e 74 69 74 79 2d 3e 61 70 70 6c 65 _identity->apple ffc0: 74 2c 20 73 69 7a 65 6f 66 28 69 64 65 6e 74 69 t, sizeof(identi ffd0: 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 74 ty->pcsc_identit ffe0: 79 2d 3e 61 70 70 6c 65 74 29 29 3b 0a 0a 09 2f y->applet));.../ fff0: 2a 20 53 65 6c 65 63 74 20 63 6f 72 72 65 63 74 * Select correct 10000 20 66 69 6c 65 20 2a 2f 0a 09 63 61 63 6b 65 79 file */..cackey 10010 5f 73 65 6c 65 63 74 5f 66 69 6c 65 28 73 6c 6f _select_file(slo 10020 74 2c 20 69 64 65 6e 74 69 74 79 2d 3e 70 63 73 t, identity->pcs 10030 63 5f 69 64 65 6e 74 69 74 79 2d 3e 66 69 6c 65 c_identity->file 10040 29 3b 0a 0a 09 74 6d 70 62 75 66 5f 73 20 3d 20 );...tmpbuf_s = 10050 74 6d 70 62 75 66 3b 0a 09 6f 75 74 62 75 66 5f tmpbuf;..outbuf_ 10060 73 20 3d 20 6f 75 74 62 75 66 3b 0a 09 77 68 69 s = outbuf;..whi 10070 6c 65 20 28 74 6d 70 62 75 66 6c 65 6e 29 20 7b le (tmpbuflen) { 10080 0a 09 09 69 66 20 28 74 6d 70 62 75 66 6c 65 6e ...if (tmpbuflen 10090 20 3e 20 32 34 35 29 20 7b 0a 09 09 09 62 79 74 > 245) {....byt 100a0 65 73 5f 74 6f 5f 73 65 6e 64 20 3d 20 32 34 35 es_to_send = 245 100b0 3b 0a 09 09 09 70 31 20 3d 20 30 78 38 30 3b 0a ;....p1 = 0x80;. 100c0 09 09 09 6c 65 20 3d 20 30 78 30 30 3b 0a 09 09 ...le = 0x00;... 100d0 7d 20 65 6c 73 65 20 7b 0a 09 09 09 62 79 74 65 } else {....byte 100e0 73 5f 74 6f 5f 73 65 6e 64 20 3d 20 74 6d 70 62 s_to_send = tmpb 100f0 75 66 6c 65 6e 3b 0a 09 09 09 70 31 20 3d 20 30 uflen;....p1 = 0 10100 78 30 30 3b 0a 09 09 09 6c 65 20 3d 20 30 78 30 x00;....le = 0x0 10110 30 3b 0a 09 09 7d 0a 0a 09 09 74 6d 70 6f 75 74 0;...}....tmpout 10120 62 75 66 6c 65 6e 20 3d 20 6f 75 74 62 75 66 6c buflen = outbufl 10130 65 6e 3b 0a 0a 09 09 73 65 6e 64 5f 72 65 74 20 en;....send_ret 10140 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 = cackey_send_ap 10150 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 du(slot, GSCIS_C 10160 4c 41 53 53 5f 47 4c 4f 42 41 4c 5f 50 4c 41 54 LASS_GLOBAL_PLAT 10170 46 4f 52 4d 2c 20 47 53 43 49 53 5f 49 4e 53 54 FORM, GSCIS_INST 10180 52 5f 53 49 47 4e 44 45 43 52 59 50 54 2c 20 70 R_SIGNDECRYPT, p 10190 31 2c 20 30 78 30 30 2c 20 62 79 74 65 73 5f 74 1, 0x00, bytes_t 101a0 6f 5f 73 65 6e 64 2c 20 74 6d 70 62 75 66 2c 20 o_send, tmpbuf, 101b0 6c 65 2c 20 26 72 65 73 70 63 6f 64 65 2c 20 6f le, &respcode, o 101c0 75 74 62 75 66 2c 20 26 74 6d 70 6f 75 74 62 75 utbuf, &tmpoutbu 101d0 66 6c 65 6e 29 3b 0a 09 09 69 66 20 28 73 65 6e flen);...if (sen 101e0 64 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f d_ret != CACKEY_ 101f0 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 09 PCSC_S_OK) {.... 10200 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 10210 4e 54 46 28 22 41 44 50 55 20 53 65 6e 64 69 6e NTF("ADPU Sendin 10220 67 20 46 61 69 6c 65 64 20 2d 2d 20 72 65 74 75 g Failed -- retu 10230 72 6e 69 6e 67 20 69 6e 20 65 72 72 6f 72 2e 22 rning in error." 10240 29 3b 0a 0a 09 09 09 69 66 20 28 66 72 65 65 5f );.....if (free_ 10250 74 6d 70 62 75 66 29 20 7b 0a 09 09 09 09 69 66 tmpbuf) {.....if 10260 20 28 74 6d 70 62 75 66 5f 73 29 20 7b 0a 09 09 (tmpbuf_s) {... 10270 09 09 09 66 72 65 65 28 74 6d 70 62 75 66 5f 73 ...free(tmpbuf_s 10280 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 );.....}....}... 10290 09 09 2f 2a 20 45 6e 64 20 74 72 61 6e 73 61 63 ../* End transac 102a0 74 69 6f 6e 20 2a 2f 0a 09 09 09 63 61 63 6b 65 tion */....cacke 102b0 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f y_end_transactio 102c0 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 09 69 66 20 n(slot);.....if 102d0 28 72 65 73 70 63 6f 64 65 20 3d 3d 20 30 78 36 (respcode == 0x6 102e0 39 38 32 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 982) {.....CACKE 102f0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 10300 53 65 63 75 72 69 74 79 20 73 74 61 74 75 73 20 Security status 10310 6e 6f 74 20 73 61 74 69 73 69 66 69 65 64 2e 20 not satisified. 10320 20 52 65 74 75 72 6e 69 6e 67 20 4e 45 45 44 4c Returning NEEDL 10330 4f 47 49 4e 22 29 3b 0a 0a 09 09 09 09 63 61 63 OGIN");......cac 10340 6b 65 79 5f 6d 61 72 6b 5f 73 6c 6f 74 5f 72 65 key_mark_slot_re 10350 73 65 74 28 73 6c 6f 74 29 3b 0a 09 09 09 09 73 set(slot);.....s 10360 6c 6f 74 2d 3e 74 6f 6b 65 6e 5f 66 6c 61 67 73 lot->token_flags 10370 20 3d 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52 45 51 = CKF_LOGIN_REQ 10380 55 49 52 45 44 3b 0a 0a 09 09 09 09 72 65 74 75 UIRED;......retu 10390 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 103a0 5f 4e 45 45 44 4c 4f 47 49 4e 29 3b 0a 09 09 09 _NEEDLOGIN);.... 103b0 7d 0a 0a 09 09 09 69 66 20 28 73 65 6e 64 5f 72 }.....if (send_r 103c0 65 74 20 3d 3d 20 43 41 43 4b 45 59 5f 50 43 53 et == CACKEY_PCS 103d0 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 29 C_E_TOKENABSENT) 103e0 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {.....CACKEY_DE 103f0 42 55 47 5f 50 52 49 4e 54 46 28 22 54 6f 6b 65 BUG_PRINTF("Toke 10400 6e 20 61 62 73 65 6e 74 2e 20 20 52 65 74 75 72 n absent. Retur 10410 6e 69 6e 67 20 54 4f 4b 45 4e 41 42 53 45 4e 54 ning TOKENABSENT 10420 22 29 3b 0a 0a 09 09 09 09 63 61 63 6b 65 79 5f ");......cackey_ 10430 6d 61 72 6b 5f 73 6c 6f 74 5f 72 65 73 65 74 28 mark_slot_reset( 10440 73 6c 6f 74 29 3b 0a 0a 09 09 09 09 72 65 74 75 slot);......retu 10450 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 10460 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 29 3b 0a 09 _TOKENABSENT);.. 10470 09 09 7d 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d ..}.....return(- 10480 31 29 3b 0a 09 09 7d 0a 0a 09 09 74 6d 70 62 75 1);...}....tmpbu 10490 66 20 2b 3d 20 62 79 74 65 73 5f 74 6f 5f 73 65 f += bytes_to_se 104a0 6e 64 3b 0a 09 09 74 6d 70 62 75 66 6c 65 6e 20 nd;...tmpbuflen 104b0 2d 3d 20 62 79 74 65 73 5f 74 6f 5f 73 65 6e 64 -= bytes_to_send 104c0 3b 0a 0a 09 09 6f 75 74 62 75 66 20 2b 3d 20 74 ;....outbuf += t 104d0 6d 70 6f 75 74 62 75 66 6c 65 6e 3b 0a 09 09 6f mpoutbuflen;...o 104e0 75 74 62 75 66 6c 65 6e 20 2d 3d 20 74 6d 70 6f utbuflen -= tmpo 104f0 75 74 62 75 66 6c 65 6e 3b 0a 09 09 72 65 74 76 utbuflen;...retv 10500 61 6c 20 2b 3d 20 74 6d 70 6f 75 74 62 75 66 6c al += tmpoutbufl 10510 65 6e 3b 0a 09 7d 0a 0a 09 69 66 20 28 66 72 65 en;..}...if (fre 10520 65 5f 74 6d 70 62 75 66 29 20 7b 0a 09 09 69 66 e_tmpbuf) {...if 10530 20 28 74 6d 70 62 75 66 5f 73 29 20 7b 0a 09 09 (tmpbuf_s) {... 10540 09 66 72 65 65 28 74 6d 70 62 75 66 5f 73 29 3b .free(tmpbuf_s); 10550 0a 09 09 7d 0a 09 7d 0a 0a 09 6f 75 74 62 75 66 ...}..}...outbuf 10560 20 3d 20 6f 75 74 62 75 66 5f 73 3b 0a 0a 09 2f = outbuf_s;.../ 10570 2a 20 45 6e 64 20 74 72 61 6e 73 61 63 74 69 6f * End transactio 10580 6e 20 2a 2f 0a 09 63 61 63 6b 65 79 5f 65 6e 64 n */..cackey_end 10590 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f _transaction(slo 105a0 74 29 3b 0a 0a 23 69 66 64 65 66 20 43 41 43 4b t);..#ifdef CACK 105b0 45 59 5f 50 41 52 41 4e 4f 49 44 0a 23 20 20 69 EY_PARANOID.# i 105c0 66 64 65 66 20 5f 50 4f 53 49 58 5f 53 53 49 5a fdef _POSIX_SSIZ 105d0 45 5f 4d 41 58 0a 09 69 66 20 28 6f 75 74 62 75 E_MAX..if (outbu 105e0 66 6c 65 6e 20 3e 20 5f 50 4f 53 49 58 5f 53 53 flen > _POSIX_SS 105f0 49 5a 45 5f 4d 41 58 29 20 7b 0a 09 09 43 41 43 IZE_MAX) {...CAC 10600 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 10610 28 22 4f 75 74 62 75 66 6c 65 6e 20 65 78 63 65 ("Outbuflen exce 10620 65 64 73 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 eds maximum valu 10630 65 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 e, returning in 10640 66 61 69 6c 75 72 65 2e 20 28 6d 61 78 20 3d 20 failure. (max = 10650 25 6c 69 2c 20 6f 75 74 62 75 66 6c 65 6e 20 3d %li, outbuflen = 10660 20 25 6c 75 29 22 2c 20 28 6c 6f 6e 67 29 20 5f %lu)", (long) _ 10670 50 4f 53 49 58 5f 53 53 49 5a 45 5f 4d 41 58 2c POSIX_SSIZE_MAX, 10680 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 10690 20 6f 75 74 62 75 66 6c 65 6e 29 3b 0a 0a 09 09 outbuflen);.... 106a0 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 23 return(-1);..}.# 106b0 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a endif.#endif.. 106c0 09 2f 2a 20 55 6e 70 61 64 20 72 65 70 6c 79 20 ./* Unpad reply 106d0 2a 2f 0a 09 69 66 20 28 75 6e 70 61 64 4f 75 74 */..if (unpadOut 106e0 70 75 74 29 20 7b 0a 09 09 69 66 20 28 72 65 74 put) {...if (ret 106f0 76 61 6c 20 3c 20 33 29 20 7b 0a 09 09 09 43 41 val < 3) {....CA 10700 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 10710 46 28 22 52 65 70 6c 79 20 69 73 20 74 6f 6f 20 F("Reply is too 10720 73 6d 61 6c 6c 2c 20 77 65 20 61 72 65 20 6e 6f small, we are no 10730 74 20 61 62 6c 65 20 74 6f 20 75 6e 70 61 64 20 t able to unpad 10740 2d 2d 20 70 61 73 73 69 6e 67 20 62 61 63 6b 20 -- passing back 10750 61 6e 64 20 68 6f 70 69 6e 67 20 66 6f 72 20 74 and hoping for t 10760 68 65 20 62 65 73 74 21 22 29 3b 0a 0a 09 09 09 he best!");..... 10770 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 10780 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 NTF("Returning i 10790 6e 20 73 75 63 63 65 73 73 2c 20 72 65 74 76 61 n success, retva 107a0 6c 20 3d 20 25 6c 69 20 28 62 79 74 65 73 29 22 l = %li (bytes)" 107b0 2c 20 28 6c 6f 6e 67 29 20 72 65 74 76 61 6c 29 , (long) retval) 107c0 3b 0a 09 09 09 72 65 74 75 72 6e 28 72 65 74 76 ;....return(retv 107d0 61 6c 29 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 al);...}....if ( 107e0 6f 75 74 62 75 66 5b 30 5d 20 21 3d 20 30 78 30 outbuf[0] != 0x0 107f0 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 0) {....CACKEY_D 10800 45 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 72 EBUG_PRINTF("Unr 10810 65 63 6f 67 6e 69 7a 65 64 20 70 61 64 64 69 6e ecognized paddin 10820 67 20 73 63 68 65 6d 65 20 2d 2d 20 70 61 73 73 g scheme -- pass 10830 69 6e 67 20 62 61 63 6b 20 61 6e 64 20 68 6f 70 ing back and hop 10840 69 6e 67 20 66 6f 72 20 74 68 65 20 62 65 73 74 ing for the best 10850 21 22 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f !");.....CACKEY_ 10860 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 10870 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 turning in succe 10880 73 73 2c 20 72 65 74 76 61 6c 20 3d 20 25 6c 69 ss, retval = %li 10890 20 28 62 79 74 65 73 29 22 2c 20 28 6c 6f 6e 67 (bytes)", (long 108a0 29 20 72 65 74 76 61 6c 29 3b 0a 09 09 09 72 65 ) retval);....re 108b0 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 09 09 turn(retval);... 108c0 7d 0a 0a 09 09 62 6c 6f 63 6b 74 79 70 65 20 3d }....blocktype = 108d0 20 6f 75 74 62 75 66 5b 31 5d 3b 0a 09 09 75 6e outbuf[1];...un 108e0 70 61 64 6f 66 66 73 65 74 20 3d 20 30 3b 0a 0a padoffset = 0;.. 108f0 09 09 73 77 69 74 63 68 20 28 62 6c 6f 63 6b 74 ..switch (blockt 10900 79 70 65 29 20 7b 0a 09 09 09 63 61 73 65 20 30 ype) {....case 0 10910 78 30 30 3a 0a 09 09 09 09 2f 2a 20 50 61 64 64 x00:...../* Padd 10920 69 6e 67 20 53 63 68 65 6d 65 20 31 2c 20 74 68 ing Scheme 1, th 10930 65 20 66 69 72 73 74 20 6e 6f 6e 2d 7a 65 72 6f e first non-zero 10940 20 62 79 74 65 20 69 73 20 74 68 65 20 73 74 61 byte is the sta 10950 72 74 20 6f 66 20 64 61 74 61 20 2a 2f 0a 09 09 rt of data */... 10960 09 09 66 6f 72 20 28 75 6e 70 61 64 6f 66 66 73 ..for (unpadoffs 10970 65 74 20 3d 20 32 3b 20 75 6e 70 61 64 6f 66 66 et = 2; unpadoff 10980 73 65 74 20 3c 20 72 65 74 76 61 6c 3b 20 75 6e set < retval; un 10990 70 61 64 6f 66 66 73 65 74 2b 2b 29 20 7b 0a 09 padoffset++) {.. 109a0 09 09 09 09 69 66 20 28 6f 75 74 62 75 66 5b 75 ....if (outbuf[u 109b0 6e 70 61 64 6f 66 66 73 65 74 5d 20 21 3d 20 30 npadoffset] != 0 109c0 78 30 30 29 20 7b 0a 09 09 09 09 09 09 62 72 65 x00) {.......bre 109d0 61 6b 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d ak;......}.....} 109e0 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c 109f0 61 73 65 20 30 78 30 31 3a 0a 09 09 09 09 2f 2a ase 0x01:...../* 10a00 20 50 61 64 64 69 6e 67 20 53 63 68 65 6d 65 20 Padding Scheme 10a10 32 2c 20 70 61 64 20 62 79 74 65 73 20 61 72 65 2, pad bytes are 10a20 20 30 78 46 46 20 66 6f 6c 6c 6f 77 65 64 20 62 0xFF followed b 10a30 79 20 30 78 30 30 20 2a 2f 0a 09 09 09 09 66 6f y 0x00 */.....fo 10a40 72 20 28 75 6e 70 61 64 6f 66 66 73 65 74 20 3d r (unpadoffset = 10a50 20 32 3b 20 75 6e 70 61 64 6f 66 66 73 65 74 20 2; unpadoffset 10a60 3c 20 72 65 74 76 61 6c 3b 20 75 6e 70 61 64 6f < retval; unpado 10a70 66 66 73 65 74 2b 2b 29 20 7b 0a 09 09 09 09 09 ffset++) {...... 10a80 69 66 20 28 6f 75 74 62 75 66 5b 75 6e 70 61 64 if (outbuf[unpad 10a90 6f 66 66 73 65 74 5d 20 21 3d 20 30 78 46 46 29 offset] != 0xFF) 10aa0 20 7b 0a 09 09 09 09 09 09 69 66 20 28 6f 75 74 {.......if (out 10ab0 62 75 66 5b 75 6e 70 61 64 6f 66 66 73 65 74 5d buf[unpadoffset] 10ac0 20 3d 3d 20 30 78 30 30 29 20 7b 0a 09 09 09 09 == 0x00) {..... 10ad0 09 09 09 75 6e 70 61 64 6f 66 66 73 65 74 2b 2b ...unpadoffset++ 10ae0 3b 0a 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b ;.........break; 10af0 0a 09 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a .......} else {. 10b00 09 09 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 .......CACKEY_DE 10b10 42 55 47 5f 50 52 49 4e 54 46 28 22 49 6e 76 61 BUG_PRINTF("Inva 10b20 6c 69 64 20 70 61 64 64 69 6e 67 20 64 61 74 61 lid padding data 10b30 20 66 6f 75 6e 64 2c 20 72 65 74 75 72 6e 69 6e found, returnin 10b40 67 20 69 6e 20 66 61 69 6c 75 72 65 2c 20 73 68 g in failure, sh 10b50 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 30 ould have been 0 10b60 78 30 30 20 66 6f 75 6e 64 20 30 78 25 30 32 78 x00 found 0x%02x 10b70 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 ", (unsigned int 10b80 29 20 6f 75 74 62 75 66 5b 75 6e 70 61 64 6f 66 ) outbuf[unpadof 10b90 66 73 65 74 5d 29 3b 0a 0a 09 09 09 09 09 09 09 fset]);......... 10ba0 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 09 09 return(-1);..... 10bb0 09 09 7d 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 ..}......} else 10bc0 7b 0a 09 09 09 09 09 09 43 41 43 4b 45 59 5f 44 {.......CACKEY_D 10bd0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 49 6e 76 EBUG_PRINTF("Inv 10be0 61 6c 69 64 20 70 61 64 64 69 6e 67 20 64 61 74 alid padding dat 10bf0 61 20 66 6f 75 6e 64 2c 20 72 65 74 75 72 6e 69 a found, returni 10c00 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 2c 20 73 ng in failure, s 10c10 68 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 hould have been 10c20 30 78 46 46 20 66 6f 75 6e 64 20 30 78 25 30 32 0xFF found 0x%02 10c30 78 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 69 6e x", (unsigned in 10c40 74 29 20 6f 75 74 62 75 66 5b 75 6e 70 61 64 6f t) outbuf[unpado 10c50 66 66 73 65 74 5d 29 3b 0a 0a 09 09 09 09 09 09 ffset]);........ 10c60 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 09 09 return(-1);..... 10c70 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 62 72 65 .}.....}.....bre 10c80 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 30 32 ak;....case 0x02 10c90 3a 0a 09 09 09 09 2f 2a 20 50 61 64 64 69 6e 67 :...../* Padding 10ca0 20 53 63 68 65 6d 65 20 33 2c 20 70 61 64 20 62 Scheme 3, pad b 10cb0 79 74 65 73 20 61 72 65 20 6e 6f 6e 2d 7a 65 72 ytes are non-zer 10cc0 6f 20 66 69 72 73 74 20 7a 65 72 6f 20 62 79 74 o first zero byt 10cd0 65 20 66 6f 75 6e 64 20 69 73 20 74 68 65 20 73 e found is the s 10ce0 65 70 65 72 61 74 6f 72 20 62 79 74 65 20 2a 2f eperator byte */ 10cf0 0a 09 09 09 09 66 6f 72 20 28 75 6e 70 61 64 6f .....for (unpado 10d00 66 66 73 65 74 20 3d 20 32 3b 20 75 6e 70 61 64 ffset = 2; unpad 10d10 6f 66 66 73 65 74 20 3c 20 72 65 74 76 61 6c 3b offset < retval; 10d20 20 75 6e 70 61 64 6f 66 66 73 65 74 2b 2b 29 20 unpadoffset++) 10d30 7b 0a 09 09 09 09 09 69 66 20 28 6f 75 74 62 75 {......if (outbu 10d40 66 5b 75 6e 70 61 64 6f 66 66 73 65 74 5d 20 3d f[unpadoffset] = 10d50 3d 20 30 78 30 30 29 20 7b 0a 09 09 09 09 09 09 = 0x00) {....... 10d60 75 6e 70 61 64 6f 66 66 73 65 74 2b 2b 3b 0a 0a unpadoffset++;.. 10d70 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 10d80 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 62 72 ..}.....}.....br 10d90 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 eak;...}....if ( 10da0 75 6e 70 61 64 6f 66 66 73 65 74 20 3e 20 72 65 unpadoffset > re 10db0 74 76 61 6c 29 20 7b 0a 09 09 09 43 41 43 4b 45 tval) {....CACKE 10dc0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 10dd0 4f 66 66 73 65 74 20 67 72 65 61 74 65 72 20 74 Offset greater t 10de0 68 61 6e 20 72 65 70 6c 79 20 73 69 7a 65 2c 20 han reply size, 10df0 61 62 6f 72 74 69 6e 67 2e 20 20 28 75 6e 70 61 aborting. (unpa 10e00 64 6f 66 66 73 65 74 20 3d 20 25 6c 75 2c 20 72 doffset = %lu, r 10e10 65 74 76 61 6c 20 3d 20 25 6c 75 29 22 2c 20 28 etval = %lu)", ( 10e20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 unsigned long) u 10e30 6e 70 61 64 6f 66 66 73 65 74 2c 20 28 75 6e 73 npadoffset, (uns 10e40 69 67 6e 65 64 20 6c 6f 6e 67 29 20 72 65 74 76 igned long) retv 10e50 61 6c 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 al);.....return( 10e60 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b -1);...}....CACK 10e70 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 EY_DEBUG_PRINTBU 10e80 46 28 22 50 61 64 64 65 64 3a 22 2c 20 6f 75 74 F("Padded:", out 10e90 62 75 66 2c 20 72 65 74 76 61 6c 29 3b 0a 0a 09 buf, retval);... 10ea0 09 72 65 74 76 61 6c 20 2d 3d 20 75 6e 70 61 64 .retval -= unpad 10eb0 6f 66 66 73 65 74 3b 0a 09 09 6d 65 6d 6d 6f 76 offset;...memmov 10ec0 65 28 6f 75 74 62 75 66 2c 20 6f 75 74 62 75 66 e(outbuf, outbuf 10ed0 20 2b 20 75 6e 70 61 64 6f 66 66 73 65 74 2c 20 + unpadoffset, 10ee0 72 65 74 76 61 6c 29 3b 0a 0a 09 09 43 41 43 4b retval);....CACK 10ef0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 EY_DEBUG_PRINTBU 10f00 46 28 22 55 6e 70 61 64 64 65 64 3a 22 2c 20 6f F("Unpadded:", o 10f10 75 74 62 75 66 2c 20 72 65 74 76 61 6c 29 3b 0a utbuf, retval);. 10f20 09 7d 0a 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 .}....CACKEY_DEB 10f30 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 10f40 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 73 73 2c ning in success, 10f50 20 72 65 74 76 61 6c 20 3d 20 25 6c 69 20 28 62 retval = %li (b 10f60 79 74 65 73 29 22 2c 20 28 6c 6f 6e 67 29 20 72 ytes)", (long) r 10f70 65 74 76 61 6c 29 3b 0a 0a 09 72 65 74 75 72 6e etval);...return 10f80 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 2f 2a 0a (retval);.}../*. 10f90 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 * SYNPOSIS. * 10fa0 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 .... *. * ARG 10fb0 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 2e 2e UMENTS. * .. 10fc0 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 .. *. * RETURN V 10fd0 41 4c 55 45 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a ALUE. * .... 10fe0 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 *. * NOTES. * 10ff0 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 .... *. */.st 11000 61 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 atic cackey_ret 11010 63 61 63 6b 65 79 5f 6c 6f 67 69 6e 28 73 74 72 cackey_login(str 11020 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 uct cackey_slot 11030 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 64 20 *slot, unsigned 11040 63 68 61 72 20 2a 70 69 6e 2c 20 75 6e 73 69 67 char *pin, unsig 11050 6e 65 64 20 6c 6f 6e 67 20 70 69 6e 5f 6c 65 6e ned long pin_len 11060 2c 20 69 6e 74 20 2a 74 72 69 65 73 5f 72 65 6d , int *tries_rem 11070 61 69 6e 69 6e 67 5f 70 29 20 7b 0a 09 75 6e 73 aining_p) {..uns 11080 69 67 6e 65 64 20 63 68 61 72 20 63 61 63 5f 70 igned char cac_p 11090 69 6e 5b 38 5d 20 3d 20 7b 30 78 46 46 2c 20 30 in[8] = {0xFF, 0 110a0 78 46 46 2c 20 30 78 46 46 2c 20 30 78 46 46 2c xFF, 0xFF, 0xFF, 110b0 20 30 78 46 46 2c 20 30 78 46 46 2c 20 30 78 46 0xFF, 0xFF, 0xF 110c0 46 2c 20 30 78 46 46 7d 3b 0a 09 75 69 6e 74 31 F, 0xFF};..uint1 110d0 36 5f 74 20 72 65 73 70 6f 6e 73 65 5f 63 6f 64 6_t response_cod 110e0 65 3b 0a 09 69 6e 74 20 74 72 69 65 73 5f 72 65 e;..int tries_re 110f0 6d 61 69 6e 69 6e 67 3b 0a 09 69 6e 74 20 73 65 maining;..int se 11100 6e 64 5f 72 65 74 3b 0a 0a 09 2f 2a 20 49 6e 64 nd_ret;.../* Ind 11110 69 63 61 74 65 20 74 68 61 74 20 77 65 20 64 6f icate that we do 11120 20 6e 6f 74 20 6b 6e 6f 77 20 61 62 6f 75 74 20 not know about 11130 68 6f 77 20 6d 61 6e 79 20 74 72 69 65 73 20 61 how many tries a 11140 72 65 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a re remaining */. 11150 09 69 66 20 28 74 72 69 65 73 5f 72 65 6d 61 69 .if (tries_remai 11160 6e 69 6e 67 5f 70 29 20 7b 0a 09 09 2a 74 72 69 ning_p) {...*tri 11170 65 73 5f 72 65 6d 61 69 6e 69 6e 67 5f 70 20 3d es_remaining_p = 11180 20 2d 31 3b 0a 09 7d 0a 0a 09 2f 2a 20 41 70 70 -1;..}.../* App 11190 61 72 65 6e 74 6c 79 2c 20 43 41 43 20 50 49 4e arently, CAC PIN 111a0 73 20 61 72 65 20 2a 45 58 41 43 54 4c 59 2a 20 s are *EXACTLY* 111b0 38 20 62 79 74 65 73 20 6c 6f 6e 67 20 2d 2d 20 8 bytes long -- 111c0 70 61 64 20 77 69 74 68 20 30 78 46 46 20 69 66 pad with 0xFF if 111d0 20 74 6f 6f 20 73 68 6f 72 74 20 2a 2f 0a 09 69 too short */..i 111e0 66 20 28 70 69 6e 5f 6c 65 6e 20 3e 3d 20 38 29 f (pin_len >= 8) 111f0 20 7b 0a 09 09 6d 65 6d 63 70 79 28 63 61 63 5f {...memcpy(cac_ 11200 70 69 6e 2c 20 70 69 6e 2c 20 38 29 3b 0a 09 7d pin, pin, 8);..} 11210 20 65 6c 73 65 20 7b 0a 09 09 6d 65 6d 63 70 79 else {...memcpy 11220 28 63 61 63 5f 70 69 6e 2c 20 70 69 6e 2c 20 70 (cac_pin, pin, p 11230 69 6e 5f 6c 65 6e 29 3b 0a 09 7d 0a 0a 09 2f 2a in_len);..}.../* 11240 20 49 73 73 75 65 20 50 49 4e 20 56 65 72 69 66 Issue PIN Verif 11250 79 20 2a 2f 0a 09 73 65 6e 64 5f 72 65 74 20 3d y */..send_ret = 11260 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 cackey_send_apd 11270 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 4c u(slot, GSCIS_CL 11280 41 53 53 5f 49 53 4f 37 38 31 36 2c 20 47 53 43 ASS_ISO7816, GSC 11290 49 53 5f 49 4e 53 54 52 5f 56 45 52 49 46 59 2c IS_INSTR_VERIFY, 112a0 20 30 78 30 30 2c 20 30 78 30 30 2c 20 73 69 7a 0x00, 0x00, siz 112b0 65 6f 66 28 63 61 63 5f 70 69 6e 29 2c 20 63 61 eof(cac_pin), ca 112c0 63 5f 70 69 6e 2c 20 30 78 30 30 2c 20 26 72 65 c_pin, 0x00, &re 112d0 73 70 6f 6e 73 65 5f 63 6f 64 65 2c 20 4e 55 4c sponse_code, NUL 112e0 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 69 66 20 28 73 L, NULL);..if (s 112f0 65 6e 64 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 end_ret != CACKE 11300 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 Y_PCSC_S_OK) {.. 11310 09 69 66 20 28 28 72 65 73 70 6f 6e 73 65 5f 63 .if ((response_c 11320 6f 64 65 20 26 20 30 78 36 33 43 30 29 20 3d 3d ode & 0x63C0) == 11330 20 30 78 36 33 43 30 29 20 7b 0a 09 09 09 74 72 0x63C0) {....tr 11340 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 20 3d 20 ies_remaining = 11350 28 72 65 73 70 6f 6e 73 65 5f 63 6f 64 65 20 26 (response_code & 11360 20 30 78 46 29 3b 0a 0a 09 09 09 43 41 43 4b 45 0xF);.....CACKE 11370 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 11380 50 49 4e 20 56 65 72 69 66 69 63 61 74 69 6f 6e PIN Verification 11390 20 66 61 69 6c 65 64 2c 20 25 69 20 74 72 69 65 failed, %i trie 113a0 73 20 72 65 6d 61 69 6e 69 6e 67 22 2c 20 74 72 s remaining", tr 113b0 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 29 3b 0a ies_remaining);. 113c0 0a 09 09 09 69 66 20 28 74 72 69 65 73 5f 72 65 ....if (tries_re 113d0 6d 61 69 6e 69 6e 67 5f 70 29 20 7b 0a 09 09 09 maining_p) {.... 113e0 09 2a 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e .*tries_remainin 113f0 67 5f 70 20 3d 20 74 72 69 65 73 5f 72 65 6d 61 g_p = tries_rema 11400 69 6e 69 6e 67 3b 0a 09 09 09 7d 0a 0a 09 09 09 ining;....}..... 11410 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 11420 53 43 5f 45 5f 42 41 44 50 49 4e 29 3b 0a 09 09 SC_E_BADPIN);... 11430 7d 0a 0a 09 09 69 66 20 28 72 65 73 70 6f 6e 73 }....if (respons 11440 65 5f 63 6f 64 65 20 3d 3d 20 30 78 36 39 38 33 e_code == 0x6983 11450 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE 11460 42 55 47 5f 50 52 49 4e 54 46 28 22 50 49 4e 20 BUG_PRINTF("PIN 11470 56 65 72 69 66 69 63 61 74 69 6f 6e 20 66 61 69 Verification fai 11480 6c 65 64 2c 20 64 65 76 69 63 65 20 69 73 20 6c led, device is l 11490 6f 63 6b 65 64 22 29 3b 0a 0a 09 09 09 72 65 74 ocked");.....ret 114a0 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f urn(CACKEY_PCSC_ 114b0 45 5f 4c 4f 43 4b 45 44 29 3b 0a 09 09 7d 0a 0a E_LOCKED);...}.. 114c0 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f ..return(CACKEY_ 114d0 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b PCSC_E_GENERIC); 114e0 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 114f0 55 47 5f 50 52 49 4e 54 46 28 22 50 49 4e 20 56 UG_PRINTF("PIN V 11500 65 72 69 66 69 63 61 74 69 6f 6e 20 73 75 63 63 erification succ 11510 65 65 64 65 64 22 29 3b 0a 0a 09 72 65 74 75 72 eeded");...retur 11520 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f n(CACKEY_PCSC_S_ 11530 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 OK);.}../*. * SY 11540 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 2e 2e NPOSIS. * .. 11550 2e 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 .. *. * ARGUMENT 11560 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a S. * .... *. 11570 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a * RETURN VALUE. 11580 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a * .... *. * 11590 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 2e 2e NOTES. * .. 115a0 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 .. *. */.static 115b0 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 cackey_ret cacke 115c0 79 5f 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 28 y_token_present( 115d0 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl 115e0 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a 09 63 61 63 ot *slot) {..cac 115f0 6b 65 79 5f 72 65 74 20 70 63 73 63 5f 63 6f 6e key_ret pcsc_con 11600 6e 65 63 74 5f 72 65 74 3b 0a 09 44 57 4f 52 44 nect_ret;..DWORD 11610 20 72 65 61 64 65 72 5f 6c 65 6e 20 3d 20 30 2c reader_len = 0, 11620 20 73 74 61 74 65 20 3d 20 30 2c 20 70 72 6f 74 state = 0, prot 11630 6f 63 6f 6c 20 3d 20 30 2c 20 61 74 72 5f 6c 65 ocol = 0, atr_le 11640 6e 3b 0a 09 42 59 54 45 20 61 74 72 5b 4d 41 58 n;..BYTE atr[MAX 11650 5f 41 54 52 5f 53 49 5a 45 5d 3b 0a 09 4c 4f 4e _ATR_SIZE];..LON 11660 47 20 73 74 61 74 75 73 5f 72 65 74 2c 20 73 63 G status_ret, sc 11670 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 3b 0a ard_reconn_ret;. 11680 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11690 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 116a0 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 2d 3e 69 6e ;...if (slot->in 116b0 74 65 72 6e 61 6c 29 20 7b 0a 09 09 43 41 43 4b ternal) {...CACK 116c0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 116d0 22 52 65 74 75 72 6e 69 6e 67 20 74 6f 6b 65 6e "Returning token 116e0 20 70 72 65 73 65 6e 74 20 28 69 6e 74 65 72 6e present (intern 116f0 61 6c 20 74 6f 6b 65 6e 29 22 29 3b 0a 0a 09 09 al token)");.... 11700 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 11710 53 43 5f 53 5f 54 4f 4b 45 4e 50 52 45 53 45 4e SC_S_TOKENPRESEN 11720 54 29 3b 0a 09 7d 0a 0a 09 70 63 73 63 5f 63 6f T);..}...pcsc_co 11730 6e 6e 65 63 74 5f 72 65 74 20 3d 20 63 61 63 6b nnect_ret = cack 11740 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 72 64 28 ey_connect_card( 11750 73 6c 6f 74 29 3b 0a 09 69 66 20 28 70 63 73 63 slot);..if (pcsc 11760 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 21 3d 20 _connect_ret != 11770 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK 11780 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 11790 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 6c UG_PRINTF("Unabl 117a0 65 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 6f 20 e to connect to 117b0 63 61 72 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 card, returning 117c0 74 6f 6b 65 6e 20 61 62 73 65 6e 74 22 29 3b 0a token absent");. 117d0 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 117e0 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 _PCSC_E_TOKENABS 117f0 45 4e 54 29 3b 0a 09 7d 0a 0a 09 61 74 72 5f 6c ENT);..}...atr_l 11800 65 6e 20 3d 20 73 69 7a 65 6f 66 28 61 74 72 29 en = sizeof(atr) 11810 3b 0a 09 73 74 61 74 75 73 5f 72 65 74 20 3d 20 ;..status_ret = 11820 53 43 61 72 64 53 74 61 74 75 73 28 73 6c 6f 74 SCardStatus(slot 11830 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 4e 55 4c ->pcsc_card, NUL 11840 4c 2c 20 26 72 65 61 64 65 72 5f 6c 65 6e 2c 20 L, &reader_len, 11850 26 73 74 61 74 65 2c 20 26 70 72 6f 74 6f 63 6f &state, &protoco 11860 6c 2c 20 61 74 72 2c 20 26 61 74 72 5f 6c 65 6e l, atr, &atr_len 11870 29 3b 0a 0a 09 69 66 20 28 73 74 61 74 75 73 5f );...if (status_ 11880 72 65 74 20 3d 3d 20 53 43 41 52 44 5f 45 5f 49 ret == SCARD_E_I 11890 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 29 20 7b NVALID_HANDLE) { 118a0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 118b0 50 52 49 4e 54 46 28 22 53 43 61 72 64 53 74 61 PRINTF("SCardSta 118c0 74 75 73 28 29 20 72 65 74 75 72 6e 65 64 20 53 tus() returned S 118d0 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 48 CARD_E_INVALID_H 118e0 41 4e 44 4c 45 2c 20 6d 61 72 6b 69 6e 67 20 69 ANDLE, marking i 118f0 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 63 6f s not already co 11900 6e 6e 65 63 74 65 64 20 61 6e 64 20 74 72 79 69 nnected and tryi 11910 6e 67 20 61 67 61 69 6e 22 29 3b 0a 09 09 63 61 ng again");...ca 11920 63 6b 65 79 5f 6d 61 72 6b 5f 73 6c 6f 74 5f 72 ckey_mark_slot_r 11930 65 73 65 74 28 73 6c 6f 74 29 3b 0a 0a 09 09 70 eset(slot);....p 11940 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 csc_connect_ret 11950 3d 20 63 61 63 6b 65 79 5f 63 6f 6e 6e 65 63 74 = cackey_connect 11960 5f 63 61 72 64 28 73 6c 6f 74 29 3b 0a 09 09 69 _card(slot);...i 11970 66 20 28 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f f (pcsc_connect_ 11980 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 ret != CACKEY_PC 11990 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 09 43 41 SC_S_OK) {....CA 119a0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 119b0 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 63 6f 6e F("Unable to con 119c0 6e 65 63 74 20 74 6f 20 63 61 72 64 2c 20 72 65 nect to card, re 119d0 74 75 72 6e 69 6e 67 20 74 6f 6b 65 6e 20 61 62 turning token ab 119e0 73 65 6e 74 22 29 3b 0a 0a 09 09 09 72 65 74 75 sent");.....retu 119f0 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 11a00 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 29 3b 0a 09 _TOKENABSENT);.. 11a10 09 7d 0a 0a 09 09 61 74 72 5f 6c 65 6e 20 3d 20 .}....atr_len = 11a20 73 69 7a 65 6f 66 28 61 74 72 29 3b 0a 09 09 73 sizeof(atr);...s 11a30 74 61 74 75 73 5f 72 65 74 20 3d 20 53 43 61 72 tatus_ret = SCar 11a40 64 53 74 61 74 75 73 28 73 6c 6f 74 2d 3e 70 63 dStatus(slot->pc 11a50 73 63 5f 63 61 72 64 2c 20 4e 55 4c 4c 2c 20 26 sc_card, NULL, & 11a60 72 65 61 64 65 72 5f 6c 65 6e 2c 20 26 73 74 61 reader_len, &sta 11a70 74 65 2c 20 26 70 72 6f 74 6f 63 6f 6c 2c 20 61 te, &protocol, a 11a80 74 72 2c 20 26 61 74 72 5f 6c 65 6e 29 3b 0a 09 tr, &atr_len);.. 11a90 7d 0a 0a 09 69 66 20 28 73 74 61 74 75 73 5f 72 }...if (status_r 11aa0 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 et != SCARD_S_SU 11ab0 43 43 45 53 53 29 20 7b 0a 09 09 63 61 63 6b 65 CCESS) {...cacke 11ac0 79 5f 6d 61 72 6b 5f 73 6c 6f 74 5f 72 65 73 65 y_mark_slot_rese 11ad0 74 28 73 6c 6f 74 29 3b 0a 0a 09 09 69 66 20 28 t(slot);....if ( 11ae0 73 74 61 74 75 73 5f 72 65 74 20 3d 3d 20 53 43 status_ret == SC 11af0 41 52 44 5f 57 5f 52 45 53 45 54 5f 43 41 52 44 ARD_W_RESET_CARD 11b00 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE 11b10 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 73 65 BUG_PRINTF("Rese 11b20 74 20 72 65 71 75 69 72 65 64 2c 20 70 6c 65 61 t required, plea 11b30 73 65 20 68 6f 6c 64 2e 2e 2e 22 29 3b 0a 0a 09 se hold...");... 11b40 09 09 73 63 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 ..scard_reconn_r 11b50 65 74 20 3d 20 63 61 63 6b 65 79 5f 72 65 63 6f et = cackey_reco 11b60 6e 6e 65 63 74 5f 63 61 72 64 28 73 6c 6f 74 2c nnect_card(slot, 11b70 20 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f SCARD_PROTOCOL_ 11b80 54 30 20 7c 20 53 43 41 52 44 5f 50 52 4f 54 4f T0 | SCARD_PROTO 11b90 43 4f 4c 5f 54 31 2c 20 26 70 72 6f 74 6f 63 6f COL_T1, &protoco 11ba0 6c 29 3b 0a 09 09 09 69 66 20 28 73 63 61 72 64 l);....if (scard 11bb0 5f 72 65 63 6f 6e 6e 5f 72 65 74 20 3d 3d 20 53 _reconn_ret == S 11bc0 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 CARD_S_SUCCESS) 11bd0 7b 0a 09 09 09 09 2f 2a 20 55 70 64 61 74 65 20 {...../* Update 11be0 70 72 6f 74 6f 63 6f 6c 20 2a 2f 0a 09 09 09 09 protocol */..... 11bf0 73 6c 6f 74 2d 3e 70 72 6f 74 6f 63 6f 6c 20 3d slot->protocol = 11c00 20 70 72 6f 74 6f 63 6f 6c 3b 0a 0a 09 09 09 09 protocol;...... 11c10 2f 2a 20 52 65 2d 65 73 74 61 62 6c 69 73 68 20 /* Re-establish 11c20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 69 66 20 transaction, if 11c30 69 74 20 77 61 73 20 70 72 65 73 65 6e 74 20 2a it was present * 11c40 2f 0a 09 09 09 09 69 66 20 28 73 6c 6f 74 2d 3e /.....if (slot-> 11c50 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 transaction_dept 11c60 68 20 3e 20 30 29 20 7b 0a 09 09 09 09 09 73 6c h > 0) {......sl 11c70 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f ot->transaction_ 11c80 64 65 70 74 68 2d 2d 3b 0a 09 09 09 09 09 73 6c depth--;......sl 11c90 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f ot->transaction_ 11ca0 6e 65 65 64 5f 68 77 5f 6c 6f 63 6b 20 3d 20 31 need_hw_lock = 1 11cb0 3b 0a 09 09 09 09 09 63 61 63 6b 65 79 5f 62 65 ;......cackey_be 11cc0 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 gin_transaction( 11cd0 73 6c 6f 74 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 slot);.....}.... 11ce0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11cf0 52 49 4e 54 46 28 22 52 65 73 65 74 20 73 75 63 RINTF("Reset suc 11d00 63 65 73 73 66 75 6c 2c 20 72 65 71 75 65 72 79 cessful, requery 11d10 69 6e 67 22 29 3b 0a 09 09 09 09 73 74 61 74 75 ing");.....statu 11d20 73 5f 72 65 74 20 3d 20 53 43 61 72 64 53 74 61 s_ret = SCardSta 11d30 74 75 73 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 tus(slot->pcsc_c 11d40 61 72 64 2c 20 4e 55 4c 4c 2c 20 26 72 65 61 64 ard, NULL, &read 11d50 65 72 5f 6c 65 6e 2c 20 26 73 74 61 74 65 2c 20 er_len, &state, 11d60 26 70 72 6f 74 6f 63 6f 6c 2c 20 61 74 72 2c 20 &protocol, atr, 11d70 26 61 74 72 5f 6c 65 6e 29 3b 0a 09 09 09 09 69 &atr_len);.....i 11d80 66 20 28 73 74 61 74 75 73 5f 72 65 74 20 21 3d f (status_ret != 11d90 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 SCARD_S_SUCCESS 11da0 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f ) {......CACKEY_ 11db0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 74 DEBUG_PRINTF("St 11dc0 69 6c 6c 20 75 6e 61 62 6c 65 20 74 6f 20 71 75 ill unable to qu 11dd0 65 72 79 20 63 61 72 64 20 73 74 61 74 75 73 2c ery card status, 11de0 20 72 65 74 75 72 6e 69 6e 67 20 74 6f 6b 65 6e returning token 11df0 20 61 62 73 65 6e 74 2e 20 20 53 43 61 72 64 53 absent. SCardS 11e00 74 61 74 75 73 28 29 20 3d 20 25 73 22 2c 20 43 tatus() = %s", C 11e10 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC 11e20 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 _SCARDERR_TO_STR 11e30 28 73 74 61 74 75 73 5f 72 65 74 29 29 3b 0a 0a (status_ret));.. 11e40 09 09 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b .....return(CACK 11e50 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 EY_PCSC_E_TOKENA 11e60 42 53 45 4e 54 29 3b 0a 09 09 09 09 7d 0a 09 09 BSENT);.....}... 11e70 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 43 41 .} else {.....CA 11e80 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 11e90 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 72 65 63 F("Unable to rec 11ea0 6f 6e 6e 65 63 74 20 74 6f 20 63 61 72 64 2c 20 onnect to card, 11eb0 72 65 74 75 72 6e 69 6e 67 20 74 6f 6b 65 6e 20 returning token 11ec0 61 62 73 65 6e 74 2e 20 20 53 43 61 72 64 52 65 absent. SCardRe 11ed0 63 6f 6e 6e 65 63 74 28 29 20 3d 20 25 73 22 2c connect() = %s", 11ee0 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 CACKEY_DEBUG_FU 11ef0 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 NC_SCARDERR_TO_S 11f00 54 52 28 73 63 61 72 64 5f 72 65 63 6f 6e 6e 5f TR(scard_reconn_ 11f10 72 65 74 29 29 3b 0a 0a 09 09 09 09 72 65 74 75 ret));......retu 11f20 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 11f30 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 29 3b 0a 09 _TOKENABSENT);.. 11f40 09 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 ..}...} else {.. 11f50 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11f60 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f RINTF("Unable to 11f70 20 71 75 65 72 79 20 63 61 72 64 20 73 74 61 74 query card stat 11f80 75 73 2c 20 72 65 74 75 72 6e 69 6e 67 20 74 6f us, returning to 11f90 6b 65 6e 20 61 62 73 65 6e 74 2e 20 20 53 43 61 ken absent. SCa 11fa0 72 64 53 74 61 74 75 73 28 29 20 3d 20 25 73 22 rdStatus() = %s" 11fb0 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 , CACKEY_DEBUG_F 11fc0 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f UNC_SCARDERR_TO_ 11fd0 53 54 52 28 73 74 61 74 75 73 5f 72 65 74 29 29 STR(status_ret)) 11fe0 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 41 43 ;.....return(CAC 11ff0 4b 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e KEY_PCSC_E_TOKEN 12000 41 42 53 45 4e 54 29 3b 0a 09 09 7d 0a 09 7d 0a ABSENT);...}..}. 12010 0a 09 69 66 20 28 28 73 74 61 74 65 20 26 20 53 ..if ((state & S 12020 43 41 52 44 5f 41 42 53 45 4e 54 29 20 3d 3d 20 CARD_ABSENT) == 12030 53 43 41 52 44 5f 41 42 53 45 4e 54 29 20 7b 0a SCARD_ABSENT) {. 12040 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 12050 52 49 4e 54 46 28 22 43 61 72 64 20 69 73 20 61 RINTF("Card is a 12060 62 73 65 6e 74 2c 20 72 65 74 75 72 6e 69 6e 67 bsent, returning 12070 20 74 6f 6b 65 6e 20 61 62 73 65 6e 74 22 29 3b token absent"); 12080 0a 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 ....return(CACKE 12090 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 Y_PCSC_E_TOKENAB 120a0 53 45 4e 54 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b SENT);..}...CACK 120b0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 120c0 22 52 65 74 75 72 6e 69 6e 67 20 74 6f 6b 65 6e "Returning token 120d0 20 70 72 65 73 65 6e 74 2e 22 29 3b 0a 0a 09 72 present.");...r 120e0 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 eturn(CACKEY_PCS 120f0 43 5f 53 5f 54 4f 4b 45 4e 50 52 45 53 45 4e 54 C_S_TOKENPRESENT 12100 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 );.}../*. * SYNP 12110 4f 53 49 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a OSIS. * .... 12120 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a *. * ARGUMENTS. 12130 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a * .... *. * 12140 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a RETURN VALUE. * 12150 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 4e .... *. * N 12160 4f 54 45 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a OTES. * .... 12170 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 73 73 *. */.static ss 12180 69 7a 65 5f 74 20 63 61 63 6b 65 79 5f 70 63 73 ize_t cackey_pcs 12190 63 5f 69 64 65 6e 74 69 74 79 5f 74 6f 5f 6c 61 c_identity_to_la 121a0 62 65 6c 28 73 74 72 75 63 74 20 63 61 63 6b 65 bel(struct cacke 121b0 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 y_pcsc_identity 121c0 2a 69 64 65 6e 74 69 74 79 2c 20 75 6e 73 69 67 *identity, unsig 121d0 6e 65 64 20 63 68 61 72 20 2a 6c 61 62 65 6c 5f ned char *label_ 121e0 62 75 66 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f buf, unsigned lo 121f0 6e 67 20 6c 61 62 65 6c 5f 62 75 66 5f 6c 65 6e ng label_buf_len 12200 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f ) {..unsigned lo 12210 6e 67 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c ng certificate_l 12220 65 6e 3b 0a 09 76 6f 69 64 20 2a 6c 61 62 65 6c en;..void *label 12230 5f 61 73 6e 31 3b 0a 09 76 6f 69 64 20 2a 63 65 _asn1;..void *ce 12240 72 74 69 66 69 63 61 74 65 3b 0a 09 69 6e 74 20 rtificate;..int 12250 78 35 30 39 5f 72 65 61 64 5f 72 65 74 3b 0a 0a x509_read_ret;.. 12260 09 63 65 72 74 69 66 69 63 61 74 65 20 3d 20 69 .certificate = i 12270 64 65 6e 74 69 74 79 2d 3e 63 65 72 74 69 66 69 dentity->certifi 12280 63 61 74 65 3b 0a 09 63 65 72 74 69 66 69 63 61 cate;..certifica 12290 74 65 5f 6c 65 6e 20 3d 20 69 64 65 6e 74 69 74 te_len = identit 122a0 79 2d 3e 63 65 72 74 69 66 69 63 61 74 65 5f 6c y->certificate_l 122b0 65 6e 3b 0a 0a 09 69 66 20 28 63 65 72 74 69 66 en;...if (certif 122c0 69 63 61 74 65 5f 6c 65 6e 20 3c 20 30 29 20 7b icate_len < 0) { 122d0 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. 122e0 7d 0a 0a 09 78 35 30 39 5f 72 65 61 64 5f 72 65 }...x509_read_re 122f0 74 20 3d 20 78 35 30 39 5f 74 6f 5f 73 75 62 6a t = x509_to_subj 12300 65 63 74 28 63 65 72 74 69 66 69 63 61 74 65 2c ect(certificate, 12310 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e certificate_len 12320 2c 20 28 76 6f 69 64 20 2a 2a 29 20 26 6c 61 62 , (void **) &lab 12330 65 6c 5f 61 73 6e 31 29 3b 0a 09 69 66 20 28 78 el_asn1);..if (x 12340 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 509_read_ret < 0 12350 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 ) {...return(-1) 12360 3b 0a 09 7d 0a 0a 09 78 35 30 39 5f 72 65 61 64 ;..}...x509_read 12370 5f 72 65 74 20 3d 20 78 35 30 39 5f 64 6e 5f 74 _ret = x509_dn_t 12380 6f 5f 73 74 72 69 6e 67 28 6c 61 62 65 6c 5f 61 o_string(label_a 12390 73 6e 31 2c 20 78 35 30 39 5f 72 65 61 64 5f 72 sn1, x509_read_r 123a0 65 74 2c 20 28 63 68 61 72 20 2a 29 20 6c 61 62 et, (char *) lab 123b0 65 6c 5f 62 75 66 2c 20 6c 61 62 65 6c 5f 62 75 el_buf, label_bu 123c0 66 5f 6c 65 6e 2c 20 22 43 4e 22 29 3b 0a 09 69 f_len, "CN");..i 123d0 66 20 28 78 35 30 39 5f 72 65 61 64 5f 72 65 74 f (x509_read_ret 123e0 20 3c 3d 20 30 29 20 7b 0a 09 09 78 35 30 39 5f <= 0) {...x509_ 123f0 72 65 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f read_ret = x509_ 12400 64 6e 5f 74 6f 5f 73 74 72 69 6e 67 28 6c 61 62 dn_to_string(lab 12410 65 6c 5f 61 73 6e 31 2c 20 78 35 30 39 5f 72 65 el_asn1, x509_re 12420 61 64 5f 72 65 74 2c 20 28 63 68 61 72 20 2a 29 ad_ret, (char *) 12430 20 6c 61 62 65 6c 5f 62 75 66 2c 20 6c 61 62 65 label_buf, labe 12440 6c 5f 62 75 66 5f 6c 65 6e 2c 20 4e 55 4c 4c 29 l_buf_len, NULL) 12450 3b 0a 0a 09 09 69 66 20 28 78 35 30 39 5f 72 65 ;....if (x509_re 12460 61 64 5f 72 65 74 20 3c 3d 20 30 29 20 7b 0a 09 ad_ret <= 0) {.. 12470 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 ..return(-1);... 12480 7d 0a 09 7d 0a 0a 23 69 66 64 65 66 20 43 41 43 }..}..#ifdef CAC 12490 4b 45 59 5f 50 41 52 41 4e 4f 49 44 0a 23 20 20 KEY_PARANOID.# 124a0 69 66 64 65 66 20 5f 50 4f 53 49 58 5f 53 53 49 ifdef _POSIX_SSI 124b0 5a 45 5f 4d 41 58 0a 09 69 66 20 28 78 35 30 39 ZE_MAX..if (x509 124c0 5f 72 65 61 64 5f 72 65 74 20 3e 20 5f 50 4f 53 _read_ret > _POS 124d0 49 58 5f 53 53 49 5a 45 5f 4d 41 58 29 20 7b 0a IX_SSIZE_MAX) {. 124e0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 124f0 52 49 4e 54 46 28 22 78 35 30 39 5f 72 65 61 64 RINTF("x509_read 12500 5f 72 65 74 20 65 78 63 65 65 64 73 20 6d 61 78 _ret exceeds max 12510 69 6d 75 6d 20 76 61 6c 75 65 2c 20 72 65 74 75 imum value, retu 12520 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 rning in failure 12530 2e 20 28 6d 61 78 20 3d 20 25 6c 69 2c 20 78 35 . (max = %li, x5 12540 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 25 6c 09_read_ret = %l 12550 75 29 22 2c 20 28 6c 6f 6e 67 29 20 5f 50 4f 53 u)", (long) _POS 12560 49 58 5f 53 53 49 5a 45 5f 4d 41 58 2c 20 28 75 IX_SSIZE_MAX, (u 12570 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 78 35 nsigned long) x5 12580 30 39 5f 72 65 61 64 5f 72 65 74 29 3b 0a 0a 09 09_read_ret);... 12590 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a .return(-1);..}. 125a0 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a # endif.#endif. 125b0 0a 09 72 65 74 75 72 6e 28 78 35 30 39 5f 72 65 ..return(x509_re 125c0 61 64 5f 72 65 74 29 3b 0a 7d 0a 0a 2f 2a 20 52 ad_ret);.}../* R 125d0 65 74 75 72 6e 73 20 30 20 6f 6e 20 73 75 63 63 eturns 0 on succ 125e0 65 73 73 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e ess */.static in 125f0 74 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 63 t cackey_mutex_c 12600 72 65 61 74 65 28 76 6f 69 64 20 2a 2a 6d 75 74 reate(void **mut 12610 65 78 29 20 7b 0a 09 70 74 68 72 65 61 64 5f 6d ex) {..pthread_m 12620 75 74 65 78 5f 74 20 2a 70 74 68 72 65 61 64 5f utex_t *pthread_ 12630 6d 75 74 65 78 3b 0a 09 69 6e 74 20 70 74 68 72 mutex;..int pthr 12640 65 61 64 5f 72 65 74 76 61 6c 3b 0a 09 43 4b 5f ead_retval;..CK_ 12650 52 56 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c RV custom_retval 12660 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 12670 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 12680 22 29 3b 0a 0a 09 69 66 20 28 28 63 61 63 6b 65 ");...if ((cacke 12690 79 5f 61 72 67 73 2e 66 6c 61 67 73 20 26 20 43 y_args.flags & C 126a0 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b KF_OS_LOCKING_OK 126b0 29 20 3d 3d 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b ) == CKF_OS_LOCK 126c0 49 4e 47 5f 4f 4b 29 20 7b 0a 09 09 70 74 68 72 ING_OK) {...pthr 126d0 65 61 64 5f 6d 75 74 65 78 20 3d 20 6d 61 6c 6c ead_mutex = mall 126e0 6f 63 28 73 69 7a 65 6f 66 28 2a 70 74 68 72 65 oc(sizeof(*pthre 126f0 61 64 5f 6d 75 74 65 78 29 29 3b 0a 09 09 69 66 ad_mutex));...if 12700 20 28 21 70 74 68 72 65 61 64 5f 6d 75 74 65 78 (!pthread_mutex 12710 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE 12720 42 55 47 5f 50 52 49 4e 54 46 28 22 46 61 69 6c BUG_PRINTF("Fail 12730 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 6d ed to allocate m 12740 65 6d 6f 72 79 2e 22 29 3b 0a 0a 09 09 09 72 65 emory.");.....re 12750 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 turn(-1);...}... 12760 09 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c 20 .pthread_retval 12770 3d 20 70 74 68 72 65 61 64 5f 6d 75 74 65 78 5f = pthread_mutex_ 12780 69 6e 69 74 28 70 74 68 72 65 61 64 5f 6d 75 74 init(pthread_mut 12790 65 78 2c 20 4e 55 4c 4c 29 3b 0a 09 09 69 66 20 ex, NULL);...if 127a0 28 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c 20 (pthread_retval 127b0 21 3d 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 != 0) {....CACKE 127c0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 127d0 70 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 69 6e pthread_mutex_in 127e0 69 74 28 29 20 72 65 74 75 72 6e 65 64 20 65 72 it() returned er 127f0 72 6f 72 20 28 25 69 29 2e 22 2c 20 70 74 68 72 ror (%i).", pthr 12800 65 61 64 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 ead_retval);.... 12810 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d .return(-1);...} 12820 0a 0a 09 09 2a 6d 75 74 65 78 20 3d 20 70 74 68 ....*mutex = pth 12830 72 65 61 64 5f 6d 75 74 65 78 3b 0a 09 7d 20 65 read_mutex;..} e 12840 6c 73 65 20 7b 0a 09 09 69 66 20 28 63 61 63 6b lse {...if (cack 12850 65 79 5f 61 72 67 73 2e 43 72 65 61 74 65 4d 75 ey_args.CreateMu 12860 74 65 78 29 20 7b 0a 09 09 09 63 75 73 74 6f 6d tex) {....custom 12870 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 12880 5f 61 72 67 73 2e 43 72 65 61 74 65 4d 75 74 65 _args.CreateMute 12890 78 28 6d 75 74 65 78 29 3b 0a 0a 09 09 09 69 66 x(mutex);.....if 128a0 20 28 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 (custom_retval 128b0 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 != CKR_OK) {.... 128c0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 128d0 49 4e 54 46 28 22 63 61 63 6b 65 79 5f 61 72 67 INTF("cackey_arg 128e0 73 2e 43 72 65 61 74 65 4d 75 74 65 78 28 29 20 s.CreateMutex() 128f0 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 28 returned error ( 12900 25 6c 69 29 2e 22 2c 20 28 6c 6f 6e 67 29 20 63 %li).", (long) c 12910 75 73 74 6f 6d 5f 72 65 74 76 61 6c 29 3b 0a 0a ustom_retval);.. 12920 09 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. 12930 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41 ...}...}..}...CA 12940 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 12950 46 28 22 52 65 74 75 72 6e 69 6e 67 20 73 75 63 F("Returning suc 12960 65 73 73 66 75 6c 6c 79 20 28 30 29 22 29 3b 0a essfully (0)");. 12970 0a 09 72 65 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a ..return(0);.}.. 12980 2f 2a 20 52 65 74 75 72 6e 73 20 30 20 6f 6e 20 /* Returns 0 on 12990 73 75 63 63 65 73 73 20 2a 2f 0a 73 74 61 74 69 success */.stati 129a0 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 6d 75 74 c int cackey_mut 129b0 65 78 5f 6c 6f 63 6b 28 76 6f 69 64 20 2a 6d 75 ex_lock(void *mu 129c0 74 65 78 29 20 7b 0a 09 70 74 68 72 65 61 64 5f tex) {..pthread_ 129d0 6d 75 74 65 78 5f 74 20 2a 70 74 68 72 65 61 64 mutex_t *pthread 129e0 5f 6d 75 74 65 78 3b 0a 09 69 6e 74 20 70 74 68 _mutex;..int pth 129f0 72 65 61 64 5f 72 65 74 76 61 6c 3b 0a 09 43 4b read_retval;..CK 12a00 5f 52 56 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 _RV custom_retva 12a10 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 l;...CACKEY_DEBU 12a20 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 12a30 2e 22 29 3b 0a 0a 09 69 66 20 28 28 63 61 63 6b .");...if ((cack 12a40 65 79 5f 61 72 67 73 2e 66 6c 61 67 73 20 26 20 ey_args.flags & 12a50 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f CKF_OS_LOCKING_O 12a60 4b 29 20 3d 3d 20 43 4b 46 5f 4f 53 5f 4c 4f 43 K) == CKF_OS_LOC 12a70 4b 49 4e 47 5f 4f 4b 29 20 7b 0a 09 09 70 74 68 KING_OK) {...pth 12a80 72 65 61 64 5f 6d 75 74 65 78 20 3d 20 6d 75 74 read_mutex = mut 12a90 65 78 3b 0a 0a 09 09 70 74 68 72 65 61 64 5f 72 ex;....pthread_r 12aa0 65 74 76 61 6c 20 3d 20 70 74 68 72 65 61 64 5f etval = pthread_ 12ab0 6d 75 74 65 78 5f 6c 6f 63 6b 28 70 74 68 72 65 mutex_lock(pthre 12ac0 61 64 5f 6d 75 74 65 78 29 3b 0a 09 09 69 66 20 ad_mutex);...if 12ad0 28 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c 20 (pthread_retval 12ae0 21 3d 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 != 0) {....CACKE 12af0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 12b00 70 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 6c 6f pthread_mutex_lo 12b10 63 6b 28 29 20 72 65 74 75 72 6e 65 64 20 65 72 ck() returned er 12b20 72 6f 72 20 28 25 69 29 2e 22 2c 20 70 74 68 72 ror (%i).", pthr 12b30 65 61 64 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 ead_retval);.... 12b40 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d .return(-1);...} 12b50 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 ..} else {...if 12b60 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 4c 6f 63 (cackey_args.Loc 12b70 6b 4d 75 74 65 78 29 20 7b 0a 09 09 09 63 75 73 kMutex) {....cus 12b80 74 6f 6d 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tom_retval = cac 12b90 6b 65 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 key_args.LockMut 12ba0 65 78 28 6d 75 74 65 78 29 3b 0a 0a 09 09 09 69 ex(mutex);.....i 12bb0 66 20 28 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c f (custom_retval 12bc0 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 != CKR_OK) {... 12bd0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 12be0 52 49 4e 54 46 28 22 63 61 63 6b 65 79 5f 61 72 RINTF("cackey_ar 12bf0 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 28 29 20 72 gs.LockMutex() r 12c00 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 28 25 eturned error (% 12c10 6c 69 29 2e 22 2c 20 28 6c 6f 6e 67 29 20 63 75 li).", (long) cu 12c20 73 74 6f 6d 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 stom_retval);... 12c30 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. 12c40 09 09 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41 43 ..}...}..}...CAC 12c50 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 12c60 28 22 52 65 74 75 72 6e 69 6e 67 20 73 75 63 65 ("Returning suce 12c70 73 73 66 75 6c 6c 79 20 28 30 29 22 29 3b 0a 0a ssfully (0)");.. 12c80 09 72 65 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 2f .return(0);.}../ 12c90 2a 20 52 65 74 75 72 6e 73 20 30 20 6f 6e 20 73 * Returns 0 on s 12ca0 75 63 63 65 73 73 20 2a 2f 0a 73 74 61 74 69 63 uccess */.static 12cb0 20 69 6e 74 20 63 61 63 6b 65 79 5f 6d 75 74 65 int cackey_mute 12cc0 78 5f 75 6e 6c 6f 63 6b 28 76 6f 69 64 20 2a 6d x_unlock(void *m 12cd0 75 74 65 78 29 20 7b 0a 09 70 74 68 72 65 61 64 utex) {..pthread 12ce0 5f 6d 75 74 65 78 5f 74 20 2a 70 74 68 72 65 61 _mutex_t *pthrea 12cf0 64 5f 6d 75 74 65 78 3b 0a 09 69 6e 74 20 70 74 d_mutex;..int pt 12d00 68 72 65 61 64 5f 72 65 74 76 61 6c 3b 0a 09 43 hread_retval;..C 12d10 4b 5f 52 56 20 63 75 73 74 6f 6d 5f 72 65 74 76 K_RV custom_retv 12d20 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 al;...CACKEY_DEB 12d30 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 12d40 64 2e 22 29 3b 0a 0a 09 69 66 20 28 28 63 61 63 d.");...if ((cac 12d50 6b 65 79 5f 61 72 67 73 2e 66 6c 61 67 73 20 26 key_args.flags & 12d60 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f CKF_OS_LOCKING_ 12d70 4f 4b 29 20 3d 3d 20 43 4b 46 5f 4f 53 5f 4c 4f OK) == CKF_OS_LO 12d80 43 4b 49 4e 47 5f 4f 4b 29 20 7b 0a 09 09 70 74 CKING_OK) {...pt 12d90 68 72 65 61 64 5f 6d 75 74 65 78 20 3d 20 6d 75 hread_mutex = mu 12da0 74 65 78 3b 0a 0a 09 09 70 74 68 72 65 61 64 5f tex;....pthread_ 12db0 72 65 74 76 61 6c 20 3d 20 70 74 68 72 65 61 64 retval = pthread 12dc0 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 70 74 _mutex_unlock(pt 12dd0 68 72 65 61 64 5f 6d 75 74 65 78 29 3b 0a 09 09 hread_mutex);... 12de0 69 66 20 28 70 74 68 72 65 61 64 5f 72 65 74 76 if (pthread_retv 12df0 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 09 43 41 al != 0) {....CA 12e00 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 12e10 46 28 22 70 74 68 72 65 61 64 5f 6d 75 74 65 78 F("pthread_mutex 12e20 5f 75 6e 6c 6f 63 6b 28 29 20 72 65 74 75 72 6e _unlock() return 12e30 65 64 20 65 72 72 6f 72 20 28 25 69 29 2e 22 2c ed error (%i).", 12e40 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c 29 pthread_retval) 12e50 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 ;.....return(-1) 12e60 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a ;...}..} else {. 12e70 09 09 69 66 20 28 63 61 63 6b 65 79 5f 61 72 67 ..if (cackey_arg 12e80 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 29 20 7b s.UnlockMutex) { 12e90 0a 09 09 09 63 75 73 74 6f 6d 5f 72 65 74 76 61 ....custom_retva 12ea0 6c 20 3d 20 63 61 63 6b 65 79 5f 61 72 67 73 2e l = cackey_args. 12eb0 55 6e 6c 6f 63 6b 4d 75 74 65 78 28 6d 75 74 65 UnlockMutex(mute 12ec0 78 29 3b 0a 0a 09 09 09 69 66 20 28 63 75 73 74 x);.....if (cust 12ed0 6f 6d 5f 72 65 74 76 61 6c 20 21 3d 20 43 4b 52 om_retval != CKR 12ee0 5f 4f 4b 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 _OK) {.....CACKE 12ef0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 12f00 63 61 63 6b 65 79 5f 61 72 67 73 2e 55 6e 6c 6f cackey_args.Unlo 12f10 63 6b 4d 75 74 65 78 28 29 20 72 65 74 75 72 6e ckMutex() return 12f20 65 64 20 65 72 72 6f 72 20 28 25 6c 69 29 2e 22 ed error (%li)." 12f30 2c 20 28 6c 6f 6e 67 29 20 63 75 73 74 6f 6d 5f , (long) custom_ 12f40 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 09 72 65 retval);......re 12f50 74 75 72 6e 28 2d 31 29 3b 0a 09 09 09 7d 0a 09 turn(-1);....}.. 12f60 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 .}..}...CACKEY_D 12f70 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 12f80 75 72 6e 69 6e 67 20 73 75 63 65 73 73 66 75 6c urning sucessful 12f90 6c 79 20 28 30 29 22 29 3b 0a 0a 09 72 65 74 75 ly (0)");...retu 12fa0 72 6e 28 30 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 rn(0);.}..static 12fb0 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 CK_ATTRIBUTE_PT 12fc0 52 20 63 61 63 6b 65 79 5f 67 65 74 5f 61 74 74 R cackey_get_att 12fd0 72 69 62 75 74 65 73 28 43 4b 5f 4f 42 4a 45 43 ributes(CK_OBJEC 12fe0 54 5f 43 4c 41 53 53 20 6f 62 6a 65 63 74 63 6c T_CLASS objectcl 12ff0 61 73 73 2c 20 73 74 72 75 63 74 20 63 61 63 6b ass, struct cack 13000 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 ey_pcsc_identity 13010 20 2a 69 64 65 6e 74 69 74 79 2c 20 75 6e 73 69 *identity, unsi 13020 67 6e 65 64 20 6c 6f 6e 67 20 69 64 65 6e 74 69 gned long identi 13030 74 79 5f 6e 75 6d 2c 20 43 4b 5f 55 4c 4f 4e 47 ty_num, CK_ULONG 13040 5f 50 54 52 20 70 75 6c 43 6f 75 6e 74 29 20 7b _PTR pulCount) { 13050 0a 09 73 74 61 74 69 63 20 43 4b 5f 42 42 4f 4f ..static CK_BBOO 13060 4c 20 63 6b 5f 74 72 75 65 20 3d 20 31 3b 0a 09 L ck_true = 1;.. 13070 73 74 61 74 69 63 20 43 4b 5f 42 42 4f 4f 4c 20 static CK_BBOOL 13080 63 6b 5f 66 61 6c 73 65 20 3d 20 30 3b 0a 09 73 ck_false = 0;..s 13090 74 61 74 69 63 20 43 4b 5f 54 52 55 53 54 20 63 tatic CK_TRUST c 130a0 6b 5f 74 72 75 73 74 65 64 20 3d 20 43 4b 5f 54 k_trusted = CK_T 130b0 52 55 53 54 45 44 5f 44 45 4c 45 47 41 54 4f 52 RUSTED_DELEGATOR 130c0 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 6e 75 6d 61 ;..CK_ULONG numa 130d0 74 74 72 73 20 3d 20 30 2c 20 72 65 74 76 61 6c ttrs = 0, retval 130e0 5f 63 6f 75 6e 74 3b 0a 09 43 4b 5f 41 54 54 52 _count;..CK_ATTR 130f0 49 42 55 54 45 5f 54 59 50 45 20 63 75 72 72 5f IBUTE_TYPE curr_ 13100 61 74 74 72 5f 74 79 70 65 3b 0a 09 43 4b 5f 41 attr_type;..CK_A 13110 54 54 52 49 42 55 54 45 20 63 75 72 72 5f 61 74 TTRIBUTE curr_at 13120 74 72 2c 20 2a 72 65 74 76 61 6c 3b 0a 09 43 4b tr, *retval;..CK 13130 5f 56 4f 49 44 5f 50 54 52 20 70 56 61 6c 75 65 _VOID_PTR pValue 13140 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 75 6c 56 61 ;..CK_ULONG ulVa 13150 6c 75 65 4c 65 6e 3b 0a 09 43 4b 5f 4f 42 4a 45 lueLen;..CK_OBJE 13160 43 54 5f 43 4c 41 53 53 20 63 6b 5f 6f 62 6a 65 CT_CLASS ck_obje 13170 63 74 5f 63 6c 61 73 73 3b 0a 09 43 4b 5f 43 45 ct_class;..CK_CE 13180 52 54 49 46 49 43 41 54 45 5f 54 59 50 45 20 63 RTIFICATE_TYPE c 13190 6b 5f 63 65 72 74 69 66 69 63 61 74 65 5f 74 79 k_certificate_ty 131a0 70 65 3b 0a 09 43 4b 5f 4b 45 59 5f 54 59 50 45 pe;..CK_KEY_TYPE 131b0 20 63 6b 5f 6b 65 79 5f 74 79 70 65 3b 0a 09 43 ck_key_type;..C 131c0 4b 5f 55 54 46 38 43 48 41 52 20 75 63 54 6d 70 K_UTF8CHAR ucTmp 131d0 42 75 66 5b 31 30 32 34 5d 3b 0a 09 53 48 41 31 Buf[1024];..SHA1 131e0 43 6f 6e 74 65 78 74 20 73 68 61 31 5f 63 74 78 Context sha1_ctx 131f0 3b 0a 09 4d 44 35 5f 43 54 58 20 6d 64 35 5f 63 ;..MD5_CTX md5_c 13200 74 78 3b 0a 09 75 69 6e 74 38 5f 74 20 73 68 61 tx;..uint8_t sha 13210 31 5f 68 61 73 68 5b 53 48 41 31 48 61 73 68 53 1_hash[SHA1HashS 13220 69 7a 65 5d 3b 0a 09 75 69 6e 74 38 5f 74 20 6d ize];..uint8_t m 13230 64 35 5f 68 61 73 68 5b 4d 44 35 48 61 73 68 53 d5_hash[MD5HashS 13240 69 7a 65 5d 3b 0a 09 75 6e 73 69 67 6e 65 64 20 ize];..unsigned 13250 63 68 61 72 20 2a 63 65 72 74 69 66 69 63 61 74 char *certificat 13260 65 3b 0a 09 73 73 69 7a 65 5f 74 20 63 65 72 74 e;..ssize_t cert 13270 69 66 69 63 61 74 65 5f 6c 65 6e 20 3d 20 2d 31 ificate_len = -1 13280 2c 20 78 35 30 39 5f 72 65 61 64 5f 72 65 74 3b , x509_read_ret; 13290 0a 09 69 6e 74 20 70 56 61 6c 75 65 5f 66 72 65 ..int pValue_fre 132a0 65 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 e;...CACKEY_DEBU 132b0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 132c0 20 28 6f 62 6a 65 63 74 43 6c 61 73 73 20 3d 20 (objectClass = 132d0 25 6c 75 2c 20 69 64 65 6e 74 69 74 79 5f 6e 75 %lu, identity_nu 132e0 6d 20 3d 20 25 6c 75 29 2e 22 2c 20 28 75 6e 73 m = %lu).", (uns 132f0 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6f 62 6a 65 igned long) obje 13300 63 74 63 6c 61 73 73 2c 20 69 64 65 6e 74 69 74 ctclass, identit 13310 79 5f 6e 75 6d 29 3b 0a 0a 09 2a 70 75 6c 43 6f y_num);...*pulCo 13320 75 6e 74 20 3d 20 30 3b 0a 0a 09 69 66 20 28 6f unt = 0;...if (o 13330 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b bjectclass != CK 13340 4f 5f 43 45 52 54 49 46 49 43 41 54 45 20 26 26 O_CERTIFICATE && 13350 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 objectclass != 13360 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b 45 59 20 26 CKO_PUBLIC_KEY & 13370 26 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d & objectclass != 13380 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 CKO_PRIVATE_KEY 13390 20 26 26 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 && objectclass 133a0 21 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f != CKO_NETSCAPE_ 133b0 54 52 55 53 54 29 20 7b 0a 09 09 43 41 43 4b 45 TRUST) {...CACKE 133c0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 133d0 52 65 74 75 72 6e 69 6e 67 20 30 20 6f 62 6a 65 Returning 0 obje 133e0 63 74 73 20 28 4e 55 4c 4c 29 2c 20 69 6e 76 61 cts (NULL), inva 133f0 6c 69 64 20 6f 62 6a 65 63 74 20 63 6c 61 73 73 lid object class 13400 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 ");....return(NU 13410 4c 4c 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 47 65 74 LL);..}.../* Get 13420 20 43 65 72 74 20 2a 2f 0a 09 69 66 20 28 69 64 Cert */..if (id 13430 65 6e 74 69 74 79 20 3d 3d 20 4e 55 4c 4c 29 20 entity == NULL) 13440 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 13450 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 13460 6e 67 20 30 20 6f 62 6a 65 63 74 73 20 28 4e 55 ng 0 objects (NU 13470 4c 4c 29 2c 20 69 6e 76 61 6c 69 64 20 69 64 65 LL), invalid ide 13480 6e 74 69 79 20 70 72 6f 76 69 64 65 64 22 29 3b ntiy provided"); 13490 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 ....return(NULL) 134a0 3b 0a 09 7d 0a 0a 09 63 65 72 74 69 66 69 63 61 ;..}...certifica 134b0 74 65 20 3d 20 69 64 65 6e 74 69 74 79 2d 3e 63 te = identity->c 134c0 65 72 74 69 66 69 63 61 74 65 3b 0a 09 63 65 72 ertificate;..cer 134d0 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3d 20 69 tificate_len = i 134e0 64 65 6e 74 69 74 79 2d 3e 63 65 72 74 69 66 69 dentity->certifi 134f0 63 61 74 65 5f 6c 65 6e 3b 0a 0a 09 69 66 20 28 cate_len;...if ( 13500 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 certificate_len 13510 3d 3d 20 2d 31 20 7c 7c 20 63 65 72 74 69 66 69 == -1 || certifi 13520 63 61 74 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a cate == NULL) {. 13530 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 13540 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 13550 20 30 20 6f 62 6a 65 63 74 73 20 28 4e 55 4c 4c 0 objects (NULL 13560 29 2c 20 74 68 69 73 20 69 64 65 6e 74 69 74 79 ), this identity 13570 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 does not have a 13580 6e 20 58 2e 35 30 39 20 63 65 72 74 69 66 69 63 n X.509 certific 13590 61 74 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 ate associated w 135a0 69 74 68 20 69 74 20 61 6e 64 20 77 69 6c 6c 20 ith it and will 135b0 6e 6f 74 20 77 6f 72 6b 22 29 3b 0a 0a 09 09 72 not work");....r 135c0 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a eturn(NULL);..}. 135d0 0a 09 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 ../* Verify that 135e0 20 63 65 72 74 69 66 69 63 61 74 65 20 69 73 20 certificate is 135f0 41 53 4e 2e 31 20 65 6e 63 6f 64 65 64 20 58 2e ASN.1 encoded X. 13600 35 30 39 20 63 65 72 74 69 66 69 63 61 74 65 20 509 certificate 13610 2a 2f 0a 09 69 66 20 28 78 35 30 39 5f 74 6f 5f */..if (x509_to_ 13620 73 65 72 69 61 6c 28 63 65 72 74 69 66 69 63 61 serial(certifica 13630 74 65 2c 20 63 65 72 74 69 66 69 63 61 74 65 5f te, certificate_ 13640 6c 65 6e 2c 20 4e 55 4c 4c 29 20 3c 20 30 29 20 len, NULL) < 0) 13650 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 13660 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 13670 6e 67 20 30 20 6f 62 6a 65 63 74 73 20 28 4e 55 ng 0 objects (NU 13680 4c 4c 29 2c 20 74 68 65 20 58 2e 35 30 39 20 63 LL), the X.509 c 13690 65 72 74 69 66 69 63 61 74 65 20 61 73 73 6f 63 ertificate assoc 136a0 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 iated with this 136b0 69 64 65 6e 74 69 74 79 20 69 73 20 6e 6f 74 20 identity is not 136c0 76 61 6c 69 64 22 29 3b 0a 0a 09 09 72 65 74 75 valid");....retu 136d0 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 72 rn(NULL);..}...r 136e0 65 74 76 61 6c 5f 63 6f 75 6e 74 20 3d 20 36 34 etval_count = 64 136f0 3b 0a 09 72 65 74 76 61 6c 20 3d 20 6d 61 6c 6c ;..retval = mall 13700 6f 63 28 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 oc(retval_count 13710 2a 20 73 69 7a 65 6f 66 28 2a 72 65 74 76 61 6c * sizeof(*retval 13720 29 29 3b 0a 0a 09 66 6f 72 20 28 63 75 72 72 5f ));...for (curr_ 13730 61 74 74 72 5f 74 79 70 65 20 3d 20 30 3b 20 63 attr_type = 0; c 13740 75 72 72 5f 61 74 74 72 5f 74 79 70 65 20 3c 20 urr_attr_type < 13750 30 78 63 65 35 33 36 33 62 66 3b 20 63 75 72 72 0xce5363bf; curr 13760 5f 61 74 74 72 5f 74 79 70 65 2b 2b 29 20 7b 0a _attr_type++) {. 13770 09 09 69 66 20 28 63 75 72 72 5f 61 74 74 72 5f ..if (curr_attr_ 13780 74 79 70 65 20 3d 3d 20 30 78 38 30 30 29 20 7b type == 0x800) { 13790 0a 09 09 09 63 75 72 72 5f 61 74 74 72 5f 74 79 ....curr_attr_ty 137a0 70 65 20 3d 20 30 78 63 65 35 33 36 33 30 30 3b pe = 0xce536300; 137b0 0a 09 09 7d 0a 0a 09 09 70 56 61 6c 75 65 5f 66 ...}....pValue_f 137c0 72 65 65 20 3d 20 30 3b 0a 09 09 70 56 61 6c 75 ree = 0;...pValu 137d0 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 75 6c 56 61 e = NULL;...ulVa 137e0 6c 75 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e lueLen = (CK_LON 137f0 47 29 20 2d 31 3b 0a 0a 09 09 73 77 69 74 63 68 G) -1;....switch 13800 20 28 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 (curr_attr_type 13810 29 20 7b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f ) {....case CKA_ 13820 43 4c 41 53 53 3a 0a 09 09 09 09 43 41 43 4b 45 CLASS:.....CACKE 13830 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 13840 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri 13850 62 75 74 65 20 43 4b 41 5f 43 4c 41 53 53 20 28 bute CKA_CLASS ( 13860 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 0x%08lx) ...", ( 13870 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 unsigned long) c 13880 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a urr_attr_type);. 13890 0a 09 09 09 09 63 6b 5f 6f 62 6a 65 63 74 5f 63 .....ck_object_c 138a0 6c 61 73 73 20 3d 20 6f 62 6a 65 63 74 63 6c 61 lass = objectcla 138b0 73 73 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 ss;......pValue 138c0 3d 20 26 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c 61 = &ck_object_cla 138d0 73 73 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c ss;.....ulValueL 138e0 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 6f en = sizeof(ck_o 138f0 62 6a 65 63 74 5f 63 6c 61 73 73 29 3b 0a 0a 09 bject_class);... 13900 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 13910 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 PRINTF(" ... ret 13920 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 urning %lu (%p/% 13930 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 lu)", (unsigned 13940 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 4f 42 4a 45 long) *((CK_OBJE 13950 43 54 5f 43 4c 41 53 53 20 2a 29 20 70 56 61 6c CT_CLASS *) pVal 13960 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e ue), pValue, (un 13970 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV 13980 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b 13990 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK 139a0 41 5f 54 4f 4b 45 4e 3a 0a 09 09 09 09 43 41 43 A_TOKEN:.....CAC 139b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 139c0 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 ("Requesting att 139d0 72 69 62 75 74 65 20 43 4b 41 5f 54 4f 4b 45 4e ribute CKA_TOKEN 139e0 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", 139f0 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 13a00 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) 13a10 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 ;......pValue = 13a20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 75 6c &ck_true;.....ul 13a30 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f ValueLen = sizeo 13a40 66 28 63 6b 5f 74 72 75 65 29 3b 0a 0a 09 09 09 f(ck_true);..... 13a50 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 13a60 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 INTF(" ... retur 13a70 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 ning %lu (%p/%lu 13a80 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f )", (unsigned lo 13a90 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 ng) *((CK_BBOOL 13aa0 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c *) pValue), pVal 13ab0 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f ue, (unsigned lo 13ac0 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b ng) ulValueLen); 13ad0 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 13ae0 63 61 73 65 20 43 4b 41 5f 50 52 49 56 41 54 45 case CKA_PRIVATE 13af0 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB 13b00 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque 13b10 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute 13b20 43 4b 41 5f 50 52 49 56 41 54 45 20 28 30 78 25 CKA_PRIVATE (0x% 13b30 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 08lx) ...", (uns 13b40 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 igned long) curr 13b50 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 _attr_type);.... 13b60 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 ..if (objectclas 13b70 73 20 21 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 s != CKO_NETSCAP 13b80 45 5f 54 52 55 53 54 29 20 7b 0a 09 09 09 09 09 E_TRUST) {...... 13b90 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 13ba0 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f NTF(" ... but no 13bb0 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 t getting it bec 13bc0 61 75 73 65 20 77 65 20 61 72 65 20 6e 6f 74 20 ause we are not 13bd0 61 20 4e 65 74 73 63 61 70 65 20 74 72 75 73 74 a Netscape trust 13be0 20 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 09 object");...... 13bf0 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 .break;.....}... 13c00 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f ...pValue = &ck_ 13c10 66 61 6c 73 65 3b 0a 09 09 09 09 75 6c 56 61 6c false;.....ulVal 13c20 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 ueLen = sizeof(c 13c30 6b 5f 66 61 6c 73 65 29 3b 0a 0a 09 09 09 09 43 k_false);......C 13c40 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 13c50 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 TF(" ... returni 13c60 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 ng %lu (%p/%lu)" 13c70 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 13c80 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 ) *((CK_BBOOL *) 13c90 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 pValue), pValue 13ca0 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 13cb0 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. 13cc0 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca 13cd0 73 65 20 43 4b 41 5f 54 52 55 53 54 45 44 3a 0a se CKA_TRUSTED:. 13ce0 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 13cf0 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 _PRINTF("Request 13d00 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b ing attribute CK 13d10 41 5f 54 52 55 53 54 45 44 20 28 30 78 25 30 38 A_TRUSTED (0x%08 13d20 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig 13d30 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a 13d40 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... 13d50 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 if (objectclass 13d60 3d 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f == CKO_NETSCAPE_ 13d70 54 52 55 53 54 29 20 7b 0a 09 09 09 09 09 43 41 TRUST) {......CA 13d80 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 13d90 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 F(" ... but not 13da0 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 getting it becau 13db0 73 65 20 77 65 20 61 72 65 20 61 20 4e 65 74 73 se we are a Nets 13dc0 63 61 70 65 20 74 72 75 73 74 20 6f 62 6a 65 63 cape trust objec 13dd0 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b t");.......break 13de0 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 70 56 61 ;.....}......pVa 13df0 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a lue = &ck_true;. 13e00 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = 13e10 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 sizeof(ck_true) 13e20 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 ;......CACKEY_DE 13e30 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... 13e40 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 returning %lu ( 13e50 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 %p/%lu)", (unsig 13e60 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f ned long) *((CK_ 13e70 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 BBOOL *) pValue) 13e80 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 , pValue, (unsig 13e90 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 ned long) ulValu 13ea0 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 eLen);......brea 13eb0 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 4d k;....case CKA_M 13ec0 4f 44 49 46 49 41 42 4c 45 3a 0a 09 09 09 09 43 ODIFIABLE:.....C 13ed0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 13ee0 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 TF("Requesting a 13ef0 74 74 72 69 62 75 74 65 20 43 4b 41 5f 4d 4f 44 ttribute CKA_MOD 13f00 49 46 49 41 42 4c 45 20 28 30 78 25 30 38 6c 78 IFIABLE (0x%08lx 13f10 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 ) ...", (unsigne 13f20 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 d long) curr_att 13f30 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 r_type);......pV 13f40 61 6c 75 65 20 3d 20 26 63 6b 5f 66 61 6c 73 65 alue = &ck_false 13f50 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e ;.....ulValueLen 13f60 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 66 61 6c = sizeof(ck_fal 13f70 73 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 se);......CACKEY 13f80 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 13f90 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c ... returning %l 13fa0 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e u (%p/%lu)", (un 13fb0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 signed long) *(( 13fc0 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c CK_BBOOL *) pVal 13fd0 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e ue), pValue, (un 13fe0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV 13ff0 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b 14000 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK 14010 41 5f 4c 41 42 45 4c 3a 0a 09 09 09 09 43 41 43 A_LABEL:.....CAC 14020 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 14030 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 ("Requesting att 14040 72 69 62 75 74 65 20 43 4b 41 5f 4c 41 42 45 4c ribute CKA_LABEL 14050 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", 14060 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 14070 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) 14080 3b 0a 0a 09 09 09 09 2f 2a 20 58 58 58 3a 20 44 ;....../* XXX: D 14090 65 74 65 72 6d 69 6e 65 20 6e 61 6d 65 20 2a 2f etermine name */ 140a0 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 .....ulValueLen 140b0 3d 20 73 6e 70 72 69 6e 74 66 28 28 63 68 61 72 = snprintf((char 140c0 20 2a 29 20 75 63 54 6d 70 42 75 66 2c 20 73 69 *) ucTmpBuf, si 140d0 7a 65 6f 66 28 75 63 54 6d 70 42 75 66 29 2c 20 zeof(ucTmpBuf), 140e0 22 49 64 65 6e 74 69 74 79 20 23 25 6c 75 22 2c "Identity #%lu", 140f0 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 14100 20 69 64 65 6e 74 69 74 79 5f 6e 75 6d 29 3b 0a identity_num);. 14110 09 09 09 09 70 56 61 6c 75 65 20 3d 20 75 63 54 ....pValue = ucT 14120 6d 70 42 75 66 3b 0a 0a 09 09 09 09 69 66 20 28 mpBuf;......if ( 14130 75 6c 56 61 6c 75 65 4c 65 6e 20 3e 3d 20 73 69 ulValueLen >= si 14140 7a 65 6f 66 28 75 63 54 6d 70 42 75 66 29 29 20 zeof(ucTmpBuf)) 14150 7b 0a 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 {......ulValueLe 14160 6e 20 3d 20 30 3b 0a 09 09 09 09 09 70 56 61 6c n = 0;......pVal 14170 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 7d ue = NULL;.....} 14180 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 14190 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... 141a0 72 65 74 75 72 6e 69 6e 67 20 28 25 70 2f 25 6c returning (%p/%l 141b0 75 29 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e u)", pValue, (un 141c0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV 141d0 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b 141e0 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK 141f0 41 5f 56 41 4c 55 45 3a 0a 09 09 09 09 43 41 43 A_VALUE:.....CAC 14200 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 14210 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 ("Requesting att 14220 72 69 62 75 74 65 20 43 4b 41 5f 56 41 4c 55 45 ribute CKA_VALUE 14230 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", 14240 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 14250 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) 14260 3b 0a 0a 09 09 09 09 73 77 69 74 63 68 20 28 6f ;......switch (o 14270 62 6a 65 63 74 63 6c 61 73 73 29 20 7b 0a 09 09 bjectclass) {... 14280 09 09 09 63 61 73 65 20 43 4b 4f 5f 50 52 49 56 ...case CKO_PRIV 14290 41 54 45 5f 4b 45 59 3a 0a 09 09 09 09 09 09 43 ATE_KEY:.......C 142a0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 142b0 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 TF(" ... but not 142c0 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 getting it beca 142d0 75 73 65 20 77 65 20 61 72 65 20 61 20 70 72 69 use we are a pri 142e0 76 61 74 65 20 6b 65 79 2e 22 29 3b 0a 0a 09 09 vate key.");.... 142f0 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 ....break;...... 14300 63 61 73 65 20 43 4b 4f 5f 4e 45 54 53 43 41 50 case CKO_NETSCAP 14310 45 5f 54 52 55 53 54 3a 0a 09 09 09 09 09 09 43 E_TRUST:.......C 14320 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 14330 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 TF(" ... but not 14340 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 getting it beca 14350 75 73 65 20 77 65 20 61 72 65 20 61 20 4e 65 74 use we are a Net 14360 73 63 61 70 65 20 74 72 75 73 74 20 6f 62 6a 65 scape trust obje 14370 63 74 22 29 3b 0a 0a 09 09 09 09 09 09 62 72 65 ct");........bre 14380 61 6b 3b 0a 09 09 09 09 09 63 61 73 65 20 43 4b ak;......case CK 14390 4f 5f 50 55 42 4c 49 43 5f 4b 45 59 3a 0a 09 09 O_PUBLIC_KEY:... 143a0 09 09 09 09 69 66 20 28 63 65 72 74 69 66 69 63 ....if (certific 143b0 61 74 65 5f 6c 65 6e 20 3e 3d 20 30 29 20 7b 0a ate_len >= 0) {. 143c0 09 09 09 09 09 09 09 78 35 30 39 5f 72 65 61 64 .......x509_read 143d0 5f 72 65 74 20 3d 20 78 35 30 39 5f 74 6f 5f 70 _ret = x509_to_p 143e0 75 62 6b 65 79 28 63 65 72 74 69 66 69 63 61 74 ubkey(certificat 143f0 65 2c 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c e, certificate_l 14400 65 6e 2c 20 26 70 56 61 6c 75 65 29 3b 0a 09 09 en, &pValue);... 14410 09 09 09 09 09 69 66 20 28 78 35 30 39 5f 72 65 .....if (x509_re 14420 61 64 5f 72 65 74 20 3c 20 30 29 20 7b 20 0a 09 ad_ret < 0) { .. 14430 09 09 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 .......pValue = 14440 4e 55 4c 4c 3b 0a 09 09 09 09 09 09 09 7d 20 65 NULL;........} e 14450 6c 73 65 20 7b 0a 09 09 09 09 09 09 09 09 75 6c lse {.........ul 14460 56 61 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f ValueLen = x509_ 14470 72 65 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 09 read_ret;....... 14480 09 7d 0a 09 09 09 09 09 09 7d 0a 0a 09 09 09 09 .}.......}...... 14490 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 63 61 ..break;......ca 144a0 73 65 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 se CKO_CERTIFICA 144b0 54 45 3a 0a 09 09 09 09 09 09 70 56 61 6c 75 65 TE:.......pValue 144c0 20 3d 20 63 65 72 74 69 66 69 63 61 74 65 3b 0a = certificate;. 144d0 09 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e ......ulValueLen 144e0 20 3d 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c = certificate_l 144f0 65 6e 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 6b en;........break 14500 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 ;.....}......CAC 14510 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 14520 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 (" ... returning 14530 20 25 70 2f 25 6c 75 22 2c 20 70 56 61 6c 75 65 %p/%lu", pValue 14540 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 14550 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. 14560 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca 14570 73 65 20 43 4b 41 5f 49 53 53 55 45 52 3a 0a 09 se CKA_ISSUER:.. 14580 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 14590 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti 145a0 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA 145b0 5f 49 53 53 55 45 52 20 28 30 78 25 30 38 6c 78 _ISSUER (0x%08lx 145c0 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 ) ...", (unsigne 145d0 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 d long) curr_att 145e0 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 r_type);......if 145f0 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d (objectclass != 14600 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 CKO_CERTIFICATE 14610 20 26 26 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 && objectclass 14620 21 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f != CKO_NETSCAPE_ 14630 54 52 55 53 54 29 20 7b 0a 09 09 09 09 09 43 41 TRUST) {......CA 14640 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 14650 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 F(" ... but not 14660 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 getting it becau 14670 73 65 20 77 65 20 61 72 65 20 6e 6f 74 20 61 20 se we are not a 14680 63 65 72 74 69 66 69 63 61 74 65 20 6f 72 20 4e certificate or N 14690 65 74 73 63 61 70 65 20 74 72 75 73 74 20 6f 62 etscape trust ob 146a0 6a 65 63 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 ject");.......br 146b0 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 eak;.....}...... 146c0 69 66 20 28 63 65 72 74 69 66 69 63 61 74 65 5f if (certificate_ 146d0 6c 65 6e 20 3e 3d 20 30 29 20 7b 0a 09 09 09 09 len >= 0) {..... 146e0 09 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3d .x509_read_ret = 146f0 20 78 35 30 39 5f 74 6f 5f 69 73 73 75 65 72 28 x509_to_issuer( 14700 63 65 72 74 69 66 69 63 61 74 65 2c 20 63 65 72 certificate, cer 14710 74 69 66 69 63 61 74 65 5f 6c 65 6e 2c 20 26 70 tificate_len, &p 14720 56 61 6c 75 65 29 3b 0a 09 09 09 09 09 69 66 20 Value);......if 14730 28 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3c (x509_read_ret < 14740 20 30 29 20 7b 0a 09 09 09 09 09 09 70 56 61 6c 0) {.......pVal 14750 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 ue = NULL;...... 14760 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 75 } else {.......u 14770 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 lValueLen = x509 14780 5f 72 65 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 _read_ret;...... 14790 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 }.....}......CAC 147a0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 147b0 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 (" ... returning 147c0 20 25 70 2f 25 6c 75 22 2c 20 70 56 61 6c 75 65 %p/%lu", pValue 147d0 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 147e0 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. 147f0 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca 14800 73 65 20 43 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 se CKA_SERIAL_NU 14810 4d 42 45 52 3a 0a 09 09 09 09 43 41 43 4b 45 59 MBER:.....CACKEY 14820 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 14830 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 equesting attrib 14840 75 74 65 20 43 4b 41 5f 53 45 52 49 41 4c 5f 4e ute CKA_SERIAL_N 14850 55 4d 42 45 52 20 28 30 78 25 30 38 6c 78 29 20 UMBER (0x%08lx) 14860 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 ...", (unsigned 14870 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f long) curr_attr_ 14880 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 type);......if ( 14890 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43 objectclass != C 148a0 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 20 26 KO_CERTIFICATE & 148b0 26 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d & objectclass != 148c0 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 CKO_NETSCAPE_TR 148d0 55 53 54 29 20 7b 0a 09 09 09 09 09 43 41 43 4b UST) {......CACK 148e0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 148f0 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 " ... but not ge 14900 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 tting it because 14910 20 77 65 20 61 72 65 20 6e 6f 74 20 61 20 63 65 we are not a ce 14920 72 74 69 66 69 63 61 74 65 20 6f 72 20 4e 65 74 rtificate or Net 14930 73 63 61 70 65 20 74 72 75 73 74 20 6f 62 6a 65 scape trust obje 14940 63 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 ct");.......brea 14950 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 k;.....}......if 14960 20 28 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 (certificate_le 14970 6e 20 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 78 n >= 0) {......x 14980 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 509_read_ret = x 14990 35 30 39 5f 74 6f 5f 73 65 72 69 61 6c 28 63 65 509_to_serial(ce 149a0 72 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 rtificate, certi 149b0 66 69 63 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 ficate_len, &pVa 149c0 6c 75 65 29 3b 0a 09 09 09 09 09 69 66 20 28 78 lue);......if (x 149d0 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 509_read_ret < 0 149e0 29 20 7b 0a 09 09 09 09 09 09 70 56 61 6c 75 65 ) {.......pValue 149f0 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 = NULL;......} 14a00 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 else {.......ulV 14a10 61 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 alueLen = x509_r 14a20 65 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a ead_ret;......}. 14a30 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 ....}......CACKE 14a40 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 14a50 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 28 ... returning ( 14a60 25 70 2f 25 6c 75 29 22 2c 20 70 56 61 6c 75 65 %p/%lu)", pValue 14a70 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 14a80 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. 14a90 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca 14aa0 73 65 20 43 4b 41 5f 53 55 42 4a 45 43 54 3a 0a se CKA_SUBJECT:. 14ab0 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 14ac0 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 _PRINTF("Request 14ad0 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b ing attribute CK 14ae0 41 5f 53 55 42 4a 45 43 54 20 28 30 78 25 30 38 A_SUBJECT (0x%08 14af0 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig 14b00 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a 14b10 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... 14b20 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 if (objectclass 14b30 21 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 != CKO_CERTIFICA 14b40 54 45 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 TE) {......CACKE 14b50 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 14b60 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 ... but not get 14b70 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 ting it because 14b80 77 65 20 61 72 65 20 6e 6f 74 20 61 20 63 65 72 we are not a cer 14b90 74 69 66 69 63 61 74 65 22 29 3b 0a 0a 09 09 09 tificate");..... 14ba0 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a ..break;.....}.. 14bb0 09 09 09 09 69 66 20 28 63 65 72 74 69 66 69 63 ....if (certific 14bc0 61 74 65 5f 6c 65 6e 20 3e 3d 20 30 29 20 7b 0a ate_len >= 0) {. 14bd0 09 09 09 09 09 78 35 30 39 5f 72 65 61 64 5f 72 .....x509_read_r 14be0 65 74 20 3d 20 78 35 30 39 5f 74 6f 5f 73 75 62 et = x509_to_sub 14bf0 6a 65 63 74 28 63 65 72 74 69 66 69 63 61 74 65 ject(certificate 14c00 2c 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 , certificate_le 14c10 6e 2c 20 26 70 56 61 6c 75 65 29 3b 0a 09 09 09 n, &pValue);.... 14c20 09 09 69 66 20 28 78 35 30 39 5f 72 65 61 64 5f ..if (x509_read_ 14c30 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 09 09 09 ret < 0) {...... 14c40 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a .pValue = NULL;. 14c50 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 .....} else {... 14c60 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = 14c70 20 78 35 30 39 5f 72 65 61 64 5f 72 65 74 3b 0a x509_read_ret;. 14c80 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 .....}.....}.... 14c90 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 14ca0 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 RINTF(" ... retu 14cb0 72 6e 69 6e 67 20 25 70 2f 25 6c 75 22 2c 20 70 rning %p/%lu", p 14cc0 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 Value, (unsigned 14cd0 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 long) ulValueLe 14ce0 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a n);......break;. 14cf0 09 09 09 63 61 73 65 20 43 4b 41 5f 49 44 3a 0a ...case CKA_ID:. 14d00 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 14d10 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 _PRINTF("Request 14d20 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b ing attribute CK 14d30 41 5f 49 44 20 28 30 78 25 30 38 6c 78 29 20 2e A_ID (0x%08lx) . 14d40 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 14d50 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 14d60 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f ype);......if (o 14d70 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b bjectclass == CK 14d80 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 53 54 O_NETSCAPE_TRUST 14d90 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f ) {......CACKEY_ 14da0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 14db0 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 .. but not getti 14dc0 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 ng it because we 14dd0 20 61 72 65 20 61 20 4e 65 74 73 63 61 70 65 20 are a Netscape 14de0 74 72 75 73 74 20 6f 62 6a 65 63 74 22 29 3b 0a trust object");. 14df0 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 14e00 09 7d 0a 0a 09 09 09 09 75 63 54 6d 70 42 75 66 .}......ucTmpBuf 14e10 5b 30 5d 20 3d 20 28 28 69 64 65 6e 74 69 74 79 [0] = ((identity 14e20 5f 6e 75 6d 20 2b 20 31 29 20 3e 3e 20 38 29 20 _num + 1) >> 8) 14e30 26 20 30 78 66 66 3b 0a 09 09 09 09 75 63 54 6d & 0xff;.....ucTm 14e40 70 42 75 66 5b 31 5d 20 3d 20 20 28 69 64 65 6e pBuf[1] = (iden 14e50 74 69 74 79 5f 6e 75 6d 20 2b 20 31 29 20 26 20 tity_num + 1) & 14e60 30 78 66 66 3b 0a 0a 09 09 09 09 70 56 61 6c 75 0xff;......pValu 14e70 65 20 3d 20 26 75 63 54 6d 70 42 75 66 3b 0a 09 e = &ucTmpBuf;.. 14e80 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 ...ulValueLen = 14e90 32 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 2;......CACKEY_D 14ea0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e EBUG_PRINTF(" .. 14eb0 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 70 2f 25 . returning %p/% 14ec0 6c 75 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e lu", pValue, (un 14ed0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV 14ee0 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b 14ef0 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK 14f00 41 5f 43 45 52 54 49 46 49 43 41 54 45 5f 54 59 A_CERTIFICATE_TY 14f10 50 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 PE:.....CACKEY_D 14f20 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 EBUG_PRINTF("Req 14f30 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 uesting attribut 14f40 65 20 43 4b 41 5f 43 45 52 54 49 46 49 43 41 54 e CKA_CERTIFICAT 14f50 45 5f 54 59 50 45 20 28 30 78 25 30 38 6c 78 29 E_TYPE (0x%08lx) 14f60 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned 14f70 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr 14f80 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 _type);......if 14f90 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 (objectclass != 14fa0 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 29 CKO_CERTIFICATE) 14fb0 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 {......CACKEY_D 14fc0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e EBUG_PRINTF(" .. 14fd0 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e . but not gettin 14fe0 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20 g it because we 14ff0 61 72 65 20 6e 6f 74 20 61 20 63 65 72 74 69 66 are not a certif 15000 69 63 61 74 65 2e 22 29 3b 0a 0a 09 09 09 09 09 icate.");....... 15010 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 break;.....}.... 15020 09 09 2f 2a 20 57 65 20 6f 6e 6c 79 20 73 75 70 ../* We only sup 15030 70 6f 72 74 20 6f 6e 65 20 63 65 72 74 69 66 69 port one certifi 15040 63 61 74 65 20 74 79 70 65 20 2a 2f 0a 09 09 09 cate type */.... 15050 09 63 6b 5f 63 65 72 74 69 66 69 63 61 74 65 5f .ck_certificate_ 15060 74 79 70 65 20 3d 20 43 4b 43 5f 58 5f 35 30 39 type = CKC_X_509 15070 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 ;......pValue = 15080 26 63 6b 5f 63 65 72 74 69 66 69 63 61 74 65 5f &ck_certificate_ 15090 74 79 70 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 type;.....ulValu 150a0 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b eLen = sizeof(ck 150b0 5f 63 65 72 74 69 66 69 63 61 74 65 5f 74 79 70 _certificate_typ 150c0 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f e);......CACKEY_ 150d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 150e0 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 43 4b 43 .. returning CKC 150f0 5f 58 5f 35 30 39 20 28 25 6c 75 29 20 28 25 70 _X_509 (%lu) (%p 15100 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 /%lu)", (unsigne 15110 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 43 45 d long) *((CK_CE 15120 52 54 49 46 49 43 41 54 45 5f 54 59 50 45 20 2a RTIFICATE_TYPE * 15130 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 ) pValue), pValu 15140 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e e, (unsigned lon 15150 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a g) ulValueLen);. 15160 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c 15170 61 73 65 20 43 4b 41 5f 4b 45 59 5f 54 59 50 45 ase CKA_KEY_TYPE 15180 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB 15190 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque 151a0 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute 151b0 43 4b 41 5f 4b 45 59 5f 54 59 50 45 20 28 30 78 CKA_KEY_TYPE (0x 151c0 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e %08lx) ...", (un 151d0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 signed long) cur 151e0 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 r_attr_type);... 151f0 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 ...if (objectcla 15200 73 73 20 21 3d 20 43 4b 4f 5f 50 52 49 56 41 54 ss != CKO_PRIVAT 15210 45 5f 4b 45 59 20 26 26 20 6f 62 6a 65 63 74 63 E_KEY && objectc 15220 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 50 55 42 4c lass != CKO_PUBL 15230 49 43 5f 4b 45 59 29 20 7b 0a 09 09 09 09 09 43 IC_KEY) {......C 15240 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 15250 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 TF(" ... but not 15260 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 getting it beca 15270 75 73 65 20 77 65 20 61 72 65 20 6e 6f 74 20 61 use we are not a 15280 20 6b 65 79 2e 22 29 3b 0a 0a 09 09 09 09 09 62 key.");.......b 15290 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 reak;.....}..... 152a0 09 2f 2a 20 57 65 20 6f 6e 6c 79 20 73 75 70 70 ./* We only supp 152b0 6f 72 74 20 6f 6e 65 20 6b 65 79 20 74 79 70 65 ort one key type 152c0 20 2a 2f 0a 09 09 09 09 63 6b 5f 6b 65 79 5f 74 */.....ck_key_t 152d0 79 70 65 20 3d 20 43 4b 4b 5f 52 53 41 3b 0a 0a ype = CKK_RSA;.. 152e0 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b ....pValue = &ck 152f0 5f 6b 65 79 5f 74 79 70 65 3b 0a 09 09 09 09 75 _key_type;.....u 15300 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 lValueLen = size 15310 6f 66 28 63 6b 5f 6b 65 79 5f 74 79 70 65 29 3b of(ck_key_type); 15320 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 15330 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... 15340 72 65 74 75 72 6e 69 6e 67 20 43 4b 4b 5f 52 53 returning CKK_RS 15350 41 20 28 25 6c 75 29 20 28 25 70 2f 25 6c 75 29 A (%lu) (%p/%lu) 15360 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 15370 67 29 20 2a 28 28 43 4b 5f 43 45 52 54 49 46 49 g) *((CK_CERTIFI 15380 43 41 54 45 5f 54 59 50 45 20 2a 29 20 70 56 61 CATE_TYPE *) pVa 15390 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 lue), pValue, (u 153a0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c nsigned long) ul 153b0 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 ValueLen);...... 153c0 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 break;....case C 153d0 4b 41 5f 53 49 47 4e 3a 0a 09 09 09 09 43 41 43 KA_SIGN:.....CAC 153e0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 153f0 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 ("Requesting att 15400 72 69 62 75 74 65 20 43 4b 41 5f 53 49 47 4e 20 ribute CKA_SIGN 15410 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 (0x%08lx) ...", 15420 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 15430 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b curr_attr_type); 15440 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 ......if (object 15450 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 4e 45 54 class == CKO_NET 15460 53 43 41 50 45 5f 54 52 55 53 54 29 20 7b 0a 09 SCAPE_TRUST) {.. 15470 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 15480 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 _PRINTF(" ... bu 15490 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 t not getting it 154a0 20 62 65 63 61 75 73 65 20 77 65 20 61 72 65 20 because we are 154b0 61 20 4e 65 74 73 63 61 70 65 20 74 72 75 73 74 a Netscape trust 154c0 20 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 09 object");...... 154d0 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 .break;.....}... 154e0 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 ...if (objectcla 154f0 73 73 20 3d 3d 20 43 4b 4f 5f 50 52 49 56 41 54 ss == CKO_PRIVAT 15500 45 5f 4b 45 59 29 20 7b 0a 09 09 09 09 09 70 56 E_KEY) {......pV 15510 61 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b alue = &ck_true; 15520 0a 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e ......ulValueLen 15530 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 = sizeof(ck_tru 15540 65 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b e);.....} else { 15550 0a 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 ......pValue = & 15560 63 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 09 09 75 ck_false;......u 15570 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 lValueLen = size 15580 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 09 09 of(ck_false);... 15590 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f ..}......CACKEY_ 155a0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 155b0 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 .. returning %lu 155c0 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 (%p/%lu)", (uns 155d0 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 igned long) *((C 155e0 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 K_BBOOL *) pValu 155f0 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 e), pValue, (uns 15600 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 igned long) ulVa 15610 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 lueLen);......br 15620 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 eak;....case CKA 15630 5f 53 49 47 4e 5f 52 45 43 4f 56 45 52 3a 0a 09 _SIGN_RECOVER:.. 15640 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 15650 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti 15660 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA 15670 5f 53 49 47 4e 5f 52 45 43 4f 56 45 52 20 28 30 _SIGN_RECOVER (0 15680 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 x%08lx) ...", (u 15690 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 nsigned long) cu 156a0 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a rr_attr_type);.. 156b0 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c ....if (objectcl 156c0 61 73 73 20 3d 3d 20 43 4b 4f 5f 4e 45 54 53 43 ass == CKO_NETSC 156d0 41 50 45 5f 54 52 55 53 54 29 20 7b 0a 09 09 09 APE_TRUST) {.... 156e0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 156f0 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 RINTF(" ... but 15700 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 not getting it b 15710 65 63 61 75 73 65 20 77 65 20 61 72 65 20 61 20 ecause we are a 15720 4e 65 74 73 63 61 70 65 20 74 72 75 73 74 20 6f Netscape trust o 15730 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 09 09 62 bject");.......b 15740 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 reak;.....}..... 15750 09 2f 2a 20 57 65 20 63 75 72 72 65 6e 74 6c 79 ./* We currently 15760 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 22 53 only support "S 15770 69 67 6e 20 77 69 74 68 20 41 70 70 65 6e 64 69 ign with Appendi 15780 78 22 20 2a 2f 0a 09 09 09 09 70 56 61 6c 75 65 x" */.....pValue 15790 20 3d 20 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09 = &ck_false;... 157a0 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 ..ulValueLen = s 157b0 69 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b izeof(ck_false); 157c0 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 157d0 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... 157e0 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 returning %lu (% 157f0 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e p/%lu)", (unsign 15800 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 ed long) *((CK_B 15810 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c BOOL *) pValue), 15820 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e pValue, (unsign 15830 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 ed long) ulValue 15840 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b Len);......break 15850 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 44 45 ;....case CKA_DE 15860 43 52 59 50 54 3a 0a 09 09 09 09 43 41 43 4b 45 CRYPT:.....CACKE 15870 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15880 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri 15890 62 75 74 65 20 43 4b 41 5f 44 45 43 52 59 50 54 bute CKA_DECRYPT 158a0 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", 158b0 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 158c0 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) 158d0 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 ;......if (objec 158e0 74 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 4e 45 tclass == CKO_NE 158f0 54 53 43 41 50 45 5f 54 52 55 53 54 29 20 7b 0a TSCAPE_TRUST) {. 15900 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 15910 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 G_PRINTF(" ... b 15920 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 ut not getting i 15930 74 20 62 65 63 61 75 73 65 20 77 65 20 61 72 65 t because we are 15940 20 61 20 4e 65 74 73 63 61 70 65 20 74 72 75 73 a Netscape trus 15950 74 20 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 t object");..... 15960 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a ..break;.....}.. 15970 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c ....if (objectcl 15980 61 73 73 20 3d 3d 20 43 4b 4f 5f 50 52 49 56 41 ass == CKO_PRIVA 15990 54 45 5f 4b 45 59 20 7c 7c 20 6f 62 6a 65 63 74 TE_KEY || object 159a0 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 50 55 42 class == CKO_PUB 159b0 4c 49 43 5f 4b 45 59 29 20 7b 0a 09 09 09 09 09 LIC_KEY) {...... 159c0 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 pValue = &ck_tru 159d0 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75 65 4c e;......ulValueL 159e0 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 74 en = sizeof(ck_t 159f0 72 75 65 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 rue);.....} else 15a00 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 65 20 3d {......pValue = 15a10 20 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 09 &ck_false;..... 15a20 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 .ulValueLen = si 15a30 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b 0a zeof(ck_false);. 15a40 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 ....}......CACKE 15a50 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 15a60 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 ... returning % 15a70 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 lu (%p/%lu)", (u 15a80 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 nsigned long) *( 15a90 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 (CK_BBOOL *) pVa 15aa0 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 lue), pValue, (u 15ab0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c nsigned long) ul 15ac0 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 ValueLen);...... 15ad0 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 break;....case C 15ae0 4b 41 5f 53 45 4e 53 49 54 49 56 45 3a 0a 09 09 KA_SENSITIVE:... 15af0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 15b00 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e RINTF("Requestin 15b10 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f g attribute CKA_ 15b20 53 45 4e 53 49 54 49 56 45 20 28 30 78 25 30 38 SENSITIVE (0x%08 15b30 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig 15b40 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a 15b50 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... 15b60 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 if (objectclass 15b70 3d 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f == CKO_NETSCAPE_ 15b80 54 52 55 53 54 29 20 7b 0a 09 09 09 09 09 43 41 TRUST) {......CA 15b90 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 15ba0 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 F(" ... but not 15bb0 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 getting it becau 15bc0 73 65 20 77 65 20 61 72 65 20 61 20 4e 65 74 73 se we are a Nets 15bd0 63 61 70 65 20 74 72 75 73 74 20 6f 62 6a 65 63 cape trust objec 15be0 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b t");.......break 15bf0 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 ;.....}......if 15c00 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d 20 (objectclass == 15c10 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 29 CKO_PRIVATE_KEY) 15c20 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 65 20 3d {......pValue = 15c30 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 09 &ck_true;...... 15c40 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a ulValueLen = siz 15c50 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a 09 09 eof(ck_true);... 15c60 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 ..} else {...... 15c70 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 66 61 6c pValue = &ck_fal 15c80 73 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75 65 se;......ulValue 15c90 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f Len = sizeof(ck_ 15ca0 66 61 6c 73 65 29 3b 0a 09 09 09 09 7d 0a 0a 09 false);.....}... 15cb0 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 15cc0 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 PRINTF(" ... ret 15cd0 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 urning %lu (%p/% 15ce0 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 lu)", (unsigned 15cf0 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f long) *((CK_BBOO 15d00 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 L *) pValue), pV 15d10 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 alue, (unsigned 15d20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e long) ulValueLen 15d30 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 );......break;.. 15d40 09 09 63 61 73 65 20 43 4b 41 5f 45 58 54 52 41 ..case CKA_EXTRA 15d50 43 54 41 42 4c 45 3a 0a 09 09 09 09 43 41 43 4b CTABLE:.....CACK 15d60 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 15d70 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 "Requesting attr 15d80 69 62 75 74 65 20 43 4b 41 5f 45 58 54 52 41 43 ibute CKA_EXTRAC 15d90 54 41 42 4c 45 20 28 30 78 25 30 38 6c 78 29 20 TABLE (0x%08lx) 15da0 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 ...", (unsigned 15db0 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f long) curr_attr_ 15dc0 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 type);......if ( 15dd0 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d 20 43 objectclass == C 15de0 4b 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 53 KO_NETSCAPE_TRUS 15df0 54 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 T) {......CACKEY 15e00 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 15e10 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 ... but not gett 15e20 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 ing it because w 15e30 65 20 61 72 65 20 61 20 4e 65 74 73 63 61 70 65 e are a Netscape 15e40 20 74 72 75 73 74 20 6f 62 6a 65 63 74 22 29 3b trust object"); 15e50 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 .......break;... 15e60 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a ..}......if (obj 15e70 65 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f ectclass == CKO_ 15e80 50 52 49 56 41 54 45 5f 4b 45 59 29 20 7b 0a 09 PRIVATE_KEY) {.. 15e90 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b ....pValue = &ck 15ea0 5f 66 61 6c 73 65 3b 0a 09 09 09 09 09 75 6c 56 _false;......ulV 15eb0 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 alueLen = sizeof 15ec0 28 63 6b 5f 74 72 75 65 29 3b 0a 09 09 09 09 7d (ck_true);.....} 15ed0 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 70 56 61 else {......pVa 15ee0 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a lue = &ck_true;. 15ef0 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 .....ulValueLen 15f00 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 = sizeof(ck_fals 15f10 65 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 e);.....}......C 15f20 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 15f30 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 TF(" ... returni 15f40 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 ng %lu (%p/%lu)" 15f50 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 15f60 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 ) *((CK_BBOOL *) 15f70 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 pValue), pValue 15f80 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 15f90 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. 15fa0 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca 15fb0 73 65 20 43 4b 41 5f 4d 4f 44 55 4c 55 53 3a 0a se CKA_MODULUS:. 15fc0 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 15fd0 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 _PRINTF("Request 15fe0 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b ing attribute CK 15ff0 41 5f 4d 4f 44 55 4c 55 53 20 28 30 78 25 30 38 A_MODULUS (0x%08 16000 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig 16010 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a 16020 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... 16030 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 if (objectclass 16040 3d 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f == CKO_NETSCAPE_ 16050 54 52 55 53 54 29 20 7b 0a 09 09 09 09 09 43 41 TRUST) {......CA 16060 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 16070 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 F(" ... but not 16080 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 getting it becau 16090 73 65 20 77 65 20 61 72 65 20 61 20 4e 65 74 73 se we are a Nets 160a0 63 61 70 65 20 74 72 75 73 74 20 6f 62 6a 65 63 cape trust objec 160b0 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b t");.......break 160c0 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 ;.....}......if 160d0 28 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e (certificate_len 160e0 20 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 78 35 >= 0) {......x5 160f0 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 09_read_ret = x5 16100 30 39 5f 74 6f 5f 6d 6f 64 75 6c 75 73 28 63 65 09_to_modulus(ce 16110 72 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 rtificate, certi 16120 66 69 63 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 ficate_len, &pVa 16130 6c 75 65 29 3b 0a 09 09 09 09 09 69 66 20 28 78 lue);......if (x 16140 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 509_read_ret < 0 16150 29 20 7b 0a 09 09 09 09 09 09 70 56 61 6c 75 65 ) {.......pValue 16160 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 = NULL;......} 16170 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 else {.......ulV 16180 61 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 alueLen = x509_r 16190 65 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a ead_ret;......}. 161a0 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 ....}......CACKE 161b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 161c0 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 28 ... returning ( 161d0 25 70 2f 25 6c 75 29 22 2c 20 70 56 61 6c 75 65 %p/%lu)", pValue 161e0 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 161f0 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. 16200 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca 16210 73 65 20 43 4b 41 5f 50 55 42 4c 49 43 5f 45 58 se CKA_PUBLIC_EX 16220 50 4f 4e 45 4e 54 3a 0a 09 09 09 09 43 41 43 4b PONENT:.....CACK 16230 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 16240 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 "Requesting attr 16250 69 62 75 74 65 20 43 4b 41 5f 50 55 42 4c 49 43 ibute CKA_PUBLIC 16260 5f 45 58 50 4f 4e 45 4e 54 20 28 30 78 25 30 38 _EXPONENT (0x%08 16270 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig 16280 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a 16290 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... 162a0 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 if (objectclass 162b0 3d 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f == CKO_NETSCAPE_ 162c0 54 52 55 53 54 29 20 7b 0a 09 09 09 09 09 43 41 TRUST) {......CA 162d0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 162e0 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 F(" ... but not 162f0 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 getting it becau 16300 73 65 20 77 65 20 61 72 65 20 61 20 4e 65 74 73 se we are a Nets 16310 63 61 70 65 20 74 72 75 73 74 20 6f 62 6a 65 63 cape trust objec 16320 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b t");.......break 16330 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 ;.....}......if 16340 28 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e (certificate_len 16350 20 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 78 35 >= 0) {......x5 16360 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 09_read_ret = x5 16370 30 39 5f 74 6f 5f 65 78 70 6f 6e 65 6e 74 28 63 09_to_exponent(c 16380 65 72 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 ertificate, cert 16390 69 66 69 63 61 74 65 5f 6c 65 6e 2c 20 26 70 56 ificate_len, &pV 163a0 61 6c 75 65 29 3b 0a 09 09 09 09 09 69 66 20 28 alue);......if ( 163b0 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 20 x509_read_ret < 163c0 30 29 20 7b 0a 09 09 09 09 09 09 70 56 61 6c 75 0) {.......pValu 163d0 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d e = NULL;......} 163e0 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 75 6c else {.......ul 163f0 56 61 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 5f ValueLen = x509_ 16400 72 65 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 7d read_ret;......} 16410 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b .....}......CACK 16420 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 16430 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning 16440 28 25 70 2f 25 6c 75 29 22 2c 20 70 56 61 6c 75 (%p/%lu)", pValu 16450 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e e, (unsigned lon 16460 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a g) ulValueLen);. 16470 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c 16480 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 44 49 ase CKA_TRUST_DI 16490 47 49 54 41 4c 5f 53 49 47 4e 41 54 55 52 45 3a GITAL_SIGNATURE: 164a0 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 ....case CKA_TRU 164b0 53 54 5f 4e 4f 4e 5f 52 45 50 55 44 49 41 54 49 ST_NON_REPUDIATI 164c0 4f 4e 3a 0a 09 09 09 63 61 73 65 20 43 4b 41 5f ON:....case CKA_ 164d0 54 52 55 53 54 5f 4b 45 59 5f 45 4e 43 49 50 48 TRUST_KEY_ENCIPH 164e0 45 52 4d 45 4e 54 3a 0a 09 09 09 63 61 73 65 20 ERMENT:....case 164f0 43 4b 41 5f 54 52 55 53 54 5f 44 41 54 41 5f 45 CKA_TRUST_DATA_E 16500 4e 43 49 50 48 45 52 4d 45 4e 54 3a 0a 09 09 09 NCIPHERMENT:.... 16510 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 4b case CKA_TRUST_K 16520 45 59 5f 41 47 52 45 45 4d 45 4e 54 3a 0a 09 09 EY_AGREEMENT:... 16530 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f .case CKA_TRUST_ 16540 4b 45 59 5f 43 45 52 54 5f 53 49 47 4e 3a 0a 09 KEY_CERT_SIGN:.. 16550 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 ..case CKA_TRUST 16560 5f 43 52 4c 5f 53 49 47 4e 3a 0a 09 09 09 63 61 _CRL_SIGN:....ca 16570 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 53 45 52 se CKA_TRUST_SER 16580 56 45 52 5f 41 55 54 48 3a 0a 09 09 09 63 61 73 VER_AUTH:....cas 16590 65 20 43 4b 41 5f 54 52 55 53 54 5f 43 4c 49 45 e CKA_TRUST_CLIE 165a0 4e 54 5f 41 55 54 48 3a 0a 09 09 09 63 61 73 65 NT_AUTH:....case 165b0 20 43 4b 41 5f 54 52 55 53 54 5f 43 4f 44 45 5f CKA_TRUST_CODE_ 165c0 53 49 47 4e 49 4e 47 3a 0a 09 09 09 63 61 73 65 SIGNING:....case 165d0 20 43 4b 41 5f 54 52 55 53 54 5f 45 4d 41 49 4c CKA_TRUST_EMAIL 165e0 5f 50 52 4f 54 45 43 54 49 4f 4e 3a 0a 09 09 09 _PROTECTION:.... 165f0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 16600 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting 16610 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 54 attribute CKA_T 16620 52 55 53 54 5f 2e 2e 2e 20 28 30 78 25 30 38 6c RUST_... (0x%08l 16630 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e x) ...", (unsign 16640 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 ed long) curr_at 16650 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 tr_type);......p 16660 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 73 Value = &ck_trus 16670 74 65 64 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 ted;.....ulValue 16680 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f Len = sizeof(ck_ 16690 74 72 75 73 74 65 64 29 3b 0a 0a 09 09 09 09 43 trusted);......C 166a0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 166b0 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 TF(" ... returni 166c0 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 ng %lu (%p/%lu)" 166d0 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 166e0 29 20 2a 28 28 43 4b 5f 54 52 55 53 54 20 2a 29 ) *((CK_TRUST *) 166f0 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 pValue), pValue 16700 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 16710 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. 16720 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca 16730 73 65 20 43 4b 41 5f 43 45 52 54 5f 53 48 41 31 se CKA_CERT_SHA1 16740 5f 48 41 53 48 3a 0a 09 09 09 09 43 41 43 4b 45 _HASH:.....CACKE 16750 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 16760 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 Requesting attri 16770 62 75 74 65 20 43 4b 41 5f 43 45 52 54 5f 53 48 bute CKA_CERT_SH 16780 41 31 5f 48 41 53 48 20 28 30 78 25 30 38 6c 78 A1_HASH (0x%08lx 16790 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 ) ...", (unsigne 167a0 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 d long) curr_att 167b0 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 r_type);......if 167c0 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d (objectclass != 167d0 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 CKO_NETSCAPE_TR 167e0 55 53 54 29 20 7b 0a 09 09 09 09 09 43 41 43 4b UST) {......CACK 167f0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 16800 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 " ... but not ge 16810 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 tting it because 16820 20 77 65 20 61 72 65 20 6e 6f 74 20 61 20 4e 65 we are not a Ne 16830 74 73 63 61 70 65 20 74 72 75 73 74 20 6f 62 6a tscape trust obj 16840 65 63 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 ect");.......bre 16850 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 53 ak;.....}......S 16860 48 41 31 52 65 73 65 74 28 26 73 68 61 31 5f 63 HA1Reset(&sha1_c 16870 74 78 29 3b 0a 09 09 09 09 53 48 41 31 49 6e 70 tx);.....SHA1Inp 16880 75 74 28 26 73 68 61 31 5f 63 74 78 2c 20 63 65 ut(&sha1_ctx, ce 16890 72 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 69 rtificate, certi 168a0 66 69 63 61 74 65 5f 6c 65 6e 29 3b 0a 09 09 09 ficate_len);.... 168b0 09 53 48 41 31 52 65 73 75 6c 74 28 26 73 68 61 .SHA1Result(&sha 168c0 31 5f 63 74 78 2c 20 73 68 61 31 5f 68 61 73 68 1_ctx, sha1_hash 168d0 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d );......pValue = 168e0 20 73 68 61 31 5f 68 61 73 68 3b 0a 09 09 09 09 sha1_hash;..... 168f0 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a ulValueLen = siz 16900 65 6f 66 28 73 68 61 31 5f 68 61 73 68 29 3b 0a eof(sha1_hash);. 16910 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 16920 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 G_PRINTF(" ... r 16930 65 74 75 72 6e 69 6e 67 20 25 70 2f 25 6c 75 22 eturning %p/%lu" 16940 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 , pValue, (unsig 16950 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 ned long) ulValu 16960 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 eLen);......brea 16970 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 43 k;....case CKA_C 16980 45 52 54 5f 4d 44 35 5f 48 41 53 48 3a 0a 09 09 ERT_MD5_HASH:... 16990 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 169a0 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e RINTF("Requestin 169b0 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f g attribute CKA_ 169c0 43 45 52 54 5f 4d 44 35 5f 48 41 53 48 20 28 30 CERT_MD5_HASH (0 169d0 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 x%08lx) ...", (u 169e0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 nsigned long) cu 169f0 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a rr_attr_type);.. 16a00 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c ....if (objectcl 16a10 61 73 73 20 21 3d 20 43 4b 4f 5f 4e 45 54 53 43 ass != CKO_NETSC 16a20 41 50 45 5f 54 52 55 53 54 29 20 7b 0a 09 09 09 APE_TRUST) {.... 16a30 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 16a40 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 RINTF(" ... but 16a50 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 not getting it b 16a60 65 63 61 75 73 65 20 77 65 20 61 72 65 20 6e 6f ecause we are no 16a70 74 20 61 20 4e 65 74 73 63 61 70 65 20 74 72 75 t a Netscape tru 16a80 73 74 20 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 09 st object");.... 16a90 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a ...break;.....}. 16aa0 0a 09 09 09 09 4d 44 35 49 6e 69 74 28 26 6d 64 .....MD5Init(&md 16ab0 35 5f 63 74 78 29 3b 0a 09 09 09 09 4d 44 35 55 5_ctx);.....MD5U 16ac0 70 64 61 74 65 28 26 6d 64 35 5f 63 74 78 2c 20 pdate(&md5_ctx, 16ad0 63 65 72 74 69 66 69 63 61 74 65 2c 20 63 65 72 certificate, cer 16ae0 74 69 66 69 63 61 74 65 5f 6c 65 6e 29 3b 0a 09 tificate_len);.. 16af0 09 09 09 4d 44 35 46 69 6e 61 6c 28 6d 64 35 5f ...MD5Final(md5_ 16b00 68 61 73 68 2c 20 26 6d 64 35 5f 63 74 78 29 3b hash, &md5_ctx); 16b10 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 6d ......pValue = m 16b20 64 35 5f 68 61 73 68 3b 0a 09 09 09 09 75 6c 56 d5_hash;.....ulV 16b30 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 alueLen = sizeof 16b40 28 6d 64 35 5f 68 61 73 68 29 3b 0a 0a 09 09 09 (md5_hash);..... 16b50 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 16b60 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 INTF(" ... retur 16b70 6e 69 6e 67 20 25 70 2f 25 6c 75 22 2c 20 70 56 ning %p/%lu", pV 16b80 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 alue, (unsigned 16b90 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e long) ulValueLen 16ba0 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 );......break;.. 16bb0 09 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 09 70 ..default:.....p 16bc0 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 Value = NULL;... 16bd0 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 28 ..ulValueLen = ( 16be0 43 4b 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 09 09 09 CK_LONG) -1;.... 16bf0 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09 69 .break;...}....i 16c00 66 20 28 28 28 43 4b 5f 4c 4f 4e 47 29 20 75 6c f (((CK_LONG) ul 16c10 56 61 6c 75 65 4c 65 6e 29 20 21 3d 20 28 28 43 ValueLen) != ((C 16c20 4b 5f 4c 4f 4e 47 29 20 2d 31 29 29 20 7b 0a 09 K_LONG) -1)) {.. 16c30 09 09 2f 2a 20 50 75 73 68 20 63 75 72 72 5f 61 ../* Push curr_a 16c40 74 74 72 20 6f 6e 74 6f 20 74 68 65 20 73 74 61 ttr onto the sta 16c50 63 6b 20 2a 2f 0a 09 09 09 63 75 72 72 5f 61 74 ck */....curr_at 16c60 74 72 2e 74 79 70 65 20 3d 20 63 75 72 72 5f 61 tr.type = curr_a 16c70 74 74 72 5f 74 79 70 65 3b 0a 09 09 09 63 75 72 ttr_type;....cur 16c80 72 5f 61 74 74 72 2e 75 6c 56 61 6c 75 65 4c 65 r_attr.ulValueLe 16c90 6e 20 3d 20 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a n = ulValueLen;. 16ca0 0a 09 09 09 63 75 72 72 5f 61 74 74 72 2e 70 56 ....curr_attr.pV 16cb0 61 6c 75 65 20 3d 20 6d 61 6c 6c 6f 63 28 63 75 alue = malloc(cu 16cc0 72 72 5f 61 74 74 72 2e 75 6c 56 61 6c 75 65 4c rr_attr.ulValueL 16cd0 65 6e 29 3b 0a 09 09 09 6d 65 6d 63 70 79 28 63 en);....memcpy(c 16ce0 75 72 72 5f 61 74 74 72 2e 70 56 61 6c 75 65 2c urr_attr.pValue, 16cf0 20 70 56 61 6c 75 65 2c 20 63 75 72 72 5f 61 74 pValue, curr_at 16d00 74 72 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a tr.ulValueLen);. 16d10 0a 09 09 09 69 66 20 28 70 56 61 6c 75 65 5f 66 ....if (pValue_f 16d20 72 65 65 20 26 26 20 70 56 61 6c 75 65 29 20 7b ree && pValue) { 16d30 0a 09 09 09 09 66 72 65 65 28 70 56 61 6c 75 65 .....free(pValue 16d40 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 );....}.....if ( 16d50 6e 75 6d 61 74 74 72 73 20 3e 3d 20 72 65 74 76 numattrs >= retv 16d60 61 6c 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09 09 al_count) {..... 16d70 72 65 74 76 61 6c 20 3d 20 72 65 61 6c 6c 6f 63 retval = realloc 16d80 28 72 65 74 76 61 6c 2c 20 72 65 74 76 61 6c 5f (retval, retval_ 16d90 63 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 28 2a count * sizeof(* 16da0 72 65 74 76 61 6c 29 29 3b 0a 09 09 09 7d 0a 0a retval));....}.. 16db0 09 09 09 6d 65 6d 63 70 79 28 26 72 65 74 76 61 ...memcpy(&retva 16dc0 6c 5b 6e 75 6d 61 74 74 72 73 5d 2c 20 26 63 75 l[numattrs], &cu 16dd0 72 72 5f 61 74 74 72 2c 20 73 69 7a 65 6f 66 28 rr_attr, sizeof( 16de0 63 75 72 72 5f 61 74 74 72 29 29 3b 0a 09 09 09 curr_attr));.... 16df0 6e 75 6d 61 74 74 72 73 2b 2b 3b 0a 09 09 7d 0a numattrs++;...}. 16e00 09 7d 0a 0a 09 69 66 20 28 6e 75 6d 61 74 74 72 .}...if (numattr 16e10 73 20 21 3d 20 30 29 20 7b 0a 09 09 72 65 74 76 s != 0) {...retv 16e20 61 6c 5f 63 6f 75 6e 74 20 3d 20 6e 75 6d 61 74 al_count = numat 16e30 74 72 73 3b 0a 09 09 72 65 74 76 61 6c 20 3d 20 trs;...retval = 16e40 72 65 61 6c 6c 6f 63 28 72 65 74 76 61 6c 2c 20 realloc(retval, 16e50 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 2a 20 73 retval_count * s 16e60 69 7a 65 6f 66 28 2a 72 65 74 76 61 6c 29 29 3b izeof(*retval)); 16e70 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 66 72 65 ..} else {...fre 16e80 65 28 72 65 74 76 61 6c 29 3b 0a 0a 09 09 72 65 e(retval);....re 16e90 74 76 61 6c 20 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a tval = NULL;..}. 16ea0 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 6e 75 ..*pulCount = nu 16eb0 6d 61 74 74 72 73 3b 0a 0a 09 43 41 43 4b 45 59 mattrs;...CACKEY 16ec0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 16ed0 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 6f 62 6a eturning %lu obj 16ee0 65 63 74 73 20 28 25 70 29 2e 22 2c 20 6e 75 6d ects (%p).", num 16ef0 61 74 74 72 73 2c 20 28 76 6f 69 64 20 2a 29 20 attrs, (void *) 16f00 72 65 74 76 61 6c 29 3b 0a 0a 09 72 65 74 75 72 retval);...retur 16f10 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 n(retval);.}..st 16f20 61 74 69 63 20 76 6f 69 64 20 63 61 63 6b 65 79 atic void cackey 16f30 5f 66 72 65 65 5f 69 64 65 6e 74 69 74 69 65 73 _free_identities 16f40 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 69 (struct cackey_i 16f50 64 65 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 74 dentity *identit 16f60 69 65 73 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f ies, unsigned lo 16f70 6e 67 20 69 64 65 6e 74 69 74 69 65 73 5f 63 6f ng identities_co 16f80 75 6e 74 29 20 7b 0a 09 43 4b 5f 41 54 54 52 49 unt) {..CK_ATTRI 16f90 42 55 54 45 20 2a 63 75 72 72 5f 61 74 74 72 3b BUTE *curr_attr; 16fa0 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 ..unsigned long 16fb0 69 64 5f 69 64 78 2c 20 61 74 74 72 5f 69 64 78 id_idx, attr_idx 16fc0 3b 0a 0a 09 69 66 20 28 69 64 65 6e 74 69 74 69 ;...if (identiti 16fd0 65 73 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 69 64 es == NULL || id 16fe0 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 20 3d entities_count = 16ff0 3d 20 30 29 20 7b 0a 09 09 72 65 74 75 72 6e 3b = 0) {...return; 17000 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 5f 69 64 ..}...for (id_id 17010 78 20 3d 20 30 3b 20 69 64 5f 69 64 78 20 3c 20 x = 0; id_idx < 17020 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 identities_count 17030 3b 20 69 64 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 ; id_idx++) {... 17040 69 66 20 28 69 64 65 6e 74 69 74 69 65 73 5b 69 if (identities[i 17050 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 d_idx].attribute 17060 73 29 20 7b 0a 09 09 09 66 6f 72 20 28 61 74 74 s) {....for (att 17070 72 5f 69 64 78 20 3d 20 30 3b 20 61 74 74 72 5f r_idx = 0; attr_ 17080 69 64 78 20 3c 20 69 64 65 6e 74 69 74 69 65 73 idx < identities 17090 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 [id_idx].attribu 170a0 74 65 73 5f 63 6f 75 6e 74 3b 20 61 74 74 72 5f tes_count; attr_ 170b0 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 63 75 72 idx++) {.....cur 170c0 72 5f 61 74 74 72 20 3d 20 26 69 64 65 6e 74 69 r_attr = &identi 170d0 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 ties[id_idx].att 170e0 72 69 62 75 74 65 73 5b 61 74 74 72 5f 69 64 78 ributes[attr_idx 170f0 5d 3b 0a 0a 09 09 09 09 69 66 20 28 63 75 72 72 ];......if (curr 17100 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 29 20 7b _attr->pValue) { 17110 0a 09 09 09 09 09 66 72 65 65 28 63 75 72 72 5f ......free(curr_ 17120 61 74 74 72 2d 3e 70 56 61 6c 75 65 29 3b 0a 09 attr->pValue);.. 17130 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 69 66 ...}....}.....if 17140 20 28 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f (identities[id_ 17150 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 29 idx].attributes) 17160 20 7b 0a 09 09 09 09 66 72 65 65 28 69 64 65 6e {.....free(iden 17170 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 tities[id_idx].a 17180 74 74 72 69 62 75 74 65 73 29 3b 0a 09 09 09 7d ttributes);....} 17190 0a 0a 09 09 09 63 61 63 6b 65 79 5f 66 72 65 65 .....cackey_free 171a0 5f 63 65 72 74 73 28 69 64 65 6e 74 69 74 69 65 _certs(identitie 171b0 73 5b 69 64 5f 69 64 78 5d 2e 70 63 73 63 5f 69 s[id_idx].pcsc_i 171c0 64 65 6e 74 69 74 79 2c 20 31 2c 20 31 29 3b 0a dentity, 1, 1);. 171d0 09 09 7d 0a 09 7d 0a 0a 09 66 72 65 65 28 69 64 ..}..}...free(id 171e0 65 6e 74 69 74 69 65 73 29 3b 0a 7d 0a 0a 73 74 entities);.}..st 171f0 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 6c 6f atic unsigned lo 17200 6e 67 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 64 ng cackey_read_d 17210 6f 64 5f 69 64 65 6e 74 69 74 69 65 73 28 73 74 od_identities(st 17220 72 75 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e ruct cackey_iden 17230 74 69 74 79 20 2a 69 64 65 6e 74 69 74 69 65 73 tity *identities 17240 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 , unsigned long 17250 6e 75 6d 5f 64 6f 64 5f 63 65 72 74 73 29 20 7b num_dod_certs) { 17260 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 ..unsigned long 17270 63 65 72 74 5f 69 64 78 2c 20 69 64 5f 69 64 78 cert_idx, id_idx 17280 20 3d 20 30 3b 0a 0a 09 69 66 20 28 69 64 65 6e = 0;...if (iden 17290 74 69 74 69 65 73 20 3d 3d 20 4e 55 4c 4c 29 20 tities == NULL) 172a0 7b 0a 09 09 72 65 74 75 72 6e 28 6e 75 6d 5f 64 {...return(num_d 172b0 6f 64 5f 63 65 72 74 73 20 2a 20 33 29 3b 0a 09 od_certs * 3);.. 172c0 7d 0a 0a 09 66 6f 72 20 28 63 65 72 74 5f 69 64 }...for (cert_id 172d0 78 20 3d 20 30 3b 20 63 65 72 74 5f 69 64 78 20 x = 0; cert_idx 172e0 3c 20 6e 75 6d 5f 64 6f 64 5f 63 65 72 74 73 3b < num_dod_certs; 172f0 20 63 65 72 74 5f 69 64 78 2b 2b 29 20 7b 0a 09 cert_idx++) {.. 17300 09 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 .identities[id_i 17310 64 78 5d 2e 70 63 73 63 5f 69 64 65 6e 74 69 74 dx].pcsc_identit 17320 79 20 3d 20 4e 55 4c 4c 3b 0a 09 09 69 64 65 6e y = NULL;...iden 17330 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 tities[id_idx].a 17340 74 74 72 69 62 75 74 65 73 20 3d 20 63 61 63 6b ttributes = cack 17350 65 79 5f 67 65 74 5f 61 74 74 72 69 62 75 74 65 ey_get_attribute 17360 73 28 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 s(CKO_CERTIFICAT 17370 45 2c 20 26 65 78 74 72 61 5f 63 65 72 74 73 5b E, &extra_certs[ 17380 63 65 72 74 5f 69 64 78 5d 2c 20 30 78 66 30 30 cert_idx], 0xf00 17390 30 20 7c 20 63 65 72 74 5f 69 64 78 2c 20 26 69 0 | cert_idx, &i 173a0 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 dentities[id_idx 173b0 5d 2e 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75 ].attributes_cou 173c0 6e 74 29 3b 0a 09 09 69 64 5f 69 64 78 2b 2b 3b nt);...id_idx++; 173d0 0a 0a 09 09 69 64 65 6e 74 69 74 69 65 73 5b 69 ....identities[i 173e0 64 5f 69 64 78 5d 2e 70 63 73 63 5f 69 64 65 6e d_idx].pcsc_iden 173f0 74 69 74 79 20 3d 20 4e 55 4c 4c 3b 0a 09 09 69 tity = NULL;...i 17400 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 dentities[id_idx 17410 5d 2e 61 74 74 72 69 62 75 74 65 73 20 3d 20 63 ].attributes = c 17420 61 63 6b 65 79 5f 67 65 74 5f 61 74 74 72 69 62 ackey_get_attrib 17430 75 74 65 73 28 43 4b 4f 5f 50 55 42 4c 49 43 5f utes(CKO_PUBLIC_ 17440 4b 45 59 2c 20 26 65 78 74 72 61 5f 63 65 72 74 KEY, &extra_cert 17450 73 5b 63 65 72 74 5f 69 64 78 5d 2c 20 30 78 66 s[cert_idx], 0xf 17460 30 30 30 20 7c 20 63 65 72 74 5f 69 64 78 2c 20 000 | cert_idx, 17470 26 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 &identities[id_i 17480 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 5f 63 dx].attributes_c 17490 6f 75 6e 74 29 3b 0a 09 09 69 64 5f 69 64 78 2b ount);...id_idx+ 174a0 2b 3b 0a 0a 09 09 69 64 65 6e 74 69 74 69 65 73 +;....identities 174b0 5b 69 64 5f 69 64 78 5d 2e 70 63 73 63 5f 69 64 [id_idx].pcsc_id 174c0 65 6e 74 69 74 79 20 3d 20 4e 55 4c 4c 3b 0a 09 entity = NULL;.. 174d0 09 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 .identities[id_i 174e0 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 20 3d dx].attributes = 174f0 20 63 61 63 6b 65 79 5f 67 65 74 5f 61 74 74 72 cackey_get_attr 17500 69 62 75 74 65 73 28 43 4b 4f 5f 4e 45 54 53 43 ibutes(CKO_NETSC 17510 41 50 45 5f 54 52 55 53 54 2c 20 26 65 78 74 72 APE_TRUST, &extr 17520 61 5f 63 65 72 74 73 5b 63 65 72 74 5f 69 64 78 a_certs[cert_idx 17530 5d 2c 20 30 78 66 30 30 30 20 7c 20 63 65 72 74 ], 0xf000 | cert 17540 5f 69 64 78 2c 20 26 69 64 65 6e 74 69 74 69 65 _idx, &identitie 17550 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 s[id_idx].attrib 17560 75 74 65 73 5f 63 6f 75 6e 74 29 3b 0a 09 09 69 utes_count);...i 17570 64 5f 69 64 78 2b 2b 3b 0a 09 7d 0a 0a 09 72 65 d_idx++;..}...re 17580 74 75 72 6e 28 69 64 5f 69 64 78 29 3b 0a 7d 0a turn(id_idx);.}. 17590 0a 73 74 61 74 69 63 20 73 74 72 75 63 74 20 63 .static struct c 175a0 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 2a ackey_identity * 175b0 63 61 63 6b 65 79 5f 72 65 61 64 5f 69 64 65 6e cackey_read_iden 175c0 74 69 74 69 65 73 28 73 74 72 75 63 74 20 63 61 tities(struct ca 175d0 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c ckey_slot *slot, 175e0 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a unsigned long * 175f0 69 64 73 5f 66 6f 75 6e 64 29 20 7b 0a 09 73 74 ids_found) {..st 17600 72 75 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 ruct cackey_pcsc 17610 5f 69 64 65 6e 74 69 74 79 20 2a 70 63 73 63 5f _identity *pcsc_ 17620 69 64 65 6e 74 69 74 69 65 73 3b 0a 09 73 74 72 identities;..str 17630 75 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 uct cackey_ident 17640 69 74 79 20 2a 69 64 65 6e 74 69 74 69 65 73 3b ity *identities; 17650 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 ..unsigned long 17660 6e 75 6d 5f 69 64 73 2c 20 69 64 5f 69 64 78 2c num_ids, id_idx, 17670 20 63 75 72 72 5f 69 64 5f 74 79 70 65 3b 0a 09 curr_id_type;.. 17680 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6e 75 unsigned long nu 17690 6d 5f 63 65 72 74 73 2c 20 6e 75 6d 5f 64 6f 64 m_certs, num_dod 176a0 5f 63 65 72 74 73 2c 20 63 65 72 74 5f 69 64 78 _certs, cert_idx 176b0 3b 0a 09 69 6e 74 20 69 6e 63 6c 75 64 65 5f 65 ;..int include_e 176c0 78 74 72 61 5f 63 65 72 74 73 20 3d 20 30 3b 0a xtra_certs = 0;. 176d0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 176e0 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 176f0 3b 0a 0a 09 69 66 20 28 69 64 73 5f 66 6f 75 6e ;...if (ids_foun 17700 64 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 d == NULL) {...C 17710 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 17720 54 46 28 22 45 72 72 6f 72 2e 20 20 69 64 73 5f TF("Error. ids_ 17730 66 6f 75 6e 64 20 69 73 20 4e 55 4c 4c 22 29 3b found is NULL"); 17740 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 ....return(NULL) 17750 3b 0a 09 7d 0a 0a 23 69 66 64 65 66 20 43 41 43 ;..}..#ifdef CAC 17760 4b 45 59 5f 43 41 52 44 5f 53 4c 4f 54 5f 49 4e KEY_CARD_SLOT_IN 17770 43 4c 55 44 45 5f 45 58 54 52 41 5f 43 45 52 54 CLUDE_EXTRA_CERT 17780 53 0a 09 69 6e 63 6c 75 64 65 5f 65 78 74 72 61 S..include_extra 17790 5f 63 65 72 74 73 20 3d 20 31 3b 0a 23 65 6e 64 _certs = 1;.#end 177a0 69 66 0a 0a 09 69 66 20 28 67 65 74 65 6e 76 28 if...if (getenv( 177b0 22 43 41 43 4b 45 59 5f 44 4f 44 5f 43 45 52 54 "CACKEY_DOD_CERT 177c0 53 5f 4f 4e 5f 48 57 5f 53 4c 4f 54 53 22 29 20 S_ON_HW_SLOTS") 177d0 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 69 6e 63 != NULL) {...inc 177e0 6c 75 64 65 5f 65 78 74 72 61 5f 63 65 72 74 73 lude_extra_certs 177f0 20 3d 20 31 3b 0a 09 7d 0a 0a 09 69 66 20 28 67 = 1;..}...if (g 17800 65 74 65 6e 76 28 22 43 41 43 4b 45 59 5f 4e 4f etenv("CACKEY_NO 17810 5f 44 4f 44 5f 43 45 52 54 53 5f 4f 4e 5f 48 57 _DOD_CERTS_ON_HW 17820 5f 53 4c 4f 54 53 22 29 20 21 3d 20 4e 55 4c 4c _SLOTS") != NULL 17830 29 20 7b 0a 09 09 69 6e 63 6c 75 64 65 5f 65 78 ) {...include_ex 17840 74 72 61 5f 63 65 72 74 73 20 3d 20 30 3b 0a 09 tra_certs = 0;.. 17850 7d 0a 0a 09 69 66 20 28 67 65 74 65 6e 76 28 22 }...if (getenv(" 17860 43 41 43 4b 45 59 5f 4e 4f 5f 45 58 54 52 41 5f CACKEY_NO_EXTRA_ 17870 43 45 52 54 53 22 29 20 21 3d 20 4e 55 4c 4c 29 CERTS") != NULL) 17880 20 7b 0a 09 09 6e 75 6d 5f 64 6f 64 5f 63 65 72 {...num_dod_cer 17890 74 73 20 3d 20 30 3b 0a 09 7d 20 65 6c 73 65 20 ts = 0;..} else 178a0 7b 0a 09 09 6e 75 6d 5f 64 6f 64 5f 63 65 72 74 {...num_dod_cert 178b0 73 20 3d 20 73 69 7a 65 6f 66 28 65 78 74 72 61 s = sizeof(extra 178c0 5f 63 65 72 74 73 29 20 2f 20 73 69 7a 65 6f 66 _certs) / sizeof 178d0 28 65 78 74 72 61 5f 63 65 72 74 73 5b 30 5d 29 (extra_certs[0]) 178e0 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6c 6f 74 2d ;..}...if (slot- 178f0 3e 69 6e 74 65 72 6e 61 6c 29 20 7b 0a 09 09 6e >internal) {...n 17900 75 6d 5f 69 64 73 20 3d 20 63 61 63 6b 65 79 5f um_ids = cackey_ 17910 72 65 61 64 5f 64 6f 64 5f 69 64 65 6e 74 69 74 read_dod_identit 17920 69 65 73 28 4e 55 4c 4c 2c 20 6e 75 6d 5f 64 6f ies(NULL, num_do 17930 64 5f 63 65 72 74 73 29 3b 0a 0a 09 09 69 66 20 d_certs);....if 17940 28 6e 75 6d 5f 69 64 73 20 21 3d 20 30 29 20 7b (num_ids != 0) { 17950 0a 09 09 09 69 64 65 6e 74 69 74 69 65 73 20 3d ....identities = 17960 20 6d 61 6c 6c 6f 63 28 6e 75 6d 5f 69 64 73 20 malloc(num_ids 17970 2a 20 73 69 7a 65 6f 66 28 2a 69 64 65 6e 74 69 * sizeof(*identi 17980 74 69 65 73 29 29 3b 0a 0a 09 09 09 63 61 63 6b ties));.....cack 17990 65 79 5f 72 65 61 64 5f 64 6f 64 5f 69 64 65 6e ey_read_dod_iden 179a0 74 69 74 69 65 73 28 69 64 65 6e 74 69 74 69 65 tities(identitie 179b0 73 2c 20 6e 75 6d 5f 64 6f 64 5f 63 65 72 74 73 s, num_dod_certs 179c0 29 3b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 );...} else {... 179d0 09 69 64 65 6e 74 69 74 69 65 73 20 3d 20 4e 55 .identities = NU 179e0 4c 4c 3b 0a 09 09 7d 0a 0a 09 09 2a 69 64 73 5f LL;...}....*ids_ 179f0 66 6f 75 6e 64 20 3d 20 6e 75 6d 5f 69 64 73 3b found = num_ids; 17a00 0a 0a 09 09 72 65 74 75 72 6e 28 69 64 65 6e 74 ....return(ident 17a10 69 74 69 65 73 29 3b 0a 09 7d 0a 0a 09 70 63 73 ities);..}...pcs 17a20 63 5f 69 64 65 6e 74 69 74 69 65 73 20 3d 20 63 c_identities = c 17a30 61 63 6b 65 79 5f 72 65 61 64 5f 63 65 72 74 73 ackey_read_certs 17a40 28 73 6c 6f 74 2c 20 4e 55 4c 4c 2c 20 26 6e 75 (slot, NULL, &nu 17a50 6d 5f 63 65 72 74 73 29 3b 0a 09 69 66 20 28 70 m_certs);..if (p 17a60 63 73 63 5f 69 64 65 6e 74 69 74 69 65 73 20 21 csc_identities ! 17a70 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 2f 2a 20 43 = NULL) {.../* C 17a80 6f 6e 76 65 72 74 20 6e 75 6d 62 65 72 20 6f 66 onvert number of 17a90 20 43 65 72 74 73 20 74 6f 20 6e 75 6d 62 65 72 Certs to number 17aa0 20 6f 66 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 09 of objects */.. 17ab0 09 6e 75 6d 5f 69 64 73 20 3d 20 28 43 4b 4f 5f .num_ids = (CKO_ 17ac0 50 52 49 56 41 54 45 5f 4b 45 59 20 2d 20 43 4b PRIVATE_KEY - CK 17ad0 4f 5f 43 45 52 54 49 46 49 43 41 54 45 20 2b 20 O_CERTIFICATE + 17ae0 31 29 20 2a 20 6e 75 6d 5f 63 65 72 74 73 3b 0a 1) * num_certs;. 17af0 0a 09 09 69 66 20 28 69 6e 63 6c 75 64 65 5f 65 ...if (include_e 17b00 78 74 72 61 5f 63 65 72 74 73 29 20 7b 0a 09 09 xtra_certs) {... 17b10 09 6e 75 6d 5f 69 64 73 20 2b 3d 20 63 61 63 6b .num_ids += cack 17b20 65 79 5f 72 65 61 64 5f 64 6f 64 5f 69 64 65 6e ey_read_dod_iden 17b30 74 69 74 69 65 73 28 4e 55 4c 4c 2c 20 6e 75 6d tities(NULL, num 17b40 5f 64 6f 64 5f 63 65 72 74 73 29 3b 0a 09 09 7d _dod_certs);...} 17b50 0a 0a 09 09 69 64 65 6e 74 69 74 69 65 73 20 3d ....identities = 17b60 20 6d 61 6c 6c 6f 63 28 6e 75 6d 5f 69 64 73 20 malloc(num_ids 17b70 2a 20 73 69 7a 65 6f 66 28 2a 69 64 65 6e 74 69 * sizeof(*identi 17b80 74 69 65 73 29 29 3b 0a 0a 09 09 2f 2a 20 41 64 ties));..../* Ad 17b90 64 20 63 65 72 74 69 66 69 63 61 74 65 73 2c 20 d certificates, 17ba0 70 75 62 6c 69 63 20 6b 65 79 73 2c 20 61 6e 64 public keys, and 17bb0 20 70 72 69 76 61 74 65 20 6b 65 79 73 20 66 72 private keys fr 17bc0 6f 6d 20 74 68 65 20 73 6d 61 72 74 63 61 72 64 om the smartcard 17bd0 20 2a 2f 0a 09 09 69 64 5f 69 64 78 20 3d 20 30 */...id_idx = 0 17be0 3b 0a 09 09 66 6f 72 20 28 63 65 72 74 5f 69 64 ;...for (cert_id 17bf0 78 20 3d 20 30 3b 20 63 65 72 74 5f 69 64 78 20 x = 0; cert_idx 17c00 3c 20 6e 75 6d 5f 63 65 72 74 73 3b 20 63 65 72 < num_certs; cer 17c10 74 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 66 6f t_idx++) {....fo 17c20 72 20 28 63 75 72 72 5f 69 64 5f 74 79 70 65 20 r (curr_id_type 17c30 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 = CKO_CERTIFICAT 17c40 45 3b 20 63 75 72 72 5f 69 64 5f 74 79 70 65 20 E; curr_id_type 17c50 3c 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b <= CKO_PRIVATE_K 17c60 45 59 3b 20 63 75 72 72 5f 69 64 5f 74 79 70 65 EY; curr_id_type 17c70 2b 2b 29 20 7b 0a 09 09 09 09 69 64 65 6e 74 69 ++) {.....identi 17c80 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 ties[id_idx].att 17c90 72 69 62 75 74 65 73 20 3d 20 63 61 63 6b 65 79 ributes = cackey 17ca0 5f 67 65 74 5f 61 74 74 72 69 62 75 74 65 73 28 _get_attributes( 17cb0 63 75 72 72 5f 69 64 5f 74 79 70 65 2c 20 26 70 curr_id_type, &p 17cc0 63 73 63 5f 69 64 65 6e 74 69 74 69 65 73 5b 63 csc_identities[c 17cd0 65 72 74 5f 69 64 78 5d 2c 20 63 65 72 74 5f 69 ert_idx], cert_i 17ce0 64 78 2c 20 26 69 64 65 6e 74 69 74 69 65 73 5b dx, &identities[ 17cf0 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 id_idx].attribut 17d00 65 73 5f 63 6f 75 6e 74 29 3b 0a 0a 09 09 09 09 es_count);...... 17d10 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 identities[id_id 17d20 78 5d 2e 70 63 73 63 5f 69 64 65 6e 74 69 74 79 x].pcsc_identity 17d30 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 = malloc(sizeof 17d40 28 2a 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f (*identities[id_ 17d50 69 64 78 5d 2e 70 63 73 63 5f 69 64 65 6e 74 69 idx].pcsc_identi 17d60 74 79 29 29 3b 0a 09 09 09 09 6d 65 6d 63 70 79 ty));.....memcpy 17d70 28 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 (identities[id_i 17d80 64 78 5d 2e 70 63 73 63 5f 69 64 65 6e 74 69 74 dx].pcsc_identit 17d90 79 2c 20 26 70 63 73 63 5f 69 64 65 6e 74 69 74 y, &pcsc_identit 17da0 69 65 73 5b 63 65 72 74 5f 69 64 78 5d 2c 20 73 ies[cert_idx], s 17db0 69 7a 65 6f 66 28 2a 69 64 65 6e 74 69 74 69 65 izeof(*identitie 17dc0 73 5b 69 64 5f 69 64 78 5d 2e 70 63 73 63 5f 69 s[id_idx].pcsc_i 17dd0 64 65 6e 74 69 74 79 29 29 3b 0a 0a 09 09 09 09 dentity));...... 17de0 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 identities[id_id 17df0 78 5d 2e 70 63 73 63 5f 69 64 65 6e 74 69 74 79 x].pcsc_identity 17e00 2d 3e 63 65 72 74 69 66 69 63 61 74 65 20 3d 20 ->certificate = 17e10 6d 61 6c 6c 6f 63 28 70 63 73 63 5f 69 64 65 6e malloc(pcsc_iden 17e20 74 69 74 69 65 73 5b 63 65 72 74 5f 69 64 78 5d tities[cert_idx] 17e30 2e 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e .certificate_len 17e40 29 3b 0a 09 09 09 09 6d 65 6d 63 70 79 28 69 64 );.....memcpy(id 17e50 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d entities[id_idx] 17e60 2e 70 63 73 63 5f 69 64 65 6e 74 69 74 79 2d 3e .pcsc_identity-> 17e70 63 65 72 74 69 66 69 63 61 74 65 2c 20 70 63 73 certificate, pcs 17e80 63 5f 69 64 65 6e 74 69 74 69 65 73 5b 63 65 72 c_identities[cer 17e90 74 5f 69 64 78 5d 2e 63 65 72 74 69 66 69 63 61 t_idx].certifica 17ea0 74 65 2c 20 70 63 73 63 5f 69 64 65 6e 74 69 74 te, pcsc_identit 17eb0 69 65 73 5b 63 65 72 74 5f 69 64 78 5d 2e 63 65 ies[cert_idx].ce 17ec0 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 29 3b 0a rtificate_len);. 17ed0 0a 09 09 09 09 69 64 5f 69 64 78 2b 2b 3b 0a 09 .....id_idx++;.. 17ee0 09 09 7d 0a 09 09 7d 0a 0a 09 09 69 66 20 28 69 ..}...}....if (i 17ef0 6e 63 6c 75 64 65 5f 65 78 74 72 61 5f 63 65 72 nclude_extra_cer 17f00 74 73 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f ts) {....CACKEY_ 17f10 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 49 6e DEBUG_PRINTF("In 17f20 63 6c 75 64 69 6e 67 20 44 6f 44 20 43 65 72 74 cluding DoD Cert 17f30 69 66 69 63 61 74 65 73 20 6f 6e 20 68 61 72 64 ificates on hard 17f40 77 61 72 65 20 73 6c 6f 74 22 29 3b 0a 0a 09 09 ware slot");.... 17f50 09 63 61 63 6b 65 79 5f 72 65 61 64 5f 64 6f 64 .cackey_read_dod 17f60 5f 69 64 65 6e 74 69 74 69 65 73 28 69 64 65 6e _identities(iden 17f70 74 69 74 69 65 73 20 2b 20 69 64 5f 69 64 78 2c tities + id_idx, 17f80 20 6e 75 6d 5f 64 6f 64 5f 63 65 72 74 73 29 3b num_dod_certs); 17f90 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 66 ...}....cackey_f 17fa0 72 65 65 5f 63 65 72 74 73 28 70 63 73 63 5f 69 ree_certs(pcsc_i 17fb0 64 65 6e 74 69 74 69 65 73 2c 20 6e 75 6d 5f 63 dentities, num_c 17fc0 65 72 74 73 2c 20 31 29 3b 0a 0a 09 09 2a 69 64 erts, 1);....*id 17fd0 73 5f 66 6f 75 6e 64 20 3d 20 6e 75 6d 5f 69 64 s_found = num_id 17fe0 73 3b 0a 0a 09 09 72 65 74 75 72 6e 28 69 64 65 s;....return(ide 17ff0 6e 74 69 74 69 65 73 29 3b 0a 09 7d 0a 0a 0a 09 ntities);..}.... 18000 2a 69 64 73 5f 66 6f 75 6e 64 20 3d 20 30 3b 0a *ids_found = 0;. 18010 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 7d .return(NULL);.} 18020 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 18030 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 49 6e TION(CK_RV, C_In 18040 69 74 69 61 6c 69 7a 65 29 28 43 4b 5f 56 4f 49 itialize)(CK_VOI 18050 44 5f 50 54 52 20 70 49 6e 69 74 41 72 67 73 29 D_PTR pInitArgs) 18060 20 7b 0a 09 43 4b 5f 43 5f 49 4e 49 54 49 41 4c {..CK_C_INITIAL 18070 49 5a 45 5f 41 52 47 53 20 43 4b 5f 50 54 52 20 IZE_ARGS CK_PTR 18080 61 72 67 73 3b 0a 09 75 69 6e 74 33 32 5f 74 20 args;..uint32_t 18090 69 64 78 2c 20 68 69 67 68 65 73 74 5f 73 6c 6f idx, highest_slo 180a0 74 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 69 6e t;..int mutex_in 180b0 69 74 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 it_ret;...CACKEY 180c0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 180d0 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 180e0 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 180f0 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 18100 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 18110 6f 72 2e 20 20 41 6c 72 65 61 64 79 20 69 6e 69 or. Already ini 18120 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 18130 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 18140 4f 4b 49 5f 41 4c 52 45 41 44 59 5f 49 4e 49 54 OKI_ALREADY_INIT 18150 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 IALIZED);..}...i 18160 66 20 28 70 49 6e 69 74 41 72 67 73 20 21 3d 20 f (pInitArgs != 18170 4e 55 4c 4c 29 20 7b 0a 09 09 61 72 67 73 20 3d NULL) {...args = 18180 20 70 49 6e 69 74 41 72 67 73 3b 0a 09 09 6d 65 pInitArgs;...me 18190 6d 63 70 79 28 26 63 61 63 6b 65 79 5f 61 72 67 mcpy(&cackey_arg 181a0 73 2c 20 61 72 67 73 2c 20 73 69 7a 65 6f 66 28 s, args, sizeof( 181b0 63 61 63 6b 65 79 5f 61 72 67 73 29 29 3b 0a 0a cackey_args));.. 181c0 09 09 69 66 20 28 61 72 67 73 2d 3e 43 72 65 61 ..if (args->Crea 181d0 74 65 4d 75 74 65 78 20 3d 3d 20 4e 55 4c 4c 20 teMutex == NULL 181e0 7c 7c 20 61 72 67 73 2d 3e 44 65 73 74 72 6f 79 || args->Destroy 181f0 4d 75 74 65 78 20 3d 3d 20 4e 55 4c 4c 20 7c 7c Mutex == NULL || 18200 20 61 72 67 73 2d 3e 4c 6f 63 6b 4d 75 74 65 78 args->LockMutex 18210 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 == NULL || args 18220 2d 3e 55 6e 6c 6f 63 6b 4d 75 74 65 78 20 3d 3d ->UnlockMutex == 18230 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 69 66 20 28 NULL) {....if ( 18240 61 72 67 73 2d 3e 43 72 65 61 74 65 4d 75 74 65 args->CreateMute 18250 78 20 21 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 x != NULL || arg 18260 73 2d 3e 44 65 73 74 72 6f 79 4d 75 74 65 78 20 s->DestroyMutex 18270 21 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d != NULL || args- 18280 3e 4c 6f 63 6b 4d 75 74 65 78 20 21 3d 20 4e 55 >LockMutex != NU 18290 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 55 6e 6c 6f LL || args->Unlo 182a0 63 6b 4d 75 74 65 78 20 21 3d 20 4e 55 4c 4c 29 ckMutex != NULL) 182b0 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {.....CACKEY_DE 182c0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 182d0 72 2e 20 53 6f 6d 65 2c 20 62 75 74 20 6e 6f 74 r. Some, but not 182e0 20 41 6c 6c 20 74 68 72 65 61 64 69 6e 67 20 70 All threading p 182f0 72 69 6d 69 74 69 76 65 73 20 70 72 6f 76 69 64 rimitives provid 18300 65 64 2e 22 29 3b 0a 0a 09 09 09 09 72 65 74 75 ed.");......retu 18310 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 rn(CKR_ARGUMENTS 18320 5f 42 41 44 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a _BAD);....}...}. 18330 09 7d 20 65 6c 73 65 20 7b 0a 09 09 63 61 63 6b .} else {...cack 18340 65 79 5f 61 72 67 73 2e 43 72 65 61 74 65 4d 75 ey_args.CreateMu 18350 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 tex = NULL;...ca 18360 63 6b 65 79 5f 61 72 67 73 2e 44 65 73 74 72 6f ckey_args.Destro 18370 79 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 yMutex = NULL;.. 18380 09 63 61 63 6b 65 79 5f 61 72 67 73 2e 4c 6f 63 .cackey_args.Loc 18390 6b 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 kMutex = NULL;.. 183a0 09 63 61 63 6b 65 79 5f 61 72 67 73 2e 55 6e 6c .cackey_args.Unl 183b0 6f 63 6b 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b ockMutex = NULL; 183c0 0a 09 09 63 61 63 6b 65 79 5f 61 72 67 73 2e 66 ...cackey_args.f 183d0 6c 61 67 73 20 3d 20 30 3b 0a 09 7d 0a 0a 09 66 lags = 0;..}...f 183e0 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 or (idx = 0; idx 183f0 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 < (sizeof(cacke 18400 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 y_sessions) / si 18410 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 18420 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b ions[0])); idx++ 18430 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 ) {...cackey_ses 18440 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 63 74 69 76 sions[idx].activ 18450 65 20 3d 20 30 3b 0a 09 7d 0a 0a 09 66 6f 72 20 e = 0;..}...for 18460 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 (idx = 0; idx < 18470 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 (sizeof(cackey_s 18480 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 lots) / sizeof(c 18490 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 ackey_slots[0])) 184a0 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 63 61 63 ; idx++) {...cac 184b0 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 61 key_slots[idx].a 184c0 63 74 69 76 65 20 3d 20 30 3b 0a 09 09 63 61 63 ctive = 0;...cac 184d0 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 key_slots[idx].p 184e0 63 73 63 5f 72 65 61 64 65 72 20 3d 20 4e 55 4c csc_reader = NUL 184f0 4c 3b 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 L;...cackey_slot 18500 73 5b 69 64 78 5d 2e 74 72 61 6e 73 61 63 74 69 s[idx].transacti 18510 6f 6e 5f 64 65 70 74 68 20 3d 20 30 3b 0a 09 09 on_depth = 0;... 18520 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx 18530 5d 2e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 6e 65 ].transaction_ne 18540 65 64 5f 68 77 5f 6c 6f 63 6b 20 3d 20 30 3b 0a ed_hw_lock = 0;. 18550 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 ..cackey_slots[i 18560 64 78 5d 2e 73 6c 6f 74 5f 72 65 73 65 74 20 3d dx].slot_reset = 18570 20 30 3b 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 0;...cackey_slo 18580 74 73 5b 69 64 78 5d 2e 74 6f 6b 65 6e 5f 66 6c ts[idx].token_fl 18590 61 67 73 20 3d 20 30 3b 0a 09 09 63 61 63 6b 65 ags = 0;...cacke 185a0 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 6c 61 62 y_slots[idx].lab 185b0 65 6c 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 el = NULL;...cac 185c0 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 69 key_slots[idx].i 185d0 6e 74 65 72 6e 61 6c 20 3d 20 30 3b 0a 09 7d 0a nternal = 0;..}. 185e0 0a 09 69 66 20 28 67 65 74 65 6e 76 28 22 43 41 ..if (getenv("CA 185f0 43 4b 45 59 5f 4e 4f 5f 45 58 54 52 41 5f 43 45 CKEY_NO_EXTRA_CE 18600 52 54 53 22 29 20 21 3d 20 4e 55 4c 4c 29 20 7b RTS") != NULL) { 18610 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 18620 50 52 49 4e 54 46 28 22 41 73 6b 65 64 20 6e 6f PRINTF("Asked no 18630 74 20 74 6f 20 69 6e 63 6c 75 64 65 20 44 6f 44 t to include DoD 18640 20 63 65 72 74 69 66 69 63 61 74 65 73 22 29 3b certificates"); 18650 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 68 69 67 ..} else {...hig 18660 68 65 73 74 5f 73 6c 6f 74 20 3d 20 28 73 69 7a hest_slot = (siz 18670 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 eof(cackey_slots 18680 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke 18690 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 20 2d 20 31 y_slots[0])) - 1 186a0 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 186b0 47 5f 50 52 49 4e 54 46 28 22 49 6e 63 6c 75 64 G_PRINTF("Includ 186c0 69 6e 67 20 44 6f 44 20 63 65 72 74 73 20 69 6e ing DoD certs in 186d0 20 73 6c 6f 74 20 25 6c 75 22 2c 20 28 75 6e 73 slot %lu", (uns 186e0 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 69 67 68 igned long) high 186f0 65 73 74 5f 73 6c 6f 74 29 3b 0a 0a 09 09 63 61 est_slot);....ca 18700 63 6b 65 79 5f 73 6c 6f 74 73 5b 68 69 67 68 65 ckey_slots[highe 18710 73 74 5f 73 6c 6f 74 5d 2e 61 63 74 69 76 65 20 st_slot].active 18720 3d 20 31 3b 0a 09 09 63 61 63 6b 65 79 5f 73 6c = 1;...cackey_sl 18730 6f 74 73 5b 68 69 67 68 65 73 74 5f 73 6c 6f 74 ots[highest_slot 18740 5d 2e 69 6e 74 65 72 6e 61 6c 20 3d 20 31 3b 0a ].internal = 1;. 18750 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 68 ..cackey_slots[h 18760 69 67 68 65 73 74 5f 73 6c 6f 74 5d 2e 6c 61 62 ighest_slot].lab 18770 65 6c 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 el = (unsigned c 18780 68 61 72 20 2a 29 20 22 44 6f 44 20 43 65 72 74 har *) "DoD Cert 18790 69 66 69 63 61 74 65 73 22 3b 0a 09 09 63 61 63 ificates";...cac 187a0 6b 65 79 5f 73 6c 6f 74 73 5b 68 69 67 68 65 73 key_slots[highes 187b0 74 5f 73 6c 6f 74 5d 2e 70 63 73 63 5f 72 65 61 t_slot].pcsc_rea 187c0 64 65 72 20 3d 20 22 43 41 43 4b 65 79 22 3b 0a der = "CACKey";. 187d0 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 68 ..cackey_slots[h 187e0 69 67 68 65 73 74 5f 73 6c 6f 74 5d 2e 74 6f 6b ighest_slot].tok 187f0 65 6e 5f 66 6c 61 67 73 20 3d 20 30 3b 0a 09 7d en_flags = 0;..} 18800 0a 0a 09 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 ...cackey_initia 18810 6c 69 7a 65 64 20 3d 20 31 3b 0a 0a 09 69 66 20 lized = 1;...if 18820 28 21 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b (!cackey_biglock 18830 5f 69 6e 69 74 29 20 7b 0a 09 09 6d 75 74 65 78 _init) {...mutex 18840 5f 69 6e 69 74 5f 72 65 74 20 3d 20 63 61 63 6b _init_ret = cack 18850 65 79 5f 6d 75 74 65 78 5f 63 72 65 61 74 65 28 ey_mutex_create( 18860 26 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 &cackey_biglock) 18870 3b 0a 0a 09 09 69 66 20 28 6d 75 74 65 78 5f 69 ;....if (mutex_i 18880 6e 69 74 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a nit_ret != 0) {. 18890 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 188a0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 188b0 4d 75 74 65 78 20 69 6e 69 74 69 61 6c 69 7a 61 Mutex initializa 188c0 74 69 6f 6e 20 66 61 69 6c 65 64 2e 22 29 3b 0a tion failed.");. 188d0 0a 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 188e0 41 4e 54 5f 4c 4f 43 4b 29 3b 0a 09 09 7d 0a 0a ANT_LOCK);...}.. 188f0 09 09 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b ..cackey_biglock 18900 5f 69 6e 69 74 20 3d 20 31 3b 0a 09 7d 0a 0a 09 _init = 1;..}... 18910 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 18920 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 18930 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR 18940 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C 18950 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 KR_OK);.}..CK_DE 18960 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 18970 5f 52 56 2c 20 43 5f 46 69 6e 61 6c 69 7a 65 29 _RV, C_Finalize) 18980 28 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 52 65 (CK_VOID_PTR pRe 18990 73 65 72 76 65 64 29 20 7b 0a 09 75 69 6e 74 33 served) {..uint3 189a0 32 5f 74 20 69 64 78 3b 0a 0a 09 43 41 43 4b 45 2_t idx;...CACKE 189b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 189c0 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 189d0 28 70 52 65 73 65 72 76 65 64 20 21 3d 20 4e 55 (pReserved != NU 189e0 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 189f0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 18a00 6f 72 2e 20 70 52 65 73 65 72 76 65 64 20 69 73 or. pReserved is 18a10 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 not NULL.");... 18a20 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 18a30 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 18a40 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 18a50 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 18a60 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 18a70 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 18a80 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 18a90 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 18aa0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 18ab0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 66 6f 72 LIZED);..}...for 18ac0 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c (idx = 0; idx < 18ad0 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 18ae0 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 18af0 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 18b00 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 ns[0])); idx++) 18b10 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 {...if (cackey_s 18b20 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 63 74 essions[idx].act 18b30 69 76 65 29 20 7b 0a 09 09 09 43 5f 43 6c 6f 73 ive) {....C_Clos 18b40 65 53 65 73 73 69 6f 6e 28 69 64 78 29 3b 0a 09 eSession(idx);.. 18b50 09 7d 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 .}..}...cackey_s 18b60 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f lots_disconnect_ 18b70 61 6c 6c 28 29 3b 0a 0a 09 66 6f 72 20 28 69 64 all();...for (id 18b80 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 28 73 69 x = 0; idx < (si 18b90 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 18ba0 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 18bb0 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 3b 20 69 ey_slots[0])); i 18bc0 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63 61 dx++) {...if (ca 18bd0 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e ckey_slots[idx]. 18be0 69 6e 74 65 72 6e 61 6c 29 20 7b 0a 09 09 09 63 internal) {....c 18bf0 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 ontinue;...}.... 18c00 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 if (cackey_slots 18c10 5b 69 64 78 5d 2e 70 63 73 63 5f 72 65 61 64 65 [idx].pcsc_reade 18c20 72 29 20 7b 0a 09 09 09 66 72 65 65 28 63 61 63 r) {....free(cac 18c30 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 key_slots[idx].p 18c40 63 73 63 5f 72 65 61 64 65 72 29 3b 0a 09 09 7d csc_reader);...} 18c50 0a 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 ....if (cackey_s 18c60 6c 6f 74 73 5b 69 64 78 5d 2e 63 61 63 68 65 64 lots[idx].cached 18c70 5f 63 65 72 74 73 29 20 7b 0a 09 09 09 63 61 63 _certs) {....cac 18c80 6b 65 79 5f 66 72 65 65 5f 63 65 72 74 73 28 63 key_free_certs(c 18c90 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d ackey_slots[idx] 18ca0 2e 63 61 63 68 65 64 5f 63 65 72 74 73 2c 20 63 .cached_certs, c 18cb0 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d ackey_slots[idx] 18cc0 2e 63 61 63 68 65 64 5f 63 65 72 74 73 5f 63 6f .cached_certs_co 18cd0 75 6e 74 2c 20 31 29 3b 0a 0a 09 09 09 63 61 63 unt, 1);.....cac 18ce0 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 63 key_slots[idx].c 18cf0 61 63 68 65 64 5f 63 65 72 74 73 20 3d 20 4e 55 ached_certs = NU 18d00 4c 4c 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 63 61 63 LL;...}..}...cac 18d10 6b 65 79 5f 70 63 73 63 5f 64 69 73 63 6f 6e 6e key_pcsc_disconn 18d20 65 63 74 28 29 3b 0a 0a 09 63 61 63 6b 65 79 5f ect();...cackey_ 18d30 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d 20 30 3b initialized = 0; 18d40 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 18d50 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 18d60 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", 18d70 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 CKR_OK);...retur 18d80 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b n(CKR_OK);.}..CK 18d90 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 18da0 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 49 6e 66 (CK_RV, C_GetInf 18db0 6f 29 28 43 4b 5f 49 4e 46 4f 5f 50 54 52 20 70 o)(CK_INFO_PTR p 18dc0 49 6e 66 6f 29 20 7b 0a 09 73 74 61 74 69 63 20 Info) {..static 18dd0 43 4b 5f 55 54 46 38 43 48 41 52 20 6d 61 6e 75 CK_UTF8CHAR manu 18de0 66 61 63 74 75 72 65 72 49 44 5b 5d 20 3d 20 22 facturerID[] = " 18df0 55 2e 53 2e 20 47 6f 76 65 72 6e 6d 65 6e 74 22 U.S. Government" 18e00 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 54 46 ;..static CK_UTF 18e10 38 43 48 41 52 20 6c 69 62 72 61 72 79 44 65 73 8CHAR libraryDes 18e20 63 72 69 70 74 69 6f 6e 5b 5d 20 3d 20 22 43 41 cription[] = "CA 18e30 43 4b 65 79 22 3b 0a 0a 09 43 41 43 4b 45 59 5f CKey";...CACKEY_ 18e40 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 18e50 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 lled.");...if (p 18e60 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a Info == NULL) {. 18e70 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 18e80 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 49 RINTF("Error. pI 18e90 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a nfo is NULL.");. 18ea0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 18eb0 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} 18ec0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 18ed0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 18ee0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 18ef0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 18f00 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 18f10 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 18f20 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 18f30 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 70 IALIZED);..}...p 18f40 49 6e 66 6f 2d 3e 63 72 79 70 74 6f 6b 69 56 65 Info->cryptokiVe 18f50 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 28 rsion.major = (( 18f60 43 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b 49 5f CACKEY_CRYPTOKI_ 18f70 56 45 52 53 49 4f 4e 5f 43 4f 44 45 29 20 3e 3e VERSION_CODE) >> 18f80 20 31 36 29 20 26 20 30 78 66 66 3b 0a 09 70 49 16) & 0xff;..pI 18f90 6e 66 6f 2d 3e 63 72 79 70 74 6f 6b 69 56 65 72 nfo->cryptokiVer 18fa0 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 28 43 sion.minor = ((C 18fb0 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56 ACKEY_CRYPTOKI_V 18fc0 45 52 53 49 4f 4e 5f 43 4f 44 45 29 20 3e 3e 20 ERSION_CODE) >> 18fd0 38 29 20 26 20 30 78 66 66 3b 0a 0a 09 6d 65 6d 8) & 0xff;...mem 18fe0 73 65 74 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 set(pInfo->manuf 18ff0 61 63 74 75 72 65 72 49 44 2c 20 27 20 27 2c 20 acturerID, ' ', 19000 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 61 sizeof(pInfo->ma 19010 6e 75 66 61 63 74 75 72 65 72 49 44 29 29 3b 0a nufacturerID));. 19020 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6d .memcpy(pInfo->m 19030 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 6d anufacturerID, m 19040 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 73 anufacturerID, s 19050 69 7a 65 6f 66 28 6d 61 6e 75 66 61 63 74 75 72 izeof(manufactur 19060 65 72 49 44 29 20 2d 20 31 29 3b 0a 0a 09 70 49 erID) - 1);...pI 19070 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 30 78 30 nfo->flags = 0x0 19080 30 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 0;...memset(pInf 19090 6f 2d 3e 6c 69 62 72 61 72 79 44 65 73 63 72 69 o->libraryDescri 190a0 70 74 69 6f 6e 2c 20 27 20 27 2c 20 73 69 7a 65 ption, ' ', size 190b0 6f 66 28 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 of(pInfo->librar 190c0 79 44 65 73 63 72 69 70 74 69 6f 6e 29 29 3b 0a yDescription));. 190d0 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6c .memcpy(pInfo->l 190e0 69 62 72 61 72 79 44 65 73 63 72 69 70 74 69 6f ibraryDescriptio 190f0 6e 2c 20 6c 69 62 72 61 72 79 44 65 73 63 72 69 n, libraryDescri 19100 70 74 69 6f 6e 2c 20 73 69 7a 65 6f 66 28 6c 69 ption, sizeof(li 19110 62 72 61 72 79 44 65 73 63 72 69 70 74 69 6f 6e braryDescription 19120 29 20 2d 20 31 29 3b 0a 0a 09 70 49 6e 66 6f 2d ) - 1);...pInfo- 19130 3e 6c 69 62 72 61 72 79 56 65 72 73 69 6f 6e 2e >libraryVersion. 19140 6d 61 6a 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f major = (cackey_ 19150 67 65 74 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 getversion() >> 19160 31 36 29 20 26 20 30 78 66 66 3b 0a 09 70 49 6e 16) & 0xff;..pIn 19170 66 6f 2d 3e 6c 69 62 72 61 72 79 56 65 72 73 69 fo->libraryVersi 19180 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 63 61 63 6b on.minor = (cack 19190 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 20 ey_getversion() 191a0 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a 09 >> 8) & 0xff;... 191b0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 191c0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 191d0 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR 191e0 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C 191f0 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a KR_OK);.}../*. * 19200 20 50 72 6f 63 65 73 73 20 6c 69 73 74 20 6f 66 Process list of 19210 20 72 65 61 64 65 72 73 2c 20 61 6e 64 20 63 72 readers, and cr 19220 65 61 74 65 20 6d 61 70 70 69 6e 67 20 62 65 74 eate mapping bet 19230 77 65 65 6e 20 72 65 61 64 65 72 20 6e 61 6d 65 ween reader name 19240 20 61 6e 64 20 73 6c 6f 74 20 49 44 0a 20 2a 2f and slot ID. */ 19250 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 19260 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 ION(CK_RV, C_Get 19270 53 6c 6f 74 4c 69 73 74 29 28 43 4b 5f 42 42 4f SlotList)(CK_BBO 19280 4f 4c 20 74 6f 6b 65 6e 50 72 65 73 65 6e 74 2c OL tokenPresent, 19290 20 43 4b 5f 53 4c 4f 54 5f 49 44 5f 50 54 52 20 CK_SLOT_ID_PTR 192a0 70 53 6c 6f 74 4c 69 73 74 2c 20 43 4b 5f 55 4c pSlotList, CK_UL 192b0 4f 4e 47 5f 50 54 52 20 70 75 6c 43 6f 75 6e 74 ONG_PTR pulCount 192c0 29 20 7b 0a 09 73 74 61 74 69 63 20 69 6e 74 20 ) {..static int 192d0 66 69 72 73 74 5f 63 61 6c 6c 20 3d 20 31 3b 0a first_call = 1;. 192e0 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 .int mutex_retva 192f0 6c 3b 0a 09 69 6e 74 20 70 63 73 63 5f 63 6f 6e l;..int pcsc_con 19300 6e 65 63 74 5f 72 65 74 3b 0a 09 43 4b 5f 55 4c nect_ret;..CK_UL 19310 4f 4e 47 20 63 6f 75 6e 74 2c 20 73 6c 6f 74 5f ONG count, slot_ 19320 63 6f 75 6e 74 20 3d 20 30 2c 20 63 75 72 72 73 count = 0, currs 19330 6c 6f 74 2c 20 73 6c 6f 74 5f 69 64 78 3b 0a 09 lot, slot_idx;.. 19340 63 68 61 72 20 2a 70 63 73 63 5f 72 65 61 64 65 char *pcsc_reade 19350 72 73 2c 20 2a 70 63 73 63 5f 72 65 61 64 65 72 rs, *pcsc_reader 19360 73 5f 73 2c 20 2a 70 63 73 63 5f 72 65 61 64 65 s_s, *pcsc_reade 19370 72 73 5f 65 3b 0a 09 44 57 4f 52 44 20 70 63 73 rs_e;..DWORD pcs 19380 63 5f 72 65 61 64 65 72 73 5f 6c 65 6e 3b 0a 09 c_readers_len;.. 19390 4c 4f 4e 47 20 73 63 61 72 64 5f 6c 69 73 74 72 LONG scard_listr 193a0 65 61 64 65 72 73 5f 72 65 74 3b 0a 09 73 69 7a eaders_ret;..siz 193b0 65 5f 74 20 63 75 72 72 5f 72 65 61 64 65 72 5f e_t curr_reader_ 193c0 6c 65 6e 3b 0a 09 69 6e 74 20 73 6c 6f 74 5f 72 len;..int slot_r 193d0 65 73 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 eset;...CACKEY_D 193e0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 193f0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 75 led.");...if (pu 19400 6c 43 6f 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 20 lCount == NULL) 19410 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 19420 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 19430 70 75 6c 43 6f 75 6e 74 20 69 73 20 4e 55 4c 4c pulCount is NULL 19440 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 19450 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD 19460 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 19470 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 19480 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 19490 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 194a0 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 194b0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 194c0 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 194d0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 194e0 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 194f0 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 19500 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 19510 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 19520 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 19530 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 19540 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 19550 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 19560 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 19570 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 19580 09 7d 0a 0a 09 2f 2a 20 43 6c 65 61 72 20 6c 69 .}.../* Clear li 19590 73 74 20 6f 66 20 73 6c 6f 74 73 20 2a 2f 0a 09 st of slots */.. 195a0 73 6c 6f 74 5f 72 65 73 65 74 20 3d 20 30 3b 0a slot_reset = 0;. 195b0 09 69 66 20 28 70 53 6c 6f 74 4c 69 73 74 29 20 .if (pSlotList) 195c0 7b 0a 09 09 69 66 20 28 66 69 72 73 74 5f 63 61 {...if (first_ca 195d0 6c 6c 29 20 7b 0a 09 09 09 66 69 72 73 74 5f 63 ll) {....first_c 195e0 61 6c 6c 20 3d 20 30 3b 0a 0a 09 09 09 73 6c 6f all = 0;.....slo 195f0 74 5f 72 65 73 65 74 20 3d 20 31 3b 0a 09 09 7d t_reset = 1;...} 19600 0a 0a 09 09 2f 2a 20 49 66 20 61 6e 79 20 6f 66 ..../* If any of 19610 20 74 68 65 20 73 6c 6f 74 73 20 68 61 76 65 20 the slots have 19620 62 65 65 6e 20 72 65 73 65 74 20 74 68 65 6e 20 been reset then 19630 70 75 72 67 65 20 61 6c 6c 20 69 6e 66 6f 72 6d purge all inform 19640 61 74 69 6f 6e 20 61 6e 64 20 63 68 65 63 6b 20 ation and check 19650 61 67 61 69 6e 20 2a 2f 0a 09 09 66 6f 72 20 28 again */...for ( 19660 63 75 72 72 73 6c 6f 74 20 3d 20 30 3b 20 63 75 currslot = 0; cu 19670 72 72 73 6c 6f 74 20 3c 20 28 73 69 7a 65 6f 66 rrslot < (sizeof 19680 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f (cackey_slots) / 19690 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s 196a0 6c 6f 74 73 5b 30 5d 29 29 3b 20 63 75 72 72 73 lots[0])); currs 196b0 6c 6f 74 2b 2b 29 20 7b 0a 09 09 09 69 66 20 28 lot++) {....if ( 196c0 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 cackey_slots[cur 196d0 72 73 6c 6f 74 5d 2e 69 6e 74 65 72 6e 61 6c 29 rslot].internal) 196e0 20 7b 0a 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b {.....continue; 196f0 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 21 63 ....}.....if (!c 19700 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 ackey_slots[curr 19710 73 6c 6f 74 5d 2e 61 63 74 69 76 65 29 20 7b 0a slot].active) {. 19720 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 ....continue;... 19730 09 7d 0a 0a 09 09 09 69 66 20 28 63 61 63 6b 65 .}.....if (cacke 19740 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 y_slots[currslot 19750 5d 2e 73 6c 6f 74 5f 72 65 73 65 74 29 20 7b 0a ].slot_reset) {. 19760 09 09 09 09 73 6c 6f 74 5f 72 65 73 65 74 20 3d ....slot_reset = 19770 20 31 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 1;......break;. 19780 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 69 66 20 28 ...}...}....if ( 19790 73 6c 6f 74 5f 72 65 73 65 74 29 20 7b 0a 09 09 slot_reset) {... 197a0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 197b0 49 4e 54 46 28 22 50 75 72 67 69 6e 67 20 61 6c INTF("Purging al 197c0 6c 20 73 6c 6f 74 20 69 6e 66 6f 72 6d 61 74 69 l slot informati 197d0 6f 6e 2e 22 29 3b 0a 0a 09 09 09 2f 2a 20 4f 6e on.");...../* On 197e0 6c 79 20 75 70 64 61 74 65 20 74 68 65 20 6c 69 ly update the li 197f0 73 74 20 6f 66 20 73 6c 6f 74 73 20 69 66 20 77 st of slots if w 19800 65 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 62 e are actually b 19810 65 69 6e 67 20 73 75 70 70 6c 79 20 74 68 65 20 eing supply the 19820 73 6c 6f 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e slot information 19830 20 2a 2f 0a 09 09 09 63 61 63 6b 65 79 5f 73 6c */....cackey_sl 19840 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f 61 ots_disconnect_a 19850 6c 6c 28 29 3b 0a 0a 09 09 09 66 6f 72 20 28 63 ll();.....for (c 19860 75 72 72 73 6c 6f 74 20 3d 20 30 3b 20 63 75 72 urrslot = 0; cur 19870 72 73 6c 6f 74 20 3c 20 28 73 69 7a 65 6f 66 28 rslot < (sizeof( 19880 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 cackey_slots) / 19890 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c sizeof(cackey_sl 198a0 6f 74 73 5b 30 5d 29 29 3b 20 63 75 72 72 73 6c ots[0])); currsl 198b0 6f 74 2b 2b 29 20 7b 0a 09 09 09 09 69 66 20 28 ot++) {.....if ( 198c0 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 cackey_slots[cur 198d0 72 73 6c 6f 74 5d 2e 69 6e 74 65 72 6e 61 6c 29 rslot].internal) 198e0 20 7b 0a 09 09 09 09 09 63 6f 6e 74 69 6e 75 65 {......continue 198f0 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 ;.....}......if 19900 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 (cackey_slots[cu 19910 72 72 73 6c 6f 74 5d 2e 70 63 73 63 5f 72 65 61 rrslot].pcsc_rea 19920 64 65 72 29 20 7b 0a 09 09 09 09 09 66 72 65 65 der) {......free 19930 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 (cackey_slots[cu 19940 72 72 73 6c 6f 74 5d 2e 70 63 73 63 5f 72 65 61 rrslot].pcsc_rea 19950 64 65 72 29 3b 0a 0a 09 09 09 09 09 63 61 63 6b der);.......cack 19960 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f ey_slots[currslo 19970 74 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 20 3d t].pcsc_reader = 19980 20 4e 55 4c 4c 3b 0a 09 09 09 09 7d 0a 0a 09 09 NULL;.....}.... 19990 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f ..if (cackey_slo 199a0 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 6c 61 62 ts[currslot].lab 199b0 65 6c 29 20 7b 0a 09 09 09 09 09 66 72 65 65 28 el) {......free( 199c0 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 cackey_slots[cur 199d0 72 73 6c 6f 74 5d 2e 6c 61 62 65 6c 29 3b 0a 0a rslot].label);.. 199e0 09 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 .....cackey_slot 199f0 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 6c 61 62 65 s[currslot].labe 19a00 6c 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 7d 0a l = NULL;.....}. 19a10 0a 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 .....cackey_slot 19a20 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 61 63 74 69 s[currslot].acti 19a30 76 65 20 3d 20 30 3b 0a 09 09 09 7d 0a 09 09 7d ve = 0;....}...} 19a40 20 65 6c 73 65 20 7b 0a 09 09 09 0a 09 09 7d 0a else {.......}. 19a50 09 7d 0a 0a 09 2f 2a 20 44 65 74 65 72 6d 69 6e .}.../* Determin 19a60 65 20 6c 69 73 74 20 6f 66 20 72 65 61 64 65 72 e list of reader 19a70 73 20 2a 2f 0a 09 70 63 73 63 5f 63 6f 6e 6e 65 s */..pcsc_conne 19a80 63 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f ct_ret = cackey_ 19a90 70 63 73 63 5f 63 6f 6e 6e 65 63 74 28 29 3b 0a pcsc_connect();. 19aa0 09 69 66 20 28 70 63 73 63 5f 63 6f 6e 6e 65 63 .if (pcsc_connec 19ab0 74 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f t_ret != CACKEY_ 19ac0 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 PCSC_S_OK) {...C 19ad0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 19ae0 54 46 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 TF("Connection t 19af0 6f 20 50 43 2f 53 43 20 66 61 69 6c 65 64 2c 20 o PC/SC failed, 19b00 61 73 73 75 6d 69 6e 67 20 6e 6f 20 73 6c 6f 74 assuming no slot 19b10 73 22 29 3b 0a 0a 09 09 73 6c 6f 74 5f 63 6f 75 s");....slot_cou 19b20 6e 74 20 3d 20 30 3b 0a 09 7d 20 65 6c 73 65 20 nt = 0;..} else 19b30 7b 0a 09 09 70 63 73 63 5f 72 65 61 64 65 72 73 {...pcsc_readers 19b40 5f 6c 65 6e 20 3d 20 30 3b 0a 0a 09 09 73 63 61 _len = 0;....sca 19b50 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 rd_listreaders_r 19b60 65 74 20 3d 20 53 43 61 72 64 4c 69 73 74 52 65 et = SCardListRe 19b70 61 64 65 72 73 28 2a 63 61 63 6b 65 79 5f 70 63 aders(*cackey_pc 19b80 73 63 5f 68 61 6e 64 6c 65 2c 20 4e 55 4c 4c 2c sc_handle, NULL, 19b90 20 4e 55 4c 4c 2c 20 26 70 63 73 63 5f 72 65 61 NULL, &pcsc_rea 19ba0 64 65 72 73 5f 6c 65 6e 29 3b 0a 0a 09 09 69 66 ders_len);....if 19bb0 20 28 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 (scard_listread 19bc0 65 72 73 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 ers_ret == SCARD 19bd0 5f 46 5f 43 4f 4d 4d 5f 45 52 52 4f 52 29 20 7b _F_COMM_ERROR) { 19be0 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 19bf0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 19c00 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 73 SCardListReaders 19c10 28 29 20 72 65 74 75 72 6e 65 64 20 53 43 41 52 () returned SCAR 19c20 44 5f 46 5f 43 4f 4d 4d 5f 45 52 52 4f 52 2c 20 D_F_COMM_ERROR, 19c30 61 73 73 75 6d 69 6e 67 20 43 6f 6e 6e 65 63 74 assuming Connect 19c40 69 6f 6e 20 74 6f 20 50 43 2f 53 43 20 77 65 6e ion to PC/SC wen 19c50 74 20 61 77 61 79 2e 20 52 65 63 6f 6e 6e 65 63 t away. Reconnec 19c60 74 69 6e 67 2e 22 29 3b 0a 0a 09 09 09 63 61 63 ting.");.....cac 19c70 6b 65 79 5f 70 63 73 63 5f 64 69 73 63 6f 6e 6e key_pcsc_disconn 19c80 65 63 74 28 29 3b 0a 09 09 09 63 61 63 6b 65 79 ect();....cackey 19c90 5f 70 63 73 63 5f 63 6f 6e 6e 65 63 74 28 29 3b _pcsc_connect(); 19ca0 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 19cb0 47 5f 50 52 49 4e 54 46 28 22 54 72 79 69 6e 67 G_PRINTF("Trying 19cc0 20 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 SCardListReader 19cd0 73 28 29 20 61 67 61 69 6e 22 29 3b 0a 09 09 09 s() again");.... 19ce0 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 scard_listreader 19cf0 73 5f 72 65 74 20 3d 20 53 43 61 72 64 4c 69 73 s_ret = SCardLis 19d00 74 52 65 61 64 65 72 73 28 2a 63 61 63 6b 65 79 tReaders(*cackey 19d10 5f 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 4e 55 _pcsc_handle, NU 19d20 4c 4c 2c 20 4e 55 4c 4c 2c 20 26 70 63 73 63 5f LL, NULL, &pcsc_ 19d30 72 65 61 64 65 72 73 5f 6c 65 6e 29 3b 0a 09 09 readers_len);... 19d40 7d 0a 0a 09 09 69 66 20 28 73 63 61 72 64 5f 6c }....if (scard_l 19d50 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 20 3d istreaders_ret = 19d60 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 = SCARD_S_SUCCES 19d70 53 20 26 26 20 70 63 73 63 5f 72 65 61 64 65 72 S && pcsc_reader 19d80 73 5f 6c 65 6e 20 21 3d 20 30 29 20 7b 0a 09 09 s_len != 0) {... 19d90 09 70 63 73 63 5f 72 65 61 64 65 72 73 20 3d 20 .pcsc_readers = 19da0 6d 61 6c 6c 6f 63 28 70 63 73 63 5f 72 65 61 64 malloc(pcsc_read 19db0 65 72 73 5f 6c 65 6e 29 3b 0a 09 09 09 70 63 73 ers_len);....pcs 19dc0 63 5f 72 65 61 64 65 72 73 5f 73 20 3d 20 70 63 c_readers_s = pc 19dd0 73 63 5f 72 65 61 64 65 72 73 3b 0a 0a 09 09 09 sc_readers;..... 19de0 73 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 scard_listreader 19df0 73 5f 72 65 74 20 3d 20 53 43 61 72 64 4c 69 73 s_ret = SCardLis 19e00 74 52 65 61 64 65 72 73 28 2a 63 61 63 6b 65 79 tReaders(*cackey 19e10 5f 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 4e 55 _pcsc_handle, NU 19e20 4c 4c 2c 20 70 63 73 63 5f 72 65 61 64 65 72 73 LL, pcsc_readers 19e30 2c 20 26 70 63 73 63 5f 72 65 61 64 65 72 73 5f , &pcsc_readers_ 19e40 6c 65 6e 29 3b 0a 09 09 09 69 66 20 28 73 63 61 len);....if (sca 19e50 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 rd_listreaders_r 19e60 65 74 20 3d 3d 20 53 43 41 52 44 5f 53 5f 53 55 et == SCARD_S_SU 19e70 43 43 45 53 53 29 20 7b 0a 09 09 09 09 70 63 73 CCESS) {.....pcs 19e80 63 5f 72 65 61 64 65 72 73 5f 65 20 3d 20 70 63 c_readers_e = pc 19e90 73 63 5f 72 65 61 64 65 72 73 20 2b 20 70 63 73 sc_readers + pcs 19ea0 63 5f 72 65 61 64 65 72 73 5f 6c 65 6e 3b 0a 0a c_readers_len;.. 19eb0 09 09 09 09 2f 2a 20 53 74 61 72 74 20 77 69 74 ..../* Start wit 19ec0 68 20 53 6c 6f 74 20 49 44 20 31 2c 20 74 6f 20 h Slot ID 1, to 19ed0 61 76 6f 69 64 20 61 20 62 75 67 20 69 6e 20 47 avoid a bug in G 19ee0 44 4d 20 6f 6e 20 52 48 45 4c 20 2a 2f 0a 09 09 DM on RHEL */... 19ef0 09 09 2f 2a 20 42 75 67 20 35 39 34 39 31 31 3a ../* Bug 594911: 19f00 20 68 74 74 70 73 3a 2f 2f 62 75 67 7a 69 6c 6c https://bugzill 19f10 61 2e 72 65 64 68 61 74 2e 63 6f 6d 2f 73 68 6f a.redhat.com/sho 19f20 77 5f 62 75 67 2e 63 67 69 3f 69 64 3d 35 39 34 w_bug.cgi?id=594 19f30 39 31 31 20 2a 2f 0a 09 09 09 09 63 75 72 72 73 911 */.....currs 19f40 6c 6f 74 20 3d 20 31 3b 0a 09 09 09 09 73 6c 6f lot = 1;.....slo 19f50 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 09 09 t_count = 0;.... 19f60 09 77 68 69 6c 65 20 28 70 63 73 63 5f 72 65 61 .while (pcsc_rea 19f70 64 65 72 73 20 3c 20 70 63 73 63 5f 72 65 61 64 ders < pcsc_read 19f80 65 72 73 5f 65 29 20 7b 0a 09 09 09 09 09 2f 2a ers_e) {....../* 19f90 20 46 69 6e 64 20 6e 65 78 74 20 61 76 61 69 6c Find next avail 19fa0 61 62 6c 65 20 73 6c 6f 74 20 2a 2f 0a 09 09 09 able slot */.... 19fb0 09 09 66 6f 72 20 28 3b 20 63 75 72 72 73 6c 6f ..for (; currslo 19fc0 74 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b t < (sizeof(cack 19fd0 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 ey_slots) / size 19fe0 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b of(cackey_slots[ 19ff0 30 5d 29 29 3b 20 63 75 72 72 73 6c 6f 74 2b 2b 0])); currslot++ 1a000 29 20 7b 0a 09 09 09 09 09 09 69 66 20 28 21 63 ) {.......if (!c 1a010 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 ackey_slots[curr 1a020 73 6c 6f 74 5d 2e 61 63 74 69 76 65 29 20 7b 0a slot].active) {. 1a030 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 .......break;... 1a040 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a 0a 09 09 ....}......}.... 1a050 09 09 09 63 75 72 72 5f 72 65 61 64 65 72 5f 6c ...curr_reader_l 1a060 65 6e 20 3d 20 73 74 72 6c 65 6e 28 70 63 73 63 en = strlen(pcsc 1a070 5f 72 65 61 64 65 72 73 29 3b 0a 0a 09 09 09 09 _readers);...... 1a080 09 69 66 20 28 28 70 63 73 63 5f 72 65 61 64 65 .if ((pcsc_reade 1a090 72 73 20 2b 20 63 75 72 72 5f 72 65 61 64 65 72 rs + curr_reader 1a0a0 5f 6c 65 6e 29 20 3e 20 70 63 73 63 5f 72 65 61 _len) > pcsc_rea 1a0b0 64 65 72 73 5f 65 29 20 7b 0a 09 09 09 09 09 09 ders_e) {....... 1a0c0 62 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 break;......}... 1a0d0 09 09 09 09 69 66 20 28 63 75 72 72 5f 72 65 61 ....if (curr_rea 1a0e0 64 65 72 5f 6c 65 6e 20 3d 3d 20 30 29 20 7b 0a der_len == 0) {. 1a0f0 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 1a100 09 09 7d 0a 0a 09 09 09 09 09 69 66 20 28 63 75 ..}.......if (cu 1a110 72 72 73 6c 6f 74 20 3e 3d 20 28 73 69 7a 65 6f rrslot >= (sizeo 1a120 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 f(cackey_slots) 1a130 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ 1a140 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 slots[0]))) {... 1a150 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 1a160 5f 50 52 49 4e 54 46 28 22 46 6f 75 6e 64 20 6d _PRINTF("Found m 1a170 6f 72 65 20 72 65 61 64 65 72 73 20 74 68 61 6e ore readers than 1a180 20 73 6c 6f 74 73 20 61 72 65 20 61 76 61 69 6c slots are avail 1a190 61 62 6c 65 21 22 29 3b 0a 0a 09 09 09 09 09 09 able!");........ 1a1a0 62 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 break;......}... 1a1b0 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 1a1c0 5f 50 52 49 4e 54 46 28 22 46 6f 75 6e 64 20 72 _PRINTF("Found r 1a1d0 65 61 64 65 72 3a 20 25 73 22 2c 20 70 63 73 63 eader: %s", pcsc 1a1e0 5f 72 65 61 64 65 72 73 29 3b 0a 0a 09 09 09 09 _readers);...... 1a1f0 09 2f 2a 20 4f 6e 6c 79 20 75 70 64 61 74 65 20 ./* Only update 1a200 74 68 65 20 6c 69 73 74 20 6f 66 20 73 6c 6f 74 the list of slot 1a210 73 20 69 66 20 77 65 20 61 72 65 20 61 63 74 75 s if we are actu 1a220 61 6c 6c 79 20 62 65 69 6e 67 20 61 73 6b 65 64 ally being asked 1a230 20 73 75 70 70 6c 79 20 74 68 65 20 73 6c 6f 74 supply the slot 1a240 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a information */. 1a250 09 09 09 09 09 69 66 20 28 70 53 6c 6f 74 4c 69 .....if (pSlotLi 1a260 73 74 29 20 7b 0a 09 09 09 09 09 09 69 66 20 28 st) {.......if ( 1a270 73 6c 6f 74 5f 72 65 73 65 74 29 20 7b 0a 09 09 slot_reset) {... 1a280 09 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 .....cackey_slot 1a290 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 61 63 74 69 s[currslot].acti 1a2a0 76 65 20 3d 20 31 3b 0a 09 09 09 09 09 09 09 63 ve = 1;........c 1a2b0 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 ackey_slots[curr 1a2c0 73 6c 6f 74 5d 2e 69 6e 74 65 72 6e 61 6c 20 3d slot].internal = 1a2d0 20 30 3b 0a 09 09 09 09 09 09 09 63 61 63 6b 65 0;........cacke 1a2e0 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 y_slots[currslot 1a2f0 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 20 3d 20 ].pcsc_reader = 1a300 73 74 72 64 75 70 28 70 63 73 63 5f 72 65 61 64 strdup(pcsc_read 1a310 65 72 73 29 3b 0a 09 09 09 09 09 09 09 63 61 63 ers);........cac 1a320 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c key_slots[currsl 1a330 6f 74 5d 2e 70 63 73 63 5f 63 61 72 64 5f 63 6f ot].pcsc_card_co 1a340 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a 09 09 09 nnected = 0;.... 1a350 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 ....cackey_slots 1a360 5b 63 75 72 72 73 6c 6f 74 5d 2e 74 72 61 6e 73 [currslot].trans 1a370 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3d 20 30 action_depth = 0 1a380 3b 0a 09 09 09 09 09 09 09 63 61 63 6b 65 79 5f ;........cackey_ 1a390 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e slots[currslot]. 1a3a0 74 72 61 6e 73 61 63 74 69 6f 6e 5f 6e 65 65 64 transaction_need 1a3b0 5f 68 77 5f 6c 6f 63 6b 20 3d 20 30 3b 0a 09 09 _hw_lock = 0;... 1a3c0 09 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 .....cackey_slot 1a3d0 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 74 6f 6b 65 s[currslot].toke 1a3e0 6e 5f 66 6c 61 67 73 20 3d 20 43 4b 46 5f 4c 4f n_flags = CKF_LO 1a3f0 47 49 4e 5f 52 45 51 55 49 52 45 44 3b 0a 09 09 GIN_REQUIRED;... 1a400 09 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 .....cackey_slot 1a410 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 6c 61 62 65 s[currslot].labe 1a420 6c 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 09 09 l = NULL;....... 1a430 09 09 63 61 63 6b 65 79 5f 6d 61 72 6b 5f 73 6c ..cackey_mark_sl 1a440 6f 74 5f 72 65 73 65 74 28 26 63 61 63 6b 65 79 ot_reset(&cackey 1a450 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d _slots[currslot] 1a460 29 3b 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 );.......}...... 1a470 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 2f } else {......./ 1a480 2a 20 41 72 74 69 66 69 63 69 61 6c 6c 79 20 69 * Artificially i 1a490 6e 63 72 65 61 73 65 20 74 68 65 20 6e 75 6d 62 ncrease the numb 1a4a0 65 72 20 6f 66 20 61 63 74 69 76 65 20 73 6c 6f er of active slo 1a4b0 74 73 20 62 79 20 77 68 61 74 20 77 69 6c 6c 20 ts by what will 1a4c0 62 65 63 6f 6d 65 20 61 63 74 69 76 65 20 2a 2f become active */ 1a4d0 0a 09 09 09 09 09 09 73 6c 6f 74 5f 63 6f 75 6e .......slot_coun 1a4e0 74 2b 2b 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 t++;......}..... 1a4f0 09 63 75 72 72 73 6c 6f 74 2b 2b 3b 0a 0a 09 09 .currslot++;.... 1a500 09 09 09 70 63 73 63 5f 72 65 61 64 65 72 73 20 ...pcsc_readers 1a510 2b 3d 20 63 75 72 72 5f 72 65 61 64 65 72 5f 6c += curr_reader_l 1a520 65 6e 20 2b 20 31 3b 0a 09 09 09 09 7d 0a 0a 09 en + 1;.....}... 1a530 09 09 09 66 6f 72 20 28 63 75 72 72 73 6c 6f 74 ...for (currslot 1a540 20 3d 20 30 3b 20 63 75 72 72 73 6c 6f 74 20 3c = 0; currslot < 1a550 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 1a560 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 slots) / sizeof( 1a570 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 cackey_slots[0]) 1a580 29 3b 20 63 75 72 72 73 6c 6f 74 2b 2b 29 20 7b ); currslot++) { 1a590 0a 09 09 09 09 09 69 66 20 28 63 61 63 6b 65 79 ......if (cackey 1a5a0 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d _slots[currslot] 1a5b0 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 09 09 09 .active) {...... 1a5c0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1a5d0 49 4e 54 46 28 22 46 6f 75 6e 64 20 61 63 74 69 INTF("Found acti 1a5e0 76 65 20 73 6c 6f 74 20 25 6c 75 22 2c 20 28 75 ve slot %lu", (u 1a5f0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 nsigned long) cu 1a600 72 72 73 6c 6f 74 29 3b 0a 0a 09 09 09 09 09 09 rrslot);........ 1a610 73 6c 6f 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 09 09 slot_count++;... 1a620 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 20 ...}.....}....} 1a630 65 6c 73 65 20 7b 0a 09 09 09 09 43 41 43 4b 45 else {.....CACKE 1a640 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1a650 53 65 63 6f 6e 64 20 63 61 6c 6c 20 74 6f 20 53 Second call to S 1a660 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 73 20 CardListReaders 1a670 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 20 25 failed, return % 1a680 73 2f 25 6c 69 22 2c 20 43 41 43 4b 45 59 5f 44 s/%li", CACKEY_D 1a690 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 EBUG_FUNC_SCARDE 1a6a0 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f RR_TO_STR(scard_ 1a6b0 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 29 listreaders_ret) 1a6c0 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f 6c , (long) scard_l 1a6d0 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 29 3b istreaders_ret); 1a6e0 0a 09 09 09 7d 0a 0a 09 09 09 66 72 65 65 28 70 ....}.....free(p 1a6f0 63 73 63 5f 72 65 61 64 65 72 73 5f 73 29 3b 0a csc_readers_s);. 1a700 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 43 41 ..} else {....CA 1a710 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1a720 46 28 22 46 69 72 73 74 20 63 61 6c 6c 20 74 6f F("First call to 1a730 20 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 SCardListReader 1a740 73 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e s failed, return 1a750 20 25 73 2f 25 6c 69 22 2c 20 43 41 43 4b 45 59 %s/%li", CACKEY 1a760 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 _DEBUG_FUNC_SCAR 1a770 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 DERR_TO_STR(scar 1a780 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 d_listreaders_re 1a790 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 t), (long) scard 1a7a0 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 _listreaders_ret 1a7b0 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 6d 75 74 65 );...}..}...mute 1a7c0 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 1a7d0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 1a7e0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 1a7f0 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 1a800 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 1a810 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1a820 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 "Error. Unlocki 1a830 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 1a840 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 1a850 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 1a860 09 69 66 20 28 70 53 6c 6f 74 4c 69 73 74 20 3d .if (pSlotList = 1a870 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 2a 70 75 6c = NULL) {...*pul 1a880 43 6f 75 6e 74 20 3d 20 73 6c 6f 74 5f 63 6f 75 Count = slot_cou 1a890 6e 74 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 nt;....CACKEY_DE 1a8a0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 1a8b0 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 1a8c0 29 2e 20 20 46 6f 75 6e 64 20 25 6c 75 20 72 65 ). Found %lu re 1a8d0 61 64 65 72 73 2c 20 62 75 74 20 6e 6f 74 20 73 aders, but not s 1a8e0 74 6f 72 69 6e 67 20 49 44 73 20 28 70 53 6c 6f toring IDs (pSlo 1a8f0 74 4c 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 22 2c tList == NULL)", 1a900 20 43 4b 52 5f 4f 4b 2c 20 28 75 6e 73 69 67 6e CKR_OK, (unsign 1a910 65 64 20 6c 6f 6e 67 29 20 73 6c 6f 74 5f 63 6f ed long) slot_co 1a920 75 6e 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 unt);....return( 1a930 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 63 6f CKR_OK);..}...co 1a940 75 6e 74 20 3d 20 2a 70 75 6c 43 6f 75 6e 74 3b unt = *pulCount; 1a950 0a 09 69 66 20 28 63 6f 75 6e 74 20 3c 20 73 6c ..if (count < sl 1a960 6f 74 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 43 41 ot_count) {...CA 1a970 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1a980 46 28 22 45 72 72 6f 72 2e 20 55 73 65 72 20 61 F("Error. User a 1a990 6c 6c 6f 63 61 74 65 64 20 25 6c 75 20 65 6e 74 llocated %lu ent 1a9a0 72 69 65 73 2c 20 62 75 74 20 77 65 20 68 61 76 ries, but we hav 1a9b0 65 20 25 6c 75 20 65 6e 74 72 69 65 73 2e 22 2c e %lu entries.", 1a9c0 20 63 6f 75 6e 74 2c 20 73 6c 6f 74 5f 63 6f 75 count, slot_cou 1a9d0 6e 74 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 nt);....CACKEY_D 1a9e0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 1a9f0 75 72 6e 69 6e 67 20 43 4b 52 5f 42 55 46 46 45 urning CKR_BUFFE 1aa00 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 22 29 3b 0a 0a R_TOO_SMALL");.. 1aa10 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 42 55 46 ..return(CKR_BUF 1aa20 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 3b 09 FER_TOO_SMALL);. 1aa30 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 1aa40 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 1aa50 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 x_lock(cackey_bi 1aa60 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 glock);..if (mut 1aa70 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 1aa80 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1aa90 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1aaa0 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e Locking failed. 1aab0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1aac0 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 1aad0 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 5f 69 64 78 20 ;..}...slot_idx 1aae0 3d 20 30 3b 0a 09 66 6f 72 20 28 63 75 72 72 73 = 0;..for (currs 1aaf0 6c 6f 74 20 3d 20 30 3b 20 28 63 75 72 72 73 6c lot = 0; (currsl 1ab00 6f 74 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 ot < (sizeof(cac 1ab10 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a key_slots) / siz 1ab20 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 eof(cackey_slots 1ab30 5b 30 5d 29 29 29 3b 20 63 75 72 72 73 6c 6f 74 [0]))); currslot 1ab40 2b 2b 29 20 7b 0a 09 09 69 66 20 28 21 63 61 63 ++) {...if (!cac 1ab50 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c key_slots[currsl 1ab60 6f 74 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 ot].active) {... 1ab70 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a .continue;...}.. 1ab80 09 09 69 66 20 28 73 6c 6f 74 5f 69 64 78 20 3e ..if (slot_idx > 1ab90 3d 20 63 6f 75 6e 74 29 20 7b 0a 09 09 09 43 41 = count) {....CA 1aba0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1abb0 46 28 22 45 72 72 6f 72 2e 20 55 73 65 72 20 61 F("Error. User a 1abc0 6c 6c 6f 63 61 74 65 64 20 25 6c 75 20 65 6e 74 llocated %lu ent 1abd0 72 69 65 73 2c 20 62 75 74 20 77 65 20 6a 75 73 ries, but we jus 1abe0 74 20 74 72 69 65 64 20 74 6f 20 77 72 69 74 65 t tried to write 1abf0 20 74 6f 20 74 68 65 20 25 6c 75 20 69 6e 64 65 to the %lu inde 1ac00 78 20 2d 2d 20 69 67 6e 6f 72 69 6e 67 22 2c 20 x -- ignoring", 1ac10 63 6f 75 6e 74 2c 20 73 6c 6f 74 5f 69 64 78 29 count, slot_idx) 1ac20 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a ;.....continue;. 1ac30 09 09 7d 0a 0a 09 09 70 53 6c 6f 74 4c 69 73 74 ..}....pSlotList 1ac40 5b 73 6c 6f 74 5f 69 64 78 5d 20 3d 20 63 75 72 [slot_idx] = cur 1ac50 72 73 6c 6f 74 3b 0a 09 09 73 6c 6f 74 5f 69 64 rslot;...slot_id 1ac60 78 2b 2b 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f x++;..}...mutex_ 1ac70 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 1ac80 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 1ac90 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 1aca0 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 1acb0 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 1acc0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1acd0 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 1ace0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 1acf0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 1ad00 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2a L_ERROR);..}...* 1ad10 70 75 6c 43 6f 75 6e 74 20 3d 20 73 6c 6f 74 5f pulCount = slot_ 1ad20 63 6f 75 6e 74 3b 0a 0a 09 43 41 43 4b 45 59 5f count;...CACKEY_ 1ad30 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 1ad40 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 turning CKR_OK ( 1ad50 25 69 29 2e 20 20 46 6f 75 6e 64 20 25 6c 75 20 %i). Found %lu 1ad60 72 65 61 64 65 72 73 2e 22 2c 20 43 4b 52 5f 4f readers.", CKR_O 1ad70 4b 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e K, (unsigned lon 1ad80 67 29 20 73 6c 6f 74 5f 63 6f 75 6e 74 29 3b 0a g) slot_count);. 1ad90 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 ..return(CKR_OK) 1ada0 3b 0a 0a 09 74 6f 6b 65 6e 50 72 65 73 65 6e 74 ;...tokenPresent 1adb0 20 3d 20 74 6f 6b 65 6e 50 72 65 73 65 6e 74 3b = tokenPresent; 1adc0 20 2f 2a 20 53 75 70 72 65 73 73 20 75 6e 75 73 /* Supress unus 1add0 65 64 20 76 61 72 69 61 62 6c 65 20 77 61 72 6e ed variable warn 1ade0 69 6e 67 20 2a 2f 0a 7d 0a 0a 43 4b 5f 44 45 46 ing */.}..CK_DEF 1adf0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1ae00 52 56 2c 20 43 5f 47 65 74 53 6c 6f 74 49 6e 66 RV, C_GetSlotInf 1ae10 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c o)(CK_SLOT_ID sl 1ae20 6f 74 49 44 2c 20 43 4b 5f 53 4c 4f 54 5f 49 4e otID, CK_SLOT_IN 1ae30 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 7b 0a FO_PTR pInfo) {. 1ae40 09 73 74 61 74 69 63 20 43 4b 5f 55 54 46 38 43 .static CK_UTF8C 1ae50 48 41 52 20 73 6c 6f 74 44 65 73 63 72 69 70 74 HAR slotDescript 1ae60 69 6f 6e 5b 5d 20 3d 20 22 43 41 43 4b 65 79 20 ion[] = "CACKey 1ae70 53 6c 6f 74 22 3b 0a 09 69 6e 74 20 6d 75 74 65 Slot";..int mute 1ae80 78 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 62 x_retval;..int b 1ae90 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a 0a 09 ytes_to_copy;... 1aea0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1aeb0 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 1aec0 0a 09 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e ..if (pInfo == N 1aed0 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ULL) {...CACKEY_ 1aee0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1aef0 72 6f 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 ror. pInfo is NU 1af00 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 1af10 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 1af20 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 AD);..}...if (!c 1af30 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 1af40 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 1af50 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1af60 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 1af70 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 1af80 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 1af90 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1afa0 0a 09 7d 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 ..}...if (slotID 1afb0 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e < 0 || slotID > 1afc0 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 = (sizeof(cackey 1afd0 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 _slots) / sizeof 1afe0 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d (cackey_slots[0] 1aff0 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ))) {...CACKEY_D 1b000 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1b010 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 or. Invalid slot 1b020 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 requested (%lu) 1b030 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c , outside of val 1b040 69 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 id range", slotI 1b050 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b D);....return(CK 1b060 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 R_SLOT_ID_INVALI 1b070 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 D);..}...mutex_r 1b080 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 1b090 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 utex_lock(cackey 1b0a0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 1b0b0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 1b0c0 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 1b0d0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1b0e0 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c r. Locking fail 1b0f0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1b100 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 1b110 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 OR);..}...if (ca 1b120 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 ckey_slots[slotI 1b130 44 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 D].active == 0) 1b140 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1b150 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1b160 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 Invalid slot req 1b170 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c uested (%lu), sl 1b180 6f 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 ot not currently 1b190 20 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 active", slotID 1b1a0 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 );....cackey_mut 1b1b0 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 1b1c0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 _biglock);....re 1b1d0 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 turn(CKR_SLOT_ID 1b1e0 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 1b1f0 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 43 pInfo->flags = C 1b200 4b 46 5f 48 57 5f 53 4c 4f 54 3b 0a 0a 09 69 66 KF_HW_SLOT;...if 1b210 20 28 21 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b (!cackey_slots[ 1b220 73 6c 6f 74 49 44 5d 2e 69 6e 74 65 72 6e 61 6c slotID].internal 1b230 29 20 7b 0a 09 09 70 49 6e 66 6f 2d 3e 66 6c 61 ) {...pInfo->fla 1b240 67 73 20 7c 3d 20 43 4b 46 5f 52 45 4d 4f 56 41 gs |= CKF_REMOVA 1b250 42 4c 45 5f 44 45 56 49 43 45 3b 0a 09 7d 0a 0a BLE_DEVICE;..}.. 1b260 09 69 66 20 28 63 61 63 6b 65 79 5f 74 6f 6b 65 .if (cackey_toke 1b270 6e 5f 70 72 65 73 65 6e 74 28 26 63 61 63 6b 65 n_present(&cacke 1b280 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 29 y_slots[slotID]) 1b290 20 3d 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f == CACKEY_PCSC_ 1b2a0 53 5f 54 4f 4b 45 4e 50 52 45 53 45 4e 54 29 20 S_TOKENPRESENT) 1b2b0 7b 0a 09 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 {...pInfo->flags 1b2c0 20 7c 3d 20 43 4b 46 5f 54 4f 4b 45 4e 5f 50 52 |= CKF_TOKEN_PR 1b2d0 45 53 45 4e 54 3b 0a 09 7d 0a 0a 09 62 79 74 65 ESENT;..}...byte 1b2e0 73 5f 74 6f 5f 63 6f 70 79 20 3d 20 73 74 72 6c s_to_copy = strl 1b2f0 65 6e 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b en(cackey_slots[ 1b300 73 6c 6f 74 49 44 5d 2e 70 63 73 63 5f 72 65 61 slotID].pcsc_rea 1b310 64 65 72 29 3b 0a 09 69 66 20 28 73 69 7a 65 6f der);..if (sizeo 1b320 66 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 f(pInfo->manufac 1b330 74 75 72 65 72 49 44 29 20 3c 20 62 79 74 65 73 turerID) < bytes 1b340 5f 74 6f 5f 63 6f 70 79 29 20 7b 0a 09 09 62 79 _to_copy) {...by 1b350 74 65 73 5f 74 6f 5f 63 6f 70 79 20 3d 20 73 69 tes_to_copy = si 1b360 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 zeof(pInfo->manu 1b370 66 61 63 74 75 72 65 72 49 44 29 3b 0a 09 7d 0a facturerID);..}. 1b380 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6d .memcpy(pInfo->m 1b390 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 63 anufacturerID, c 1b3a0 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 ackey_slots[slot 1b3b0 49 44 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 2c ID].pcsc_reader, 1b3c0 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 3b bytes_to_copy); 1b3d0 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 1b3e0 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 = cackey_mutex_u 1b3f0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 1b400 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 1b410 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 1b420 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1b430 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1b440 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Unlocking failed 1b450 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1b460 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 1b470 29 3b 0a 09 7d 0a 0a 09 6d 65 6d 73 65 74 28 70 );..}...memset(p 1b480 49 6e 66 6f 2d 3e 73 6c 6f 74 44 65 73 63 72 69 Info->slotDescri 1b490 70 74 69 6f 6e 2c 20 27 20 27 2c 20 73 69 7a 65 ption, ' ', size 1b4a0 6f 66 28 70 49 6e 66 6f 2d 3e 73 6c 6f 74 44 65 of(pInfo->slotDe 1b4b0 73 63 72 69 70 74 69 6f 6e 29 29 3b 0a 09 6d 65 scription));..me 1b4c0 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 73 6c 6f 74 mcpy(pInfo->slot 1b4d0 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 73 6c 6f Description, slo 1b4e0 74 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 73 69 tDescription, si 1b4f0 7a 65 6f 66 28 73 6c 6f 74 44 65 73 63 72 69 70 zeof(slotDescrip 1b500 74 69 6f 6e 29 20 2d 20 31 29 3b 0a 0a 09 6d 65 tion) - 1);...me 1b510 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 mset(pInfo->manu 1b520 66 61 63 74 75 72 65 72 49 44 2c 20 27 20 27 2c facturerID, ' ', 1b530 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d sizeof(pInfo->m 1b540 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 29 3b anufacturerID)); 1b550 0a 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 ...pInfo->hardwa 1b560 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 reVersion.major 1b570 3d 20 28 63 61 63 6b 65 79 5f 67 65 74 76 65 72 = (cackey_getver 1b580 73 69 6f 6e 28 29 20 3e 3e 20 31 36 29 20 26 20 sion() >> 16) & 1b590 30 78 66 66 3b 0a 09 70 49 6e 66 6f 2d 3e 68 61 0xff;..pInfo->ha 1b5a0 72 64 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 rdwareVersion.mi 1b5b0 6e 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 65 nor = (cackey_ge 1b5c0 74 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 38 29 tversion() >> 8) 1b5d0 20 26 20 30 78 66 66 3b 0a 0a 09 70 49 6e 66 6f & 0xff;...pInfo 1b5e0 2d 3e 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f ->firmwareVersio 1b5f0 6e 2e 6d 61 6a 6f 72 20 3d 20 30 78 30 30 3b 0a n.major = 0x00;. 1b600 09 70 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 72 65 .pInfo->firmware 1b610 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 Version.minor = 1b620 30 78 30 30 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 0x00;...CACKEY_D 1b630 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 1b640 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 urning CKR_OK (% 1b650 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 i)", CKR_OK);... 1b660 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a return(CKR_OK);. 1b670 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 1b680 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 CTION(CK_RV, C_G 1b690 65 74 54 6f 6b 65 6e 49 6e 66 6f 29 28 43 4b 5f etTokenInfo)(CK_ 1b6a0 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 SLOT_ID slotID, 1b6b0 43 4b 5f 54 4f 4b 45 4e 5f 49 4e 46 4f 5f 50 54 CK_TOKEN_INFO_PT 1b6c0 52 20 70 49 6e 66 6f 29 20 7b 0a 09 73 74 61 74 R pInfo) {..stat 1b6d0 69 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20 6d ic CK_UTF8CHAR m 1b6e0 61 6e 75 66 61 63 74 75 72 65 72 49 44 5b 5d 20 anufacturerID[] 1b6f0 3d 20 22 55 2e 53 2e 20 47 6f 76 65 72 6e 6d 65 = "U.S. Governme 1b700 6e 74 22 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f nt";..static CK_ 1b710 55 54 46 38 43 48 41 52 20 64 65 66 61 75 6c 74 UTF8CHAR default 1b720 4c 61 62 65 6c 5b 5d 20 3d 20 22 55 6e 6b 6e 6f Label[] = "Unkno 1b730 77 6e 20 54 6f 6b 65 6e 22 3b 0a 09 73 74 61 74 wn Token";..stat 1b740 69 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20 6d ic CK_UTF8CHAR m 1b750 6f 64 65 6c 5b 5d 20 3d 20 22 43 41 43 20 54 6f odel[] = "CAC To 1b760 6b 65 6e 22 3b 0a 09 73 74 72 75 63 74 20 63 61 ken";..struct ca 1b770 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 ckey_pcsc_identi 1b780 74 79 20 2a 70 63 73 63 5f 69 64 65 6e 74 69 74 ty *pcsc_identit 1b790 69 65 73 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c ies;..unsigned l 1b7a0 6f 6e 67 20 6e 75 6d 5f 63 65 72 74 73 3b 0a 09 ong num_certs;.. 1b7b0 73 73 69 7a 65 5f 74 20 6c 61 62 65 6c 5f 72 65 ssize_t label_re 1b7c0 74 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 t;..int mutex_re 1b7d0 74 76 61 6c 3b 0a 09 69 6e 74 20 75 73 65 5f 64 tval;..int use_d 1b7e0 65 66 61 75 6c 74 5f 6c 61 62 65 6c 3b 0a 0a 09 efault_label;... 1b7f0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1b800 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 1b810 0a 09 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e ..if (pInfo == N 1b820 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ULL) {...CACKEY_ 1b830 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1b840 72 6f 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 ror. pInfo is NU 1b850 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 1b860 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 1b870 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 AD);..}...if (!c 1b880 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 1b890 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 1b8a0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1b8b0 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 1b8c0 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 1b8d0 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 1b8e0 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1b8f0 0a 09 7d 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 ..}...if (slotID 1b900 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e < 0 || slotID > 1b910 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 = (sizeof(cackey 1b920 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 _slots) / sizeof 1b930 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d (cackey_slots[0] 1b940 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ))) {...CACKEY_D 1b950 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1b960 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 or. Invalid slot 1b970 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 requested (%lu) 1b980 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c , outside of val 1b990 69 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 id range", slotI 1b9a0 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b D);....return(CK 1b9b0 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 R_SLOT_ID_INVALI 1b9c0 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 D);..}...mutex_r 1b9d0 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 1b9e0 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 utex_lock(cackey 1b9f0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 1ba00 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 1ba10 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 1ba20 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1ba30 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c r. Locking fail 1ba40 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1ba50 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 1ba60 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 OR);..}...if (ca 1ba70 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 ckey_slots[slotI 1ba80 44 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 D].active == 0) 1ba90 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1baa0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1bab0 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 Invalid slot req 1bac0 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c uested (%lu), sl 1bad0 6f 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 ot not currently 1bae0 20 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 active", slotID 1baf0 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 );....cackey_mut 1bb00 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 1bb10 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 _biglock);....re 1bb20 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 turn(CKR_SLOT_ID 1bb30 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 1bb40 69 66 20 28 63 61 63 6b 65 79 5f 74 6f 6b 65 6e if (cackey_token 1bb50 5f 70 72 65 73 65 6e 74 28 26 63 61 63 6b 65 79 _present(&cackey 1bb60 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 29 20 _slots[slotID]) 1bb70 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 != CACKEY_PCSC_S 1bb80 5f 54 4f 4b 45 4e 50 52 45 53 45 4e 54 29 20 7b _TOKENPRESENT) { 1bb90 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1bba0 50 52 49 4e 54 46 28 22 4e 6f 20 74 6f 6b 65 6e PRINTF("No token 1bbb0 20 69 73 20 70 72 65 73 65 6e 74 20 69 6e 20 73 is present in s 1bbc0 6c 6f 74 49 44 20 3d 20 25 6c 75 22 2c 20 73 6c lotID = %lu", sl 1bbd0 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b 65 79 otID);....cackey 1bbe0 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 1bbf0 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 1bc00 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 54 4f 4b ..return(CKR_TOK 1bc10 45 4e 5f 4e 4f 54 5f 50 52 45 53 45 4e 54 29 3b EN_NOT_PRESENT); 1bc20 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 1bc30 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 1bc40 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 1bc50 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 1bc60 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 1bc70 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1bc80 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1bc90 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 . Unlocking fai 1bca0 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 1bcb0 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 1bcc0 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 44 65 ROR);..}.../* De 1bcd0 74 65 72 6d 69 6e 65 20 74 6f 6b 65 6e 20 6c 61 termine token la 1bce0 62 65 6c 20 66 72 6f 6d 20 63 65 72 74 69 66 69 bel from certifi 1bcf0 63 61 74 65 73 20 2a 2f 0a 09 6d 65 6d 73 65 74 cates */..memset 1bd00 28 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20 27 (pInfo->label, ' 1bd10 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f ', sizeof(pInfo 1bd20 2d 3e 6c 61 62 65 6c 29 29 3b 0a 09 75 73 65 5f ->label));..use_ 1bd30 64 65 66 61 75 6c 74 5f 6c 61 62 65 6c 20 3d 20 default_label = 1bd40 31 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 1;...if (cackey_ 1bd50 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 6c 61 slots[slotID].la 1bd60 62 65 6c 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 bel == NULL) {.. 1bd70 09 70 63 73 63 5f 69 64 65 6e 74 69 74 69 65 73 .pcsc_identities 1bd80 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 63 = cackey_read_c 1bd90 65 72 74 73 28 26 63 61 63 6b 65 79 5f 73 6c 6f erts(&cackey_slo 1bda0 74 73 5b 73 6c 6f 74 49 44 5d 2c 20 4e 55 4c 4c ts[slotID], NULL 1bdb0 2c 20 26 6e 75 6d 5f 63 65 72 74 73 29 3b 0a 09 , &num_certs);.. 1bdc0 09 69 66 20 28 70 63 73 63 5f 69 64 65 6e 74 69 .if (pcsc_identi 1bdd0 74 69 65 73 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a ties != NULL) {. 1bde0 09 09 09 69 66 20 28 6e 75 6d 5f 63 65 72 74 73 ...if (num_certs 1bdf0 20 3e 20 30 29 20 7b 0a 09 09 09 09 6c 61 62 65 > 0) {.....labe 1be00 6c 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 70 l_ret = cackey_p 1be10 63 73 63 5f 69 64 65 6e 74 69 74 79 5f 74 6f 5f csc_identity_to_ 1be20 6c 61 62 65 6c 28 70 63 73 63 5f 69 64 65 6e 74 label(pcsc_ident 1be30 69 74 69 65 73 2c 20 70 49 6e 66 6f 2d 3e 6c 61 ities, pInfo->la 1be40 62 65 6c 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 bel, sizeof(pInf 1be50 6f 2d 3e 6c 61 62 65 6c 29 29 3b 0a 09 09 09 09 o->label));..... 1be60 69 66 20 28 6c 61 62 65 6c 5f 72 65 74 20 3e 20 if (label_ret > 1be70 30 29 20 7b 0a 09 09 09 09 09 75 73 65 5f 64 65 0) {......use_de 1be80 66 61 75 6c 74 5f 6c 61 62 65 6c 20 3d 20 30 3b fault_label = 0; 1be90 0a 0a 09 09 09 09 09 63 61 63 6b 65 79 5f 73 6c .......cackey_sl 1bea0 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 6c 61 62 65 ots[slotID].labe 1beb0 6c 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f l = malloc(sizeo 1bec0 66 28 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 29 29 f(pInfo->label)) 1bed0 3b 0a 0a 09 09 09 09 09 6d 65 6d 63 70 79 28 63 ;.......memcpy(c 1bee0 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 ackey_slots[slot 1bef0 49 44 5d 2e 6c 61 62 65 6c 2c 20 70 49 6e 66 6f ID].label, pInfo 1bf00 2d 3e 6c 61 62 65 6c 2c 20 73 69 7a 65 6f 66 28 ->label, sizeof( 1bf10 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 29 29 3b 0a pInfo->label));. 1bf20 09 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 63 ....}....}.....c 1bf30 61 63 6b 65 79 5f 66 72 65 65 5f 63 65 72 74 73 ackey_free_certs 1bf40 28 70 63 73 63 5f 69 64 65 6e 74 69 74 69 65 73 (pcsc_identities 1bf50 2c 20 6e 75 6d 5f 63 65 72 74 73 2c 20 31 29 3b , num_certs, 1); 1bf60 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 ...}..} else {.. 1bf70 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6c .memcpy(pInfo->l 1bf80 61 62 65 6c 2c 20 63 61 63 6b 65 79 5f 73 6c 6f abel, cackey_slo 1bf90 74 73 5b 73 6c 6f 74 49 44 5d 2e 6c 61 62 65 6c ts[slotID].label 1bfa0 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e , sizeof(pInfo-> 1bfb0 6c 61 62 65 6c 29 29 3b 0a 0a 09 09 75 73 65 5f label));....use_ 1bfc0 64 65 66 61 75 6c 74 5f 6c 61 62 65 6c 20 3d 20 default_label = 1bfd0 30 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 73 65 5f 0;..}...if (use_ 1bfe0 64 65 66 61 75 6c 74 5f 6c 61 62 65 6c 29 20 7b default_label) { 1bff0 0a 09 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d ...memcpy(pInfo- 1c000 3e 6c 61 62 65 6c 2c 20 64 65 66 61 75 6c 74 4c >label, defaultL 1c010 61 62 65 6c 2c 20 73 69 7a 65 6f 66 28 64 65 66 abel, sizeof(def 1c020 61 75 6c 74 4c 61 62 65 6c 29 20 2d 20 31 29 3b aultLabel) - 1); 1c030 0a 09 7d 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e ..}...memset(pIn 1c040 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 fo->manufacturer 1c050 49 44 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 ID, ' ', sizeof( 1c060 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 pInfo->manufactu 1c070 72 65 72 49 44 29 29 3b 0a 09 6d 65 6d 63 70 79 rerID));..memcpy 1c080 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 (pInfo->manufact 1c090 75 72 65 72 49 44 2c 20 6d 61 6e 75 66 61 63 74 urerID, manufact 1c0a0 75 72 65 72 49 44 2c 20 73 69 7a 65 6f 66 28 6d urerID, sizeof(m 1c0b0 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 20 2d anufacturerID) - 1c0c0 20 31 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 1);...memset(pI 1c0d0 6e 66 6f 2d 3e 6d 6f 64 65 6c 2c 20 27 20 27 2c nfo->model, ' ', 1c0e0 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d sizeof(pInfo->m 1c0f0 6f 64 65 6c 29 29 3b 0a 09 6d 65 6d 63 70 79 28 odel));..memcpy( 1c100 70 49 6e 66 6f 2d 3e 6d 6f 64 65 6c 2c 20 6d 6f pInfo->model, mo 1c110 64 65 6c 2c 20 73 69 7a 65 6f 66 28 6d 6f 64 65 del, sizeof(mode 1c120 6c 29 20 2d 20 31 29 3b 0a 0a 09 6d 65 6d 73 65 l) - 1);...memse 1c130 74 28 70 49 6e 66 6f 2d 3e 73 65 72 69 61 6c 4e t(pInfo->serialN 1c140 75 6d 62 65 72 2c 20 27 20 27 2c 20 73 69 7a 65 umber, ' ', size 1c150 6f 66 28 70 49 6e 66 6f 2d 3e 73 65 72 69 61 6c of(pInfo->serial 1c160 4e 75 6d 62 65 72 29 29 3b 0a 0a 09 6d 65 6d 73 Number));...mems 1c170 65 74 28 70 49 6e 66 6f 2d 3e 75 74 63 54 69 6d et(pInfo->utcTim 1c180 65 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 e, ' ', sizeof(p 1c190 49 6e 66 6f 2d 3e 75 74 63 54 69 6d 65 29 29 3b Info->utcTime)); 1c1a0 0a 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 ...pInfo->hardwa 1c1b0 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 reVersion.major 1c1c0 3d 20 28 63 61 63 6b 65 79 5f 67 65 74 76 65 72 = (cackey_getver 1c1d0 73 69 6f 6e 28 29 20 3e 3e 20 31 36 29 20 26 20 sion() >> 16) & 1c1e0 30 78 66 66 3b 0a 09 70 49 6e 66 6f 2d 3e 68 61 0xff;..pInfo->ha 1c1f0 72 64 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 rdwareVersion.mi 1c200 6e 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 65 nor = (cackey_ge 1c210 74 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 38 29 tversion() >> 8) 1c220 20 26 20 30 78 66 66 3b 0a 0a 09 70 49 6e 66 6f & 0xff;...pInfo 1c230 2d 3e 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f ->firmwareVersio 1c240 6e 2e 6d 61 6a 6f 72 20 3d 20 30 78 30 30 3b 0a n.major = 0x00;. 1c250 09 70 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 72 65 .pInfo->firmware 1c260 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 Version.minor = 1c270 30 78 30 30 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66 0x00;...pInfo->f 1c280 6c 61 67 73 20 3d 20 43 4b 46 5f 57 52 49 54 45 lags = CKF_WRITE 1c290 5f 50 52 4f 54 45 43 54 45 44 20 7c 20 43 4b 46 _PROTECTED | CKF 1c2a0 5f 55 53 45 52 5f 50 49 4e 5f 49 4e 49 54 49 41 _USER_PIN_INITIA 1c2b0 4c 49 5a 45 44 20 7c 20 43 4b 46 5f 54 4f 4b 45 LIZED | CKF_TOKE 1c2c0 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 44 20 7c 20 N_INITIALIZED | 1c2d0 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo 1c2e0 74 49 44 5d 2e 74 6f 6b 65 6e 5f 66 6c 61 67 73 tID].token_flags 1c2f0 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 ;...pInfo->ulMax 1c300 53 65 73 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 28 SessionCount = ( 1c310 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 1c320 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 1c330 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 1c340 5b 30 5d 29 29 20 2d 20 31 3b 0a 09 70 49 6e 66 [0])) - 1;..pInf 1c350 6f 2d 3e 75 6c 53 65 73 73 69 6f 6e 43 6f 75 6e o->ulSessionCoun 1c360 74 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 t = CK_UNAVAILAB 1c370 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a LE_INFORMATION;. 1c380 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 52 77 53 .pInfo->ulMaxRwS 1c390 65 73 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 30 3b essionCount = 0; 1c3a0 0a 09 70 49 6e 66 6f 2d 3e 75 6c 52 77 53 65 73 ..pInfo->ulRwSes 1c3b0 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 43 4b 5f 55 sionCount = CK_U 1c3c0 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 NAVAILABLE_INFOR 1c3d0 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e MATION;..pInfo-> 1c3e0 75 6c 4d 61 78 50 69 6e 4c 65 6e 20 3d 20 31 32 ulMaxPinLen = 12 1c3f0 38 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 8;..pInfo->ulMin 1c400 50 69 6e 4c 65 6e 20 3d 20 30 3b 0a 09 70 49 6e PinLen = 0;..pIn 1c410 66 6f 2d 3e 75 6c 54 6f 74 61 6c 50 75 62 6c 69 fo->ulTotalPubli 1c420 63 4d 65 6d 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 cMemory = CK_UNA 1c430 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 VAILABLE_INFORMA 1c440 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c TION;..pInfo->ul 1c450 46 72 65 65 50 75 62 6c 69 63 4d 65 6d 6f 72 79 FreePublicMemory 1c460 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c = CK_UNAVAILABL 1c470 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 E_INFORMATION;.. 1c480 70 49 6e 66 6f 2d 3e 75 6c 54 6f 74 61 6c 50 72 pInfo->ulTotalPr 1c490 69 76 61 74 65 4d 65 6d 6f 72 79 20 3d 20 43 4b ivateMemory = CK 1c4a0 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e 46 _UNAVAILABLE_INF 1c4b0 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f ORMATION;..pInfo 1c4c0 2d 3e 75 6c 46 72 65 65 50 72 69 76 61 74 65 4d ->ulFreePrivateM 1c4d0 65 6d 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 56 41 emory = CK_UNAVA 1c4e0 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 ILABLE_INFORMATI 1c4f0 4f 4e 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ON;...CACKEY_DEB 1c500 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1c510 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 1c520 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 1c530 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 1c540 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 1c550 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 57 61 69 ION(CK_RV, C_Wai 1c560 74 46 6f 72 53 6c 6f 74 45 76 65 6e 74 29 28 43 tForSlotEvent)(C 1c570 4b 5f 46 4c 41 47 53 20 66 6c 61 67 73 2c 20 43 K_FLAGS flags, C 1c580 4b 5f 53 4c 4f 54 5f 49 44 5f 50 54 52 20 70 53 K_SLOT_ID_PTR pS 1c590 6c 6f 74 49 44 2c 20 43 4b 5f 56 4f 49 44 5f 50 lotID, CK_VOID_P 1c5a0 54 52 20 70 52 65 73 65 72 76 65 64 29 20 7b 0a TR pReserved) {. 1c5b0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1c5c0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 1c5d0 0a 0a 09 69 66 20 28 70 52 65 73 65 72 76 65 64 ...if (pReserved 1c5e0 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 != NULL) {...CA 1c5f0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1c600 46 28 22 45 72 72 6f 72 2e 20 70 52 65 73 65 72 F("Error. pReser 1c610 76 65 64 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e ved is not NULL. 1c620 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1c630 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 R_ARGUMENTS_BAD) 1c640 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack 1c650 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1c660 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1c670 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1c680 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1c690 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1c6a0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1c6b0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1c6c0 0a 0a 09 2f 2a 20 58 58 58 3a 20 54 4f 44 4f 3a .../* XXX: TODO: 1c6d0 20 49 6d 70 6c 65 6d 65 6e 74 20 74 68 69 73 2e Implement this. 1c6e0 2e 2e 20 2a 2f 0a 09 43 41 43 4b 45 59 5f 44 45 .. */..CACKEY_DE 1c6f0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 1c700 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 rning CKR_FUNCTI 1c710 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1c720 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 (%i)", CKR_FUNC 1c730 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1c740 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK 1c750 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1c760 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b UPPORTED);.}..CK 1c770 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 1c780 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 4d 65 63 (CK_RV, C_GetMec 1c790 68 61 6e 69 73 6d 4c 69 73 74 29 28 43 4b 5f 53 hanismList)(CK_S 1c7a0 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 43 LOT_ID slotID, C 1c7b0 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 59 50 45 K_MECHANISM_TYPE 1c7c0 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 4c _PTR pMechanismL 1c7d0 69 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 ist, CK_ULONG_PT 1c7e0 52 20 70 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 43 R pulCount) {..C 1c7f0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1c800 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 1c810 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 1c820 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 1c830 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1c840 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 1c850 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 1c860 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 1c870 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 1c880 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 LIZED);..}...if 1c890 28 70 75 6c 43 6f 75 6e 74 20 3d 3d 20 4e 55 4c (pulCount == NUL 1c8a0 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 L) {...CACKEY_DE 1c8b0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1c8c0 72 2e 20 20 70 75 6c 43 6f 75 6e 74 20 69 73 20 r. pulCount is 1c8d0 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 NULL.");....retu 1c8e0 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 rn(CKR_ARGUMENTS 1c8f0 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 _BAD);..}...if ( 1c900 70 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 20 3d pMechanismList = 1c910 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 2a 70 75 6c = NULL) {...*pul 1c920 43 6f 75 6e 74 20 3d 20 31 3b 0a 0a 09 09 43 41 Count = 1;....CA 1c930 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1c940 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 1c950 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f _OK (%i)", CKR_O 1c960 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b K);....return(CK 1c970 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 R_OK);..}...if ( 1c980 2a 70 75 6c 43 6f 75 6e 74 20 3c 20 31 29 20 7b *pulCount < 1) { 1c990 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1c9a0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1c9b0 42 75 66 66 65 72 20 74 6f 6f 20 73 6d 61 6c 6c Buffer too small 1c9c0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1c9d0 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d KR_BUFFER_TOO_SM 1c9e0 41 4c 4c 29 3b 0a 09 7d 0a 0a 09 70 4d 65 63 68 ALL);..}...pMech 1c9f0 61 6e 69 73 6d 4c 69 73 74 5b 30 5d 20 3d 20 43 anismList[0] = C 1ca00 4b 4d 5f 52 53 41 5f 50 4b 43 53 3b 0a 09 2a 70 KM_RSA_PKCS;..*p 1ca10 75 6c 43 6f 75 6e 74 20 3d 20 31 3b 0a 0a 09 43 ulCount = 1;...C 1ca20 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1ca30 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1ca40 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ 1ca50 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b OK);...return(CK 1ca60 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 R_OK);.}..CK_DEF 1ca70 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1ca80 52 56 2c 20 43 5f 47 65 74 4d 65 63 68 61 6e 69 RV, C_GetMechani 1ca90 73 6d 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f smInfo)(CK_SLOT_ 1caa0 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 4d 45 ID slotID, CK_ME 1cab0 43 48 41 4e 49 53 4d 5f 54 59 50 45 20 74 79 70 CHANISM_TYPE typ 1cac0 65 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f e, CK_MECHANISM_ 1cad0 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 INFO_PTR pInfo) 1cae0 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 {..int mutex_ret 1caf0 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 val;...CACKEY_DE 1cb00 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 1cb10 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 49 6e ed.");...if (pIn 1cb20 66 6f 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 fo == NULL) {... 1cb30 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1cb40 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 49 6e 66 NTF("Error. pInf 1cb50 6f 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 o is NULL.");... 1cb60 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 1cb70 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 1cb80 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 1cb90 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 1cba0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1cbb0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 1cbc0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 1cbd0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 1cbe0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 1cbf0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 LIZED);..}...if 1cc00 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 (slotID < 0 || s 1cc10 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 lotID >= (sizeof 1cc20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f (cackey_slots) / 1cc30 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s 1cc40 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 lots[0]))) {...C 1cc50 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1cc60 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c TF("Error. Inval 1cc70 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 id slot requeste 1cc80 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 d (%lu), outside 1cc90 20 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 of valid range" 1cca0 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 , slotID);....re 1ccb0 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 turn(CKR_SLOT_ID 1ccc0 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 1ccd0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 1cce0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b ackey_mutex_lock 1ccf0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1cd00 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 ;..if (mutex_ret 1cd10 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 val != 0) {...CA 1cd20 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1cd30 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 F("Error. Locki 1cd40 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 1cd50 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 1cd60 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 1cd70 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 .if (cackey_slot 1cd80 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 s[slotID].active 1cd90 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 == 0) {...CACKE 1cda0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1cdb0 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 Error. Invalid s 1cdc0 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 lot requested (% 1cdd0 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 lu), slot not cu 1cde0 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c rrently active", 1cdf0 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 slotID);....cac 1ce00 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1ce10 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1ce20 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1ce30 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 SLOT_ID_INVALID) 1ce40 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 1ce50 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 1ce60 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 1ce70 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 1ce80 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 1ce90 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 1cea0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1ceb0 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 1cec0 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 1ced0 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 1cee0 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 RROR);..}...swit 1cef0 63 68 20 28 74 79 70 65 29 20 7b 0a 09 09 63 61 ch (type) {...ca 1cf00 73 65 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 3a se CKM_RSA_PKCS: 1cf10 0a 09 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e ....pInfo->ulMin 1cf20 4b 65 79 53 69 7a 65 20 3d 20 35 31 32 3b 0a 09 KeySize = 512;.. 1cf30 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 4b 65 ..pInfo->ulMaxKe 1cf40 79 53 69 7a 65 20 3d 20 38 31 39 32 3b 0a 09 09 ySize = 8192;... 1cf50 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 .pInfo->flags = 1cf60 43 4b 46 5f 48 57 20 7c 20 43 4b 46 5f 45 4e 43 CKF_HW | CKF_ENC 1cf70 52 59 50 54 20 7c 20 43 4b 46 5f 44 45 43 52 59 RYPT | CKF_DECRY 1cf80 50 54 20 7c 20 43 4b 46 5f 53 49 47 4e 20 7c 20 PT | CKF_SIGN | 1cf90 43 4b 46 5f 56 45 52 49 46 59 3b 0a 09 09 09 62 CKF_VERIFY;....b 1cfa0 72 65 61 6b 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 reak;..}...CACKE 1cfb0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1cfc0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 1cfd0 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b (%i)", CKR_OK); 1cfe0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 1cff0 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 64 6f 6e 27 );.}../* We don' 1d000 74 20 73 75 70 70 6f 72 74 20 74 68 69 73 20 6d t support this m 1d010 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b 5f 44 45 46 ethod. */.CK_DEF 1d020 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1d030 52 56 2c 20 43 5f 49 6e 69 74 54 6f 6b 65 6e 29 RV, C_InitToken) 1d040 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 (CK_SLOT_ID slot 1d050 49 44 2c 20 43 4b 5f 55 54 46 38 43 48 41 52 5f ID, CK_UTF8CHAR_ 1d060 50 54 52 20 70 50 69 6e 2c 20 43 4b 5f 55 4c 4f PTR pPin, CK_ULO 1d070 4e 47 20 75 6c 50 69 6e 4c 65 6e 2c 20 43 4b 5f NG ulPinLen, CK_ 1d080 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 4c 61 UTF8CHAR_PTR pLa 1d090 62 65 6c 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 bel) {..CACKEY_D 1d0a0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 1d0b0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 1d0c0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 1d0d0 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 1d0e0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1d0f0 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 1d100 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 1d110 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 1d120 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1d130 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 1d140 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1d150 6e 69 6e 67 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 ning CKR_TOKEN_W 1d160 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 20 28 RITE_PROTECTED ( 1d170 25 69 29 22 2c 20 43 4b 52 5f 54 4f 4b 45 4e 5f %i)", CKR_TOKEN_ 1d180 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 29 WRITE_PROTECTED) 1d190 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 54 ;...return(CKR_T 1d1a0 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 OKEN_WRITE_PROTE 1d1b0 43 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 CTED);.}../* We 1d1c0 64 6f 6e 27 74 20 73 75 70 70 6f 72 74 20 74 68 don't support th 1d1d0 69 73 20 6d 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b is method. */.CK 1d1e0 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 1d1f0 28 43 4b 5f 52 56 2c 20 43 5f 49 6e 69 74 50 49 (CK_RV, C_InitPI 1d200 4e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 N)(CK_SESSION_HA 1d210 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 1d220 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 K_UTF8CHAR_PTR p 1d230 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c Pin, CK_ULONG ul 1d240 50 69 6e 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 PinLen) {..CACKE 1d250 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1d260 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 1d270 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 1d280 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 1d290 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1d2a0 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 1d2b0 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 1d2c0 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 1d2d0 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 1d2e0 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ 1d2f0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 1d300 74 75 72 6e 69 6e 67 20 43 4b 52 5f 54 4f 4b 45 turning CKR_TOKE 1d310 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 N_WRITE_PROTECTE 1d320 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 54 4f 4b D (%i)", CKR_TOK 1d330 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 EN_WRITE_PROTECT 1d340 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK 1d350 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 R_TOKEN_WRITE_PR 1d360 4f 54 45 43 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 OTECTED);.}../* 1d370 57 65 20 64 6f 6e 27 74 20 73 75 70 70 6f 72 74 We don't support 1d380 20 74 68 69 73 20 6d 65 74 68 6f 64 2e 20 2a 2f this method. */ 1d390 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 1d3a0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 74 ION(CK_RV, C_Set 1d3b0 50 49 4e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f PIN)(CK_SESSION_ 1d3c0 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 1d3d0 20 43 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52 CK_UTF8CHAR_PTR 1d3e0 20 70 4f 6c 64 50 69 6e 2c 20 43 4b 5f 55 4c 4f pOldPin, CK_ULO 1d3f0 4e 47 20 75 6c 4f 6c 64 50 69 6e 4c 65 6e 2c 20 NG ulOldPinLen, 1d400 43 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 CK_UTF8CHAR_PTR 1d410 70 4e 65 77 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e pNewPin, CK_ULON 1d420 47 20 75 6c 4e 65 77 50 69 6e 4c 65 6e 29 20 7b G ulNewPinLen) { 1d430 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1d440 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 1d450 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 1d460 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 1d470 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1d480 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 1d490 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 1d4a0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1d4b0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 1d4c0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 1d4d0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1d4e0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 1d4f0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 1d500 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 1d510 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 1d520 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 1d530 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 1d540 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1d550 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 1d560 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 1d570 20 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 29 28 C_OpenSession)( 1d580 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 CK_SLOT_ID slotI 1d590 44 2c 20 43 4b 5f 46 4c 41 47 53 20 66 6c 61 67 D, CK_FLAGS flag 1d5a0 73 2c 20 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 s, CK_VOID_PTR p 1d5b0 41 70 70 6c 69 63 61 74 69 6f 6e 2c 20 43 4b 5f Application, CK_ 1d5c0 4e 4f 54 49 46 59 20 6e 6f 74 69 66 79 2c 20 43 NOTIFY notify, C 1d5d0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 1d5e0 5f 50 54 52 20 70 68 53 65 73 73 69 6f 6e 29 20 _PTR phSession) 1d5f0 7b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 {..unsigned long 1d600 20 69 64 78 3b 0a 09 69 6e 74 20 6d 75 74 65 78 idx;..int mutex 1d610 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 66 6f _retval;..int fo 1d620 75 6e 64 5f 73 65 73 73 69 6f 6e 20 3d 20 30 3b und_session = 0; 1d630 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1d640 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 1d650 29 3b 0a 0a 09 69 66 20 28 28 66 6c 61 67 73 20 );...if ((flags 1d660 26 20 43 4b 46 5f 53 45 52 49 41 4c 5f 53 45 53 & CKF_SERIAL_SES 1d670 53 49 4f 4e 29 20 21 3d 20 43 4b 46 5f 53 45 52 SION) != CKF_SER 1d680 49 41 4c 5f 53 45 53 53 49 4f 4e 29 20 7b 0a 09 IAL_SESSION) {.. 1d690 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 1d6a0 49 4f 4e 5f 50 41 52 41 4c 4c 45 4c 5f 4e 4f 54 ION_PARALLEL_NOT 1d6b0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 09 7d 0a _SUPPORTED);..}. 1d6c0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 1d6d0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 1d6e0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1d6f0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 1d700 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 1d710 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 1d720 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 1d730 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 1d740 20 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 (slotID < 0 || 1d750 73 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f slotID >= (sizeo 1d760 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 f(cackey_slots) 1d770 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ 1d780 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 slots[0]))) {... 1d790 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1d7a0 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 NTF("Error. Inva 1d7b0 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 lid slot request 1d7c0 65 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 ed (%lu), outsid 1d7d0 65 20 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 e of valid range 1d7e0 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 ", slotID);....r 1d7f0 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 eturn(CKR_SLOT_I 1d800 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a D_INVALID);..}.. 1d810 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 1d820 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 cackey_mutex_loc 1d830 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1d840 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 1d850 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 1d860 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1d870 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b TF("Error. Lock 1d880 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 1d890 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 1d8a0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 1d8b0 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f ..if (cackey_slo 1d8c0 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 ts[slotID].activ 1d8d0 65 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b e == 0) {...CACK 1d8e0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1d8f0 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 "Error. Invalid 1d900 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 slot requested ( 1d910 25 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 %lu), slot not c 1d920 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 urrently active" 1d930 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 , slotID);....ca 1d940 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 1d950 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1d960 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1d970 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 _SLOT_ID_INVALID 1d980 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 56 65 72 69 66 );..}.../* Verif 1d990 79 20 74 68 61 74 20 74 68 65 20 63 61 72 64 20 y that the card 1d9a0 69 73 20 61 63 74 75 61 6c 6c 79 20 69 6e 20 74 is actually in t 1d9b0 68 65 20 73 6c 6f 74 2e 20 2a 2f 0a 09 2f 2a 20 he slot. */../* 1d9c0 58 58 58 3a 20 43 68 65 63 6b 20 74 6f 20 6d 61 XXX: Check to ma 1d9d0 6b 65 20 73 75 72 65 20 74 68 69 73 20 69 73 20 ke sure this is 1d9e0 69 6e 20 74 68 65 20 50 4b 43 53 23 31 31 20 73 in the PKCS#11 s 1d9f0 70 65 63 69 66 69 63 61 74 69 6f 6e 20 2a 2f 0a pecification */. 1da00 09 69 66 20 28 63 61 63 6b 65 79 5f 74 6f 6b 65 .if (cackey_toke 1da10 6e 5f 70 72 65 73 65 6e 74 28 26 63 61 63 6b 65 n_present(&cacke 1da20 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 29 y_slots[slotID]) 1da30 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f != CACKEY_PCSC_ 1da40 53 5f 54 4f 4b 45 4e 50 52 45 53 45 4e 54 29 20 S_TOKENPRESENT) 1da50 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1da60 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1da70 20 43 61 72 64 20 6e 6f 74 20 70 72 65 73 65 6e Card not presen 1da80 74 2e 20 20 52 65 74 75 72 6e 69 6e 67 20 43 4b t. Returning CK 1da90 52 5f 44 45 56 49 43 45 5f 52 45 4d 4f 56 45 44 R_DEVICE_REMOVED 1daa0 22 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 ");....cackey_mu 1dab0 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 1dac0 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 y_biglock);....r 1dad0 65 74 75 72 6e 28 43 4b 52 5f 44 45 56 49 43 45 eturn(CKR_DEVICE 1dae0 5f 52 45 4d 4f 56 45 44 29 3b 0a 09 7d 0a 0a 09 _REMOVED);..}... 1daf0 66 6f 72 20 28 69 64 78 20 3d 20 31 3b 20 69 64 for (idx = 1; id 1db00 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b x < (sizeof(cack 1db10 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 1db20 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 1db30 73 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b sions[0])); idx+ 1db40 2b 29 20 7b 0a 09 09 69 66 20 28 21 63 61 63 6b +) {...if (!cack 1db50 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d ey_sessions[idx] 1db60 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 09 66 6f .active) {....fo 1db70 75 6e 64 5f 73 65 73 73 69 6f 6e 20 3d 20 31 3b und_session = 1; 1db80 0a 0a 09 09 09 2a 70 68 53 65 73 73 69 6f 6e 20 .....*phSession 1db90 3d 20 69 64 78 3b 0a 0a 09 09 09 63 61 63 6b 65 = idx;.....cacke 1dba0 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. 1dbb0 61 63 74 69 76 65 20 3d 20 31 3b 0a 09 09 09 63 active = 1;....c 1dbc0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 ackey_sessions[i 1dbd0 64 78 5d 2e 73 6c 6f 74 49 44 20 3d 20 73 6c 6f dx].slotID = slo 1dbe0 74 49 44 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 tID;....cackey_s 1dbf0 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 74 61 essions[idx].sta 1dc00 74 65 20 3d 20 43 4b 53 5f 52 4f 5f 50 55 42 4c te = CKS_RO_PUBL 1dc10 49 43 5f 53 45 53 53 49 4f 4e 3b 0a 09 09 09 63 IC_SESSION;....c 1dc20 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 ackey_sessions[i 1dc30 64 78 5d 2e 66 6c 61 67 73 20 3d 20 66 6c 61 67 dx].flags = flag 1dc40 73 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 s;....cackey_ses 1dc50 73 69 6f 6e 73 5b 69 64 78 5d 2e 75 6c 44 65 76 sions[idx].ulDev 1dc60 69 63 65 45 72 72 6f 72 20 3d 20 30 3b 0a 09 09 iceError = 0;... 1dc70 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 1dc80 5b 69 64 78 5d 2e 70 41 70 70 6c 69 63 61 74 69 [idx].pApplicati 1dc90 6f 6e 20 3d 20 70 41 70 70 6c 69 63 61 74 69 6f on = pApplicatio 1dca0 6e 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 n;....cackey_ses 1dcb0 73 69 6f 6e 73 5b 69 64 78 5d 2e 4e 6f 74 69 66 sions[idx].Notif 1dcc0 79 20 3d 20 6e 6f 74 69 66 79 3b 0a 0a 09 09 09 y = notify;..... 1dcd0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1dce0 69 64 78 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 idx].identities 1dcf0 3d 20 4e 55 4c 4c 3b 0a 09 09 09 63 61 63 6b 65 = NULL;....cacke 1dd00 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. 1dd10 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 identities_count 1dd20 20 3d 20 30 3b 0a 0a 09 09 09 63 61 63 6b 65 79 = 0;.....cackey 1dd30 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 _sessions[idx].s 1dd40 65 61 72 63 68 5f 61 63 74 69 76 65 20 3d 20 30 earch_active = 0 1dd50 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 ;.....cackey_ses 1dd60 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 69 67 6e 5f sions[idx].sign_ 1dd70 61 63 74 69 76 65 20 3d 20 30 3b 0a 0a 09 09 09 active = 0;..... 1dd80 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1dd90 69 64 78 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 idx].decrypt_act 1dda0 69 76 65 20 3d 20 30 3b 0a 0a 09 09 09 63 61 63 ive = 0;.....cac 1ddb0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 key_sessions[idx 1ddc0 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 3d 20 63 ].identities = c 1ddd0 61 63 6b 65 79 5f 72 65 61 64 5f 69 64 65 6e 74 ackey_read_ident 1dde0 69 74 69 65 73 28 26 63 61 63 6b 65 79 5f 73 6c ities(&cackey_sl 1ddf0 6f 74 73 5b 73 6c 6f 74 49 44 5d 2c 20 26 63 61 ots[slotID], &ca 1de00 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 ckey_sessions[id 1de10 78 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f x].identities_co 1de20 75 6e 74 29 3b 0a 0a 0a 09 09 09 62 72 65 61 6b unt);......break 1de30 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 6d 75 74 65 78 ;...}..}...mutex 1de40 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 1de50 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 1de60 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 1de70 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 1de80 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 1de90 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1dea0 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e Error. Unlockin 1deb0 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 1dec0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 1ded0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 1dee0 69 66 20 28 21 66 6f 75 6e 64 5f 73 65 73 73 69 if (!found_sessi 1def0 6f 6e 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 on) {...CACKEY_D 1df00 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 1df10 75 72 6e 69 6e 67 20 43 4b 52 5f 53 45 53 53 49 urning CKR_SESSI 1df20 4f 4e 5f 43 4f 55 4e 54 20 28 25 69 29 22 2c 20 ON_COUNT (%i)", 1df30 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 43 4f 55 4e CKR_SESSION_COUN 1df40 54 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b T);....return(CK 1df50 52 5f 53 45 53 53 49 4f 4e 5f 43 4f 55 4e 54 29 R_SESSION_COUNT) 1df60 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 1df70 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 1df80 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 1df90 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 )", CKR_OK);...r 1dfa0 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 1dfb0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 1dfc0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 6c TION(CK_RV, C_Cl 1dfd0 6f 73 65 53 65 73 73 69 6f 6e 29 28 43 4b 5f 53 oseSession)(CK_S 1dfe0 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 1dff0 65 73 73 69 6f 6e 29 20 7b 0a 09 69 6e 74 20 6d ession) {..int m 1e000 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 utex_retval;...C 1e010 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1e020 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 1e030 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 1e040 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 1e050 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1e060 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 1e070 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 1e080 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 1e090 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 1e0a0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 LIZED);..}...if 1e0b0 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c (hSession == 0 | 1e0c0 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 | hSession >= (s 1e0d0 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 1e0e0 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 sions) / sizeof( 1e0f0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1e100 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 0]))) {...CACKEY 1e110 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1e120 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f rror. Session o 1e130 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a ut of range.");. 1e140 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 1e150 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 1e160 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 NVALID);..}...mu 1e170 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 1e180 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 key_mutex_lock(c 1e190 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 1e1a0 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 1e1b0 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 1e1c0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1e1d0 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 "Error. Locking 1e1e0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 1e1f0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 1e200 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i 1e210 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 1e220 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 ons[hSession].ac 1e230 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 tive) {...cackey 1e240 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 1e250 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 1e260 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1e270 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 1e280 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 ession not activ 1e290 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 1e2a0 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 1e2b0 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 1e2c0 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 }...cackey_sessi 1e2d0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 ons[hSession].ac 1e2e0 74 69 76 65 20 3d 20 30 3b 0a 09 63 61 63 6b 65 tive = 0;..cacke 1e2f0 79 5f 66 72 65 65 5f 69 64 65 6e 74 69 74 69 65 y_free_identitie 1e300 73 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e s(cackey_session 1e310 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 1e320 74 69 74 69 65 73 2c 20 63 61 63 6b 65 79 5f 73 tities, cackey_s 1e330 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1e340 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 ].identities_cou 1e350 6e 74 29 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 nt);...mutex_ret 1e360 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 1e370 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 1e380 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 1e390 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 1e3a0 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 1e3b0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1e3c0 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 1e3d0 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 1e3e0 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 1e3f0 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b RROR);..}...CACK 1e400 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1e410 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 1e420 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) 1e430 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O 1e440 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 K);.}..CK_DEFINE 1e450 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 1e460 20 43 5f 43 6c 6f 73 65 41 6c 6c 53 65 73 73 69 C_CloseAllSessi 1e470 6f 6e 73 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 ons)(CK_SLOT_ID 1e480 73 6c 6f 74 49 44 29 20 7b 0a 09 75 69 6e 74 33 slotID) {..uint3 1e490 32 5f 74 20 69 64 78 3b 0a 09 69 6e 74 20 6d 75 2_t idx;..int mu 1e4a0 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 tex_retval;...CA 1e4b0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1e4c0 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 1e4d0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 1e4e0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 1e4f0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1e500 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 1e510 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 1e520 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 1e530 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 1e540 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 IZED);..}...if ( 1e550 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c slotID < 0 || sl 1e560 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 otID >= (sizeof( 1e570 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 cackey_slots) / 1e580 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c sizeof(cackey_sl 1e590 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 ots[0]))) {...CA 1e5a0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1e5b0 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 F("Error. Invali 1e5c0 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 d slot requested 1e5d0 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 (%lu), outside 1e5e0 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c of valid range", 1e5f0 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 slotID);....ret 1e600 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f urn(CKR_SLOT_ID_ 1e610 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d INVALID);..}...m 1e620 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 1e630 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( 1e640 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 1e650 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 1e660 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 1e670 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1e680 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e ("Error. Lockin 1e690 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 1e6a0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 1e6b0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 1e6c0 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 if (cackey_slots 1e6d0 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 [slotID].active 1e6e0 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 == 0) {...CACKEY 1e6f0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1e700 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c rror. Invalid sl 1e710 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c ot requested (%l 1e720 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 u), slot not cur 1e730 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20 rently active", 1e740 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b slotID);....cack 1e750 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 1e760 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 1e770 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 1e780 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b LOT_ID_INVALID); 1e790 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d ..}...for (idx = 1e7a0 20 30 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 0; idx < (sizeo 1e7b0 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 1e7c0 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 1e7d0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 ey_sessions[0])) 1e7e0 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 ; idx++) {...if 1e7f0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 1e800 5b 69 64 78 5d 2e 61 63 74 69 76 65 29 20 7b 0a [idx].active) {. 1e810 09 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 ...if (cackey_se 1e820 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 6c 6f 74 ssions[idx].slot 1e830 49 44 20 21 3d 20 73 6c 6f 74 49 44 29 20 7b 0a ID != slotID) {. 1e840 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 ....continue;... 1e850 09 7d 0a 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 .}.....cackey_mu 1e860 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 1e870 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 09 09 43 y_biglock);....C 1e880 5f 43 6c 6f 73 65 53 65 73 73 69 6f 6e 28 69 64 _CloseSession(id 1e890 78 29 3b 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 x);....cackey_mu 1e8a0 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 1e8b0 62 69 67 6c 6f 63 6b 29 3b 0a 09 09 7d 0a 09 7d biglock);...}..} 1e8c0 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 1e8d0 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 = cackey_mutex_u 1e8e0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 1e8f0 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 1e900 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 1e910 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1e920 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1e930 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Unlocking failed 1e940 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1e950 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 1e960 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 1e970 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 1e980 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 urning CKR_OK (% 1e990 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 i)", CKR_OK);... 1e9a0 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a return(CKR_OK);. 1e9b0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 1e9c0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 CTION(CK_RV, C_G 1e9d0 65 74 53 65 73 73 69 6f 6e 49 6e 66 6f 29 28 43 etSessionInfo)(C 1e9e0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 1e9f0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 53 45 hSession, CK_SE 1ea00 53 53 49 4f 4e 5f 49 4e 46 4f 5f 50 54 52 20 70 SSION_INFO_PTR p 1ea10 49 6e 66 6f 29 20 7b 0a 09 69 6e 74 20 6d 75 74 Info) {..int mut 1ea20 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 ex_retval;...CAC 1ea30 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1ea40 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 1ea50 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c f (pInfo == NULL 1ea60 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1ea70 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1ea80 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e . pInfo is NULL. 1ea90 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1eaa0 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 R_ARGUMENTS_BAD) 1eab0 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack 1eac0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1ead0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1eae0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1eaf0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1eb00 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1eb10 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1eb20 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1eb30 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 ...if (hSession 1eb40 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e == 0 || hSession 1eb50 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b >= (sizeof(cack 1eb60 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 1eb70 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 1eb80 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 sions[0]))) {... 1eb90 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1eba0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 NTF("Error. Ses 1ebb0 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 sion out of rang 1ebc0 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 1ebd0 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 1ebe0 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 1ebf0 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 1ec00 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 1ec10 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 1ec20 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 1ec30 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 1ec40 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1ec50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 1ec60 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 1ec70 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1ec80 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 1ec90 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 1eca0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1ecb0 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 on].active) {... 1ecc0 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 1ecd0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1ece0 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 1ecf0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1ed00 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 or. Session not 1ed10 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 active.");..... 1ed20 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 1ed30 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 1ed40 49 44 29 3b 0a 09 7d 0a 0a 09 70 49 6e 66 6f 2d ID);..}...pInfo- 1ed50 3e 73 6c 6f 74 49 44 20 3d 20 63 61 63 6b 65 79 >slotID = cackey 1ed60 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1ed70 6f 6e 5d 2e 73 6c 6f 74 49 44 3b 0a 09 70 49 6e on].slotID;..pIn 1ed80 66 6f 2d 3e 73 74 61 74 65 20 3d 20 63 61 63 6b fo->state = cack 1ed90 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 1eda0 73 69 6f 6e 5d 2e 73 74 61 74 65 3b 0a 09 70 49 sion].state;..pI 1edb0 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 63 61 63 nfo->flags = cac 1edc0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1edd0 73 73 69 6f 6e 5d 2e 66 6c 61 67 73 3b 0a 09 70 ssion].flags;..p 1ede0 49 6e 66 6f 2d 3e 75 6c 44 65 76 69 63 65 45 72 Info->ulDeviceEr 1edf0 72 6f 72 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 ror = cackey_ses 1ee00 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1ee10 75 6c 44 65 76 69 63 65 45 72 72 6f 72 3b 0a 0a ulDeviceError;.. 1ee20 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 1ee30 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 1ee40 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1ee50 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 1ee60 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 1ee70 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1ee80 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e INTF("Error. Un 1ee90 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 locking failed." 1eea0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1eeb0 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 1eec0 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 1eed0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1eee0 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 1eef0 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 1ef00 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 1ef10 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 1ef20 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 ION(CK_RV, C_Get 1ef30 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 29 28 OperationState)( 1ef40 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 1ef50 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 1ef60 59 54 45 5f 50 54 52 20 70 4f 70 65 72 61 74 69 YTE_PTR pOperati 1ef70 6f 6e 53 74 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e onState, CK_ULON 1ef80 47 5f 50 54 52 20 70 75 6c 4f 70 65 72 61 74 69 G_PTR pulOperati 1ef90 6f 6e 53 74 61 74 65 4c 65 6e 29 20 7b 0a 09 43 onStateLen) {..C 1efa0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1efb0 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 1efc0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 1efd0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 1efe0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1eff0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 1f000 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 1f010 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 1f020 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 1f030 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 1f040 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1f050 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1f060 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1f070 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 1f080 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1f090 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 1f0a0 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 1f0b0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1f0c0 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 1f0d0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 1f0e0 53 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 SetOperationStat 1f0f0 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 e)(CK_SESSION_HA 1f100 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 1f110 4b 5f 42 59 54 45 5f 50 54 52 20 70 4f 70 65 72 K_BYTE_PTR pOper 1f120 61 74 69 6f 6e 53 74 61 74 65 2c 20 43 4b 5f 55 ationState, CK_U 1f130 4c 4f 4e 47 20 75 6c 4f 70 65 72 61 74 69 6f 6e LONG ulOperation 1f140 53 74 61 74 65 4c 65 6e 2c 20 43 4b 5f 4f 42 4a StateLen, CK_OBJ 1f150 45 43 54 5f 48 41 4e 44 4c 45 20 68 45 6e 63 72 ECT_HANDLE hEncr 1f160 79 70 74 69 6f 6e 4b 65 79 2c 20 43 4b 5f 4f 42 yptionKey, CK_OB 1f170 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 41 75 74 JECT_HANDLE hAut 1f180 68 65 6e 74 69 63 61 74 69 6f 6e 4b 65 79 29 20 henticationKey) 1f190 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 1f1a0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 1f1b0 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 1f1c0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 1f1d0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1f1e0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 1f1f0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 1f200 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1f210 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 1f220 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 1f230 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1f240 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 1f250 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 1f260 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 1f270 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 1f280 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 1f290 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 1f2a0 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 1f2b0 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN 1f2c0 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 1f2d0 2c 20 43 5f 4c 6f 67 69 6e 29 28 43 4b 5f 53 45 , C_Login)(CK_SE 1f2e0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 1f2f0 73 73 69 6f 6e 2c 20 43 4b 5f 55 53 45 52 5f 54 ssion, CK_USER_T 1f300 59 50 45 20 75 73 65 72 54 79 70 65 2c 20 43 4b YPE userType, CK 1f310 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 50 _UTF8CHAR_PTR pP 1f320 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 in, CK_ULONG ulP 1f330 69 6e 4c 65 6e 29 20 7b 0a 09 43 4b 5f 53 4c 4f inLen) {..CK_SLO 1f340 54 5f 49 44 20 73 6c 6f 74 49 44 3b 0a 09 69 6e T_ID slotID;..in 1f350 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a t mutex_retval;. 1f360 09 69 6e 74 20 74 72 69 65 73 5f 72 65 6d 61 69 .int tries_remai 1f370 6e 69 6e 67 3b 0a 09 69 6e 74 20 6c 6f 67 69 6e ning;..int login 1f380 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 _ret;...CACKEY_D 1f390 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 1f3a0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 1f3b0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 1f3c0 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 1f3d0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1f3e0 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 1f3f0 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 1f400 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 1f410 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1f420 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 ..}...if (hSessi 1f430 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 on == 0 || hSess 1f440 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 ion >= (sizeof(c 1f450 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 ackey_sessions) 1f460 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ 1f470 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b sessions[0]))) { 1f480 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1f490 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1f4a0 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 Session out of r 1f4b0 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 ange.");......re 1f4c0 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 1f4d0 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 1f4e0 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 73 65 72 54 ;..}...if (userT 1f4f0 79 70 65 20 21 3d 20 43 4b 55 5f 55 53 45 52 29 ype != CKU_USER) 1f500 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1f510 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1f520 20 20 57 65 20 6f 6e 6c 79 20 73 75 70 70 6f 72 We only suppor 1f530 74 20 55 53 45 52 20 6d 6f 64 65 2c 20 61 73 6b t USER mode, ask 1f540 65 64 20 66 6f 72 20 25 6c 75 20 6d 6f 64 65 2e ed for %lu mode. 1f550 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 1f560 67 29 20 75 73 65 72 54 79 70 65 29 0a 0a 09 09 g) userType).... 1f570 72 65 74 75 72 6e 28 43 4b 52 5f 55 53 45 52 5f return(CKR_USER_ 1f580 54 59 50 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 TYPE_INVALID);.. 1f590 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 1f5a0 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 1f5b0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 1f5c0 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 1f5d0 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 1f5e0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1f5f0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 1f600 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 1f610 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1f620 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 1f630 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 1f640 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1f650 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 on].active) {... 1f660 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 1f670 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1f680 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 1f690 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1f6a0 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 or. Session not 1f6b0 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 active.");..... 1f6c0 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 1f6d0 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 1f6e0 49 44 29 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 49 44 ID);..}...slotID 1f6f0 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f = cackey_sessio 1f700 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f ns[hSession].slo 1f710 74 49 44 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 49 tID;...if (slotI 1f720 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 D < 0 || slotID 1f730 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 >= (sizeof(cacke 1f740 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f y_slots) / sizeo 1f750 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 f(cackey_slots[0 1f760 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ]))) {...CACKEY_ 1f770 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1f780 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f ror. Invalid slo 1f790 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 t requested (%lu 1f7a0 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 ), outside of va 1f7b0 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 lid range", slot 1f7c0 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 ID);....return(C 1f7d0 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 1f7e0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b );..}...if (cack 1f7f0 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d ey_slots[slotID] 1f800 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a .active == 0) {. 1f810 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1f820 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e RINTF("Error. In 1f830 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 valid slot reque 1f840 73 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 sted (%lu), slot 1f850 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 not currently a 1f860 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b ctive", slotID); 1f870 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 ....cackey_mutex 1f880 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 1f890 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 iglock);....retu 1f8a0 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 1f8b0 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 6c 6f 67 69 RROR);..}...logi 1f8c0 6e 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 6c n_ret = cackey_l 1f8d0 6f 67 69 6e 28 26 63 61 63 6b 65 79 5f 73 6c 6f ogin(&cackey_slo 1f8e0 74 73 5b 73 6c 6f 74 49 44 5d 2c 20 70 50 69 6e ts[slotID], pPin 1f8f0 2c 20 75 6c 50 69 6e 4c 65 6e 2c 20 26 74 72 69 , ulPinLen, &tri 1f900 65 73 5f 72 65 6d 61 69 6e 69 6e 67 29 3b 0a 09 es_remaining);.. 1f910 69 66 20 28 6c 6f 67 69 6e 5f 72 65 74 20 21 3d if (login_ret != 1f920 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f CACKEY_PCSC_S_O 1f930 4b 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 K) {...cackey_mu 1f940 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 1f950 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 69 y_biglock);....i 1f960 66 20 28 6c 6f 67 69 6e 5f 72 65 74 20 3d 3d 20 f (login_ret == 1f970 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 4c 4f CACKEY_PCSC_E_LO 1f980 43 4b 45 44 29 20 7b 0a 09 09 09 43 41 43 4b 45 CKED) {....CACKE 1f990 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1f9a0 45 72 72 6f 72 2e 20 20 54 6f 6b 65 6e 20 69 73 Error. Token is 1f9b0 20 6c 6f 63 6b 65 64 2e 22 29 3b 0a 0a 09 09 09 locked.");..... 1f9c0 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo 1f9d0 74 49 44 5d 2e 74 6f 6b 65 6e 5f 66 6c 61 67 73 tID].token_flags 1f9e0 20 7c 3d 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e |= CKF_USER_PIN 1f9f0 5f 4c 4f 43 4b 45 44 3b 0a 0a 09 09 09 72 65 74 _LOCKED;.....ret 1fa00 75 72 6e 28 43 4b 52 5f 50 49 4e 5f 4c 4f 43 4b urn(CKR_PIN_LOCK 1fa10 45 44 29 3b 0a 09 09 7d 20 65 6c 73 65 20 69 66 ED);...} else if 1fa20 20 28 6c 6f 67 69 6e 5f 72 65 74 20 3d 3d 20 43 (login_ret == C 1fa30 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 42 41 44 ACKEY_PCSC_E_BAD 1fa40 50 49 4e 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 PIN) {....CACKEY 1fa50 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1fa60 72 72 6f 72 2e 20 20 49 6e 76 61 6c 69 64 20 50 rror. Invalid P 1fa70 49 4e 2e 22 29 3b 0a 0a 09 09 09 63 61 63 6b 65 IN.");.....cacke 1fa80 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e y_slots[slotID]. 1fa90 74 6f 6b 65 6e 5f 66 6c 61 67 73 20 7c 3d 20 43 token_flags |= C 1faa0 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 43 4f 55 4e KF_USER_PIN_COUN 1fab0 54 5f 4c 4f 57 3b 0a 0a 09 09 09 69 66 20 28 74 T_LOW;.....if (t 1fac0 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 20 3d ries_remaining = 1fad0 3d 20 31 29 20 7b 0a 09 09 09 09 63 61 63 6b 65 = 1) {.....cacke 1fae0 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e y_slots[slotID]. 1faf0 74 6f 6b 65 6e 5f 66 6c 61 67 73 20 7c 3d 20 43 token_flags |= C 1fb00 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 46 49 4e 41 KF_USER_PIN_FINA 1fb10 4c 5f 54 52 59 3b 0a 09 09 09 7d 0a 0a 09 09 09 L_TRY;....}..... 1fb20 72 65 74 75 72 6e 28 43 4b 52 5f 50 49 4e 5f 49 return(CKR_PIN_I 1fb30 4e 43 4f 52 52 45 43 54 29 3b 0a 09 09 7d 0a 0a NCORRECT);...}.. 1fb40 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1fb50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 RINTF("Error. U 1fb60 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72 20 72 65 74 nknown error ret 1fb70 75 72 6e 65 64 20 66 72 6f 6d 20 63 61 63 6b 65 urned from cacke 1fb80 79 5f 6c 6f 67 69 6e 28 29 20 28 25 69 29 22 2c y_login() (%i)", 1fb90 20 6c 6f 67 69 6e 5f 72 65 74 29 3b 0a 0a 09 09 login_ret);.... 1fba0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 1fbb0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 1fbc0 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo 1fbd0 74 49 44 5d 2e 74 6f 6b 65 6e 5f 66 6c 61 67 73 tID].token_flags 1fbe0 20 26 3d 20 7e 28 43 4b 46 5f 55 53 45 52 5f 50 &= ~(CKF_USER_P 1fbf0 49 4e 5f 4c 4f 43 4b 45 44 20 7c 20 43 4b 46 5f IN_LOCKED | CKF_ 1fc00 55 53 45 52 5f 50 49 4e 5f 43 4f 55 4e 54 5f 4c USER_PIN_COUNT_L 1fc10 4f 57 20 7c 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52 OW | CKF_LOGIN_R 1fc20 45 51 55 49 52 45 44 20 7c 20 43 4b 46 5f 55 53 EQUIRED | CKF_US 1fc30 45 52 5f 50 49 4e 5f 46 49 4e 41 4c 5f 54 52 59 ER_PIN_FINAL_TRY 1fc40 29 3b 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 );...cackey_sess 1fc50 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 1fc60 74 61 74 65 20 3d 20 43 4b 53 5f 52 4f 5f 55 53 tate = CKS_RO_US 1fc70 45 52 5f 46 55 4e 43 54 49 4f 4e 53 3b 0a 0a 09 ER_FUNCTIONS;... 1fc80 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 1fc90 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 1fca0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 1fcb0 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 1fcc0 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 1fcd0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1fce0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c NTF("Error. Unl 1fcf0 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 1fd00 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1fd10 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 1fd20 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 1fd30 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 1fd40 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 1fd50 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret 1fd60 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}.. 1fd70 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 1fd80 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 4c 6f 67 6f ON(CK_RV, C_Logo 1fd90 75 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 ut)(CK_SESSION_H 1fda0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 20 ANDLE hSession) 1fdb0 7b 0a 09 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c {..CK_SLOT_ID sl 1fdc0 6f 74 49 44 3b 0a 09 69 6e 74 20 6d 75 74 65 78 otID;..int mutex 1fdd0 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 _retval;...CACKE 1fde0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1fdf0 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 1fe00 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 1fe10 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 1fe20 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1fe30 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 1fe40 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 1fe50 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 1fe60 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 1fe70 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 D);..}...if (hSe 1fe80 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 ssion == 0 || hS 1fe90 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f ession >= (sizeo 1fea0 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 1feb0 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 1fec0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 ey_sessions[0])) 1fed0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1fee0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1fef0 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f . Session out o 1ff00 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 f range.");..... 1ff10 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 1ff20 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 1ff30 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f ID);..}...mutex_ 1ff40 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 1ff50 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 mutex_lock(cacke 1ff60 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 1ff70 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 1ff80 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 1ff90 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1ffa0 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 or. Locking fai 1ffb0 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 1ffc0 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 1ffd0 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 ROR);..}...if (! 1ffe0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1fff0 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 hSession].active 20000 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 20010 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 20020 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 20030 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 20040 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 20050 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 on not active.") 20060 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 20070 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 20080 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 20090 73 6c 6f 74 49 44 20 3d 20 63 61 63 6b 65 79 5f slotID = cackey_ 200a0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 200b0 6e 5d 2e 73 6c 6f 74 49 44 3b 0a 0a 09 69 66 20 n].slotID;...if 200c0 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 (slotID < 0 || s 200d0 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 lotID >= (sizeof 200e0 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f (cackey_slots) / 200f0 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s 20100 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 lots[0]))) {...C 20110 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 20120 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c TF("Error. Inval 20130 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 id slot requeste 20140 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 d (%lu), outside 20150 20 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 of valid range" 20160 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 , slotID);....re 20170 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 20180 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 _ERROR);..}...if 20190 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 (cackey_slots[s 201a0 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d lotID].active == 201b0 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 201c0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 201d0 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 or. Invalid slot 201e0 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 requested (%lu) 201f0 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65 , slot not curre 20200 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20 73 6c ntly active", sl 20210 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b 65 79 otID);....cackey 20220 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 20230 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 20240 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 20250 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 20260 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 20270 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 74 61 74 s[hSession].stat 20280 65 20 3d 20 43 4b 53 5f 52 4f 5f 50 55 42 4c 49 e = CKS_RO_PUBLI 20290 43 5f 53 45 53 53 49 4f 4e 3b 0a 09 63 61 63 6b C_SESSION;..cack 202a0 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d ey_slots[slotID] 202b0 2e 74 6f 6b 65 6e 5f 66 6c 61 67 73 20 3d 20 43 .token_flags = C 202c0 4b 46 5f 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 KF_LOGIN_REQUIRE 202d0 44 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 D;...mutex_retva 202e0 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 202f0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 20300 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 20310 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 20320 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 20330 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 20340 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c Unlocking fail 20350 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 20360 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 20370 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 OR);..}...CACKEY 20380 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 20390 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 eturning CKR_OK 203a0 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a (%i)", CKR_OK);. 203b0 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 ..return(CKR_OK) 203c0 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 203d0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 203e0 5f 43 72 65 61 74 65 4f 62 6a 65 63 74 29 28 43 _CreateObject)(C 203f0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 20400 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 41 54 hSession, CK_AT 20410 54 52 49 42 55 54 45 5f 50 54 52 20 70 54 65 6d TRIBUTE_PTR pTem 20420 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 plate, CK_ULONG 20430 75 6c 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 ulCount, CK_OBJE 20440 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 CT_HANDLE_PTR ph 20450 4f 62 6a 65 63 74 29 20 7b 0a 09 43 41 43 4b 45 Object) {..CACKE 20460 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 20470 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 20480 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 20490 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 204a0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 204b0 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 204c0 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 204d0 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 204e0 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 204f0 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f D);..}...CACKEY_ 20500 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 20510 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 turning CKR_FUNC 20520 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 20530 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 ED (%i)", CKR_FU 20540 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 20550 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 RTED);...return( 20560 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 20570 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a _SUPPORTED);.}.. 20580 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 20590 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 6f 70 79 ON(CK_RV, C_Copy 205a0 4f 62 6a 65 63 74 29 28 43 4b 5f 53 45 53 53 49 Object)(CK_SESSI 205b0 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 205c0 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 on, CK_OBJECT_HA 205d0 4e 44 4c 45 20 68 4f 62 6a 65 63 74 2c 20 43 4b NDLE hObject, CK 205e0 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 _ATTRIBUTE_PTR p 205f0 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f Template, CK_ULO 20600 4e 47 20 75 6c 43 6f 75 6e 74 2c 20 43 4b 5f 4f NG ulCount, CK_O 20610 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 BJECT_HANDLE_PTR 20620 20 70 68 4e 65 77 4f 62 6a 65 63 74 29 20 7b 0a phNewObject) {. 20630 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 20640 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 20650 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 20660 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 20670 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 20680 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 20690 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 206a0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 206b0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 206c0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 206d0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 206e0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 206f0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 20700 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 20710 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 20720 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 20730 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 20740 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 20750 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 20760 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 20770 43 5f 44 65 73 74 72 6f 79 4f 62 6a 65 63 74 29 C_DestroyObject) 20780 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 20790 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 207a0 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f OBJECT_HANDLE hO 207b0 62 6a 65 63 74 29 20 7b 0a 09 43 41 43 4b 45 59 bject) {..CACKEY 207c0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 207d0 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 207e0 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 207f0 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 20800 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 20810 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 20820 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 20830 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 20840 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 20850 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 20860 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 20870 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 20880 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 20890 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 208a0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 208b0 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 208c0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 208d0 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 208e0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 208f0 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 4f 62 N(CK_RV, C_GetOb 20900 6a 65 63 74 53 69 7a 65 29 28 43 4b 5f 53 45 53 jectSize)(CK_SES 20910 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 20920 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f sion, CK_OBJECT_ 20930 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 74 2c 20 HANDLE hObject, 20940 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 20950 53 69 7a 65 29 20 7b 0a 09 43 41 43 4b 45 59 5f Size) {..CACKEY_ 20960 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 20970 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 20980 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 20990 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 209a0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 209b0 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 209c0 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 209d0 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 209e0 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 209f0 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 20a00 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 20a10 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 rning CKR_FUNCTI 20a20 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 20a30 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 (%i)", CKR_FUNC 20a40 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 20a50 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK 20a60 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 20a70 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b UPPORTED);.}..CK 20a80 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 20a90 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 41 74 74 (CK_RV, C_GetAtt 20aa0 72 69 62 75 74 65 56 61 6c 75 65 29 28 43 4b 5f ributeValue)(CK_ 20ab0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 20ac0 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 Session, CK_OBJE 20ad0 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 CT_HANDLE hObjec 20ae0 74 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f t, CK_ATTRIBUTE_ 20af0 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 PTR pTemplate, C 20b00 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 29 K_ULONG ulCount) 20b10 20 7b 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 {..CK_ATTRIBUTE 20b20 20 2a 63 75 72 72 5f 61 74 74 72 3b 0a 09 73 74 *curr_attr;..st 20b30 72 75 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e ruct cackey_iden 20b40 74 69 74 79 20 2a 69 64 65 6e 74 69 74 79 3b 0a tity *identity;. 20b50 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 .unsigned long i 20b60 64 65 6e 74 69 74 79 5f 69 64 78 2c 20 61 74 74 dentity_idx, att 20b70 72 5f 69 64 78 2c 20 73 65 73 73 5f 61 74 74 72 r_idx, sess_attr 20b80 5f 69 64 78 2c 20 6e 75 6d 5f 69 64 73 3b 0a 09 _idx, num_ids;.. 20b90 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c int mutex_retval 20ba0 3b 0a 09 43 4b 5f 52 56 20 72 65 74 76 61 6c 20 ;..CK_RV retval 20bb0 3d 20 43 4b 52 5f 4f 4b 3b 0a 09 43 4b 5f 56 4f = CKR_OK;..CK_VO 20bc0 49 44 5f 50 54 52 20 70 56 61 6c 75 65 3b 0a 09 ID_PTR pValue;.. 20bd0 43 4b 5f 55 4c 4f 4e 47 20 75 6c 56 61 6c 75 65 CK_ULONG ulValue 20be0 4c 65 6e 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 Len;...CACKEY_DE 20bf0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 20c00 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 20c10 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 20c20 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 20c30 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 20c40 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 20c50 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 20c60 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 20c70 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 20c80 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f .}...if (hSessio 20c90 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 n == 0 || hSessi 20ca0 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 on >= (sizeof(ca 20cb0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f ckey_sessions) / 20cc0 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 sizeof(cackey_s 20cd0 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a essions[0]))) {. 20ce0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 20cf0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 20d00 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 ession out of ra 20d10 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 nge.");......ret 20d20 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f urn(CKR_SESSION_ 20d30 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b HANDLE_INVALID); 20d40 0a 09 7d 0a 0a 09 69 66 20 28 68 4f 62 6a 65 63 ..}...if (hObjec 20d50 74 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b t == 0) {...CACK 20d60 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 20d70 22 45 72 72 6f 72 2e 20 20 4f 62 6a 65 63 74 20 "Error. Object 20d80 68 61 6e 64 6c 65 20 6f 75 74 20 6f 66 20 72 61 handle out of ra 20d90 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 nge.");......ret 20da0 75 72 6e 28 43 4b 52 5f 4f 42 4a 45 43 54 5f 48 urn(CKR_OBJECT_H 20db0 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a ANDLE_INVALID);. 20dc0 09 7d 0a 0a 09 69 66 20 28 75 6c 43 6f 75 6e 74 .}...if (ulCount 20dd0 20 3d 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 == 0) {.../* Sh 20de0 6f 72 74 20 63 69 72 63 75 69 74 2c 20 69 66 20 ort circuit, if 20df0 7a 65 72 6f 20 6f 62 6a 65 63 74 73 20 77 65 72 zero objects wer 20e00 65 20 73 70 65 63 69 66 69 65 64 20 72 65 74 75 e specified retu 20e10 72 6e 20 7a 65 72 6f 20 69 74 65 6d 73 20 69 6d rn zero items im 20e20 6d 65 64 69 61 74 65 6c 79 20 2a 2f 0a 09 09 43 mediately */...C 20e30 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 20e40 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 20e50 52 5f 4f 4b 20 28 25 69 29 20 28 73 68 6f 72 74 R_OK (%i) (short 20e60 20 63 69 72 63 75 69 74 29 22 2c 20 43 4b 52 5f circuit)", CKR_ 20e70 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 OK);....return(C 20e80 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 KR_OK);..}...if 20e90 28 70 54 65 6d 70 6c 61 74 65 20 3d 3d 20 4e 55 (pTemplate == NU 20ea0 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 20eb0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 20ec0 6f 72 2e 20 20 70 54 65 6d 70 6c 61 74 65 20 69 or. pTemplate i 20ed0 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 s NULL.");....re 20ee0 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 20ef0 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 64 TS_BAD);..}...id 20f00 65 6e 74 69 74 79 5f 69 64 78 20 3d 20 68 4f 62 entity_idx = hOb 20f10 6a 65 63 74 20 2d 20 31 3b 0a 0a 09 6d 75 74 65 ject - 1;...mute 20f20 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 20f30 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 y_mutex_lock(cac 20f40 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 20f50 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 20f60 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 20f70 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 20f80 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 rror. Locking f 20f90 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 ailed.");....ret 20fa0 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 20fb0 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 ERROR);..}...if 20fc0 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (!cackey_session 20fd0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 s[hSession].acti 20fe0 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d ve) {...cackey_m 20ff0 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 21000 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 21010 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 21020 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 NTF("Error. Ses 21030 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e sion not active. 21040 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 ");......return( 21050 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 CKR_SESSION_HAND 21060 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a LE_INVALID);..}. 21070 0a 09 6e 75 6d 5f 69 64 73 20 3d 20 63 61 63 6b ..num_ids = cack 21080 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 21090 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 sion].identities 210a0 5f 63 6f 75 6e 74 3b 0a 0a 09 69 66 20 28 69 64 _count;...if (id 210b0 65 6e 74 69 74 79 5f 69 64 78 20 3e 3d 20 6e 75 entity_idx >= nu 210c0 6d 5f 69 64 73 29 20 7b 0a 09 09 63 61 63 6b 65 m_ids) {...cacke 210d0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 210e0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 210f0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 21100 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 21110 4f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 6f 75 Object handle ou 21120 74 20 6f 66 20 72 61 6e 67 65 2e 20 20 69 64 65 t of range. ide 21130 6e 74 69 74 79 5f 69 64 78 20 3d 20 25 6c 75 2c ntity_idx = %lu, 21140 20 6e 75 6d 5f 69 64 73 20 3d 20 25 6c 75 2e 22 num_ids = %lu." 21150 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 21160 29 20 69 64 65 6e 74 69 74 79 5f 69 64 78 2c 20 ) identity_idx, 21170 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 21180 6e 75 6d 5f 69 64 73 29 3b 0a 0a 09 09 72 65 74 num_ids);....ret 21190 75 72 6e 28 43 4b 52 5f 4f 42 4a 45 43 54 5f 48 urn(CKR_OBJECT_H 211a0 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a ANDLE_INVALID);. 211b0 09 7d 0a 0a 09 69 64 65 6e 74 69 74 79 20 3d 20 .}...identity = 211c0 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 &cackey_sessions 211d0 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 [hSession].ident 211e0 69 74 69 65 73 5b 69 64 65 6e 74 69 74 79 5f 69 ities[identity_i 211f0 64 78 5d 3b 0a 0a 09 66 6f 72 20 28 61 74 74 72 dx];...for (attr 21200 5f 69 64 78 20 3d 20 30 3b 20 61 74 74 72 5f 69 _idx = 0; attr_i 21210 64 78 20 3c 20 75 6c 43 6f 75 6e 74 3b 20 61 74 dx < ulCount; at 21220 74 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 63 75 tr_idx++) {...cu 21230 72 72 5f 61 74 74 72 20 3d 20 26 70 54 65 6d 70 rr_attr = &pTemp 21240 6c 61 74 65 5b 61 74 74 72 5f 69 64 78 5d 3b 0a late[attr_idx];. 21250 0a 09 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c ...pValue = NULL 21260 3b 0a 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ;...ulValueLen = 21270 20 28 43 4b 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 0a (CK_LONG) -1;.. 21280 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 21290 52 49 4e 54 46 28 22 4c 6f 6f 6b 69 6e 67 20 66 RINTF("Looking f 212a0 6f 72 20 61 74 74 72 69 62 75 74 65 20 30 78 25 or attribute 0x% 212b0 30 38 6c 78 20 28 69 64 65 6e 74 69 74 79 3a 25 08lx (identity:% 212c0 6c 75 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lu) ...", (unsig 212d0 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a 212e0 74 74 72 2d 3e 74 79 70 65 2c 20 28 75 6e 73 69 ttr->type, (unsi 212f0 67 6e 65 64 20 6c 6f 6e 67 29 20 69 64 65 6e 74 gned long) ident 21300 69 74 79 5f 69 64 78 29 3b 0a 0a 09 09 66 6f 72 ity_idx);....for 21310 20 28 73 65 73 73 5f 61 74 74 72 5f 69 64 78 20 (sess_attr_idx 21320 3d 20 30 3b 20 73 65 73 73 5f 61 74 74 72 5f 69 = 0; sess_attr_i 21330 64 78 20 3c 20 69 64 65 6e 74 69 74 79 2d 3e 61 dx < identity->a 21340 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 3b ttributes_count; 21350 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 2b 2b sess_attr_idx++ 21360 29 20 7b 0a 09 09 09 69 66 20 28 69 64 65 6e 74 ) {....if (ident 21370 69 74 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5b ity->attributes[ 21380 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 74 sess_attr_idx].t 21390 79 70 65 20 3d 3d 20 63 75 72 72 5f 61 74 74 72 ype == curr_attr 213a0 2d 3e 74 79 70 65 29 20 7b 0a 09 09 09 09 43 41 ->type) {.....CA 213b0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 213c0 46 28 22 20 2e 2e 2e 20 66 6f 75 6e 64 20 69 74 F(" ... found it 213d0 2c 20 70 56 61 6c 75 65 20 3d 20 25 70 2c 20 75 , pValue = %p, u 213e0 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 25 6c 75 22 lValueLen = %lu" 213f0 2c 20 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 , identity->attr 21400 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 ibutes[sess_attr 21410 5f 69 64 78 5d 2e 70 56 61 6c 75 65 2c 20 69 64 _idx].pValue, id 21420 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 75 74 entity->attribut 21430 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 es[sess_attr_idx 21440 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 09 ].ulValueLen);.. 21450 09 09 09 0a 09 09 09 09 70 56 61 6c 75 65 20 3d ........pValue = 21460 20 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 identity->attri 21470 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f butes[sess_attr_ 21480 69 64 78 5d 2e 70 56 61 6c 75 65 3b 0a 09 09 09 idx].pValue;.... 21490 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 69 64 .ulValueLen = id 214a0 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 75 74 entity->attribut 214b0 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 es[sess_attr_idx 214c0 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a 09 09 ].ulValueLen;... 214d0 09 7d 0a 09 09 7d 0a 0a 09 09 69 66 20 28 63 75 .}...}....if (cu 214e0 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 20 rr_attr->pValue 214f0 26 26 20 70 56 61 6c 75 65 29 20 7b 0a 09 09 09 && pValue) {.... 21500 69 66 20 28 63 75 72 72 5f 61 74 74 72 2d 3e 75 if (curr_attr->u 21510 6c 56 61 6c 75 65 4c 65 6e 20 3e 3d 20 75 6c 56 lValueLen >= ulV 21520 61 6c 75 65 4c 65 6e 29 20 7b 0a 09 09 09 09 6d alueLen) {.....m 21530 65 6d 63 70 79 28 63 75 72 72 5f 61 74 74 72 2d emcpy(curr_attr- 21540 3e 70 56 61 6c 75 65 2c 20 70 56 61 6c 75 65 2c >pValue, pValue, 21550 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 ulValueLen);... 21560 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 75 6c .} else {.....ul 21570 56 61 6c 75 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c ValueLen = (CK_L 21580 4f 4e 47 29 20 2d 31 3b 0a 0a 09 09 09 09 72 65 ONG) -1;......re 21590 74 76 61 6c 20 3d 20 43 4b 52 5f 42 55 46 46 45 tval = CKR_BUFFE 215a0 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b 0a 09 09 09 R_TOO_SMALL;.... 215b0 7d 0a 09 09 7d 0a 0a 09 09 63 75 72 72 5f 61 74 }...}....curr_at 215c0 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 20 3d tr->ulValueLen = 215d0 20 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a 09 7d 0a ulValueLen;..}. 215e0 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d ..mutex_retval = 215f0 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e cackey_mutex_un 21600 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 21610 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 21620 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 21630 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 21640 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 RINTF("Error. U 21650 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e nlocking failed. 21660 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 21670 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 21680 3b 0a 09 7d 0a 0a 09 69 66 20 28 72 65 74 76 61 ;..}...if (retva 21690 6c 20 3d 3d 20 43 4b 52 5f 41 54 54 52 49 42 55 l == CKR_ATTRIBU 216a0 54 45 5f 54 59 50 45 5f 49 4e 56 41 4c 49 44 29 TE_TYPE_INVALID) 216b0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 216c0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 216d0 69 6e 67 20 43 4b 52 5f 41 54 54 52 49 42 55 54 ing CKR_ATTRIBUT 216e0 45 5f 54 59 50 45 5f 49 4e 56 41 4c 49 44 20 28 E_TYPE_INVALID ( 216f0 25 69 29 22 2c 20 28 69 6e 74 29 20 72 65 74 76 %i)", (int) retv 21700 61 6c 29 3b 0a 09 7d 20 65 6c 73 65 20 69 66 20 al);..} else if 21710 28 72 65 74 76 61 6c 20 3d 3d 20 43 4b 52 5f 42 (retval == CKR_B 21720 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 UFFER_TOO_SMALL) 21730 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 21740 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 21750 69 6e 67 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 ing CKR_BUFFER_T 21760 4f 4f 5f 53 4d 41 4c 4c 20 28 25 69 29 22 2c 20 OO_SMALL (%i)", 21770 28 69 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a 09 (int) retval);.. 21780 7d 20 65 6c 73 65 20 69 66 20 28 72 65 74 76 61 } else if (retva 21790 6c 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 l == CKR_OK) {.. 217a0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 217b0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 217c0 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 28 69 CKR_OK (%i)", (i 217d0 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a 09 7d 20 nt) retval);..} 217e0 65 6c 73 65 20 7b 0a 09 09 43 41 43 4b 45 59 5f else {...CACKEY_ 217f0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 21800 74 75 72 6e 69 6e 67 20 25 69 22 2c 20 28 69 6e turning %i", (in 21810 74 29 20 72 65 74 76 61 6c 29 3b 0a 09 7d 0a 0a t) retval);..}.. 21820 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b .return(retval); 21830 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 21840 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 21850 53 65 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 SetAttributeValu 21860 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 e)(CK_SESSION_HA 21870 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 21880 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 K_OBJECT_HANDLE 21890 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 41 54 54 52 hObject, CK_ATTR 218a0 49 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c IBUTE_PTR pTempl 218b0 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c ate, CK_ULONG ul 218c0 43 6f 75 6e 74 29 20 7b 0a 09 43 41 43 4b 45 59 Count) {..CACKEY 218d0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 218e0 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 218f0 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 21900 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 21910 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 21920 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 21930 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 21940 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 21950 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 21960 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 21970 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 21980 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 21990 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 219a0 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 219b0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 219c0 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 219d0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 219e0 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 219f0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 21a00 4e 28 43 4b 5f 52 56 2c 20 43 5f 46 69 6e 64 4f N(CK_RV, C_FindO 21a10 62 6a 65 63 74 73 49 6e 69 74 29 28 43 4b 5f 53 bjectsInit)(CK_S 21a20 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 21a30 65 73 73 69 6f 6e 2c 20 43 4b 5f 41 54 54 52 49 ession, CK_ATTRI 21a40 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 BUTE_PTR pTempla 21a50 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 te, CK_ULONG ulC 21a60 6f 75 6e 74 29 20 7b 0a 09 43 4b 5f 53 4c 4f 54 ount) {..CK_SLOT 21a70 5f 49 44 20 73 6c 6f 74 49 44 3b 0a 09 43 4b 5f _ID slotID;..CK_ 21a80 55 4c 4f 4e 47 20 69 64 78 3b 0a 09 69 6e 74 20 ULONG idx;..int 21a90 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 mutex_retval;... 21aa0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 21ab0 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 21ac0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 21ad0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 21ae0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 21af0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 21b00 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 21b10 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 21b20 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 21b30 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 21b40 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 (hSession == 0 21b50 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 || hSession >= ( 21b60 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 21b70 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 21b80 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 21b90 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE 21ba0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 21bb0 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 21bc0 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b out of range."); 21bd0 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 21be0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 21bf0 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d INVALID);..}...m 21c00 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 21c10 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( 21c20 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 21c30 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 21c40 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 21c50 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 21c60 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e ("Error. Lockin 21c70 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 21c80 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 21c90 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 21ca0 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 if (!cackey_sess 21cb0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 ions[hSession].a 21cc0 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 ctive) {...cacke 21cd0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 21ce0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 21cf0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 21d00 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 21d10 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 Session not acti 21d20 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 ve.");......retu 21d30 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 rn(CKR_SESSION_H 21d40 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a ANDLE_INVALID);. 21d50 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f .}...if (cackey_ 21d60 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 21d70 6e 5d 2e 73 65 61 72 63 68 5f 61 63 74 69 76 65 n].search_active 21d80 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 21d90 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 21da0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 21db0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 21dc0 46 28 22 45 72 72 6f 72 2e 20 20 53 65 61 72 63 F("Error. Searc 21dd0 68 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 h already active 21de0 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 21df0 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 41 (CKR_OPERATION_A 21e00 43 54 49 56 45 29 3b 0a 09 7d 0a 0a 09 73 6c 6f CTIVE);..}...slo 21e10 74 49 44 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 tID = cackey_ses 21e20 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 21e30 73 6c 6f 74 49 44 3b 0a 0a 09 69 66 20 28 73 6c slotID;...if (sl 21e40 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 otID < 0 || slot 21e50 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 ID >= (sizeof(ca 21e60 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 ckey_slots) / si 21e70 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 21e80 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b s[0]))) {...CACK 21e90 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 21ea0 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 "Error. Invalid 21eb0 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 slot requested ( 21ec0 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 %lu), outside of 21ed0 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 valid range", s 21ee0 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 lotID);....retur 21ef0 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 21f00 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 ROR);..}...if (c 21f10 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 ackey_slots[slot 21f20 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 ID].active == 0) 21f30 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 21f40 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 21f50 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 Invalid slot re 21f60 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 73 quested (%lu), s 21f70 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c lot not currentl 21f80 79 20 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 y active", slotI 21f90 44 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 D);....cackey_mu 21fa0 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 21fb0 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 y_biglock);....r 21fc0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 21fd0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i 21fe0 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b f (cackey_slots[ 21ff0 73 6c 6f 74 49 44 5d 2e 73 6c 6f 74 5f 72 65 73 slotID].slot_res 22000 65 74 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 et) {...CACKEY_D 22010 45 42 55 47 5f 50 52 49 4e 54 46 28 22 54 68 65 EBUG_PRINTF("The 22020 20 73 6c 6f 74 20 68 61 73 20 62 65 65 6e 20 72 slot has been r 22030 65 73 65 74 20 73 69 6e 63 65 20 77 65 20 6c 61 eset since we la 22040 73 74 20 6c 6f 6f 6b 65 64 20 66 6f 72 20 69 64 st looked for id 22050 65 6e 74 69 74 69 65 73 20 2d 2d 20 72 65 73 63 entities -- resc 22060 61 6e 6e 69 6e 67 22 29 3b 0a 0a 09 09 69 66 20 anning");....if 22070 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 22080 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 [hSession].ident 22090 69 74 69 65 73 20 21 3d 20 4e 55 4c 4c 29 20 7b ities != NULL) { 220a0 0a 09 09 09 63 61 63 6b 65 79 5f 66 72 65 65 5f ....cackey_free_ 220b0 69 64 65 6e 74 69 74 69 65 73 28 63 61 63 6b 65 identities(cacke 220c0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 220d0 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 2c ion].identities, 220e0 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 220f0 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 [hSession].ident 22100 69 74 69 65 73 5f 63 6f 75 6e 74 29 3b 0a 0a 09 ities_count);... 22110 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 22120 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 22130 74 69 74 69 65 73 20 3d 20 4e 55 4c 4c 3b 0a 09 tities = NULL;.. 22140 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 22150 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 22160 74 69 74 69 65 73 5f 63 6f 75 6e 74 20 3d 20 30 tities_count = 0 22170 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 63 61 63 ;...}....if (cac 22180 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 key_slots[slotID 22190 5d 2e 6c 61 62 65 6c 20 21 3d 20 4e 55 4c 4c 29 ].label != NULL) 221a0 20 7b 0a 09 09 09 66 72 65 65 28 63 61 63 6b 65 {....free(cacke 221b0 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e y_slots[slotID]. 221c0 6c 61 62 65 6c 29 3b 0a 09 09 09 63 61 63 6b 65 label);....cacke 221d0 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e y_slots[slotID]. 221e0 6c 61 62 65 6c 20 3d 20 4e 55 4c 4c 3b 0a 09 09 label = NULL;... 221f0 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 61 72 6b }....cackey_mark 22200 5f 73 6c 6f 74 5f 72 65 73 65 74 28 26 63 61 63 _slot_reset(&cac 22210 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 key_slots[slotID 22220 5d 29 3b 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f ]);...cackey_slo 22230 74 73 5b 73 6c 6f 74 49 44 5d 2e 73 6c 6f 74 5f ts[slotID].slot_ 22240 72 65 73 65 74 20 3d 20 30 3b 0a 09 7d 0a 0a 09 reset = 0;..}... 22250 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 if (cackey_sessi 22260 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 ons[hSession].id 22270 65 6e 74 69 74 69 65 73 20 3d 3d 20 4e 55 4c 4c entities == NULL 22280 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 ) {...cackey_ses 22290 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 222a0 69 64 65 6e 74 69 74 69 65 73 20 3d 20 63 61 63 identities = cac 222b0 6b 65 79 5f 72 65 61 64 5f 69 64 65 6e 74 69 74 key_read_identit 222c0 69 65 73 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 ies(&cackey_slot 222d0 73 5b 73 6c 6f 74 49 44 5d 2c 20 26 63 61 63 6b s[slotID], &cack 222e0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 222f0 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 sion].identities 22300 5f 63 6f 75 6e 74 29 3b 0a 09 7d 0a 0a 09 69 66 _count);..}...if 22310 20 28 70 54 65 6d 70 6c 61 74 65 20 21 3d 20 4e (pTemplate != N 22320 55 4c 4c 29 20 7b 0a 09 09 69 66 20 28 75 6c 43 ULL) {...if (ulC 22330 6f 75 6e 74 20 21 3d 20 30 29 20 7b 0a 09 09 09 ount != 0) {.... 22340 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 22350 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 hSession].search 22360 5f 71 75 65 72 79 5f 63 6f 75 6e 74 20 3d 20 75 _query_count = u 22370 6c 43 6f 75 6e 74 3b 0a 09 09 09 63 61 63 6b 65 lCount;....cacke 22380 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 22390 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 ion].search_quer 223a0 79 20 3d 20 6d 61 6c 6c 6f 63 28 75 6c 43 6f 75 y = malloc(ulCou 223b0 6e 74 20 2a 20 73 69 7a 65 6f 66 28 2a 70 54 65 nt * sizeof(*pTe 223c0 6d 70 6c 61 74 65 29 29 3b 0a 0a 09 09 09 6d 65 mplate));.....me 223d0 6d 63 70 79 28 63 61 63 6b 65 79 5f 73 65 73 73 mcpy(cackey_sess 223e0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 223f0 65 61 72 63 68 5f 71 75 65 72 79 2c 20 70 54 65 earch_query, pTe 22400 6d 70 6c 61 74 65 2c 20 75 6c 43 6f 75 6e 74 20 mplate, ulCount 22410 2a 20 73 69 7a 65 6f 66 28 2a 70 54 65 6d 70 6c * sizeof(*pTempl 22420 61 74 65 29 29 3b 0a 09 09 09 66 6f 72 20 28 69 ate));....for (i 22430 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 75 6c dx = 0; idx < ul 22440 43 6f 75 6e 74 3b 20 69 64 78 2b 2b 29 20 7b 0a Count; idx++) {. 22450 09 09 09 09 69 66 20 28 70 54 65 6d 70 6c 61 74 ....if (pTemplat 22460 65 5b 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 e[idx].ulValueLe 22470 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 09 09 09 63 n == 0) {......c 22480 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 22490 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 224a0 71 75 65 72 79 5b 69 64 78 5d 2e 70 56 61 6c 75 query[idx].pValu 224b0 65 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 09 09 e = NULL;....... 224c0 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 09 7d 0a continue;.....}. 224d0 0a 09 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 .....cackey_sess 224e0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 224f0 65 61 72 63 68 5f 71 75 65 72 79 5b 69 64 78 5d earch_query[idx] 22500 2e 70 56 61 6c 75 65 20 3d 20 6d 61 6c 6c 6f 63 .pValue = malloc 22510 28 70 54 65 6d 70 6c 61 74 65 5b 69 64 78 5d 2e (pTemplate[idx]. 22520 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 ulValueLen);.... 22530 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73 ..if (cackey_ses 22540 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 22550 73 65 61 72 63 68 5f 71 75 65 72 79 5b 69 64 78 search_query[idx 22560 5d 2e 70 56 61 6c 75 65 29 20 7b 0a 09 09 09 09 ].pValue) {..... 22570 09 6d 65 6d 63 70 79 28 63 61 63 6b 65 79 5f 73 .memcpy(cackey_s 22580 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 22590 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5b 69 ].search_query[i 225a0 64 78 5d 2e 70 56 61 6c 75 65 2c 20 70 54 65 6d dx].pValue, pTem 225b0 70 6c 61 74 65 5b 69 64 78 5d 2e 70 56 61 6c 75 plate[idx].pValu 225c0 65 2c 20 70 54 65 6d 70 6c 61 74 65 5b 69 64 78 e, pTemplate[idx 225d0 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 09 ].ulValueLen);.. 225e0 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 20 65 6c ...}....}...} el 225f0 73 65 20 7b 0a 09 09 09 63 61 63 6b 65 79 5f 73 se {....cackey_s 22600 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 22610 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63 ].search_query_c 22620 6f 75 6e 74 20 3d 20 30 3b 0a 09 09 09 63 61 63 ount = 0;....cac 22630 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 22640 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 ssion].search_qu 22650 65 72 79 20 3d 20 4e 55 4c 4c 3b 0a 09 09 7d 0a ery = NULL;...}. 22660 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 28 .} else {...if ( 22670 75 6c 43 6f 75 6e 74 20 21 3d 20 30 29 20 7b 0a ulCount != 0) {. 22680 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 22690 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 226a0 67 6c 6f 63 6b 29 3b 0a 0a 09 09 09 43 41 43 4b glock);.....CACK 226b0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 226c0 22 45 72 72 6f 72 2e 20 20 53 65 61 72 63 68 20 "Error. Search 226d0 71 75 65 72 79 20 73 70 65 63 69 66 69 65 64 20 query specified 226e0 61 73 20 4e 55 4c 4c 2c 20 62 75 74 20 6e 75 6d as NULL, but num 226f0 62 65 72 20 6f 66 20 71 75 65 72 79 20 74 65 72 ber of query ter 22700 6d 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 ms not specified 22710 20 61 73 20 30 2e 22 29 3b 0a 0a 09 09 09 72 65 as 0.");.....re 22720 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 22730 54 53 5f 42 41 44 29 3b 0a 09 09 7d 0a 0a 09 09 TS_BAD);...}.... 22740 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 22750 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 hSession].search 22760 5f 71 75 65 72 79 5f 63 6f 75 6e 74 20 3d 20 30 _query_count = 0 22770 3b 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 ;...cackey_sessi 22780 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 ons[hSession].se 22790 61 72 63 68 5f 71 75 65 72 79 20 3d 20 4e 55 4c arch_query = NUL 227a0 4c 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 L;..}...cackey_s 227b0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 227c0 5d 2e 73 65 61 72 63 68 5f 61 63 74 69 76 65 20 ].search_active 227d0 3d 20 31 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73 = 1;..cackey_ses 227e0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 227f0 73 65 61 72 63 68 5f 63 75 72 72 5f 69 64 20 3d search_curr_id = 22800 20 30 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 0;...mutex_retv 22810 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 22820 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 22830 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 22840 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 22850 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 22860 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 22870 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 . Unlocking fai 22880 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 22890 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 228a0 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ROR);..}...CACKE 228b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 228c0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 228d0 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b (%i)", CKR_OK); 228e0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 228f0 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 );.}..static int 22900 20 63 61 63 6b 65 79 5f 70 6b 63 73 31 31 5f 63 cackey_pkcs11_c 22910 6f 6d 70 61 72 65 5f 61 74 74 72 69 62 75 74 65 ompare_attribute 22920 73 28 43 4b 5f 41 54 54 52 49 42 55 54 45 20 2a s(CK_ATTRIBUTE * 22930 61 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45 20 a, CK_ATTRIBUTE 22940 2a 62 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 *b) {..unsigned 22950 63 68 61 72 20 2a 73 6d 61 6c 6c 62 75 66 2c 20 char *smallbuf, 22960 2a 6c 61 72 67 65 62 75 66 3b 0a 09 73 69 7a 65 *largebuf;..size 22970 5f 74 20 73 6d 61 6c 6c 62 75 66 5f 6c 65 6e 2c _t smallbuf_len, 22980 20 6c 61 72 67 65 62 75 66 5f 6c 65 6e 3b 0a 0a largebuf_len;.. 22990 09 69 66 20 28 61 2d 3e 74 79 70 65 20 21 3d 20 .if (a->type != 229a0 62 2d 3e 74 79 70 65 29 20 7b 0a 09 09 72 65 74 b->type) {...ret 229b0 75 72 6e 28 30 29 3b 0a 09 7d 0a 0a 09 43 41 43 urn(0);..}...CAC 229c0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 229d0 28 22 20 20 20 20 2e 2e 2e 20 66 6f 75 6e 64 20 (" ... found 229e0 6d 61 74 63 68 69 6e 67 20 74 79 70 65 20 2e 2e matching type .. 229f0 2e 22 29 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 .");...CACKEY_DE 22a00 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 20 20 BUG_PRINTBUF(" 22a10 20 20 2e 2e 2e 20 6f 75 72 20 76 61 6c 75 65 3a ... our value: 22a20 22 2c 20 61 2d 3e 70 56 61 6c 75 65 2c 20 61 2d ", a->pValue, a- 22a30 3e 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 >ulValueLen);... 22a40 69 66 20 28 62 2d 3e 70 56 61 6c 75 65 20 3d 3d if (b->pValue == 22a50 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 NULL) {...CACKE 22a60 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 22a70 20 20 20 20 20 20 20 2e 2e 2e 20 66 6f 75 6e 64 ... found 22a80 20 77 69 6c 64 63 61 72 64 20 6d 61 74 63 68 22 wildcard match" 22a90 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 31 29 3b );....return(1); 22aa0 0a 09 7d 0a 0a 09 69 66 20 28 61 2d 3e 70 56 61 ..}...if (a->pVa 22ab0 6c 75 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 lue == NULL) {.. 22ac0 09 72 65 74 75 72 6e 28 30 29 3b 0a 09 7d 0a 0a .return(0);..}.. 22ad0 20 09 69 66 20 28 62 2d 3e 75 6c 56 61 6c 75 65 .if (b->ulValue 22ae0 4c 65 6e 20 3d 3d 20 61 2d 3e 75 6c 56 61 6c 75 Len == a->ulValu 22af0 65 4c 65 6e 20 26 26 20 6d 65 6d 63 6d 70 28 61 eLen && memcmp(a 22b00 2d 3e 70 56 61 6c 75 65 2c 20 62 2d 3e 70 56 61 ->pValue, b->pVa 22b10 6c 75 65 2c 20 62 2d 3e 75 6c 56 61 6c 75 65 4c lue, b->ulValueL 22b20 65 6e 29 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 en) == 0) {...CA 22b30 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 22b40 46 28 22 20 20 20 20 20 20 20 2e 2e 2e 20 66 6f F(" ... fo 22b50 75 6e 64 20 65 78 61 63 74 20 6d 61 74 63 68 22 und exact match" 22b60 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 31 29 3b );....return(1); 22b70 0a 09 7d 0a 0a 09 73 77 69 74 63 68 20 28 61 2d ..}...switch (a- 22b80 3e 74 79 70 65 29 20 7b 0a 09 09 63 61 73 65 20 >type) {...case 22b90 43 4b 41 5f 4d 4f 44 55 4c 55 53 3a 0a 09 09 09 CKA_MODULUS:.... 22ba0 69 66 20 28 61 2d 3e 75 6c 56 61 6c 75 65 4c 65 if (a->ulValueLe 22bb0 6e 20 3d 3d 20 62 2d 3e 75 6c 56 61 6c 75 65 4c n == b->ulValueL 22bc0 65 6e 29 20 7b 0a 09 09 09 09 62 72 65 61 6b 3b en) {.....break; 22bd0 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 61 2d ....}.....if (a- 22be0 3e 75 6c 56 61 6c 75 65 4c 65 6e 20 3e 20 62 2d >ulValueLen > b- 22bf0 3e 75 6c 56 61 6c 75 65 4c 65 6e 29 20 7b 0a 09 >ulValueLen) {.. 22c00 09 09 09 73 6d 61 6c 6c 62 75 66 20 3d 20 62 2d ...smallbuf = b- 22c10 3e 70 56 61 6c 75 65 3b 0a 09 09 09 09 73 6d 61 >pValue;.....sma 22c20 6c 6c 62 75 66 5f 6c 65 6e 20 3d 20 62 2d 3e 75 llbuf_len = b->u 22c30 6c 56 61 6c 75 65 4c 65 6e 3b 0a 0a 09 09 09 09 lValueLen;...... 22c40 6c 61 72 67 65 62 75 66 20 3d 20 61 2d 3e 70 56 largebuf = a->pV 22c50 61 6c 75 65 3b 0a 09 09 09 09 6c 61 72 67 65 62 alue;.....largeb 22c60 75 66 5f 6c 65 6e 20 3d 20 61 2d 3e 75 6c 56 61 uf_len = a->ulVa 22c70 6c 75 65 4c 65 6e 3b 0a 09 09 09 7d 20 65 6c 73 lueLen;....} els 22c80 65 20 7b 0a 09 09 09 09 73 6d 61 6c 6c 62 75 66 e {.....smallbuf 22c90 20 3d 20 61 2d 3e 70 56 61 6c 75 65 3b 0a 09 09 = a->pValue;... 22ca0 09 09 73 6d 61 6c 6c 62 75 66 5f 6c 65 6e 20 3d ..smallbuf_len = 22cb0 20 61 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a a->ulValueLen;. 22cc0 0a 09 09 09 09 6c 61 72 67 65 62 75 66 20 3d 20 .....largebuf = 22cd0 62 2d 3e 70 56 61 6c 75 65 3b 0a 09 09 09 09 6c b->pValue;.....l 22ce0 61 72 67 65 62 75 66 5f 6c 65 6e 20 3d 20 62 2d argebuf_len = b- 22cf0 3e 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a 09 09 09 >ulValueLen;.... 22d00 7d 0a 0a 09 09 09 66 6f 72 20 28 3b 20 6c 61 72 }.....for (; lar 22d10 67 65 62 75 66 5f 6c 65 6e 20 21 3d 20 73 6d 61 gebuf_len != sma 22d20 6c 6c 62 75 66 5f 6c 65 6e 3b 20 6c 61 72 67 65 llbuf_len; large 22d30 62 75 66 2b 2b 2c 6c 61 72 67 65 62 75 66 5f 6c buf++,largebuf_l 22d40 65 6e 2d 2d 29 20 7b 0a 09 09 09 09 69 66 20 28 en--) {.....if ( 22d50 6c 61 72 67 65 62 75 66 5b 30 5d 20 21 3d 20 30 largebuf[0] != 0 22d60 29 20 7b 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a ) {......break;. 22d70 09 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 69 ....}....}.....i 22d80 66 20 28 6c 61 72 67 65 62 75 66 5f 6c 65 6e 20 f (largebuf_len 22d90 21 3d 20 73 6d 61 6c 6c 62 75 66 5f 6c 65 6e 29 != smallbuf_len) 22da0 20 7b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 {.....break;... 22db0 09 7d 0a 0a 09 09 09 69 66 20 28 6d 65 6d 63 6d .}.....if (memcm 22dc0 70 28 6c 61 72 67 65 62 75 66 2c 20 73 6d 61 6c p(largebuf, smal 22dd0 6c 62 75 66 2c 20 73 6d 61 6c 6c 62 75 66 5f 6c lbuf, smallbuf_l 22de0 65 6e 29 20 3d 3d 20 30 29 20 7b 0a 09 09 09 09 en) == 0) {..... 22df0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 22e00 4e 54 46 28 22 20 20 20 20 20 20 20 2e 2e 2e 20 NTF(" ... 22e10 66 6f 75 6e 64 20 61 70 70 72 6f 78 69 6d 61 74 found approximat 22e20 65 20 6d 61 74 63 68 22 29 3b 0a 0a 09 09 09 09 e match");...... 22e30 72 65 74 75 72 6e 28 31 29 3b 0a 09 09 09 7d 0a return(1);....}. 22e40 0a 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 ....break;..}... 22e50 72 65 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 43 4b return(0);.}..CK 22e60 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 22e70 28 43 4b 5f 52 56 2c 20 43 5f 46 69 6e 64 4f 62 (CK_RV, C_FindOb 22e80 6a 65 63 74 73 29 28 43 4b 5f 53 45 53 53 49 4f jects)(CK_SESSIO 22e90 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 22ea0 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e n, CK_OBJECT_HAN 22eb0 44 4c 45 5f 50 54 52 20 70 68 4f 62 6a 65 63 74 DLE_PTR phObject 22ec0 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 4d 61 78 , CK_ULONG ulMax 22ed0 4f 62 6a 65 63 74 43 6f 75 6e 74 2c 20 43 4b 5f ObjectCount, CK_ 22ee0 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 4f 62 6a ULONG_PTR pulObj 22ef0 65 63 74 43 6f 75 6e 74 29 20 7b 0a 09 73 74 72 ectCount) {..str 22f00 75 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 uct cackey_ident 22f10 69 74 79 20 2a 63 75 72 72 5f 69 64 3b 0a 09 43 ity *curr_id;..C 22f20 4b 5f 41 54 54 52 49 42 55 54 45 20 2a 63 75 72 K_ATTRIBUTE *cur 22f30 72 5f 61 74 74 72 3b 0a 09 43 4b 5f 55 4c 4f 4e r_attr;..CK_ULON 22f40 47 20 63 75 72 72 5f 69 64 5f 69 64 78 2c 20 63 G curr_id_idx, c 22f50 75 72 72 5f 6f 75 74 5f 69 64 5f 69 64 78 2c 20 urr_out_id_idx, 22f60 63 75 72 72 5f 61 74 74 72 5f 69 64 78 2c 20 73 curr_attr_idx, s 22f70 65 73 73 5f 61 74 74 72 5f 69 64 78 3b 0a 09 43 ess_attr_idx;..C 22f80 4b 5f 55 4c 4f 4e 47 20 6d 61 74 63 68 65 64 5f K_ULONG matched_ 22f90 63 6f 75 6e 74 2c 20 70 72 65 76 5f 6d 61 74 63 count, prev_matc 22fa0 68 65 64 5f 63 6f 75 6e 74 3b 0a 09 69 6e 74 20 hed_count;..int 22fb0 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 23 69 mutex_retval;.#i 22fc0 66 64 65 66 20 43 41 43 4b 45 59 5f 44 45 42 55 fdef CACKEY_DEBU 22fd0 47 5f 53 45 41 52 43 48 5f 53 50 45 45 44 54 45 G_SEARCH_SPEEDTE 22fe0 53 54 0a 09 73 74 72 75 63 74 20 74 69 6d 65 76 ST..struct timev 22ff0 61 6c 20 73 74 61 72 74 2c 20 65 6e 64 3b 0a 09 al start, end;.. 23000 75 69 6e 74 36 34 5f 74 20 73 74 61 72 74 5f 69 uint64_t start_i 23010 6e 74 2c 20 65 6e 64 5f 69 6e 74 3b 0a 23 65 6e nt, end_int;.#en 23020 64 69 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 dif...CACKEY_DEB 23030 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 23040 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 23050 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 23060 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 23070 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 23080 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 23090 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 230a0 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 230b0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 230c0 7d 0a 0a 09 69 66 20 28 70 75 6c 4f 62 6a 65 63 }...if (pulObjec 230d0 74 43 6f 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 20 tCount == NULL) 230e0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 230f0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 23100 20 70 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 pulObjectCount 23110 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 is NULL.");....r 23120 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 eturn(CKR_ARGUME 23130 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 NTS_BAD);..}...i 23140 66 20 28 70 68 4f 62 6a 65 63 74 20 3d 3d 20 4e f (phObject == N 23150 55 4c 4c 20 26 26 20 75 6c 4d 61 78 4f 62 6a 65 ULL && ulMaxObje 23160 63 74 43 6f 75 6e 74 20 3d 3d 20 30 29 20 7b 0a ctCount == 0) {. 23170 09 09 2f 2a 20 53 68 6f 72 74 20 63 69 72 63 75 ../* Short circu 23180 69 74 2c 20 69 66 20 7a 65 72 6f 20 6f 62 6a 65 it, if zero obje 23190 63 74 73 20 77 65 72 65 20 73 70 65 63 69 66 69 cts were specifi 231a0 65 64 20 72 65 74 75 72 6e 20 7a 65 72 6f 20 69 ed return zero i 231b0 74 65 6d 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 tems immediately 231c0 20 2a 2f 0a 09 09 2a 70 75 6c 4f 62 6a 65 63 74 */...*pulObject 231d0 43 6f 75 6e 74 20 3d 20 30 3b 0a 0a 09 09 43 41 Count = 0;....CA 231e0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 231f0 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 23200 5f 4f 4b 20 28 25 69 29 20 28 73 68 6f 72 74 20 _OK (%i) (short 23210 63 69 72 63 75 69 74 29 22 2c 20 43 4b 52 5f 4f circuit)", CKR_O 23220 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b K);....return(CK 23230 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 R_OK);..}...if ( 23240 70 68 4f 62 6a 65 63 74 20 3d 3d 20 4e 55 4c 4c phObject == NULL 23250 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 23260 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 23270 2e 20 20 70 68 4f 62 6a 65 63 74 20 69 73 20 4e . phObject is N 23280 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 ULL.");....retur 23290 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f n(CKR_ARGUMENTS_ 232a0 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 BAD);..}...if (u 232b0 6c 4d 61 78 4f 62 6a 65 63 74 43 6f 75 6e 74 20 lMaxObjectCount 232c0 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 == 0) {...CACKEY 232d0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 232e0 72 72 6f 72 2e 20 20 4d 61 78 69 6d 75 6d 20 6e rror. Maximum n 232f0 75 6d 62 65 72 20 6f 66 20 6f 62 6a 65 63 74 73 umber of objects 23300 20 73 70 65 63 69 66 69 65 64 20 61 73 20 7a 65 specified as ze 23310 72 6f 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ro.");....return 23320 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 23330 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 AD);..}...if (hS 23340 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 ession == 0 || h 23350 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 Session >= (size 23360 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 23370 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ns) / sizeof(cac 23380 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 key_sessions[0]) 23390 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE 233a0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 233b0 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 r. Session out 233c0 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a of range.");.... 233d0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES 233e0 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 SION_HANDLE_INVA 233f0 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 LID);..}...mutex 23400 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 23410 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b _mutex_lock(cack 23420 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 23430 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 23440 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 23450 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 23460 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 ror. Locking fa 23470 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 23480 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 23490 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 RROR);..}...if ( 234a0 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 !cackey_sessions 234b0 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 [hSession].activ 234c0 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 e) {...cackey_mu 234d0 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 234e0 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....C 234f0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 23500 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 23510 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 ion not active." 23520 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 23530 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 23540 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 23550 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 .if (!cackey_ses 23560 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 23570 73 65 61 72 63 68 5f 61 63 74 69 76 65 29 20 7b search_active) { 23580 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 23590 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 235a0 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 235b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 235c0 45 72 72 6f 72 2e 20 20 53 65 61 72 63 68 20 6e Error. Search n 235d0 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 ot active.");... 235e0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 ...return(CKR_OP 235f0 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 ERATION_NOT_INIT 23600 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 23 69 IALIZED);..}..#i 23610 66 64 65 66 20 43 41 43 4b 45 59 5f 44 45 42 55 fdef CACKEY_DEBU 23620 47 5f 53 45 41 52 43 48 5f 53 50 45 45 44 54 45 G_SEARCH_SPEEDTE 23630 53 54 0a 09 67 65 74 74 69 6d 65 6f 66 64 61 79 ST..gettimeofday 23640 28 26 73 74 61 72 74 2c 20 4e 55 4c 4c 29 3b 0a (&start, NULL);. 23650 23 65 6e 64 69 66 0a 0a 09 63 75 72 72 5f 6f 75 #endif...curr_ou 23660 74 5f 69 64 5f 69 64 78 20 3d 20 30 3b 0a 09 66 t_id_idx = 0;..f 23670 6f 72 20 28 63 75 72 72 5f 69 64 5f 69 64 78 20 or (curr_id_idx 23680 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e = cackey_session 23690 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 s[hSession].sear 236a0 63 68 5f 63 75 72 72 5f 69 64 3b 20 63 75 72 72 ch_curr_id; curr 236b0 5f 69 64 5f 69 64 78 20 3c 20 63 61 63 6b 65 79 _id_idx < cackey 236c0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 236d0 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 on].identities_c 236e0 6f 75 6e 74 20 26 26 20 75 6c 4d 61 78 4f 62 6a ount && ulMaxObj 236f0 65 63 74 43 6f 75 6e 74 3b 20 63 75 72 72 5f 69 ectCount; curr_i 23700 64 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 63 75 72 d_idx++) {...cur 23710 72 5f 69 64 20 3d 20 26 63 61 63 6b 65 79 5f 73 r_id = &cackey_s 23720 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 23730 5d 2e 69 64 65 6e 74 69 74 69 65 73 5b 63 75 72 ].identities[cur 23740 72 5f 69 64 5f 69 64 78 5d 3b 0a 0a 09 09 43 41 r_id_idx];....CA 23750 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 23760 46 28 22 50 72 6f 63 65 73 73 69 6e 67 20 69 64 F("Processing id 23770 65 6e 74 69 74 79 3a 25 6c 75 22 2c 20 28 75 6e entity:%lu", (un 23780 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 signed long) cur 23790 72 5f 69 64 5f 69 64 78 29 3b 0a 0a 09 09 6d 61 r_id_idx);....ma 237a0 74 63 68 65 64 5f 63 6f 75 6e 74 20 3d 20 30 3b tched_count = 0; 237b0 0a 0a 09 09 66 6f 72 20 28 63 75 72 72 5f 61 74 ....for (curr_at 237c0 74 72 5f 69 64 78 20 3d 20 30 3b 20 63 75 72 72 tr_idx = 0; curr 237d0 5f 61 74 74 72 5f 69 64 78 20 3c 20 63 61 63 6b _attr_idx < cack 237e0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 237f0 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 sion].search_que 23800 72 79 5f 63 6f 75 6e 74 3b 20 63 75 72 72 5f 61 ry_count; curr_a 23810 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 ttr_idx++) {.... 23820 70 72 65 76 5f 6d 61 74 63 68 65 64 5f 63 6f 75 prev_matched_cou 23830 6e 74 20 3d 20 6d 61 74 63 68 65 64 5f 63 6f 75 nt = matched_cou 23840 6e 74 3b 0a 0a 09 09 09 63 75 72 72 5f 61 74 74 nt;.....curr_att 23850 72 20 3d 20 26 63 61 63 6b 65 79 5f 73 65 73 73 r = &cackey_sess 23860 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 23870 65 61 72 63 68 5f 71 75 65 72 79 5b 63 75 72 72 earch_query[curr 23880 5f 61 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 09 _attr_idx];..... 23890 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 238a0 4e 54 46 28 22 20 20 43 68 65 63 6b 69 6e 67 20 NTF(" Checking 238b0 66 6f 72 20 61 74 74 72 69 62 75 74 65 20 25 73 for attribute %s 238c0 20 28 30 78 25 30 38 6c 78 29 20 69 6e 20 69 64 (0x%08lx) in id 238d0 65 6e 74 69 74 79 3a 25 69 2e 2e 2e 22 2c 20 43 entity:%i...", C 238e0 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC 238f0 5f 41 54 54 52 49 42 55 54 45 5f 54 4f 5f 53 54 _ATTRIBUTE_TO_ST 23900 52 28 63 75 72 72 5f 61 74 74 72 2d 3e 74 79 70 R(curr_attr->typ 23910 65 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f e), (unsigned lo 23920 6e 67 29 20 63 75 72 72 5f 61 74 74 72 2d 3e 74 ng) curr_attr->t 23930 79 70 65 2c 20 28 69 6e 74 29 20 63 75 72 72 5f ype, (int) curr_ 23940 69 64 5f 69 64 78 29 3b 0a 09 09 09 43 41 43 4b id_idx);....CACK 23950 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 EY_DEBUG_PRINTBU 23960 46 28 22 20 20 20 20 56 61 6c 75 65 20 6c 6f 6f F(" Value loo 23970 6b 69 6e 67 20 66 6f 72 3a 22 2c 20 63 75 72 72 king for:", curr 23980 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 2c 20 63 _attr->pValue, c 23990 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 urr_attr->ulValu 239a0 65 4c 65 6e 29 3b 0a 0a 09 09 09 66 6f 72 20 28 eLen);.....for ( 239b0 73 65 73 73 5f 61 74 74 72 5f 69 64 78 20 3d 20 sess_attr_idx = 239c0 30 3b 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 0; sess_attr_idx 239d0 20 3c 20 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 < curr_id->attr 239e0 69 62 75 74 65 73 5f 63 6f 75 6e 74 3b 20 73 65 ibutes_count; se 239f0 73 73 5f 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b ss_attr_idx++) { 23a00 0a 09 09 09 09 69 66 20 28 63 61 63 6b 65 79 5f .....if (cackey_ 23a10 70 6b 63 73 31 31 5f 63 6f 6d 70 61 72 65 5f 61 pkcs11_compare_a 23a20 74 74 72 69 62 75 74 65 73 28 26 63 75 72 72 5f ttributes(&curr_ 23a30 69 64 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 id->attributes[s 23a40 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2c 20 63 ess_attr_idx], c 23a50 75 72 72 5f 61 74 74 72 29 29 20 7b 0a 09 09 09 urr_attr)) {.... 23a60 09 09 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 2b ..matched_count+ 23a70 2b 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a +;.......break;. 23a80 09 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 2f ....}....}...../ 23a90 2a 20 49 66 20 74 68 65 20 61 74 74 72 69 62 75 * If the attribu 23aa0 74 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 te could not be 23ab0 6d 61 74 63 68 65 64 2c 20 64 6f 20 6e 6f 74 20 matched, do not 23ac0 74 72 79 20 74 6f 20 6d 61 74 63 68 20 61 64 64 try to match add 23ad0 69 74 69 6f 6e 61 6c 20 61 74 74 72 69 62 75 74 itional attribut 23ae0 65 73 20 2a 2f 0a 09 09 09 69 66 20 28 70 72 65 es */....if (pre 23af0 76 5f 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 20 v_matched_count 23b00 3d 3d 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 == matched_count 23b10 29 20 7b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 ) {.....break;.. 23b20 09 09 7d 0a 09 09 7d 0a 0a 09 09 69 66 20 28 6d ..}...}....if (m 23b30 61 74 63 68 65 64 5f 63 6f 75 6e 74 20 3d 3d 20 atched_count == 23b40 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 23b50 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 hSession].search 23b60 5f 71 75 65 72 79 5f 63 6f 75 6e 74 29 20 7b 0a _query_count) {. 23b70 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 23b80 50 52 49 4e 54 46 28 22 20 20 2e 2e 2e 20 41 6c PRINTF(" ... Al 23b90 6c 20 25 69 20 61 74 74 72 69 62 75 74 65 73 20 l %i attributes 23ba0 63 68 65 63 6b 65 64 20 66 6f 72 20 66 6f 75 6e checked for foun 23bb0 64 2c 20 61 64 64 69 6e 67 20 69 64 65 6e 74 69 d, adding identi 23bc0 74 79 3a 25 69 20 74 6f 20 72 65 74 75 72 6e 65 ty:%i to returne 23bd0 64 20 6c 69 73 74 22 2c 20 28 69 6e 74 29 20 63 d list", (int) c 23be0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 23bf0 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 23c00 71 75 65 72 79 5f 63 6f 75 6e 74 2c 20 28 69 6e query_count, (in 23c10 74 29 20 63 75 72 72 5f 69 64 5f 69 64 78 29 3b t) curr_id_idx); 23c20 0a 0a 09 09 09 70 68 4f 62 6a 65 63 74 5b 63 75 .....phObject[cu 23c30 72 72 5f 6f 75 74 5f 69 64 5f 69 64 78 5d 20 3d rr_out_id_idx] = 23c40 20 63 75 72 72 5f 69 64 5f 69 64 78 20 2b 20 31 curr_id_idx + 1 23c50 3b 0a 0a 09 09 09 75 6c 4d 61 78 4f 62 6a 65 63 ;.....ulMaxObjec 23c60 74 43 6f 75 6e 74 2d 2d 3b 0a 0a 09 09 09 63 75 tCount--;.....cu 23c70 72 72 5f 6f 75 74 5f 69 64 5f 69 64 78 2b 2b 3b rr_out_id_idx++; 23c80 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 43 ...} else {....C 23c90 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 23ca0 54 46 28 22 20 20 2e 2e 2e 20 4e 6f 74 20 61 6c TF(" ... Not al 23cb0 6c 20 25 69 20 28 6f 6e 6c 79 20 66 6f 75 6e 64 l %i (only found 23cc0 20 25 69 29 20 61 74 74 72 69 62 75 74 65 73 20 %i) attributes 23cd0 63 68 65 63 6b 65 64 20 66 6f 72 20 66 6f 75 6e checked for foun 23ce0 64 2c 20 6e 6f 74 20 61 64 64 69 6e 67 20 69 64 d, not adding id 23cf0 65 6e 74 69 74 79 3a 25 69 22 2c 20 28 69 6e 74 entity:%i", (int 23d00 29 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ) cackey_session 23d10 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 s[hSession].sear 23d20 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 2c 20 ch_query_count, 23d30 28 69 6e 74 29 20 6d 61 74 63 68 65 64 5f 63 6f (int) matched_co 23d40 75 6e 74 2c 20 28 69 6e 74 29 20 63 75 72 72 5f unt, (int) curr_ 23d50 69 64 5f 69 64 78 29 3b 0a 09 09 7d 0a 09 7d 0a id_idx);...}..}. 23d60 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 23d70 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 23d80 68 5f 63 75 72 72 5f 69 64 20 3d 20 63 75 72 72 h_curr_id = curr 23d90 5f 69 64 5f 69 64 78 3b 0a 09 2a 70 75 6c 4f 62 _id_idx;..*pulOb 23da0 6a 65 63 74 43 6f 75 6e 74 20 3d 20 63 75 72 72 jectCount = curr 23db0 5f 6f 75 74 5f 69 64 5f 69 64 78 3b 0a 0a 23 69 _out_id_idx;..#i 23dc0 66 64 65 66 20 43 41 43 4b 45 59 5f 44 45 42 55 fdef CACKEY_DEBU 23dd0 47 5f 53 45 41 52 43 48 5f 53 50 45 45 44 54 45 G_SEARCH_SPEEDTE 23de0 53 54 0a 09 67 65 74 74 69 6d 65 6f 66 64 61 79 ST..gettimeofday 23df0 28 26 65 6e 64 2c 20 4e 55 4c 4c 29 3b 0a 09 73 (&end, NULL);..s 23e00 74 61 72 74 5f 69 6e 74 20 3d 20 28 73 74 61 72 tart_int = (star 23e10 74 2e 74 76 5f 73 65 63 20 2a 20 31 30 30 30 30 t.tv_sec * 10000 23e20 30 30 29 20 2b 20 73 74 61 72 74 2e 74 76 5f 75 00) + start.tv_u 23e30 73 65 63 3b 0a 09 65 6e 64 5f 69 6e 74 20 3d 20 sec;..end_int = 23e40 28 65 6e 64 2e 74 76 5f 73 65 63 20 2a 20 31 30 (end.tv_sec * 10 23e50 30 30 30 30 30 29 20 2b 20 65 6e 64 2e 74 76 5f 00000) + end.tv_ 23e60 75 73 65 63 3b 0a 09 66 70 72 69 6e 74 66 28 73 usec;..fprintf(s 23e70 74 64 65 72 72 2c 20 22 53 65 61 72 63 68 20 74 tderr, "Search t 23e80 6f 6f 6b 20 25 6c 75 20 6d 69 63 72 6f 73 65 63 ook %lu microsec 23e90 6f 6e 64 73 5c 6e 22 2c 20 28 75 6e 73 69 67 6e onds\n", (unsign 23ea0 65 64 20 6c 6f 6e 67 29 20 28 65 6e 64 5f 69 6e ed long) (end_in 23eb0 74 20 2d 20 73 74 61 72 74 5f 69 6e 74 29 29 3b t - start_int)); 23ec0 0a 23 65 6e 64 69 66 0a 0a 09 6d 75 74 65 78 5f .#endif...mutex_ 23ed0 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 23ee0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 23ef0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 23f00 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 23f10 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 23f20 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 23f30 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 23f40 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 23f50 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 23f60 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 L_ERROR);..}...C 23f70 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 23f80 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 23f90 52 5f 4f 4b 20 28 25 69 29 2c 20 6e 75 6d 20 6f R_OK (%i), num o 23fa0 62 6a 65 63 74 73 20 3d 20 25 6c 75 22 2c 20 43 bjects = %lu", C 23fb0 4b 52 5f 4f 4b 2c 20 2a 70 75 6c 4f 62 6a 65 63 KR_OK, *pulObjec 23fc0 74 43 6f 75 6e 74 29 3b 0a 0a 09 72 65 74 75 72 tCount);...retur 23fd0 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b n(CKR_OK);.}..CK 23fe0 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 23ff0 28 43 4b 5f 52 56 2c 20 43 5f 46 69 6e 64 4f 62 (CK_RV, C_FindOb 24000 6a 65 63 74 73 46 69 6e 61 6c 29 28 43 4b 5f 53 jectsFinal)(CK_S 24010 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 24020 65 73 73 69 6f 6e 29 20 7b 0a 09 43 4b 5f 55 4c ession) {..CK_UL 24030 4f 4e 47 20 69 64 78 3b 0a 09 69 6e 74 20 6d 75 ONG idx;..int mu 24040 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 tex_retval;...CA 24050 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 24060 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 24070 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 24080 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 24090 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 240a0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 240b0 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 240c0 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 240d0 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 240e0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 IZED);..}...if ( 240f0 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c hSession == 0 || 24100 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 hSession >= (si 24110 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 24120 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 ions) / sizeof(c 24130 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 ackey_sessions[0 24140 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ]))) {...CACKEY_ 24150 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 24160 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 ror. Session ou 24170 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 t of range.");.. 24180 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 24190 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 241a0 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 VALID);..}...mut 241b0 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 241c0 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 ey_mutex_lock(ca 241d0 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 241e0 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 241f0 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 24200 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 24210 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 Error. Locking 24220 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 24230 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 24240 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 _ERROR);..}...if 24250 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f (!cackey_sessio 24260 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 ns[hSession].act 24270 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ive) {...cackey_ 24280 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 24290 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 242a0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 242b0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 242c0 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 ssion not active 242d0 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 242e0 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 242f0 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 24300 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 ...if (!cackey_s 24310 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 24320 5d 2e 73 65 61 72 63 68 5f 61 63 74 69 76 65 29 ].search_active) 24330 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 24340 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 24350 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 24360 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 24370 28 22 45 72 72 6f 72 2e 20 20 53 65 61 72 63 68 ("Error. Search 24380 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 24390 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 243a0 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e OPERATION_NOT_IN 243b0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 243c0 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 243d0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 243e0 68 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a 0a 09 h_active = 0;... 243f0 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 for (idx = 0; id 24400 78 20 3c 20 63 61 63 6b 65 79 5f 73 65 73 73 69 x < cackey_sessi 24410 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 ons[hSession].se 24420 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 arch_query_count 24430 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 ; idx++) {...if 24440 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 24450 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 24460 68 5f 71 75 65 72 79 5b 69 64 78 5d 2e 70 56 61 h_query[idx].pVa 24470 6c 75 65 29 20 7b 0a 09 09 09 66 72 65 65 28 63 lue) {....free(c 24480 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 24490 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f Session].search_ 244a0 71 75 65 72 79 5b 69 64 78 5d 2e 70 56 61 6c 75 query[idx].pValu 244b0 65 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 e);...}..}...if 244c0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 244d0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 244e0 68 5f 71 75 65 72 79 29 20 7b 0a 09 09 66 72 65 h_query) {...fre 244f0 65 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e e(cackey_session 24500 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 s[hSession].sear 24510 63 68 5f 71 75 65 72 79 29 3b 0a 09 7d 0a 0a 09 ch_query);..}... 24520 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 24530 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 24540 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 24550 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 24560 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 24570 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 24580 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c NTF("Error. Unl 24590 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 245a0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 245b0 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 245c0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 245d0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 245e0 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 245f0 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret 24600 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}.. 24610 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 24620 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 45 6e 63 72 ON(CK_RV, C_Encr 24630 79 70 74 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 yptInit)(CK_SESS 24640 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 24650 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 ion, CK_MECHANIS 24660 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d M_PTR pMechanism 24670 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 24680 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b LE hKey) {..CACK 24690 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 246a0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 246b0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 246c0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 246d0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 246e0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 246f0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 24700 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 24710 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 24720 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 24730 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 24740 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 24750 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 24760 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 24770 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 24780 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 24790 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 247a0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 247b0 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 247c0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 45 6e 63 ION(CK_RV, C_Enc 247d0 72 79 70 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e rypt)(CK_SESSION 247e0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 247f0 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 , CK_BYTE_PTR pD 24800 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c ata, CK_ULONG ul 24810 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 DataLen, CK_BYTE 24820 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 64 44 _PTR pEncryptedD 24830 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 ata, CK_ULONG_PT 24840 52 20 70 75 6c 45 6e 63 72 79 70 74 65 64 44 61 R pulEncryptedDa 24850 74 61 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 taLen) {..CACKEY 24860 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 24870 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 24880 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 24890 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 248a0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 248b0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 248c0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 248d0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 248e0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 248f0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 24900 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 24910 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 24920 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 24930 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 24940 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 24950 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 24960 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 24970 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 24980 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 24990 4e 28 43 4b 5f 52 56 2c 20 43 5f 45 6e 63 72 79 N(CK_RV, C_Encry 249a0 70 74 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 ptUpdate)(CK_SES 249b0 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 249c0 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 sion, CK_BYTE_PT 249d0 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e R pPart, CK_ULON 249e0 47 20 75 6c 50 61 72 74 4c 65 6e 2c 20 43 4b 5f G ulPartLen, CK_ 249f0 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 BYTE_PTR pEncryp 24a00 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e tedPart, CK_ULON 24a10 47 5f 50 54 52 20 70 75 6c 45 6e 63 72 79 70 74 G_PTR pulEncrypt 24a20 65 64 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 edPartLen) {..CA 24a30 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 24a40 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 24a50 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 24a60 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 24a70 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 24a80 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 24a90 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 24aa0 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 24ab0 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 24ac0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 24ad0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 24ae0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 24af0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 24b00 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 24b10 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 24b20 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 24b30 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 24b40 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 24b50 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 24b60 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 45 CTION(CK_RV, C_E 24b70 6e 63 72 79 70 74 46 69 6e 61 6c 29 28 43 4b 5f ncryptFinal)(CK_ 24b80 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 24b90 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 24ba0 5f 50 54 52 20 70 4c 61 73 74 45 6e 63 72 79 70 _PTR pLastEncryp 24bb0 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e tedPart, CK_ULON 24bc0 47 5f 50 54 52 20 70 75 6c 4c 61 73 74 45 6e 63 G_PTR pulLastEnc 24bd0 72 79 70 74 65 64 50 61 72 74 4c 65 6e 29 20 7b ryptedPartLen) { 24be0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 24bf0 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 24c00 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 24c10 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 24c20 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 24c30 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 24c40 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 24c50 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 24c60 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 24c70 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 24c80 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 24c90 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 24ca0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 24cb0 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 24cc0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 24cd0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 24ce0 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 24cf0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 24d00 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 24d10 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 24d20 20 43 5f 44 65 63 72 79 70 74 49 6e 69 74 29 28 C_DecryptInit)( 24d30 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 24d40 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d E hSession, CK_M 24d50 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 ECHANISM_PTR pMe 24d60 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 chanism, CK_OBJE 24d70 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 CT_HANDLE hKey) 24d80 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 {..int mutex_ret 24d90 76 61 6c 3b 0a 0a 09 68 4b 65 79 2d 2d 3b 0a 0a val;...hKey--;.. 24da0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 24db0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 24dc0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 24dd0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 24de0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 24df0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 24e00 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 24e10 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 24e20 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 24e30 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 IALIZED);..}...i 24e40 66 20 28 70 4d 65 63 68 61 6e 69 73 6d 20 3d 3d f (pMechanism == 24e50 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 NULL) {...CACKE 24e60 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 24e70 45 72 72 6f 72 2e 20 70 4d 65 63 68 61 6e 69 73 Error. pMechanis 24e80 6d 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 m is NULL.");... 24e90 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 24ea0 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 24eb0 09 69 66 20 28 70 4d 65 63 68 61 6e 69 73 6d 2d .if (pMechanism- 24ec0 3e 6d 65 63 68 61 6e 69 73 6d 20 21 3d 20 43 4b >mechanism != CK 24ed0 4d 5f 52 53 41 5f 50 4b 43 53 29 20 7b 0a 09 09 M_RSA_PKCS) {... 24ee0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 24ef0 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 4d 65 63 NTF("Error. pMec 24f00 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 hanism->mechanis 24f10 6d 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 m not specified 24f20 61 73 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 22 as CKM_RSA_PKCS" 24f30 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 24f40 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 41 52 41 4d _MECHANISM_PARAM 24f50 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 24f60 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 if (hSession == 24f70 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 0 || hSession >= 24f80 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f (sizeof(cackey_ 24f90 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 sessions) / size 24fa0 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 24fb0 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 ns[0]))) {...CAC 24fc0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 24fd0 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 24fe0 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 n out of range." 24ff0 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 25000 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 25010 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 25020 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 25030 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 cackey_mutex_loc 25040 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 25050 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 25060 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 25070 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 25080 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b TF("Error. Lock 25090 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 250a0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 250b0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 250c0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 ..if (!cackey_se 250d0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 250e0 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 .active) {...cac 250f0 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 25100 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 25110 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 25120 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 25130 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 Session not ac 25140 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 25150 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 25160 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 25170 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 ;..}...if (cacke 25180 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 25190 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 ion].decrypt_act 251a0 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ive) {...cackey_ 251b0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 251c0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 251d0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 251e0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 44 65 INTF("Error. De 251f0 63 72 79 70 74 20 61 6c 72 65 61 64 79 20 69 6e crypt already in 25200 20 70 72 6f 67 72 65 73 73 2e 22 29 3b 0a 09 09 progress.");... 25210 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 ...return(CKR_OP 25220 45 52 41 54 49 4f 4e 5f 41 43 54 49 56 45 29 3b ERATION_ACTIVE); 25230 0a 09 7d 0a 0a 09 69 66 20 28 68 4b 65 79 20 3e ..}...if (hKey > 25240 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e = cackey_session 25250 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 25260 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 20 7b 0a tities_count) {. 25270 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 25280 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 25290 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 lock);....CACKEY 252a0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 252b0 72 72 6f 72 2e 20 20 4b 65 79 20 68 61 6e 64 6c rror. Key handl 252c0 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 28 e out of range ( 252d0 72 65 71 75 65 73 74 65 64 20 6b 65 79 20 25 6c requested key %l 252e0 75 2c 20 6f 6e 6c 79 20 25 6c 75 20 69 64 65 6e u, only %lu iden 252f0 74 69 74 69 65 73 20 61 76 61 69 6c 61 62 6c 65 tities available 25300 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ).", (unsigned l 25310 6f 6e 67 29 20 68 4b 65 79 2c 20 28 75 6e 73 69 ong) hKey, (unsi 25320 67 6e 65 64 20 6c 6f 6e 67 29 20 63 61 63 6b 65 gned long) cacke 25330 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 25340 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f ion].identities_ 25350 63 6f 75 6e 74 29 3b 0a 0a 09 09 72 65 74 75 72 count);....retur 25360 6e 28 43 4b 52 5f 4b 45 59 5f 48 41 4e 44 4c 45 n(CKR_KEY_HANDLE 25370 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 25380 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 25390 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 hSession].decryp 253a0 74 5f 61 63 74 69 76 65 20 3d 20 31 3b 0a 0a 09 t_active = 1;... 253b0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 253c0 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 hSession].decryp 253d0 74 5f 6d 65 63 68 61 6e 69 73 6d 20 3d 20 70 4d t_mechanism = pM 253e0 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e echanism->mechan 253f0 69 73 6d 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73 ism;..cackey_ses 25400 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 25410 64 65 63 72 79 70 74 5f 6d 65 63 68 5f 70 61 72 decrypt_mech_par 25420 6d 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e m = pMechanism-> 25430 70 50 61 72 61 6d 65 74 65 72 3b 0a 09 63 61 63 pParameter;..cac 25440 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 25450 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 6d ssion].decrypt_m 25460 65 63 68 5f 70 61 72 6d 6c 65 6e 20 3d 20 70 4d ech_parmlen = pM 25470 65 63 68 61 6e 69 73 6d 2d 3e 75 6c 50 61 72 61 echanism->ulPara 25480 6d 65 74 65 72 4c 65 6e 3b 0a 09 63 61 63 6b 65 meterLen;..cacke 25490 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 254a0 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 69 64 65 ion].decrypt_ide 254b0 6e 74 69 74 79 20 3d 20 26 63 61 63 6b 65 79 5f ntity = &cackey_ 254c0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 254d0 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5b 68 4b n].identities[hK 254e0 65 79 5d 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ey];...mutex_ret 254f0 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 25500 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 25510 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 25520 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 25530 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 25540 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 25550 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 25560 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 25570 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 25580 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b RROR);..}...CACK 25590 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 255a0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 255b0 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) 255c0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O 255d0 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 K);.}..CK_DEFINE 255e0 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 255f0 20 43 5f 44 65 63 72 79 70 74 29 28 43 4b 5f 53 C_Decrypt)(CK_S 25600 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 25610 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f ession, CK_BYTE_ 25620 50 54 52 20 70 45 6e 63 72 79 70 74 65 64 44 61 PTR pEncryptedDa 25630 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 45 ta, CK_ULONG ulE 25640 6e 63 72 79 70 74 65 64 44 61 74 61 4c 65 6e 2c ncryptedDataLen, 25650 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 61 CK_BYTE_PTR pDa 25660 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 ta, CK_ULONG_PTR 25670 20 70 75 6c 44 61 74 61 4c 65 6e 29 20 7b 0a 09 pulDataLen) {.. 25680 43 4b 5f 55 4c 4f 4e 47 20 64 61 74 61 6c 65 6e CK_ULONG datalen 25690 5f 75 70 64 61 74 65 2c 20 64 61 74 61 6c 65 6e _update, datalen 256a0 5f 66 69 6e 61 6c 3b 0a 09 43 4b 5f 52 56 20 64 _final;..CK_RV d 256b0 65 63 72 79 70 74 5f 72 65 74 3b 0a 09 69 6e 74 ecrypt_ret;..int 256c0 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a mutex_retval;.. 256d0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 256e0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 256f0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 25700 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 25710 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 25720 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 25730 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 25740 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 25750 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 25760 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 IALIZED);..}...i 25770 66 20 28 70 75 6c 44 61 74 61 4c 65 6e 20 3d 3d f (pulDataLen == 25780 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 NULL) {...CACKE 25790 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 257a0 45 72 72 6f 72 2e 20 70 75 6c 44 61 74 61 4c 65 Error. pulDataLe 257b0 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 n is NULL.");... 257c0 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 257d0 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 257e0 09 64 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 20 .datalen_update 257f0 3d 20 2a 70 75 6c 44 61 74 61 4c 65 6e 3b 0a 0a = *pulDataLen;.. 25800 09 64 65 63 72 79 70 74 5f 72 65 74 20 3d 20 43 .decrypt_ret = C 25810 5f 44 65 63 72 79 70 74 55 70 64 61 74 65 28 68 _DecryptUpdate(h 25820 53 65 73 73 69 6f 6e 2c 20 70 45 6e 63 72 79 70 Session, pEncryp 25830 74 65 64 44 61 74 61 2c 20 75 6c 45 6e 63 72 79 tedData, ulEncry 25840 70 74 65 64 44 61 74 61 4c 65 6e 2c 20 70 44 61 ptedDataLen, pDa 25850 74 61 2c 20 26 64 61 74 61 6c 65 6e 5f 75 70 64 ta, &datalen_upd 25860 61 74 65 29 3b 0a 09 69 66 20 28 64 65 63 72 79 ate);..if (decry 25870 70 74 5f 72 65 74 20 21 3d 20 43 4b 52 5f 4f 4b pt_ret != CKR_OK 25880 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 25890 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 258a0 2e 20 20 44 65 63 72 79 70 74 55 70 64 61 74 65 . DecryptUpdate 258b0 28 29 20 72 65 74 75 72 6e 65 64 20 66 61 69 6c () returned fail 258c0 75 72 65 20 28 72 76 20 3d 20 25 6c 75 29 2e 22 ure (rv = %lu)." 258d0 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 258e0 29 20 64 65 63 72 79 70 74 5f 72 65 74 29 3b 0a ) decrypt_ret);. 258f0 0a 09 09 69 66 20 28 64 65 63 72 79 70 74 5f 72 ...if (decrypt_r 25900 65 74 20 21 3d 20 43 4b 52 5f 42 55 46 46 45 52 et != CKR_BUFFER 25910 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a 09 09 _TOO_SMALL) {... 25920 09 2f 2a 20 54 65 72 6d 69 6e 61 74 65 20 64 65 ./* Terminate de 25930 63 72 79 70 74 69 6f 6e 20 6f 70 65 72 61 74 69 cryption operati 25940 6f 6e 20 2a 2f 0a 0a 09 09 09 6d 75 74 65 78 5f on */.....mutex_ 25950 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 25960 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 mutex_lock(cacke 25970 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 09 09 69 y_biglock);....i 25980 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 25990 21 3d 20 30 29 20 7b 0a 09 09 09 09 43 41 43 4b != 0) {.....CACK 259a0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 259b0 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 "Error. Locking 259c0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 09 failed.");..... 259d0 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 259e0 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09 7d RAL_ERROR);....} 259f0 0a 0a 09 09 09 69 66 20 28 21 63 61 63 6b 65 79 .....if (!cackey 25a00 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 25a10 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 on].active) {... 25a20 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 25a30 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 25a40 6c 6f 63 6b 29 3b 0a 0a 09 09 09 09 43 41 43 4b lock);......CACK 25a50 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 25a60 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 25a70 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 25a80 09 09 0a 09 09 09 09 72 65 74 75 72 6e 28 43 4b .......return(CK 25a90 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 25aa0 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 09 09 7d 0a _INVALID);....}. 25ab0 0a 09 09 09 69 66 20 28 21 63 61 63 6b 65 79 5f ....if (!cackey_ 25ac0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 25ad0 6e 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76 n].decrypt_activ 25ae0 65 29 20 7b 0a 09 09 09 09 63 61 63 6b 65 79 5f e) {.....cackey_ 25af0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 25b00 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 25b10 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 25b20 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 25b30 44 65 63 72 79 70 74 20 6e 6f 74 20 61 63 74 69 Decrypt not acti 25b40 76 65 2e 22 29 3b 0a 09 09 0a 09 09 09 09 72 65 ve.");........re 25b50 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 turn(CKR_OPERATI 25b60 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a ON_NOT_INITIALIZ 25b70 45 44 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 63 61 ED);....}.....ca 25b80 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 25b90 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f ession].decrypt_ 25ba0 61 63 74 69 76 65 20 3d 20 30 3b 0a 0a 09 09 09 active = 0;..... 25bb0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 25bc0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 25bd0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 25be0 6b 29 3b 0a 09 09 09 69 66 20 28 6d 75 74 65 78 k);....if (mutex 25bf0 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 25c00 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 25c10 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 25c20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 Unlocking faile 25c30 64 2e 22 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 d.");......retur 25c40 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 25c50 52 4f 52 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a ROR);....}...}.. 25c60 09 09 72 65 74 75 72 6e 28 64 65 63 72 79 70 74 ..return(decrypt 25c70 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 _ret);..}...if ( 25c80 70 44 61 74 61 29 20 7b 0a 09 09 70 44 61 74 61 pData) {...pData 25c90 20 2b 3d 20 64 61 74 61 6c 65 6e 5f 75 70 64 61 += datalen_upda 25ca0 74 65 3b 0a 09 7d 0a 09 64 61 74 61 6c 65 6e 5f te;..}..datalen_ 25cb0 66 69 6e 61 6c 20 3d 20 2a 70 75 6c 44 61 74 61 final = *pulData 25cc0 4c 65 6e 20 2d 20 64 61 74 61 6c 65 6e 5f 75 70 Len - datalen_up 25cd0 64 61 74 65 3b 0a 0a 09 64 65 63 72 79 70 74 5f date;...decrypt_ 25ce0 72 65 74 20 3d 20 43 5f 44 65 63 72 79 70 74 46 ret = C_DecryptF 25cf0 69 6e 61 6c 28 68 53 65 73 73 69 6f 6e 2c 20 70 inal(hSession, p 25d00 44 61 74 61 2c 20 26 64 61 74 61 6c 65 6e 5f 66 Data, &datalen_f 25d10 69 6e 61 6c 29 3b 0a 09 69 66 20 28 64 65 63 72 inal);..if (decr 25d20 79 70 74 5f 72 65 74 20 21 3d 20 43 4b 52 5f 4f ypt_ret != CKR_O 25d30 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 K) {...CACKEY_DE 25d40 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 25d50 72 2e 20 20 44 65 63 72 79 70 74 46 69 6e 61 6c r. DecryptFinal 25d60 28 29 20 72 65 74 75 72 6e 65 64 20 66 61 69 6c () returned fail 25d70 75 72 65 20 28 72 76 20 3d 20 25 6c 75 29 2e 22 ure (rv = %lu)." 25d80 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 25d90 29 20 64 65 63 72 79 70 74 5f 72 65 74 29 3b 0a ) decrypt_ret);. 25da0 0a 09 09 72 65 74 75 72 6e 28 64 65 63 72 79 70 ...return(decryp 25db0 74 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 2a 70 75 t_ret);..}...*pu 25dc0 6c 44 61 74 61 4c 65 6e 20 3d 20 64 61 74 61 6c lDataLen = datal 25dd0 65 6e 5f 75 70 64 61 74 65 20 2b 20 64 61 74 61 en_update + data 25de0 6c 65 6e 5f 66 69 6e 61 6c 3b 0a 0a 09 43 41 43 len_final;...CAC 25df0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 25e00 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 25e10 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b OK (%i)", CKR_OK 25e20 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 25e30 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e OK);.}..CK_DEFIN 25e40 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 25e50 2c 20 43 5f 44 65 63 72 79 70 74 55 70 64 61 74 , C_DecryptUpdat 25e60 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 e)(CK_SESSION_HA 25e70 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 25e80 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 K_BYTE_PTR pEncr 25e90 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c yptedPart, CK_UL 25ea0 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64 50 ONG ulEncryptedP 25eb0 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f artLen, CK_BYTE_ 25ec0 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c PTR pPart, CK_UL 25ed0 4f 4e 47 5f 50 54 52 20 70 75 6c 50 61 72 74 4c ONG_PTR pulPartL 25ee0 65 6e 29 20 7b 0a 09 73 74 61 74 69 63 20 43 4b en) {..static CK 25ef0 5f 42 59 54 45 20 62 75 66 5b 31 36 33 38 34 5d _BYTE buf[16384] 25f00 3b 0a 09 73 73 69 7a 65 5f 74 20 62 75 66 6c 65 ;..ssize_t bufle 25f10 6e 3b 0a 09 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 n;..CK_SLOT_ID s 25f20 6c 6f 74 49 44 3b 0a 09 43 4b 5f 52 56 20 72 65 lotID;..CK_RV re 25f30 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e 45 52 tval = CKR_GENER 25f40 41 4c 5f 45 52 52 4f 52 3b 0a 09 69 6e 74 20 6d AL_ERROR;..int m 25f50 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 utex_retval;...C 25f60 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 25f70 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 25f80 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 25f90 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 25fa0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 25fb0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 25fc0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 25fd0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 25fe0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 25ff0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 LIZED);..}...if 26000 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c (hSession == 0 | 26010 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 | hSession >= (s 26020 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 26030 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 sions) / sizeof( 26040 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 26050 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 0]))) {...CACKEY 26060 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 26070 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f rror. Session o 26080 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a ut of range.");. 26090 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 260a0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 260b0 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 NVALID);..}...if 260c0 20 28 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 (pEncryptedPart 260d0 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c 45 6e == NULL && ulEn 260e0 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 3d cryptedPartLen = 260f0 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 = 0) {.../* Shor 26100 74 20 63 69 72 63 75 69 74 20 69 66 20 77 65 20 t circuit if we 26110 61 72 65 20 61 73 6b 65 64 20 74 6f 20 64 65 63 are asked to dec 26120 72 79 70 74 20 6e 6f 74 68 69 6e 67 2e 2e 2e 20 rypt nothing... 26130 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 */...CACKEY_DEBU 26140 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 26150 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 20 ing CKR_OK (%i) 26160 28 73 68 6f 72 74 20 63 69 72 63 75 69 74 29 22 (short circuit)" 26170 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 , CKR_OK);....re 26180 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d turn(CKR_OK);..} 26190 0a 0a 09 69 66 20 28 70 45 6e 63 72 79 70 74 65 ...if (pEncrypte 261a0 64 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b dPart == NULL) { 261b0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 261c0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 PRINTF("Error. p 261d0 45 6e 63 72 79 70 74 65 64 50 61 72 74 20 69 73 EncryptedPart is 261e0 20 4e 55 4c 4c 2c 20 62 75 74 20 75 6c 45 6e 63 NULL, but ulEnc 261f0 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 69 73 ryptedPartLen is 26200 20 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 09 72 65 not 0.");....re 26210 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 26220 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if 26230 20 28 75 6c 45 6e 63 72 79 70 74 65 64 50 61 72 (ulEncryptedPar 26240 74 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 43 tLen == 0) {...C 26250 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 26260 54 46 28 22 45 72 72 6f 72 2e 20 75 6c 45 6e 63 TF("Error. ulEnc 26270 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 69 73 ryptedPartLen is 26280 20 30 2c 20 62 75 74 20 70 50 61 72 74 20 69 73 0, but pPart is 26290 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 not NULL.");... 262a0 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 262b0 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 262c0 09 69 66 20 28 70 75 6c 50 61 72 74 4c 65 6e 20 .if (pulPartLen 262d0 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 262e0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 262f0 28 22 45 72 72 6f 72 2e 20 70 75 6c 50 61 72 74 ("Error. pulPart 26300 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a Len is NULL.");. 26310 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 26320 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} 26330 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 26340 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c = cackey_mutex_l 26350 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 26360 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 26370 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 26380 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 26390 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f INTF("Error. Lo 263a0 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 263b0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 263c0 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 263d0 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f }...if (!cackey_ 263e0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 263f0 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 n].active) {...c 26400 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 26410 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 26420 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 26430 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 26440 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 r. Session not 26450 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 active.");...... 26460 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 26470 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 26480 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 D);..}...if (!ca 26490 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 264a0 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f ession].decrypt_ 264b0 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b active) {...cack 264c0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 264d0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 264e0 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 264f0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 26500 20 44 65 63 72 79 70 74 20 6e 6f 74 20 61 63 74 Decrypt not act 26510 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ive.");......ret 26520 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f urn(CKR_OPERATIO 26530 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 N_NOT_INITIALIZE 26540 44 29 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 49 44 20 D);..}...slotID 26550 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e = cackey_session 26560 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f 74 s[hSession].slot 26570 49 44 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 ID;...if (slotID 26580 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e < 0 || slotID > 26590 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 = (sizeof(cackey 265a0 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 _slots) / sizeof 265b0 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d (cackey_slots[0] 265c0 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ))) {...CACKEY_D 265d0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 265e0 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 or. Invalid slot 265f0 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 requested (%lu) 26600 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c , outside of val 26610 69 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 id range", slotI 26620 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b D);....return(CK 26630 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 26640 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 ;..}...if (cacke 26650 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e y_slots[slotID]. 26660 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09 active == 0) {.. 26670 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 26680 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 INTF("Error. Inv 26690 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 alid slot reques 266a0 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 ted (%lu), slot 266b0 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 63 not currently ac 266c0 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a tive", slotID);. 266d0 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 266e0 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 266f0 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72 glock);....retur 26700 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 26710 52 4f 52 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 ROR);..}...switc 26720 68 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f h (cackey_sessio 26730 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 ns[hSession].dec 26740 72 79 70 74 5f 6d 65 63 68 61 6e 69 73 6d 29 20 rypt_mechanism) 26750 7b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 53 41 {...case CKM_RSA 26760 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 73 6b _PKCS:..../* Ask 26770 20 63 61 72 64 20 74 6f 20 64 65 63 72 79 70 74 card to decrypt 26780 20 2a 2f 0a 09 09 09 62 75 66 6c 65 6e 20 3d 20 */....buflen = 26790 63 61 63 6b 65 79 5f 73 69 67 6e 64 65 63 72 79 cackey_signdecry 267a0 70 74 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 pt(&cackey_slots 267b0 5b 73 6c 6f 74 49 44 5d 2c 20 63 61 63 6b 65 79 [slotID], cackey 267c0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 267d0 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 69 64 65 6e on].decrypt_iden 267e0 74 69 74 79 2c 20 70 45 6e 63 72 79 70 74 65 64 tity, pEncrypted 267f0 50 61 72 74 2c 20 75 6c 45 6e 63 72 79 70 74 65 Part, ulEncrypte 26800 64 50 61 72 74 4c 65 6e 2c 20 62 75 66 2c 20 73 dPartLen, buf, s 26810 69 7a 65 6f 66 28 62 75 66 29 2c 20 30 2c 20 31 izeof(buf), 0, 1 26820 29 3b 0a 0a 09 09 09 69 66 20 28 62 75 66 6c 65 );.....if (bufle 26830 6e 20 3c 20 30 29 20 7b 0a 09 09 09 09 2f 2a 20 n < 0) {...../* 26840 44 65 63 72 79 70 74 69 6f 6e 20 66 61 69 6c 65 Decryption faile 26850 64 2e 20 2a 2f 0a 09 09 09 09 69 66 20 28 62 75 d. */.....if (bu 26860 66 6c 65 6e 20 3d 3d 20 43 41 43 4b 45 59 5f 50 flen == CACKEY_P 26870 43 53 43 5f 45 5f 4e 45 45 44 4c 4f 47 49 4e 29 CSC_E_NEEDLOGIN) 26880 20 7b 0a 09 09 09 09 09 72 65 74 76 61 6c 20 3d {......retval = 26890 20 43 4b 52 5f 55 53 45 52 5f 4e 4f 54 5f 4c 4f CKR_USER_NOT_LO 268a0 47 47 45 44 5f 49 4e 3b 0a 09 09 09 09 7d 20 65 GGED_IN;.....} e 268b0 6c 73 65 20 69 66 20 28 62 75 66 6c 65 6e 20 3d lse if (buflen = 268c0 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f = CACKEY_PCSC_E_ 268d0 54 4f 4b 45 4e 41 42 53 45 4e 54 29 20 7b 0a 09 TOKENABSENT) {.. 268e0 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 ....retval = CKR 268f0 5f 44 45 56 49 43 45 5f 52 45 4d 4f 56 45 44 3b _DEVICE_REMOVED; 26900 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 .....} else {... 26910 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f ...retval = CKR_ 26920 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 GENERAL_ERROR;.. 26930 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65 20 69 ...}....} else i 26940 66 20 28 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f f (((unsigned lo 26950 6e 67 29 20 62 75 66 6c 65 6e 29 20 3e 20 2a 70 ng) buflen) > *p 26960 75 6c 50 61 72 74 4c 65 6e 20 26 26 20 70 50 61 ulPartLen && pPa 26970 72 74 29 20 7b 0a 09 09 09 09 2f 2a 20 44 65 63 rt) {...../* Dec 26980 72 79 70 74 65 64 20 64 61 74 61 20 74 6f 6f 20 rypted data too 26990 6c 61 72 67 65 20 2a 2f 0a 09 09 09 09 72 65 74 large */.....ret 269a0 76 61 6c 20 3d 20 43 4b 52 5f 42 55 46 46 45 52 val = CKR_BUFFER 269b0 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b 0a 09 09 09 7d _TOO_SMALL;....} 269c0 20 65 6c 73 65 20 7b 0a 09 09 09 09 69 66 20 28 else {.....if ( 269d0 70 50 61 72 74 29 20 7b 0a 09 09 09 09 09 6d 65 pPart) {......me 269e0 6d 63 70 79 28 70 50 61 72 74 2c 20 62 75 66 2c mcpy(pPart, buf, 269f0 20 62 75 66 6c 65 6e 29 3b 0a 09 09 09 09 7d 0a buflen);.....}. 26a00 0a 09 09 09 09 2a 70 75 6c 50 61 72 74 4c 65 6e .....*pulPartLen 26a10 20 3d 20 62 75 66 6c 65 6e 3b 0a 0a 09 09 09 09 = buflen;...... 26a20 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 4f 4b 3b retval = CKR_OK; 26a30 0a 09 09 09 7d 0a 0a 09 09 09 62 72 65 61 6b 3b ....}.....break; 26a40 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 26a50 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 26a60 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 26a70 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 26a80 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 26a90 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 26aa0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 26ab0 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 . Unlocking fai 26ac0 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 26ad0 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 26ae0 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ROR);..}...CACKE 26af0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 26b00 52 65 74 75 72 6e 69 6e 67 20 25 69 22 2c 20 28 Returning %i", ( 26b10 69 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a 0a 09 int) retval);... 26b20 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a return(retval);. 26b30 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 26b40 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 CTION(CK_RV, C_D 26b50 65 63 72 79 70 74 46 69 6e 61 6c 29 28 43 4b 5f ecryptFinal)(CK_ 26b60 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 26b70 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 26b80 5f 50 54 52 20 70 4c 61 73 74 50 61 72 74 2c 20 _PTR pLastPart, 26b90 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 26ba0 4c 61 73 74 50 61 72 74 4c 65 6e 29 20 7b 0a 09 LastPartLen) {.. 26bb0 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c int mutex_retval 26bc0 3b 0a 09 69 6e 74 20 74 65 72 6d 69 6e 61 74 65 ;..int terminate 26bd0 5f 64 65 63 72 79 70 74 20 3d 20 31 3b 0a 0a 09 _decrypt = 1;... 26be0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 26bf0 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 26c00 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 26c10 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 26c20 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 26c30 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 26c40 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 26c50 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 26c60 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 26c70 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 26c80 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 (hSession == 0 26c90 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 || hSession >= ( 26ca0 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 26cb0 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 26cc0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 26cd0 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE 26ce0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 26cf0 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 26d00 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b out of range."); 26d10 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 26d20 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 26d30 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 26d40 66 20 28 70 75 6c 4c 61 73 74 50 61 72 74 4c 65 f (pulLastPartLe 26d50 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 n == NULL) {...C 26d60 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 26d70 54 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 4c 61 TF("Error. pulLa 26d80 73 74 50 61 72 74 4c 65 6e 20 69 73 20 4e 55 4c stPartLen is NUL 26d90 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 L.");....return( 26da0 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA 26db0 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 D);..}...mutex_r 26dc0 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 26dd0 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 utex_lock(cackey 26de0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 26df0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 26e00 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 26e10 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 26e20 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c r. Locking fail 26e30 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 26e40 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 26e50 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 OR);..}...if (!c 26e60 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 26e70 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 Session].active) 26e80 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 26e90 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 26ea0 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 26eb0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 26ec0 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 26ed0 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b n not active."); 26ee0 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 26ef0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 26f00 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 INVALID);..}...i 26f10 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 26f20 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 ons[hSession].de 26f30 63 72 79 70 74 5f 61 63 74 69 76 65 29 20 7b 0a crypt_active) {. 26f40 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 26f50 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 26f60 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 lock);....CACKEY 26f70 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 26f80 72 72 6f 72 2e 20 20 44 65 63 72 79 70 74 20 6e rror. Decrypt n 26f90 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 ot active.");... 26fa0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 ...return(CKR_OP 26fb0 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 ERATION_NOT_INIT 26fc0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 2a IALIZED);..}...* 26fd0 70 75 6c 4c 61 73 74 50 61 72 74 4c 65 6e 20 3d pulLastPartLen = 26fe0 20 30 3b 0a 0a 09 69 66 20 28 70 4c 61 73 74 50 0;...if (pLastP 26ff0 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 art == NULL) {.. 27000 09 74 65 72 6d 69 6e 61 74 65 5f 64 65 63 72 79 .terminate_decry 27010 70 74 20 3d 20 30 3b 0a 09 7d 0a 0a 09 69 66 20 pt = 0;..}...if 27020 28 74 65 72 6d 69 6e 61 74 65 5f 64 65 63 72 79 (terminate_decry 27030 70 74 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 73 pt) {...cackey_s 27040 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 27050 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 ].decrypt_active 27060 20 3d 20 30 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 = 0;..}...mutex 27070 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 27080 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 27090 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 270a0 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 270b0 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 270c0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 270d0 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e Error. Unlockin 270e0 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 270f0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 27100 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 27110 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 27120 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 27130 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR 27140 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C 27150 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 KR_OK);.}..CK_DE 27160 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 27170 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 49 6e 69 _RV, C_DigestIni 27180 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 t)(CK_SESSION_HA 27190 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 271a0 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 K_MECHANISM_PTR 271b0 70 4d 65 63 68 61 6e 69 73 6d 29 20 7b 0a 09 43 pMechanism) {..C 271c0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 271d0 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 271e0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 271f0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 27200 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 27210 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 27220 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 27230 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 27240 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 27250 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 27260 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 27270 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 27280 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 27290 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 272a0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 272b0 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 272c0 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 272d0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 272e0 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 272f0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 27300 44 69 67 65 73 74 29 28 43 4b 5f 53 45 53 53 49 Digest)(CK_SESSI 27310 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 27320 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 27330 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 pData, CK_ULONG 27340 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 ulDataLen, CK_BY 27350 54 45 5f 50 54 52 20 70 44 69 67 65 73 74 2c 20 TE_PTR pDigest, 27360 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 27370 44 69 67 65 73 74 4c 65 6e 29 20 7b 0a 09 43 41 DigestLen) {..CA 27380 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 27390 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 273a0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 273b0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 273c0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 273d0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 273e0 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 273f0 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 27400 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 27410 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 27420 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 27430 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 27440 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 27450 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 27460 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 27470 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 27480 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 27490 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 274a0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 274b0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 CTION(CK_RV, C_D 274c0 69 67 65 73 74 55 70 64 61 74 65 29 28 43 4b 5f igestUpdate)(CK_ 274d0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 274e0 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 274f0 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 _PTR pPart, CK_U 27500 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 6e 29 20 LONG ulPartLen) 27510 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f {..CACKEY_DEBUG_ 27520 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 27530 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 27540 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 27550 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 27560 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 27570 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 27580 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 27590 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 275a0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 275b0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 275c0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 275d0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 275e0 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 _SUPPORTED (%i)" 275f0 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e , CKR_FUNCTION_N 27600 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a OT_SUPPORTED);.. 27610 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 27620 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 27630 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e ED);.}..CK_DEFIN 27640 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 27650 2c 20 43 5f 44 69 67 65 73 74 4b 65 79 29 28 43 , C_DigestKey)(C 27660 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 27670 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 hSession, CK_OB 27680 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 JECT_HANDLE hKey 27690 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 276a0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 276b0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 276c0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 276d0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 276e0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 276f0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 27700 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 27710 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 27720 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 27730 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 27740 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 27750 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 27760 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 27770 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 27780 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 27790 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 277a0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 277b0 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 277c0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 277d0 52 56 2c 20 43 5f 44 69 67 65 73 74 46 69 6e 61 RV, C_DigestFina 277e0 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 l)(CK_SESSION_HA 277f0 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 27800 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 69 67 65 K_BYTE_PTR pDige 27810 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 st, CK_ULONG_PTR 27820 20 70 75 6c 44 69 67 65 73 74 4c 65 6e 29 20 7b pulDigestLen) { 27830 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 27840 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 27850 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 27860 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 27870 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 27880 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 27890 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 278a0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 278b0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 278c0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 278d0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 278e0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 278f0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 27900 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 27910 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 27920 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 27930 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 27940 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 27950 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 27960 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 27970 20 43 5f 53 69 67 6e 49 6e 69 74 29 28 43 4b 5f C_SignInit)(CK_ 27980 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 27990 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 Session, CK_MECH 279a0 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 ANISM_PTR pMecha 279b0 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f nism, CK_OBJECT_ 279c0 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09 HANDLE hKey) {.. 279d0 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c int mutex_retval 279e0 3b 0a 0a 09 68 4b 65 79 2d 2d 3b 0a 0a 09 43 41 ;...hKey--;...CA 279f0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 27a00 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 27a10 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 27a20 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 27a30 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 27a40 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 27a50 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 27a60 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 27a70 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 27a80 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 IZED);..}...if ( 27a90 70 4d 65 63 68 61 6e 69 73 6d 20 3d 3d 20 4e 55 pMechanism == NU 27aa0 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 LL) {...CACKEY_D 27ab0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 27ac0 6f 72 2e 20 70 4d 65 63 68 61 6e 69 73 6d 20 69 or. pMechanism i 27ad0 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 s NULL.");....re 27ae0 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 27af0 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if 27b00 20 28 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 (pMechanism->me 27b10 63 68 61 6e 69 73 6d 20 21 3d 20 43 4b 4d 5f 52 chanism != CKM_R 27b20 53 41 5f 50 4b 43 53 29 20 7b 0a 09 09 43 41 43 SA_PKCS) {...CAC 27b30 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 27b40 28 22 45 72 72 6f 72 2e 20 70 4d 65 63 68 61 6e ("Error. pMechan 27b50 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 20 6e ism->mechanism n 27b60 6f 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20 ot specified as 27b70 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 22 29 3b 0a CKM_RSA_PKCS");. 27b80 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4d 45 ...return(CKR_ME 27b90 43 48 41 4e 49 53 4d 5f 50 41 52 41 4d 5f 49 4e CHANISM_PARAM_IN 27ba0 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 VALID);..}...if 27bb0 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c (hSession == 0 | 27bc0 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 | hSession >= (s 27bd0 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 27be0 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 sions) / sizeof( 27bf0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 27c00 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 0]))) {...CACKEY 27c10 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 27c20 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f rror. Session o 27c30 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a ut of range.");. 27c40 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 27c50 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 27c60 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 NVALID);..}...mu 27c70 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 27c80 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 key_mutex_lock(c 27c90 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 27ca0 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 27cb0 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 27cc0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 27cd0 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 "Error. Locking 27ce0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 27cf0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 27d00 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i 27d10 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 27d20 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 ons[hSession].ac 27d30 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 tive) {...cackey 27d40 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 27d50 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 27d60 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 27d70 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 27d80 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 ession not activ 27d90 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 27da0 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 27db0 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 27dc0 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 }...if (cackey_s 27dd0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 27de0 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 29 20 7b ].sign_active) { 27df0 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 27e00 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 27e10 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 27e20 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 27e30 45 72 72 6f 72 2e 20 20 53 69 67 6e 20 61 6c 72 Error. Sign alr 27e40 65 61 64 79 20 69 6e 20 70 72 6f 67 72 65 73 73 eady in progress 27e50 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 27e60 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 41 (CKR_OPERATION_A 27e70 43 54 49 56 45 29 3b 0a 09 7d 0a 0a 09 69 66 20 CTIVE);..}...if 27e80 28 68 4b 65 79 20 3e 3d 20 63 61 63 6b 65 79 5f (hKey >= cackey_ 27e90 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 27ea0 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f n].identities_co 27eb0 75 6e 74 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f unt) {...cackey_ 27ec0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 27ed0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 27ee0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 27ef0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4b 65 INTF("Error. Ke 27f00 79 20 68 61 6e 64 6c 65 20 6f 75 74 20 6f 66 20 y handle out of 27f10 72 61 6e 67 65 20 28 72 65 71 75 65 73 74 65 64 range (requested 27f20 20 6b 65 79 20 25 6c 75 2c 20 6f 6e 6c 79 20 25 key %lu, only % 27f30 6c 75 20 69 64 65 6e 74 69 74 69 65 73 20 61 76 lu identities av 27f40 61 69 6c 61 62 6c 65 29 2e 22 2c 20 28 75 6e 73 ailable).", (uns 27f50 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 4b 65 79 igned long) hKey 27f60 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 27f70 29 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ) cackey_session 27f80 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 27f90 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 3b 0a 0a tities_count);.. 27fa0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4b 45 59 ..return(CKR_KEY 27fb0 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 27fc0 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 ;..}...cackey_se 27fd0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 27fe0 2e 73 69 67 6e 5f 61 63 74 69 76 65 20 3d 20 31 .sign_active = 1 27ff0 3b 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 ;...cackey_sessi 28000 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 28010 67 6e 5f 6d 65 63 68 61 6e 69 73 6d 20 3d 20 70 gn_mechanism = p 28020 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 Mechanism->mecha 28030 6e 69 73 6d 3b 0a 0a 09 63 61 63 6b 65 79 5f 73 nism;...cackey_s 28040 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 28050 5d 2e 73 69 67 6e 5f 62 75 66 6c 65 6e 20 3d 20 ].sign_buflen = 28060 31 32 38 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73 128;..cackey_ses 28070 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 28080 73 69 67 6e 5f 62 75 66 75 73 65 64 20 3d 20 30 sign_bufused = 0 28090 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ;..cackey_sessio 280a0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 280b0 6e 5f 62 75 66 20 3d 20 6d 61 6c 6c 6f 63 28 73 n_buf = malloc(s 280c0 69 7a 65 6f 66 28 2a 63 61 63 6b 65 79 5f 73 65 izeof(*cackey_se 280d0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 280e0 2e 73 69 67 6e 5f 62 75 66 29 20 2a 20 63 61 63 .sign_buf) * cac 280f0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 28100 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c ssion].sign_bufl 28110 65 6e 29 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 en);...CACKEY_DE 28120 42 55 47 5f 50 52 49 4e 54 46 28 22 53 65 73 73 BUG_PRINTF("Sess 28130 69 6f 6e 20 25 6c 75 20 73 69 67 6e 5f 69 64 65 ion %lu sign_ide 28140 6e 74 69 74 79 20 69 73 20 25 70 20 28 69 64 65 ntity is %p (ide 28150 6e 74 69 74 79 20 23 25 6c 75 29 22 2c 20 28 75 ntity #%lu)", (u 28160 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 53 nsigned long) hS 28170 65 73 73 69 6f 6e 2c 20 28 76 6f 69 64 20 2a 29 ession, (void *) 28180 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e &cackey_session 28190 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 281a0 74 69 74 69 65 73 5b 68 4b 65 79 5d 2c 20 28 75 tities[hKey], (u 281b0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 4b nsigned long) hK 281c0 65 79 29 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73 ey);..cackey_ses 281d0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 281e0 73 69 67 6e 5f 69 64 65 6e 74 69 74 79 20 3d 20 sign_identity = 281f0 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 &cackey_sessions 28200 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 [hSession].ident 28210 69 74 69 65 73 5b 68 4b 65 79 5d 3b 0a 0a 09 6d ities[hKey];...m 28220 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 28230 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 ckey_mutex_unloc 28240 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 28250 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 28260 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 28270 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 28280 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f TF("Error. Unlo 28290 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 282a0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 282b0 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 282c0 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 282d0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 282e0 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c ng CKR_OK (%i)", 282f0 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 CKR_OK);...retu 28300 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 rn(CKR_OK);.}..C 28310 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 28320 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 29 N(CK_RV, C_Sign) 28330 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 28340 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 28350 42 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 BYTE_PTR pData, 28360 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c CK_ULONG ulDataL 28370 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 en, CK_BYTE_PTR 28380 70 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 pSignature, CK_U 28390 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 67 6e LONG_PTR pulSign 283a0 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09 75 6e 73 atureLen) {..uns 283b0 69 67 6e 65 64 20 6c 6f 6e 67 20 73 74 61 72 74 igned long start 283c0 5f 73 69 67 6e 5f 62 75 66 75 73 65 64 3b 0a 09 _sign_bufused;.. 283d0 43 4b 5f 52 56 20 73 69 67 6e 5f 72 65 74 3b 0a CK_RV sign_ret;. 283e0 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 .int mutex_retva 283f0 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 l;...CACKEY_DEBU 28400 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 28410 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 28420 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 28430 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 28440 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 28450 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 28460 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 28470 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 28480 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 28490 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 ...if (hSession 284a0 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e == 0 || hSession 284b0 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b >= (sizeof(cack 284c0 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 284d0 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 284e0 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 sions[0]))) {... 284f0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 28500 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 NTF("Error. Ses 28510 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 sion out of rang 28520 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 28530 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 28540 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 28550 7d 0a 0a 09 73 74 61 72 74 5f 73 69 67 6e 5f 62 }...start_sign_b 28560 75 66 75 73 65 64 20 3d 20 63 61 63 6b 65 79 5f ufused = cackey_ 28570 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 28580 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73 65 64 3b n].sign_bufused; 28590 0a 0a 09 73 69 67 6e 5f 72 65 74 20 3d 20 43 5f ...sign_ret = C_ 285a0 53 69 67 6e 55 70 64 61 74 65 28 68 53 65 73 73 SignUpdate(hSess 285b0 69 6f 6e 2c 20 70 44 61 74 61 2c 20 75 6c 44 61 ion, pData, ulDa 285c0 74 61 4c 65 6e 29 3b 0a 09 69 66 20 28 73 69 67 taLen);..if (sig 285d0 6e 5f 72 65 74 20 21 3d 20 43 4b 52 5f 4f 4b 29 n_ret != CKR_OK) 285e0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 285f0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 28600 20 20 53 69 67 6e 55 70 64 61 74 65 28 29 20 72 SignUpdate() r 28610 65 74 75 72 6e 65 64 20 66 61 69 6c 75 72 65 20 eturned failure 28620 28 72 76 20 3d 20 25 6c 75 29 2e 22 2c 20 28 75 (rv = %lu).", (u 28630 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 69 nsigned long) si 28640 67 6e 5f 72 65 74 29 3b 0a 0a 09 09 69 66 20 28 gn_ret);....if ( 28650 73 69 67 6e 5f 72 65 74 20 21 3d 20 43 4b 52 5f sign_ret != CKR_ 28660 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c BUFFER_TOO_SMALL 28670 29 20 7b 0a 09 09 09 6d 75 74 65 78 5f 72 65 74 ) {....mutex_ret 28680 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 28690 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 ex_lock(cackey_b 286a0 69 67 6c 6f 63 6b 29 3b 0a 09 09 09 69 66 20 28 iglock);....if ( 286b0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 286c0 30 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 0) {.....CACKEY_ 286d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 286e0 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 ror. Locking fa 286f0 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 09 09 72 65 iled.");......re 28700 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 28710 5f 45 52 52 4f 52 29 3b 0a 09 09 09 7d 0a 0a 09 _ERROR);....}... 28720 09 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 ..if (!cackey_se 28730 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 28740 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 09 09 63 .active) {.....c 28750 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 28760 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 28770 6b 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f k);......CACKEY_ 28780 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 28790 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f ror. Session no 287a0 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a t active.");.... 287b0 09 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 287c0 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 287d0 56 41 4c 49 44 29 3b 0a 09 09 09 7d 0a 0a 09 09 VALID);....}.... 287e0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 .if (!cackey_ses 287f0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 28800 73 69 67 6e 5f 61 63 74 69 76 65 29 20 7b 0a 09 sign_active) {.. 28810 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 28820 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 28830 67 6c 6f 63 6b 29 3b 0a 0a 09 09 09 09 43 41 43 glock);......CAC 28840 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 28850 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 20 6e ("Error. Sign n 28860 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 ot active.");... 28870 0a 09 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 28880 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e OPERATION_NOT_IN 28890 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 09 09 7d ITIALIZED);....} 288a0 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 .....cackey_sess 288b0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 288c0 69 67 6e 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a ign_active = 0;. 288d0 0a 09 09 09 6d 75 74 65 78 5f 72 65 74 76 61 6c ....mutex_retval 288e0 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 288f0 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 28900 67 6c 6f 63 6b 29 3b 0a 09 09 09 69 66 20 28 6d glock);....if (m 28910 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 28920 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 ) {.....CACKEY_D 28930 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 28940 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 or. Unlocking f 28950 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 09 09 72 ailed.");......r 28960 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 28970 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09 7d 0a 09 L_ERROR);....}.. 28980 09 7d 0a 0a 09 09 72 65 74 75 72 6e 28 73 69 67 .}....return(sig 28990 6e 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 73 69 67 n_ret);..}...sig 289a0 6e 5f 72 65 74 20 3d 20 43 5f 53 69 67 6e 46 69 n_ret = C_SignFi 289b0 6e 61 6c 28 68 53 65 73 73 69 6f 6e 2c 20 70 53 nal(hSession, pS 289c0 69 67 6e 61 74 75 72 65 2c 20 70 75 6c 53 69 67 ignature, pulSig 289d0 6e 61 74 75 72 65 4c 65 6e 29 3b 0a 09 69 66 20 natureLen);..if 289e0 28 73 69 67 6e 5f 72 65 74 20 21 3d 20 43 4b 52 (sign_ret != CKR 289f0 5f 4f 4b 29 20 7b 0a 09 09 69 66 20 28 73 69 67 _OK) {...if (sig 28a00 6e 5f 72 65 74 20 3d 3d 20 43 4b 52 5f 42 55 46 n_ret == CKR_BUF 28a10 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 20 7b FER_TOO_SMALL) { 28a20 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 28a30 5f 50 52 49 4e 54 46 28 22 53 69 67 6e 46 69 6e _PRINTF("SignFin 28a40 61 6c 28 29 20 72 65 74 75 72 6e 65 64 20 43 4b al() returned CK 28a50 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 R_BUFFER_TOO_SMA 28a60 4c 4c 20 28 72 76 20 3d 20 25 6c 75 29 2c 20 75 LL (rv = %lu), u 28a70 6e 64 6f 69 6e 67 20 43 5f 53 69 67 6e 55 70 64 ndoing C_SignUpd 28a80 61 74 65 28 29 22 2c 20 28 75 6e 73 69 67 6e 65 ate()", (unsigne 28a90 64 20 6c 6f 6e 67 29 20 73 69 67 6e 5f 72 65 74 d long) sign_ret 28aa0 29 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 );.....cackey_se 28ab0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 28ac0 2e 73 69 67 6e 5f 62 75 66 75 73 65 64 20 3d 20 .sign_bufused = 28ad0 73 74 61 72 74 5f 73 69 67 6e 5f 62 75 66 75 73 start_sign_bufus 28ae0 65 64 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 73 ed;.....return(s 28af0 69 67 6e 5f 72 65 74 29 3b 0a 09 09 7d 0a 0a 09 ign_ret);...}... 28b00 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 28b10 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 69 INTF("Error. Si 28b20 67 6e 46 69 6e 61 6c 28 29 20 72 65 74 75 72 6e gnFinal() return 28b30 65 64 20 66 61 69 6c 75 72 65 20 28 72 76 20 3d ed failure (rv = 28b40 20 25 6c 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e %lu).", (unsign 28b50 65 64 20 6c 6f 6e 67 29 20 73 69 67 6e 5f 72 65 ed long) sign_re 28b60 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 73 69 t);....return(si 28b70 67 6e 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 69 66 gn_ret);..}...if 28b80 20 28 70 53 69 67 6e 61 74 75 72 65 20 3d 3d 20 (pSignature == 28b90 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY 28ba0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 70 _DEBUG_PRINTF("p 28bb0 53 69 67 6e 61 74 75 72 65 20 73 70 65 63 69 66 Signature specif 28bc0 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 75 6e 64 ied as NULL, und 28bd0 6f 69 6e 67 20 43 5f 53 69 67 6e 55 70 64 61 74 oing C_SignUpdat 28be0 65 28 29 22 29 3b 0a 0a 09 09 63 61 63 6b 65 79 e()");....cackey 28bf0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 28c00 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73 65 64 on].sign_bufused 28c10 20 3d 20 73 74 61 72 74 5f 73 69 67 6e 5f 62 75 = start_sign_bu 28c20 66 75 73 65 64 3b 0a 0a 09 09 72 65 74 75 72 6e fused;....return 28c30 28 73 69 67 6e 5f 72 65 74 29 3b 0a 09 7d 0a 0a (sign_ret);..}.. 28c40 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 28c50 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 28c60 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK 28c70 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 R_OK);...return( 28c80 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 CKR_OK);.}..CK_D 28c90 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 28ca0 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 55 70 64 61 K_RV, C_SignUpda 28cb0 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 te)(CK_SESSION_H 28cc0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 28cd0 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 CK_BYTE_PTR pPar 28ce0 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 t, CK_ULONG ulPa 28cf0 72 74 4c 65 6e 29 20 7b 0a 09 69 6e 74 20 6d 75 rtLen) {..int mu 28d00 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 tex_retval;...CA 28d10 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 28d20 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 28d30 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 28d40 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 28d50 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 28d60 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 28d70 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 28d80 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 28d90 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 28da0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 IZED);..}...if ( 28db0 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c hSession == 0 || 28dc0 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 hSession >= (si 28dd0 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 28de0 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 ions) / sizeof(c 28df0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 ackey_sessions[0 28e00 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ]))) {...CACKEY_ 28e10 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 28e20 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 ror. Session ou 28e30 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 t of range.");.. 28e40 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 28e50 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 28e60 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 VALID);..}...if 28e70 28 70 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 20 26 (pPart == NULL & 28e80 26 20 75 6c 50 61 72 74 4c 65 6e 20 3d 3d 20 30 & ulPartLen == 0 28e90 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 74 20 63 ) {.../* Short c 28ea0 69 72 63 75 69 74 20 69 66 20 77 65 20 61 72 65 ircuit if we are 28eb0 20 61 73 6b 65 64 20 74 6f 20 73 69 67 6e 20 6e asked to sign n 28ec0 6f 74 68 69 6e 67 2e 2e 2e 20 2a 2f 0a 09 09 43 othing... */...C 28ed0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 28ee0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 28ef0 52 5f 4f 4b 20 28 25 69 29 20 28 73 68 6f 72 74 R_OK (%i) (short 28f00 20 63 69 72 63 75 69 74 29 22 2c 20 43 4b 52 5f circuit)", CKR_ 28f10 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 OK);....return(C 28f20 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 KR_OK);..}...if 28f30 28 70 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 20 (pPart == NULL) 28f40 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 28f50 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 28f60 70 50 61 72 74 20 69 73 20 4e 55 4c 4c 2c 20 62 pPart is NULL, b 28f70 75 74 20 75 6c 50 61 72 74 4c 65 6e 20 69 73 20 ut ulPartLen is 28f80 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 09 72 65 74 not 0.");....ret 28f90 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 urn(CKR_ARGUMENT 28fa0 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 S_BAD);..}...if 28fb0 28 75 6c 50 61 72 74 4c 65 6e 20 3d 3d 20 30 29 (ulPartLen == 0) 28fc0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 28fd0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 28fe0 20 75 6c 50 61 72 74 4c 65 6e 20 69 73 20 30 2c ulPartLen is 0, 28ff0 20 62 75 74 20 70 50 61 72 74 20 69 73 20 6e 6f but pPart is no 29000 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 t NULL.");....re 29010 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 29020 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 6d 75 TS_BAD);..}...mu 29030 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 29040 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 key_mutex_lock(c 29050 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 29060 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 29070 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 29080 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 29090 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 "Error. Locking 290a0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 290b0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 290c0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i 290d0 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 290e0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 ons[hSession].ac 290f0 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 tive) {...cackey 29100 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 29110 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 29120 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 29130 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 29140 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 ession not activ 29150 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 29160 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 29170 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 29180 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f }...if (!cackey_ 29190 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 291a0 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 29 20 n].sign_active) 291b0 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 291c0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 291d0 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 291e0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 291f0 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 20 6e 6f "Error. Sign no 29200 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a t active.");.... 29210 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 ..return(CKR_OPE 29220 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 RATION_NOT_INITI 29230 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 73 77 ALIZED);..}...sw 29240 69 74 63 68 20 28 63 61 63 6b 65 79 5f 73 65 73 itch (cackey_ses 29250 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 29260 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 6d 29 20 sign_mechanism) 29270 7b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 53 41 {...case CKM_RSA 29280 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 63 63 _PKCS:..../* Acc 29290 75 6d 75 6c 61 74 65 20 64 69 72 65 63 74 6c 79 umulate directly 292a0 20 2a 2f 0a 09 09 09 69 66 20 28 28 63 61 63 6b */....if ((cack 292b0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 292c0 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73 sion].sign_bufus 292d0 65 64 20 2b 20 75 6c 50 61 72 74 4c 65 6e 29 20 ed + ulPartLen) 292e0 3e 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e > cackey_session 292f0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 29300 5f 62 75 66 6c 65 6e 29 20 7b 0a 09 09 09 09 63 _buflen) {.....c 29310 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 29320 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 Session].sign_bu 29330 66 6c 65 6e 20 2a 3d 20 32 3b 0a 0a 09 09 09 09 flen *= 2;...... 29340 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 29350 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 hSession].sign_b 29360 75 66 20 3d 20 72 65 61 6c 6c 6f 63 28 63 61 63 uf = realloc(cac 29370 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 29380 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 2c ssion].sign_buf, 29390 20 73 69 7a 65 6f 66 28 2a 63 61 63 6b 65 79 5f sizeof(*cackey_ 293a0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 293b0 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20 2a 20 63 n].sign_buf) * c 293c0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 293d0 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 Session].sign_bu 293e0 66 6c 65 6e 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 flen);....}..... 293f0 6d 65 6d 63 70 79 28 63 61 63 6b 65 79 5f 73 65 memcpy(cackey_se 29400 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 29410 2e 73 69 67 6e 5f 62 75 66 20 2b 20 63 61 63 6b .sign_buf + cack 29420 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 29430 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73 sion].sign_bufus 29440 65 64 2c 20 70 50 61 72 74 2c 20 75 6c 50 61 72 ed, pPart, ulPar 29450 74 4c 65 6e 29 3b 0a 0a 09 09 09 63 61 63 6b 65 tLen);.....cacke 29460 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 29470 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73 65 ion].sign_bufuse 29480 64 20 2b 3d 20 75 6c 50 61 72 74 4c 65 6e 3b 0a d += ulPartLen;. 29490 0a 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 ....break;..}... 294a0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 294b0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 294c0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 294d0 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 294e0 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 294f0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 29500 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c NTF("Error. Unl 29510 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 29520 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 29530 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 29540 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 29550 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 29560 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 29570 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret 29580 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}.. 29590 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 295a0 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e ON(CK_RV, C_Sign 295b0 46 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f Final)(CK_SESSIO 295c0 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 295d0 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 295e0 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c Signature, CK_UL 295f0 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 ONG_PTR pulSigna 29600 74 75 72 65 4c 65 6e 29 20 7b 0a 09 73 74 61 74 tureLen) {..stat 29610 69 63 20 43 4b 5f 42 59 54 45 20 73 69 67 62 75 ic CK_BYTE sigbu 29620 66 5b 31 30 32 34 5d 3b 0a 09 73 73 69 7a 65 5f f[1024];..ssize_ 29630 74 20 73 69 67 62 75 66 6c 65 6e 3b 0a 09 43 4b t sigbuflen;..CK 29640 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 3b _SLOT_ID slotID; 29650 0a 09 43 4b 5f 52 56 20 72 65 74 76 61 6c 20 3d ..CK_RV retval = 29660 20 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 CKR_GENERAL_ERR 29670 4f 52 3b 0a 09 69 6e 74 20 74 65 72 6d 69 6e 61 OR;..int termina 29680 74 65 5f 73 69 67 6e 20 3d 20 31 3b 0a 09 69 6e te_sign = 1;..in 29690 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a t mutex_retval;. 296a0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 296b0 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 296c0 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 296d0 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 296e0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 296f0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 29700 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 29710 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 29720 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 29730 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 29740 69 66 20 28 70 75 6c 53 69 67 6e 61 74 75 72 65 if (pulSignature 29750 4c 65 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 Len == NULL) {.. 29760 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 29770 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 75 6c INTF("Error. pul 29780 53 69 67 6e 61 74 75 72 65 4c 65 6e 20 69 73 20 SignatureLen is 29790 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 NULL.");....retu 297a0 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 rn(CKR_ARGUMENTS 297b0 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 _BAD);..}...if ( 297c0 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c hSession == 0 || 297d0 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 hSession >= (si 297e0 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 297f0 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 ions) / sizeof(c 29800 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 ackey_sessions[0 29810 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ]))) {...CACKEY_ 29820 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 29830 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 ror. Session ou 29840 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 t of range.");.. 29850 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 29860 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 29870 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 VALID);..}...mut 29880 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 29890 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 ey_mutex_lock(ca 298a0 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 298b0 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 298c0 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 298d0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 298e0 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 Error. Locking 298f0 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 29900 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 29910 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 _ERROR);..}...if 29920 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f (!cackey_sessio 29930 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 ns[hSession].act 29940 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ive) {...cackey_ 29950 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 29960 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 29970 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 29980 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 29990 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 ssion not active 299a0 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 299b0 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 299c0 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 299d0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 ...if (!cackey_s 299e0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 299f0 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 29 20 7b ].sign_active) { 29a00 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 29a10 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 29a20 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 29a30 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 29a40 45 72 72 6f 72 2e 20 20 53 69 67 6e 20 6e 6f 74 Error. Sign not 29a50 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 active.");..... 29a60 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 .return(CKR_OPER 29a70 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 ATION_NOT_INITIA 29a80 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 73 6c 6f LIZED);..}...slo 29a90 74 49 44 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 tID = cackey_ses 29aa0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 29ab0 73 6c 6f 74 49 44 3b 0a 0a 09 69 66 20 28 73 6c slotID;...if (sl 29ac0 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 otID < 0 || slot 29ad0 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 ID >= (sizeof(ca 29ae0 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 ckey_slots) / si 29af0 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 29b00 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b s[0]))) {...CACK 29b10 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 29b20 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 "Error. Invalid 29b30 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 slot requested ( 29b40 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 %lu), outside of 29b50 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 valid range", s 29b60 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 lotID);....retur 29b70 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 29b80 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 ROR);..}...if (c 29b90 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 ackey_slots[slot 29ba0 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 ID].active == 0) 29bb0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 29bc0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 29bd0 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 Invalid slot re 29be0 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 73 quested (%lu), s 29bf0 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c lot not currentl 29c00 79 20 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 y active", slotI 29c10 44 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 D);....cackey_mu 29c20 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 29c30 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 y_biglock);....r 29c40 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 29c50 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 73 L_ERROR);..}...s 29c60 77 69 74 63 68 20 28 63 61 63 6b 65 79 5f 73 65 witch (cackey_se 29c70 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 29c80 2e 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 6d 29 .sign_mechanism) 29c90 20 7b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 53 {...case CKM_RS 29ca0 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 73 A_PKCS:..../* As 29cb0 6b 20 63 61 72 64 20 74 6f 20 73 69 67 6e 20 2a k card to sign * 29cc0 2f 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 /....CACKEY_DEBU 29cd0 47 5f 50 52 49 4e 54 46 28 22 41 73 6b 69 6e 67 G_PRINTF("Asking 29ce0 20 74 6f 20 73 69 67 6e 20 66 72 6f 6d 20 69 64 to sign from id 29cf0 65 6e 74 69 74 79 20 25 70 20 69 6e 20 73 65 73 entity %p in ses 29d00 73 69 6f 6e 20 25 6c 75 22 2c 20 28 76 6f 69 64 sion %lu", (void 29d10 20 2a 29 20 63 61 63 6b 65 79 5f 73 65 73 73 69 *) cackey_sessi 29d20 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 ons[hSession].si 29d30 67 6e 5f 69 64 65 6e 74 69 74 79 2c 20 28 75 6e gn_identity, (un 29d40 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 53 65 signed long) hSe 29d50 73 73 69 6f 6e 29 3b 0a 09 09 09 73 69 67 62 75 ssion);....sigbu 29d60 66 6c 65 6e 20 3d 20 63 61 63 6b 65 79 5f 73 69 flen = cackey_si 29d70 67 6e 64 65 63 72 79 70 74 28 26 63 61 63 6b 65 gndecrypt(&cacke 29d80 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2c y_slots[slotID], 29d90 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 29da0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 29db0 69 64 65 6e 74 69 74 79 2c 20 63 61 63 6b 65 79 identity, cackey 29dc0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 29dd0 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 2c 20 63 61 on].sign_buf, ca 29de0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 29df0 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 ession].sign_buf 29e00 75 73 65 64 2c 20 73 69 67 62 75 66 2c 20 73 69 used, sigbuf, si 29e10 7a 65 6f 66 28 73 69 67 62 75 66 29 2c 20 31 2c zeof(sigbuf), 1, 29e20 20 30 29 3b 0a 0a 09 09 09 69 66 20 28 73 69 67 0);.....if (sig 29e30 62 75 66 6c 65 6e 20 3c 20 30 29 20 7b 0a 09 09 buflen < 0) {... 29e40 09 09 2f 2a 20 53 69 67 6e 69 6e 67 20 66 61 69 ../* Signing fai 29e50 6c 65 64 2e 20 2a 2f 0a 09 09 09 09 69 66 20 28 led. */.....if ( 29e60 73 69 67 62 75 66 6c 65 6e 20 3d 3d 20 43 41 43 sigbuflen == CAC 29e70 4b 45 59 5f 50 43 53 43 5f 45 5f 4e 45 45 44 4c KEY_PCSC_E_NEEDL 29e80 4f 47 49 4e 29 20 7b 0a 09 09 09 09 09 72 65 74 OGIN) {......ret 29e90 76 61 6c 20 3d 20 43 4b 52 5f 55 53 45 52 5f 4e val = CKR_USER_N 29ea0 4f 54 5f 4c 4f 47 47 45 44 5f 49 4e 3b 0a 09 09 OT_LOGGED_IN;... 29eb0 09 09 7d 20 65 6c 73 65 20 69 66 20 28 73 69 67 ..} else if (sig 29ec0 62 75 66 6c 65 6e 20 3d 3d 20 43 41 43 4b 45 59 buflen == CACKEY 29ed0 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 _PCSC_E_TOKENABS 29ee0 45 4e 54 29 20 7b 0a 09 09 09 09 09 72 65 74 76 ENT) {......retv 29ef0 61 6c 20 3d 20 43 4b 52 5f 44 45 56 49 43 45 5f al = CKR_DEVICE_ 29f00 52 45 4d 4f 56 45 44 3b 0a 09 09 09 09 7d 20 65 REMOVED;.....} e 29f10 6c 73 65 20 7b 0a 09 09 09 09 09 72 65 74 76 61 lse {......retva 29f20 6c 20 3d 20 43 4b 52 5f 47 45 4e 45 52 41 4c 5f l = CKR_GENERAL_ 29f30 45 52 52 4f 52 3b 0a 09 09 09 09 7d 0a 09 09 09 ERROR;.....}.... 29f40 7d 20 65 6c 73 65 20 69 66 20 28 28 28 75 6e 73 } else if (((uns 29f50 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 69 67 62 igned long) sigb 29f60 75 66 6c 65 6e 29 20 3e 20 2a 70 75 6c 53 69 67 uflen) > *pulSig 29f70 6e 61 74 75 72 65 4c 65 6e 20 26 26 20 70 53 69 natureLen && pSi 29f80 67 6e 61 74 75 72 65 29 20 7b 0a 09 09 09 09 2f gnature) {...../ 29f90 2a 20 53 69 67 6e 65 64 20 64 61 74 61 20 74 6f * Signed data to 29fa0 6f 20 6c 61 72 67 65 20 2a 2f 0a 09 09 09 09 43 o large */.....C 29fb0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 29fc0 54 46 28 22 72 65 74 76 61 6c 20 3d 20 43 4b 52 TF("retval = CKR 29fd0 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c _BUFFER_TOO_SMAL 29fe0 4c 3b 20 20 73 69 67 62 75 66 6c 65 6e 20 3d 20 L; sigbuflen = 29ff0 25 6c 75 2c 20 70 75 6c 53 69 67 6e 61 74 75 72 %lu, pulSignatur 2a000 65 4c 65 6e 20 3d 20 25 6c 75 22 2c 20 28 75 6e eLen = %lu", (un 2a010 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 69 67 signed long) sig 2a020 62 75 66 6c 65 6e 2c 20 28 75 6e 73 69 67 6e 65 buflen, (unsigne 2a030 64 20 6c 6f 6e 67 29 20 2a 70 75 6c 53 69 67 6e d long) *pulSign 2a040 61 74 75 72 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 atureLen);...... 2a050 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 42 55 46 retval = CKR_BUF 2a060 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b 0a 0a FER_TOO_SMALL;.. 2a070 09 09 09 09 74 65 72 6d 69 6e 61 74 65 5f 73 69 ....terminate_si 2a080 67 6e 20 3d 20 30 3b 0a 09 09 09 7d 20 65 6c 73 gn = 0;....} els 2a090 65 20 7b 0a 09 09 09 09 74 65 72 6d 69 6e 61 74 e {.....terminat 2a0a0 65 5f 73 69 67 6e 20 3d 20 30 3b 0a 0a 09 09 09 e_sign = 0;..... 2a0b0 09 69 66 20 28 70 53 69 67 6e 61 74 75 72 65 29 .if (pSignature) 2a0c0 20 7b 0a 09 09 09 09 09 6d 65 6d 63 70 79 28 70 {......memcpy(p 2a0d0 53 69 67 6e 61 74 75 72 65 2c 20 73 69 67 62 75 Signature, sigbu 2a0e0 66 2c 20 73 69 67 62 75 66 6c 65 6e 29 3b 0a 0a f, sigbuflen);.. 2a0f0 09 09 09 09 09 74 65 72 6d 69 6e 61 74 65 5f 73 .....terminate_s 2a100 69 67 6e 20 3d 20 31 3b 0a 09 09 09 09 7d 0a 0a ign = 1;.....}.. 2a110 09 09 09 09 2a 70 75 6c 53 69 67 6e 61 74 75 72 ....*pulSignatur 2a120 65 4c 65 6e 20 3d 20 73 69 67 62 75 66 6c 65 6e eLen = sigbuflen 2a130 3b 0a 0a 09 09 09 09 72 65 74 76 61 6c 20 3d 20 ;......retval = 2a140 43 4b 52 5f 4f 4b 3b 0a 09 09 09 7d 0a 0a 09 09 CKR_OK;....}.... 2a150 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 69 66 20 .break;..}...if 2a160 28 74 65 72 6d 69 6e 61 74 65 5f 73 69 67 6e 29 (terminate_sign) 2a170 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f {...if (cackey_ 2a180 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 2a190 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20 7b 0a 09 n].sign_buf) {.. 2a1a0 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f 73 65 ..free(cackey_se 2a1b0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 2a1c0 2e 73 69 67 6e 5f 62 75 66 29 3b 0a 09 09 7d 0a .sign_buf);...}. 2a1d0 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f ...cackey_sessio 2a1e0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 2a1f0 6e 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 7d n_active = 0;..} 2a200 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 2a210 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 = cackey_mutex_u 2a220 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 2a230 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 2a240 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 2a250 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 2a260 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 2a270 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Unlocking failed 2a280 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 2a290 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 2a2a0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 2a2b0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 2a2c0 75 72 6e 69 6e 67 20 25 69 22 2c 20 28 69 6e 74 urning %i", (int 2a2d0 29 20 72 65 74 76 61 6c 29 3b 0a 0a 09 72 65 74 ) retval);...ret 2a2e0 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a urn(retval);.}.. 2a2f0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 2a300 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e ON(CK_RV, C_Sign 2a310 52 65 63 6f 76 65 72 49 6e 69 74 29 28 43 4b 5f RecoverInit)(CK_ 2a320 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 2a330 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 Session, CK_MECH 2a340 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 ANISM_PTR pMecha 2a350 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f nism, CK_OBJECT_ 2a360 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09 HANDLE hKey) {.. 2a370 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 2a380 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 2a390 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 2a3a0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 2a3b0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 2a3c0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 2a3d0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 2a3e0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 2a3f0 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 2a400 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 2a410 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 2a420 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 2a430 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 2a440 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C 2a450 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 2a460 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re 2a470 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO 2a480 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 2a490 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 2a4a0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 2a4b0 5f 53 69 67 6e 52 65 63 6f 76 65 72 29 28 43 4b _SignRecover)(CK 2a4c0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 2a4d0 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 hSession, CK_BYT 2a4e0 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f E_PTR pData, CK_ 2a4f0 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c ULONG ulDataLen, 2a500 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 CK_BYTE_PTR pSi 2a510 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e gnature, CK_ULON 2a520 47 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 74 75 G_PTR pulSignatu 2a530 72 65 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 reLen) {..CACKEY 2a540 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 2a550 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 2a560 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 2a570 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 2a580 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 2a590 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 2a5a0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 2a5b0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 2a5c0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 2a5d0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 2a5e0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 2a5f0 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 2a600 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 2a610 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 2a620 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 2a630 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 2a640 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 2a650 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 2a660 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 2a670 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66 N(CK_RV, C_Verif 2a680 79 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f yInit)(CK_SESSIO 2a690 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 2a6a0 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f n, CK_MECHANISM_ 2a6b0 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 PTR pMechanism, 2a6c0 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 2a6d0 20 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 hKey) {..CACKEY 2a6e0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 2a6f0 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 2a700 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 2a710 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 2a720 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 2a730 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 2a740 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 2a750 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 2a760 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 2a770 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 2a780 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 2a790 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 2a7a0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 2a7b0 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 2a7c0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 2a7d0 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 2a7e0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 2a7f0 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 2a800 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 2a810 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66 N(CK_RV, C_Verif 2a820 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 y)(CK_SESSION_HA 2a830 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 2a840 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 61 74 61 K_BYTE_PTR pData 2a850 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 , CK_ULONG ulDat 2a860 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 aLen, CK_BYTE_PT 2a870 52 20 70 53 69 67 6e 61 74 75 72 65 2c 20 43 4b R pSignature, CK 2a880 5f 55 4c 4f 4e 47 20 75 6c 53 69 67 6e 61 74 75 _ULONG ulSignatu 2a890 72 65 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 reLen) {..CACKEY 2a8a0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 2a8b0 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 2a8c0 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 2a8d0 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 2a8e0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 2a8f0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 2a900 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 2a910 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 2a920 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 2a930 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 2a940 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 2a950 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 2a960 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 2a970 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 2a980 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 2a990 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 2a9a0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 2a9b0 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 2a9c0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 2a9d0 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66 N(CK_RV, C_Verif 2a9e0 79 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 yUpdate)(CK_SESS 2a9f0 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 2aa00 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR 2aa10 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 pPart, CK_ULONG 2aa20 20 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 ulPartLen) {..C 2aa30 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 2aa40 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 2aa50 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 2aa60 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 2aa70 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 2aa80 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 2aa90 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 2aaa0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 2aab0 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 2aac0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 2aad0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 2aae0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 2aaf0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 2ab00 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 2ab10 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 2ab20 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 2ab30 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 2ab40 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 2ab50 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 2ab60 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 2ab70 56 65 72 69 66 79 46 69 6e 61 6c 29 28 43 4b 5f VerifyFinal)(CK_ 2ab80 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 2ab90 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 2aba0 5f 50 54 52 20 70 53 69 67 6e 61 74 75 72 65 2c _PTR pSignature, 2abb0 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 69 67 6e CK_ULONG ulSign 2abc0 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09 43 41 43 atureLen) {..CAC 2abd0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 2abe0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 2abf0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 2ac00 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 2ac10 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 2ac20 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 2ac30 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 2ac40 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 2ac50 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 2ac60 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 2ac70 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 2ac80 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 2ac90 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 2aca0 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 2acb0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 2acc0 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 2acd0 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 2ace0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 2acf0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 2ad00 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 TION(CK_RV, C_Ve 2ad10 72 69 66 79 52 65 63 6f 76 65 72 49 6e 69 74 29 rifyRecoverInit) 2ad20 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 2ad30 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 2ad40 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d MECHANISM_PTR pM 2ad50 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a echanism, CK_OBJ 2ad60 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 ECT_HANDLE hKey) 2ad70 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 2ad80 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 2ad90 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 2ada0 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 2adb0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 2adc0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 2add0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 2ade0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 2adf0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 2ae00 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 2ae10 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 2ae20 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 2ae30 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 2ae40 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 2ae50 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 2ae60 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 2ae70 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 2ae80 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 2ae90 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 2aea0 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 2aeb0 56 2c 20 43 5f 56 65 72 69 66 79 52 65 63 6f 76 V, C_VerifyRecov 2aec0 65 72 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 er)(CK_SESSION_H 2aed0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 2aee0 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 67 CK_BYTE_PTR pSig 2aef0 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 nature, CK_ULONG 2af00 20 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 2c ulSignatureLen, 2af10 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 61 CK_BYTE_PTR pDa 2af20 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 ta, CK_ULONG_PTR 2af30 20 70 75 6c 44 61 74 61 4c 65 6e 29 20 7b 0a 09 pulDataLen) {.. 2af40 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 2af50 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 2af60 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 2af70 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 2af80 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 2af90 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 2afa0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 2afb0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 2afc0 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 2afd0 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 2afe0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 2aff0 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 2b000 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 2b010 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C 2b020 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 2b030 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re 2b040 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO 2b050 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 2b060 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 2b070 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 2b080 5f 44 69 67 65 73 74 45 6e 63 72 79 70 74 55 70 _DigestEncryptUp 2b090 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e date)(CK_SESSION 2b0a0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 2b0b0 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 , CK_BYTE_PTR pP 2b0c0 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c art, CK_ULONG ul 2b0d0 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 PartLen, CK_BYTE 2b0e0 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 64 50 _PTR pEncryptedP 2b0f0 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 art, CK_ULONG_PT 2b100 52 20 70 75 6c 45 6e 63 72 79 70 74 65 64 50 61 R pulEncryptedPa 2b110 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 rtLen) {..CACKEY 2b120 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 2b130 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 2b140 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 2b150 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 2b160 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 2b170 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 2b180 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 2b190 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 2b1a0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 2b1b0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 2b1c0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 2b1d0 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 2b1e0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 2b1f0 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 2b200 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 2b210 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 2b220 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 2b230 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 2b240 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 2b250 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 N(CK_RV, C_Decry 2b260 70 74 44 69 67 65 73 74 55 70 64 61 74 65 29 28 ptDigestUpdate)( 2b270 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 2b280 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 2b290 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 74 YTE_PTR pEncrypt 2b2a0 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 edPart, CK_ULONG 2b2b0 20 75 6c 45 6e 63 72 79 70 74 65 64 50 61 72 74 ulEncryptedPart 2b2c0 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 Len, CK_BYTE_PTR 2b2d0 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 pPart, CK_ULONG 2b2e0 5f 50 54 52 20 70 75 6c 50 61 72 74 4c 65 6e 29 _PTR pulPartLen) 2b2f0 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 2b300 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 2b310 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 2b320 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 2b330 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 2b340 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 2b350 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 2b360 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 2b370 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 2b380 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 2b390 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 2b3a0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 2b3b0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 2b3c0 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 2b3d0 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 2b3e0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 2b3f0 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 2b400 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 2b410 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 2b420 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 2b430 56 2c 20 43 5f 53 69 67 6e 45 6e 63 72 79 70 74 V, C_SignEncrypt 2b440 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 Update)(CK_SESSI 2b450 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 2b460 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 2b470 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 pPart, CK_ULONG 2b480 75 6c 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 ulPartLen, CK_BY 2b490 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 TE_PTR pEncrypte 2b4a0 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f dPart, CK_ULONG_ 2b4b0 50 54 52 20 70 75 6c 45 6e 63 72 79 70 74 65 64 PTR pulEncrypted 2b4c0 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b PartLen) {..CACK 2b4d0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 2b4e0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 2b4f0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 2b500 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 2b510 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 2b520 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 2b530 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 2b540 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 2b550 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 2b560 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 2b570 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 2b580 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 2b590 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 2b5a0 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 2b5b0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 2b5c0 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 2b5d0 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 2b5e0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 2b5f0 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 2b600 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 ION(CK_RV, C_Dec 2b610 72 79 70 74 56 65 72 69 66 79 55 70 64 61 74 65 ryptVerifyUpdate 2b620 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 2b630 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 2b640 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 _BYTE_PTR pEncry 2b650 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f ptedPart, CK_ULO 2b660 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64 50 61 NG ulEncryptedPa 2b670 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 rtLen, CK_BYTE_P 2b680 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f TR pPart, CK_ULO 2b690 4e 47 5f 50 54 52 20 70 75 6c 50 61 72 74 4c 65 NG_PTR pulPartLe 2b6a0 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 n) {..CACKEY_DEB 2b6b0 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 2b6c0 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 2b6d0 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 2b6e0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 2b6f0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 2b700 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 2b710 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 2b720 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 2b730 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 2b740 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 2b750 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 2b760 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 2b770 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 2b780 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 2b790 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 2b7a0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 2b7b0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 2b7c0 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 2b7d0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 2b7e0 5f 52 56 2c 20 43 5f 47 65 6e 65 72 61 74 65 4b _RV, C_GenerateK 2b7f0 65 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 ey)(CK_SESSION_H 2b800 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 2b810 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 CK_MECHANISM_PTR 2b820 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f pMechanism, CK_ 2b830 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 54 ATTRIBUTE_PTR pT 2b840 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e emplate, CK_ULON 2b850 47 20 75 6c 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 G ulCount, CK_OB 2b860 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 JECT_HANDLE_PTR 2b870 70 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 phKey) {..CACKEY 2b880 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 2b890 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 2b8a0 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 2b8b0 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 2b8c0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 2b8d0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 2b8e0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 2b8f0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 2b900 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 2b910 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 2b920 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 2b930 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 2b940 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 2b950 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 2b960 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 2b970 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 2b980 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 2b990 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 2b9a0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 2b9b0 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 6e 65 72 N(CK_RV, C_Gener 2b9c0 61 74 65 4b 65 79 50 61 69 72 29 28 43 4b 5f 53 ateKeyPair)(CK_S 2b9d0 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 2b9e0 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 ession, CK_MECHA 2b9f0 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e NISM_PTR pMechan 2ba00 69 73 6d 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 ism, CK_ATTRIBUT 2ba10 45 5f 50 54 52 20 70 50 75 62 6c 69 63 4b 65 79 E_PTR pPublicKey 2ba20 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f Template, CK_ULO 2ba30 4e 47 20 75 6c 50 75 62 6c 69 63 4b 65 79 41 74 NG ulPublicKeyAt 2ba40 74 72 69 62 75 74 65 43 6f 75 6e 74 2c 20 43 4b tributeCount, CK 2ba50 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 _ATTRIBUTE_PTR p 2ba60 50 72 69 76 61 74 65 4b 65 79 54 65 6d 70 6c 61 PrivateKeyTempla 2ba70 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 te, CK_ULONG ulP 2ba80 72 69 76 61 74 65 4b 65 79 41 74 74 72 69 62 75 rivateKeyAttribu 2ba90 74 65 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 teCount, CK_OBJE 2baa0 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 CT_HANDLE_PTR ph 2bab0 50 75 62 6c 69 63 4b 65 79 2c 20 43 4b 5f 4f 42 PublicKey, CK_OB 2bac0 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 JECT_HANDLE_PTR 2bad0 70 68 50 72 69 76 61 74 65 4b 65 79 29 20 7b 0a phPrivateKey) {. 2bae0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 2baf0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 2bb00 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 ...if (!cackey_i 2bb10 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 nitialized) {... 2bb20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 2bb30 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 NTF("Error. Not 2bb40 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b initialized."); 2bb50 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 ....return(CKR_C 2bb60 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 RYPTOKI_NOT_INIT 2bb70 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 IALIZED);..}...C 2bb80 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 2bb90 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 2bba0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 2bbb0 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 UPPORTED (%i)", 2bbc0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 2bbd0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 _SUPPORTED);...r 2bbe0 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 eturn(CKR_FUNCTI 2bbf0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 2bc00 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 2bc10 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 2bc20 43 5f 57 72 61 70 4b 65 79 29 28 43 4b 5f 53 45 C_WrapKey)(CK_SE 2bc30 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 2bc40 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e ssion, CK_MECHAN 2bc50 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 ISM_PTR pMechani 2bc60 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 sm, CK_OBJECT_HA 2bc70 4e 44 4c 45 20 68 57 72 61 70 70 69 6e 67 4b 65 NDLE hWrappingKe 2bc80 79 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e y, CK_OBJECT_HAN 2bc90 44 4c 45 20 68 4b 65 79 2c 20 43 4b 5f 42 59 54 DLE hKey, CK_BYT 2bca0 45 5f 50 54 52 20 70 57 72 61 70 70 65 64 4b 65 E_PTR pWrappedKe 2bcb0 79 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 y, CK_ULONG_PTR 2bcc0 70 75 6c 57 72 61 70 70 65 64 4b 65 79 4c 65 6e pulWrappedKeyLen 2bcd0 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 2bce0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 2bcf0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 2bd00 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 2bd10 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 2bd20 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 2bd30 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 2bd40 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 2bd50 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 2bd60 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 2bd70 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 2bd80 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 2bd90 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 2bda0 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 2bdb0 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 2bdc0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 2bdd0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 2bde0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 2bdf0 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 2be00 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 2be10 52 56 2c 20 43 5f 55 6e 77 72 61 70 4b 65 79 29 RV, C_UnwrapKey) 2be20 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 2be30 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 2be40 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d MECHANISM_PTR pM 2be50 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a echanism, CK_OBJ 2be60 45 43 54 5f 48 41 4e 44 4c 45 20 68 55 6e 77 72 ECT_HANDLE hUnwr 2be70 61 70 70 69 6e 67 4b 65 79 2c 20 43 4b 5f 42 59 appingKey, CK_BY 2be80 54 45 5f 50 54 52 20 70 57 72 61 70 70 65 64 4b TE_PTR pWrappedK 2be90 65 79 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 57 ey, CK_ULONG ulW 2bea0 72 61 70 70 65 64 4b 65 79 4c 65 6e 2c 20 43 4b rappedKeyLen, CK 2beb0 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 _ATTRIBUTE_PTR p 2bec0 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f Template, CK_ULO 2bed0 4e 47 20 75 6c 41 74 74 72 69 62 75 74 65 43 6f NG ulAttributeCo 2bee0 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 unt, CK_OBJECT_H 2bef0 41 4e 44 4c 45 5f 50 54 52 20 70 68 4b 65 79 29 ANDLE_PTR phKey) 2bf00 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 2bf10 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 2bf20 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 2bf30 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 2bf40 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 2bf50 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 2bf60 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 2bf70 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 2bf80 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 2bf90 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 2bfa0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 2bfb0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 2bfc0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 2bfd0 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 2bfe0 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 2bff0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 2c000 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 2c010 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 2c020 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 2c030 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 2c040 56 2c 20 43 5f 44 65 72 69 76 65 4b 65 79 29 28 V, C_DeriveKey)( 2c050 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 2c060 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d E hSession, CK_M 2c070 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 ECHANISM_PTR pMe 2c080 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 chanism, CK_OBJE 2c090 43 54 5f 48 41 4e 44 4c 45 20 68 42 61 73 65 4b CT_HANDLE hBaseK 2c0a0 65 79 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45 ey, CK_ATTRIBUTE 2c0b0 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 _PTR pTemplate, 2c0c0 43 4b 5f 55 4c 4f 4e 47 20 75 6c 41 74 74 72 69 CK_ULONG ulAttri 2c0d0 62 75 74 65 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 buteCount, CK_OB 2c0e0 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 JECT_HANDLE_PTR 2c0f0 70 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 phKey) {..CACKEY 2c100 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 2c110 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 2c120 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 2c130 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 2c140 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 2c150 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 2c160 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 2c170 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 2c180 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 2c190 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 );..}...CACKEY_D 2c1a0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 2c1b0 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 urning CKR_FUNCT 2c1c0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 2c1d0 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e D (%i)", CKR_FUN 2c1e0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 2c1f0 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 TED);...return(C 2c200 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 2c210 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 SUPPORTED);.}..C 2c220 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 2c230 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 65 64 52 N(CK_RV, C_SeedR 2c240 61 6e 64 6f 6d 29 28 43 4b 5f 53 45 53 53 49 4f andom)(CK_SESSIO 2c250 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 2c260 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 2c270 53 65 65 64 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 Seed, CK_ULONG u 2c280 6c 53 65 65 64 4c 65 6e 29 20 7b 0a 09 43 41 43 lSeedLen) {..CAC 2c290 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 2c2a0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 2c2b0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 2c2c0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 2c2d0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 2c2e0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 2c2f0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 2c300 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 2c310 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 2c320 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 2c330 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 2c340 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 2c350 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 2c360 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 2c370 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 2c380 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 2c390 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 2c3a0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 2c3b0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 2c3c0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 TION(CK_RV, C_Ge 2c3d0 6e 65 72 61 74 65 52 61 6e 64 6f 6d 29 28 43 4b nerateRandom)(CK 2c3e0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 2c3f0 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 hSession, CK_BYT 2c400 45 5f 50 54 52 20 70 52 61 6e 64 6f 6d 44 61 74 E_PTR pRandomDat 2c410 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 52 61 a, CK_ULONG ulRa 2c420 6e 64 6f 6d 4c 65 6e 29 20 7b 0a 09 43 41 43 4b ndomLen) {..CACK 2c430 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 2c440 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 2c450 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 2c460 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 2c470 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 2c480 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 2c490 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 2c4a0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 2c4b0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 2c4c0 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 2c4d0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 2c4e0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 2c4f0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 2c500 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 2c510 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 2c520 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 2c530 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 2c540 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 2c550 0a 2f 2a 20 44 65 70 72 65 63 61 74 65 64 20 46 ./* Deprecated F 2c560 75 6e 63 74 69 6f 6e 20 2a 2f 0a 43 4b 5f 44 45 unction */.CK_DE 2c570 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 2c580 5f 52 56 2c 20 43 5f 47 65 74 46 75 6e 63 74 69 _RV, C_GetFuncti 2c590 6f 6e 53 74 61 74 75 73 29 28 43 4b 5f 53 45 53 onStatus)(CK_SES 2c5a0 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 2c5b0 73 69 6f 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f sion) {..CACKEY_ 2c5c0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 2c5d0 6c 6c 65 64 2e 22 29 3b 0a 0a 09 43 41 43 4b 45 lled.");...CACKE 2c5e0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 2c5f0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 2c600 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c NCTION_NOT_PARAL 2c610 4c 45 4c 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 LEL (%i)", CKR_F 2c620 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 UNCTION_NOT_PARA 2c630 4c 4c 45 4c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 LLEL);...return( 2c640 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 2c650 5f 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a 09 68 53 _PARALLEL);...hS 2c660 65 73 73 69 6f 6e 20 3d 20 68 53 65 73 73 69 6f ession = hSessio 2c670 6e 3b 20 2f 2a 20 53 75 70 72 65 73 73 20 75 6e n; /* Supress un 2c680 75 73 65 64 20 76 61 72 69 61 62 6c 65 20 77 61 used variable wa 2c690 72 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f 2a 20 44 rning */.}../* D 2c6a0 65 70 72 65 63 61 74 65 64 20 46 75 6e 63 74 69 eprecated Functi 2c6b0 6f 6e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f on */.CK_DEFINE_ 2c6c0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 2c6d0 43 5f 43 61 6e 63 65 6c 46 75 6e 63 74 69 6f 6e C_CancelFunction 2c6e0 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 2c6f0 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 20 7b 0a DLE hSession) {. 2c700 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 2c710 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 2c720 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 2c730 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 2c740 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 2c750 4f 54 5f 50 41 52 41 4c 4c 45 4c 20 28 25 69 29 OT_PARALLEL (%i) 2c760 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 2c770 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a NOT_PARALLEL);.. 2c780 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 2c790 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 TION_NOT_PARALLE 2c7a0 4c 29 3b 0a 0a 09 68 53 65 73 73 69 6f 6e 20 3d L);...hSession = 2c7b0 20 68 53 65 73 73 69 6f 6e 3b 20 2f 2a 20 53 75 hSession; /* Su 2c7c0 70 72 65 73 73 20 75 6e 75 73 65 64 20 76 61 72 press unused var 2c7d0 69 61 62 6c 65 20 77 61 72 6e 69 6e 67 20 2a 2f iable warning */ 2c7e0 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 2c7f0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 2c800 47 65 74 46 75 6e 63 74 69 6f 6e 4c 69 73 74 29 GetFunctionList) 2c810 28 43 4b 5f 46 55 4e 43 54 49 4f 4e 5f 4c 49 53 (CK_FUNCTION_LIS 2c820 54 5f 50 54 52 5f 50 54 52 20 70 70 46 75 6e 63 T_PTR_PTR ppFunc 2c830 74 69 6f 6e 4c 69 73 74 29 20 7b 0a 09 43 4b 5f tionList) {..CK_ 2c840 46 55 4e 43 54 49 4f 4e 5f 4c 49 53 54 5f 50 54 FUNCTION_LIST_PT 2c850 52 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 3b R pFunctionList; 2c860 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 2c870 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 2c880 29 3b 0a 0a 09 69 66 20 28 70 70 46 75 6e 63 74 );...if (ppFunct 2c890 69 6f 6e 4c 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 ionList == NULL) 2c8a0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 2c8b0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 2c8c0 20 70 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 20 ppFunctionList 2c8d0 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 is NULL.");....r 2c8e0 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 eturn(CKR_ARGUME 2c8f0 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 70 NTS_BAD);..}...p 2c900 46 75 6e 63 74 69 6f 6e 4c 69 73 74 20 3d 20 6d FunctionList = m 2c910 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 70 46 alloc(sizeof(*pF 2c920 75 6e 63 74 69 6f 6e 4c 69 73 74 29 29 3b 0a 0a unctionList));.. 2c930 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 2c940 76 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 version.major = 2c950 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b ((CACKEY_CRYPTOK 2c960 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 29 20 I_VERSION_CODE) 2c970 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a 09 >> 16) & 0xff;.. 2c980 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 76 pFunctionList->v 2c990 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 ersion.minor = ( 2c9a0 28 43 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b 49 (CACKEY_CRYPTOKI 2c9b0 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 29 20 3e _VERSION_CODE) > 2c9c0 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a 09 70 > 8) & 0xff;...p 2c9d0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 2c9e0 49 6e 69 74 69 61 6c 69 7a 65 20 3d 20 43 5f 49 Initialize = C_I 2c9f0 6e 69 74 69 61 6c 69 7a 65 3b 0a 09 70 46 75 6e nitialize;..pFun 2ca00 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e ctionList->C_Fin 2ca10 61 6c 69 7a 65 20 3d 20 43 5f 46 69 6e 61 6c 69 alize = C_Finali 2ca20 7a 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 ze;..pFunctionLi 2ca30 73 74 2d 3e 43 5f 47 65 74 49 6e 66 6f 20 3d 20 st->C_GetInfo = 2ca40 43 5f 47 65 74 49 6e 66 6f 3b 0a 09 70 46 75 6e C_GetInfo;..pFun 2ca50 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 ctionList->C_Get 2ca60 53 6c 6f 74 4c 69 73 74 20 3d 20 43 5f 47 65 74 SlotList = C_Get 2ca70 53 6c 6f 74 4c 69 73 74 3b 0a 09 70 46 75 6e 63 SlotList;..pFunc 2ca80 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 53 tionList->C_GetS 2ca90 6c 6f 74 49 6e 66 6f 20 3d 20 43 5f 47 65 74 53 lotInfo = C_GetS 2caa0 6c 6f 74 49 6e 66 6f 3b 0a 09 70 46 75 6e 63 74 lotInfo;..pFunct 2cab0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 54 6f ionList->C_GetTo 2cac0 6b 65 6e 49 6e 66 6f 20 3d 20 43 5f 47 65 74 54 kenInfo = C_GetT 2cad0 6f 6b 65 6e 49 6e 66 6f 3b 0a 09 70 46 75 6e 63 okenInfo;..pFunc 2cae0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 57 61 69 74 tionList->C_Wait 2caf0 46 6f 72 53 6c 6f 74 45 76 65 6e 74 20 3d 20 43 ForSlotEvent = C 2cb00 5f 57 61 69 74 46 6f 72 53 6c 6f 74 45 76 65 6e _WaitForSlotEven 2cb10 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t;..pFunctionLis 2cb20 74 2d 3e 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 t->C_GetMechanis 2cb30 6d 4c 69 73 74 20 3d 20 43 5f 47 65 74 4d 65 63 mList = C_GetMec 2cb40 68 61 6e 69 73 6d 4c 69 73 74 3b 0a 09 70 46 75 hanismList;..pFu 2cb50 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge 2cb60 74 4d 65 63 68 61 6e 69 73 6d 49 6e 66 6f 20 3d tMechanismInfo = 2cb70 20 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 6d 49 C_GetMechanismI 2cb80 6e 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c nfo;..pFunctionL 2cb90 69 73 74 2d 3e 43 5f 49 6e 69 74 54 6f 6b 65 6e ist->C_InitToken 2cba0 20 3d 20 43 5f 49 6e 69 74 54 6f 6b 65 6e 3b 0a = C_InitToken;. 2cbb0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 2cbc0 43 5f 49 6e 69 74 50 49 4e 20 3d 20 43 5f 49 6e C_InitPIN = C_In 2cbd0 69 74 50 49 4e 3b 0a 09 70 46 75 6e 63 74 69 6f itPIN;..pFunctio 2cbe0 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 50 49 4e 20 nList->C_SetPIN 2cbf0 3d 20 43 5f 53 65 74 50 49 4e 3b 0a 09 70 46 75 = C_SetPIN;..pFu 2cc00 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 4f 70 nctionList->C_Op 2cc10 65 6e 53 65 73 73 69 6f 6e 20 3d 20 43 5f 4f 70 enSession = C_Op 2cc20 65 6e 53 65 73 73 69 6f 6e 3b 0a 09 70 46 75 6e enSession;..pFun 2cc30 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 6c 6f ctionList->C_Clo 2cc40 73 65 53 65 73 73 69 6f 6e 20 3d 20 43 5f 43 6c seSession = C_Cl 2cc50 6f 73 65 53 65 73 73 69 6f 6e 3b 0a 09 70 46 75 oseSession;..pFu 2cc60 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 6c nctionList->C_Cl 2cc70 6f 73 65 41 6c 6c 53 65 73 73 69 6f 6e 73 20 3d oseAllSessions = 2cc80 20 43 5f 43 6c 6f 73 65 41 6c 6c 53 65 73 73 69 C_CloseAllSessi 2cc90 6f 6e 73 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ons;..pFunctionL 2cca0 69 73 74 2d 3e 43 5f 47 65 74 53 65 73 73 69 6f ist->C_GetSessio 2ccb0 6e 49 6e 66 6f 20 3d 20 43 5f 47 65 74 53 65 73 nInfo = C_GetSes 2ccc0 73 69 6f 6e 49 6e 66 6f 3b 0a 09 70 46 75 6e 63 sionInfo;..pFunc 2ccd0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 4f tionList->C_GetO 2cce0 70 65 72 61 74 69 6f 6e 53 74 61 74 65 20 3d 20 perationState = 2ccf0 43 5f 47 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 C_GetOperationSt 2cd00 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ate;..pFunctionL 2cd10 69 73 74 2d 3e 43 5f 53 65 74 4f 70 65 72 61 74 ist->C_SetOperat 2cd20 69 6f 6e 53 74 61 74 65 20 3d 20 43 5f 53 65 74 ionState = C_Set 2cd30 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 3b 0a OperationState;. 2cd40 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 2cd50 43 5f 4c 6f 67 69 6e 20 3d 20 43 5f 4c 6f 67 69 C_Login = C_Logi 2cd60 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 n;..pFunctionLis 2cd70 74 2d 3e 43 5f 4c 6f 67 6f 75 74 20 3d 20 43 5f t->C_Logout = C_ 2cd80 4c 6f 67 6f 75 74 3b 0a 09 70 46 75 6e 63 74 69 Logout;..pFuncti 2cd90 6f 6e 4c 69 73 74 2d 3e 43 5f 43 72 65 61 74 65 onList->C_Create 2cda0 4f 62 6a 65 63 74 20 3d 20 43 5f 43 72 65 61 74 Object = C_Creat 2cdb0 65 4f 62 6a 65 63 74 3b 0a 09 70 46 75 6e 63 74 eObject;..pFunct 2cdc0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 6f 70 79 4f ionList->C_CopyO 2cdd0 62 6a 65 63 74 20 3d 20 43 5f 43 6f 70 79 4f 62 bject = C_CopyOb 2cde0 6a 65 63 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e ject;..pFunction 2cdf0 4c 69 73 74 2d 3e 43 5f 44 65 73 74 72 6f 79 4f List->C_DestroyO 2ce00 62 6a 65 63 74 20 3d 20 43 5f 44 65 73 74 72 6f bject = C_Destro 2ce10 79 4f 62 6a 65 63 74 3b 0a 09 70 46 75 6e 63 74 yObject;..pFunct 2ce20 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 4f 62 ionList->C_GetOb 2ce30 6a 65 63 74 53 69 7a 65 20 3d 20 43 5f 47 65 74 jectSize = C_Get 2ce40 4f 62 6a 65 63 74 53 69 7a 65 3b 0a 09 70 46 75 ObjectSize;..pFu 2ce50 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge 2ce60 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 65 20 tAttributeValue 2ce70 3d 20 43 5f 47 65 74 41 74 74 72 69 62 75 74 65 = C_GetAttribute 2ce80 56 61 6c 75 65 3b 0a 09 70 46 75 6e 63 74 69 6f Value;..pFunctio 2ce90 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 41 74 74 72 nList->C_SetAttr 2cea0 69 62 75 74 65 56 61 6c 75 65 20 3d 20 43 5f 53 ibuteValue = C_S 2ceb0 65 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 65 etAttributeValue 2cec0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2ced0 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49 ->C_FindObjectsI 2cee0 6e 69 74 20 3d 20 43 5f 46 69 6e 64 4f 62 6a 65 nit = C_FindObje 2cef0 63 74 73 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 ctsInit;..pFunct 2cf00 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 4f ionList->C_FindO 2cf10 62 6a 65 63 74 73 20 3d 20 43 5f 46 69 6e 64 4f bjects = C_FindO 2cf20 62 6a 65 63 74 73 3b 0a 09 70 46 75 6e 63 74 69 bjects;..pFuncti 2cf30 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 4f 62 onList->C_FindOb 2cf40 6a 65 63 74 73 46 69 6e 61 6c 20 3d 20 43 5f 46 jectsFinal = C_F 2cf50 69 6e 64 4f 62 6a 65 63 74 73 46 69 6e 61 6c 3b indObjectsFinal; 2cf60 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 2cf70 3e 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 20 3d >C_EncryptInit = 2cf80 20 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 3b 0a C_EncryptInit;. 2cf90 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 2cfa0 43 5f 45 6e 63 72 79 70 74 20 3d 20 43 5f 45 6e C_Encrypt = C_En 2cfb0 63 72 79 70 74 3b 0a 09 70 46 75 6e 63 74 69 6f crypt;..pFunctio 2cfc0 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 72 79 70 74 nList->C_Encrypt 2cfd0 55 70 64 61 74 65 20 3d 20 43 5f 45 6e 63 72 79 Update = C_Encry 2cfe0 70 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 ptUpdate;..pFunc 2cff0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 72 tionList->C_Encr 2d000 79 70 74 46 69 6e 61 6c 20 3d 20 43 5f 45 6e 63 yptFinal = C_Enc 2d010 72 79 70 74 46 69 6e 61 6c 3b 0a 09 70 46 75 6e ryptFinal;..pFun 2d020 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 ctionList->C_Dec 2d030 72 79 70 74 49 6e 69 74 20 3d 20 43 5f 44 65 63 ryptInit = C_Dec 2d040 72 79 70 74 49 6e 69 74 3b 0a 09 70 46 75 6e 63 ryptInit;..pFunc 2d050 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 72 tionList->C_Decr 2d060 79 70 74 20 3d 20 43 5f 44 65 63 72 79 70 74 3b ypt = C_Decrypt; 2d070 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 2d080 3e 43 5f 44 65 63 72 79 70 74 55 70 64 61 74 65 >C_DecryptUpdate 2d090 20 3d 20 43 5f 44 65 63 72 79 70 74 55 70 64 61 = C_DecryptUpda 2d0a0 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 te;..pFunctionLi 2d0b0 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 46 69 6e st->C_DecryptFin 2d0c0 61 6c 20 3d 20 43 5f 44 65 63 72 79 70 74 46 69 al = C_DecryptFi 2d0d0 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c nal;..pFunctionL 2d0e0 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 49 6e 69 ist->C_DigestIni 2d0f0 74 20 3d 20 43 5f 44 69 67 65 73 74 49 6e 69 74 t = C_DigestInit 2d100 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2d110 2d 3e 43 5f 44 69 67 65 73 74 20 3d 20 43 5f 44 ->C_Digest = C_D 2d120 69 67 65 73 74 3b 0a 09 70 46 75 6e 63 74 69 6f igest;..pFunctio 2d130 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 55 nList->C_DigestU 2d140 70 64 61 74 65 20 3d 20 43 5f 44 69 67 65 73 74 pdate = C_Digest 2d150 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 Update;..pFuncti 2d160 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 onList->C_Digest 2d170 4b 65 79 20 3d 20 43 5f 44 69 67 65 73 74 4b 65 Key = C_DigestKe 2d180 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 y;..pFunctionLis 2d190 74 2d 3e 43 5f 44 69 67 65 73 74 46 69 6e 61 6c t->C_DigestFinal 2d1a0 20 3d 20 43 5f 44 69 67 65 73 74 46 69 6e 61 6c = C_DigestFinal 2d1b0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2d1c0 2d 3e 43 5f 53 69 67 6e 49 6e 69 74 20 3d 20 43 ->C_SignInit = C 2d1d0 5f 53 69 67 6e 49 6e 69 74 3b 0a 09 70 46 75 6e _SignInit;..pFun 2d1e0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 ctionList->C_Sig 2d1f0 6e 20 3d 20 43 5f 53 69 67 6e 3b 0a 09 70 46 75 n = C_Sign;..pFu 2d200 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 nctionList->C_Si 2d210 67 6e 55 70 64 61 74 65 20 3d 20 43 5f 53 69 67 gnUpdate = C_Sig 2d220 6e 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 nUpdate;..pFunct 2d230 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 46 ionList->C_SignF 2d240 69 6e 61 6c 20 3d 20 43 5f 53 69 67 6e 46 69 6e inal = C_SignFin 2d250 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 al;..pFunctionLi 2d260 73 74 2d 3e 43 5f 53 69 67 6e 52 65 63 6f 76 65 st->C_SignRecove 2d270 72 49 6e 69 74 20 3d 20 43 5f 53 69 67 6e 52 65 rInit = C_SignRe 2d280 63 6f 76 65 72 49 6e 69 74 3b 0a 09 70 46 75 6e coverInit;..pFun 2d290 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 ctionList->C_Sig 2d2a0 6e 52 65 63 6f 76 65 72 20 3d 20 43 5f 53 69 67 nRecover = C_Sig 2d2b0 6e 52 65 63 6f 76 65 72 3b 0a 09 70 46 75 6e 63 nRecover;..pFunc 2d2c0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 tionList->C_Veri 2d2d0 66 79 49 6e 69 74 20 3d 20 43 5f 56 65 72 69 66 fyInit = C_Verif 2d2e0 79 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f yInit;..pFunctio 2d2f0 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 20 nList->C_Verify 2d300 3d 20 43 5f 56 65 72 69 66 79 3b 0a 09 70 46 75 = C_Verify;..pFu 2d310 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 nctionList->C_Ve 2d320 72 69 66 79 55 70 64 61 74 65 20 3d 20 43 5f 56 rifyUpdate = C_V 2d330 65 72 69 66 79 55 70 64 61 74 65 3b 0a 09 70 46 erifyUpdate;..pF 2d340 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 unctionList->C_V 2d350 65 72 69 66 79 46 69 6e 61 6c 20 3d 20 43 5f 56 erifyFinal = C_V 2d360 65 72 69 66 79 46 69 6e 61 6c 3b 0a 09 70 46 75 erifyFinal;..pFu 2d370 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 nctionList->C_Ve 2d380 72 69 66 79 52 65 63 6f 76 65 72 49 6e 69 74 20 rifyRecoverInit 2d390 3d 20 43 5f 56 65 72 69 66 79 52 65 63 6f 76 65 = C_VerifyRecove 2d3a0 72 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f rInit;..pFunctio 2d3b0 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 52 nList->C_VerifyR 2d3c0 65 63 6f 76 65 72 20 3d 20 43 5f 56 65 72 69 66 ecover = C_Verif 2d3d0 79 52 65 63 6f 76 65 72 3b 0a 09 70 46 75 6e 63 yRecover;..pFunc 2d3e0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 tionList->C_Dige 2d3f0 73 74 45 6e 63 72 79 70 74 55 70 64 61 74 65 20 stEncryptUpdate 2d400 3d 20 43 5f 44 69 67 65 73 74 45 6e 63 72 79 70 = C_DigestEncryp 2d410 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 tUpdate;..pFunct 2d420 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 72 79 ionList->C_Decry 2d430 70 74 44 69 67 65 73 74 55 70 64 61 74 65 20 3d ptDigestUpdate = 2d440 20 43 5f 44 65 63 72 79 70 74 44 69 67 65 73 74 C_DecryptDigest 2d450 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 Update;..pFuncti 2d460 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 45 6e onList->C_SignEn 2d470 63 72 79 70 74 55 70 64 61 74 65 20 3d 20 43 5f cryptUpdate = C_ 2d480 53 69 67 6e 45 6e 63 72 79 70 74 55 70 64 61 74 SignEncryptUpdat 2d490 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 e;..pFunctionLis 2d4a0 74 2d 3e 43 5f 44 65 63 72 79 70 74 56 65 72 69 t->C_DecryptVeri 2d4b0 66 79 55 70 64 61 74 65 20 3d 20 43 5f 44 65 63 fyUpdate = C_Dec 2d4c0 72 79 70 74 56 65 72 69 66 79 55 70 64 61 74 65 ryptVerifyUpdate 2d4d0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2d4e0 2d 3e 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 20 ->C_GenerateKey 2d4f0 3d 20 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 3b = C_GenerateKey; 2d500 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 2d510 3e 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 50 61 >C_GenerateKeyPa 2d520 69 72 20 3d 20 43 5f 47 65 6e 65 72 61 74 65 4b ir = C_GenerateK 2d530 65 79 50 61 69 72 3b 0a 09 70 46 75 6e 63 74 69 eyPair;..pFuncti 2d540 6f 6e 4c 69 73 74 2d 3e 43 5f 57 72 61 70 4b 65 onList->C_WrapKe 2d550 79 20 3d 20 43 5f 57 72 61 70 4b 65 79 3b 0a 09 y = C_WrapKey;.. 2d560 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2d570 5f 55 6e 77 72 61 70 4b 65 79 20 3d 20 43 5f 55 _UnwrapKey = C_U 2d580 6e 77 72 61 70 4b 65 79 3b 0a 09 70 46 75 6e 63 nwrapKey;..pFunc 2d590 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 72 69 tionList->C_Deri 2d5a0 76 65 4b 65 79 20 3d 20 43 5f 44 65 72 69 76 65 veKey = C_Derive 2d5b0 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c Key;..pFunctionL 2d5c0 69 73 74 2d 3e 43 5f 53 65 65 64 52 61 6e 64 6f ist->C_SeedRando 2d5d0 6d 20 3d 20 43 5f 53 65 65 64 52 61 6e 64 6f 6d m = C_SeedRandom 2d5e0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2d5f0 2d 3e 43 5f 47 65 6e 65 72 61 74 65 52 61 6e 64 ->C_GenerateRand 2d600 6f 6d 20 3d 20 43 5f 47 65 6e 65 72 61 74 65 52 om = C_GenerateR 2d610 61 6e 64 6f 6d 3b 0a 09 70 46 75 6e 63 74 69 6f andom;..pFunctio 2d620 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 46 75 6e 63 nList->C_GetFunc 2d630 74 69 6f 6e 53 74 61 74 75 73 20 3d 20 43 5f 47 tionStatus = C_G 2d640 65 74 46 75 6e 63 74 69 6f 6e 53 74 61 74 75 73 etFunctionStatus 2d650 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2d660 2d 3e 43 5f 43 61 6e 63 65 6c 46 75 6e 63 74 69 ->C_CancelFuncti 2d670 6f 6e 20 3d 20 43 5f 43 61 6e 63 65 6c 46 75 6e on = C_CancelFun 2d680 63 74 69 6f 6e 3b 0a 09 70 46 75 6e 63 74 69 6f ction;..pFunctio 2d690 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 46 75 6e 63 nList->C_GetFunc 2d6a0 74 69 6f 6e 4c 69 73 74 20 3d 20 43 5f 47 65 74 tionList = C_Get 2d6b0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 3b 0a 0a 09 FunctionList;... 2d6c0 2a 70 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 20 *ppFunctionList 2d6d0 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 3b = pFunctionList; 2d6e0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 2d6f0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 2d700 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", 2d710 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 CKR_OK);...retur 2d720 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a n(CKR_OK);.}..