Artifact dce840ec614a9ee3eab88c62151efaf37090a8ae:
- File
cackey.c
— part of check-in
[638b5f52a7]
at
2012-05-09 16:38:24
on branch trunk
— Updated to print attribute type as string in lookups
Updated to include public key objects for DoD certificates (user: rkeene, size: 179862) [annotate] [blame] [check-ins using]
0000: 23 69 66 64 65 66 20 48 41 56 45 5f 43 4f 4e 46 #ifdef HAVE_CONF 0010: 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 IG_H.#include "c 0020: 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a onfig.h".#endif. 0030: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 57 49 4e .#ifdef HAVE_WIN 0040: 54 59 50 45 53 5f 48 0a 23 20 20 69 6e 63 6c 75 TYPES_H.# inclu 0050: 64 65 20 3c 77 69 6e 74 79 70 65 73 2e 68 3e 0a de <wintypes.h>. 0060: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 #endif.#ifdef HA 0070: 56 45 5f 50 43 53 43 4c 49 54 45 5f 48 0a 23 20 VE_PCSCLITE_H.# 0080: 20 69 6e 63 6c 75 64 65 20 3c 70 63 73 63 6c 69 include <pcscli 0090: 74 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 te.h>.#endif.#if 00a0: 64 65 66 20 48 41 56 45 5f 57 49 4e 53 43 41 52 def HAVE_WINSCAR 00b0: 44 5f 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c D_H.# include < 00c0: 77 69 6e 73 63 61 72 64 2e 68 3e 0a 23 65 6e 64 winscard.h>.#end 00d0: 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 if.#ifdef HAVE_S 00e0: 54 44 49 4e 54 5f 48 0a 23 20 20 69 6e 63 6c 75 TDINT_H.# inclu 00f0: 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 de <stdint.h>.#e 0100: 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 ndif.#ifdef HAVE 0110: 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 20 20 69 _INTTYPES_H.# i 0120: 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73 nclude <inttypes 0130: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 .h>.#endif.#ifde 0140: 66 20 48 41 56 45 5f 53 54 44 4c 49 42 5f 48 0a f HAVE_STDLIB_H. 0150: 23 20 20 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c # include <stdl 0160: 69 62 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 ib.h>.#endif.#if 0170: 64 65 66 20 48 41 56 45 5f 55 4e 49 53 54 44 5f def HAVE_UNISTD_ 0180: 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c 75 6e H.# include <un 0190: 69 73 74 64 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 istd.h>.#endif.# 01a0: 69 66 64 65 66 20 48 41 56 45 5f 53 54 52 49 4e ifdef HAVE_STRIN 01b0: 47 5f 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c G_H.# include < 01c0: 73 74 72 69 6e 67 2e 68 3e 0a 23 65 6e 64 69 66 string.h>.#endif 01d0: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 50 54 48 .#ifdef HAVE_PTH 01e0: 52 45 41 44 5f 48 0a 23 20 20 69 6e 63 6c 75 64 READ_H.# includ 01f0: 65 20 3c 70 74 68 72 65 61 64 2e 68 3e 0a 23 65 e <pthread.h>.#e 0200: 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 ndif.#ifdef HAVE 0210: 5f 4c 49 4d 49 54 53 5f 48 0a 23 20 20 69 6e 63 _LIMITS_H.# inc 0220: 6c 75 64 65 20 3c 6c 69 6d 69 74 73 2e 68 3e 0a lude <limits.h>. 0230: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 #endif.#ifdef HA 0240: 56 45 5f 53 54 44 49 4f 5f 48 0a 23 20 20 69 6e VE_STDIO_H.# in 0250: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a clude <stdio.h>. 0260: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 #endif.#ifdef HA 0270: 56 45 5f 5a 4c 49 42 5f 48 0a 23 20 20 69 66 64 VE_ZLIB_H.# ifd 0280: 65 66 20 48 41 56 45 5f 4c 49 42 5a 0a 23 20 20 ef HAVE_LIBZ.# 0290: 20 20 69 6e 63 6c 75 64 65 20 3c 7a 6c 69 62 2e include <zlib. 02a0: 68 3e 0a 23 20 20 65 6e 64 69 66 0a 23 65 6c 73 h>.# endif.#els 02b0: 65 0a 23 20 20 69 66 64 65 66 20 48 41 56 45 5f e.# ifdef HAVE_ 02c0: 4c 49 42 5a 0a 23 20 20 20 20 75 6e 64 65 66 20 LIBZ.# undef 02d0: 48 41 56 45 5f 4c 49 42 5a 0a 23 20 20 65 6e 64 HAVE_LIBZ.# end 02e0: 69 66 0a 23 65 6e 64 69 66 0a 0a 23 64 65 66 69 if.#endif..#defi 02f0: 6e 65 20 43 4b 5f 50 54 52 20 2a 0a 23 64 65 66 ne CK_PTR *.#def 0300: 69 6e 65 20 43 4b 5f 44 45 46 49 4e 45 5f 46 55 ine CK_DEFINE_FU 0310: 4e 43 54 49 4f 4e 28 72 65 74 75 72 6e 54 79 70 NCTION(returnTyp 0320: 65 2c 20 6e 61 6d 65 29 20 72 65 74 75 72 6e 54 e, name) returnT 0330: 79 70 65 20 6e 61 6d 65 0a 23 64 65 66 69 6e 65 ype name.#define 0340: 20 43 4b 5f 44 45 43 4c 41 52 45 5f 46 55 4e 43 CK_DECLARE_FUNC 0350: 54 49 4f 4e 28 72 65 74 75 72 6e 54 79 70 65 2c TION(returnType, 0360: 20 6e 61 6d 65 29 20 72 65 74 75 72 6e 54 79 70 name) returnTyp 0370: 65 20 6e 61 6d 65 0a 23 64 65 66 69 6e 65 20 43 e name.#define C 0380: 4b 5f 44 45 43 4c 41 52 45 5f 46 55 4e 43 54 49 K_DECLARE_FUNCTI 0390: 4f 4e 5f 50 4f 49 4e 54 45 52 28 72 65 74 75 72 ON_POINTER(retur 03a0: 6e 54 79 70 65 2c 20 6e 61 6d 65 29 20 72 65 74 nType, name) ret 03b0: 75 72 6e 54 79 70 65 20 28 2a 20 6e 61 6d 65 29 urnType (* name) 03c0: 0a 23 64 65 66 69 6e 65 20 43 4b 5f 43 41 4c 4c .#define CK_CALL 03d0: 42 41 43 4b 5f 46 55 4e 43 54 49 4f 4e 28 72 65 BACK_FUNCTION(re 03e0: 74 75 72 6e 54 79 70 65 2c 20 6e 61 6d 65 29 20 turnType, name) 03f0: 72 65 74 75 72 6e 54 79 70 65 20 28 2a 20 6e 61 returnType (* na 0400: 6d 65 29 0a 23 69 66 6e 64 65 66 20 4e 55 4c 4c me).#ifndef NULL 0410: 5f 50 54 52 0a 23 20 20 64 65 66 69 6e 65 20 4e _PTR.# define N 0420: 55 4c 4c 5f 50 54 52 20 30 0a 23 65 6e 64 69 66 ULL_PTR 0.#endif 0430: 0a 0a 23 69 6e 63 6c 75 64 65 20 22 70 6b 63 73 ..#include "pkcs 0440: 31 31 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 11.h".#include " 0450: 70 6b 63 73 31 31 6e 2e 68 22 0a 23 69 6e 63 6c pkcs11n.h".#incl 0460: 75 64 65 20 22 61 73 6e 31 2d 78 35 30 39 2e 68 ude "asn1-x509.h 0470: 22 0a 23 69 6e 63 6c 75 64 65 20 22 73 68 61 31 ".#include "sha1 0480: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 64 .h".#include "md 0490: 35 2e 68 22 0a 0a 2f 2a 0a 20 2a 20 49 6e 63 6c 5.h"../*. * Incl 04a0: 75 64 65 20 74 68 65 73 65 20 73 6f 75 72 63 65 ude these source 04b0: 20 66 69 6c 65 73 20 69 6e 20 74 68 69 73 20 74 files in this t 04c0: 72 61 6e 73 6c 61 74 69 6f 6e 20 75 6e 69 74 20 ranslation unit 04d0: 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 62 so that we can b 04e0: 69 6e 64 20 74 6f 0a 20 2a 20 66 75 6e 63 74 69 ind to. * functi 04f0: 6f 6e 73 20 61 6e 64 20 6e 6f 74 20 69 6e 63 6c ons and not incl 0500: 75 64 65 20 61 6e 79 20 73 79 6d 62 6f 6c 73 20 ude any symbols 0510: 69 6e 20 74 68 65 20 6f 75 74 70 75 74 20 73 68 in the output sh 0520: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 20 2a 2f ared object.. */ 0530: 0a 23 69 6e 63 6c 75 64 65 20 22 61 73 6e 31 2d .#include "asn1- 0540: 78 35 30 39 2e 63 22 0a 23 69 6e 63 6c 75 64 65 x509.c".#include 0550: 20 22 73 68 61 31 2e 63 22 0a 23 69 6e 63 6c 75 "sha1.c".#inclu 0560: 64 65 20 22 6d 64 35 2e 63 22 0a 0a 23 69 66 6e de "md5.c"..#ifn 0570: 64 65 66 20 43 41 43 4b 45 59 5f 43 52 59 50 54 def CACKEY_CRYPT 0580: 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 OKI_VERSION_CODE 0590: 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 .# define CACKE 05a0: 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 53 49 Y_CRYPTOKI_VERSI 05b0: 4f 4e 5f 43 4f 44 45 20 30 78 30 32 31 65 30 30 ON_CODE 0x021e00 05c0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 47 53 43 2d .#endif../* GSC- 05d0: 49 53 20 76 32 2e 31 20 44 65 66 69 6e 69 74 69 IS v2.1 Definiti 05e0: 6f 6e 73 20 2a 2f 0a 2f 2a 2a 20 43 6c 61 73 73 ons */./** Class 05f0: 65 73 20 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 es **/.#define G 0600: 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 SCIS_CLASS_ISO78 0610: 31 36 20 20 20 20 20 20 20 20 20 20 20 30 78 30 16 0x0 0620: 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 0.#define GSCIS_ 0630: 43 4c 41 53 53 5f 47 4c 4f 42 41 4c 5f 50 4c 41 CLASS_GLOBAL_PLA 0640: 54 46 4f 52 4d 20 20 20 30 78 38 30 0a 0a 2f 2a TFORM 0x80../* 0650: 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 73 20 2a * Instructions * 0660: 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 */.#define GSCIS 0670: 5f 49 4e 53 54 52 5f 47 45 54 5f 52 45 53 50 4f _INSTR_GET_RESPO 0680: 4e 53 45 20 20 20 20 20 20 30 78 43 30 0a 23 64 NSE 0xC0.#d 0690: 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 efine GSCIS_INST 06a0: 52 5f 52 45 41 44 5f 42 49 4e 41 52 59 20 20 20 R_READ_BINARY 06b0: 20 20 20 20 30 78 42 30 0a 23 64 65 66 69 6e 65 0xB0.#define 06c0: 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 55 50 44 GSCIS_INSTR_UPD 06d0: 41 54 45 5f 42 49 4e 41 52 59 20 20 20 20 20 30 ATE_BINARY 0 06e0: 78 44 36 0a 23 64 65 66 69 6e 65 20 47 53 43 49 xD6.#define GSCI 06f0: 53 5f 49 4e 53 54 52 5f 53 45 4c 45 43 54 20 20 S_INSTR_SELECT 0700: 20 20 20 20 20 20 20 20 20 20 30 78 41 34 0a 23 0xA4.# 0710: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 define GSCIS_INS 0720: 54 52 5f 45 58 54 45 52 4e 41 4c 5f 41 55 54 48 TR_EXTERNAL_AUTH 0730: 20 20 20 20 20 30 78 38 32 0a 23 64 65 66 69 6e 0x82.#defin 0740: 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 47 45 e GSCIS_INSTR_GE 0750: 54 5f 43 48 41 4c 4c 45 4e 47 45 20 20 20 20 20 T_CHALLENGE 0760: 30 78 38 34 0a 23 64 65 66 69 6e 65 20 47 53 43 0x84.#define GSC 0770: 49 53 5f 49 4e 53 54 52 5f 49 4e 54 45 52 4e 41 IS_INSTR_INTERNA 0780: 4c 5f 41 55 54 48 20 20 20 20 20 30 78 38 38 0a L_AUTH 0x88. 0790: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e #define GSCIS_IN 07a0: 53 54 52 5f 56 45 52 49 46 59 20 20 20 20 20 20 STR_VERIFY 07b0: 20 20 20 20 20 20 30 78 32 30 0a 23 64 65 66 69 0x20.#defi 07c0: 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 ne GSCIS_INSTR_S 07d0: 49 47 4e 20 20 20 20 20 20 20 20 20 20 20 20 20 IGN 07e0: 20 30 78 32 41 0a 23 64 65 66 69 6e 65 20 47 53 0x2A.#define GS 07f0: 43 49 53 5f 49 4e 53 54 52 5f 47 45 54 5f 50 52 CIS_INSTR_GET_PR 0800: 4f 50 20 20 20 20 20 20 20 20 20 20 30 78 35 36 OP 0x56 0810: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 .#define GSCIS_I 0820: 4e 53 54 52 5f 47 45 54 5f 41 43 52 20 20 20 20 NSTR_GET_ACR 0830: 20 20 20 20 20 20 20 30 78 34 43 0a 23 64 65 66 0x4C.#def 0840: 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f ine GSCIS_INSTR_ 0850: 52 45 41 44 5f 42 55 46 46 45 52 20 20 20 20 20 READ_BUFFER 0860: 20 20 30 78 35 32 0a 23 64 65 66 69 6e 65 20 47 0x52.#define G 0870: 53 43 49 53 5f 49 4e 53 54 52 5f 53 49 47 4e 44 SCIS_INSTR_SIGND 0880: 45 43 52 59 50 54 20 20 20 20 20 20 20 30 78 34 ECRYPT 0x4 0890: 32 0a 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 2..#define GSCIS 08a0: 5f 50 41 52 41 4d 5f 53 45 4c 45 43 54 5f 41 50 _PARAM_SELECT_AP 08b0: 50 4c 45 54 20 20 20 20 20 30 78 30 34 0a 0a 2f PLET 0x04../ 08c0: 2a 2a 20 54 61 67 73 20 2a 2a 2f 0a 2f 2a 2a 2a ** Tags **/./*** 08d0: 20 43 43 43 20 54 61 67 73 20 2a 2a 2a 2f 0a 23 CCC Tags ***/.# 08e0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 08f0: 5f 43 41 52 44 49 44 20 20 20 20 20 20 20 20 20 _CARDID 0900: 20 20 20 20 20 30 78 46 30 0a 23 64 65 66 69 6e 0xF0.#defin 0910: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 43 43 5f e GSCIS_TAG_CCC_ 0920: 56 45 52 20 20 20 20 20 20 20 20 20 20 20 20 20 VER 0930: 30 78 46 31 0a 23 64 65 66 69 6e 65 20 47 53 43 0xF1.#define GSC 0940: 49 53 5f 54 41 47 5f 43 43 47 5f 56 45 52 20 20 IS_TAG_CCG_VER 0950: 20 20 20 20 20 20 20 20 20 20 20 30 78 46 32 0a 0xF2. 0960: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0970: 47 5f 43 41 52 44 55 52 4c 20 20 20 20 20 20 20 G_CARDURL 0980: 20 20 20 20 20 20 30 78 46 33 0a 23 64 65 66 69 0xF3.#defi 0990: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 50 4b 43 ne GSCIS_TAG_PKC 09a0: 53 31 35 20 20 20 20 20 20 20 20 20 20 20 20 20 S15 09b0: 20 30 78 46 34 0a 23 64 65 66 69 6e 65 20 47 53 0xF4.#define GS 09c0: 43 49 53 5f 54 41 47 5f 52 45 47 5f 44 41 54 41 CIS_TAG_REG_DATA 09d0: 5f 4d 4f 44 45 4c 20 20 20 20 20 20 30 78 46 35 _MODEL 0xF5 09e0: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 09f0: 41 47 5f 41 43 52 5f 54 41 42 4c 45 20 20 20 20 AG_ACR_TABLE 0a00: 20 20 20 20 20 20 20 30 78 46 36 0a 23 64 65 66 0xF6.#def 0a10: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 ine GSCIS_TAG_CA 0a20: 52 44 5f 41 50 44 55 20 20 20 20 20 20 20 20 20 RD_APDU 0a30: 20 20 30 78 46 37 0a 23 64 65 66 69 6e 65 20 47 0xF7.#define G 0a40: 53 43 49 53 5f 54 41 47 5f 52 45 44 49 52 45 43 SCIS_TAG_REDIREC 0a50: 54 49 4f 4e 20 20 20 20 20 20 20 20 20 30 78 46 TION 0xF 0a60: 41 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f A.#define GSCIS_ 0a70: 54 41 47 5f 43 54 20 20 20 20 20 20 20 20 20 20 TAG_CT 0a80: 20 20 20 20 20 20 20 20 30 78 46 42 0a 23 64 65 0xFB.#de 0a90: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 53 fine GSCIS_TAG_S 0aa0: 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 T 0ab0: 20 20 20 30 78 46 43 0a 23 64 65 66 69 6e 65 20 0xFC.#define 0ac0: 47 53 43 49 53 5f 54 41 47 5f 4e 45 58 54 43 43 GSCIS_TAG_NEXTCC 0ad0: 43 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 C 0x 0ae0: 46 44 0a 0a 2f 2a 2a 2a 20 47 65 6e 65 72 61 6c FD../*** General 0af0: 20 2d 20 45 46 20 32 32 30 30 20 2a 2a 2a 2f 0a - EF 2200 ***/. 0b00: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0b10: 47 5f 46 4e 41 4d 45 20 20 20 20 20 20 20 20 20 G_FNAME 0b20: 20 20 20 20 20 20 30 78 30 31 0a 23 64 65 66 69 0x01.#defi 0b30: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4d 4e 41 ne GSCIS_TAG_MNA 0b40: 4d 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ME 0b50: 20 30 78 30 32 0a 23 64 65 66 69 6e 65 20 47 53 0x02.#define GS 0b60: 43 49 53 5f 54 41 47 5f 4c 4e 41 4d 45 20 20 20 CIS_TAG_LNAME 0b70: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30 33 0x03 0b80: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0b90: 41 47 5f 53 55 46 46 49 58 20 20 20 20 20 20 20 AG_SUFFIX 0ba0: 20 20 20 20 20 20 20 30 78 30 34 0a 23 64 65 66 0x04.#def 0bb0: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 47 4f ine GSCIS_TAG_GO 0bc0: 56 54 5f 41 47 45 4e 43 59 20 20 20 20 20 20 20 VT_AGENCY 0bd0: 20 20 30 78 30 35 0a 23 64 65 66 69 6e 65 20 47 0x05.#define G 0be0: 53 43 49 53 5f 54 41 47 5f 42 55 52 45 41 55 20 SCIS_TAG_BUREAU 0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30 0x0 0c00: 36 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 6.#define GSCIS_ 0c10: 54 41 47 5f 42 55 52 45 41 55 5f 43 4f 44 45 20 TAG_BUREAU_CODE 0c20: 20 20 20 20 20 20 20 20 30 78 30 37 0a 23 64 65 0x07.#de 0c30: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 44 fine GSCIS_TAG_D 0c40: 45 50 54 5f 43 4f 44 45 20 20 20 20 20 20 20 20 EPT_CODE 0c50: 20 20 20 30 78 30 38 0a 23 64 65 66 69 6e 65 20 0x08.#define 0c60: 47 53 43 49 53 5f 54 41 47 5f 54 49 54 4c 45 20 GSCIS_TAG_TITLE 0c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 0x 0c80: 30 39 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 09.#define GSCIS 0c90: 5f 54 41 47 5f 42 55 49 4c 44 49 4e 47 20 20 20 _TAG_BUILDING 0ca0: 20 20 20 20 20 20 20 20 20 30 78 31 30 0a 23 64 0x10.#d 0cb0: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0cc0: 4f 46 46 49 43 45 5f 41 44 44 52 31 20 20 20 20 OFFICE_ADDR1 0cd0: 20 20 20 20 30 78 31 31 0a 23 64 65 66 69 6e 65 0x11.#define 0ce0: 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 GSCIS_TAG_OFFIC 0cf0: 45 5f 41 44 44 52 32 20 20 20 20 20 20 20 20 30 E_ADDR2 0 0d00: 78 31 32 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x12.#define GSCI 0d10: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 43 49 54 S_TAG_OFFICE_CIT 0d20: 59 20 20 20 20 20 20 20 20 20 30 78 31 33 0a 23 Y 0x13.# 0d30: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 define GSCIS_TAG 0d40: 5f 4f 46 46 49 43 45 5f 53 54 41 54 45 20 20 20 _OFFICE_STATE 0d50: 20 20 20 20 20 30 78 31 34 0a 23 64 65 66 69 6e 0x14.#defin 0d60: 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 e GSCIS_TAG_OFFI 0d70: 43 45 5f 5a 49 50 20 20 20 20 20 20 20 20 20 20 CE_ZIP 0d80: 30 78 31 35 0a 23 64 65 66 69 6e 65 20 47 53 43 0x15.#define GSC 0d90: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 43 4f IS_TAG_OFFICE_CO 0da0: 55 4e 54 52 59 20 20 20 20 20 20 30 78 31 36 0a UNTRY 0x16. 0db0: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 0dc0: 47 5f 4f 46 46 49 43 45 5f 50 48 4f 4e 45 20 20 G_OFFICE_PHONE 0dd0: 20 20 20 20 20 20 30 78 31 37 0a 23 64 65 66 69 0x17.#defi 0de0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 ne GSCIS_TAG_OFF 0df0: 49 43 45 5f 50 48 4f 4e 45 5f 45 58 54 20 20 20 ICE_PHONE_EXT 0e00: 20 30 78 31 38 0a 23 64 65 66 69 6e 65 20 47 53 0x18.#define GS 0e10: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 46 CIS_TAG_OFFICE_F 0e20: 41 58 20 20 20 20 20 20 20 20 20 20 30 78 31 39 AX 0x19 0e30: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0e40: 41 47 5f 4f 46 46 49 43 45 5f 45 4d 41 49 4c 20 AG_OFFICE_EMAIL 0e50: 20 20 20 20 20 20 20 30 78 31 41 0a 23 64 65 66 0x1A.#def 0e60: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 ine GSCIS_TAG_OF 0e70: 46 49 43 45 5f 52 4f 4f 4d 20 20 20 20 20 20 20 FICE_ROOM 0e80: 20 20 30 78 31 42 0a 23 64 65 66 69 6e 65 20 47 0x1B.#define G 0e90: 53 43 49 53 5f 54 41 47 5f 4e 4f 4e 47 4f 56 5f SCIS_TAG_NONGOV_ 0ea0: 41 47 45 4e 43 59 20 20 20 20 20 20 20 30 78 31 AGENCY 0x1 0eb0: 43 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f C.#define GSCIS_ 0ec0: 54 41 47 5f 53 53 4e 5f 44 45 53 49 47 4e 41 54 TAG_SSN_DESIGNAT 0ed0: 4f 52 20 20 20 20 20 20 30 78 31 44 0a 0a 2f 2a OR 0x1D../* 0ee0: 2a 2a 20 50 49 49 20 2d 20 45 46 20 32 31 30 30 ** PII - EF 2100 0ef0: 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 ***/.#define GS 0f00: 43 49 53 5f 54 41 47 5f 53 53 4e 20 20 20 20 20 CIS_TAG_SSN 0f10: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 32 30 0x20 0f20: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 0f30: 41 47 5f 44 4f 42 20 20 20 20 20 20 20 20 20 20 AG_DOB 0f40: 20 20 20 20 20 20 20 30 78 32 31 0a 23 64 65 66 0x21.#def 0f50: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 47 45 ine GSCIS_TAG_GE 0f60: 4e 44 45 52 20 20 20 20 20 20 20 20 20 20 20 20 NDER 0f70: 20 20 30 78 32 32 0a 0a 2f 2a 2a 2a 20 4c 6f 67 0x22../*** Log 0f80: 69 6e 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 2d in Information - 0f90: 20 45 46 20 34 30 30 30 20 2a 2a 2a 2f 0a 23 64 EF 4000 ***/.#d 0fa0: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f efine GSCIS_TAG_ 0fb0: 55 53 45 52 49 44 20 20 20 20 20 20 20 20 20 20 USERID 0fc0: 20 20 20 20 30 78 34 30 0a 23 64 65 66 69 6e 65 0x40.#define 0fd0: 20 47 53 43 49 53 5f 54 41 47 5f 44 4f 4d 41 49 GSCIS_TAG_DOMAI 0fe0: 4e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 N 0 0ff0: 78 34 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 x41.#define GSCI 1000: 53 5f 54 41 47 5f 50 41 53 53 57 4f 52 44 20 20 S_TAG_PASSWORD 1010: 20 20 20 20 20 20 20 20 20 20 30 78 34 32 0a 0a 0x42.. 1020: 2f 2a 2a 2a 20 43 61 72 64 20 49 6e 66 6f 72 6d /*** Card Inform 1030: 61 74 69 6f 6e 20 2d 20 45 46 20 35 30 30 30 20 ation - EF 5000 1040: 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 43 ***/.#define GSC 1050: 49 53 5f 54 41 47 5f 49 53 53 55 45 52 49 44 20 IS_TAG_ISSUERID 1060: 20 20 20 20 20 20 20 20 20 20 20 30 78 35 30 0a 0x50. 1070: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 #define GSCIS_TA 1080: 47 5f 53 45 52 4e 4f 20 20 20 20 20 20 20 20 20 G_SERNO 1090: 20 20 20 20 20 20 30 78 35 31 0a 23 64 65 66 69 0x51.#defi 10a0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 49 53 53 ne GSCIS_TAG_ISS 10b0: 55 45 5f 44 41 54 45 20 20 20 20 20 20 20 20 20 UE_DATE 10c0: 20 30 78 35 32 0a 23 64 65 66 69 6e 65 20 47 53 0x52.#define GS 10d0: 43 49 53 5f 54 41 47 5f 45 58 50 49 52 45 5f 44 CIS_TAG_EXPIRE_D 10e0: 41 54 45 20 20 20 20 20 20 20 20 20 30 78 35 33 ATE 0x53 10f0: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 .#define GSCIS_T 1100: 41 47 5f 43 41 52 44 5f 54 59 50 45 20 20 20 20 AG_CARD_TYPE 1110: 20 20 20 20 20 20 20 30 78 35 34 0a 23 64 65 66 0x54.#def 1120: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 53 45 ine GSCIS_TAG_SE 1130: 43 55 52 49 54 59 5f 43 4f 44 45 20 20 20 20 20 CURITY_CODE 1140: 20 20 30 78 35 37 0a 23 64 65 66 69 6e 65 20 47 0x57.#define G 1150: 53 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44 5f SCIS_TAG_CARDID_ 1160: 41 49 44 20 20 20 20 20 20 20 20 20 20 30 78 35 AID 0x5 1170: 38 0a 0a 2f 2a 2a 2a 20 50 4b 49 20 49 6e 66 6f 8../*** PKI Info 1180: 72 6d 61 74 69 6f 6e 20 2d 20 45 46 20 37 30 30 rmation - EF 700 1190: 30 20 2a 2a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 0 ***/.#define G 11a0: 53 43 49 53 5f 54 41 47 5f 43 45 52 54 49 46 49 SCIS_TAG_CERTIFI 11b0: 43 41 54 45 20 20 20 20 20 20 20 20 20 30 78 37 CATE 0x7 11c0: 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 0.#define GSCIS_ 11d0: 54 41 47 5f 43 45 52 54 5f 49 53 53 55 45 5f 44 TAG_CERT_ISSUE_D 11e0: 41 54 45 20 20 20 20 20 30 78 37 31 0a 23 64 65 ATE 0x71.#de 11f0: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 fine GSCIS_TAG_C 1200: 45 52 54 5f 45 58 50 49 52 45 5f 44 41 54 45 20 ERT_EXPIRE_DATE 1210: 20 20 20 30 78 37 32 0a 0a 2f 2a 2a 20 41 70 70 0x72../** App 1220: 6c 65 74 20 49 44 73 20 2a 2a 2f 0a 23 64 65 66 let IDs **/.#def 1230: 69 6e 65 20 47 53 43 49 53 5f 41 49 44 5f 43 43 ine GSCIS_AID_CC 1240: 43 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 C 1250: 20 20 30 78 41 30 2c 20 30 78 30 30 2c 20 30 78 0xA0, 0x00, 0x 1260: 30 30 2c 20 30 78 30 31 2c 20 30 78 31 36 2c 20 00, 0x01, 0x16, 1270: 30 78 44 42 2c 20 30 78 30 30 0a 0a 2f 2a 20 4d 0xDB, 0x00../* M 1280: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 64 aximum size of d 1290: 61 74 61 20 70 6f 72 74 69 6f 6e 20 6f 66 20 41 ata portion of A 12a0: 50 44 55 73 20 2a 2f 0a 2f 2a 2a 20 44 6f 20 6e PDUs */./** Do n 12b0: 6f 74 20 73 65 74 20 74 68 69 73 20 61 62 6f 76 ot set this abov 12c0: 65 20 32 35 30 20 2a 2a 2f 0a 23 64 65 66 69 6e e 250 **/.#defin 12d0: 65 20 43 41 43 4b 45 59 5f 41 50 44 55 5f 4d 54 e CACKEY_APDU_MT 12e0: 55 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 U 12f0: 32 35 30 0a 0a 2f 2a 20 41 54 52 20 49 66 20 6e 250../* ATR If n 1300: 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 2a 2f 0a ot available */. 1310: 23 69 66 6e 64 65 66 20 4d 41 58 5f 41 54 52 5f #ifndef MAX_ATR_ 1320: 53 49 5a 45 0a 23 64 65 66 69 6e 65 20 4d 41 58 SIZE.#define MAX 1330: 5f 41 54 52 5f 53 49 5a 45 20 31 30 32 34 0a 23 _ATR_SIZE 1024.# 1340: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 43 41 endif..#ifdef CA 1350: 43 4b 45 59 5f 44 45 42 55 47 0a 23 20 20 69 66 CKEY_DEBUG.# if 1360: 64 65 66 20 48 41 56 45 5f 54 49 4d 45 5f 48 0a def HAVE_TIME_H. 1370: 23 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 74 69 # include <ti 1380: 6d 65 2e 68 3e 0a 73 74 61 74 69 63 20 74 69 6d me.h>.static tim 1390: 65 5f 74 20 63 61 63 6b 65 79 5f 64 65 62 75 67 e_t cackey_debug 13a0: 5f 73 74 61 72 74 5f 74 69 6d 65 20 3d 20 30 3b _start_time = 0; 13b0: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 43 41 43 .# define CAC 13c0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 54 KEY_DEBUG_PRINTT 13d0: 49 4d 45 20 7b 20 69 66 20 28 63 61 63 6b 65 79 IME { if (cackey 13e0: 5f 64 65 62 75 67 5f 73 74 61 72 74 5f 74 69 6d _debug_start_tim 13f0: 65 20 3d 3d 20 30 29 20 7b 20 63 61 63 6b 65 79 e == 0) { cackey 1400: 5f 64 65 62 75 67 5f 73 74 61 72 74 5f 74 69 6d _debug_start_tim 1410: 65 20 3d 20 74 69 6d 65 28 4e 55 4c 4c 29 3b 20 e = time(NULL); 1420: 7d 3b 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 }; fprintf(stder 1430: 72 2c 20 22 5b 25 6c 75 5d 3a 20 22 2c 20 28 75 r, "[%lu]: ", (u 1440: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 74 nsigned long) (t 1450: 69 6d 65 28 4e 55 4c 4c 29 20 2d 20 63 61 63 6b ime(NULL) - cack 1460: 65 79 5f 64 65 62 75 67 5f 73 74 61 72 74 5f 74 ey_debug_start_t 1470: 69 6d 65 29 29 3b 20 7d 0a 23 20 20 65 6c 73 65 ime)); }.# else 1480: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 43 41 43 .# define CAC 1490: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 54 KEY_DEBUG_PRINTT 14a0: 49 4d 45 20 2f 2a 2a 2f 0a 23 20 20 65 6e 64 69 IME /**/.# endi 14b0: 66 0a 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 f..# define CAC 14c0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 14d0: 28 78 2e 2e 2e 29 20 7b 20 43 41 43 4b 45 59 5f (x...) { CACKEY_ 14e0: 44 45 42 55 47 5f 50 52 49 4e 54 54 49 4d 45 3b DEBUG_PRINTTIME; 14f0: 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c fprintf(stderr, 1500: 20 22 25 73 28 29 3a 25 69 3a 20 22 2c 20 5f 5f "%s():%i: ", __ 1510: 66 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 4e 45 5f 5f func__, __LINE__ 1520: 29 3b 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 ); fprintf(stder 1530: 72 2c 20 78 29 3b 20 66 70 72 69 6e 74 66 28 73 r, x); fprintf(s 1540: 74 64 65 72 72 2c 20 22 5c 6e 22 29 3b 20 66 66 tderr, "\n"); ff 1550: 6c 75 73 68 28 73 74 64 65 72 72 29 3b 20 7d 0a lush(stderr); }. 1560: 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 # define CACKEY 1570: 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 _DEBUG_PRINTBUF( 1580: 66 2c 20 78 2c 20 79 29 20 7b 20 75 6e 73 69 67 f, x, y) { unsig 1590: 6e 65 64 20 63 68 61 72 20 2a 54 4d 50 42 55 46 ned char *TMPBUF 15a0: 3b 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 ; unsigned long 15b0: 69 64 78 3b 20 54 4d 50 42 55 46 20 3d 20 28 75 idx; TMPBUF = (u 15c0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 nsigned char *) 15d0: 28 78 29 3b 20 43 41 43 4b 45 59 5f 44 45 42 55 (x); CACKEY_DEBU 15e0: 47 5f 50 52 49 4e 54 54 49 4d 45 3b 20 66 70 72 G_PRINTTIME; fpr 15f0: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 intf(stderr, "%s 1600: 28 29 3a 25 69 3a 20 25 73 20 20 28 25 73 2f 25 ():%i: %s (%s/% 1610: 6c 75 20 3d 20 7b 25 30 32 78 22 2c 20 5f 5f 66 lu = {%02x", __f 1620: 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 4e 45 5f 5f 2c unc__, __LINE__, 1630: 20 66 2c 20 23 78 2c 20 28 75 6e 73 69 67 6e 65 f, #x, (unsigne 1640: 64 20 6c 6f 6e 67 29 20 28 79 29 2c 20 54 4d 50 d long) (y), TMP 1650: 42 55 46 5b 30 5d 29 3b 20 66 6f 72 20 28 69 64 BUF[0]); for (id 1660: 78 20 3d 20 31 3b 20 69 64 78 20 3c 20 28 79 29 x = 1; idx < (y) 1670: 3b 20 69 64 78 2b 2b 29 20 7b 20 66 70 72 69 6e ; idx++) { fprin 1680: 74 66 28 73 74 64 65 72 72 2c 20 22 2c 20 25 30 tf(stderr, ", %0 1690: 32 78 22 2c 20 54 4d 50 42 55 46 5b 69 64 78 5d 2x", TMPBUF[idx] 16a0: 29 3b 20 7d 3b 20 66 70 72 69 6e 74 66 28 73 74 ); }; fprintf(st 16b0: 64 65 72 72 2c 20 22 7d 29 5c 6e 22 29 3b 20 66 derr, "})\n"); f 16c0: 66 6c 75 73 68 28 73 74 64 65 72 72 29 3b 20 7d flush(stderr); } 16d0: 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 .# define CACKE 16e0: 59 5f 44 45 42 55 47 5f 50 45 52 52 4f 52 28 78 Y_DEBUG_PERROR(x 16f0: 29 20 7b 20 66 70 72 69 6e 74 66 28 73 74 64 65 ) { fprintf(stde 1700: 72 72 2c 20 22 25 73 28 29 3a 25 69 3a 20 22 2c rr, "%s():%i: ", 1710: 20 5f 5f 66 75 6e 63 5f 5f 2c 20 5f 5f 4c 49 4e __func__, __LIN 1720: 45 5f 5f 29 3b 20 43 41 43 4b 45 59 5f 44 45 42 E__); CACKEY_DEB 1730: 55 47 5f 50 52 49 4e 54 54 49 4d 45 3b 20 70 65 UG_PRINTTIME; pe 1740: 72 72 6f 72 28 78 29 3b 20 66 66 6c 75 73 68 28 rror(x); fflush( 1750: 73 74 64 65 72 72 29 3b 20 7d 0a 23 20 20 64 65 stderr); }.# de 1760: 66 69 6e 65 20 66 72 65 65 28 78 29 20 7b 20 43 fine free(x) { C 1770: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1780: 54 46 28 22 46 52 45 45 28 25 70 29 20 28 25 73 TF("FREE(%p) (%s 1790: 29 22 2c 20 78 2c 20 23 78 29 3b 20 66 72 65 65 )", x, #x); free 17a0: 28 78 29 3b 20 7d 0a 0a 73 74 61 74 69 63 20 76 (x); }..static v 17b0: 6f 69 64 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 oid *CACKEY_DEBU 17c0: 47 5f 46 55 4e 43 5f 4d 41 4c 4c 4f 43 28 73 69 G_FUNC_MALLOC(si 17d0: 7a 65 5f 74 20 73 69 7a 65 2c 20 63 6f 6e 73 74 ze_t size, const 17e0: 20 63 68 61 72 20 2a 66 75 6e 63 2c 20 69 6e 74 char *func, int 17f0: 20 6c 69 6e 65 29 20 7b 0a 09 76 6f 69 64 20 2a line) {..void * 1800: 72 65 74 76 61 6c 3b 0a 0a 09 72 65 74 76 61 6c retval;...retval 1810: 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 29 3b = malloc(size); 1820: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1830: 50 52 49 4e 54 54 49 4d 45 3b 0a 09 66 70 72 69 PRINTTIME;..fpri 1840: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 28 ntf(stderr, "%s( 1850: 29 3a 25 69 3a 20 22 2c 20 66 75 6e 63 2c 20 6c ):%i: ", func, l 1860: 69 6e 65 29 3b 0a 09 66 70 72 69 6e 74 66 28 73 ine);..fprintf(s 1870: 74 64 65 72 72 2c 20 22 4d 41 4c 4c 4f 43 28 29 tderr, "MALLOC() 1880: 20 3d 20 25 70 22 2c 20 72 65 74 76 61 6c 29 3b = %p", retval); 1890: 0a 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 ..fprintf(stderr 18a0: 2c 20 22 5c 6e 22 29 3b 0a 09 66 66 6c 75 73 68 , "\n");..fflush 18b0: 28 73 74 64 65 72 72 29 3b 0a 0a 09 72 65 74 75 (stderr);...retu 18c0: 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 rn(retval);.}..s 18d0: 74 61 74 69 63 20 76 6f 69 64 20 2a 43 41 43 4b tatic void *CACK 18e0: 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 52 45 EY_DEBUG_FUNC_RE 18f0: 41 4c 4c 4f 43 28 76 6f 69 64 20 2a 70 74 72 2c ALLOC(void *ptr, 1900: 20 73 69 7a 65 5f 74 20 73 69 7a 65 2c 20 63 6f size_t size, co 1910: 6e 73 74 20 63 68 61 72 20 2a 66 75 6e 63 2c 20 nst char *func, 1920: 69 6e 74 20 6c 69 6e 65 29 20 7b 0a 09 76 6f 69 int line) {..voi 1930: 64 20 2a 72 65 74 76 61 6c 3b 0a 0a 09 72 65 74 d *retval;...ret 1940: 76 61 6c 20 3d 20 72 65 61 6c 6c 6f 63 28 70 74 val = realloc(pt 1950: 72 2c 20 73 69 7a 65 29 3b 0a 0a 09 69 66 20 28 r, size);...if ( 1960: 72 65 74 76 61 6c 20 21 3d 20 70 74 72 29 20 7b retval != ptr) { 1970: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1980: 50 52 49 4e 54 54 49 4d 45 3b 0a 09 09 66 70 72 PRINTTIME;...fpr 1990: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 intf(stderr, "%s 19a0: 28 29 3a 25 69 3a 20 22 2c 20 66 75 6e 63 2c 20 ():%i: ", func, 19b0: 6c 69 6e 65 29 3b 0a 09 09 66 70 72 69 6e 74 66 line);...fprintf 19c0: 28 73 74 64 65 72 72 2c 20 22 52 45 41 4c 4c 4f (stderr, "REALLO 19d0: 43 28 25 70 29 20 3d 20 25 70 22 2c 20 70 74 72 C(%p) = %p", ptr 19e0: 2c 20 72 65 74 76 61 6c 29 3b 0a 09 09 66 70 72 , retval);...fpr 19f0: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 5c 6e intf(stderr, "\n 1a00: 22 29 3b 0a 09 09 66 66 6c 75 73 68 28 73 74 64 ");...fflush(std 1a10: 65 72 72 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 72 err);..}...if (r 1a20: 65 74 76 61 6c 20 3d 3d 20 4e 55 4c 4c 29 20 7b etval == NULL) { 1a30: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1a40: 50 52 49 4e 54 46 28 22 20 2a 2a 2a 20 45 52 52 PRINTF(" *** ERR 1a50: 4f 52 20 2a 2a 2a 20 72 65 61 6c 6c 6f 63 20 72 OR *** realloc r 1a60: 65 74 75 72 6e 65 64 20 4e 55 4c 4c 20 28 73 69 eturned NULL (si 1a70: 7a 65 20 3d 20 25 6c 75 29 22 2c 20 28 75 6e 73 ze = %lu)", (uns 1a80: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 69 7a 65 igned long) size 1a90: 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 72 );..}...return(r 1aa0: 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 etval);.}..stati 1ab0: 63 20 63 68 61 72 20 2a 43 41 43 4b 45 59 5f 44 c char *CACKEY_D 1ac0: 45 42 55 47 5f 46 55 4e 43 5f 53 54 52 44 55 50 EBUG_FUNC_STRDUP 1ad0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 74 72 (const char *ptr 1ae0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 75 , const char *fu 1af0: 6e 63 2c 20 69 6e 74 20 6c 69 6e 65 29 20 7b 0a nc, int line) {. 1b00: 09 63 68 61 72 20 2a 72 65 74 76 61 6c 3b 0a 0a .char *retval;.. 1b10: 09 72 65 74 76 61 6c 20 3d 20 73 74 72 64 75 70 .retval = strdup 1b20: 28 70 74 72 29 3b 0a 0a 09 43 41 43 4b 45 59 5f (ptr);...CACKEY_ 1b30: 44 45 42 55 47 5f 50 52 49 4e 54 54 49 4d 45 3b DEBUG_PRINTTIME; 1b40: 0a 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 ..fprintf(stderr 1b50: 2c 20 22 25 73 28 29 3a 25 69 3a 20 22 2c 20 66 , "%s():%i: ", f 1b60: 75 6e 63 2c 20 6c 69 6e 65 29 3b 0a 09 66 70 72 unc, line);..fpr 1b70: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 54 intf(stderr, "ST 1b80: 52 44 55 50 5f 4d 41 4c 4c 4f 43 28 29 20 3d 20 RDUP_MALLOC() = 1b90: 25 70 22 2c 20 72 65 74 76 61 6c 29 3b 0a 09 66 %p", retval);..f 1ba0: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 printf(stderr, " 1bb0: 5c 6e 22 29 3b 0a 09 66 66 6c 75 73 68 28 73 74 \n");..fflush(st 1bc0: 64 65 72 72 29 3b 0a 0a 09 72 65 74 75 72 6e 28 derr);...return( 1bd0: 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 retval);.}..stat 1be0: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 43 ic const char *C 1bf0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC 1c00: 5f 54 41 47 5f 54 4f 5f 53 54 52 28 75 6e 73 69 _TAG_TO_STR(unsi 1c10: 67 6e 65 64 20 63 68 61 72 20 74 61 67 29 20 7b gned char tag) { 1c20: 0a 09 73 77 69 74 63 68 20 28 74 61 67 29 20 7b ..switch (tag) { 1c30: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 1c40: 47 5f 43 41 52 44 49 44 3a 0a 09 09 09 72 65 74 G_CARDID:....ret 1c50: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 43 urn("GSCIS_TAG_C 1c60: 41 52 44 49 44 22 29 3b 0a 09 09 63 61 73 65 20 ARDID");...case 1c70: 47 53 43 49 53 5f 54 41 47 5f 43 43 43 5f 56 45 GSCIS_TAG_CCC_VE 1c80: 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 R:....return("GS 1c90: 43 49 53 5f 54 41 47 5f 43 43 43 5f 56 45 52 22 CIS_TAG_CCC_VER" 1ca0: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 1cb0: 54 41 47 5f 43 43 47 5f 56 45 52 3a 0a 09 09 09 TAG_CCG_VER:.... 1cc0: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1cd0: 47 5f 43 43 47 5f 56 45 52 22 29 3b 0a 09 09 63 G_CCG_VER");...c 1ce0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 ase GSCIS_TAG_CA 1cf0: 52 44 55 52 4c 3a 0a 09 09 09 72 65 74 75 72 6e RDURL:....return 1d00: 28 22 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 ("GSCIS_TAG_CARD 1d10: 55 52 4c 22 29 3b 0a 09 09 63 61 73 65 20 47 53 URL");...case GS 1d20: 43 49 53 5f 54 41 47 5f 50 4b 43 53 31 35 3a 0a CIS_TAG_PKCS15:. 1d30: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 1d40: 5f 54 41 47 5f 50 4b 43 53 31 35 22 29 3b 0a 09 _TAG_PKCS15");.. 1d50: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 1d60: 52 45 47 5f 44 41 54 41 5f 4d 4f 44 45 4c 3a 0a REG_DATA_MODEL:. 1d70: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 1d80: 5f 54 41 47 5f 52 45 47 5f 44 41 54 41 5f 4d 4f _TAG_REG_DATA_MO 1d90: 44 45 4c 22 29 3b 0a 09 09 63 61 73 65 20 47 53 DEL");...case GS 1da0: 43 49 53 5f 54 41 47 5f 41 43 52 5f 54 41 42 4c CIS_TAG_ACR_TABL 1db0: 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 E:....return("GS 1dc0: 43 49 53 5f 54 41 47 5f 41 43 52 5f 54 41 42 4c CIS_TAG_ACR_TABL 1dd0: 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 E");...case GSCI 1de0: 53 5f 54 41 47 5f 43 41 52 44 5f 41 50 44 55 3a S_TAG_CARD_APDU: 1df0: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 1e00: 53 5f 54 41 47 5f 43 41 52 44 5f 41 50 44 55 22 S_TAG_CARD_APDU" 1e10: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 1e20: 54 41 47 5f 52 45 44 49 52 45 43 54 49 4f 4e 3a TAG_REDIRECTION: 1e30: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 1e40: 53 5f 54 41 47 5f 52 45 44 49 52 45 43 54 49 4f S_TAG_REDIRECTIO 1e50: 4e 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 N");...case GSCI 1e60: 53 5f 54 41 47 5f 43 54 3a 0a 09 09 09 72 65 74 S_TAG_CT:....ret 1e70: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 43 urn("GSCIS_TAG_C 1e80: 54 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 T");...case GSCI 1e90: 53 5f 54 41 47 5f 53 54 3a 0a 09 09 09 72 65 74 S_TAG_ST:....ret 1ea0: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 53 urn("GSCIS_TAG_S 1eb0: 54 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 T");...case GSCI 1ec0: 53 5f 54 41 47 5f 4e 45 58 54 43 43 43 3a 0a 09 S_TAG_NEXTCCC:.. 1ed0: 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f ..return("GSCIS_ 1ee0: 54 41 47 5f 4e 45 58 54 43 43 43 22 29 3b 0a 09 TAG_NEXTCCC");.. 1ef0: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 1f00: 46 4e 41 4d 45 3a 0a 09 09 09 72 65 74 75 72 6e FNAME:....return 1f10: 28 22 47 53 43 49 53 5f 54 41 47 5f 46 4e 41 4d ("GSCIS_TAG_FNAM 1f20: 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 E");...case GSCI 1f30: 53 5f 54 41 47 5f 4d 4e 41 4d 45 3a 0a 09 09 09 S_TAG_MNAME:.... 1f40: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 1f50: 47 5f 4d 4e 41 4d 45 22 29 3b 0a 09 09 63 61 73 G_MNAME");...cas 1f60: 65 20 47 53 43 49 53 5f 54 41 47 5f 4c 4e 41 4d e GSCIS_TAG_LNAM 1f70: 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 E:....return("GS 1f80: 43 49 53 5f 54 41 47 5f 4c 4e 41 4d 45 22 29 3b CIS_TAG_LNAME"); 1f90: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 1fa0: 47 5f 53 55 46 46 49 58 3a 0a 09 09 09 72 65 74 G_SUFFIX:....ret 1fb0: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 53 urn("GSCIS_TAG_S 1fc0: 55 46 46 49 58 22 29 3b 0a 09 09 63 61 73 65 20 UFFIX");...case 1fd0: 47 53 43 49 53 5f 54 41 47 5f 47 4f 56 54 5f 41 GSCIS_TAG_GOVT_A 1fe0: 47 45 4e 43 59 3a 0a 09 09 09 72 65 74 75 72 6e GENCY:....return 1ff0: 28 22 47 53 43 49 53 5f 54 41 47 5f 47 4f 56 54 ("GSCIS_TAG_GOVT 2000: 5f 41 47 45 4e 43 59 22 29 3b 0a 09 09 63 61 73 _AGENCY");...cas 2010: 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55 52 45 e GSCIS_TAG_BURE 2020: 41 55 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 AU:....return("G 2030: 53 43 49 53 5f 54 41 47 5f 42 55 52 45 41 55 22 SCIS_TAG_BUREAU" 2040: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 2050: 54 41 47 5f 42 55 52 45 41 55 5f 43 4f 44 45 3a TAG_BUREAU_CODE: 2060: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 2070: 53 5f 54 41 47 5f 42 55 52 45 41 55 5f 43 4f 44 S_TAG_BUREAU_COD 2080: 45 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 E");...case GSCI 2090: 53 5f 54 41 47 5f 44 45 50 54 5f 43 4f 44 45 3a S_TAG_DEPT_CODE: 20a0: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 20b0: 53 5f 54 41 47 5f 44 45 50 54 5f 43 4f 44 45 22 S_TAG_DEPT_CODE" 20c0: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 20d0: 54 41 47 5f 54 49 54 4c 45 3a 0a 09 09 09 72 65 TAG_TITLE:....re 20e0: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 20f0: 54 49 54 4c 45 22 29 3b 0a 09 09 63 61 73 65 20 TITLE");...case 2100: 47 53 43 49 53 5f 54 41 47 5f 42 55 49 4c 44 49 GSCIS_TAG_BUILDI 2110: 4e 47 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 NG:....return("G 2120: 53 43 49 53 5f 54 41 47 5f 42 55 49 4c 44 49 4e SCIS_TAG_BUILDIN 2130: 47 22 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 G");...case GSCI 2140: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 S_TAG_OFFICE_ADD 2150: 52 31 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 R1:....return("G 2160: 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f SCIS_TAG_OFFICE_ 2170: 41 44 44 52 31 22 29 3b 0a 09 09 63 61 73 65 20 ADDR1");...case 2180: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 GSCIS_TAG_OFFICE 2190: 5f 41 44 44 52 32 3a 0a 09 09 09 72 65 74 75 72 _ADDR2:....retur 21a0: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 n("GSCIS_TAG_OFF 21b0: 49 43 45 5f 41 44 44 52 32 22 29 3b 0a 09 09 63 ICE_ADDR2");...c 21c0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 ase GSCIS_TAG_OF 21d0: 46 49 43 45 5f 43 49 54 59 3a 0a 09 09 09 72 65 FICE_CITY:....re 21e0: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 21f0: 4f 46 46 49 43 45 5f 43 49 54 59 22 29 3b 0a 09 OFFICE_CITY");.. 2200: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 2210: 4f 46 46 49 43 45 5f 53 54 41 54 45 3a 0a 09 09 OFFICE_STATE:... 2220: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 2230: 41 47 5f 4f 46 46 49 43 45 5f 53 54 41 54 45 22 AG_OFFICE_STATE" 2240: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 2250: 54 41 47 5f 4f 46 46 49 43 45 5f 5a 49 50 3a 0a TAG_OFFICE_ZIP:. 2260: 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 ...return("GSCIS 2270: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 5a 49 50 22 _TAG_OFFICE_ZIP" 2280: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 2290: 54 41 47 5f 4f 46 46 49 43 45 5f 43 4f 55 4e 54 TAG_OFFICE_COUNT 22a0: 52 59 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 RY:....return("G 22b0: 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f SCIS_TAG_OFFICE_ 22c0: 43 4f 55 4e 54 52 59 22 29 3b 0a 09 09 63 61 73 COUNTRY");...cas 22d0: 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 e GSCIS_TAG_OFFI 22e0: 43 45 5f 50 48 4f 4e 45 3a 0a 09 09 09 72 65 74 CE_PHONE:....ret 22f0: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f urn("GSCIS_TAG_O 2300: 46 46 49 43 45 5f 50 48 4f 4e 45 22 29 3b 0a 09 FFICE_PHONE");.. 2310: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 2320: 4f 46 46 49 43 45 5f 50 48 4f 4e 45 5f 45 58 54 OFFICE_PHONE_EXT 2330: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 2340: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 IS_TAG_OFFICE_PH 2350: 4f 4e 45 5f 45 58 54 22 29 3b 0a 09 09 63 61 73 ONE_EXT");...cas 2360: 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 e GSCIS_TAG_OFFI 2370: 43 45 5f 46 41 58 3a 0a 09 09 09 72 65 74 75 72 CE_FAX:....retur 2380: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 n("GSCIS_TAG_OFF 2390: 49 43 45 5f 46 41 58 22 29 3b 0a 09 09 63 61 73 ICE_FAX");...cas 23a0: 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 e GSCIS_TAG_OFFI 23b0: 43 45 5f 45 4d 41 49 4c 3a 0a 09 09 09 72 65 74 CE_EMAIL:....ret 23c0: 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 4f urn("GSCIS_TAG_O 23d0: 46 46 49 43 45 5f 45 4d 41 49 4c 22 29 3b 0a 09 FFICE_EMAIL");.. 23e0: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 23f0: 4f 46 46 49 43 45 5f 52 4f 4f 4d 3a 0a 09 09 09 OFFICE_ROOM:.... 2400: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 2410: 47 5f 4f 46 46 49 43 45 5f 52 4f 4f 4d 22 29 3b G_OFFICE_ROOM"); 2420: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 2430: 47 5f 4e 4f 4e 47 4f 56 5f 41 47 45 4e 43 59 3a G_NONGOV_AGENCY: 2440: 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 49 ....return("GSCI 2450: 53 5f 54 41 47 5f 4e 4f 4e 47 4f 56 5f 41 47 45 S_TAG_NONGOV_AGE 2460: 4e 43 59 22 29 3b 0a 09 09 63 61 73 65 20 47 53 NCY");...case GS 2470: 43 49 53 5f 54 41 47 5f 53 53 4e 5f 44 45 53 49 CIS_TAG_SSN_DESI 2480: 47 4e 41 54 4f 52 3a 0a 09 09 09 72 65 74 75 72 GNATOR:....retur 2490: 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 53 53 4e n("GSCIS_TAG_SSN 24a0: 5f 44 45 53 49 47 4e 41 54 4f 52 22 29 3b 0a 09 _DESIGNATOR");.. 24b0: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 24c0: 53 53 4e 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 SSN:....return(" 24d0: 47 53 43 49 53 5f 54 41 47 5f 53 53 4e 22 29 3b GSCIS_TAG_SSN"); 24e0: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 24f0: 47 5f 44 4f 42 3a 0a 09 09 09 72 65 74 75 72 6e G_DOB:....return 2500: 28 22 47 53 43 49 53 5f 54 41 47 5f 44 4f 42 22 ("GSCIS_TAG_DOB" 2510: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 2520: 54 41 47 5f 47 45 4e 44 45 52 3a 0a 09 09 09 72 TAG_GENDER:....r 2530: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 2540: 5f 47 45 4e 44 45 52 22 29 3b 0a 09 09 63 61 73 _GENDER");...cas 2550: 65 20 47 53 43 49 53 5f 54 41 47 5f 55 53 45 52 e GSCIS_TAG_USER 2560: 49 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 ID:....return("G 2570: 53 43 49 53 5f 54 41 47 5f 55 53 45 52 49 44 22 SCIS_TAG_USERID" 2580: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 2590: 54 41 47 5f 44 4f 4d 41 49 4e 3a 0a 09 09 09 72 TAG_DOMAIN:....r 25a0: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 25b0: 5f 44 4f 4d 41 49 4e 22 29 3b 0a 09 09 63 61 73 _DOMAIN");...cas 25c0: 65 20 47 53 43 49 53 5f 54 41 47 5f 50 41 53 53 e GSCIS_TAG_PASS 25d0: 57 4f 52 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 WORD:....return( 25e0: 22 47 53 43 49 53 5f 54 41 47 5f 50 41 53 53 57 "GSCIS_TAG_PASSW 25f0: 4f 52 44 22 29 3b 0a 09 09 63 61 73 65 20 47 53 ORD");...case GS 2600: 43 49 53 5f 54 41 47 5f 49 53 53 55 45 52 49 44 CIS_TAG_ISSUERID 2610: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 43 :....return("GSC 2620: 49 53 5f 54 41 47 5f 49 53 53 55 45 52 49 44 22 IS_TAG_ISSUERID" 2630: 29 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f );...case GSCIS_ 2640: 54 41 47 5f 53 45 52 4e 4f 3a 0a 09 09 09 72 65 TAG_SERNO:....re 2650: 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f turn("GSCIS_TAG_ 2660: 53 45 52 4e 4f 22 29 3b 0a 09 09 63 61 73 65 20 SERNO");...case 2670: 47 53 43 49 53 5f 54 41 47 5f 49 53 53 55 45 5f GSCIS_TAG_ISSUE_ 2680: 44 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 DATE:....return( 2690: 22 47 53 43 49 53 5f 54 41 47 5f 49 53 53 55 45 "GSCIS_TAG_ISSUE 26a0: 5f 44 41 54 45 22 29 3b 0a 09 09 63 61 73 65 20 _DATE");...case 26b0: 47 53 43 49 53 5f 54 41 47 5f 45 58 50 49 52 45 GSCIS_TAG_EXPIRE 26c0: 5f 44 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e _DATE:....return 26d0: 28 22 47 53 43 49 53 5f 54 41 47 5f 45 58 50 49 ("GSCIS_TAG_EXPI 26e0: 52 45 5f 44 41 54 45 22 29 3b 0a 09 09 63 61 73 RE_DATE");...cas 26f0: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 e GSCIS_TAG_CARD 2700: 5f 54 59 50 45 3a 0a 09 09 09 72 65 74 75 72 6e _TYPE:....return 2710: 28 22 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 ("GSCIS_TAG_CARD 2720: 5f 54 59 50 45 22 29 3b 0a 09 09 63 61 73 65 20 _TYPE");...case 2730: 47 53 43 49 53 5f 54 41 47 5f 53 45 43 55 52 49 GSCIS_TAG_SECURI 2740: 54 59 5f 43 4f 44 45 3a 0a 09 09 09 72 65 74 75 TY_CODE:....retu 2750: 72 6e 28 22 47 53 43 49 53 5f 54 41 47 5f 53 45 rn("GSCIS_TAG_SE 2760: 43 55 52 49 54 59 5f 43 4f 44 45 22 29 3b 0a 09 CURITY_CODE");.. 2770: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 2780: 43 41 52 44 49 44 5f 41 49 44 3a 0a 09 09 09 72 CARDID_AID:....r 2790: 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 47 eturn("GSCIS_TAG 27a0: 5f 43 41 52 44 49 44 5f 41 49 44 22 29 3b 0a 09 _CARDID_AID");.. 27b0: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f .case GSCIS_TAG_ 27c0: 43 45 52 54 49 46 49 43 41 54 45 3a 0a 09 09 09 CERTIFICATE:.... 27d0: 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 41 return("GSCIS_TA 27e0: 47 5f 43 45 52 54 49 46 49 43 41 54 45 22 29 3b G_CERTIFICATE"); 27f0: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA 2800: 47 5f 43 45 52 54 5f 49 53 53 55 45 5f 44 41 54 G_CERT_ISSUE_DAT 2810: 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 47 53 E:....return("GS 2820: 43 49 53 5f 54 41 47 5f 43 45 52 54 5f 49 53 53 CIS_TAG_CERT_ISS 2830: 55 45 5f 44 41 54 45 22 29 3b 0a 09 09 63 61 73 UE_DATE");...cas 2840: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 e GSCIS_TAG_CERT 2850: 5f 45 58 50 49 52 45 5f 44 41 54 45 3a 0a 09 09 _EXPIRE_DATE:... 2860: 09 72 65 74 75 72 6e 28 22 47 53 43 49 53 5f 54 .return("GSCIS_T 2870: 41 47 5f 43 45 52 54 5f 45 58 50 49 52 45 5f 44 AG_CERT_EXPIRE_D 2880: 41 54 45 22 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 ATE");..}...retu 2890: 72 6e 28 22 55 4e 4b 4e 4f 57 4e 22 29 3b 0a 7d rn("UNKNOWN");.} 28a0: 0a 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 ..static const c 28b0: 68 61 72 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 har *CACKEY_DEBU 28c0: 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f G_FUNC_SCARDERR_ 28d0: 54 4f 5f 53 54 52 28 4c 4f 4e 47 20 72 65 74 63 TO_STR(LONG retc 28e0: 6f 64 65 29 20 7b 0a 09 73 77 69 74 63 68 20 28 ode) {..switch ( 28f0: 72 65 74 63 6f 64 65 29 20 7b 0a 09 09 63 61 73 retcode) {...cas 2900: 65 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 e SCARD_S_SUCCES 2910: 53 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 S:....return("SC 2920: 41 52 44 5f 53 5f 53 55 43 43 45 53 53 22 29 3b ARD_S_SUCCESS"); 2930: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 2940: 43 41 4e 43 45 4c 4c 45 44 3a 0a 09 09 09 72 65 CANCELLED:....re 2950: 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 43 41 turn("SCARD_E_CA 2960: 4e 43 45 4c 4c 45 44 22 29 3b 0a 09 09 63 61 73 NCELLED");...cas 2970: 65 20 53 43 41 52 44 5f 45 5f 43 41 4e 54 5f 44 e SCARD_E_CANT_D 2980: 49 53 50 4f 53 45 3a 0a 09 09 09 72 65 74 75 72 ISPOSE:....retur 2990: 6e 28 22 53 43 41 52 44 5f 45 5f 43 41 4e 54 5f n("SCARD_E_CANT_ 29a0: 44 49 53 50 4f 53 45 22 29 3b 0a 09 09 63 61 73 DISPOSE");...cas 29b0: 65 20 53 43 41 52 44 5f 45 5f 49 4e 53 55 46 46 e SCARD_E_INSUFF 29c0: 49 43 49 45 4e 54 5f 42 55 46 46 45 52 3a 0a 09 ICIENT_BUFFER:.. 29d0: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 29e0: 45 5f 49 4e 53 55 46 46 49 43 49 45 4e 54 5f 42 E_INSUFFICIENT_B 29f0: 55 46 46 45 52 22 29 3b 0a 09 09 63 61 73 65 20 UFFER");...case 2a00: 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f SCARD_E_INVALID_ 2a10: 41 54 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 ATR:....return(" 2a20: 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f SCARD_E_INVALID_ 2a30: 41 54 52 22 29 3b 0a 09 09 63 61 73 65 20 53 43 ATR");...case SC 2a40: 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 48 41 ARD_E_INVALID_HA 2a50: 4e 44 4c 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 NDLE:....return( 2a60: 22 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 "SCARD_E_INVALID 2a70: 5f 48 41 4e 44 4c 45 22 29 3b 0a 09 09 63 61 73 _HANDLE");...cas 2a80: 65 20 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 e SCARD_E_INVALI 2a90: 44 5f 50 41 52 41 4d 45 54 45 52 3a 0a 09 09 09 D_PARAMETER:.... 2aa0: 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f return("SCARD_E_ 2ab0: 49 4e 56 41 4c 49 44 5f 50 41 52 41 4d 45 54 45 INVALID_PARAMETE 2ac0: 52 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 R");...case SCAR 2ad0: 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 54 41 52 47 D_E_INVALID_TARG 2ae0: 45 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 ET:....return("S 2af0: 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 54 CARD_E_INVALID_T 2b00: 41 52 47 45 54 22 29 3b 0a 09 09 63 61 73 65 20 ARGET");...case 2b10: 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f SCARD_E_INVALID_ 2b20: 56 41 4c 55 45 3a 0a 09 09 09 72 65 74 75 72 6e VALUE:....return 2b30: 28 22 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 ("SCARD_E_INVALI 2b40: 44 5f 56 41 4c 55 45 22 29 3b 0a 09 09 63 61 73 D_VALUE");...cas 2b50: 65 20 53 43 41 52 44 5f 45 5f 4e 4f 5f 4d 45 4d e SCARD_E_NO_MEM 2b60: 4f 52 59 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 ORY:....return(" 2b70: 53 43 41 52 44 5f 45 5f 4e 4f 5f 4d 45 4d 4f 52 SCARD_E_NO_MEMOR 2b80: 59 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 Y");...case SCAR 2b90: 44 5f 45 5f 55 4e 4b 4e 4f 57 4e 5f 52 45 41 44 D_E_UNKNOWN_READ 2ba0: 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 53 ER:....return("S 2bb0: 43 41 52 44 5f 45 5f 55 4e 4b 4e 4f 57 4e 5f 52 CARD_E_UNKNOWN_R 2bc0: 45 41 44 45 52 22 29 3b 0a 09 09 63 61 73 65 20 EADER");...case 2bd0: 53 43 41 52 44 5f 45 5f 54 49 4d 45 4f 55 54 3a SCARD_E_TIMEOUT: 2be0: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 2bf0: 44 5f 45 5f 54 49 4d 45 4f 55 54 22 29 3b 0a 09 D_E_TIMEOUT");.. 2c00: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 53 48 .case SCARD_E_SH 2c10: 41 52 49 4e 47 5f 56 49 4f 4c 41 54 49 4f 4e 3a ARING_VIOLATION: 2c20: 0a 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 ....return("SCAR 2c30: 44 5f 45 5f 53 48 41 52 49 4e 47 5f 56 49 4f 4c D_E_SHARING_VIOL 2c40: 41 54 49 4f 4e 22 29 3b 0a 09 09 63 61 73 65 20 ATION");...case 2c50: 53 43 41 52 44 5f 45 5f 4e 4f 5f 53 4d 41 52 54 SCARD_E_NO_SMART 2c60: 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 CARD:....return( 2c70: 22 53 43 41 52 44 5f 45 5f 4e 4f 5f 53 4d 41 52 "SCARD_E_NO_SMAR 2c80: 54 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 20 TCARD");...case 2c90: 53 43 41 52 44 5f 45 5f 55 4e 4b 4e 4f 57 4e 5f SCARD_E_UNKNOWN_ 2ca0: 43 41 52 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 CARD:....return( 2cb0: 22 53 43 41 52 44 5f 45 5f 55 4e 4b 4e 4f 57 4e "SCARD_E_UNKNOWN 2cc0: 5f 43 41 52 44 22 29 3b 0a 09 09 63 61 73 65 20 _CARD");...case 2cd0: 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 SCARD_E_PROTO_MI 2ce0: 53 4d 41 54 43 48 3a 0a 09 09 09 72 65 74 75 72 SMATCH:....retur 2cf0: 6e 28 22 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f n("SCARD_E_PROTO 2d00: 5f 4d 49 53 4d 41 54 43 48 22 29 3b 0a 09 09 63 _MISMATCH");...c 2d10: 61 73 65 20 53 43 41 52 44 5f 45 5f 4e 4f 54 5f ase SCARD_E_NOT_ 2d20: 52 45 41 44 59 3a 0a 09 09 09 72 65 74 75 72 6e READY:....return 2d30: 28 22 53 43 41 52 44 5f 45 5f 4e 4f 54 5f 52 45 ("SCARD_E_NOT_RE 2d40: 41 44 59 22 29 3b 0a 09 09 63 61 73 65 20 53 43 ADY");...case SC 2d50: 41 52 44 5f 45 5f 53 59 53 54 45 4d 5f 43 41 4e ARD_E_SYSTEM_CAN 2d60: 43 45 4c 4c 45 44 3a 0a 09 09 09 72 65 74 75 72 CELLED:....retur 2d70: 6e 28 22 53 43 41 52 44 5f 45 5f 53 59 53 54 45 n("SCARD_E_SYSTE 2d80: 4d 5f 43 41 4e 43 45 4c 4c 45 44 22 29 3b 0a 09 M_CANCELLED");.. 2d90: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 4e 4f .case SCARD_E_NO 2da0: 54 5f 54 52 41 4e 53 41 43 54 45 44 3a 0a 09 09 T_TRANSACTED:... 2db0: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 2dc0: 5f 4e 4f 54 5f 54 52 41 4e 53 41 43 54 45 44 22 _NOT_TRANSACTED" 2dd0: 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f );...case SCARD_ 2de0: 45 5f 52 45 41 44 45 52 5f 55 4e 41 56 41 49 4c E_READER_UNAVAIL 2df0: 41 42 4c 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 ABLE:....return( 2e00: 22 53 43 41 52 44 5f 45 5f 52 45 41 44 45 52 5f "SCARD_E_READER_ 2e10: 55 4e 41 56 41 49 4c 41 42 4c 45 22 29 3b 0a 09 UNAVAILABLE");.. 2e20: 09 63 61 73 65 20 53 43 41 52 44 5f 57 5f 55 4e .case SCARD_W_UN 2e30: 53 55 50 50 4f 52 54 45 44 5f 43 41 52 44 3a 0a SUPPORTED_CARD:. 2e40: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2e50: 5f 57 5f 55 4e 53 55 50 50 4f 52 54 45 44 5f 43 _W_UNSUPPORTED_C 2e60: 41 52 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 ARD");...case SC 2e70: 41 52 44 5f 57 5f 55 4e 52 45 53 50 4f 4e 53 49 ARD_W_UNRESPONSI 2e80: 56 45 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 75 VE_CARD:....retu 2e90: 72 6e 28 22 53 43 41 52 44 5f 57 5f 55 4e 52 45 rn("SCARD_W_UNRE 2ea0: 53 50 4f 4e 53 49 56 45 5f 43 41 52 44 22 29 3b SPONSIVE_CARD"); 2eb0: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 57 5f ...case SCARD_W_ 2ec0: 55 4e 50 4f 57 45 52 45 44 5f 43 41 52 44 3a 0a UNPOWERED_CARD:. 2ed0: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2ee0: 5f 57 5f 55 4e 50 4f 57 45 52 45 44 5f 43 41 52 _W_UNPOWERED_CAR 2ef0: 44 22 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 D");...case SCAR 2f00: 44 5f 57 5f 52 45 53 45 54 5f 43 41 52 44 3a 0a D_W_RESET_CARD:. 2f10: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 2f20: 5f 57 5f 52 45 53 45 54 5f 43 41 52 44 22 29 3b _W_RESET_CARD"); 2f30: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 57 5f ...case SCARD_W_ 2f40: 52 45 4d 4f 56 45 44 5f 43 41 52 44 3a 0a 09 09 REMOVED_CARD:... 2f50: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 57 .return("SCARD_W 2f60: 5f 52 45 4d 4f 56 45 44 5f 43 41 52 44 22 29 3b _REMOVED_CARD"); 2f70: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 2f80: 50 43 49 5f 54 4f 4f 5f 53 4d 41 4c 4c 3a 0a 09 PCI_TOO_SMALL:.. 2f90: 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f ..return("SCARD_ 2fa0: 45 5f 50 43 49 5f 54 4f 4f 5f 53 4d 41 4c 4c 22 E_PCI_TOO_SMALL" 2fb0: 29 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f );...case SCARD_ 2fc0: 45 5f 52 45 41 44 45 52 5f 55 4e 53 55 50 50 4f E_READER_UNSUPPO 2fd0: 52 54 45 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 RTED:....return( 2fe0: 22 53 43 41 52 44 5f 45 5f 52 45 41 44 45 52 5f "SCARD_E_READER_ 2ff0: 55 4e 53 55 50 50 4f 52 54 45 44 22 29 3b 0a 09 UNSUPPORTED");.. 3000: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 44 55 .case SCARD_E_DU 3010: 50 4c 49 43 41 54 45 5f 52 45 41 44 45 52 3a 0a PLICATE_READER:. 3020: 09 09 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 ...return("SCARD 3030: 5f 45 5f 44 55 50 4c 49 43 41 54 45 5f 52 45 41 _E_DUPLICATE_REA 3040: 44 45 52 22 29 3b 0a 09 09 63 61 73 65 20 53 43 DER");...case SC 3050: 41 52 44 5f 45 5f 43 41 52 44 5f 55 4e 53 55 50 ARD_E_CARD_UNSUP 3060: 50 4f 52 54 45 44 3a 0a 09 09 09 72 65 74 75 72 PORTED:....retur 3070: 6e 28 22 53 43 41 52 44 5f 45 5f 43 41 52 44 5f n("SCARD_E_CARD_ 3080: 55 4e 53 55 50 50 4f 52 54 45 44 22 29 3b 0a 09 UNSUPPORTED");.. 3090: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 4e 4f .case SCARD_E_NO 30a0: 5f 53 45 52 56 49 43 45 3a 0a 09 09 09 72 65 74 _SERVICE:....ret 30b0: 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 4e 4f 5f urn("SCARD_E_NO_ 30c0: 53 45 52 56 49 43 45 22 29 3b 0a 09 09 63 61 73 SERVICE");...cas 30d0: 65 20 53 43 41 52 44 5f 45 5f 53 45 52 56 49 43 e SCARD_E_SERVIC 30e0: 45 5f 53 54 4f 50 50 45 44 3a 0a 09 09 09 72 65 E_STOPPED:....re 30f0: 74 75 72 6e 28 22 53 43 41 52 44 5f 45 5f 53 45 turn("SCARD_E_SE 3100: 52 56 49 43 45 5f 53 54 4f 50 50 45 44 22 29 3b RVICE_STOPPED"); 3110: 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f ...case SCARD_E_ 3120: 55 4e 53 55 50 50 4f 52 54 45 44 5f 46 45 41 54 UNSUPPORTED_FEAT 3130: 55 52 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 URE:....return(" 3140: 53 43 41 52 44 5f 45 5f 55 4e 53 55 50 50 4f 52 SCARD_E_UNSUPPOR 3150: 54 45 44 5f 46 45 41 54 55 52 45 22 29 3b 0a 23 TED_FEATURE");.# 3160: 69 66 64 65 66 20 53 43 41 52 44 5f 57 5f 49 4e ifdef SCARD_W_IN 3170: 53 45 52 54 45 44 5f 43 41 52 44 0a 09 09 63 61 SERTED_CARD...ca 3180: 73 65 20 53 43 41 52 44 5f 57 5f 49 4e 53 45 52 se SCARD_W_INSER 3190: 54 45 44 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 TED_CARD:....ret 31a0: 75 72 6e 28 22 53 43 41 52 44 5f 57 5f 49 4e 53 urn("SCARD_W_INS 31b0: 45 52 54 45 44 5f 43 41 52 44 22 29 3b 0a 23 65 ERTED_CARD");.#e 31c0: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 43 41 52 ndif.#ifdef SCAR 31d0: 44 5f 45 5f 4e 4f 5f 52 45 41 44 45 52 53 5f 41 D_E_NO_READERS_A 31e0: 56 41 49 4c 41 42 4c 45 0a 09 09 63 61 73 65 20 VAILABLE...case 31f0: 53 43 41 52 44 5f 45 5f 4e 4f 5f 52 45 41 44 45 SCARD_E_NO_READE 3200: 52 53 5f 41 56 41 49 4c 41 42 4c 45 3a 0a 09 09 RS_AVAILABLE:... 3210: 09 72 65 74 75 72 6e 28 22 53 43 41 52 44 5f 45 .return("SCARD_E 3220: 5f 4e 4f 5f 52 45 41 44 45 52 53 5f 41 56 41 49 _NO_READERS_AVAI 3230: 4c 41 42 4c 45 22 29 3b 0a 23 65 6e 64 69 66 0a LABLE");.#endif. 3240: 09 7d 0a 0a 09 72 65 74 75 72 6e 28 22 55 4e 4b .}...return("UNK 3250: 4e 4f 57 4e 22 29 3b 0a 7d 0a 0a 73 74 61 74 69 NOWN");.}..stati 3260: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 43 41 c const char *CA 3270: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 3280: 4f 42 4a 49 44 5f 54 4f 5f 53 54 52 28 75 69 6e OBJID_TO_STR(uin 3290: 74 31 36 5f 74 20 6f 62 6a 69 64 29 20 7b 0a 09 t16_t objid) {.. 32a0: 73 77 69 74 63 68 20 28 6f 62 6a 69 64 29 20 7b switch (objid) { 32b0: 0a 09 09 63 61 73 65 20 30 78 32 30 30 30 3a 0a ...case 0x2000:. 32c0: 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 ...return("CACKE 32d0: 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 47 45 4e 45 Y_TLV_OBJID_GENE 32e0: 52 41 4c 49 4e 46 4f 22 29 3b 0a 09 09 63 61 73 RALINFO");...cas 32f0: 65 20 30 78 32 31 30 30 3a 0a 09 09 09 72 65 74 e 0x2100:....ret 3300: 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f urn("CACKEY_TLV_ 3310: 4f 42 4a 49 44 5f 50 52 4f 50 45 52 53 4f 4e 41 OBJID_PROPERSONA 3320: 4c 49 4e 46 4f 22 29 3b 0a 09 09 63 61 73 65 20 LINFO");...case 3330: 30 78 33 30 30 30 3a 0a 09 09 09 72 65 74 75 72 0x3000:....retur 3340: 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 n("CACKEY_TLV_OB 3350: 4a 49 44 5f 41 43 43 45 53 53 43 4f 4e 54 52 4f JID_ACCESSCONTRO 3360: 4c 22 29 3b 0a 09 09 63 61 73 65 20 30 78 34 30 L");...case 0x40 3370: 30 30 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 00:....return("C 3380: 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f ACKEY_TLV_OBJID_ 3390: 4c 4f 47 49 4e 22 29 3b 0a 09 09 63 61 73 65 20 LOGIN");...case 33a0: 30 78 35 30 30 30 3a 0a 09 09 09 72 65 74 75 72 0x5000:....retur 33b0: 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 n("CACKEY_TLV_OB 33c0: 4a 49 44 5f 43 41 52 44 49 4e 46 4f 22 29 3b 0a JID_CARDINFO");. 33d0: 09 09 63 61 73 65 20 30 78 36 30 30 30 3a 0a 09 ..case 0x6000:.. 33e0: 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 ..return("CACKEY 33f0: 5f 54 4c 56 5f 4f 42 4a 49 44 5f 42 49 4f 4d 45 _TLV_OBJID_BIOME 3400: 54 52 49 43 53 22 29 3b 0a 09 09 63 61 73 65 20 TRICS");...case 3410: 30 78 37 30 30 30 3a 0a 09 09 09 72 65 74 75 72 0x7000:....retur 3420: 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 n("CACKEY_TLV_OB 3430: 4a 49 44 5f 44 49 47 49 54 41 4c 53 49 47 43 45 JID_DIGITALSIGCE 3440: 52 54 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 RT");...case 0x0 3450: 32 30 30 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 200:....return(" 3460: 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 CACKEY_TLV_OBJID 3470: 5f 43 41 43 5f 50 45 52 53 4f 4e 22 29 3b 0a 09 _CAC_PERSON");.. 3480: 09 63 61 73 65 20 30 78 30 32 30 32 3a 0a 09 09 .case 0x0202:... 3490: 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 59 5f .return("CACKEY_ 34a0: 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 42 45 TLV_OBJID_CAC_BE 34b0: 4e 45 46 49 54 53 22 29 3b 0a 09 09 63 61 73 65 NEFITS");...case 34c0: 20 30 78 30 32 30 33 3a 0a 09 09 09 72 65 74 75 0x0203:....retu 34d0: 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f rn("CACKEY_TLV_O 34e0: 42 4a 49 44 5f 43 41 43 5f 4f 54 48 45 52 42 45 BJID_CAC_OTHERBE 34f0: 4e 45 46 49 54 53 22 29 3b 0a 09 09 63 61 73 65 NEFITS");...case 3500: 20 30 78 30 32 30 31 3a 0a 09 09 09 72 65 74 75 0x0201:....retu 3510: 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 4f rn("CACKEY_TLV_O 3520: 42 4a 49 44 5f 43 41 43 5f 50 45 52 53 4f 4e 4e BJID_CAC_PERSONN 3530: 45 4c 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 EL");...case 0x0 3540: 32 46 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 2FE:....return(" 3550: 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 CACKEY_TLV_OBJID 3560: 5f 43 41 43 5f 50 4b 49 43 45 52 54 22 29 3b 0a _CAC_PKICERT");. 3570: 09 7d 0a 09 0a 09 72 65 74 75 72 6e 28 22 55 4e .}....return("UN 3580: 4b 4e 4f 57 4e 22 29 3b 0a 7d 0a 0a 73 74 61 74 KNOWN");.}..stat 3590: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 43 ic const char *C 35a0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC 35b0: 5f 41 50 50 54 59 50 45 5f 54 4f 5f 53 54 52 28 _APPTYPE_TO_STR( 35c0: 75 69 6e 74 38 5f 74 20 61 70 70 74 79 70 65 29 uint8_t apptype) 35d0: 20 7b 0a 09 73 77 69 74 63 68 20 28 61 70 70 74 {..switch (appt 35e0: 79 70 65 29 20 7b 0a 09 09 63 61 73 65 20 30 78 ype) {...case 0x 35f0: 30 30 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 4e 00:....return("N 3600: 4f 4e 45 22 29 3b 0a 09 09 63 61 73 65 20 30 78 ONE");...case 0x 3610: 30 31 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 01:....return("C 3620: 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 47 45 ACKEY_TLV_APP_GE 3630: 4e 45 52 49 43 22 29 3b 0a 09 09 63 61 73 65 20 NERIC");...case 3640: 30 78 30 32 3a 0a 09 09 09 72 65 74 75 72 6e 28 0x02:....return( 3650: 22 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f "CACKEY_TLV_APP_ 3660: 53 4b 49 22 29 3b 0a 09 09 63 61 73 65 20 30 78 SKI");...case 0x 3670: 30 33 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 03:....return("C 3680: 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 47 45 ACKEY_TLV_APP_GE 3690: 4e 45 52 49 43 20 7c 20 43 41 43 4b 45 59 5f 54 NERIC | CACKEY_T 36a0: 4c 56 5f 41 50 50 5f 53 4b 49 22 29 3b 0a 09 09 LV_APP_SKI");... 36b0: 63 61 73 65 20 30 78 30 34 3a 0a 09 09 09 72 65 case 0x04:....re 36c0: 74 75 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 turn("CACKEY_TLV 36d0: 5f 41 50 50 5f 50 4b 49 22 29 3b 0a 09 09 63 61 _APP_PKI");...ca 36e0: 73 65 20 30 78 30 35 3a 0a 09 09 09 72 65 74 75 se 0x05:....retu 36f0: 72 6e 28 22 43 41 43 4b 45 59 5f 54 4c 56 5f 41 rn("CACKEY_TLV_A 3700: 50 50 5f 47 45 4e 45 52 49 43 20 7c 20 43 41 43 PP_GENERIC | CAC 3710: 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 22 KEY_TLV_APP_PKI" 3720: 29 3b 0a 09 09 63 61 73 65 20 30 78 30 36 3a 0a );...case 0x06:. 3730: 09 09 09 72 65 74 75 72 6e 28 22 43 41 43 4b 45 ...return("CACKE 3740: 59 5f 54 4c 56 5f 41 50 50 5f 53 4b 49 20 7c 20 Y_TLV_APP_SKI | 3750: 43 41 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 CACKEY_TLV_APP_P 3760: 4b 49 22 29 3b 0a 09 09 63 61 73 65 20 30 78 30 KI");...case 0x0 3770: 37 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 41 7:....return("CA 3780: 43 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 47 45 4e CKEY_TLV_APP_GEN 3790: 45 52 49 43 20 7c 20 43 41 43 4b 45 59 5f 54 4c ERIC | CACKEY_TL 37a0: 56 5f 41 50 50 5f 53 4b 49 20 7c 20 43 41 43 4b V_APP_SKI | CACK 37b0: 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 22 29 EY_TLV_APP_PKI") 37c0: 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 22 49 ;..}...return("I 37d0: 4e 56 41 4c 49 44 22 29 3b 0a 7d 0a 0a 73 74 61 NVALID");.}..sta 37e0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a tic const char * 37f0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e CACKEY_DEBUG_FUN 3800: 43 5f 41 54 54 52 49 42 55 54 45 5f 54 4f 5f 53 C_ATTRIBUTE_TO_S 3810: 54 52 28 43 4b 5f 41 54 54 52 49 42 55 54 45 5f TR(CK_ATTRIBUTE_ 3820: 54 59 50 45 20 61 74 74 72 29 20 7b 0a 09 73 77 TYPE attr) {..sw 3830: 69 74 63 68 20 28 61 74 74 72 29 20 7b 0a 09 09 itch (attr) {... 3840: 63 61 73 65 20 43 4b 41 5f 43 4c 41 53 53 3a 0a case CKA_CLASS:. 3850: 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 43 ...return("CKA_C 3860: 4c 41 53 53 22 29 3b 0a 09 09 63 61 73 65 20 43 LASS");...case C 3870: 4b 41 5f 54 4f 4b 45 4e 3a 0a 09 09 09 72 65 74 KA_TOKEN:....ret 3880: 75 72 6e 28 22 43 4b 41 5f 54 4f 4b 45 4e 22 29 urn("CKA_TOKEN") 3890: 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 50 52 49 ;...case CKA_PRI 38a0: 56 41 54 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 VATE:....return( 38b0: 22 43 4b 41 5f 50 52 49 56 41 54 45 22 29 3b 0a "CKA_PRIVATE");. 38c0: 09 09 63 61 73 65 20 43 4b 41 5f 4c 41 42 45 4c ..case CKA_LABEL 38d0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 :....return("CKA 38e0: 5f 4c 41 42 45 4c 22 29 3b 0a 09 09 63 61 73 65 _LABEL");...case 38f0: 20 43 4b 41 5f 41 50 50 4c 49 43 41 54 49 4f 4e CKA_APPLICATION 3900: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 :....return("CKA 3910: 5f 41 50 50 4c 49 43 41 54 49 4f 4e 22 29 3b 0a _APPLICATION");. 3920: 09 09 63 61 73 65 20 43 4b 41 5f 56 41 4c 55 45 ..case CKA_VALUE 3930: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 :....return("CKA 3940: 5f 56 41 4c 55 45 22 29 3b 0a 09 09 63 61 73 65 _VALUE");...case 3950: 20 43 4b 41 5f 4f 42 4a 45 43 54 5f 49 44 3a 0a CKA_OBJECT_ID:. 3960: 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 4f ...return("CKA_O 3970: 42 4a 45 43 54 5f 49 44 22 29 3b 0a 09 09 63 61 BJECT_ID");...ca 3980: 73 65 20 43 4b 41 5f 43 45 52 54 49 46 49 43 41 se CKA_CERTIFICA 3990: 54 45 5f 54 59 50 45 3a 0a 09 09 09 72 65 74 75 TE_TYPE:....retu 39a0: 72 6e 28 22 43 4b 41 5f 43 45 52 54 49 46 49 43 rn("CKA_CERTIFIC 39b0: 41 54 45 5f 54 59 50 45 22 29 3b 0a 09 09 63 61 ATE_TYPE");...ca 39c0: 73 65 20 43 4b 41 5f 49 53 53 55 45 52 3a 0a 09 se CKA_ISSUER:.. 39d0: 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 49 53 ..return("CKA_IS 39e0: 53 55 45 52 22 29 3b 0a 09 09 63 61 73 65 20 43 SUER");...case C 39f0: 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52 KA_SERIAL_NUMBER 3a00: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 :....return("CKA 3a10: 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52 22 29 _SERIAL_NUMBER") 3a20: 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 41 43 5f ;...case CKA_AC_ 3a30: 49 53 53 55 45 52 3a 0a 09 09 09 72 65 74 75 72 ISSUER:....retur 3a40: 6e 28 22 43 4b 41 5f 41 43 5f 49 53 53 55 45 52 n("CKA_AC_ISSUER 3a50: 22 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 4f ");...case CKA_O 3a60: 57 4e 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 WNER:....return( 3a70: 22 43 4b 41 5f 4f 57 4e 45 52 22 29 3b 0a 09 09 "CKA_OWNER");... 3a80: 63 61 73 65 20 43 4b 41 5f 41 54 54 52 5f 54 59 case CKA_ATTR_TY 3a90: 50 45 53 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 PES:....return(" 3aa0: 43 4b 41 5f 41 54 54 52 5f 54 59 50 45 53 22 29 CKA_ATTR_TYPES") 3ab0: 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 ;...case CKA_TRU 3ac0: 53 54 45 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 STED:....return( 3ad0: 22 43 4b 41 5f 54 52 55 53 54 45 44 22 29 3b 0a "CKA_TRUSTED");. 3ae0: 09 09 63 61 73 65 20 43 4b 41 5f 4b 45 59 5f 54 ..case CKA_KEY_T 3af0: 59 50 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 YPE:....return(" 3b00: 43 4b 41 5f 4b 45 59 5f 54 59 50 45 22 29 3b 0a CKA_KEY_TYPE");. 3b10: 09 09 63 61 73 65 20 43 4b 41 5f 53 55 42 4a 45 ..case CKA_SUBJE 3b20: 43 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 CT:....return("C 3b30: 4b 41 5f 53 55 42 4a 45 43 54 22 29 3b 0a 09 09 KA_SUBJECT");... 3b40: 63 61 73 65 20 43 4b 41 5f 49 44 3a 0a 09 09 09 case CKA_ID:.... 3b50: 72 65 74 75 72 6e 28 22 43 4b 41 5f 49 44 22 29 return("CKA_ID") 3b60: 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 53 45 4e ;...case CKA_SEN 3b70: 53 49 54 49 56 45 3a 0a 09 09 09 72 65 74 75 72 SITIVE:....retur 3b80: 6e 28 22 43 4b 41 5f 53 45 4e 53 49 54 49 56 45 n("CKA_SENSITIVE 3b90: 22 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 45 ");...case CKA_E 3ba0: 4e 43 52 59 50 54 3a 0a 09 09 09 72 65 74 75 72 NCRYPT:....retur 3bb0: 6e 28 22 43 4b 41 5f 45 4e 43 52 59 50 54 22 29 n("CKA_ENCRYPT") 3bc0: 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 44 45 43 ;...case CKA_DEC 3bd0: 52 59 50 54 3a 0a 09 09 09 72 65 74 75 72 6e 28 RYPT:....return( 3be0: 22 43 4b 41 5f 44 45 43 52 59 50 54 22 29 3b 0a "CKA_DECRYPT");. 3bf0: 09 09 63 61 73 65 20 43 4b 41 5f 57 52 41 50 3a ..case CKA_WRAP: 3c00: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f ....return("CKA_ 3c10: 57 52 41 50 22 29 3b 0a 09 09 63 61 73 65 20 43 WRAP");...case C 3c20: 4b 41 5f 55 4e 57 52 41 50 3a 0a 09 09 09 72 65 KA_UNWRAP:....re 3c30: 74 75 72 6e 28 22 43 4b 41 5f 55 4e 57 52 41 50 turn("CKA_UNWRAP 3c40: 22 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 53 ");...case CKA_S 3c50: 49 47 4e 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 IGN:....return(" 3c60: 43 4b 41 5f 53 49 47 4e 22 29 3b 0a 09 09 63 61 CKA_SIGN");...ca 3c70: 73 65 20 43 4b 41 5f 53 49 47 4e 5f 52 45 43 4f se CKA_SIGN_RECO 3c80: 56 45 52 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 VER:....return(" 3c90: 43 4b 41 5f 53 49 47 4e 5f 52 45 43 4f 56 45 52 CKA_SIGN_RECOVER 3ca0: 22 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 56 ");...case CKA_V 3cb0: 45 52 49 46 59 3a 0a 09 09 09 72 65 74 75 72 6e ERIFY:....return 3cc0: 28 22 43 4b 41 5f 56 45 52 49 46 59 22 29 3b 0a ("CKA_VERIFY");. 3cd0: 09 09 63 61 73 65 20 43 4b 41 5f 56 45 52 49 46 ..case CKA_VERIF 3ce0: 59 5f 52 45 43 4f 56 45 52 3a 0a 09 09 09 72 65 Y_RECOVER:....re 3cf0: 74 75 72 6e 28 22 43 4b 41 5f 56 45 52 49 46 59 turn("CKA_VERIFY 3d00: 5f 52 45 43 4f 56 45 52 22 29 3b 0a 09 09 63 61 _RECOVER");...ca 3d10: 73 65 20 43 4b 41 5f 44 45 52 49 56 45 3a 0a 09 se CKA_DERIVE:.. 3d20: 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 44 45 ..return("CKA_DE 3d30: 52 49 56 45 22 29 3b 0a 09 09 63 61 73 65 20 43 RIVE");...case C 3d40: 4b 41 5f 53 54 41 52 54 5f 44 41 54 45 3a 0a 09 KA_START_DATE:.. 3d50: 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 53 54 ..return("CKA_ST 3d60: 41 52 54 5f 44 41 54 45 22 29 3b 0a 09 09 63 61 ART_DATE");...ca 3d70: 73 65 20 43 4b 41 5f 45 4e 44 5f 44 41 54 45 3a se CKA_END_DATE: 3d80: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f ....return("CKA_ 3d90: 45 4e 44 5f 44 41 54 45 22 29 3b 0a 09 09 63 61 END_DATE");...ca 3da0: 73 65 20 43 4b 41 5f 4d 4f 44 55 4c 55 53 3a 0a se CKA_MODULUS:. 3db0: 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 4d ...return("CKA_M 3dc0: 4f 44 55 4c 55 53 22 29 3b 0a 09 09 63 61 73 65 ODULUS");...case 3dd0: 20 43 4b 41 5f 4d 4f 44 55 4c 55 53 5f 42 49 54 CKA_MODULUS_BIT 3de0: 53 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b S:....return("CK 3df0: 41 5f 4d 4f 44 55 4c 55 53 5f 42 49 54 53 22 29 A_MODULUS_BITS") 3e00: 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 50 55 42 ;...case CKA_PUB 3e10: 4c 49 43 5f 45 58 50 4f 4e 45 4e 54 3a 0a 09 09 LIC_EXPONENT:... 3e20: 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 50 55 42 .return("CKA_PUB 3e30: 4c 49 43 5f 45 58 50 4f 4e 45 4e 54 22 29 3b 0a LIC_EXPONENT");. 3e40: 09 09 63 61 73 65 20 43 4b 41 5f 50 52 49 56 41 ..case CKA_PRIVA 3e50: 54 45 5f 45 58 50 4f 4e 45 4e 54 3a 0a 09 09 09 TE_EXPONENT:.... 3e60: 72 65 74 75 72 6e 28 22 43 4b 41 5f 50 52 49 56 return("CKA_PRIV 3e70: 41 54 45 5f 45 58 50 4f 4e 45 4e 54 22 29 3b 0a ATE_EXPONENT");. 3e80: 09 09 63 61 73 65 20 43 4b 41 5f 50 52 49 4d 45 ..case CKA_PRIME 3e90: 5f 31 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 _1:....return("C 3ea0: 4b 41 5f 50 52 49 4d 45 5f 31 22 29 3b 0a 09 09 KA_PRIME_1");... 3eb0: 63 61 73 65 20 43 4b 41 5f 50 52 49 4d 45 5f 32 case CKA_PRIME_2 3ec0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 :....return("CKA 3ed0: 5f 50 52 49 4d 45 5f 32 22 29 3b 0a 09 09 63 61 _PRIME_2");...ca 3ee0: 73 65 20 43 4b 41 5f 45 58 50 4f 4e 45 4e 54 5f se CKA_EXPONENT_ 3ef0: 31 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 1:....return("CK 3f00: 41 5f 45 58 50 4f 4e 45 4e 54 5f 31 22 29 3b 0a A_EXPONENT_1");. 3f10: 09 09 63 61 73 65 20 43 4b 41 5f 45 58 50 4f 4e ..case CKA_EXPON 3f20: 45 4e 54 5f 32 3a 0a 09 09 09 72 65 74 75 72 6e ENT_2:....return 3f30: 28 22 43 4b 41 5f 45 58 50 4f 4e 45 4e 54 5f 32 ("CKA_EXPONENT_2 3f40: 22 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 43 ");...case CKA_C 3f50: 4f 45 46 46 49 43 49 45 4e 54 3a 0a 09 09 09 72 OEFFICIENT:....r 3f60: 65 74 75 72 6e 28 22 43 4b 41 5f 43 4f 45 46 46 eturn("CKA_COEFF 3f70: 49 43 49 45 4e 54 22 29 3b 0a 09 09 63 61 73 65 ICIENT");...case 3f80: 20 43 4b 41 5f 50 52 49 4d 45 3a 0a 09 09 09 72 CKA_PRIME:....r 3f90: 65 74 75 72 6e 28 22 43 4b 41 5f 50 52 49 4d 45 eturn("CKA_PRIME 3fa0: 22 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 53 ");...case CKA_S 3fb0: 55 42 50 52 49 4d 45 3a 0a 09 09 09 72 65 74 75 UBPRIME:....retu 3fc0: 72 6e 28 22 43 4b 41 5f 53 55 42 50 52 49 4d 45 rn("CKA_SUBPRIME 3fd0: 22 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 42 ");...case CKA_B 3fe0: 41 53 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 ASE:....return(" 3ff0: 43 4b 41 5f 42 41 53 45 22 29 3b 0a 09 09 63 61 CKA_BASE");...ca 4000: 73 65 20 43 4b 41 5f 50 52 49 4d 45 5f 42 49 54 se CKA_PRIME_BIT 4010: 53 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b S:....return("CK 4020: 41 5f 50 52 49 4d 45 5f 42 49 54 53 22 29 3b 0a A_PRIME_BITS");. 4030: 09 09 63 61 73 65 20 43 4b 41 5f 53 55 42 5f 50 ..case CKA_SUB_P 4040: 52 49 4d 45 5f 42 49 54 53 3a 0a 09 09 09 72 65 RIME_BITS:....re 4050: 74 75 72 6e 28 22 43 4b 41 5f 53 55 42 5f 50 52 turn("CKA_SUB_PR 4060: 49 4d 45 5f 42 49 54 53 22 29 3b 0a 09 09 63 61 IME_BITS");...ca 4070: 73 65 20 43 4b 41 5f 56 41 4c 55 45 5f 42 49 54 se CKA_VALUE_BIT 4080: 53 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b S:....return("CK 4090: 41 5f 56 41 4c 55 45 5f 42 49 54 53 22 29 3b 0a A_VALUE_BITS");. 40a0: 09 09 63 61 73 65 20 43 4b 41 5f 56 41 4c 55 45 ..case CKA_VALUE 40b0: 5f 4c 45 4e 3a 0a 09 09 09 72 65 74 75 72 6e 28 _LEN:....return( 40c0: 22 43 4b 41 5f 56 41 4c 55 45 5f 4c 45 4e 22 29 "CKA_VALUE_LEN") 40d0: 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 45 58 54 ;...case CKA_EXT 40e0: 52 41 43 54 41 42 4c 45 3a 0a 09 09 09 72 65 74 RACTABLE:....ret 40f0: 75 72 6e 28 22 43 4b 41 5f 45 58 54 52 41 43 54 urn("CKA_EXTRACT 4100: 41 42 4c 45 22 29 3b 0a 09 09 63 61 73 65 20 43 ABLE");...case C 4110: 4b 41 5f 4c 4f 43 41 4c 3a 0a 09 09 09 72 65 74 KA_LOCAL:....ret 4120: 75 72 6e 28 22 43 4b 41 5f 4c 4f 43 41 4c 22 29 urn("CKA_LOCAL") 4130: 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 4e 45 56 ;...case CKA_NEV 4140: 45 52 5f 45 58 54 52 41 43 54 41 42 4c 45 3a 0a ER_EXTRACTABLE:. 4150: 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 4e ...return("CKA_N 4160: 45 56 45 52 5f 45 58 54 52 41 43 54 41 42 4c 45 EVER_EXTRACTABLE 4170: 22 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 41 ");...case CKA_A 4180: 4c 57 41 59 53 5f 53 45 4e 53 49 54 49 56 45 3a LWAYS_SENSITIVE: 4190: 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f ....return("CKA_ 41a0: 41 4c 57 41 59 53 5f 53 45 4e 53 49 54 49 56 45 ALWAYS_SENSITIVE 41b0: 22 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 4b ");...case CKA_K 41c0: 45 59 5f 47 45 4e 5f 4d 45 43 48 41 4e 49 53 4d EY_GEN_MECHANISM 41d0: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 :....return("CKA 41e0: 5f 4b 45 59 5f 47 45 4e 5f 4d 45 43 48 41 4e 49 _KEY_GEN_MECHANI 41f0: 53 4d 22 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 SM");...case CKA 4200: 5f 4d 4f 44 49 46 49 41 42 4c 45 3a 0a 09 09 09 _MODIFIABLE:.... 4210: 72 65 74 75 72 6e 28 22 43 4b 41 5f 4d 4f 44 49 return("CKA_MODI 4220: 46 49 41 42 4c 45 22 29 3b 0a 09 09 63 61 73 65 FIABLE");...case 4230: 20 43 4b 41 5f 45 43 44 53 41 5f 50 41 52 41 4d CKA_ECDSA_PARAM 4240: 53 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b S:....return("CK 4250: 41 5f 45 43 44 53 41 5f 50 41 52 41 4d 53 22 29 A_ECDSA_PARAMS") 4260: 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 45 43 5f ;...case CKA_EC_ 4270: 50 4f 49 4e 54 3a 0a 09 09 09 72 65 74 75 72 6e POINT:....return 4280: 28 22 43 4b 41 5f 45 43 5f 50 4f 49 4e 54 22 29 ("CKA_EC_POINT") 4290: 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 53 45 43 ;...case CKA_SEC 42a0: 4f 4e 44 41 52 59 5f 41 55 54 48 3a 0a 09 09 09 ONDARY_AUTH:.... 42b0: 72 65 74 75 72 6e 28 22 43 4b 41 5f 53 45 43 4f return("CKA_SECO 42c0: 4e 44 41 52 59 5f 41 55 54 48 22 29 3b 0a 09 09 NDARY_AUTH");... 42d0: 63 61 73 65 20 43 4b 41 5f 41 55 54 48 5f 50 49 case CKA_AUTH_PI 42e0: 4e 5f 46 4c 41 47 53 3a 0a 09 09 09 72 65 74 75 N_FLAGS:....retu 42f0: 72 6e 28 22 43 4b 41 5f 41 55 54 48 5f 50 49 4e rn("CKA_AUTH_PIN 4300: 5f 46 4c 41 47 53 22 29 3b 0a 09 09 63 61 73 65 _FLAGS");...case 4310: 20 43 4b 41 5f 48 57 5f 46 45 41 54 55 52 45 5f CKA_HW_FEATURE_ 4320: 54 59 50 45 3a 0a 09 09 09 72 65 74 75 72 6e 28 TYPE:....return( 4330: 22 43 4b 41 5f 48 57 5f 46 45 41 54 55 52 45 5f "CKA_HW_FEATURE_ 4340: 54 59 50 45 22 29 3b 0a 09 09 63 61 73 65 20 43 TYPE");...case C 4350: 4b 41 5f 52 45 53 45 54 5f 4f 4e 5f 49 4e 49 54 KA_RESET_ON_INIT 4360: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 43 4b 41 :....return("CKA 4370: 5f 52 45 53 45 54 5f 4f 4e 5f 49 4e 49 54 22 29 _RESET_ON_INIT") 4380: 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 48 41 53 ;...case CKA_HAS 4390: 5f 52 45 53 45 54 3a 0a 09 09 09 72 65 74 75 72 _RESET:....retur 43a0: 6e 28 22 43 4b 41 5f 48 41 53 5f 52 45 53 45 54 n("CKA_HAS_RESET 43b0: 22 29 3b 0a 09 09 63 61 73 65 20 43 4b 41 5f 56 ");...case CKA_V 43c0: 45 4e 44 4f 52 5f 44 45 46 49 4e 45 44 3a 0a 09 ENDOR_DEFINED:.. 43d0: 09 09 72 65 74 75 72 6e 28 22 43 4b 41 5f 56 45 ..return("CKA_VE 43e0: 4e 44 4f 52 5f 44 45 46 49 4e 45 44 22 29 3b 0a NDOR_DEFINED");. 43f0: 09 7d 0a 0a 09 72 65 74 75 72 6e 28 22 55 4e 4b .}...return("UNK 4400: 4e 4f 57 4e 22 29 3b 0a 7d 0a 0a 23 20 20 64 65 NOWN");.}..# de 4410: 66 69 6e 65 20 6d 61 6c 6c 6f 63 28 78 29 20 43 fine malloc(x) C 4420: 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC 4430: 5f 4d 41 4c 4c 4f 43 28 78 2c 20 5f 5f 66 75 6e _MALLOC(x, __fun 4440: 63 5f 5f 2c 20 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 c__, __LINE__).# 4450: 20 20 64 65 66 69 6e 65 20 72 65 61 6c 6c 6f 63 define realloc 4460: 28 78 2c 20 79 29 20 43 41 43 4b 45 59 5f 44 45 (x, y) CACKEY_DE 4470: 42 55 47 5f 46 55 4e 43 5f 52 45 41 4c 4c 4f 43 BUG_FUNC_REALLOC 4480: 28 78 2c 20 79 2c 20 5f 5f 66 75 6e 63 5f 5f 2c (x, y, __func__, 4490: 20 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 20 69 66 __LINE__).# if 44a0: 64 65 66 20 73 74 72 64 75 70 0a 23 20 20 20 20 def strdup.# 44b0: 75 6e 64 65 66 20 73 74 72 64 75 70 0a 23 20 20 undef strdup.# 44c0: 65 6e 64 69 66 0a 23 20 20 64 65 66 69 6e 65 20 endif.# define 44d0: 73 74 72 64 75 70 28 78 29 20 43 41 43 4b 45 59 strdup(x) CACKEY 44e0: 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 54 52 44 _DEBUG_FUNC_STRD 44f0: 55 50 28 78 2c 20 5f 5f 66 75 6e 63 5f 5f 2c 20 UP(x, __func__, 4500: 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6c 73 65 0a __LINE__).#else. 4510: 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 # define CACKEY 4520: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 78 2e _DEBUG_PRINTF(x. 4530: 2e 2e 29 20 2f 2a 2a 2f 0a 23 20 20 64 65 66 69 ..) /**/.# defi 4540: 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ne CACKEY_DEBUG_ 4550: 50 52 49 4e 54 42 55 46 28 66 2c 20 78 2c 20 79 PRINTBUF(f, x, y 4560: 29 20 2f 2a 2a 2f 0a 23 20 20 64 65 66 69 6e 65 ) /**/.# define 4570: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 45 CACKEY_DEBUG_PE 4580: 52 52 4f 52 28 78 29 20 2f 2a 2a 2f 0a 23 20 20 RROR(x) /**/.# 4590: 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 define CACKEY_DE 45a0: 42 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54 4f 5f BUG_FUNC_TAG_TO_ 45b0: 53 54 52 28 78 29 20 22 44 45 42 55 47 5f 44 49 STR(x) "DEBUG_DI 45c0: 53 41 42 4c 45 44 22 0a 23 20 20 64 65 66 69 6e SABLED".# defin 45d0: 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 e CACKEY_DEBUG_F 45e0: 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f UNC_SCARDERR_TO_ 45f0: 53 54 52 28 78 29 20 22 44 45 42 55 47 5f 44 49 STR(x) "DEBUG_DI 4600: 53 41 42 4c 45 44 22 0a 23 20 20 64 65 66 69 6e SABLED".# defin 4610: 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 e CACKEY_DEBUG_F 4620: 55 4e 43 5f 4f 42 4a 49 44 5f 54 4f 5f 53 54 52 UNC_OBJID_TO_STR 4630: 28 78 29 20 22 44 45 42 55 47 5f 44 49 53 41 42 (x) "DEBUG_DISAB 4640: 4c 45 44 22 0a 23 20 20 64 65 66 69 6e 65 20 43 LED".# define C 4650: 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC 4660: 5f 41 50 50 54 59 50 45 5f 54 4f 5f 53 54 52 28 _APPTYPE_TO_STR( 4670: 78 29 20 22 44 45 42 55 47 5f 44 49 53 41 42 4c x) "DEBUG_DISABL 4680: 45 44 22 0a 23 20 20 64 65 66 69 6e 65 20 43 41 ED".# define CA 4690: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 46a0: 41 54 54 52 49 42 55 54 45 5f 54 4f 5f 53 54 52 ATTRIBUTE_TO_STR 46b0: 28 78 29 20 22 44 45 42 55 47 5f 44 49 53 41 42 (x) "DEBUG_DISAB 46c0: 4c 45 44 22 0a 23 65 6e 64 69 66 0a 0a 73 74 72 LED".#endif..str 46d0: 75 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f uct cackey_pcsc_ 46e0: 69 64 65 6e 74 69 74 79 20 7b 0a 09 75 6e 73 69 identity {..unsi 46f0: 67 6e 65 64 20 63 68 61 72 20 61 70 70 6c 65 74 gned char applet 4700: 5b 37 5d 3b 0a 09 75 69 6e 74 31 36 5f 74 20 66 [7];..uint16_t f 4710: 69 6c 65 3b 0a 0a 09 73 69 7a 65 5f 74 20 63 65 ile;...size_t ce 4720: 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 3b 0a 09 rtificate_len;.. 4730: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 63 unsigned char *c 4740: 65 72 74 69 66 69 63 61 74 65 3b 0a 0a 09 73 73 ertificate;...ss 4750: 69 7a 65 5f 74 20 6b 65 79 73 69 7a 65 3b 0a 7d ize_t keysize;.} 4760: 3b 0a 0a 73 74 72 75 63 74 20 63 61 63 6b 65 79 ;..struct cackey 4770: 5f 69 64 65 6e 74 69 74 79 20 7b 0a 09 73 74 72 _identity {..str 4780: 75 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f uct cackey_pcsc_ 4790: 69 64 65 6e 74 69 74 79 20 2a 70 63 73 63 5f 69 identity *pcsc_i 47a0: 64 65 6e 74 69 74 79 3b 0a 0a 09 43 4b 5f 41 54 dentity;...CK_AT 47b0: 54 52 49 42 55 54 45 20 2a 61 74 74 72 69 62 75 TRIBUTE *attribu 47c0: 74 65 73 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 61 tes;..CK_ULONG a 47d0: 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 3b ttributes_count; 47e0: 0a 7d 3b 0a 0a 73 74 72 75 63 74 20 63 61 63 6b .};..struct cack 47f0: 65 79 5f 73 65 73 73 69 6f 6e 20 7b 0a 09 69 6e ey_session {..in 4800: 74 20 61 63 74 69 76 65 3b 0a 0a 09 43 4b 5f 53 t active;...CK_S 4810: 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 3b 0a 0a LOT_ID slotID;.. 4820: 09 43 4b 5f 53 54 41 54 45 20 73 74 61 74 65 3b .CK_STATE state; 4830: 0a 09 43 4b 5f 46 4c 41 47 53 20 66 6c 61 67 73 ..CK_FLAGS flags 4840: 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 65 ;..CK_ULONG ulDe 4850: 76 69 63 65 45 72 72 6f 72 3b 0a 09 43 4b 5f 56 viceError;..CK_V 4860: 4f 49 44 5f 50 54 52 20 70 41 70 70 6c 69 63 61 OID_PTR pApplica 4870: 74 69 6f 6e 3b 0a 09 43 4b 5f 4e 4f 54 49 46 59 tion;..CK_NOTIFY 4880: 20 4e 6f 74 69 66 79 3b 0a 0a 09 73 74 72 75 63 Notify;...struc 4890: 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 t cackey_identit 48a0: 79 20 2a 69 64 65 6e 74 69 74 69 65 73 3b 0a 09 y *identities;.. 48b0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 unsigned long id 48c0: 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 3b 0a entities_count;. 48d0: 0a 09 69 6e 74 20 73 65 61 72 63 68 5f 61 63 74 ..int search_act 48e0: 69 76 65 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55 ive;..CK_ATTRIBU 48f0: 54 45 5f 50 54 52 20 73 65 61 72 63 68 5f 71 75 TE_PTR search_qu 4900: 65 72 79 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 73 ery;..CK_ULONG s 4910: 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e earch_query_coun 4920: 74 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e t;..unsigned lon 4930: 67 20 73 65 61 72 63 68 5f 63 75 72 72 5f 69 64 g search_curr_id 4940: 3b 0a 0a 09 69 6e 74 20 73 69 67 6e 5f 61 63 74 ;...int sign_act 4950: 69 76 65 3b 0a 09 43 4b 5f 4d 45 43 48 41 4e 49 ive;..CK_MECHANI 4960: 53 4d 5f 54 59 50 45 20 73 69 67 6e 5f 6d 65 63 SM_TYPE sign_mec 4970: 68 61 6e 69 73 6d 3b 0a 09 43 4b 5f 42 59 54 45 hanism;..CK_BYTE 4980: 5f 50 54 52 20 73 69 67 6e 5f 62 75 66 3b 0a 09 _PTR sign_buf;.. 4990: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 73 69 unsigned long si 49a0: 67 6e 5f 62 75 66 6c 65 6e 3b 0a 09 75 6e 73 69 gn_buflen;..unsi 49b0: 67 6e 65 64 20 6c 6f 6e 67 20 73 69 67 6e 5f 62 gned long sign_b 49c0: 75 66 75 73 65 64 3b 0a 09 73 74 72 75 63 74 20 ufused;..struct 49d0: 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 cackey_identity 49e0: 2a 73 69 67 6e 5f 69 64 65 6e 74 69 74 79 3b 0a *sign_identity;. 49f0: 0a 09 69 6e 74 20 64 65 63 72 79 70 74 5f 61 63 ..int decrypt_ac 4a00: 74 69 76 65 3b 0a 09 43 4b 5f 4d 45 43 48 41 4e tive;..CK_MECHAN 4a10: 49 53 4d 5f 54 59 50 45 20 64 65 63 72 79 70 74 ISM_TYPE decrypt 4a20: 5f 6d 65 63 68 61 6e 69 73 6d 3b 0a 09 43 4b 5f _mechanism;..CK_ 4a30: 56 4f 49 44 5f 50 54 52 20 64 65 63 72 79 70 74 VOID_PTR decrypt 4a40: 5f 6d 65 63 68 5f 70 61 72 6d 3b 0a 09 43 4b 5f _mech_parm;..CK_ 4a50: 55 4c 4f 4e 47 20 64 65 63 72 79 70 74 5f 6d 65 ULONG decrypt_me 4a60: 63 68 5f 70 61 72 6d 6c 65 6e 3b 0a 09 73 74 72 ch_parmlen;..str 4a70: 75 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 uct cackey_ident 4a80: 69 74 79 20 2a 64 65 63 72 79 70 74 5f 69 64 65 ity *decrypt_ide 4a90: 6e 74 69 74 79 3b 0a 7d 3b 0a 0a 73 74 72 75 63 ntity;.};..struc 4aa0: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 7b 0a t cackey_slot {. 4ab0: 09 69 6e 74 20 61 63 74 69 76 65 3b 0a 0a 09 63 .int active;...c 4ac0: 68 61 72 20 2a 70 63 73 63 5f 72 65 61 64 65 72 har *pcsc_reader 4ad0: 3b 0a 0a 09 69 6e 74 20 70 63 73 63 5f 63 61 72 ;...int pcsc_car 4ae0: 64 5f 63 6f 6e 6e 65 63 74 65 64 3b 0a 09 53 43 d_connected;..SC 4af0: 41 52 44 48 41 4e 44 4c 45 20 70 63 73 63 5f 63 ARDHANDLE pcsc_c 4b00: 61 72 64 3b 0a 0a 09 69 6e 74 20 74 72 61 6e 73 ard;...int trans 4b10: 61 63 74 69 6f 6e 5f 64 65 70 74 68 3b 0a 09 69 action_depth;..i 4b20: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 5f 6e nt transaction_n 4b30: 65 65 64 5f 68 77 5f 6c 6f 63 6b 3b 0a 0a 09 69 eed_hw_lock;...i 4b40: 6e 74 20 73 6c 6f 74 5f 72 65 73 65 74 3b 0a 0a nt slot_reset;.. 4b50: 09 43 4b 5f 46 4c 41 47 53 20 74 6f 6b 65 6e 5f .CK_FLAGS token_ 4b60: 66 6c 61 67 73 3b 0a 0a 09 75 6e 73 69 67 6e 65 flags;...unsigne 4b70: 64 20 63 68 61 72 20 2a 6c 61 62 65 6c 3b 0a 0a d char *label;.. 4b80: 09 44 57 4f 52 44 20 70 72 6f 74 6f 63 6f 6c 3b .DWORD protocol; 4b90: 0a 7d 3b 0a 0a 74 79 70 65 64 65 66 20 65 6e 75 .};..typedef enu 4ba0: 6d 20 7b 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f m {..CACKEY_TLV_ 4bb0: 41 50 50 5f 47 45 4e 45 52 49 43 20 3d 20 30 78 APP_GENERIC = 0x 4bc0: 30 31 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 01,..CACKEY_TLV_ 4bd0: 41 50 50 5f 53 4b 49 20 20 20 20 20 3d 20 30 78 APP_SKI = 0x 4be0: 30 32 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 02,..CACKEY_TLV_ 4bf0: 41 50 50 5f 50 4b 49 20 20 20 20 20 3d 20 30 78 APP_PKI = 0x 4c00: 30 34 0a 7d 20 63 61 63 6b 65 79 5f 74 6c 76 5f 04.} cackey_tlv_ 4c10: 61 70 70 74 79 70 65 3b 0a 0a 74 79 70 65 64 65 apptype;..typede 4c20: 66 20 65 6e 75 6d 20 7b 0a 09 43 41 43 4b 45 59 f enum {..CACKEY 4c30: 5f 54 4c 56 5f 4f 42 4a 49 44 5f 47 45 4e 45 52 _TLV_OBJID_GENER 4c40: 41 4c 49 4e 46 4f 20 20 20 20 20 20 20 3d 20 30 ALINFO = 0 4c50: 78 32 30 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 x2000,..CACKEY_T 4c60: 4c 56 5f 4f 42 4a 49 44 5f 50 52 4f 50 45 52 53 LV_OBJID_PROPERS 4c70: 4f 4e 41 4c 49 4e 46 4f 20 20 20 3d 20 30 78 32 ONALINFO = 0x2 4c80: 31 30 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 100,..CACKEY_TLV 4c90: 5f 4f 42 4a 49 44 5f 41 43 43 45 53 53 43 4f 4e _OBJID_ACCESSCON 4ca0: 54 52 4f 4c 20 20 20 20 20 3d 20 30 78 33 30 30 TROL = 0x300 4cb0: 30 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 0,..CACKEY_TLV_O 4cc0: 42 4a 49 44 5f 4c 4f 47 49 4e 20 20 20 20 20 20 BJID_LOGIN 4cd0: 20 20 20 20 20 20 20 3d 20 30 78 34 30 30 30 2c = 0x4000, 4ce0: 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a ..CACKEY_TLV_OBJ 4cf0: 49 44 5f 43 41 52 44 49 4e 46 4f 20 20 20 20 20 ID_CARDINFO 4d00: 20 20 20 20 20 3d 20 30 78 35 30 30 30 2c 0a 09 = 0x5000,.. 4d10: 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 CACKEY_TLV_OBJID 4d20: 5f 42 49 4f 4d 45 54 52 49 43 53 20 20 20 20 20 _BIOMETRICS 4d30: 20 20 20 3d 20 30 78 36 30 30 30 2c 0a 09 43 41 = 0x6000,..CA 4d40: 43 4b 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 44 CKEY_TLV_OBJID_D 4d50: 49 47 49 54 41 4c 53 49 47 43 45 52 54 20 20 20 IGITALSIGCERT 4d60: 20 3d 20 30 78 37 30 30 30 2c 0a 09 43 41 43 4b = 0x7000,..CACK 4d70: 45 59 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 EY_TLV_OBJID_CAC 4d80: 5f 50 45 52 53 4f 4e 20 20 20 20 20 20 20 20 3d _PERSON = 4d90: 20 30 78 30 32 30 30 2c 0a 09 43 41 43 4b 45 59 0x0200,..CACKEY 4da0: 5f 54 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 42 _TLV_OBJID_CAC_B 4db0: 45 4e 45 46 49 54 53 20 20 20 20 20 20 3d 20 30 ENEFITS = 0 4dc0: 78 30 32 30 32 2c 0a 09 43 41 43 4b 45 59 5f 54 x0202,..CACKEY_T 4dd0: 4c 56 5f 4f 42 4a 49 44 5f 43 41 43 5f 4f 54 48 LV_OBJID_CAC_OTH 4de0: 45 52 42 45 4e 45 46 49 54 53 20 3d 20 30 78 30 ERBENEFITS = 0x0 4df0: 32 30 33 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 203,..CACKEY_TLV 4e00: 5f 4f 42 4a 49 44 5f 43 41 43 5f 50 45 52 53 4f _OBJID_CAC_PERSO 4e10: 4e 4e 45 4c 20 20 20 20 20 3d 20 30 78 30 32 30 NNEL = 0x020 4e20: 31 2c 0a 09 43 41 43 4b 45 59 5f 54 4c 56 5f 4f 1,..CACKEY_TLV_O 4e30: 42 4a 49 44 5f 43 41 43 5f 50 4b 49 43 45 52 54 BJID_CAC_PKICERT 4e40: 20 20 20 20 20 20 20 3d 20 30 78 30 32 46 45 0a = 0x02FE. 4e50: 7d 20 63 61 63 6b 65 79 5f 74 6c 76 5f 6f 62 6a } cackey_tlv_obj 4e60: 65 63 74 69 64 3b 0a 0a 74 79 70 65 64 65 66 20 ectid;..typedef 4e70: 65 6e 75 6d 20 7b 0a 09 43 41 43 4b 45 59 5f 50 enum {..CACKEY_P 4e80: 43 53 43 5f 53 5f 54 4f 4b 45 4e 50 52 45 53 45 CSC_S_TOKENPRESE 4e90: 4e 54 20 20 20 20 3d 20 31 2c 0a 09 43 41 43 4b NT = 1,..CACK 4ea0: 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 20 20 EY_PCSC_S_OK 4eb0: 20 20 20 20 20 20 20 20 20 20 3d 20 30 2c 0a 09 = 0,.. 4ec0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 CACKEY_PCSC_E_GE 4ed0: 4e 45 52 49 43 20 20 20 20 20 20 20 20 20 3d 20 NERIC = 4ee0: 2d 31 2c 0a 09 43 41 43 4b 45 59 5f 50 43 53 43 -1,..CACKEY_PCSC 4ef0: 5f 45 5f 42 41 44 50 49 4e 20 20 20 20 20 20 20 _E_BADPIN 4f00: 20 20 20 3d 20 2d 32 2c 0a 09 43 41 43 4b 45 59 = -2,..CACKEY 4f10: 5f 50 43 53 43 5f 45 5f 4c 4f 43 4b 45 44 20 20 _PCSC_E_LOCKED 4f20: 20 20 20 20 20 20 20 20 3d 20 2d 33 2c 0a 09 43 = -3,..C 4f30: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 4e 45 45 ACKEY_PCSC_E_NEE 4f40: 44 4c 4f 47 49 4e 20 20 20 20 20 20 20 3d 20 2d DLOGIN = - 4f50: 34 2c 0a 09 43 41 43 4b 45 59 5f 50 43 53 43 5f 4,..CACKEY_PCSC_ 4f60: 45 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 20 20 20 E_TOKENABSENT 4f70: 20 20 3d 20 2d 36 2c 0a 09 43 41 43 4b 45 59 5f = -6,..CACKEY_ 4f80: 50 43 53 43 5f 45 5f 52 45 54 52 59 20 20 20 20 PCSC_E_RETRY 4f90: 20 20 20 20 20 20 20 3d 20 2d 37 0a 7d 20 63 61 = -7.} ca 4fa0: 63 6b 65 79 5f 72 65 74 3b 0a 0a 73 74 72 75 63 ckey_ret;..struc 4fb0: 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 63 61 72 t cackey_tlv_car 4fc0: 64 75 72 6c 20 7b 0a 09 75 6e 73 69 67 6e 65 64 durl {..unsigned 4fd0: 20 63 68 61 72 20 20 20 20 20 20 20 20 72 69 64 char rid 4fe0: 5b 35 5d 3b 0a 09 63 61 63 6b 65 79 5f 74 6c 76 [5];..cackey_tlv 4ff0: 5f 61 70 70 74 79 70 65 20 20 20 61 70 70 74 79 _apptype appty 5000: 70 65 3b 0a 09 63 61 63 6b 65 79 5f 74 6c 76 5f pe;..cackey_tlv_ 5010: 6f 62 6a 65 63 74 69 64 20 20 6f 62 6a 65 63 74 objectid object 5020: 69 64 3b 0a 09 63 61 63 6b 65 79 5f 74 6c 76 5f id;..cackey_tlv_ 5030: 6f 62 6a 65 63 74 69 64 20 20 61 70 70 69 64 3b objectid appid; 5040: 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 ..unsigned char 5050: 20 20 20 20 20 20 20 70 69 6e 69 64 3b 0a 7d 3b pinid;.}; 5060: 0a 0a 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f ..struct cackey_ 5070: 74 6c 76 5f 65 6e 74 69 74 79 3b 0a 73 74 72 75 tlv_entity;.stru 5080: 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e ct cackey_tlv_en 5090: 74 69 74 79 20 7b 0a 09 75 69 6e 74 38 5f 74 20 tity {..uint8_t 50a0: 74 61 67 3b 0a 09 73 69 7a 65 5f 74 20 6c 65 6e tag;..size_t len 50b0: 67 74 68 3b 0a 0a 09 75 6e 69 6f 6e 20 7b 0a 09 gth;...union {.. 50c0: 09 76 6f 69 64 20 2a 76 61 6c 75 65 3b 0a 09 09 .void *value;... 50d0: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c struct cackey_tl 50e0: 76 5f 63 61 72 64 75 72 6c 20 2a 76 61 6c 75 65 v_cardurl *value 50f0: 5f 63 61 72 64 75 72 6c 3b 0a 09 09 75 69 6e 74 _cardurl;...uint 5100: 38 5f 74 20 76 61 6c 75 65 5f 62 79 74 65 3b 0a 8_t value_byte;. 5110: 09 7d 3b 0a 0a 09 73 74 72 75 63 74 20 63 61 63 .};...struct cac 5120: 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a key_tlv_entity * 5130: 5f 6e 65 78 74 3b 0a 7d 3b 0a 0a 2f 2a 20 43 41 _next;.};../* CA 5140: 43 4b 45 59 20 47 6c 6f 62 61 6c 20 48 61 6e 64 CKEY Global Hand 5150: 6c 65 73 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f les */.static vo 5160: 69 64 20 2a 63 61 63 6b 65 79 5f 62 69 67 6c 6f id *cackey_biglo 5170: 63 6b 20 3d 20 4e 55 4c 4c 3b 0a 73 74 61 74 69 ck = NULL;.stati 5180: 63 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f c struct cackey_ 5190: 73 65 73 73 69 6f 6e 20 63 61 63 6b 65 79 5f 73 session cackey_s 51a0: 65 73 73 69 6f 6e 73 5b 31 32 38 5d 3b 0a 73 74 essions[128];.st 51b0: 61 74 69 63 20 73 74 72 75 63 74 20 63 61 63 6b atic struct cack 51c0: 65 79 5f 73 6c 6f 74 20 63 61 63 6b 65 79 5f 73 ey_slot cackey_s 51d0: 6c 6f 74 73 5b 31 32 38 5d 3b 0a 73 74 61 74 69 lots[128];.stati 51e0: 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 69 6e 69 c int cackey_ini 51f0: 74 69 61 6c 69 7a 65 64 20 3d 20 30 3b 0a 73 74 tialized = 0;.st 5200: 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f atic int cackey_ 5210: 62 69 67 6c 6f 63 6b 5f 69 6e 69 74 20 3d 20 30 biglock_init = 0 5220: 3b 0a 43 4b 5f 43 5f 49 4e 49 54 49 41 4c 49 5a ;.CK_C_INITIALIZ 5230: 45 5f 41 52 47 53 20 63 61 63 6b 65 79 5f 61 72 E_ARGS cackey_ar 5240: 67 73 3b 0a 0a 2f 2a 2a 20 45 78 74 72 61 20 63 gs;../** Extra c 5250: 65 72 74 69 66 69 63 61 74 65 73 20 74 6f 20 69 ertificates to i 5260: 6e 63 6c 75 64 65 20 69 6e 20 74 6f 6b 65 6e 20 nclude in token 5270: 2a 2a 2f 0a 73 74 72 75 63 74 20 63 61 63 6b 65 **/.struct cacke 5280: 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 y_pcsc_identity 5290: 65 78 74 72 61 5f 63 65 72 74 73 5b 5d 20 3d 20 extra_certs[] = 52a0: 7b 0a 23 69 6e 63 6c 75 64 65 20 22 63 61 63 6b {.#include "cack 52b0: 65 79 5f 62 75 69 6c 74 69 6e 5f 63 65 72 74 73 ey_builtin_certs 52c0: 2e 68 22 0a 7d 3b 0a 0a 2f 2a 20 50 43 53 43 20 .h".};../* PCSC 52d0: 47 6c 6f 62 61 6c 20 48 61 6e 64 6c 65 73 20 2a Global Handles * 52e0: 2f 0a 73 74 61 74 69 63 20 4c 50 53 43 41 52 44 /.static LPSCARD 52f0: 43 4f 4e 54 45 58 54 20 63 61 63 6b 65 79 5f 70 CONTEXT cackey_p 5300: 63 73 63 5f 68 61 6e 64 6c 65 20 3d 20 4e 55 4c csc_handle = NUL 5310: 4c 3b 0a 0a 73 74 61 74 69 63 20 75 6e 73 69 67 L;..static unsig 5320: 6e 65 64 20 6c 6f 6e 67 20 63 61 63 6b 65 79 5f ned long cackey_ 5330: 67 65 74 76 65 72 73 69 6f 6e 28 76 6f 69 64 29 getversion(void) 5340: 20 7b 0a 09 73 74 61 74 69 63 20 75 6e 73 69 67 {..static unsig 5350: 6e 65 64 20 6c 6f 6e 67 20 72 65 74 76 61 6c 20 ned long retval 5360: 3d 20 32 35 35 3b 0a 09 75 6e 73 69 67 6e 65 64 = 255;..unsigned 5370: 20 6c 6f 6e 67 20 6d 61 6a 6f 72 20 3d 20 30 3b long major = 0; 5380: 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 ..unsigned long 5390: 6d 69 6e 6f 72 20 3d 20 30 3b 0a 09 63 68 61 72 minor = 0;..char 53a0: 20 2a 6d 61 6a 6f 72 5f 73 74 72 20 3d 20 4e 55 *major_str = NU 53b0: 4c 4c 3b 0a 09 63 68 61 72 20 2a 6d 69 6e 6f 72 LL;..char *minor 53c0: 5f 73 74 72 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 43 _str = NULL;...C 53d0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 53e0: 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 53f0: 09 69 66 20 28 72 65 74 76 61 6c 20 21 3d 20 32 .if (retval != 2 5400: 35 35 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 55) {...CACKEY_D 5410: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 5420: 75 72 6e 69 6e 67 20 30 78 25 6c 78 20 28 63 61 urning 0x%lx (ca 5430: 63 68 65 64 29 2e 22 2c 20 72 65 74 76 61 6c 29 ched).", retval) 5440: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 72 65 74 76 ;....return(retv 5450: 61 6c 29 3b 0a 09 7d 0a 0a 09 72 65 74 76 61 6c al);..}...retval 5460: 20 3d 20 30 3b 0a 0a 23 69 66 64 65 66 20 50 41 = 0;..#ifdef PA 5470: 43 4b 41 47 45 5f 56 45 52 53 49 4f 4e 0a 20 20 CKAGE_VERSION. 5480: 20 20 20 20 20 20 6d 61 6a 6f 72 5f 73 74 72 20 major_str 5490: 3d 20 50 41 43 4b 41 47 45 5f 56 45 52 53 49 4f = PACKAGE_VERSIO 54a0: 4e 3b 0a 09 69 66 20 28 6d 61 6a 6f 72 5f 73 74 N;..if (major_st 54b0: 72 29 20 7b 0a 09 20 20 20 20 20 20 20 20 6d 61 r) {.. ma 54c0: 6a 6f 72 20 3d 20 73 74 72 74 6f 75 6c 28 6d 61 jor = strtoul(ma 54d0: 6a 6f 72 5f 73 74 72 2c 20 26 6d 69 6e 6f 72 5f jor_str, &minor_ 54e0: 73 74 72 2c 20 31 30 29 3b 0a 0a 09 09 69 66 20 str, 10);....if 54f0: 28 6d 69 6e 6f 72 5f 73 74 72 29 20 7b 0a 09 09 (minor_str) {... 5500: 09 6d 69 6e 6f 72 20 3d 20 73 74 72 74 6f 75 6c .minor = strtoul 5510: 28 6d 69 6e 6f 72 5f 73 74 72 20 2b 20 31 2c 20 (minor_str + 1, 5520: 4e 55 4c 4c 2c 20 31 30 29 3b 0a 09 09 7d 0a 09 NULL, 10);...}.. 5530: 7d 0a 0a 09 72 65 74 76 61 6c 20 3d 20 28 6d 61 }...retval = (ma 5540: 6a 6f 72 20 3c 3c 20 31 36 29 20 7c 20 28 6d 69 jor << 16) | (mi 5550: 6e 6f 72 20 3c 3c 20 38 29 3b 0a 23 65 6e 64 69 nor << 8);.#endi 5560: 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 f...CACKEY_DEBUG 5570: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 5580: 6e 67 20 30 78 25 6c 78 22 2c 20 72 65 74 76 61 ng 0x%lx", retva 5590: 6c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 l);...return(ret 55a0: 76 61 6c 29 3b 0a 7d 0a 0a 2f 2a 20 50 43 2f 53 val);.}../* PC/S 55b0: 43 20 52 65 6c 61 74 65 64 20 46 75 6e 63 74 69 C Related Functi 55c0: 6f 6e 73 20 2a 2f 0a 2f 2a 0a 20 2a 20 53 59 4e ons */./*. * SYN 55d0: 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 76 6f 69 POSIS. * voi 55e0: 64 20 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f 64 d cackey_slots_d 55f0: 69 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 76 6f isconnect_all(vo 5600: 69 64 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d id);. *. * ARGUM 5610: 45 4e 54 53 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 ENTS. * None 5620: 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 . *. * RETURN VA 5630: 4c 55 45 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a LUE. * None. 5640: 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 *. * NOTES. * 5650: 20 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e This function 5660: 20 64 69 73 63 6f 6e 6e 65 63 74 73 20 66 72 6f disconnects fro 5670: 6d 20 61 6c 6c 20 63 61 72 64 73 2e 0a 20 2a 0a m all cards.. *. 5680: 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 */.static void 5690: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 cackey_slots_dis 56a0: 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 76 6f 69 64 connect_all(void 56b0: 29 20 7b 0a 09 75 69 6e 74 33 32 5f 74 20 69 64 ) {..uint32_t id 56c0: 78 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 x;...CACKEY_DEBU 56d0: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 56e0: 2e 22 29 3b 0a 0a 09 66 6f 72 20 28 69 64 78 20 .");...for (idx 56f0: 3d 20 30 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 = 0; idx < (size 5700: 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 of(cackey_slots) 5710: 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 5720: 5f 73 6c 6f 74 73 5b 30 5d 29 29 3b 20 69 64 78 _slots[0])); idx 5730: 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63 61 63 6b ++) {...if (cack 5740: 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 ey_slots[idx].pc 5750: 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 sc_card_connecte 5760: 64 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 d) {....CACKEY_D 5770: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 43 61 EBUG_PRINTF("SCa 5780: 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 25 6c 75 rdDisconnect(%lu 5790: 29 20 63 61 6c 6c 65 64 22 2c 20 28 75 6e 73 69 ) called", (unsi 57a0: 67 6e 65 64 20 6c 6f 6e 67 29 20 69 64 78 29 3b gned long) idx); 57b0: 0a 0a 09 09 09 53 43 61 72 64 44 69 73 63 6f 6e .....SCardDiscon 57c0: 6e 65 63 74 28 63 61 63 6b 65 79 5f 73 6c 6f 74 nect(cackey_slot 57d0: 73 5b 69 64 78 5d 2e 70 63 73 63 5f 63 61 72 64 s[idx].pcsc_card 57e0: 2c 20 53 43 41 52 44 5f 4c 45 41 56 45 5f 43 41 , SCARD_LEAVE_CA 57f0: 52 44 29 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 RD);...}....if ( 5800: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx 5810: 5d 2e 6c 61 62 65 6c 29 20 7b 0a 09 09 09 66 72 ].label) {....fr 5820: 65 65 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ee(cackey_slots[ 5830: 69 64 78 5d 2e 6c 61 62 65 6c 29 3b 0a 0a 09 09 idx].label);.... 5840: 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 .cackey_slots[id 5850: 78 5d 2e 6c 61 62 65 6c 20 3d 20 4e 55 4c 4c 3b x].label = NULL; 5860: 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 ...}....cackey_s 5870: 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 63 lots[idx].pcsc_c 5880: 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 ard_connected = 5890: 30 3b 0a 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 0;...cackey_slot 58a0: 73 5b 69 64 78 5d 2e 74 72 61 6e 73 61 63 74 69 s[idx].transacti 58b0: 6f 6e 5f 64 65 70 74 68 20 3d 20 30 3b 0a 09 09 on_depth = 0;... 58c0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx 58d0: 5d 2e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 6e 65 ].transaction_ne 58e0: 65 64 5f 68 77 5f 6c 6f 63 6b 20 3d 20 30 3b 0a ed_hw_lock = 0;. 58f0: 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c ...if (cackey_sl 5900: 6f 74 73 5b 69 64 78 5d 2e 61 63 74 69 76 65 29 ots[idx].active) 5910: 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB 5920: 55 47 5f 50 52 49 4e 54 46 28 22 4d 61 72 6b 69 UG_PRINTF("Marki 5930: 6e 67 20 61 63 74 69 76 65 20 73 6c 6f 74 20 25 ng active slot % 5940: 6c 75 20 61 73 20 62 65 69 6e 67 20 72 65 73 65 lu as being rese 5950: 74 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f t", (unsigned lo 5960: 6e 67 29 20 69 64 78 29 3b 0a 09 09 7d 0a 0a 09 ng) idx);...}... 5970: 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 .cackey_slots[id 5980: 78 5d 2e 73 6c 6f 74 5f 72 65 73 65 74 20 3d 20 x].slot_reset = 5990: 31 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 1;..}...CACKEY_D 59a0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 59b0: 75 72 6e 69 6e 67 22 29 3b 0a 0a 09 72 65 74 75 urning");...retu 59c0: 72 6e 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e rn;.}../*. * SYN 59d0: 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 POSIS. * cac 59e0: 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 70 key_ret cackey_p 59f0: 63 73 63 5f 63 6f 6e 6e 65 63 74 28 76 6f 69 64 csc_connect(void 5a00: 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e );. *. * ARGUMEN 5a10: 54 53 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 TS. * None. 5a20: 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 *. * RETURN VALU 5a30: 45 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 5f E. * CACKEY_ 5a40: 50 43 53 43 5f 53 5f 4f 4b 20 20 20 20 20 20 20 PCSC_S_OK 5a50: 20 20 4f 6e 20 73 75 63 63 65 73 73 0a 20 2a 20 On success. * 5a60: 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f CACKEY_PCSC_ 5a70: 45 5f 47 45 4e 45 52 49 43 20 20 20 20 4f 6e 20 E_GENERIC On 5a80: 65 72 72 6f 72 0a 20 2a 0a 20 2a 20 4e 4f 54 45 error. *. * NOTE 5a90: 53 0a 20 2a 20 20 20 20 20 54 68 69 73 20 66 75 S. * This fu 5aa0: 6e 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 73 20 nction connects 5ab0: 74 6f 20 74 68 65 20 50 43 2f 53 43 20 43 6f 6e to the PC/SC Con 5ac0: 6e 65 63 74 69 6f 6e 20 4d 61 6e 61 67 65 72 20 nection Manager 5ad0: 61 6e 64 20 75 70 64 61 74 65 73 20 74 68 65 0a and updates the. 5ae0: 20 2a 20 20 20 20 20 67 6c 6f 62 61 6c 20 68 61 * global ha 5af0: 6e 64 6c 65 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 ndle.. *. */.sta 5b00: 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 63 tic cackey_ret c 5b10: 61 63 6b 65 79 5f 70 63 73 63 5f 63 6f 6e 6e 65 ackey_pcsc_conne 5b20: 63 74 28 76 6f 69 64 29 20 7b 0a 09 4c 4f 4e 47 ct(void) {..LONG 5b30: 20 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 scard_est_conte 5b40: 78 74 5f 72 65 74 3b 0a 23 69 66 64 65 66 20 48 xt_ret;.#ifdef H 5b50: 41 56 45 5f 53 43 41 52 44 49 53 56 41 4c 49 44 AVE_SCARDISVALID 5b60: 43 4f 4e 54 45 58 54 0a 09 4c 4f 4e 47 20 73 63 CONTEXT..LONG sc 5b70: 61 72 64 5f 69 73 76 61 6c 69 64 5f 72 65 74 3b ard_isvalid_ret; 5b80: 0a 23 65 6e 64 69 66 0a 0a 09 43 41 43 4b 45 59 .#endif...CACKEY 5b90: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 5ba0: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 5bb0: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 5bc0: 6c 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 le == NULL) {... 5bd0: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 5be0: 6c 65 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 le = malloc(size 5bf0: 6f 66 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 5f of(*cackey_pcsc_ 5c00: 68 61 6e 64 6c 65 29 29 3b 0a 09 09 69 66 20 28 handle));...if ( 5c10: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 5c20: 6c 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 le == NULL) {... 5c30: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 5c40: 49 4e 54 46 28 22 43 61 6c 6c 20 74 6f 20 6d 61 INTF("Call to ma 5c50: 6c 6c 6f 63 28 29 20 66 61 69 6c 65 64 2c 20 72 lloc() failed, r 5c60: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail 5c70: 75 72 65 22 29 3b 0a 0a 09 09 09 63 61 63 6b 65 ure");.....cacke 5c80: 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 y_slots_disconne 5c90: 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 09 72 65 ct_all();.....re 5ca0: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC 5cb0: 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 09 7d _E_GENERIC);...} 5cc0: 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 5cd0: 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 45 73 _PRINTF("SCardEs 5ce0: 74 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 28 29 tablishContext() 5cf0: 20 63 61 6c 6c 65 64 22 29 3b 0a 09 09 73 63 61 called");...sca 5d00: 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 rd_est_context_r 5d10: 65 74 20 3d 20 53 43 61 72 64 45 73 74 61 62 6c et = SCardEstabl 5d20: 69 73 68 43 6f 6e 74 65 78 74 28 53 43 41 52 44 ishContext(SCARD 5d30: 5f 53 43 4f 50 45 5f 53 59 53 54 45 4d 2c 20 4e _SCOPE_SYSTEM, N 5d40: 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 63 61 63 6b 65 ULL, NULL, cacke 5d50: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a y_pcsc_handle);. 5d60: 09 09 69 66 20 28 73 63 61 72 64 5f 65 73 74 5f ..if (scard_est_ 5d70: 63 6f 6e 74 65 78 74 5f 72 65 74 20 21 3d 20 53 context_ret != S 5d80: 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 CARD_S_SUCCESS) 5d90: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU 5da0: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 20 74 G_PRINTF("Call t 5db0: 6f 20 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 o SCardEstablish 5dc0: 43 6f 6e 74 65 78 74 20 66 61 69 6c 65 64 20 28 Context failed ( 5dd0: 72 65 74 75 72 6e 65 64 20 25 73 2f 25 6c 69 29 returned %s/%li) 5de0: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f 5df0: 61 69 6c 75 72 65 22 2c 20 43 41 43 4b 45 59 5f ailure", CACKEY_ 5e00: 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 DEBUG_FUNC_SCARD 5e10: 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 ERR_TO_STR(scard 5e20: 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 _est_context_ret 5e30: 29 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f ), (long) scard_ 5e40: 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 29 est_context_ret) 5e50: 3b 0a 0a 09 09 09 66 72 65 65 28 63 61 63 6b 65 ;.....free(cacke 5e60: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b 0a y_pcsc_handle);. 5e70: 09 09 09 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 ...cackey_pcsc_h 5e80: 61 6e 64 6c 65 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 andle = NULL;... 5e90: 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f 64 ..cackey_slots_d 5ea0: 69 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 29 3b isconnect_all(); 5eb0: 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b .....return(CACK 5ec0: 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 EY_PCSC_E_GENERI 5ed0: 43 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 23 69 66 64 C);...}..}..#ifd 5ee0: 65 66 20 48 41 56 45 5f 53 43 41 52 44 49 53 56 ef HAVE_SCARDISV 5ef0: 41 4c 49 44 43 4f 4e 54 45 58 54 0a 09 43 41 43 ALIDCONTEXT..CAC 5f00: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 5f10: 28 22 53 43 61 72 64 49 73 56 61 6c 69 64 43 6f ("SCardIsValidCo 5f20: 6e 74 65 78 74 28 29 20 63 61 6c 6c 65 64 22 29 ntext() called") 5f30: 3b 0a 09 73 63 61 72 64 5f 69 73 76 61 6c 69 64 ;..scard_isvalid 5f40: 5f 72 65 74 20 3d 20 53 43 61 72 64 49 73 56 61 _ret = SCardIsVa 5f50: 6c 69 64 43 6f 6e 74 65 78 74 28 2a 63 61 63 6b lidContext(*cack 5f60: 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b ey_pcsc_handle); 5f70: 0a 09 69 66 20 28 73 63 61 72 64 5f 69 73 76 61 ..if (scard_isva 5f80: 6c 69 64 5f 72 65 74 20 21 3d 20 53 43 41 52 44 lid_ret != SCARD 5f90: 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 _S_SUCCESS) {... 5fa0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 5fb0: 4e 54 46 28 22 48 61 6e 64 6c 65 20 68 61 73 20 NTF("Handle has 5fc0: 62 65 63 6f 6d 65 20 69 6e 76 61 6c 69 64 20 28 become invalid ( 5fd0: 53 43 61 72 64 49 73 56 61 6c 69 64 43 6f 6e 74 SCardIsValidCont 5fe0: 65 78 74 20 3d 20 25 73 2f 25 6c 69 29 2c 20 74 ext = %s/%li), t 5ff0: 72 79 69 6e 67 20 74 6f 20 72 65 2d 65 73 74 61 rying to re-esta 6000: 62 6c 69 73 68 2e 2e 2e 22 2c 20 43 41 43 4b 45 blish...", CACKE 6010: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 Y_DEBUG_FUNC_SCA 6020: 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 RDERR_TO_STR(sca 6030: 72 64 5f 69 73 76 61 6c 69 64 5f 72 65 74 29 2c rd_isvalid_ret), 6040: 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f 69 73 (long) scard_is 6050: 76 61 6c 69 64 5f 72 65 74 29 3b 0a 0a 09 09 43 valid_ret);....C 6060: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 6070: 54 46 28 22 53 43 61 72 64 45 73 74 61 62 6c 69 TF("SCardEstabli 6080: 73 68 43 6f 6e 74 65 78 74 28 29 20 63 61 6c 6c shContext() call 6090: 65 64 22 29 3b 0a 09 09 73 63 61 72 64 5f 65 73 ed");...scard_es 60a0: 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20 3d 20 t_context_ret = 60b0: 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 43 6f SCardEstablishCo 60c0: 6e 74 65 78 74 28 53 43 41 52 44 5f 53 43 4f 50 ntext(SCARD_SCOP 60d0: 45 5f 53 59 53 54 45 4d 2c 20 4e 55 4c 4c 2c 20 E_SYSTEM, NULL, 60e0: 4e 55 4c 4c 2c 20 63 61 63 6b 65 79 5f 70 63 73 NULL, cackey_pcs 60f0: 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 09 69 66 20 c_handle);...if 6100: 28 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 (scard_est_conte 6110: 78 74 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f xt_ret != SCARD_ 6120: 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 S_SUCCESS) {.... 6130: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 6140: 4e 54 46 28 22 43 61 6c 6c 20 74 6f 20 53 43 61 NTF("Call to SCa 6150: 72 64 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 rdEstablishConte 6160: 78 74 20 66 61 69 6c 65 64 20 28 72 65 74 75 72 xt failed (retur 6170: 6e 65 64 20 25 73 2f 25 6c 69 29 2c 20 72 65 74 ned %s/%li), ret 6180: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 6190: 65 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 e", CACKEY_DEBUG 61a0: 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 _FUNC_SCARDERR_T 61b0: 4f 5f 53 54 52 28 73 63 61 72 64 5f 65 73 74 5f O_STR(scard_est_ 61c0: 63 6f 6e 74 65 78 74 5f 72 65 74 29 2c 20 28 6c context_ret), (l 61d0: 6f 6e 67 29 20 73 63 61 72 64 5f 65 73 74 5f 63 ong) scard_est_c 61e0: 6f 6e 74 65 78 74 5f 72 65 74 29 3b 0a 0a 09 09 ontext_ret);.... 61f0: 09 66 72 65 65 28 63 61 63 6b 65 79 5f 70 63 73 .free(cackey_pcs 6200: 63 5f 68 61 6e 64 6c 65 29 3b 0a 09 09 09 63 61 c_handle);....ca 6210: 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 ckey_pcsc_handle 6220: 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 63 61 63 = NULL;.....cac 6230: 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e key_slots_discon 6240: 6e 65 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 09 nect_all();..... 6250: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 6260: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 6270: 09 7d 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 .}....CACKEY_DEB 6280: 55 47 5f 50 52 49 4e 54 46 28 22 48 61 6e 64 6c UG_PRINTF("Handl 6290: 65 20 68 61 73 20 62 65 65 6e 20 72 65 2d 65 73 e has been re-es 62a0: 74 61 62 6c 69 73 68 65 64 22 29 3b 0a 09 7d 0a tablished");..}. 62b0: 23 65 6e 64 69 66 0a 0a 09 43 41 43 4b 45 59 5f #endif...CACKEY_ 62c0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 DEBUG_PRINTF("Su 62d0: 63 65 73 73 66 75 6c 6c 79 20 63 6f 6e 6e 65 63 cessfully connec 62e0: 74 65 64 20 74 6f 20 50 43 2f 53 43 2c 20 72 65 ted to PC/SC, re 62f0: 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 63 63 65 turning in succe 6300: 73 73 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 ss");...return(C 6310: 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 ACKEY_PCSC_S_OK) 6320: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f ;.}../*. * SYNPO 6330: 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 SIS. * cacke 6340: 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 70 63 73 y_ret cackey_pcs 6350: 63 5f 64 69 73 63 6f 6e 6e 65 63 74 28 76 6f 69 c_disconnect(voi 6360: 64 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 d);. *. * ARGUME 6370: 4e 54 53 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a NTS. * None. 6380: 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c *. * RETURN VAL 6390: 55 45 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 UE. * CACKEY 63a0: 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 20 20 20 20 _PCSC_S_OK 63b0: 20 20 20 4f 6e 20 73 75 63 63 65 73 73 0a 20 2a On success. * 63c0: 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 CACKEY_PCSC 63d0: 5f 45 5f 47 45 4e 45 52 49 43 20 20 20 20 4f 6e _E_GENERIC On 63e0: 20 65 72 72 6f 72 0a 20 2a 0a 20 2a 20 4e 4f 54 error. *. * NOT 63f0: 45 53 0a 20 2a 20 20 20 20 20 54 68 69 73 20 66 ES. * This f 6400: 75 6e 63 74 69 6f 6e 20 64 69 73 63 6f 6e 6e 65 unction disconne 6410: 63 74 73 20 66 72 6f 6d 20 74 68 65 20 50 43 2f cts from the PC/ 6420: 53 43 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 SC Connection ma 6430: 6e 61 67 65 72 20 61 6e 64 20 75 70 64 61 74 65 nager and update 6440: 73 0a 20 2a 20 20 20 20 20 74 68 65 20 67 6c 6f s. * the glo 6450: 62 61 6c 20 68 61 6e 64 6c 65 2e 0a 20 2a 0a 20 bal handle.. *. 6460: 2a 2f 0a 73 74 61 74 69 63 20 63 61 63 6b 65 79 */.static cackey 6470: 5f 72 65 74 20 63 61 63 6b 65 79 5f 70 63 73 63 _ret cackey_pcsc 6480: 5f 64 69 73 63 6f 6e 6e 65 63 74 28 76 6f 69 64 _disconnect(void 6490: 29 20 7b 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f ) {..LONG scard_ 64a0: 72 65 6c 5f 63 6f 6e 74 65 78 74 5f 72 65 74 3b rel_context_ret; 64b0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 64c0: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 64d0: 29 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f );...if (cackey_ 64e0: 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 3d 20 4e pcsc_handle == N 64f0: 55 4c 4c 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 ULL) {...return( 6500: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK 6510: 29 3b 0a 09 7d 0a 0a 09 73 63 61 72 64 5f 72 65 );..}...scard_re 6520: 6c 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20 3d 20 l_context_ret = 6530: 53 43 61 72 64 52 65 6c 65 61 73 65 43 6f 6e 74 SCardReleaseCont 6540: 65 78 74 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 ext(*cackey_pcsc 6550: 5f 68 61 6e 64 6c 65 29 3b 0a 0a 09 69 66 20 28 _handle);...if ( 6560: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 6570: 6c 65 29 20 7b 0a 09 09 66 72 65 65 28 63 61 63 le) {...free(cac 6580: 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 key_pcsc_handle) 6590: 3b 0a 09 0a 09 09 63 61 63 6b 65 79 5f 70 63 73 ;.....cackey_pcs 65a0: 63 5f 68 61 6e 64 6c 65 20 3d 20 4e 55 4c 4c 3b c_handle = NULL; 65b0: 0a 09 7d 0a 0a 09 69 66 20 28 73 63 61 72 64 5f ..}...if (scard_ 65c0: 72 65 6c 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20 rel_context_ret 65d0: 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 != SCARD_S_SUCCE 65e0: 53 53 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 43 SS) {...return(C 65f0: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e ACKEY_PCSC_E_GEN 6600: 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 ERIC);..}...retu 6610: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 rn(CACKEY_PCSC_S 6620: 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 _OK);.}../*. * S 6630: 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 76 YNPOSIS. * v 6640: 6f 69 64 20 63 61 63 6b 65 79 5f 6d 61 72 6b 5f oid cackey_mark_ 6650: 73 6c 6f 74 5f 72 65 73 65 74 28 73 74 72 75 63 slot_reset(struc 6660: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 t cackey_slot *s 6670: 6c 6f 74 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 lot);. *. * ARGU 6680: 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 4e 6f 6e MENTS. * Non 6690: 65 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 e. *. * RETURN V 66a0: 41 4c 55 45 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 ALUE. * None 66b0: 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 . *. * NOTES. * 66c0: 20 20 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f This functio 66d0: 6e 20 6d 61 72 6b 73 20 61 20 73 6c 6f 74 20 68 n marks a slot h 66e0: 61 73 20 68 61 76 69 6e 67 20 62 65 65 6e 20 72 as having been r 66f0: 65 73 65 74 2c 20 74 6f 20 6c 61 74 65 72 20 62 eset, to later b 6700: 65 20 63 6c 65 61 6e 65 64 20 75 70 2e 0a 20 2a e cleaned up.. * 6710: 20 20 20 20 20 43 6c 65 61 6e 75 70 20 6f 6e 6c Cleanup onl 6720: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 y happens when a 6730: 20 50 4b 43 53 23 31 31 20 63 6c 69 65 6e 74 20 PKCS#11 client 6740: 63 61 6c 6c 73 20 43 5f 46 69 6e 64 4f 62 6a 65 calls C_FindObje 6750: 63 74 73 49 6e 69 74 2e 0a 20 2a 0a 20 2a 2f 0a ctsInit.. *. */. 6760: 73 74 61 74 69 63 20 76 6f 69 64 20 63 61 63 6b static void cack 6770: 65 79 5f 6d 61 72 6b 5f 73 6c 6f 74 5f 72 65 73 ey_mark_slot_res 6780: 65 74 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 et(struct cackey 6790: 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a 09 _slot *slot) {.. 67a0: 69 66 20 28 73 6c 6f 74 20 3d 3d 20 4e 55 4c 4c if (slot == NULL 67b0: 29 20 7b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d ) {...return;..} 67c0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 67d0: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 67e0: 29 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 2d 3e 70 );...if (slot->p 67f0: 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 csc_card_connect 6800: 65 64 29 20 7b 0a 09 09 53 43 61 72 64 44 69 73 ed) {...SCardDis 6810: 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e 70 63 connect(slot->pc 6820: 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 4c sc_card, SCARD_L 6830: 45 41 56 45 5f 43 41 52 44 29 3b 0a 09 7d 0a 0a EAVE_CARD);..}.. 6840: 09 73 6c 6f 74 2d 3e 73 6c 6f 74 5f 72 65 73 65 .slot->slot_rese 6850: 74 20 3d 20 31 3b 0a 09 73 6c 6f 74 2d 3e 70 63 t = 1;..slot->pc 6860: 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 sc_card_connecte 6870: 64 20 3d 20 30 3b 0a 09 73 6c 6f 74 2d 3e 74 6f d = 0;..slot->to 6880: 6b 65 6e 5f 66 6c 61 67 73 20 3d 20 43 4b 46 5f ken_flags = CKF_ 6890: 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 3b 0a LOGIN_REQUIRED;. 68a0: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 68b0: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 68c0: 2e 22 29 3b 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d .");...return;.} 68d0: 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 ../*. * SYNPOSIS 68e0: 0a 20 2a 20 20 20 20 20 4c 4f 4e 47 20 63 61 63 . * LONG cac 68f0: 6b 65 79 5f 72 65 63 6f 6e 6e 65 63 74 5f 63 61 key_reconnect_ca 6900: 72 64 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 rd(struct cackey 6910: 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 44 57 4f _slot *slot, DWO 6920: 52 44 20 64 65 66 61 75 6c 74 5f 70 72 6f 74 6f RD default_proto 6930: 63 6f 6c 2c 20 4c 50 44 57 4f 52 44 20 73 65 6c col, LPDWORD sel 6940: 65 63 74 65 64 5f 70 72 6f 74 6f 63 6f 6c 29 3b ected_protocol); 6950: 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 . *. * ARGUMENTS 6960: 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 73 . * cackey_s 6970: 6c 6f 74 20 2a 73 6c 6f 74 0a 20 2a 20 20 20 20 lot *slot. * 6980: 20 20 20 20 20 53 6c 6f 74 20 74 6f 20 73 65 6e Slot to sen 6990: 64 20 63 6f 6d 6d 61 6e 64 73 20 74 6f 0a 20 2a d commands to. * 69a0: 0a 20 2a 20 20 20 20 20 44 57 4f 52 44 20 64 65 . * DWORD de 69b0: 66 61 75 6c 74 5f 70 72 6f 74 6f 63 6f 6c 0a 20 fault_protocol. 69c0: 2a 20 20 20 20 20 20 20 20 20 50 72 6f 74 6f 63 * Protoc 69d0: 6f 6c 20 74 6f 20 61 74 74 65 6d 70 74 20 66 69 ol to attempt fi 69e0: 72 73 74 0a 20 2a 0a 20 2a 20 20 20 20 20 4c 50 rst. *. * LP 69f0: 44 57 4f 52 44 20 73 65 6c 65 63 74 65 64 5f 70 DWORD selected_p 6a00: 72 6f 74 6f 63 6f 6c 0a 20 2a 20 20 20 20 20 20 rotocol. * 6a10: 20 20 20 5b 4f 55 54 5d 20 50 72 6f 74 6f 63 6f [OUT] Protoco 6a20: 6c 20 73 65 6c 65 63 74 65 64 0a 20 2a 0a 20 2a l selected. *. * 6a30: 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a RETURN VALUE. * 6a40: 20 20 20 20 20 54 68 65 20 72 65 74 75 72 6e 20 The return 6a50: 76 61 6c 75 65 20 66 72 6f 6d 20 53 43 61 72 64 value from SCard 6a60: 52 65 63 6f 6e 6e 65 63 74 28 29 0a 20 2a 0a 20 Reconnect(). *. 6a70: 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 54 * NOTES. * T 6a80: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 his function is 6a90: 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 a wrapper around 6aa0: 20 53 43 61 72 64 52 65 63 6f 6e 6e 65 63 74 28 SCardReconnect( 6ab0: 29 0a 20 2a 0a 20 2a 20 20 20 20 20 54 68 65 20 ). *. * The 6ac0: 53 43 61 72 64 52 65 63 6f 6e 6e 65 63 74 28 29 SCardReconnect() 6ad0: 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 20 77 function call w 6ae0: 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20 66 69 ill be called fi 6af0: 72 73 74 20 77 69 74 68 20 74 68 65 0a 20 2a 20 rst with the. * 6b00: 20 20 20 20 64 77 50 72 65 66 65 72 72 65 64 50 dwPreferredP 6b10: 72 6f 74 6f 63 6f 6c 73 20 6f 66 20 22 64 65 66 rotocols of "def 6b20: 61 75 6c 74 5f 70 72 6f 74 6f 63 6f 6c 22 2e 20 ault_protocol". 6b30: 20 49 66 20 74 68 61 74 20 63 61 6c 6c 20 72 65 If that call re 6b40: 74 75 72 6e 73 0a 20 2a 20 20 20 20 20 53 43 41 turns. * SCA 6b50: 52 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 RD_E_PROTO_MISMA 6b60: 54 43 48 20 74 72 79 20 61 67 61 69 6e 20 77 69 TCH try again wi 6b70: 74 68 20 61 20 70 72 6f 74 6f 63 6f 6c 20 6f 66 th a protocol of 6b80: 20 54 3d 30 2c 20 61 6e 64 20 66 61 69 6c 69 6e T=0, and failin 6b90: 67 0a 20 2a 20 20 20 20 20 74 68 61 74 20 54 3d g. * that T= 6ba0: 31 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 1.. *. */.static 6bb0: 20 4c 4f 4e 47 20 63 61 63 6b 65 79 5f 72 65 63 LONG cackey_rec 6bc0: 6f 6e 6e 65 63 74 5f 63 61 72 64 28 73 74 72 75 onnect_card(stru 6bd0: 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a ct cackey_slot * 6be0: 73 6c 6f 74 2c 20 44 57 4f 52 44 20 64 65 66 61 slot, DWORD defa 6bf0: 75 6c 74 5f 70 72 6f 74 6f 63 6f 6c 2c 20 4c 50 ult_protocol, LP 6c00: 44 57 4f 52 44 20 73 65 6c 65 63 74 65 64 5f 70 DWORD selected_p 6c10: 72 6f 74 6f 63 6f 6c 29 20 7b 0a 09 4c 4f 4e 47 rotocol) {..LONG 6c20: 20 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 3b scard_conn_ret; 6c30: 0a 0a 09 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 ...scard_conn_re 6c40: 74 20 3d 20 53 43 61 72 64 52 65 63 6f 6e 6e 65 t = SCardReconne 6c50: 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 ct(slot->pcsc_ca 6c60: 72 64 2c 20 53 43 41 52 44 5f 53 48 41 52 45 5f rd, SCARD_SHARE_ 6c70: 53 48 41 52 45 44 2c 20 64 65 66 61 75 6c 74 5f SHARED, default_ 6c80: 70 72 6f 74 6f 63 6f 6c 2c 20 53 43 41 52 44 5f protocol, SCARD_ 6c90: 52 45 53 45 54 5f 43 41 52 44 2c 20 73 65 6c 65 RESET_CARD, sele 6ca0: 63 74 65 64 5f 70 72 6f 74 6f 63 6f 6c 29 3b 0a cted_protocol);. 6cb0: 0a 09 69 66 20 28 73 63 61 72 64 5f 63 6f 6e 6e ..if (scard_conn 6cc0: 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f 45 5f _ret == SCARD_E_ 6cd0: 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 29 20 PROTO_MISMATCH) 6ce0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 6cf0: 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 52 65 _PRINTF("SCardRe 6d00: 63 6f 6e 6e 65 63 74 28 29 20 72 65 74 75 72 6e connect() return 6d10: 65 64 20 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f ed SCARD_E_PROTO 6d20: 5f 4d 49 53 4d 41 54 43 48 2c 20 74 72 79 69 6e _MISMATCH, tryin 6d30: 67 20 77 69 74 68 20 6a 75 73 74 20 54 3d 30 22 g with just T=0" 6d40: 29 0a 09 09 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 )...scard_conn_r 6d50: 65 74 20 3d 20 53 43 61 72 64 52 65 63 6f 6e 6e et = SCardReconn 6d60: 65 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 ect(slot->pcsc_c 6d70: 61 72 64 2c 20 53 43 41 52 44 5f 53 48 41 52 45 ard, SCARD_SHARE 6d80: 5f 53 48 41 52 45 44 2c 20 53 43 41 52 44 5f 50 _SHARED, SCARD_P 6d90: 52 4f 54 4f 43 4f 4c 5f 54 30 2c 20 53 43 41 52 ROTOCOL_T0, SCAR 6da0: 44 5f 52 45 53 45 54 5f 43 41 52 44 2c 20 73 65 D_RESET_CARD, se 6db0: 6c 65 63 74 65 64 5f 70 72 6f 74 6f 63 6f 6c 29 lected_protocol) 6dc0: 3b 0a 0a 09 09 69 66 20 28 73 63 61 72 64 5f 63 ;....if (scard_c 6dd0: 6f 6e 6e 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 onn_ret == SCARD 6de0: 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 _E_PROTO_MISMATC 6df0: 48 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 H) {....CACKEY_D 6e00: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 43 61 EBUG_PRINTF("SCa 6e10: 72 64 52 65 63 6f 6e 6e 65 63 74 28 29 20 72 65 rdReconnect() re 6e20: 74 75 72 6e 65 64 20 53 43 41 52 44 5f 45 5f 50 turned SCARD_E_P 6e30: 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 2c 20 74 ROTO_MISMATCH, t 6e40: 72 79 69 6e 67 20 77 69 74 68 20 6a 75 73 74 20 rying with just 6e50: 54 3d 31 22 29 0a 09 09 09 73 63 61 72 64 5f 63 T=1")....scard_c 6e60: 6f 6e 6e 5f 72 65 74 20 3d 20 53 43 61 72 64 52 onn_ret = SCardR 6e70: 65 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e 70 econnect(slot->p 6e80: 63 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 5f csc_card, SCARD_ 6e90: 53 48 41 52 45 5f 53 48 41 52 45 44 2c 20 53 43 SHARE_SHARED, SC 6ea0: 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31 2c ARD_PROTOCOL_T1, 6eb0: 20 53 43 41 52 44 5f 52 45 53 45 54 5f 43 41 52 SCARD_RESET_CAR 6ec0: 44 2c 20 73 65 6c 65 63 74 65 64 5f 70 72 6f 74 D, selected_prot 6ed0: 6f 63 6f 6c 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 ocol);...}..}... 6ee0: 72 65 74 75 72 6e 28 73 63 61 72 64 5f 63 6f 6e return(scard_con 6ef0: 6e 5f 72 65 74 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a n_ret);.}../*. * 6f00: 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 SYNPOSIS. * 6f10: 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b cackey_ret cack 6f20: 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 72 64 28 ey_connect_card( 6f30: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c struct cackey_sl 6f40: 6f 74 20 2a 73 6c 6f 74 29 3b 0a 20 2a 0a 20 2a ot *slot);. *. * 6f50: 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 ARGUMENTS. * 6f60: 20 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 cackey_slot *s 6f70: 6c 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 53 lot. * S 6f80: 6c 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d 6d lot to send comm 6f90: 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 52 45 ands to. *. * RE 6fa0: 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 TURN VALUE. * 6fb0: 20 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f CACKEY_PCSC_S_ 6fc0: 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e 20 73 75 OK On su 6fd0: 63 63 65 73 73 0a 20 2a 20 20 20 20 20 43 41 43 ccess. * CAC 6fe0: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 6ff0: 49 43 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 IC On error. 7000: 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 *. * NOTES. * 7010: 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a 2f 0a 73 74 None. *. */.st 7020: 61 74 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 atic cackey_ret 7030: 63 61 63 6b 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 cackey_connect_c 7040: 61 72 64 28 73 74 72 75 63 74 20 63 61 63 6b 65 ard(struct cacke 7050: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 20 7b 0a y_slot *slot) {. 7060: 09 63 61 63 6b 65 79 5f 72 65 74 20 70 63 73 63 .cackey_ret pcsc 7070: 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 3b 0a 09 44 _connect_ret;..D 7080: 57 4f 52 44 20 70 72 6f 74 6f 63 6f 6c 3b 0a 09 WORD protocol;.. 7090: 4c 4f 4e 47 20 73 63 61 72 64 5f 63 6f 6e 6e 5f LONG scard_conn_ 70a0: 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ret;...CACKEY_DE 70b0: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 70c0: 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 73 6c ed.");...if (!sl 70d0: 6f 74 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ot) {...CACKEY_D 70e0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 49 6e 76 EBUG_PRINTF("Inv 70f0: 61 6c 69 64 20 73 6c 6f 74 20 73 70 65 63 69 66 alid slot specif 7100: 69 65 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 ied, returning i 7110: 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 n failure");.... 7120: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 7130: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. 7140: 7d 0a 0a 09 70 63 73 63 5f 63 6f 6e 6e 65 63 74 }...pcsc_connect 7150: 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 70 63 _ret = cackey_pc 7160: 73 63 5f 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 69 sc_connect();..i 7170: 66 20 28 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f f (pcsc_connect_ 7180: 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 ret != CACKEY_PC 7190: 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 SC_S_OK) {...CAC 71a0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 71b0: 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 ("Connection to 71c0: 50 43 2f 53 43 20 66 61 69 6c 65 64 2c 20 72 65 PC/SC failed, re 71d0: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu 71e0: 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 re");....return( 71f0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 CACKEY_PCSC_E_GE 7200: 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 NERIC);..}.../* 7210: 43 6f 6e 6e 65 63 74 20 74 6f 20 72 65 61 64 65 Connect to reade 7220: 72 2c 20 69 66 20 6e 65 65 64 65 64 20 2a 2f 0a r, if needed */. 7230: 09 69 66 20 28 21 73 6c 6f 74 2d 3e 70 63 73 63 .if (!slot->pcsc 7240: 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 29 _card_connected) 7250: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 7260: 47 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 43 G_PRINTF("SCardC 7270: 6f 6e 6e 65 63 74 28 25 73 29 20 63 61 6c 6c 65 onnect(%s) calle 7280: 64 22 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 d", slot->pcsc_r 7290: 65 61 64 65 72 29 3b 0a 09 09 73 63 61 72 64 5f eader);...scard_ 72a0: 63 6f 6e 6e 5f 72 65 74 20 3d 20 53 43 61 72 64 conn_ret = SCard 72b0: 43 6f 6e 6e 65 63 74 28 2a 63 61 63 6b 65 79 5f Connect(*cackey_ 72c0: 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 73 6c 6f pcsc_handle, slo 72d0: 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 72 2c 20 t->pcsc_reader, 72e0: 53 43 41 52 44 5f 53 48 41 52 45 5f 53 48 41 52 SCARD_SHARE_SHAR 72f0: 45 44 2c 20 53 43 41 52 44 5f 50 52 4f 54 4f 43 ED, SCARD_PROTOC 7300: 4f 4c 5f 54 30 20 7c 20 53 43 41 52 44 5f 50 52 OL_T0 | SCARD_PR 7310: 4f 54 4f 43 4f 4c 5f 54 31 2c 20 26 73 6c 6f 74 OTOCOL_T1, &slot 7320: 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 26 70 72 ->pcsc_card, &pr 7330: 6f 74 6f 63 6f 6c 29 3b 0a 0a 09 09 69 66 20 28 otocol);....if ( 7340: 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 3d scard_conn_ret = 7350: 3d 20 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f 5f = SCARD_E_PROTO_ 7360: 4d 49 53 4d 41 54 43 48 29 20 7b 0a 09 09 09 43 MISMATCH) {....C 7370: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 7380: 54 46 28 22 53 43 61 72 64 43 6f 6e 6e 65 63 74 TF("SCardConnect 7390: 28 29 20 72 65 74 75 72 6e 65 64 20 53 43 41 52 () returned SCAR 73a0: 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 D_E_PROTO_MISMAT 73b0: 43 48 2c 20 74 72 79 69 6e 67 20 77 69 74 68 20 CH, trying with 73c0: 6a 75 73 74 20 54 3d 30 22 29 0a 09 09 09 73 63 just T=0")....sc 73d0: 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 53 ard_conn_ret = S 73e0: 43 61 72 64 43 6f 6e 6e 65 63 74 28 2a 63 61 63 CardConnect(*cac 73f0: 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 2c key_pcsc_handle, 7400: 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 64 slot->pcsc_read 7410: 65 72 2c 20 53 43 41 52 44 5f 53 48 41 52 45 5f er, SCARD_SHARE_ 7420: 53 48 41 52 45 44 2c 20 53 43 41 52 44 5f 50 52 SHARED, SCARD_PR 7430: 4f 54 4f 43 4f 4c 5f 54 30 2c 20 26 73 6c 6f 74 OTOCOL_T0, &slot 7440: 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 26 70 72 ->pcsc_card, &pr 7450: 6f 74 6f 63 6f 6c 29 3b 0a 0a 09 09 09 69 66 20 otocol);.....if 7460: 28 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 (scard_conn_ret 7470: 3d 3d 20 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f == SCARD_E_PROTO 7480: 5f 4d 49 53 4d 41 54 43 48 29 20 7b 0a 09 09 09 _MISMATCH) {.... 7490: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 74a0: 49 4e 54 46 28 22 53 43 61 72 64 43 6f 6e 6e 65 INTF("SCardConne 74b0: 63 74 28 29 20 72 65 74 75 72 6e 65 64 20 53 43 ct() returned SC 74c0: 41 52 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d ARD_E_PROTO_MISM 74d0: 41 54 43 48 2c 20 74 72 79 69 6e 67 20 77 69 74 ATCH, trying wit 74e0: 68 20 6a 75 73 74 20 54 3d 31 22 29 0a 09 09 09 h just T=1").... 74f0: 09 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 .scard_conn_ret 7500: 3d 20 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 2a = SCardConnect(* 7510: 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 7520: 6c 65 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 le, slot->pcsc_r 7530: 65 61 64 65 72 2c 20 53 43 41 52 44 5f 53 48 41 eader, SCARD_SHA 7540: 52 45 5f 53 48 41 52 45 44 2c 20 53 43 41 52 44 RE_SHARED, SCARD 7550: 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31 2c 20 26 73 _PROTOCOL_T1, &s 7560: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 lot->pcsc_card, 7570: 26 70 72 6f 74 6f 63 6f 6c 29 3b 0a 09 09 09 7d &protocol);....} 7580: 0a 09 09 7d 0a 0a 09 09 69 66 20 28 73 63 61 72 ...}....if (scar 7590: 64 5f 63 6f 6e 6e 5f 72 65 74 20 3d 3d 20 53 43 d_conn_ret == SC 75a0: 41 52 44 5f 57 5f 55 4e 50 4f 57 45 52 45 44 5f ARD_W_UNPOWERED_ 75b0: 43 41 52 44 29 20 7b 0a 09 09 09 43 41 43 4b 45 CARD) {....CACKE 75c0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 75d0: 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 29 20 72 SCardConnect() r 75e0: 65 74 75 72 6e 65 64 20 53 43 41 52 44 5f 57 5f eturned SCARD_W_ 75f0: 55 4e 50 4f 57 45 52 45 44 5f 43 41 52 44 2c 20 UNPOWERED_CARD, 7600: 74 72 79 69 6e 67 20 74 6f 20 72 65 2d 63 6f 6e trying to re-con 7610: 6e 65 63 74 2e 2e 2e 22 29 3b 0a 0a 09 09 09 73 nect...");.....s 7620: 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 card_conn_ret = 7630: 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 2a 63 61 SCardConnect(*ca 7640: 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 ckey_pcsc_handle 7650: 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 , slot->pcsc_rea 7660: 64 65 72 2c 20 53 43 41 52 44 5f 53 48 41 52 45 der, SCARD_SHARE 7670: 5f 44 49 52 45 43 54 2c 20 53 43 41 52 44 5f 50 _DIRECT, SCARD_P 7680: 52 4f 54 4f 43 4f 4c 5f 54 30 20 7c 20 53 43 41 ROTOCOL_T0 | SCA 7690: 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31 2c 20 RD_PROTOCOL_T1, 76a0: 26 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 &slot->pcsc_card 76b0: 2c 20 26 70 72 6f 74 6f 63 6f 6c 29 3b 0a 0a 09 , &protocol);... 76c0: 09 09 69 66 20 28 73 63 61 72 64 5f 63 6f 6e 6e ..if (scard_conn 76d0: 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f 45 5f _ret == SCARD_E_ 76e0: 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 29 20 PROTO_MISMATCH) 76f0: 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {.....CACKEY_DEB 7700: 55 47 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 UG_PRINTF("SCard 7710: 43 6f 6e 6e 65 63 74 28 29 20 72 65 74 75 72 6e Connect() return 7720: 65 64 20 53 43 41 52 44 5f 45 5f 50 52 4f 54 4f ed SCARD_E_PROTO 7730: 5f 4d 49 53 4d 41 54 43 48 2c 20 74 72 79 69 6e _MISMATCH, tryin 7740: 67 20 77 69 74 68 20 6a 75 73 74 20 54 3d 30 22 g with just T=0" 7750: 29 0a 09 09 09 09 73 63 61 72 64 5f 63 6f 6e 6e ).....scard_conn 7760: 5f 72 65 74 20 3d 20 53 43 61 72 64 43 6f 6e 6e _ret = SCardConn 7770: 65 63 74 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 ect(*cackey_pcsc 7780: 5f 68 61 6e 64 6c 65 2c 20 73 6c 6f 74 2d 3e 70 _handle, slot->p 7790: 63 73 63 5f 72 65 61 64 65 72 2c 20 53 43 41 52 csc_reader, SCAR 77a0: 44 5f 53 48 41 52 45 5f 53 48 41 52 45 44 2c 20 D_SHARE_SHARED, 77b0: 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 SCARD_PROTOCOL_T 77c0: 30 2c 20 26 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 0, &slot->pcsc_c 77d0: 61 72 64 2c 20 26 70 72 6f 74 6f 63 6f 6c 29 3b ard, &protocol); 77e0: 0a 0a 09 09 09 09 69 66 20 28 73 63 61 72 64 5f ......if (scard_ 77f0: 63 6f 6e 6e 5f 72 65 74 20 3d 3d 20 53 43 41 52 conn_ret == SCAR 7800: 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 D_E_PROTO_MISMAT 7810: 43 48 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 CH) {......CACKE 7820: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 7830: 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 29 20 72 SCardConnect() r 7840: 65 74 75 72 6e 65 64 20 53 43 41 52 44 5f 45 5f eturned SCARD_E_ 7850: 50 52 4f 54 4f 5f 4d 49 53 4d 41 54 43 48 2c 20 PROTO_MISMATCH, 7860: 74 72 79 69 6e 67 20 77 69 74 68 20 6a 75 73 74 trying with just 7870: 20 54 3d 31 22 29 0a 09 09 09 09 09 73 63 61 72 T=1")......scar 7880: 64 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 53 43 61 d_conn_ret = SCa 7890: 72 64 43 6f 6e 6e 65 63 74 28 2a 63 61 63 6b 65 rdConnect(*cacke 78a0: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 73 y_pcsc_handle, s 78b0: 6c 6f 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 72 lot->pcsc_reader 78c0: 2c 20 53 43 41 52 44 5f 53 48 41 52 45 5f 53 48 , SCARD_SHARE_SH 78d0: 41 52 45 44 2c 20 53 43 41 52 44 5f 50 52 4f 54 ARED, SCARD_PROT 78e0: 4f 43 4f 4c 5f 54 31 2c 20 26 73 6c 6f 74 2d 3e OCOL_T1, &slot-> 78f0: 70 63 73 63 5f 63 61 72 64 2c 20 26 70 72 6f 74 pcsc_card, &prot 7900: 6f 63 6f 6c 29 3b 0a 09 09 09 09 7d 0a 09 09 09 ocol);.....}.... 7910: 7d 0a 0a 09 09 09 73 63 61 72 64 5f 63 6f 6e 6e }.....scard_conn 7920: 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 72 65 _ret = cackey_re 7930: 63 6f 6e 6e 65 63 74 5f 63 61 72 64 28 73 6c 6f connect_card(slo 7940: 74 2c 20 70 72 6f 74 6f 63 6f 6c 2c 20 26 70 72 t, protocol, &pr 7950: 6f 74 6f 63 6f 6c 29 3b 0a 09 09 7d 0a 0a 09 09 otocol);...}.... 7960: 69 66 20 28 73 63 61 72 64 5f 63 6f 6e 6e 5f 72 if (scard_conn_r 7970: 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 et != SCARD_S_SU 7980: 43 43 45 53 53 29 20 7b 0a 09 09 09 43 41 43 4b CCESS) {....CACK 7990: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 79a0: 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 63 "Connection to c 79b0: 61 72 64 20 66 61 69 6c 65 64 2c 20 72 65 74 75 ard failed, retu 79c0: 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 rning in failure 79d0: 20 28 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 29 (SCardConnect() 79e0: 20 3d 20 25 73 2f 25 6c 69 29 22 2c 20 43 41 43 = %s/%li)", CAC 79f0: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 KEY_DEBUG_FUNC_S 7a00: 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 CARDERR_TO_STR(s 7a10: 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 29 2c 20 card_conn_ret), 7a20: 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f 63 6f 6e (long) scard_con 7a30: 6e 5f 72 65 74 29 3b 0a 0a 09 09 09 72 65 74 75 n_ret);.....retu 7a40: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 7a50: 5f 47 45 4e 45 52 49 43 29 3b 0a 09 09 7d 0a 0a _GENERIC);...}.. 7a60: 09 09 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 ..slot->pcsc_car 7a70: 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 31 3b d_connected = 1; 7a80: 0a 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 ...slot->transac 7a90: 74 69 6f 6e 5f 64 65 70 74 68 20 3d 20 30 3b 0a tion_depth = 0;. 7aa0: 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 ..slot->transact 7ab0: 69 6f 6e 5f 6e 65 65 64 5f 68 77 5f 6c 6f 63 6b ion_need_hw_lock 7ac0: 20 3d 20 30 3b 0a 09 09 73 6c 6f 74 2d 3e 70 72 = 0;...slot->pr 7ad0: 6f 74 6f 63 6f 6c 20 3d 20 70 72 6f 74 6f 63 6f otocol = protoco 7ae0: 6c 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 43 l;..}...return(C 7af0: 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 ACKEY_PCSC_S_OK) 7b00: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f ;.}../*. * SYNPO 7b10: 53 49 53 0a 20 2a 20 20 20 20 20 63 61 63 6b 65 SIS. * cacke 7b20: 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 62 65 67 y_ret cackey_beg 7b30: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 in_transaction(s 7b40: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f truct cackey_slo 7b50: 74 20 2a 73 6c 6f 74 29 3b 0a 20 2a 0a 20 2a 20 t *slot);. *. * 7b60: 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 ARGUMENTS. * 7b70: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c cackey_slot *sl 7b80: 6f 74 0a 20 2a 20 20 20 20 20 20 20 20 20 53 6c ot. * Sl 7b90: 6f 74 20 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 ot to send comma 7ba0: 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a 20 52 45 54 nds to. *. * RET 7bb0: 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 URN VALUE. * 7bc0: 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f CACKEY_PCSC_S_O 7bd0: 4b 20 20 20 20 20 20 20 20 20 4f 6e 20 73 75 63 K On suc 7be0: 63 65 73 73 0a 20 2a 20 20 20 20 20 43 41 43 4b cess. * CACK 7bf0: 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 EY_PCSC_E_GENERI 7c00: 43 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 2a C On error. * 7c10: 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 . * NOTES. * 7c20: 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e The transaction 7c30: 20 73 68 6f 75 6c 64 20 62 65 20 74 65 72 6d 69 should be termi 7c40: 6e 61 74 65 64 20 75 73 69 6e 67 20 22 63 61 63 nated using "cac 7c50: 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 key_end_transact 7c60: 69 6f 6e 22 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 ion". *. */.stat 7c70: 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 ic cackey_ret ca 7c80: 63 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e 73 ckey_begin_trans 7c90: 61 63 74 69 6f 6e 28 73 74 72 75 63 74 20 63 61 action(struct ca 7ca0: 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 ckey_slot *slot) 7cb0: 20 7b 0a 09 63 61 63 6b 65 79 5f 72 65 74 20 63 {..cackey_ret c 7cc0: 61 63 6b 65 79 5f 63 6f 6e 6e 5f 72 65 74 3b 0a ackey_conn_ret;. 7cd0: 09 4c 4f 4e 47 20 73 63 61 72 64 5f 74 72 61 6e .LONG scard_tran 7ce0: 73 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f s_ret;...CACKEY_ 7cf0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 7d00: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 63 61 63 6b 65 lled.");...cacke 7d10: 79 5f 63 6f 6e 6e 5f 72 65 74 20 3d 20 63 61 63 y_conn_ret = cac 7d20: 6b 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 72 64 key_connect_card 7d30: 28 73 6c 6f 74 29 3b 0a 09 69 66 20 28 63 61 63 (slot);..if (cac 7d40: 6b 65 79 5f 63 6f 6e 6e 5f 72 65 74 20 21 3d 20 key_conn_ret != 7d50: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK 7d60: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 7d70: 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 6c UG_PRINTF("Unabl 7d80: 65 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 6f 20 e to connect to 7d90: 63 61 72 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 card, returning 7da0: 69 6e 20 65 72 72 6f 72 22 29 3b 0a 0a 09 09 72 in error");....r 7db0: 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 eturn(CACKEY_PCS 7dc0: 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d C_E_GENERIC);..} 7dd0: 0a 0a 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 ...slot->transac 7de0: 74 69 6f 6e 5f 64 65 70 74 68 2b 2b 3b 0a 0a 09 tion_depth++;... 7df0: 69 66 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 if (slot->transa 7e00: 63 74 69 6f 6e 5f 64 65 70 74 68 20 3e 20 31 20 ction_depth > 1 7e10: 26 26 20 21 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 && !slot->transa 7e20: 63 74 69 6f 6e 5f 6e 65 65 64 5f 68 77 5f 6c 6f ction_need_hw_lo 7e30: 63 6b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ck) {...CACKEY_D 7e40: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 41 6c 72 EBUG_PRINTF("Alr 7e50: 65 61 64 79 20 69 6e 20 61 20 74 72 61 6e 73 61 eady in a transa 7e60: 63 74 69 6f 6e 2c 20 70 65 72 66 6f 72 6d 69 6e ction, performin 7e70: 67 20 6e 6f 20 61 63 74 69 6f 6e 20 28 6e 65 77 g no action (new 7e80: 20 64 65 70 74 68 20 3d 20 25 69 29 22 2c 20 73 depth = %i)", s 7e90: 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e lot->transaction 7ea0: 5f 64 65 70 74 68 29 3b 0a 0a 09 09 72 65 74 75 _depth);....retu 7eb0: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 rn(CACKEY_PCSC_S 7ec0: 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 2d _OK);..}...slot- 7ed0: 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 6e 65 65 >transaction_nee 7ee0: 64 5f 68 77 5f 6c 6f 63 6b 20 3d 20 30 3b 0a 0a d_hw_lock = 0;.. 7ef0: 09 73 63 61 72 64 5f 74 72 61 6e 73 5f 72 65 74 .scard_trans_ret 7f00: 20 3d 20 53 43 61 72 64 42 65 67 69 6e 54 72 61 = SCardBeginTra 7f10: 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 2d 3e 70 nsaction(slot->p 7f20: 63 73 63 5f 63 61 72 64 29 3b 0a 09 69 66 20 28 csc_card);..if ( 7f30: 73 63 61 72 64 5f 74 72 61 6e 73 5f 72 65 74 20 scard_trans_ret 7f40: 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 != SCARD_S_SUCCE 7f50: 53 53 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 SS) {...CACKEY_D 7f60: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 EBUG_PRINTF("Una 7f70: 62 6c 65 20 74 6f 20 62 65 67 69 6e 20 74 72 61 ble to begin tra 7f80: 6e 73 61 63 74 69 6f 6e 2c 20 72 65 74 75 72 6e nsaction, return 7f90: 69 6e 67 20 69 6e 20 65 72 72 6f 72 22 29 3b 0a ing in error");. 7fa0: 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 7fb0: 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 _PCSC_E_GENERIC) 7fc0: 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 7fd0: 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 63 65 BUG_PRINTF("Suce 7fe0: 73 73 66 75 6c 6c 79 20 62 65 67 61 6e 20 74 72 ssfully began tr 7ff0: 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 73 6c 6f ansaction on slo 8000: 74 20 28 25 73 29 22 2c 20 73 6c 6f 74 2d 3e 70 t (%s)", slot->p 8010: 63 73 63 5f 72 65 61 64 65 72 29 3b 0a 0a 09 72 csc_reader);...r 8020: 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 eturn(CACKEY_PCS 8030: 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 C_S_OK);.}../*. 8040: 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 * SYNPOSIS. * 8050: 20 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 cackey_ret cac 8060: 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 key_end_transact 8070: 69 6f 6e 28 73 74 72 75 63 74 20 63 61 63 6b 65 ion(struct cacke 8080: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 29 3b 0a 20 y_slot *slot);. 8090: 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 *. * ARGUMENTS. 80a0: 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 73 6c 6f * cackey_slo 80b0: 74 20 2a 73 6c 6f 74 0a 20 2a 20 20 20 20 20 20 t *slot. * 80c0: 20 20 20 53 6c 6f 74 20 74 6f 20 73 65 6e 64 20 Slot to send 80d0: 63 6f 6d 6d 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 commands to. *. 80e0: 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 * RETURN VALUE. 80f0: 2a 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 * CACKEY_PCS 8100: 43 5f 53 5f 4f 4b 20 20 20 20 20 20 20 20 20 4f C_S_OK O 8110: 6e 20 73 75 63 63 65 73 73 0a 20 2a 20 20 20 20 n success. * 8120: 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 CACKEY_PCSC_E_G 8130: 45 4e 45 52 49 43 20 20 20 20 4f 6e 20 65 72 72 ENERIC On err 8140: 6f 72 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 or. *. * NOTES. 8150: 2a 20 20 20 20 20 54 68 69 73 20 66 75 6e 63 74 * This funct 8160: 69 6f 6e 20 72 65 71 75 69 72 65 73 20 22 63 61 ion requires "ca 8170: 63 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e 73 ckey_begin_trans 8180: 61 63 74 69 6f 6e 22 20 74 6f 20 62 65 20 63 61 action" to be ca 8190: 6c 6c 65 64 20 66 69 72 73 74 0a 20 2a 0a 20 2a lled first. *. * 81a0: 2f 0a 73 74 61 74 69 63 20 63 61 63 6b 65 79 5f /.static cackey_ 81b0: 72 65 74 20 63 61 63 6b 65 79 5f 65 6e 64 5f 74 ret cackey_end_t 81c0: 72 61 6e 73 61 63 74 69 6f 6e 28 73 74 72 75 63 ransaction(struc 81d0: 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 t cackey_slot *s 81e0: 6c 6f 74 29 20 7b 0a 09 4c 4f 4e 47 20 73 63 61 lot) {..LONG sca 81f0: 72 64 5f 74 72 61 6e 73 5f 72 65 74 3b 0a 0a 09 rd_trans_ret;... 8200: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 8210: 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 8220: 0a 09 69 66 20 28 21 73 6c 6f 74 2d 3e 70 63 73 ..if (!slot->pcs 8230: 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 c_card_connected 8240: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 8250: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 72 64 20 UG_PRINTF("Card 8260: 69 73 20 6e 6f 74 20 63 6f 6e 6e 65 63 74 65 64 is not connected 8270: 2c 20 75 6e 61 62 6c 65 20 74 6f 20 65 6e 64 20 , unable to end 8280: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 63 transaction on c 8290: 61 72 64 22 29 3b 0a 0a 09 09 69 66 20 28 73 6c ard");....if (sl 82a0: 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f ot->transaction_ 82b0: 64 65 70 74 68 20 3e 20 30 29 20 7b 0a 09 09 09 depth > 0) {.... 82c0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 82d0: 4e 54 46 28 22 44 65 63 72 65 61 73 69 6e 67 20 NTF("Decreasing 82e0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 64 65 70 74 transaction dept 82f0: 68 20 61 6e 64 20 61 73 6b 69 6e 67 20 66 6f 72 h and asking for 8300: 20 61 20 68 61 72 64 77 61 72 65 20 6c 6f 63 6b a hardware lock 8310: 20 6f 6e 20 74 68 65 20 6e 65 78 74 20 62 65 67 on the next beg 8320: 69 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 28 in transaction ( 8330: 63 75 72 72 65 6e 74 20 64 65 70 74 68 20 3d 20 current depth = 8340: 25 69 29 22 2c 20 73 6c 6f 74 2d 3e 74 72 61 6e %i)", slot->tran 8350: 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 29 3b 0a saction_depth);. 8360: 0a 09 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 ....slot->transa 8370: 63 74 69 6f 6e 5f 64 65 70 74 68 2d 2d 3b 0a 0a ction_depth--;.. 8380: 09 09 09 69 66 20 28 73 6c 6f 74 2d 3e 74 72 61 ...if (slot->tra 8390: 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3e nsaction_depth > 83a0: 20 30 29 20 7b 0a 09 09 09 09 73 6c 6f 74 2d 3e 0) {.....slot-> 83b0: 74 72 61 6e 73 61 63 74 69 6f 6e 5f 6e 65 65 64 transaction_need 83c0: 5f 68 77 5f 6c 6f 63 6b 20 3d 20 31 3b 0a 09 09 _hw_lock = 1;... 83d0: 09 7d 0a 09 09 7d 0a 0a 09 09 72 65 74 75 72 6e .}...}....return 83e0: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 (CACKEY_PCSC_E_G 83f0: 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 69 66 ENERIC);..}...if 8400: 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 (slot->transact 8410: 69 6f 6e 5f 64 65 70 74 68 20 3d 3d 20 30 29 20 ion_depth == 0) 8420: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 8430: 5f 50 52 49 4e 54 46 28 22 54 65 72 6d 69 6e 61 _PRINTF("Termina 8440: 74 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69 ting a transacti 8450: 6f 6e 20 74 68 61 74 20 68 61 73 20 6e 6f 74 20 on that has not 8460: 62 65 67 75 6e 21 22 29 3b 0a 0a 09 09 72 65 74 begun!");....ret 8470: 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f urn(CACKEY_PCSC_ 8480: 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a E_GENERIC);..}.. 8490: 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 .slot->transacti 84a0: 6f 6e 5f 64 65 70 74 68 2d 2d 3b 0a 0a 09 69 66 on_depth--;...if 84b0: 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 (slot->transact 84c0: 69 6f 6e 5f 64 65 70 74 68 20 3e 20 30 29 20 7b ion_depth > 0) { 84d0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 84e0: 50 52 49 4e 54 46 28 22 54 72 61 6e 73 61 63 74 PRINTF("Transact 84f0: 69 6f 6e 73 20 73 74 69 6c 6c 20 69 6e 20 70 72 ions still in pr 8500: 6f 67 72 65 73 73 2c 20 6e 6f 74 20 74 65 72 6d ogress, not term 8510: 69 6e 61 74 69 6e 67 20 6f 6e 2d 63 61 72 64 20 inating on-card 8520: 54 72 61 6e 73 61 63 74 69 6f 6e 20 28 63 75 72 Transaction (cur 8530: 72 65 6e 74 20 64 65 70 74 68 20 3d 20 25 69 29 rent depth = %i) 8540: 22 2c 20 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 ", slot->transac 8550: 74 69 6f 6e 5f 64 65 70 74 68 29 3b 0a 0a 09 09 tion_depth);.... 8560: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 8570: 53 43 5f 53 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 73 SC_S_OK);..}...s 8580: 63 61 72 64 5f 74 72 61 6e 73 5f 72 65 74 20 3d card_trans_ret = 8590: 20 53 43 61 72 64 45 6e 64 54 72 61 6e 73 61 63 SCardEndTransac 85a0: 74 69 6f 6e 28 73 6c 6f 74 2d 3e 70 63 73 63 5f tion(slot->pcsc_ 85b0: 63 61 72 64 2c 20 53 43 41 52 44 5f 4c 45 41 56 card, SCARD_LEAV 85c0: 45 5f 43 41 52 44 29 3b 0a 09 69 66 20 28 73 63 E_CARD);..if (sc 85d0: 61 72 64 5f 74 72 61 6e 73 5f 72 65 74 20 21 3d ard_trans_ret != 85e0: 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 SCARD_S_SUCCESS 85f0: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 8600: 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 6c UG_PRINTF("Unabl 8610: 65 20 74 6f 20 65 6e 64 20 74 72 61 6e 73 61 63 e to end transac 8620: 74 69 6f 6e 2c 20 72 65 74 75 72 6e 69 6e 67 20 tion, returning 8630: 69 6e 20 65 72 72 6f 72 22 29 3b 0a 0a 09 09 72 in error");....r 8640: 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 eturn(CACKEY_PCS 8650: 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d C_E_GENERIC);..} 8660: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 8670: 50 52 49 4e 54 46 28 22 53 75 63 65 73 73 66 75 PRINTF("Sucessfu 8680: 6c 6c 79 20 74 65 72 6d 69 6e 61 74 65 64 20 74 lly terminated t 8690: 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 73 6c ransaction on sl 86a0: 6f 74 20 28 25 73 29 22 2c 20 73 6c 6f 74 2d 3e ot (%s)", slot-> 86b0: 70 63 73 63 5f 72 65 61 64 65 72 29 3b 0a 0a 09 pcsc_reader);... 86c0: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 86d0: 53 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 20 SC_S_OK);.}../* 86e0: 41 50 44 55 20 52 65 6c 61 74 65 64 20 46 75 6e APDU Related Fun 86f0: 63 74 69 6f 6e 73 20 2a 2f 0a 2f 2a 0a 20 2a 20 ctions */./*. * 8700: 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 SYNPOSIS. * 8710: 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 cackey_ret cacke 8720: 79 5f 73 65 6e 64 5f 61 70 64 75 28 73 74 72 75 y_send_apdu(stru 8730: 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a ct cackey_slot * 8740: 73 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 slot, unsigned c 8750: 68 61 72 20 63 6c 61 73 73 2c 20 75 6e 73 69 67 har class, unsig 8760: 6e 65 64 20 63 68 61 72 20 69 6e 73 74 72 75 63 ned char instruc 8770: 74 69 6f 6e 2c 20 75 6e 73 69 67 6e 65 64 20 63 tion, unsigned c 8780: 68 61 72 20 70 31 2c 20 75 6e 73 69 67 6e 65 64 har p1, unsigned 8790: 20 63 68 61 72 20 70 32 2c 20 75 6e 73 69 67 6e char p2, unsign 87a0: 65 64 20 63 68 61 72 20 6c 63 2c 20 75 6e 73 69 ed char lc, unsi 87b0: 67 6e 65 64 20 63 68 61 72 20 2a 64 61 74 61 2c gned char *data, 87c0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c unsigned char l 87d0: 65 2c 20 75 69 6e 74 31 36 5f 74 20 2a 72 65 73 e, uint16_t *res 87e0: 70 63 6f 64 65 2c 20 75 6e 73 69 67 6e 65 64 20 pcode, unsigned 87f0: 63 68 61 72 20 2a 72 65 73 70 64 61 74 61 2c 20 char *respdata, 8800: 73 69 7a 65 5f 74 20 2a 72 65 73 70 64 61 74 61 size_t *respdata 8810: 5f 6c 65 6e 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 _len);. *. * ARG 8820: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 63 61 UMENTS. * ca 8830: 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a ckey_slot *slot. 8840: 20 2a 20 20 20 20 20 20 20 20 20 53 6c 6f 74 20 * Slot 8850: 74 6f 20 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 to send commands 8860: 20 74 6f 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e to. *. * un 8870: 73 69 67 6e 65 64 20 63 68 61 72 20 63 6c 61 73 signed char clas 8880: 73 0a 20 2a 20 20 20 20 20 20 20 20 20 41 50 44 s. * APD 8890: 55 20 43 6c 61 73 73 20 28 47 53 43 49 53 5f 43 U Class (GSCIS_C 88a0: 4c 41 53 53 5f 49 53 4f 37 38 31 36 20 6f 72 20 LASS_ISO7816 or 88b0: 47 53 43 49 53 5f 43 4c 41 53 53 5f 47 4c 4f 42 GSCIS_CLASS_GLOB 88c0: 41 4c 5f 50 4c 41 54 46 4f 52 4d 0a 20 2a 20 20 AL_PLATFORM. * 88d0: 20 20 20 20 20 20 20 75 73 75 61 6c 6c 79 29 2c usually), 88e0: 20 28 43 4c 41 29 0a 20 2a 0a 20 2a 20 20 20 20 (CLA). *. * 88f0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 69 unsigned char i 8900: 6e 73 74 72 75 63 74 69 6f 6e 0a 20 2a 20 20 20 nstruction. * 8910: 20 20 20 20 20 20 41 50 44 55 20 49 6e 73 74 72 APDU Instr 8920: 75 63 74 69 6f 6e 20 28 49 4e 53 29 0a 20 2a 0a uction (INS). *. 8930: 20 2a 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 * unsigned 8940: 63 68 61 72 20 70 31 0a 20 2a 20 20 20 20 20 20 char p1. * 8950: 20 20 20 41 50 44 55 20 50 61 72 61 6d 65 74 65 APDU Paramete 8960: 72 20 31 20 28 50 31 29 0a 20 2a 0a 20 2a 20 20 r 1 (P1). *. * 8970: 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 unsigned char 8980: 20 70 32 0a 20 2a 20 20 20 20 20 20 20 20 20 41 p2. * A 8990: 50 44 55 20 50 61 72 61 6d 65 74 65 72 20 32 20 PDU Parameter 2 89a0: 28 50 32 29 0a 20 2a 0a 20 2a 20 20 20 20 20 75 (P2). *. * u 89b0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c 63 0a nsigned char lc. 89c0: 20 2a 20 20 20 20 20 20 20 20 20 41 50 44 55 20 * APDU 89d0: 4c 65 6e 67 74 68 20 6f 66 20 43 6f 6e 74 65 6e Length of Conten 89e0: 74 20 28 4c 63 29 20 2d 2d 20 74 68 69 73 20 69 t (Lc) -- this i 89f0: 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 s the length of 8a00: 22 64 61 74 61 22 0a 20 2a 20 20 20 20 20 20 20 "data". * 8a10: 20 20 70 61 72 61 6d 65 74 65 72 2e 20 20 49 66 parameter. If 8a20: 20 22 64 61 74 61 22 20 69 73 20 73 70 65 63 69 "data" is speci 8a30: 66 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 74 68 fied as NULL, th 8a40: 69 73 20 70 61 72 61 6d 65 74 65 72 20 77 69 6c is parameter wil 8a50: 6c 0a 20 2a 20 20 20 20 20 20 20 20 20 62 65 20 l. * be 8a60: 69 67 6e 6f 72 65 64 2e 0a 20 2a 0a 20 2a 20 20 ignored.. *. * 8a70: 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 unsigned char 8a80: 20 2a 64 61 74 61 0a 20 2a 20 20 20 20 20 20 20 *data. * 8a90: 20 20 50 6f 69 6e 74 65 72 20 74 6f 20 62 75 66 Pointer to buf 8aa0: 66 65 72 20 74 6f 20 73 65 6e 64 2e 20 20 49 74 fer to send. It 8ab0: 20 73 68 6f 75 6c 64 20 62 65 20 22 4c 63 22 20 should be "Lc" 8ac0: 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 49 66 0a bytes long. If. 8ad0: 20 2a 20 20 20 20 20 20 20 20 20 73 70 65 63 69 * speci 8ae0: 66 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 22 4c fied as NULL, "L 8af0: 63 22 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 73 c" will not be s 8b00: 65 6e 74 2c 20 61 6e 64 20 74 68 69 73 20 62 75 ent, and this bu 8b10: 66 66 65 72 20 77 69 6c 6c 20 62 65 0a 20 2a 20 ffer will be. * 8b20: 20 20 20 20 20 20 20 20 69 67 6e 6f 72 65 64 2e ignored. 8b30: 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e 73 69 67 . *. * unsig 8b40: 6e 65 64 20 63 68 61 72 20 6c 65 0a 20 2a 20 20 ned char le. * 8b50: 20 20 20 20 20 20 20 41 50 44 55 20 4c 65 6e 67 APDU Leng 8b60: 74 68 20 6f 66 20 45 78 70 65 63 74 61 74 69 6f th of Expectatio 8b70: 6e 20 28 4c 65 29 20 2d 2d 20 74 68 69 73 20 69 n (Le) -- this i 8b80: 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 s the length of 8b90: 74 68 65 0a 20 2a 20 20 20 20 20 20 20 20 20 65 the. * e 8ba0: 78 70 65 63 74 65 64 20 72 65 70 6c 79 2e 20 20 xpected reply. 8bb0: 49 66 20 74 68 69 73 20 69 73 20 73 70 65 63 69 If this is speci 8bc0: 66 69 65 64 20 61 73 20 30 20 74 68 65 6e 20 69 fied as 0 then i 8bd0: 74 20 77 69 6c 6c 20 6e 6f 74 0a 20 2a 20 20 20 t will not. * 8be0: 20 20 20 20 20 20 62 65 20 73 65 6e 74 2e 0a 20 be sent.. 8bf0: 2a 0a 20 2a 20 20 20 20 20 75 69 6e 74 31 36 5f *. * uint16_ 8c00: 74 20 2a 72 65 73 70 63 6f 64 65 0a 20 2a 20 20 t *respcode. * 8c10: 20 20 20 20 20 20 20 5b 4f 55 54 5d 20 50 6f 69 [OUT] Poi 8c20: 6e 74 65 72 20 74 6f 20 73 74 6f 72 61 67 65 20 nter to storage 8c30: 6f 66 20 41 50 44 55 20 72 65 73 70 6f 6e 73 65 of APDU response 8c40: 20 63 6f 64 65 2e 20 20 49 66 20 74 68 69 73 20 code. If this 8c50: 69 73 0a 20 2a 20 20 20 20 20 20 20 20 20 73 70 is. * sp 8c60: 65 63 69 66 69 65 64 20 61 73 20 4e 55 4c 4c 2c ecified as NULL, 8c70: 20 74 68 65 20 72 65 73 70 6f 6e 73 65 20 63 6f the response co 8c80: 64 65 20 77 69 6c 6c 20 62 65 20 64 69 73 63 61 de will be disca 8c90: 72 64 65 64 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 rded.. *. * 8ca0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 72 unsigned char *r 8cb0: 65 73 70 64 61 74 61 0a 20 2a 20 20 20 20 20 20 espdata. * 8cc0: 20 20 20 5b 4f 55 54 5d 20 50 6f 69 6e 74 65 72 [OUT] Pointer 8cd0: 20 74 6f 20 73 74 6f 72 61 67 65 20 6f 66 20 41 to storage of A 8ce0: 50 44 55 20 72 65 73 70 6f 6e 73 65 20 64 61 74 PDU response dat 8cf0: 61 2e 20 20 49 66 20 74 68 69 73 20 69 73 0a 20 a. If this is. 8d00: 2a 20 20 20 20 20 20 20 20 20 73 70 65 63 69 66 * specif 8d10: 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 74 68 65 ied as NULL, the 8d20: 20 72 65 73 70 6f 6e 73 65 20 64 61 74 61 20 77 response data w 8d30: 69 6c 6c 20 62 65 20 64 69 73 63 61 72 64 65 64 ill be discarded 8d40: 2e 20 20 49 66 0a 20 2a 20 20 20 20 20 20 20 20 . If. * 8d50: 20 74 68 65 20 22 72 65 73 70 64 61 74 61 5f 6c the "respdata_l 8d60: 65 6e 22 20 70 61 72 61 6d 65 74 65 72 20 69 73 en" parameter is 8d70: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 4e 55 specified as NU 8d80: 4c 4c 2c 20 74 68 69 73 20 62 75 66 66 65 72 0a LL, this buffer. 8d90: 20 2a 20 20 20 20 20 20 20 20 20 77 69 6c 6c 20 * will 8da0: 6e 6f 74 20 62 65 20 75 70 64 61 74 65 64 2e 0a not be updated.. 8db0: 20 2a 0a 20 2a 20 20 20 20 20 73 69 7a 65 5f 74 *. * size_t 8dc0: 20 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e 0a 20 *respdata_len. 8dd0: 2a 20 20 20 20 20 20 20 20 20 5b 49 4e 2c 20 4f * [IN, O 8de0: 55 54 5d 20 50 6f 69 6e 74 65 72 20 69 6e 69 74 UT] Pointer init 8df0: 69 61 6c 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e ialing containin 8e00: 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 g the size of th 8e10: 65 20 22 72 65 73 70 64 61 74 61 22 0a 20 2a 20 e "respdata". * 8e20: 20 20 20 20 20 20 20 20 62 75 66 66 65 72 2e 20 buffer. 8e30: 20 42 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e Before returnin 8e40: 67 2c 20 74 68 65 20 70 6f 69 6e 74 65 64 20 74 g, the pointed t 8e50: 6f 20 76 61 6c 75 65 20 69 73 20 75 70 64 61 74 o value is updat 8e60: 65 64 20 74 6f 20 74 68 65 0a 20 2a 20 20 20 20 ed to the. * 8e70: 20 20 20 20 20 6e 75 6d 62 65 72 20 6f 66 20 62 number of b 8e80: 79 74 65 73 20 77 72 69 74 74 65 6e 20 74 6f 20 ytes written to 8e90: 74 68 65 20 62 75 66 66 65 72 2e 20 20 49 66 20 the buffer. If 8ea0: 74 68 69 73 20 69 73 20 73 70 65 63 69 66 69 65 this is specifie 8eb0: 64 20 61 73 0a 20 2a 20 20 20 20 20 20 20 20 20 d as. * 8ec0: 4e 55 4c 4c 2c 20 69 74 20 77 69 6c 6c 20 6e 6f NULL, it will no 8ed0: 74 20 62 65 20 75 70 64 61 74 65 64 2c 20 61 6e t be updated, an 8ee0: 64 20 22 72 65 73 70 64 61 74 61 22 20 77 69 6c d "respdata" wil 8ef0: 6c 20 62 65 20 69 67 6e 6f 72 65 64 20 63 61 75 l be ignored cau 8f00: 73 69 6e 67 0a 20 2a 20 20 20 20 20 20 20 20 20 sing. * 8f10: 74 68 65 20 72 65 73 70 6f 6e 73 65 20 64 61 74 the response dat 8f20: 61 20 74 6f 20 62 65 20 64 69 73 63 61 72 64 65 a to be discarde 8f30: 64 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 d.. *. * RETURN 8f40: 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 43 41 43 VALUE. * CAC 8f50: 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 20 20 20 KEY_PCSC_S_OK 8f60: 20 20 20 20 20 20 20 20 4f 6e 20 73 75 63 63 65 On succe 8f70: 73 73 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 59 ss. * CACKEY 8f80: 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 20 _PCSC_E_GENERIC 8f90: 20 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 2a On error. * 8fa0: 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 CACKEY_PCSC 8fb0: 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 20 20 _E_TOKENABSENT 8fc0: 49 66 20 74 68 65 20 73 65 6e 64 69 6e 67 20 66 If the sending f 8fd0: 61 69 6c 65 64 20 62 65 63 61 75 73 65 20 74 68 ailed because th 8fe0: 65 20 74 6f 6b 65 6e 20 69 73 0a 20 2a 20 20 20 e token is. * 8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9000: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 62 73 abs 9010: 65 6e 74 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a ent. *. * NOTES. 9020: 20 2a 20 20 20 20 20 54 68 69 73 20 66 75 6e 63 * This func 9030: 74 69 6f 6e 20 77 69 6c 6c 20 63 6f 6e 6e 65 63 tion will connec 9040: 74 20 74 6f 20 74 68 65 20 50 43 2f 53 43 20 43 t to the PC/SC C 9050: 6f 6e 6e 65 63 74 69 6f 6e 20 4d 61 6e 61 67 65 onnection Manage 9060: 72 20 76 69 61 0a 20 2a 20 20 20 20 20 63 61 63 r via. * cac 9070: 6b 65 79 5f 70 63 73 63 5f 63 6f 6e 6e 65 63 74 key_pcsc_connect 9080: 28 29 20 69 66 20 6e 65 65 64 65 64 2e 0a 20 2a () if needed.. * 9090: 0a 20 2a 20 20 20 20 20 49 74 20 77 69 6c 6c 20 . * It will 90a0: 63 6f 6e 6e 65 63 74 20 74 6f 20 74 68 65 20 63 connect to the c 90b0: 61 72 64 20 69 6e 20 74 68 65 20 72 65 61 64 65 ard in the reade 90c0: 72 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 r attached to th 90d0: 65 20 73 6c 6f 74 0a 20 2a 20 20 20 20 20 73 70 e slot. * sp 90e0: 65 63 69 66 69 65 64 2e 20 20 49 74 20 77 69 6c ecified. It wil 90f0: 6c 20 72 65 63 6f 6e 6e 65 63 74 20 74 6f 20 74 l reconnect to t 9100: 68 65 20 63 61 72 64 20 69 66 20 74 68 65 20 63 he card if the c 9110: 6f 6e 6e 65 63 74 69 6f 6e 0a 20 2a 20 20 20 20 onnection. * 9120: 20 67 6f 65 73 20 61 77 61 79 2e 0a 20 2a 0a 20 goes away.. *. 9130: 2a 2f 0a 73 74 61 74 69 63 20 63 61 63 6b 65 79 */.static cackey 9140: 5f 72 65 74 20 63 61 63 6b 65 79 5f 73 65 6e 64 _ret cackey_send 9150: 5f 61 70 64 75 28 73 74 72 75 63 74 20 63 61 63 _apdu(struct cac 9160: 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 key_slot *slot, 9170: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 6c unsigned char cl 9180: 61 73 73 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 ass, unsigned ch 9190: 61 72 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 ar instruction, 91a0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 70 31 unsigned char p1 91b0: 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 , unsigned char 91c0: 70 32 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 p2, unsigned cha 91d0: 72 20 6c 63 2c 20 75 6e 73 69 67 6e 65 64 20 63 r lc, unsigned c 91e0: 68 61 72 20 2a 64 61 74 61 2c 20 75 6e 73 69 67 har *data, unsig 91f0: 6e 65 64 20 63 68 61 72 20 6c 65 2c 20 75 69 6e ned char le, uin 9200: 74 31 36 5f 74 20 2a 72 65 73 70 63 6f 64 65 2c t16_t *respcode, 9210: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a unsigned char * 9220: 72 65 73 70 64 61 74 61 2c 20 73 69 7a 65 5f 74 respdata, size_t 9230: 20 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e 29 20 *respdata_len) 9240: 7b 0a 09 75 69 6e 74 38 5f 74 20 6d 61 6a 6f 72 {..uint8_t major 9250: 5f 72 63 2c 20 6d 69 6e 6f 72 5f 72 63 3b 0a 09 _rc, minor_rc;.. 9260: 73 69 7a 65 5f 74 20 62 79 74 65 73 5f 74 6f 5f size_t bytes_to_ 9270: 63 6f 70 79 2c 20 74 6d 70 5f 72 65 73 70 64 61 copy, tmp_respda 9280: 74 61 5f 6c 65 6e 3b 0a 09 4c 50 43 53 43 41 52 ta_len;..LPCSCAR 9290: 44 5f 49 4f 5f 52 45 51 55 45 53 54 20 70 69 6f D_IO_REQUEST pio 92a0: 53 65 6e 64 50 63 69 3b 0a 09 44 57 4f 52 44 20 SendPci;..DWORD 92b0: 70 72 6f 74 6f 63 6f 6c 3b 0a 09 44 57 4f 52 44 protocol;..DWORD 92c0: 20 78 6d 69 74 5f 6c 65 6e 2c 20 72 65 63 76 5f xmit_len, recv_ 92d0: 6c 65 6e 3b 0a 09 4c 4f 4e 47 20 73 63 61 72 64 len;..LONG scard 92e0: 5f 78 6d 69 74 5f 72 65 74 2c 20 73 63 61 72 64 _xmit_ret, scard 92f0: 5f 72 65 63 6f 6e 6e 5f 72 65 74 3b 0a 09 42 59 _reconn_ret;..BY 9300: 54 45 20 78 6d 69 74 5f 62 75 66 5b 31 30 32 34 TE xmit_buf[1024 9310: 5d 2c 20 72 65 63 76 5f 62 75 66 5b 31 30 32 34 ], recv_buf[1024 9320: 5d 3b 0a 09 69 6e 74 20 70 63 73 63 5f 63 6f 6e ];..int pcsc_con 9330: 6e 65 63 74 5f 72 65 74 2c 20 70 63 73 63 5f 67 nect_ret, pcsc_g 9340: 65 74 72 65 73 70 5f 72 65 74 3b 0a 09 69 6e 74 etresp_ret;..int 9350: 20 69 64 78 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 idx;...CACKEY_D 9360: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 9370: 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 73 led.");...if (!s 9380: 6c 6f 74 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f lot) {...CACKEY_ 9390: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 49 6e DEBUG_PRINTF("In 93a0: 76 61 6c 69 64 20 73 6c 6f 74 20 73 70 65 63 69 valid slot speci 93b0: 66 69 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 fied.");....retu 93c0: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 93d0: 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 _GENERIC);..}... 93e0: 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 pcsc_connect_ret 93f0: 20 3d 20 63 61 63 6b 65 79 5f 63 6f 6e 6e 65 63 = cackey_connec 9400: 74 5f 63 61 72 64 28 73 6c 6f 74 29 3b 0a 09 69 t_card(slot);..i 9410: 66 20 28 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f f (pcsc_connect_ 9420: 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 ret != CACKEY_PC 9430: 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 SC_S_OK) {...CAC 9440: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 9450: 28 22 55 6e 61 62 6c 65 20 74 6f 20 63 6f 6e 6e ("Unable to conn 9460: 65 63 74 20 74 6f 20 63 61 72 64 2c 20 72 65 74 ect to card, ret 9470: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur 9480: 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 e");....return(C 9490: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e ACKEY_PCSC_E_GEN 94a0: 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 44 ERIC);..}.../* D 94b0: 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20 70 etermine which p 94c0: 72 6f 74 6f 63 6f 6c 20 74 6f 20 73 65 6e 64 20 rotocol to send 94d0: 75 73 69 6e 67 20 2a 2f 0a 09 73 77 69 74 63 68 using */..switch 94e0: 20 28 73 6c 6f 74 2d 3e 70 72 6f 74 6f 63 6f 6c (slot->protocol 94f0: 29 20 7b 0a 09 09 63 61 73 65 20 53 43 41 52 44 ) {...case SCARD 9500: 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 3a 0a 09 09 _PROTOCOL_T0:... 9510: 09 70 69 6f 53 65 6e 64 50 63 69 20 3d 20 53 43 .pioSendPci = SC 9520: 41 52 44 5f 50 43 49 5f 54 30 3b 0a 0a 09 09 09 ARD_PCI_T0;..... 9530: 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 53 43 break;...case SC 9540: 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31 3a ARD_PROTOCOL_T1: 9550: 0a 09 09 09 70 69 6f 53 65 6e 64 50 63 69 20 3d ....pioSendPci = 9560: 20 53 43 41 52 44 5f 50 43 49 5f 54 31 3b 0a 0a SCARD_PCI_T1;.. 9570: 09 09 09 62 72 65 61 6b 3b 0a 09 09 64 65 66 61 ...break;...defa 9580: 75 6c 74 3a 0a 09 09 09 43 41 43 4b 45 59 5f 44 ult:....CACKEY_D 9590: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 49 6e 76 EBUG_PRINTF("Inv 95a0: 61 6c 69 64 20 70 72 6f 74 6f 63 6f 6c 20 66 6f alid protocol fo 95b0: 75 6e 64 2c 20 61 62 6f 72 74 69 6e 67 2e 22 29 und, aborting.") 95c0: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 41 43 ;.....return(CAC 95d0: 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 KEY_PCSC_E_GENER 95e0: 49 43 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 54 72 61 IC);..}.../* Tra 95f0: 6e 73 6d 69 74 20 2a 2f 0a 09 78 6d 69 74 5f 6c nsmit */..xmit_l 9600: 65 6e 20 3d 20 30 3b 0a 09 78 6d 69 74 5f 62 75 en = 0;..xmit_bu 9610: 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 f[xmit_len++] = 9620: 63 6c 61 73 73 3b 0a 09 78 6d 69 74 5f 62 75 66 class;..xmit_buf 9630: 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 69 [xmit_len++] = i 9640: 6e 73 74 72 75 63 74 69 6f 6e 3b 0a 09 78 6d 69 nstruction;..xmi 9650: 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b t_buf[xmit_len++ 9660: 5d 20 3d 20 70 31 3b 0a 09 78 6d 69 74 5f 62 75 ] = p1;..xmit_bu 9670: 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 f[xmit_len++] = 9680: 70 32 3b 0a 09 69 66 20 28 64 61 74 61 29 20 7b p2;..if (data) { 9690: 0a 09 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 ...xmit_buf[xmit 96a0: 5f 6c 65 6e 2b 2b 5d 20 3d 20 6c 63 3b 0a 09 09 _len++] = lc;... 96b0: 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 for (idx = 0; id 96c0: 78 20 3c 20 6c 63 3b 20 69 64 78 2b 2b 29 20 7b x < lc; idx++) { 96d0: 0a 09 09 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 ....xmit_buf[xmi 96e0: 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 64 61 74 61 5b t_len++] = data[ 96f0: 69 64 78 5d 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 idx];...}..}...i 9700: 66 20 28 6c 65 20 21 3d 20 30 78 30 30 29 20 7b f (le != 0x00) { 9710: 0a 09 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69 74 ...xmit_buf[xmit 9720: 5f 6c 65 6e 2b 2b 5d 20 3d 20 6c 65 3b 0a 09 7d _len++] = le;..} 9730: 0a 0a 09 2f 2a 20 42 65 67 69 6e 20 53 6d 61 72 .../* Begin Smar 9740: 74 63 61 72 64 20 54 72 61 6e 73 61 63 74 69 6f tcard Transactio 9750: 6e 20 2a 2f 0a 09 63 61 63 6b 65 79 5f 62 65 67 n */..cackey_beg 9760: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 in_transaction(s 9770: 6c 6f 74 29 3b 0a 0a 09 69 66 20 28 63 6c 61 73 lot);...if (clas 9780: 73 20 3d 3d 20 47 53 43 49 53 5f 43 4c 41 53 53 s == GSCIS_CLASS 9790: 5f 49 53 4f 37 38 31 36 20 26 26 20 69 6e 73 74 _ISO7816 && inst 97a0: 72 75 63 74 69 6f 6e 20 3d 3d 20 47 53 43 49 53 ruction == GSCIS 97b0: 5f 49 4e 53 54 52 5f 56 45 52 49 46 59 20 26 26 _INSTR_VERIFY && 97c0: 20 70 31 20 3d 3d 20 30 78 30 30 20 26 26 20 70 p1 == 0x00 && p 97d0: 32 20 3d 3d 20 30 78 30 30 29 20 7b 0a 09 09 43 2 == 0x00) {...C 97e0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 97f0: 54 46 28 22 53 65 6e 64 69 6e 67 20 41 50 44 55 TF("Sending APDU 9800: 3a 20 3c 3c 63 65 6e 73 6f 72 65 64 3e 3e 22 29 : <<censored>>") 9810: 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 43 41 ;..} else {...CA 9820: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 9830: 42 55 46 28 22 53 65 6e 64 69 6e 67 20 41 50 44 BUF("Sending APD 9840: 55 3a 22 2c 20 78 6d 69 74 5f 62 75 66 2c 20 78 U:", xmit_buf, x 9850: 6d 69 74 5f 6c 65 6e 29 3b 0a 09 7d 0a 0a 09 72 mit_len);..}...r 9860: 65 63 76 5f 6c 65 6e 20 3d 20 73 69 7a 65 6f 66 ecv_len = sizeof 9870: 28 72 65 63 76 5f 62 75 66 29 3b 0a 09 73 63 61 (recv_buf);..sca 9880: 72 64 5f 78 6d 69 74 5f 72 65 74 20 3d 20 53 43 rd_xmit_ret = SC 9890: 61 72 64 54 72 61 6e 73 6d 69 74 28 73 6c 6f 74 ardTransmit(slot 98a0: 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 70 69 6f ->pcsc_card, pio 98b0: 53 65 6e 64 50 63 69 2c 20 78 6d 69 74 5f 62 75 SendPci, xmit_bu 98c0: 66 2c 20 78 6d 69 74 5f 6c 65 6e 2c 20 4e 55 4c f, xmit_len, NUL 98d0: 4c 2c 20 72 65 63 76 5f 62 75 66 2c 20 26 72 65 L, recv_buf, &re 98e0: 63 76 5f 6c 65 6e 29 3b 0a 0a 09 69 66 20 28 73 cv_len);...if (s 98f0: 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 20 3d 3d card_xmit_ret == 9900: 20 53 43 41 52 44 5f 45 5f 4e 4f 54 5f 54 52 41 SCARD_E_NOT_TRA 9910: 4e 53 41 43 54 45 44 29 20 7b 0a 09 09 43 41 43 NSACTED) {...CAC 9920: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 9930: 28 22 46 61 69 6c 65 64 20 74 6f 20 73 65 6e 64 ("Failed to send 9940: 20 41 50 44 55 20 74 6f 20 63 61 72 64 20 28 53 APDU to card (S 9950: 43 61 72 64 54 72 61 6e 73 6d 69 74 28 29 20 3d CardTransmit() = 9960: 20 25 73 2f 25 6c 78 29 2c 20 77 69 6c 6c 20 61 %s/%lx), will a 9970: 73 6b 20 63 61 6c 6c 69 6e 67 20 66 75 6e 63 74 sk calling funct 9980: 69 6f 6e 20 74 6f 20 72 65 74 72 79 20 28 6e 6f ion to retry (no 9990: 74 20 72 65 73 65 74 74 69 6e 67 20 63 61 72 64 t resetting card 99a0: 29 2e 2e 2e 22 2c 20 43 41 43 4b 45 59 5f 44 45 )...", CACKEY_DE 99b0: 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 BUG_FUNC_SCARDER 99c0: 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f 78 R_TO_STR(scard_x 99d0: 6d 69 74 5f 72 65 74 29 2c 20 28 75 6e 73 69 67 mit_ret), (unsig 99e0: 6e 65 64 20 6c 6f 6e 67 29 20 73 63 61 72 64 5f ned long) scard_ 99f0: 78 6d 69 74 5f 72 65 74 29 3b 0a 0a 09 09 2f 2a xmit_ret);..../* 9a00: 20 42 65 67 69 6e 20 53 6d 61 72 74 63 61 72 64 Begin Smartcard 9a10: 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a Transaction */. 9a20: 09 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 ..cackey_end_tra 9a30: 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a nsaction(slot);. 9a40: 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY 9a50: 5f 50 43 53 43 5f 45 5f 52 45 54 52 59 29 3b 0a _PCSC_E_RETRY);. 9a60: 09 7d 0a 0a 09 69 66 20 28 73 63 61 72 64 5f 78 .}...if (scard_x 9a70: 6d 69 74 5f 72 65 74 20 21 3d 20 53 43 41 52 44 mit_ret != SCARD 9a80: 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 _S_SUCCESS) {... 9a90: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 9aa0: 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 73 NTF("Failed to s 9ab0: 65 6e 64 20 41 50 44 55 20 74 6f 20 63 61 72 64 end APDU to card 9ac0: 20 28 53 43 61 72 64 54 72 61 6e 73 6d 69 74 28 (SCardTransmit( 9ad0: 29 20 3d 20 25 73 2f 25 6c 78 29 22 2c 20 43 41 ) = %s/%lx)", CA 9ae0: 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f CKEY_DEBUG_FUNC_ 9af0: 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 SCARDERR_TO_STR( 9b00: 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 2c scard_xmit_ret), 9b10: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 9b20: 20 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 scard_xmit_ret) 9b30: 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 9b40: 47 5f 50 52 49 4e 54 46 28 22 4d 61 72 6b 69 6e G_PRINTF("Markin 9b50: 67 20 73 6c 6f 74 20 61 73 20 68 61 76 69 6e 67 g slot as having 9b60: 20 62 65 65 6e 20 72 65 73 65 74 22 29 3b 0a 09 been reset");.. 9b70: 09 63 61 63 6b 65 79 5f 6d 61 72 6b 5f 73 6c 6f .cackey_mark_slo 9b80: 74 5f 72 65 73 65 74 28 73 6c 6f 74 29 3b 0a 0a t_reset(slot);.. 9b90: 09 09 69 66 20 28 73 63 61 72 64 5f 78 6d 69 74 ..if (scard_xmit 9ba0: 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f 57 5f _ret == SCARD_W_ 9bb0: 52 45 53 45 54 5f 43 41 52 44 29 20 7b 0a 09 09 RESET_CARD) {... 9bc0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 9bd0: 49 4e 54 46 28 22 52 65 73 65 74 20 72 65 71 75 INTF("Reset requ 9be0: 69 72 65 64 2c 20 70 6c 65 61 73 65 20 68 6f 6c ired, please hol 9bf0: 64 2e 2e 2e 22 29 3b 0a 0a 09 09 09 73 63 61 72 d...");.....scar 9c00: 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 20 3d 20 63 d_reconn_ret = c 9c10: 61 63 6b 65 79 5f 72 65 63 6f 6e 6e 65 63 74 5f ackey_reconnect_ 9c20: 63 61 72 64 28 73 6c 6f 74 2c 20 53 43 41 52 44 card(slot, SCARD 9c30: 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 20 7c 20 53 _PROTOCOL_T0 | S 9c40: 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31 CARD_PROTOCOL_T1 9c50: 2c 20 26 70 72 6f 74 6f 63 6f 6c 29 3b 0a 0a 09 , &protocol);... 9c60: 09 09 69 66 20 28 73 63 61 72 64 5f 72 65 63 6f ..if (scard_reco 9c70: 6e 6e 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f nn_ret == SCARD_ 9c80: 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 S_SUCCESS) {.... 9c90: 09 2f 2a 20 55 70 64 61 74 65 20 70 72 6f 74 6f ./* Update proto 9ca0: 63 6f 6c 20 2a 2f 0a 09 09 09 09 73 6c 6f 74 2d col */.....slot- 9cb0: 3e 70 72 6f 74 6f 63 6f 6c 20 3d 20 70 72 6f 74 >protocol = prot 9cc0: 6f 63 6f 6c 3b 0a 09 09 09 09 73 77 69 74 63 68 ocol;.....switch 9cd0: 20 28 73 6c 6f 74 2d 3e 70 72 6f 74 6f 63 6f 6c (slot->protocol 9ce0: 29 20 7b 0a 09 09 09 09 09 63 61 73 65 20 53 43 ) {......case SC 9cf0: 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 3a ARD_PROTOCOL_T0: 9d00: 0a 09 09 09 09 09 09 70 69 6f 53 65 6e 64 50 63 .......pioSendPc 9d10: 69 20 3d 20 53 43 41 52 44 5f 50 43 49 5f 54 30 i = SCARD_PCI_T0 9d20: 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a ;........break;. 9d30: 09 09 09 09 09 63 61 73 65 20 53 43 41 52 44 5f .....case SCARD_ 9d40: 50 52 4f 54 4f 43 4f 4c 5f 54 31 3a 0a 09 09 09 PROTOCOL_T1:.... 9d50: 09 09 09 70 69 6f 53 65 6e 64 50 63 69 20 3d 20 ...pioSendPci = 9d60: 53 43 41 52 44 5f 50 43 49 5f 54 31 3b 0a 0a 09 SCARD_PCI_T1;... 9d70: 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 .....break;..... 9d80: 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 09 09 09 .default:....... 9d90: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 9da0: 4e 54 46 28 22 49 6e 76 61 6c 69 64 20 70 72 6f NTF("Invalid pro 9db0: 74 6f 63 6f 6c 20 66 6f 75 6e 64 2c 20 62 75 74 tocol found, but 9dc0: 20 74 6f 6f 20 6c 61 74 65 20 74 6f 20 64 6f 20 too late to do 9dd0: 61 6e 79 74 68 69 6e 67 20 61 62 6f 75 74 20 69 anything about i 9de0: 74 20 6e 6f 77 20 2d 2d 20 74 72 79 69 6e 67 20 t now -- trying 9df0: 61 6e 79 77 61 79 2e 22 29 3b 0a 0a 09 09 09 09 anyway.");...... 9e00: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a ..break;.....}.. 9e10: 09 09 09 09 2f 2a 20 52 65 2d 65 73 74 61 62 6c ..../* Re-establ 9e20: 69 73 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c ish transaction, 9e30: 20 69 66 20 69 74 20 77 61 73 20 70 72 65 73 65 if it was prese 9e40: 6e 74 20 2a 2f 0a 09 09 09 09 69 66 20 28 73 6c nt */.....if (sl 9e50: 6f 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f ot->transaction_ 9e60: 64 65 70 74 68 20 3e 20 30 29 20 7b 0a 09 09 09 depth > 0) {.... 9e70: 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 ..slot->transact 9e80: 69 6f 6e 5f 64 65 70 74 68 2d 2d 3b 0a 09 09 09 ion_depth--;.... 9e90: 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 74 ..slot->transact 9ea0: 69 6f 6e 5f 6e 65 65 64 5f 68 77 5f 6c 6f 63 6b ion_need_hw_lock 9eb0: 20 3d 20 31 3b 0a 09 09 09 09 09 63 61 63 6b 65 = 1;......cacke 9ec0: 79 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 y_begin_transact 9ed0: 69 6f 6e 28 73 6c 6f 74 29 3b 0a 09 09 09 09 7d ion(slot);.....} 9ee0: 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 9ef0: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 73 65 74 UG_PRINTF("Reset 9f00: 20 73 75 63 63 65 73 73 66 75 6c 2c 20 72 65 74 successful, ret 9f10: 72 61 6e 73 6d 69 74 74 69 6e 67 22 29 3b 0a 0a ransmitting");.. 9f20: 09 09 09 09 72 65 63 76 5f 6c 65 6e 20 3d 20 73 ....recv_len = s 9f30: 69 7a 65 6f 66 28 72 65 63 76 5f 62 75 66 29 3b izeof(recv_buf); 9f40: 0a 09 09 09 09 73 63 61 72 64 5f 78 6d 69 74 5f .....scard_xmit_ 9f50: 72 65 74 20 3d 20 53 43 61 72 64 54 72 61 6e 73 ret = SCardTrans 9f60: 6d 69 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 mit(slot->pcsc_c 9f70: 61 72 64 2c 20 70 69 6f 53 65 6e 64 50 63 69 2c ard, pioSendPci, 9f80: 20 78 6d 69 74 5f 62 75 66 2c 20 78 6d 69 74 5f xmit_buf, xmit_ 9f90: 6c 65 6e 2c 20 4e 55 4c 4c 2c 20 72 65 63 76 5f len, NULL, recv_ 9fa0: 62 75 66 2c 20 26 72 65 63 76 5f 6c 65 6e 29 3b buf, &recv_len); 9fb0: 0a 0a 09 09 09 09 69 66 20 28 73 63 61 72 64 5f ......if (scard_ 9fc0: 78 6d 69 74 5f 72 65 74 20 21 3d 20 53 43 41 52 xmit_ret != SCAR 9fd0: 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 D_S_SUCCESS) {.. 9fe0: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 9ff0: 5f 50 52 49 4e 54 46 28 22 52 65 74 72 61 6e 73 _PRINTF("Retrans a000: 6d 69 74 20 66 61 69 6c 65 64 2c 20 72 65 74 75 mit failed, retu a010: 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 rning in failure a020: 20 61 66 74 65 72 20 64 69 73 63 6f 6e 6e 65 63 after disconnec a030: 74 69 6e 67 20 74 68 65 20 63 61 72 64 20 28 53 ting the card (S a040: 43 61 72 64 54 72 61 6e 73 6d 69 74 20 3d 20 25 CardTransmit = % a050: 73 2f 25 6c 69 29 22 2c 20 43 41 43 4b 45 59 5f s/%li)", CACKEY_ a060: 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 DEBUG_FUNC_SCARD a070: 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 ERR_TO_STR(scard a080: 5f 78 6d 69 74 5f 72 65 74 29 2c 20 28 6c 6f 6e _xmit_ret), (lon a090: 67 29 20 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 g) scard_xmit_re a0a0: 74 29 3b 0a 0a 09 09 09 09 09 53 43 61 72 64 44 t);.......SCardD a0b0: 69 73 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e isconnect(slot-> a0c0: 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 52 44 pcsc_card, SCARD a0d0: 5f 4c 45 41 56 45 5f 43 41 52 44 29 3b 0a 09 09 _LEAVE_CARD);... a0e0: 09 09 09 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 ...slot->pcsc_ca a0f0: 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 rd_connected = 0 a100: 3b 0a 0a 09 09 09 09 09 2f 2a 20 45 6e 64 20 53 ;......./* End S a110: 6d 61 72 74 63 61 72 64 20 54 72 61 6e 73 61 63 martcard Transac a120: 74 69 6f 6e 20 2a 2f 0a 09 09 09 09 09 73 6c 6f tion */......slo a130: 74 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 t->transaction_d a140: 65 70 74 68 20 3d 20 31 3b 0a 09 09 09 09 09 63 epth = 1;......c a150: 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 ackey_end_transa a160: 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 ction(slot);.... a170: 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 ...return(CACKEY a180: 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 _PCSC_E_TOKENABS a190: 45 4e 54 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d ENT);.....}....} a1a0: 20 65 6c 73 65 20 7b 0a 09 09 09 09 43 41 43 4b else {.....CACK a1b0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( a1c0: 22 44 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 63 "Disconnecting c a1d0: 61 72 64 22 29 3b 0a 0a 09 09 09 09 53 43 61 72 ard");......SCar a1e0: 64 44 69 73 63 6f 6e 6e 65 63 74 28 73 6c 6f 74 dDisconnect(slot a1f0: 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 53 43 41 ->pcsc_card, SCA a200: 52 44 5f 4c 45 41 56 45 5f 43 41 52 44 29 3b 0a RD_LEAVE_CARD);. a210: 09 09 09 09 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 ....slot->pcsc_c a220: 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 ard_connected = a230: 30 3b 0a 0a 09 09 09 09 2f 2a 20 45 6e 64 20 53 0;....../* End S a240: 6d 61 72 74 63 61 72 64 20 54 72 61 6e 73 61 63 martcard Transac a250: 74 69 6f 6e 20 2a 2f 0a 09 09 09 09 73 6c 6f 74 tion */.....slot a260: 2d 3e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 ->transaction_de a270: 70 74 68 20 3d 20 31 3b 0a 09 09 09 09 63 61 63 pth = 1;.....cac a280: 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 key_end_transact a290: 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 09 09 ion(slot);...... a2a0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI a2b0: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 NTF("Returning i a2c0: 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 09 09 09 n failure");.... a2d0: 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 .return(CACKEY_P a2e0: 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 4e CSC_E_TOKENABSEN a2f0: 54 29 3b 0a 09 09 09 7d 0a 09 09 7d 20 65 6c 73 T);....}...} els a300: 65 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 e {....CACKEY_DE a310: 42 55 47 5f 50 52 49 4e 54 46 28 22 44 69 73 63 BUG_PRINTF("Disc a320: 6f 6e 6e 65 63 74 69 6e 67 20 63 61 72 64 22 29 onnecting card") a330: 3b 0a 0a 09 09 09 53 43 61 72 64 44 69 73 63 6f ;.....SCardDisco a340: 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 nnect(slot->pcsc a350: 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 4c 45 41 _card, SCARD_LEA a360: 56 45 5f 43 41 52 44 29 3b 0a 09 09 09 73 6c 6f VE_CARD);....slo a370: 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e t->pcsc_card_con a380: 6e 65 63 74 65 64 20 3d 20 30 3b 0a 0a 09 09 09 nected = 0;..... a390: 2f 2a 20 45 6e 64 20 53 6d 61 72 74 63 61 72 64 /* End Smartcard a3a0: 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a Transaction */. a3b0: 09 09 09 73 6c 6f 74 2d 3e 74 72 61 6e 73 61 63 ...slot->transac a3c0: 74 69 6f 6e 5f 64 65 70 74 68 20 3d 20 31 3b 0a tion_depth = 1;. a3d0: 09 09 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 ...cackey_end_tr a3e0: 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b ansaction(slot); a3f0: 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU a400: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return a410: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") a420: 3b 0a 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b ;....return(CACK a430: 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 EY_PCSC_E_TOKENA a440: 42 53 45 4e 54 29 3b 0a 09 09 7d 0a 09 7d 0a 0a BSENT);...}..}.. a450: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR a460: 49 4e 54 42 55 46 28 22 52 65 74 75 72 6e 65 64 INTBUF("Returned a470: 20 56 61 6c 75 65 3a 22 2c 20 72 65 63 76 5f 62 Value:", recv_b a480: 75 66 2c 20 72 65 63 76 5f 6c 65 6e 29 3b 0a 0a uf, recv_len);.. a490: 09 69 66 20 28 72 65 63 76 5f 6c 65 6e 20 3c 20 .if (recv_len < a4a0: 32 29 20 7b 0a 09 09 2f 2a 20 4d 69 6e 69 6d 61 2) {.../* Minima a4b0: 6c 20 72 65 73 70 6f 6e 73 65 20 6c 65 6e 67 74 l response lengt a4c0: 68 20 69 73 20 32 20 62 79 74 65 73 2c 20 72 65 h is 2 bytes, re a4d0: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 turning in failu a4e0: 72 65 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 re */...CACKEY_D a4f0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 73 EBUG_PRINTF("Res a500: 70 6f 6e 73 65 20 74 6f 6f 20 73 6d 61 6c 6c 2c ponse too small, a510: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 returning in fa a520: 69 6c 75 72 65 20 28 72 65 63 76 5f 6c 65 6e 20 ilure (recv_len a530: 3d 20 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e = %lu)", (unsign a540: 65 64 20 6c 6f 6e 67 29 20 72 65 63 76 5f 6c 65 ed long) recv_le a550: 6e 29 3b 0a 0a 09 09 2f 2a 20 45 6e 64 20 53 6d n);..../* End Sm a560: 61 72 74 63 61 72 64 20 54 72 61 6e 73 61 63 74 artcard Transact a570: 69 6f 6e 20 2a 2f 0a 09 09 63 61 63 6b 65 79 5f ion */...cackey_ a580: 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 end_transaction( a590: 73 6c 6f 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e slot);....return a5a0: 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 (CACKEY_PCSC_E_G a5b0: 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 2f 2a ENERIC);..}.../* a5c0: 20 44 65 74 65 72 6d 69 6e 65 20 72 65 73 75 6c Determine resul a5d0: 74 20 63 6f 64 65 20 2a 2f 0a 09 6d 61 6a 6f 72 t code */..major a5e0: 5f 72 63 20 3d 20 72 65 63 76 5f 62 75 66 5b 72 _rc = recv_buf[r a5f0: 65 63 76 5f 6c 65 6e 20 2d 20 32 5d 3b 0a 09 6d ecv_len - 2];..m a600: 69 6e 6f 72 5f 72 63 20 3d 20 72 65 63 76 5f 62 inor_rc = recv_b a610: 75 66 5b 72 65 63 76 5f 6c 65 6e 20 2d 20 31 5d uf[recv_len - 1] a620: 3b 0a 09 69 66 20 28 72 65 73 70 63 6f 64 65 29 ;..if (respcode) a630: 20 7b 0a 09 09 2a 72 65 73 70 63 6f 64 65 20 3d {...*respcode = a640: 20 28 6d 61 6a 6f 72 5f 72 63 20 3c 3c 20 38 29 (major_rc << 8) a650: 20 7c 20 6d 69 6e 6f 72 5f 72 63 3b 0a 09 7d 0a | minor_rc;..}. a660: 0a 09 2f 2a 20 41 64 6a 75 73 74 20 6d 65 73 73 ../* Adjust mess a670: 61 67 65 20 62 75 66 66 65 72 20 2a 2f 0a 09 72 age buffer */..r a680: 65 63 76 5f 6c 65 6e 20 2d 3d 20 32 3b 0a 0a 09 ecv_len -= 2;... a690: 2f 2a 20 41 64 64 20 62 79 74 65 73 20 74 6f 20 /* Add bytes to a6a0: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 2a 2f 0a return value */. a6b0: 09 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 .tmp_respdata_le a6c0: 6e 20 3d 20 30 3b 0a 09 69 66 20 28 72 65 73 70 n = 0;..if (resp a6d0: 64 61 74 61 20 26 26 20 72 65 73 70 64 61 74 61 data && respdata a6e0: 5f 6c 65 6e 29 20 7b 0a 09 09 74 6d 70 5f 72 65 _len) {...tmp_re a6f0: 73 70 64 61 74 61 5f 6c 65 6e 20 3d 20 2a 72 65 spdata_len = *re a700: 73 70 64 61 74 61 5f 6c 65 6e 3b 0a 0a 09 09 62 spdata_len;....b a710: 79 74 65 73 5f 74 6f 5f 63 6f 70 79 20 3d 20 2a ytes_to_copy = * a720: 72 65 73 70 64 61 74 61 5f 6c 65 6e 3b 0a 0a 09 respdata_len;... a730: 09 69 66 20 28 72 65 63 76 5f 6c 65 6e 20 3c 20 .if (recv_len < a740: 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 20 7b bytes_to_copy) { a750: 0a 09 09 09 62 79 74 65 73 5f 74 6f 5f 63 6f 70 ....bytes_to_cop a760: 79 20 3d 20 72 65 63 76 5f 6c 65 6e 3b 0a 09 09 y = recv_len;... a770: 7d 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 }....CACKEY_DEBU a780: 47 5f 50 52 49 4e 54 46 28 22 43 6f 70 79 69 6e G_PRINTF("Copyin a790: 67 20 25 6c 75 20 62 79 74 65 73 20 74 6f 20 74 g %lu bytes to t a7a0: 68 65 20 62 75 66 66 65 72 20 28 72 65 63 76 27 he buffer (recv' a7b0: 64 20 25 6c 75 20 62 79 74 65 73 2c 20 62 75 74 d %lu bytes, but a7c0: 20 6f 6e 6c 79 20 25 6c 75 20 62 79 74 65 73 20 only %lu bytes a7d0: 6c 65 66 74 20 69 6e 20 6f 75 72 20 62 75 66 66 left in our buff a7e0: 65 72 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 er)", (unsigned a7f0: 6c 6f 6e 67 29 20 62 79 74 65 73 5f 74 6f 5f 63 long) bytes_to_c a800: 6f 70 79 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c opy, (unsigned l a810: 6f 6e 67 29 20 72 65 63 76 5f 6c 65 6e 2c 20 28 ong) recv_len, ( a820: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a unsigned long) * a830: 72 65 73 70 64 61 74 61 5f 6c 65 6e 29 3b 0a 0a respdata_len);.. a840: 09 09 6d 65 6d 63 70 79 28 72 65 73 70 64 61 74 ..memcpy(respdat a850: 61 2c 20 72 65 63 76 5f 62 75 66 2c 20 62 79 74 a, recv_buf, byt a860: 65 73 5f 74 6f 5f 63 6f 70 79 29 3b 0a 09 09 72 es_to_copy);...r a870: 65 73 70 64 61 74 61 20 2b 3d 20 62 79 74 65 73 espdata += bytes a880: 5f 74 6f 5f 63 6f 70 79 3b 0a 0a 09 09 2a 72 65 _to_copy;....*re a890: 73 70 64 61 74 61 5f 6c 65 6e 20 3d 20 62 79 74 spdata_len = byt a8a0: 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a 09 09 74 6d es_to_copy;...tm a8b0: 70 5f 72 65 73 70 64 61 74 61 5f 6c 65 6e 20 2d p_respdata_len - a8c0: 3d 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b = bytes_to_copy; a8d0: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 ..} else {...if a8e0: 28 72 65 63 76 5f 6c 65 6e 20 21 3d 20 30 29 20 (recv_len != 0) a8f0: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU a900: 47 5f 50 52 49 4e 54 46 28 22 54 68 72 6f 77 69 G_PRINTF("Throwi a910: 6e 67 20 61 77 61 79 20 25 6c 75 20 62 79 74 65 ng away %lu byte a920: 73 2c 20 6e 6f 77 68 65 72 65 20 74 6f 20 70 75 s, nowhere to pu a930: 74 20 74 68 65 6d 21 22 2c 20 28 75 6e 73 69 67 t them!", (unsig a940: 6e 65 64 20 6c 6f 6e 67 29 20 72 65 63 76 5f 6c ned long) recv_l a950: 65 6e 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 en);...}..}...if a960: 20 28 6d 61 6a 6f 72 5f 72 63 20 3d 3d 20 30 78 (major_rc == 0x a970: 36 31 29 20 7b 0a 09 09 2f 2a 20 57 65 20 6e 65 61) {.../* We ne a980: 65 64 20 74 6f 20 52 45 41 44 20 2a 2f 0a 09 09 ed to READ */... a990: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI a9a0: 4e 54 46 28 22 42 75 66 66 65 72 20 72 65 61 64 NTF("Buffer read a9b0: 20 72 65 71 75 69 72 65 64 22 29 3b 0a 0a 09 09 required");.... a9c0: 69 66 20 28 6d 69 6e 6f 72 5f 72 63 20 3d 3d 20 if (minor_rc == a9d0: 30 78 30 30 29 20 7b 0a 09 09 09 6d 69 6e 6f 72 0x00) {....minor a9e0: 5f 72 63 20 3d 20 43 41 43 4b 45 59 5f 41 50 44 _rc = CACKEY_APD a9f0: 55 5f 4d 54 55 3b 0a 09 09 7d 0a 0a 09 09 70 63 U_MTU;...}....pc aa00: 73 63 5f 67 65 74 72 65 73 70 5f 72 65 74 20 3d sc_getresp_ret = aa10: 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 cackey_send_apd aa20: 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 4c u(slot, GSCIS_CL aa30: 41 53 53 5f 49 53 4f 37 38 31 36 2c 20 47 53 43 ASS_ISO7816, GSC aa40: 49 53 5f 49 4e 53 54 52 5f 47 45 54 5f 52 45 53 IS_INSTR_GET_RES aa50: 50 4f 4e 53 45 2c 20 30 78 30 30 2c 20 30 78 30 PONSE, 0x00, 0x0 aa60: 30 2c 20 30 2c 20 4e 55 4c 4c 2c 20 6d 69 6e 6f 0, 0, NULL, mino aa70: 72 5f 72 63 2c 20 72 65 73 70 63 6f 64 65 2c 20 r_rc, respcode, aa80: 72 65 73 70 64 61 74 61 2c 20 26 74 6d 70 5f 72 respdata, &tmp_r aa90: 65 73 70 64 61 74 61 5f 6c 65 6e 29 3b 0a 0a 09 espdata_len);... aaa0: 09 69 66 20 28 70 63 73 63 5f 67 65 74 72 65 73 .if (pcsc_getres aab0: 70 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f p_ret != CACKEY_ aac0: 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 09 PCSC_S_OK) {.... aad0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI aae0: 4e 54 46 28 22 42 75 66 66 65 72 20 72 65 61 64 NTF("Buffer read aaf0: 20 66 61 69 6c 65 64 21 20 20 52 65 74 75 72 6e failed! Return ab00: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") ab10: 3b 0a 0a 09 09 09 2f 2a 20 45 6e 64 20 53 6d 61 ;...../* End Sma ab20: 72 74 63 61 72 64 20 54 72 61 6e 73 61 63 74 69 rtcard Transacti ab30: 6f 6e 20 2a 2f 0a 09 09 09 63 61 63 6b 65 79 5f on */....cackey_ ab40: 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 end_transaction( ab50: 73 6c 6f 74 29 3b 0a 0a 09 09 09 69 66 20 28 70 slot);.....if (p ab60: 63 73 63 5f 67 65 74 72 65 73 70 5f 72 65 74 20 csc_getresp_ret ab70: 3d 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 == CACKEY_PCSC_E ab80: 5f 52 45 54 52 59 29 20 7b 0a 09 09 09 09 72 65 _RETRY) {.....re ab90: 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC aba0: 5f 45 5f 52 45 54 52 59 29 3b 0a 09 09 09 7d 0a _E_RETRY);....}. abb0: 0a 09 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 ....return(CACKE abc0: 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 Y_PCSC_E_GENERIC abd0: 29 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 72 65 );...}....if (re abe0: 73 70 64 61 74 61 5f 6c 65 6e 29 20 7b 0a 09 09 spdata_len) {... abf0: 09 2a 72 65 73 70 64 61 74 61 5f 6c 65 6e 20 2b .*respdata_len + ac00: 3d 20 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c = tmp_respdata_l ac10: 65 6e 3b 0a 09 09 7d 0a 0a 09 09 2f 2a 20 45 6e en;...}..../* En ac20: 64 20 53 6d 61 72 74 63 61 72 64 20 54 72 61 6e d Smartcard Tran ac30: 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 09 63 61 63 saction */...cac ac40: 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 key_end_transact ac50: 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 43 41 ion(slot);....CA ac60: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT ac70: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 F("Returning in ac80: 73 75 63 63 65 73 73 20 28 62 75 66 66 65 72 20 success (buffer ac90: 72 65 61 64 20 63 6f 6d 70 6c 65 74 65 29 22 29 read complete)") aca0: 3b 0a 09 09 72 65 74 75 72 6e 28 43 41 43 4b 45 ;...return(CACKE acb0: 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 09 7d Y_PCSC_S_OK);..} acc0: 0a 0a 09 2f 2a 20 45 6e 64 20 53 6d 61 72 74 63 .../* End Smartc acd0: 61 72 64 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 ard Transaction ace0: 2a 2f 0a 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 */..cackey_end_t acf0: 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 ransaction(slot) ad00: 3b 0a 0a 09 69 66 20 28 6d 61 6a 6f 72 5f 72 63 ;...if (major_rc ad10: 20 3d 3d 20 30 78 39 30 29 20 7b 0a 09 09 2f 2a == 0x90) {.../* ad20: 20 53 75 63 63 65 73 73 20 2a 2f 0a 09 09 43 41 Success */...CA ad30: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT ad40: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 F("Returning in ad50: 73 75 63 63 65 73 73 20 28 6d 61 6a 6f 72 5f 72 success (major_r ad60: 63 20 3d 20 30 78 39 30 29 22 29 3b 0a 0a 09 09 c = 0x90)");.... ad70: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC ad80: 53 43 5f 53 5f 4f 4b 29 3b 0a 09 7d 0a 0a 0a 09 SC_S_OK);..}.... ad90: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI ada0: 4e 54 46 28 22 41 50 44 55 20 52 65 74 75 72 6e NTF("APDU Return adb0: 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 72 65 74 ed an error, ret adc0: 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 urning in failur add0: 65 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 41 e");...return(CA ade0: 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 CKEY_PCSC_E_GENE adf0: 52 49 43 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 RIC);.}../*. * S ae00: 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 73 YNPOSIS. * s ae10: 73 69 7a 65 5f 74 20 63 61 63 6b 65 79 5f 72 65 size_t cackey_re ae20: 61 64 5f 62 75 66 66 65 72 28 73 74 72 75 63 74 ad_buffer(struct ae30: 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c cackey_slot *sl ae40: 6f 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 ot, unsigned cha ae50: 72 20 2a 62 75 66 66 65 72 2c 20 73 69 7a 65 5f r *buffer, size_ ae60: 74 20 63 6f 75 6e 74 2c 20 75 6e 73 69 67 6e 65 t count, unsigne ae70: 64 20 63 68 61 72 20 74 5f 6f 72 5f 76 2c 20 73 d char t_or_v, s ae80: 69 7a 65 5f 74 20 69 6e 69 74 69 61 6c 5f 6f 66 ize_t initial_of ae90: 66 73 65 74 29 3b 0a 20 2a 0a 20 2a 20 41 52 47 fset);. *. * ARG aea0: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 73 74 UMENTS. * st aeb0: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ruct cackey_slot aec0: 20 2a 73 6c 6f 74 0a 20 2a 20 20 20 20 20 20 20 *slot. * aed0: 20 20 53 6c 6f 74 20 74 6f 20 73 65 6e 64 20 63 Slot to send c aee0: 6f 6d 6d 61 6e 64 73 20 74 6f 0a 20 2a 0a 20 2a ommands to. *. * aef0: 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 unsigned ch af00: 61 72 20 2a 62 75 66 66 65 72 0a 20 2a 20 20 20 ar *buffer. * af10: 20 20 20 20 20 20 5b 4f 55 54 5d 20 42 75 66 66 [OUT] Buff af20: 65 72 0a 20 2a 0a 20 2a 20 20 20 20 20 73 69 7a er. *. * siz af30: 65 5f 74 20 63 6f 75 6e 74 0a 20 2a 20 20 20 20 e_t count. * af40: 20 20 20 20 20 4e 75 6d 62 65 72 20 6f 66 20 62 Number of b af50: 79 74 65 73 20 74 6f 20 61 74 74 65 6d 70 74 20 ytes to attempt af60: 74 6f 20 72 65 61 64 0a 20 2a 0a 20 2a 20 20 20 to read. *. * af70: 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 unsigned char af80: 74 5f 6f 72 5f 76 0a 20 2a 20 20 20 20 20 20 20 t_or_v. * af90: 20 20 53 65 6c 65 63 74 20 74 68 65 20 54 2d 62 Select the T-b afa0: 75 66 66 65 72 20 28 30 31 29 20 6f 72 20 56 2d uffer (01) or V- afb0: 62 75 66 66 65 72 20 28 30 32 29 20 74 6f 20 72 buffer (02) to r afc0: 65 61 64 20 66 72 6f 6d 2e 20 20 0a 20 2a 0a 20 ead from. . *. afd0: 2a 20 20 20 20 20 73 69 7a 65 5f 74 20 69 6e 69 * size_t ini afe0: 74 69 61 6c 5f 6f 66 66 73 65 74 0a 20 2a 20 20 tial_offset. * aff0: 20 20 20 20 20 20 20 53 70 65 63 69 66 79 20 74 Specify t b000: 68 65 20 6f 66 66 73 65 74 20 74 6f 20 62 65 67 he offset to beg b010: 69 6e 20 74 68 65 20 72 65 61 64 20 66 72 6f 6d in the read from b020: 0a 20 2a 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e . *. *. * RETURN b030: 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 54 68 VALUE. * Th b040: 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 is function retu b050: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f rns the number o b060: 66 20 62 79 74 65 73 20 61 63 74 75 61 6c 6c 79 f bytes actually b070: 20 72 65 61 64 2c 20 6f 72 20 2d 31 20 6f 6e 20 read, or -1 on b080: 65 72 72 6f 72 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 error.. *. * NOT b090: 45 53 0a 20 2a 20 20 20 20 20 4e 6f 6e 65 0a 20 ES. * None. b0a0: 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 20 73 73 69 *. */.static ssi b0b0: 7a 65 5f 74 20 63 61 63 6b 65 79 5f 72 65 61 64 ze_t cackey_read b0c0: 5f 62 75 66 66 65 72 28 73 74 72 75 63 74 20 63 _buffer(struct c b0d0: 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 ackey_slot *slot b0e0: 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 , unsigned char b0f0: 2a 62 75 66 66 65 72 2c 20 73 69 7a 65 5f 74 20 *buffer, size_t b100: 63 6f 75 6e 74 2c 20 75 6e 73 69 67 6e 65 64 20 count, unsigned b110: 63 68 61 72 20 74 5f 6f 72 5f 76 2c 20 73 69 7a char t_or_v, siz b120: 65 5f 74 20 69 6e 69 74 69 61 6c 5f 6f 66 66 73 e_t initial_offs b130: 65 74 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 et) {..unsigned b140: 63 68 61 72 20 2a 69 6e 69 74 5f 62 75 66 66 65 char *init_buffe b150: 72 3b 0a 09 73 69 7a 65 5f 74 20 69 6e 69 74 5f r;..size_t init_ b160: 63 6f 75 6e 74 3b 0a 09 73 69 7a 65 5f 74 20 69 count;..size_t i b170: 6e 69 74 5f 69 6e 69 74 69 61 6c 5f 6f 66 66 73 nit_initial_offs b180: 65 74 3b 0a 0a 09 73 69 7a 65 5f 74 20 6f 66 66 et;...size_t off b190: 73 65 74 20 3d 20 30 2c 20 6d 61 78 5f 6f 66 66 set = 0, max_off b1a0: 73 65 74 2c 20 6d 61 78 5f 63 6f 75 6e 74 3b 0a set, max_count;. b1b0: 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 .unsigned char c b1c0: 6d 64 5b 32 5d 3b 0a 09 75 69 6e 74 31 36 5f 74 md[2];..uint16_t b1d0: 20 72 65 73 70 63 6f 64 65 3b 0a 09 69 6e 74 20 respcode;..int b1e0: 73 65 6e 64 5f 72 65 74 3b 0a 0a 09 43 41 43 4b send_ret;...CACK b1f0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( b200: 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 6e "Called.");...in b210: 69 74 5f 62 75 66 66 65 72 20 3d 20 62 75 66 66 it_buffer = buff b220: 65 72 3b 0a 09 69 6e 69 74 5f 63 6f 75 6e 74 20 er;..init_count b230: 3d 20 63 6f 75 6e 74 3b 0a 09 69 6e 69 74 5f 69 = count;..init_i b240: 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 20 3d 20 nitial_offset = b250: 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 3b 0a initial_offset;. b260: 0a 09 6d 61 78 5f 6f 66 66 73 65 74 20 3d 20 63 ..max_offset = c b270: 6f 75 6e 74 3b 0a 09 6d 61 78 5f 63 6f 75 6e 74 ount;..max_count b280: 20 3d 20 43 41 43 4b 45 59 5f 41 50 44 55 5f 4d = CACKEY_APDU_M b290: 54 55 3b 0a 0a 09 69 66 20 28 74 5f 6f 72 5f 76 TU;...if (t_or_v b2a0: 20 21 3d 20 31 20 26 26 20 74 5f 6f 72 5f 76 20 != 1 && t_or_v b2b0: 21 3d 20 32 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 2) {...CACKEY b2c0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 49 _DEBUG_PRINTF("I b2d0: 6e 76 61 6c 69 64 20 54 20 6f 72 20 56 20 70 61 nvalid T or V pa b2e0: 72 61 6d 65 74 65 72 20 73 70 65 63 69 66 69 65 rameter specifie b2f0: 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 d, returning in b300: 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 failure");....re b310: 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 63 turn(-1);..}...c b320: 6d 64 5b 30 5d 20 3d 20 74 5f 6f 72 5f 76 3b 0a md[0] = t_or_v;. b330: 0a 09 77 68 69 6c 65 20 28 31 29 20 7b 0a 09 09 ..while (1) {... b340: 69 66 20 28 6f 66 66 73 65 74 20 3e 3d 20 6d 61 if (offset >= ma b350: 78 5f 6f 66 66 73 65 74 29 20 7b 0a 09 09 09 43 x_offset) {....C b360: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN b370: 54 46 28 22 42 75 66 66 65 72 20 74 6f 6f 20 73 TF("Buffer too s b380: 6d 61 6c 6c 2c 20 72 65 74 75 72 6e 69 6e 67 20 mall, returning b390: 77 68 61 74 20 77 65 20 67 6f 74 2e 2e 2e 22 29 what we got...") b3a0: 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d ;.....break;...} b3b0: 0a 0a 09 09 63 6f 75 6e 74 20 3d 20 6d 61 78 5f ....count = max_ b3c0: 6f 66 66 73 65 74 20 2d 20 6f 66 66 73 65 74 3b offset - offset; b3d0: 0a 09 09 69 66 20 28 63 6f 75 6e 74 20 3e 20 6d ...if (count > m b3e0: 61 78 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09 63 ax_count) {....c b3f0: 6f 75 6e 74 20 3d 20 6d 61 78 5f 63 6f 75 6e 74 ount = max_count b400: 3b 0a 09 09 7d 0a 0a 09 09 63 6d 64 5b 31 5d 20 ;...}....cmd[1] b410: 3d 20 63 6f 75 6e 74 3b 0a 0a 09 09 73 65 6e 64 = count;....send b420: 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 _ret = cackey_se b430: 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 nd_apdu(slot, GS b440: 43 49 53 5f 43 4c 41 53 53 5f 47 4c 4f 42 41 4c CIS_CLASS_GLOBAL b450: 5f 50 4c 41 54 46 4f 52 4d 2c 20 47 53 43 49 53 _PLATFORM, GSCIS b460: 5f 49 4e 53 54 52 5f 52 45 41 44 5f 42 55 46 46 _INSTR_READ_BUFF b470: 45 52 2c 20 28 28 69 6e 69 74 69 61 6c 5f 6f 66 ER, ((initial_of b480: 66 73 65 74 20 2b 20 6f 66 66 73 65 74 29 20 3e fset + offset) > b490: 3e 20 38 29 20 26 20 30 78 66 66 2c 20 28 69 6e > 8) & 0xff, (in b4a0: 69 74 69 61 6c 5f 6f 66 66 73 65 74 20 2b 20 6f itial_offset + o b4b0: 66 66 73 65 74 29 20 26 20 30 78 66 66 2c 20 73 ffset) & 0xff, s b4c0: 69 7a 65 6f 66 28 63 6d 64 29 2c 20 63 6d 64 2c izeof(cmd), cmd, b4d0: 20 30 78 30 30 2c 20 26 72 65 73 70 63 6f 64 65 0x00, &respcode b4e0: 2c 20 62 75 66 66 65 72 20 2b 20 6f 66 66 73 65 , buffer + offse b4f0: 74 2c 20 26 63 6f 75 6e 74 29 3b 0a 0a 09 09 69 t, &count);....i b500: 66 20 28 73 65 6e 64 5f 72 65 74 20 3d 3d 20 43 f (send_ret == C b510: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 52 45 54 ACKEY_PCSC_E_RET b520: 52 59 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f RY) {....CACKEY_ b530: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 41 44 DEBUG_PRINTF("AD b540: 50 55 20 53 65 6e 64 69 6e 67 20 66 61 69 6c 65 PU Sending faile b550: 64 2c 20 72 65 74 72 79 69 6e 67 20 72 65 61 64 d, retrying read b560: 20 62 75 66 66 65 72 22 29 3b 0a 0a 09 09 09 72 buffer");.....r b570: 65 74 75 72 6e 28 63 61 63 6b 65 79 5f 72 65 61 eturn(cackey_rea b580: 64 5f 62 75 66 66 65 72 28 73 6c 6f 74 2c 20 69 d_buffer(slot, i b590: 6e 69 74 5f 62 75 66 66 65 72 2c 20 69 6e 69 74 nit_buffer, init b5a0: 5f 63 6f 75 6e 74 2c 20 74 5f 6f 72 5f 76 2c 20 _count, t_or_v, b5b0: 69 6e 69 74 5f 69 6e 69 74 69 61 6c 5f 6f 66 66 init_initial_off b5c0: 73 65 74 29 29 3b 0a 09 09 7d 0a 0a 09 09 69 66 set));...}....if b5d0: 20 28 73 65 6e 64 5f 72 65 74 20 21 3d 20 43 41 (send_ret != CA b5e0: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 CKEY_PCSC_S_OK) b5f0: 7b 0a 09 09 09 69 66 20 28 72 65 73 70 63 6f 64 {....if (respcod b600: 65 20 3d 3d 20 30 78 36 41 38 36 29 20 7b 0a 09 e == 0x6A86) {.. b610: 09 09 09 69 66 20 28 6d 61 78 5f 63 6f 75 6e 74 ...if (max_count b620: 20 3d 3d 20 31 29 20 7b 0a 09 09 09 09 09 62 72 == 1) {......br b630: 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 eak;.....}...... b640: 6d 61 78 5f 63 6f 75 6e 74 20 3d 20 6d 61 78 5f max_count = max_ b650: 63 6f 75 6e 74 20 2f 20 32 3b 0a 0a 09 09 09 09 count / 2;...... b660: 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 7d 0a 0a continue;....}.. b670: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ b680: 50 52 49 4e 54 46 28 22 63 61 63 6b 65 79 5f 73 PRINTF("cackey_s b690: 65 6e 64 5f 61 70 64 75 28 29 20 66 61 69 6c 65 end_apdu() faile b6a0: 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 d, returning in b6b0: 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 09 72 failure");.....r b6c0: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a eturn(-1);...}.. b6d0: 09 09 6f 66 66 73 65 74 20 2b 3d 20 63 6f 75 6e ..offset += coun b6e0: 74 3b 0a 0a 09 09 69 66 20 28 63 6f 75 6e 74 20 t;....if (count b6f0: 3c 20 6d 61 78 5f 63 6f 75 6e 74 29 20 7b 0a 09 < max_count) {.. b700: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P b710: 52 49 4e 54 46 28 22 53 68 6f 72 74 20 72 65 61 RINTF("Short rea b720: 64 20 2d 2d 20 63 6f 75 6e 74 20 3d 20 25 69 2c d -- count = %i, b730: 20 63 6d 64 5b 31 5d 20 3d 20 25 69 22 2c 20 28 cmd[1] = %i", ( b740: 69 6e 74 29 20 63 6f 75 6e 74 2c 20 28 69 6e 74 int) count, (int b750: 29 20 63 6d 64 5b 31 5d 29 3b 0a 0a 09 09 09 62 ) cmd[1]);.....b b760: 72 65 61 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a 23 69 reak;...}..}..#i b770: 66 64 65 66 20 43 41 43 4b 45 59 5f 50 41 52 41 fdef CACKEY_PARA b780: 4e 4f 49 44 0a 23 20 20 69 66 64 65 66 20 5f 50 NOID.# ifdef _P b790: 4f 53 49 58 5f 53 53 49 5a 45 5f 4d 41 58 0a 09 OSIX_SSIZE_MAX.. b7a0: 69 66 20 28 6f 66 66 73 65 74 20 3e 20 5f 50 4f if (offset > _PO b7b0: 53 49 58 5f 53 53 49 5a 45 5f 4d 41 58 29 20 7b SIX_SSIZE_MAX) { b7c0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ b7d0: 50 52 49 4e 54 46 28 22 4f 66 66 73 65 74 20 65 PRINTF("Offset e b7e0: 78 63 65 65 64 73 20 6d 61 78 69 6d 75 6d 20 76 xceeds maximum v b7f0: 61 6c 75 65 2c 20 72 65 74 75 72 6e 69 6e 67 20 alue, returning b800: 69 6e 20 66 61 69 6c 75 72 65 2e 20 28 6d 61 78 in failure. (max b810: 20 3d 20 25 6c 69 2c 20 6f 66 66 73 65 74 20 3d = %li, offset = b820: 20 25 6c 75 29 22 2c 20 28 6c 6f 6e 67 29 20 5f %lu)", (long) _ b830: 50 4f 53 49 58 5f 53 53 49 5a 45 5f 4d 41 58 2c POSIX_SSIZE_MAX, b840: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) b850: 20 6f 66 66 73 65 74 29 3b 0a 0a 09 09 72 65 74 offset);....ret b860: 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 23 20 20 65 urn(-1);..}.# e b870: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 09 43 41 ndif.#endif...CA b880: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT b890: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 F("Returning in b8a0: 73 75 63 63 65 73 73 2c 20 72 65 61 64 20 25 6c success, read %l b8b0: 75 20 62 79 74 65 73 22 2c 20 28 75 6e 73 69 67 u bytes", (unsig b8c0: 6e 65 64 20 6c 6f 6e 67 29 20 6f 66 66 73 65 74 ned long) offset b8d0: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 6f 66 66 73 );...return(offs b8e0: 65 74 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 et);.}../*. * SY b8f0: 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 63 61 NPOSIS. * ca b900: 63 6b 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f ckey_ret cackey_ b910: 73 65 6c 65 63 74 5f 61 70 70 6c 65 74 28 73 74 select_applet(st b920: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ruct cackey_slot b930: 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 64 *slot, unsigned b940: 20 63 68 61 72 20 2a 61 69 64 2c 20 73 69 7a 65 char *aid, size b950: 5f 74 20 61 69 64 5f 6c 65 6e 29 3b 0a 20 2a 0a _t aid_len);. *. b960: 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 * ARGUMENTS. * b970: 20 20 20 20 73 74 72 75 63 74 20 63 61 63 6b 65 struct cacke b980: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a 20 2a 20 y_slot *slot. * b990: 20 20 20 20 20 20 20 20 53 6c 6f 74 20 74 6f 20 Slot to b9a0: 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 20 74 6f send commands to b9b0: 0a 20 2a 0a 20 2a 20 20 20 20 20 75 6e 73 69 67 . *. * unsig b9c0: 6e 65 64 20 63 68 61 72 20 2a 61 69 64 0a 20 2a ned char *aid. * b9d0: 20 20 20 20 20 20 20 20 20 42 75 66 66 65 72 20 Buffer b9e0: 63 6f 6e 74 61 69 6e 69 6e 67 20 41 70 70 6c 65 containing Apple b9f0: 74 20 49 44 20 74 6f 20 73 65 6c 65 63 74 0a 20 t ID to select. ba00: 2a 0a 20 2a 20 20 20 20 20 73 69 7a 65 5f 74 20 *. * size_t ba10: 61 69 64 5f 6c 65 6e 0a 20 2a 20 20 20 20 20 20 aid_len. * ba20: 20 20 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 Number of byt ba30: 65 73 20 69 6e 20 74 68 65 20 22 61 69 64 22 20 es in the "aid" ba40: 28 41 70 70 6c 65 74 20 49 44 29 20 70 61 72 61 (Applet ID) para ba50: 6d 65 74 65 72 0a 20 2a 0a 20 2a 20 52 45 54 55 meter. *. * RETU ba60: 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 RN VALUE. * ba70: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK ba80: 20 20 20 20 20 20 20 20 20 4f 6e 20 73 75 63 63 On succ ba90: 65 73 73 0a 20 2a 20 20 20 20 20 43 41 43 4b 45 ess. * CACKE baa0: 59 5f 50 43 53 43 5f 45 5f 47 45 4e 45 52 49 43 Y_PCSC_E_GENERIC bab0: 20 20 20 20 4f 6e 20 65 72 72 6f 72 0a 20 2a 0a On error. *. bac0: 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 * NOTES. * bad0: 4e 6f 6e 65 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 None. *. */.stat bae0: 69 63 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 ic cackey_ret ca baf0: 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c ckey_select_appl bb00: 65 74 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 et(struct cackey bb10: 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 _slot *slot, uns bb20: 69 67 6e 65 64 20 63 68 61 72 20 2a 61 69 64 2c igned char *aid, bb30: 20 73 69 7a 65 5f 74 20 61 69 64 5f 6c 65 6e 29 size_t aid_len) bb40: 20 7b 0a 09 69 6e 74 20 73 65 6e 64 5f 72 65 74 {..int send_ret bb50: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG bb60: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. bb70: 22 29 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ");...CACKEY_DEB bb80: 55 47 5f 50 52 49 4e 54 42 55 46 28 22 53 65 6c UG_PRINTBUF("Sel bb90: 65 63 74 69 6e 67 20 61 70 70 6c 65 74 3a 22 2c ecting applet:", bba0: 20 61 69 64 2c 20 61 69 64 5f 6c 65 6e 29 3b 0a aid, aid_len);. bbb0: 0a 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 61 63 ..send_ret = cac bbc0: 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 73 6c key_send_apdu(sl bbd0: 6f 74 2c 20 47 53 43 49 53 5f 43 4c 41 53 53 5f ot, GSCIS_CLASS_ bbe0: 49 53 4f 37 38 31 36 2c 20 47 53 43 49 53 5f 49 ISO7816, GSCIS_I bbf0: 4e 53 54 52 5f 53 45 4c 45 43 54 2c 20 47 53 43 NSTR_SELECT, GSC bc00: 49 53 5f 50 41 52 41 4d 5f 53 45 4c 45 43 54 5f IS_PARAM_SELECT_ bc10: 41 50 50 4c 45 54 2c 20 30 78 30 30 2c 20 61 69 APPLET, 0x00, ai bc20: 64 5f 6c 65 6e 2c 20 61 69 64 2c 20 30 78 30 30 d_len, aid, 0x00 bc30: 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 , NULL, NULL, NU bc40: 4c 4c 29 3b 0a 0a 09 69 66 20 28 73 65 6e 64 5f LL);...if (send_ bc50: 72 65 74 20 3d 3d 20 43 41 43 4b 45 59 5f 50 43 ret == CACKEY_PC bc60: 53 43 5f 45 5f 52 45 54 52 59 29 20 7b 0a 09 09 SC_E_RETRY) {... bc70: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI bc80: 4e 54 46 28 22 41 44 50 55 20 53 65 6e 64 69 6e NTF("ADPU Sendin bc90: 67 20 66 61 69 6c 65 64 2c 20 72 65 74 72 79 69 g failed, retryi bca0: 6e 67 20 73 65 6c 65 63 74 20 61 70 70 6c 65 74 ng select applet bcb0: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 63 61 ");....return(ca bcc0: 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c ckey_select_appl bcd0: 65 74 28 73 6c 6f 74 2c 20 61 69 64 2c 20 61 69 et(slot, aid, ai bce0: 64 5f 6c 65 6e 29 29 3b 0a 09 7d 0a 0a 09 69 66 d_len));..}...if bcf0: 20 28 73 65 6e 64 5f 72 65 74 20 21 3d 20 43 41 (send_ret != CA bd00: 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 CKEY_PCSC_S_OK) bd10: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG bd20: 5f 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 _PRINTF("Failed bd30: 74 6f 20 6f 70 65 6e 20 61 70 70 6c 65 74 2c 20 to open applet, bd40: 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 returning in fai bd50: 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 lure");....retur bd60: 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f n(CACKEY_PCSC_E_ bd70: 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a 0a 09 43 GENERIC);..}...C bd80: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN bd90: 54 46 28 22 53 75 63 63 65 73 73 66 75 6c 6c 79 TF("Successfully bda0: 20 73 65 6c 65 63 74 65 64 20 66 69 6c 65 22 29 selected file") bdb0: 3b 0a 0a 09 72 65 74 75 72 6e 28 43 41 43 4b 45 ;...return(CACKE bdc0: 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b 0a 7d 0a Y_PCSC_S_OK);.}. bdd0: 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a ./*. * SYNPOSIS. bde0: 20 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 72 65 * cackey_re bdf0: 74 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f t cackey_select_ be00: 66 69 6c 65 28 73 74 72 75 63 74 20 63 61 63 6b file(struct cack be10: 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 ey_slot *slot, u be20: 69 6e 74 31 36 5f 74 20 65 66 29 3b 0a 20 2a 0a int16_t ef);. *. be30: 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 * ARGUMENTS. * be40: 20 20 20 20 73 74 72 75 63 74 20 63 61 63 6b 65 struct cacke be50: 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 0a 20 2a 20 y_slot *slot. * be60: 20 20 20 20 20 20 20 20 53 6c 6f 74 20 74 6f 20 Slot to be70: 73 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 20 74 6f send commands to be80: 0a 20 2a 0a 20 2a 20 20 20 20 20 75 69 6e 74 31 . *. * uint1 be90: 36 5f 74 20 65 66 0a 20 2a 20 20 20 20 20 20 20 6_t ef. * bea0: 20 20 45 6c 65 6d 65 6e 74 61 6c 20 46 69 6c 65 Elemental File beb0: 20 74 6f 20 73 65 6c 65 63 74 0a 20 2a 0a 20 2a to select. *. * bec0: 20 52 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a RETURN VALUE. * bed0: 20 20 20 20 20 43 41 43 4b 45 59 5f 50 43 53 43 CACKEY_PCSC bee0: 5f 53 5f 4f 4b 20 20 20 20 20 20 20 20 20 4f 6e _S_OK On bef0: 20 73 75 63 63 65 73 73 0a 20 2a 20 20 20 20 20 success. * bf00: 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 47 45 CACKEY_PCSC_E_GE bf10: 4e 45 52 49 43 20 20 20 20 4f 6e 20 65 72 72 6f NERIC On erro bf20: 72 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a r. *. * NOTES. * bf30: 20 20 20 20 20 54 68 69 73 20 73 65 6c 65 63 74 This select bf40: 73 20 61 6e 20 45 6c 65 6d 65 6e 74 61 72 79 20 s an Elementary bf50: 46 69 6c 65 20 28 45 46 29 20 75 6e 64 65 72 20 File (EF) under bf60: 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 73 65 the currently se bf70: 6c 65 63 74 65 64 0a 20 2a 20 20 20 20 20 44 65 lected. * De bf80: 64 69 63 61 74 65 64 20 46 69 6c 65 20 28 44 46 dicated File (DF bf90: 29 0a 20 2a 0a 20 2a 20 20 20 20 20 54 79 70 69 ). *. * Typi bfa0: 63 61 6c 6c 79 20 74 68 69 73 20 69 73 20 63 61 cally this is ca bfb0: 6c 6c 65 64 20 61 66 74 65 72 20 73 65 6c 65 63 lled after selec bfc0: 74 69 6e 67 20 74 68 65 20 63 6f 72 72 65 63 74 ting the correct bfd0: 20 41 70 70 6c 65 74 20 28 75 73 69 6e 67 0a 20 Applet (using. bfe0: 2a 20 20 20 20 20 63 61 63 6b 65 79 5f 73 65 6c * cackey_sel bff0: 65 63 74 5f 61 70 70 6c 65 74 29 20 66 6f 72 20 ect_applet) for c000: 56 4d 20 63 61 72 64 73 0a 20 2a 0a 20 2a 2f 0a VM cards. *. */. c010: 73 74 61 74 69 63 20 63 61 63 6b 65 79 5f 72 65 static cackey_re c020: 74 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f t cackey_select_ c030: 66 69 6c 65 28 73 74 72 75 63 74 20 63 61 63 6b file(struct cack c040: 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 ey_slot *slot, u c050: 69 6e 74 31 36 5f 74 20 65 66 29 20 7b 0a 09 75 int16_t ef) {..u c060: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 66 69 64 nsigned char fid c070: 5f 62 75 66 5b 32 5d 3b 0a 09 69 6e 74 20 73 65 _buf[2];..int se c080: 6e 64 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 nd_ret;...CACKEY c090: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C c0a0: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 2f 2a 20 4f alled.");.../* O c0b0: 70 65 6e 20 74 68 65 20 65 6c 65 6d 65 6e 74 61 pen the elementa c0c0: 72 79 20 66 69 6c 65 20 2a 2f 0a 09 66 69 64 5f ry file */..fid_ c0d0: 62 75 66 5b 30 5d 20 3d 20 28 65 66 20 3e 3e 20 buf[0] = (ef >> c0e0: 38 29 20 26 20 30 78 66 66 3b 0a 09 66 69 64 5f 8) & 0xff;..fid_ c0f0: 62 75 66 5b 31 5d 20 3d 20 65 66 20 26 20 30 78 buf[1] = ef & 0x c100: 66 66 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ff;...CACKEY_DEB c110: 55 47 5f 50 52 49 4e 54 46 28 22 53 65 6c 65 63 UG_PRINTF("Selec c120: 74 69 6e 67 20 66 69 6c 65 3a 20 25 30 34 6c 78 ting file: %04lx c130: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon c140: 67 29 20 65 66 29 3b 0a 0a 09 73 65 6e 64 5f 72 g) ef);...send_r c150: 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 et = cackey_send c160: 5f 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 _apdu(slot, GSCI c170: 53 5f 43 4c 41 53 53 5f 49 53 4f 37 38 31 36 2c S_CLASS_ISO7816, c180: 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 45 4c GSCIS_INSTR_SEL c190: 45 43 54 2c 20 30 78 30 32 2c 20 30 78 30 43 2c ECT, 0x02, 0x0C, c1a0: 20 73 69 7a 65 6f 66 28 66 69 64 5f 62 75 66 29 sizeof(fid_buf) c1b0: 2c 20 66 69 64 5f 62 75 66 2c 20 30 78 30 30 2c , fid_buf, 0x00, c1c0: 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c NULL, NULL, NUL c1d0: 4c 29 3b 0a 09 69 66 20 28 73 65 6e 64 5f 72 65 L);..if (send_re c1e0: 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 t != CACKEY_PCSC c1f0: 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 _S_OK) {...CACKE c200: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" c210: 46 61 69 6c 65 64 20 74 6f 20 6f 70 65 6e 20 66 Failed to open f c220: 69 6c 65 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 ile, returning i c230: 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 n failure");.... c240: 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC c250: 53 43 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 SC_E_GENERIC);.. c260: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG c270: 5f 50 52 49 4e 54 46 28 22 53 75 63 63 65 73 73 _PRINTF("Success c280: 66 75 6c 6c 79 20 73 65 6c 65 63 74 65 64 20 66 fully selected f c290: 69 6c 65 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 ile");...return( c2a0: 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b CACKEY_PCSC_S_OK c2b0: 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 );.}../*. * SYNP c2c0: 4f 53 49 53 0a 20 2a 20 20 20 20 20 76 6f 69 64 OSIS. * void c2d0: 20 63 61 63 6b 65 79 5f 66 72 65 65 5f 74 6c 76 cackey_free_tlv c2e0: 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 (struct cackey_t c2f0: 6c 76 5f 65 6e 74 69 74 79 20 2a 72 6f 6f 74 29 lv_entity *root) c300: 3b 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e 54 ;. *. * ARGUMENT c310: 53 0a 20 2a 20 20 20 20 20 73 74 72 75 63 74 20 S. * struct c320: 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 cackey_tlv_entit c330: 79 20 2a 72 6f 6f 74 0a 20 2a 20 20 20 20 20 20 y *root. * c340: 20 20 20 52 6f 6f 74 20 6f 66 20 74 68 65 20 54 Root of the T c350: 4c 56 20 6c 69 73 74 20 74 6f 20 73 74 61 72 74 LV list to start c360: 20 66 72 65 65 69 6e 67 0a 20 2a 0a 20 2a 20 52 freeing. *. * R c370: 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 ETURN VALUE. * c380: 20 20 20 4e 6f 6e 65 0a 20 2a 0a 20 2a 20 4e 4f None. *. * NO c390: 54 45 53 0a 20 2a 20 20 20 20 20 54 68 69 73 20 TES. * This c3a0: 66 75 6e 63 74 69 6f 6e 20 66 72 65 65 73 20 74 function frees t c3b0: 68 65 20 54 4c 56 20 6c 69 6e 6b 65 64 20 6c 69 he TLV linked li c3c0: 73 74 65 64 20 72 65 74 75 72 6e 65 64 20 66 72 sted returned fr c3d0: 6f 6d 0a 20 2a 20 20 20 20 20 22 63 61 63 6b 65 om. * "cacke c3e0: 79 5f 72 65 61 64 5f 74 6c 76 22 0a 20 2a 0a 20 y_read_tlv". *. c3f0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 */.static void c c400: 61 63 6b 65 79 5f 66 72 65 65 5f 74 6c 76 28 73 ackey_free_tlv(s c410: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 truct cackey_tlv c420: 5f 65 6e 74 69 74 79 20 2a 72 6f 6f 74 29 20 7b _entity *root) { c430: 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f ..struct cackey_ c440: 74 6c 76 5f 65 6e 74 69 74 79 20 2a 63 75 72 72 tlv_entity *curr c450: 2c 20 2a 6e 65 78 74 3b 0a 0a 09 69 66 20 28 72 , *next;...if (r c460: 6f 6f 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 oot == NULL) {.. c470: 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 66 6f .return;..}...fo c480: 72 20 28 63 75 72 72 20 3d 20 72 6f 6f 74 3b 20 r (curr = root; c490: 63 75 72 72 3b 20 63 75 72 72 20 3d 20 6e 65 78 curr; curr = nex c4a0: 74 29 20 7b 0a 09 09 6e 65 78 74 20 3d 20 63 75 t) {...next = cu c4b0: 72 72 2d 3e 5f 6e 65 78 74 3b 0a 0a 09 09 73 77 rr->_next;....sw c4c0: 69 74 63 68 20 28 63 75 72 72 2d 3e 74 61 67 29 itch (curr->tag) c4d0: 20 7b 0a 09 09 09 63 61 73 65 20 47 53 43 49 53 {....case GSCIS c4e0: 5f 54 41 47 5f 41 43 52 5f 54 41 42 4c 45 3a 0a _TAG_ACR_TABLE:. c4f0: 09 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 ...case GSCIS_TA c500: 47 5f 43 45 52 54 49 46 49 43 41 54 45 3a 0a 09 G_CERTIFICATE:.. c510: 09 09 09 69 66 20 28 63 75 72 72 2d 3e 76 61 6c ...if (curr->val c520: 75 65 29 20 7b 0a 09 09 09 09 09 66 72 65 65 28 ue) {......free( c530: 63 75 72 72 2d 3e 76 61 6c 75 65 29 3b 0a 09 09 curr->value);... c540: 09 09 7d 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 ..}.....break;.. c550: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 ..case GSCIS_TAG c560: 5f 43 41 52 44 55 52 4c 3a 0a 09 09 09 09 69 66 _CARDURL:.....if c570: 20 28 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 (curr->value_ca c580: 72 64 75 72 6c 29 20 7b 0a 09 09 09 09 09 66 72 rdurl) {......fr c590: 65 65 28 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 ee(curr->value_c c5a0: 61 72 64 75 72 6c 29 3b 0a 09 09 09 09 7d 0a 09 ardurl);.....}.. c5b0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 ...break;...}... c5c0: 09 66 72 65 65 28 63 75 72 72 29 3b 0a 09 7d 0a .free(curr);..}. c5d0: 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a ..return;.}../*. c5e0: 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 * SYNPOSIS. * c5f0: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 .... *. * ARG c600: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 2e 2e UMENTS. * .. c610: 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 .. *. * RETURN V c620: 41 4c 55 45 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a ALUE. * .... c630: 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 *. * NOTES. * c640: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 .... *. */.st c650: 61 74 69 63 20 73 74 72 75 63 74 20 63 61 63 6b atic struct cack c660: 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 2a 63 ey_tlv_entity *c c670: 61 63 6b 65 79 5f 72 65 61 64 5f 74 6c 76 28 73 ackey_read_tlv(s c680: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f truct cackey_slo c690: 74 20 2a 73 6c 6f 74 29 20 7b 0a 09 73 74 72 75 t *slot) {..stru c6a0: 63 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e ct cackey_tlv_en c6b0: 74 69 74 79 20 2a 63 75 72 72 5f 65 6e 74 69 74 tity *curr_entit c6c0: 79 2c 20 2a 72 6f 6f 74 20 3d 20 4e 55 4c 4c 2c y, *root = NULL, c6d0: 20 2a 6c 61 73 74 20 3d 20 4e 55 4c 4c 3b 0a 09 *last = NULL;.. c6e0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 74 6c unsigned char tl c6f0: 65 6e 5f 62 75 66 5b 32 5d 2c 20 74 76 61 6c 5f en_buf[2], tval_ c700: 62 75 66 5b 31 30 32 34 5d 2c 20 2a 74 76 61 6c buf[1024], *tval c710: 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 ;..unsigned char c720: 20 76 6c 65 6e 5f 62 75 66 5b 32 5d 2c 20 76 76 vlen_buf[2], vv c730: 61 6c 5f 62 75 66 5b 38 31 39 32 5d 2c 20 2a 76 al_buf[8192], *v c740: 76 61 6c 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 val;..unsigned c c750: 68 61 72 20 2a 74 6d 70 62 75 66 3b 0a 09 75 6e har *tmpbuf;..un c760: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 74 6d 70 62 signed long tmpb c770: 75 66 6c 65 6e 3b 0a 09 73 73 69 7a 65 5f 74 20 uflen;..ssize_t c780: 74 6c 65 6e 2c 20 76 6c 65 6e 3b 0a 09 73 73 69 tlen, vlen;..ssi c790: 7a 65 5f 74 20 72 65 61 64 5f 72 65 74 3b 0a 09 ze_t read_ret;.. c7a0: 73 69 7a 65 5f 74 20 6f 66 66 73 65 74 5f 74 20 size_t offset_t c7b0: 3d 20 30 2c 20 6f 66 66 73 65 74 5f 76 20 3d 20 = 0, offset_v = c7c0: 30 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 0;..unsigned cha c7d0: 72 20 74 61 67 3b 0a 09 73 69 7a 65 5f 74 20 6c r tag;..size_t l c7e0: 65 6e 67 74 68 3b 0a 23 69 66 64 65 66 20 48 41 ength;.#ifdef HA c7f0: 56 45 5f 4c 49 42 5a 0a 09 69 6e 74 20 75 6e 63 VE_LIBZ..int unc c800: 6f 6d 70 72 65 73 73 5f 72 65 74 3b 0a 23 65 6e ompress_ret;.#en c810: 64 69 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 dif...CACKEY_DEB c820: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle c830: 64 2e 22 29 3b 0a 0a 09 72 65 61 64 5f 72 65 74 d.");...read_ret c840: 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 = cackey_read_b c850: 75 66 66 65 72 28 73 6c 6f 74 2c 20 74 6c 65 6e uffer(slot, tlen c860: 5f 62 75 66 2c 20 73 69 7a 65 6f 66 28 74 6c 65 _buf, sizeof(tle c870: 6e 5f 62 75 66 29 2c 20 31 2c 20 6f 66 66 73 65 n_buf), 1, offse c880: 74 5f 74 29 3b 0a 09 69 66 20 28 72 65 61 64 5f t_t);..if (read_ c890: 72 65 74 20 21 3d 20 73 69 7a 65 6f 66 28 74 6c ret != sizeof(tl c8a0: 65 6e 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 43 en_buf)) {...CAC c8b0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF c8c0: 28 22 52 65 61 64 20 66 61 69 6c 65 64 2c 20 72 ("Read failed, r c8d0: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail c8e0: 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ure");....return c8f0: 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 74 6c 65 (NULL);..}...tle c900: 6e 20 3d 20 28 74 6c 65 6e 5f 62 75 66 5b 31 5d n = (tlen_buf[1] c910: 20 3c 3c 20 38 29 20 7c 20 74 6c 65 6e 5f 62 75 << 8) | tlen_bu c920: 66 5b 30 5d 3b 0a 0a 09 72 65 61 64 5f 72 65 74 f[0];...read_ret c930: 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 = cackey_read_b c940: 75 66 66 65 72 28 73 6c 6f 74 2c 20 76 6c 65 6e uffer(slot, vlen c950: 5f 62 75 66 2c 20 73 69 7a 65 6f 66 28 76 6c 65 _buf, sizeof(vle c960: 6e 5f 62 75 66 29 2c 20 32 2c 20 6f 66 66 73 65 n_buf), 2, offse c970: 74 5f 76 29 3b 0a 09 69 66 20 28 72 65 61 64 5f t_v);..if (read_ c980: 72 65 74 20 21 3d 20 73 69 7a 65 6f 66 28 76 6c ret != sizeof(vl c990: 65 6e 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 43 en_buf)) {...CAC c9a0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF c9b0: 28 22 52 65 61 64 20 66 61 69 6c 65 64 2c 20 72 ("Read failed, r c9c0: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail c9d0: 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ure");....return c9e0: 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 76 6c 65 (NULL);..}...vle c9f0: 6e 20 3d 20 28 76 6c 65 6e 5f 62 75 66 5b 31 5d n = (vlen_buf[1] ca00: 20 3c 3c 20 38 29 20 7c 20 76 6c 65 6e 5f 62 75 << 8) | vlen_bu ca10: 66 5b 30 5d 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 f[0];...CACKEY_D ca20: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 54 61 67 EBUG_PRINTF("Tag ca30: 20 4c 65 6e 67 74 68 20 3d 20 25 6c 75 2c 20 56 Length = %lu, V ca40: 61 6c 75 65 20 4c 65 6e 67 74 68 20 3d 20 25 6c alue Length = %l ca50: 75 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f u", (unsigned lo ca60: 6e 67 29 20 74 6c 65 6e 2c 20 28 75 6e 73 69 67 ng) tlen, (unsig ca70: 6e 65 64 20 6c 6f 6e 67 29 20 76 6c 65 6e 29 3b ned long) vlen); ca80: 0a 0a 09 6f 66 66 73 65 74 5f 74 20 2b 3d 20 32 ...offset_t += 2 ca90: 3b 0a 09 6f 66 66 73 65 74 5f 76 20 2b 3d 20 32 ;..offset_v += 2 caa0: 3b 0a 0a 09 69 66 20 28 74 6c 65 6e 20 3e 20 73 ;...if (tlen > s cab0: 69 7a 65 6f 66 28 74 76 61 6c 5f 62 75 66 29 29 izeof(tval_buf)) cac0: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU cad0: 47 5f 50 52 49 4e 54 46 28 22 54 61 67 20 6c 65 G_PRINTF("Tag le cae0: 6e 67 74 68 20 69 73 20 74 6f 6f 20 6c 61 72 67 ngth is too larg caf0: 65 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 e, returning in cb00: 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 failure");....re cb10: 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a turn(NULL);..}.. cb20: 09 69 66 20 28 76 6c 65 6e 20 3e 20 73 69 7a 65 .if (vlen > size cb30: 6f 66 28 76 76 61 6c 5f 62 75 66 29 29 20 7b 0a of(vval_buf)) {. cb40: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P cb50: 52 49 4e 54 46 28 22 56 61 6c 75 65 20 6c 65 6e RINTF("Value len cb60: 67 74 68 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 gth is too large cb70: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f cb80: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 ailure");....ret cb90: 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 urn(NULL);..}... cba0: 72 65 61 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 read_ret = cacke cbb0: 79 5f 72 65 61 64 5f 62 75 66 66 65 72 28 73 6c y_read_buffer(sl cbc0: 6f 74 2c 20 74 76 61 6c 5f 62 75 66 2c 20 74 6c ot, tval_buf, tl cbd0: 65 6e 2c 20 31 2c 20 6f 66 66 73 65 74 5f 74 29 en, 1, offset_t) cbe0: 3b 0a 09 69 66 20 28 72 65 61 64 5f 72 65 74 20 ;..if (read_ret cbf0: 21 3d 20 74 6c 65 6e 29 20 7b 0a 09 09 43 41 43 != tlen) {...CAC cc00: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF cc10: 28 22 55 6e 61 62 6c 65 20 74 6f 20 72 65 61 64 ("Unable to read cc20: 20 65 6e 74 69 72 65 20 54 2d 62 75 66 66 65 72 entire T-buffer cc30: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f cc40: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 ailure");....ret cc50: 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 urn(NULL);..}... cc60: 72 65 61 64 5f 72 65 74 20 3d 20 63 61 63 6b 65 read_ret = cacke cc70: 79 5f 72 65 61 64 5f 62 75 66 66 65 72 28 73 6c y_read_buffer(sl cc80: 6f 74 2c 20 76 76 61 6c 5f 62 75 66 2c 20 76 6c ot, vval_buf, vl cc90: 65 6e 2c 20 32 2c 20 6f 66 66 73 65 74 5f 76 29 en, 2, offset_v) cca0: 3b 0a 09 69 66 20 28 72 65 61 64 5f 72 65 74 20 ;..if (read_ret ccb0: 21 3d 20 76 6c 65 6e 29 20 7b 0a 09 09 43 41 43 != vlen) {...CAC ccc0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF ccd0: 28 22 55 6e 61 62 6c 65 20 74 6f 20 72 65 61 64 ("Unable to read cce0: 20 65 6e 74 69 72 65 20 56 2d 62 75 66 66 65 72 entire V-buffer ccf0: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 , returning in f cd00: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 ailure");....ret cd10: 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 urn(NULL);..}... cd20: 74 76 61 6c 20 3d 20 74 76 61 6c 5f 62 75 66 3b tval = tval_buf; cd30: 0a 09 76 76 61 6c 20 3d 20 76 76 61 6c 5f 62 75 ..vval = vval_bu cd40: 66 3b 0a 09 77 68 69 6c 65 20 28 74 6c 65 6e 20 f;..while (tlen cd50: 3e 20 30 20 26 26 20 76 6c 65 6e 20 3e 20 30 29 > 0 && vlen > 0) cd60: 20 7b 0a 09 09 74 61 67 20 3d 20 2a 74 76 61 6c {...tag = *tval cd70: 3b 0a 09 09 74 76 61 6c 2b 2b 3b 0a 09 09 74 6c ;...tval++;...tl cd80: 65 6e 2d 2d 3b 0a 0a 09 09 69 66 20 28 2a 74 76 en--;....if (*tv cd90: 61 6c 20 3d 3d 20 30 78 66 66 29 20 7b 0a 09 09 al == 0xff) {... cda0: 09 6c 65 6e 67 74 68 20 3d 20 28 74 76 61 6c 5b .length = (tval[ cdb0: 32 5d 20 3c 3c 20 38 29 20 7c 20 74 76 61 6c 5b 2] << 8) | tval[ cdc0: 31 5d 3b 0a 09 09 09 74 76 61 6c 20 2b 3d 20 33 1];....tval += 3 cdd0: 3b 0a 09 09 09 74 6c 65 6e 20 2d 3d 20 33 3b 0a ;....tlen -= 3;. cde0: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 6c 65 ..} else {....le cdf0: 6e 67 74 68 20 3d 20 2a 74 76 61 6c 3b 0a 09 09 ngth = *tval;... ce00: 09 74 76 61 6c 2b 2b 3b 0a 09 09 09 74 6c 65 6e .tval++;....tlen ce10: 2d 2d 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b 45 --;...}....CACKE ce20: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" ce30: 54 61 67 3a 20 25 73 20 28 25 30 32 78 29 22 2c Tag: %s (%02x)", ce40: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 CACKEY_DEBUG_FU ce50: 4e 43 5f 54 41 47 5f 54 4f 5f 53 54 52 28 74 61 NC_TAG_TO_STR(ta ce60: 67 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 69 6e g), (unsigned in ce70: 74 29 20 74 61 67 29 3b 0a 09 09 43 41 43 4b 45 t) tag);...CACKE ce80: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 Y_DEBUG_PRINTBUF ce90: 28 22 56 61 6c 75 65 3a 22 2c 20 76 76 61 6c 2c ("Value:", vval, cea0: 20 6c 65 6e 67 74 68 29 3b 0a 0a 09 09 63 75 72 length);....cur ceb0: 72 5f 65 6e 74 69 74 79 20 3d 20 4e 55 4c 4c 3b r_entity = NULL; cec0: 0a 09 09 73 77 69 74 63 68 20 28 74 61 67 29 20 ...switch (tag) ced0: 7b 0a 09 09 09 63 61 73 65 20 47 53 43 49 53 5f {....case GSCIS_ cee0: 54 41 47 5f 43 41 52 44 55 52 4c 3a 0a 09 09 09 TAG_CARDURL:.... cef0: 09 63 75 72 72 5f 65 6e 74 69 74 79 20 3d 20 6d .curr_entity = m cf00: 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 75 alloc(sizeof(*cu cf10: 72 72 5f 65 6e 74 69 74 79 29 29 3b 0a 09 09 09 rr_entity));.... cf20: 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 .curr_entity->va cf30: 6c 75 65 5f 63 61 72 64 75 72 6c 20 3d 20 6d 61 lue_cardurl = ma cf40: 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 75 72 lloc(sizeof(*cur cf50: 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 5f r_entity->value_ cf60: 63 61 72 64 75 72 6c 29 29 3b 0a 0a 09 09 09 09 cardurl));...... cf70: 6d 65 6d 63 70 79 28 63 75 72 72 5f 65 6e 74 69 memcpy(curr_enti cf80: 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 ty->value_cardur cf90: 6c 2d 3e 72 69 64 2c 20 76 76 61 6c 2c 20 35 29 l->rid, vval, 5) cfa0: 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 ;.....curr_entit cfb0: 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c y->value_cardurl cfc0: 2d 3e 61 70 70 74 79 70 65 20 3d 20 76 76 61 6c ->apptype = vval cfd0: 5b 35 5d 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e [5];.....curr_en cfe0: 74 69 74 79 2d 3e 76 61 6c 75 65 5f 63 61 72 64 tity->value_card cff0: 75 72 6c 2d 3e 6f 62 6a 65 63 74 69 64 20 3d 20 url->objectid = d000: 28 76 76 61 6c 5b 36 5d 20 3c 3c 20 38 29 20 7c (vval[6] << 8) | d010: 20 76 76 61 6c 5b 37 5d 3b 0a 09 09 09 09 63 75 vval[7];.....cu d020: 72 72 5f 65 6e 74 69 74 79 2d 3e 76 61 6c 75 65 rr_entity->value d030: 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 69 64 20 _cardurl->appid d040: 3d 20 28 76 76 61 6c 5b 38 5d 20 3c 3c 20 38 29 = (vval[8] << 8) d050: 20 7c 20 76 76 61 6c 5b 39 5d 3b 0a 0a 09 09 09 | vval[9];..... d060: 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 74 61 .curr_entity->ta d070: 67 20 3d 20 74 61 67 3b 0a 09 09 09 09 63 75 72 g = tag;.....cur d080: 72 5f 65 6e 74 69 74 79 2d 3e 5f 6e 65 78 74 20 r_entity->_next d090: 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 09 62 72 65 = NULL;......bre d0a0: 61 6b 3b 0a 09 09 09 63 61 73 65 20 47 53 43 49 ak;....case GSCI d0b0: 53 5f 54 41 47 5f 41 43 52 5f 54 41 42 4c 45 3a S_TAG_ACR_TABLE: d0c0: 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 .....curr_entity d0d0: 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 = malloc(sizeof d0e0: 28 2a 63 75 72 72 5f 65 6e 74 69 74 79 29 29 3b (*curr_entity)); d0f0: 0a 09 09 09 09 74 6d 70 62 75 66 20 3d 20 6d 61 .....tmpbuf = ma d100: 6c 6c 6f 63 28 6c 65 6e 67 74 68 29 3b 0a 0a 09 lloc(length);... d110: 09 09 09 6d 65 6d 63 70 79 28 74 6d 70 62 75 66 ...memcpy(tmpbuf d120: 2c 20 76 76 61 6c 2c 20 6c 65 6e 67 74 68 29 3b , vval, length); d130: 0a 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 ......curr_entit d140: 79 2d 3e 74 61 67 20 3d 20 74 61 67 3b 0a 09 09 y->tag = tag;... d150: 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 6c ..curr_entity->l d160: 65 6e 67 74 68 20 3d 20 6c 65 6e 67 74 68 3b 0a ength = length;. d170: 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d ....curr_entity- d180: 3e 76 61 6c 75 65 20 3d 20 74 6d 70 62 75 66 3b >value = tmpbuf; d190: 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 .....curr_entity d1a0: 2d 3e 5f 6e 65 78 74 20 3d 20 4e 55 4c 4c 3b 0a ->_next = NULL;. d1b0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 .....break;....c d1c0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45 ase GSCIS_TAG_CE d1d0: 52 54 49 46 49 43 41 54 45 3a 0a 09 09 09 09 63 RTIFICATE:.....c d1e0: 75 72 72 5f 65 6e 74 69 74 79 20 3d 20 6d 61 6c urr_entity = mal d1f0: 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 75 72 72 loc(sizeof(*curr d200: 5f 65 6e 74 69 74 79 29 29 3b 0a 0a 23 69 66 64 _entity));..#ifd d210: 65 66 20 48 41 56 45 5f 4c 49 42 5a 0a 09 09 09 ef HAVE_LIBZ.... d220: 09 74 6d 70 62 75 66 6c 65 6e 20 3d 20 6c 65 6e .tmpbuflen = len d230: 67 74 68 20 2a 20 32 3b 0a 09 09 09 09 74 6d 70 gth * 2;.....tmp d240: 62 75 66 20 3d 20 6d 61 6c 6c 6f 63 28 74 6d 70 buf = malloc(tmp d250: 62 75 66 6c 65 6e 29 3b 0a 0a 09 09 09 09 75 6e buflen);......un d260: 63 6f 6d 70 72 65 73 73 5f 72 65 74 20 3d 20 75 compress_ret = u d270: 6e 63 6f 6d 70 72 65 73 73 28 74 6d 70 62 75 66 ncompress(tmpbuf d280: 2c 20 26 74 6d 70 62 75 66 6c 65 6e 2c 20 76 76 , &tmpbuflen, vv d290: 61 6c 2c 20 6c 65 6e 67 74 68 29 3b 0a 09 09 09 al, length);.... d2a0: 09 69 66 20 28 75 6e 63 6f 6d 70 72 65 73 73 5f .if (uncompress_ d2b0: 72 65 74 20 21 3d 20 5a 5f 4f 4b 29 20 7b 0a 09 ret != Z_OK) {.. d2c0: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG d2d0: 5f 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 _PRINTF("Failed d2e0: 74 6f 20 64 65 63 6f 6d 70 72 65 73 73 2c 20 75 to decompress, u d2f0: 6e 63 6f 6d 70 72 65 73 73 28 29 20 72 65 74 75 ncompress() retu d300: 72 6e 65 64 20 25 69 20 2d 2d 20 72 65 73 6f 72 rned %i -- resor d310: 74 69 6e 67 20 74 6f 20 64 69 72 65 63 74 20 63 ting to direct c d320: 6f 70 79 22 2c 20 75 6e 63 6f 6d 70 72 65 73 73 opy", uncompress d330: 5f 72 65 74 29 3b 0a 0a 09 09 09 09 09 74 6d 70 _ret);.......tmp d340: 62 75 66 6c 65 6e 20 3d 20 6c 65 6e 67 74 68 3b buflen = length; d350: 0a 09 09 09 09 09 6d 65 6d 63 70 79 28 74 6d 70 ......memcpy(tmp d360: 62 75 66 2c 20 76 76 61 6c 2c 20 6c 65 6e 67 74 buf, vval, lengt d370: 68 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 h);.....}......C d380: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN d390: 54 42 55 46 28 22 44 65 63 6f 6d 70 72 65 73 73 TBUF("Decompress d3a0: 65 64 20 74 6f 3a 22 2c 20 74 6d 70 62 75 66 2c ed to:", tmpbuf, d3b0: 20 74 6d 70 62 75 66 6c 65 6e 29 3b 0a 23 65 6c tmpbuflen);.#el d3c0: 73 65 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 se.....CACKEY_DE d3d0: 42 55 47 5f 50 52 49 4e 54 46 28 22 4d 69 73 73 BUG_PRINTF("Miss d3e0: 69 6e 67 20 5a 4c 49 42 20 53 75 70 70 6f 72 74 ing ZLIB Support d3f0: 2c 20 74 68 69 73 20 63 65 72 74 69 66 69 63 61 , this certifica d400: 74 65 20 69 73 20 6c 69 6b 65 6c 79 20 75 73 65 te is likely use d410: 6c 65 73 73 2e 2e 2e 22 29 3b 0a 0a 09 09 09 09 less...");...... d420: 74 6d 70 62 75 66 6c 65 6e 20 3d 20 6c 65 6e 67 tmpbuflen = leng d430: 74 68 3b 0a 09 09 09 09 6d 65 6d 63 70 79 28 74 th;.....memcpy(t d440: 6d 70 62 75 66 2c 20 76 76 61 6c 2c 20 6c 65 6e mpbuf, vval, len d450: 67 74 68 29 3b 0a 23 65 6e 64 69 66 0a 0a 09 09 gth);.#endif.... d460: 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e 74 ..curr_entity->t d470: 61 67 20 3d 20 74 61 67 3b 0a 09 09 09 09 63 75 ag = tag;.....cu d480: 72 72 5f 65 6e 74 69 74 79 2d 3e 6c 65 6e 67 74 rr_entity->lengt d490: 68 20 3d 20 74 6d 70 62 75 66 6c 65 6e 3b 0a 09 h = tmpbuflen;.. d4a0: 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d 3e ...curr_entity-> d4b0: 76 61 6c 75 65 20 3d 20 74 6d 70 62 75 66 3b 0a value = tmpbuf;. d4c0: 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 79 2d ....curr_entity- d4d0: 3e 5f 6e 65 78 74 20 3d 20 4e 55 4c 4c 3b 0a 0a >_next = NULL;.. d4e0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca d4f0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 50 4b 43 se GSCIS_TAG_PKC d500: 53 31 35 3a 0a 09 09 09 09 63 75 72 72 5f 65 6e S15:.....curr_en d510: 74 69 74 79 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 tity = malloc(si d520: 7a 65 6f 66 28 2a 63 75 72 72 5f 65 6e 74 69 74 zeof(*curr_entit d530: 79 29 29 3b 0a 0a 09 09 09 09 63 75 72 72 5f 65 y));......curr_e d540: 6e 74 69 74 79 2d 3e 74 61 67 20 3d 20 74 61 67 ntity->tag = tag d550: 3b 0a 09 09 09 09 63 75 72 72 5f 65 6e 74 69 74 ;.....curr_entit d560: 79 2d 3e 76 61 6c 75 65 5f 62 79 74 65 20 3d 20 y->value_byte = d570: 76 76 61 6c 5b 30 5d 3b 0a 09 09 09 09 63 75 72 vval[0];.....cur d580: 72 5f 65 6e 74 69 74 79 2d 3e 5f 6e 65 78 74 20 r_entity->_next d590: 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 09 62 72 65 = NULL;......bre d5a0: 61 6b 3b 0a 09 09 7d 0a 0a 09 09 76 76 61 6c 20 ak;...}....vval d5b0: 2b 3d 20 6c 65 6e 67 74 68 3b 0a 09 09 76 6c 65 += length;...vle d5c0: 6e 20 2d 3d 20 6c 65 6e 67 74 68 3b 0a 0a 09 09 n -= length;.... d5d0: 69 66 20 28 63 75 72 72 5f 65 6e 74 69 74 79 20 if (curr_entity d5e0: 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 69 66 != NULL) {....if d5f0: 20 28 72 6f 6f 74 20 3d 3d 20 4e 55 4c 4c 29 20 (root == NULL) d600: 7b 0a 09 09 09 09 72 6f 6f 74 20 3d 20 63 75 72 {.....root = cur d610: 72 5f 65 6e 74 69 74 79 3b 0a 09 09 09 7d 0a 0a r_entity;....}.. d620: 09 09 09 69 66 20 28 6c 61 73 74 20 21 3d 20 4e ...if (last != N d630: 55 4c 4c 29 20 7b 0a 09 09 09 09 6c 61 73 74 2d ULL) {.....last- d640: 3e 5f 6e 65 78 74 20 3d 20 63 75 72 72 5f 65 6e >_next = curr_en d650: 74 69 74 79 3b 0a 09 09 09 7d 0a 0a 09 09 09 6c tity;....}.....l d660: 61 73 74 20 3d 20 63 75 72 72 5f 65 6e 74 69 74 ast = curr_entit d670: 79 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 72 65 74 75 y;...}..}...retu d680: 72 6e 28 72 6f 6f 74 29 3b 0a 7d 0a 0a 2f 2a 0a rn(root);.}../*. d690: 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 2a 20 20 * SYNPOSIS. * d6a0: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 .... *. * ARG d6b0: 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 20 2e 2e UMENTS. * .. d6c0: 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 4e 20 56 .. *. * RETURN V d6d0: 41 4c 55 45 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a ALUE. * .... d6e0: 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 *. * NOTES. * d6f0: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 .... *. */.st d700: 61 74 69 63 20 76 6f 69 64 20 63 61 63 6b 65 79 atic void cackey d710: 5f 66 72 65 65 5f 63 65 72 74 73 28 73 74 72 75 _free_certs(stru d720: 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 ct cackey_pcsc_i d730: 64 65 6e 74 69 74 79 20 2a 73 74 61 72 74 2c 20 dentity *start, d740: 73 69 7a 65 5f 74 20 63 6f 75 6e 74 2c 20 69 6e size_t count, in d750: 74 20 66 72 65 65 5f 73 74 61 72 74 29 20 7b 0a t free_start) {. d760: 09 73 69 7a 65 5f 74 20 69 64 78 3b 0a 0a 09 69 .size_t idx;...i d770: 66 20 28 73 74 61 72 74 20 3d 3d 20 4e 55 4c 4c f (start == NULL d780: 29 20 7b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d ) {...return;..} d790: 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b ...for (idx = 0; d7a0: 20 69 64 78 20 3c 20 63 6f 75 6e 74 3b 20 69 64 idx < count; id d7b0: 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 73 74 61 x++) {...if (sta d7c0: 72 74 5b 69 64 78 5d 2e 63 65 72 74 69 66 69 63 rt[idx].certific d7d0: 61 74 65 29 20 7b 0a 09 09 09 66 72 65 65 28 73 ate) {....free(s d7e0: 74 61 72 74 5b 69 64 78 5d 2e 63 65 72 74 69 66 tart[idx].certif d7f0: 69 63 61 74 65 29 3b 0a 09 09 7d 0a 09 7d 0a 0a icate);...}..}.. d800: 09 69 66 20 28 66 72 65 65 5f 73 74 61 72 74 29 .if (free_start) d810: 20 7b 0a 09 09 66 72 65 65 28 73 74 61 72 74 29 {...free(start) d820: 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d ;..}...return;.} d830: 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 ../*. * SYNPOSIS d840: 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 . * .... *. d850: 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 * ARGUMENTS. * d860: 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 52 45 54 .... *. * RET d870: 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 URN VALUE. * d880: 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 .... *. * NOTES d890: 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 . * .... *. d8a0: 2a 2f 0a 73 74 61 74 69 63 20 73 74 72 75 63 74 */.static struct d8b0: 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 cackey_pcsc_ide d8c0: 6e 74 69 74 79 20 2a 63 61 63 6b 65 79 5f 72 65 ntity *cackey_re d8d0: 61 64 5f 63 65 72 74 73 28 73 74 72 75 63 74 20 ad_certs(struct d8e0: 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f cackey_slot *slo d8f0: 74 2c 20 73 74 72 75 63 74 20 63 61 63 6b 65 79 t, struct cackey d900: 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 2a _pcsc_identity * d910: 63 65 72 74 73 2c 20 75 6e 73 69 67 6e 65 64 20 certs, unsigned d920: 6c 6f 6e 67 20 2a 63 6f 75 6e 74 29 20 7b 0a 09 long *count) {.. d930: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 70 63 struct cackey_pc d940: 73 63 5f 69 64 65 6e 74 69 74 79 20 2a 63 75 72 sc_identity *cur d950: 72 5f 69 64 3b 0a 09 73 74 72 75 63 74 20 63 61 r_id;..struct ca d960: 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20 ckey_tlv_entity d970: 2a 63 63 63 5f 74 6c 76 2c 20 2a 63 63 63 5f 63 *ccc_tlv, *ccc_c d980: 75 72 72 2c 20 2a 61 70 70 5f 74 6c 76 2c 20 2a urr, *app_tlv, * d990: 61 70 70 5f 63 75 72 72 3b 0a 09 75 6e 73 69 67 app_curr;..unsig d9a0: 6e 65 64 20 63 68 61 72 20 63 63 63 5f 61 69 64 ned char ccc_aid d9b0: 5b 5d 20 3d 20 7b 47 53 43 49 53 5f 41 49 44 5f [] = {GSCIS_AID_ d9c0: 43 43 43 7d 3b 0a 09 75 6e 73 69 67 6e 65 64 20 CCC};..unsigned d9d0: 63 68 61 72 20 63 75 72 72 5f 61 69 64 5b 37 5d char curr_aid[7] d9e0: 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ;..unsigned long d9f0: 20 6f 75 74 69 64 78 20 3d 20 30 3b 0a 09 63 61 outidx = 0;..ca da00: 63 6b 65 79 5f 72 65 74 20 74 72 61 6e 73 61 63 ckey_ret transac da10: 74 69 6f 6e 5f 72 65 74 3b 0a 09 69 6e 74 20 63 tion_ret;..int c da20: 65 72 74 73 5f 72 65 73 69 7a 61 62 6c 65 3b 0a erts_resizable;. da30: 09 69 6e 74 20 73 65 6e 64 5f 72 65 74 2c 20 73 .int send_ret, s da40: 65 6c 65 63 74 5f 72 65 74 3b 0a 0a 09 43 41 43 elect_ret;...CAC da50: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF da60: 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i da70: 66 20 28 63 6f 75 6e 74 20 3d 3d 20 4e 55 4c 4c f (count == NULL da80: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB da90: 55 47 5f 50 52 49 4e 54 46 28 22 63 6f 75 6e 74 UG_PRINTF("count daa0: 20 69 73 20 4e 55 4c 4c 2c 20 72 65 74 75 72 6e is NULL, return dab0: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") dac0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c ;....return(NULL dad0: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 65 72 74 );..}...if (cert dae0: 73 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 69 s != NULL) {...i daf0: 66 20 28 2a 63 6f 75 6e 74 20 3d 3d 20 30 29 20 f (*count == 0) db00: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU db10: 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 G_PRINTF("Reques db20: 74 65 64 20 77 65 20 72 65 74 75 72 6e 20 30 20 ted we return 0 db30: 6f 62 6a 65 63 74 73 2c 20 73 68 6f 72 74 2d 63 objects, short-c db40: 69 72 63 75 69 74 22 29 3b 0a 0a 09 09 09 72 65 ircuit");.....re db50: 74 75 72 6e 28 63 65 72 74 73 29 3b 0a 09 09 7d turn(certs);...} db60: 0a 09 7d 0a 0a 09 2f 2a 20 42 65 67 69 6e 20 61 ..}.../* Begin a db70: 20 53 6d 61 72 74 43 61 72 64 20 74 72 61 6e 73 SmartCard trans db80: 61 63 74 69 6f 6e 20 2a 2f 0a 09 74 72 61 6e 73 action */..trans db90: 61 63 74 69 6f 6e 5f 72 65 74 20 3d 20 63 61 63 action_ret = cac dba0: 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 key_begin_transa dbb0: 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 09 69 66 ction(slot);..if dbc0: 20 28 74 72 61 6e 73 61 63 74 69 6f 6e 5f 72 65 (transaction_re dbd0: 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 t != CACKEY_PCSC dbe0: 5f 53 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 _S_OK) {...CACKE dbf0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" dc00: 55 6e 61 62 6c 65 20 62 65 67 69 6e 20 74 72 61 Unable begin tra dc10: 6e 73 61 63 74 69 6f 6e 2c 20 72 65 74 75 72 6e nsaction, return dc20: 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 ing in failure") dc30: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c ;....return(NULL dc40: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 65 72 74 );..}...if (cert dc50: 73 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 63 s == NULL) {...c dc60: 65 72 74 73 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 erts = malloc(si dc70: 7a 65 6f 66 28 2a 63 65 72 74 73 29 20 2a 20 35 zeof(*certs) * 5 dc80: 29 3b 0a 09 09 2a 63 6f 75 6e 74 20 3d 20 35 3b );...*count = 5; dc90: 0a 09 09 63 65 72 74 73 5f 72 65 73 69 7a 61 62 ...certs_resizab dca0: 6c 65 20 3d 20 31 3b 0a 09 7d 20 65 6c 73 65 20 le = 1;..} else dcb0: 7b 0a 09 09 63 65 72 74 73 5f 72 65 73 69 7a 61 {...certs_resiza dcc0: 62 6c 65 20 3d 20 30 3b 0a 09 7d 0a 0a 09 2f 2a ble = 0;..}.../* dcd0: 20 53 65 6c 65 63 74 20 74 68 65 20 43 43 43 20 Select the CCC dce0: 41 70 70 6c 65 74 20 2a 2f 0a 09 73 65 6e 64 5f Applet */..send_ dcf0: 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6c ret = cackey_sel dd00: 65 63 74 5f 61 70 70 6c 65 74 28 73 6c 6f 74 2c ect_applet(slot, dd10: 20 63 63 63 5f 61 69 64 2c 20 73 69 7a 65 6f 66 ccc_aid, sizeof dd20: 28 63 63 63 5f 61 69 64 29 29 3b 0a 09 69 66 20 (ccc_aid));..if dd30: 28 73 65 6e 64 5f 72 65 74 20 21 3d 20 43 41 43 (send_ret != CAC dd40: 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b KEY_PCSC_S_OK) { dd50: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ dd60: 50 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 PRINTF("Unable t dd70: 6f 20 73 65 6c 65 63 74 20 43 43 43 20 41 70 70 o select CCC App dd80: 6c 65 74 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 let, returning i dd90: 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 n failure");.... dda0: 2f 2a 20 54 65 72 6d 69 6e 61 74 65 20 53 6d 61 /* Terminate Sma ddb0: 72 74 43 61 72 64 20 54 72 61 6e 73 61 63 74 69 rtCard Transacti ddc0: 6f 6e 20 2a 2f 0a 09 09 63 61 63 6b 65 79 5f 65 on */...cackey_e ddd0: 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 73 nd_transaction(s dde0: 6c 6f 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 lot);....return( ddf0: 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 52 NULL);..}.../* R de00: 65 61 64 20 61 6c 6c 20 74 68 65 20 61 70 70 6c ead all the appl de10: 65 74 73 20 66 72 6f 6d 20 74 68 65 20 43 43 43 ets from the CCC de20: 27 73 20 54 4c 56 20 2a 2f 0a 09 63 63 63 5f 74 's TLV */..ccc_t de30: 6c 76 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 lv = cackey_read de40: 5f 74 6c 76 28 73 6c 6f 74 29 3b 0a 0a 09 2f 2a _tlv(slot);.../* de50: 20 4c 6f 6f 6b 20 66 6f 72 20 43 41 52 44 55 52 Look for CARDUR de60: 4c 73 20 74 68 61 74 20 63 6f 6f 72 65 73 70 6f Ls that coorespo de70: 6e 64 20 74 6f 20 50 4b 49 20 61 70 70 6c 65 74 nd to PKI applet de80: 73 20 2a 2f 0a 09 66 6f 72 20 28 63 63 63 5f 63 s */..for (ccc_c de90: 75 72 72 20 3d 20 63 63 63 5f 74 6c 76 3b 20 63 urr = ccc_tlv; c dea0: 63 63 5f 63 75 72 72 3b 20 63 63 63 5f 63 75 72 cc_curr; ccc_cur deb0: 72 20 3d 20 63 63 63 5f 63 75 72 72 2d 3e 5f 6e r = ccc_curr->_n dec0: 65 78 74 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ext) {...CACKEY_ ded0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46 6f DEBUG_PRINTF("Fo dee0: 75 6e 64 20 74 61 67 3a 20 25 73 20 2e 2e 2e 20 und tag: %s ... def0: 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ", CACKEY_DEBUG_ df00: 46 55 4e 43 5f 54 41 47 5f 54 4f 5f 53 54 52 28 FUNC_TAG_TO_STR( df10: 63 63 63 5f 63 75 72 72 2d 3e 74 61 67 29 29 3b ccc_curr->tag)); df20: 0a 0a 09 09 69 66 20 28 63 63 63 5f 63 75 72 72 ....if (ccc_curr df30: 2d 3e 74 61 67 20 21 3d 20 47 53 43 49 53 5f 54 ->tag != GSCIS_T df40: 41 47 5f 43 41 52 44 55 52 4c 29 20 7b 0a 09 09 AG_CARDURL) {... df50: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR df60: 49 4e 54 46 28 22 20 20 2e 2e 2e 20 73 6b 69 70 INTF(" ... skip df70: 70 69 6e 67 20 69 74 20 28 77 65 20 6f 6e 6c 79 ping it (we only df80: 20 63 61 72 65 20 61 62 6f 75 74 20 43 41 52 44 care about CARD df90: 55 52 4c 73 29 22 29 3b 0a 0a 09 09 09 63 6f 6e URLs)");.....con dfa0: 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 69 66 tinue;...}....if dfb0: 20 28 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c ((ccc_curr->val dfc0: 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 74 ue_cardurl->appt dfd0: 79 70 65 20 26 20 43 41 43 4b 45 59 5f 54 4c 56 ype & CACKEY_TLV dfe0: 5f 41 50 50 5f 50 4b 49 29 20 21 3d 20 43 41 43 _APP_PKI) != CAC dff0: 4b 45 59 5f 54 4c 56 5f 41 50 50 5f 50 4b 49 29 KEY_TLV_APP_PKI) e000: 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB e010: 55 47 5f 50 52 49 4e 54 46 28 22 20 20 2e 2e 2e UG_PRINTF(" ... e020: 20 73 6b 69 70 70 69 6e 67 20 69 74 20 28 77 65 skipping it (we e030: 20 6f 6e 6c 79 20 63 61 72 65 20 61 62 6f 75 74 only care about e040: 20 50 4b 49 20 61 70 70 6c 65 74 73 2c 20 74 68 PKI applets, th e050: 69 73 20 61 70 70 6c 65 74 20 73 75 70 70 6f 72 is applet suppor e060: 74 73 3a 20 25 73 2f 25 30 32 78 29 22 2c 20 43 ts: %s/%02x)", C e070: 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 ACKEY_DEBUG_FUNC e080: 5f 41 50 50 54 59 50 45 5f 54 4f 5f 53 54 52 28 _APPTYPE_TO_STR( e090: 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f ccc_curr->value_ e0a0: 63 61 72 64 75 72 6c 2d 3e 61 70 70 74 79 70 65 cardurl->apptype e0b0: 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 ), (unsigned int e0c0: 29 20 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 ) ccc_curr->valu e0d0: 65 5f 63 61 72 64 75 72 6c 2d 3e 61 70 70 74 79 e_cardurl->appty e0e0: 70 65 29 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 pe);.....continu e0f0: 65 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b 45 59 e;...}....CACKEY e100: 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 _DEBUG_PRINTBUF( e110: 22 52 49 44 3a 22 2c 20 63 63 63 5f 63 75 72 72 "RID:", ccc_curr e120: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d ->value_cardurl- e130: 3e 72 69 64 2c 20 73 69 7a 65 6f 66 28 63 63 63 >rid, sizeof(ccc e140: 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 _curr->value_car e150: 64 75 72 6c 2d 3e 72 69 64 29 29 3b 0a 09 09 43 durl->rid));...C e160: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN e170: 54 46 28 22 41 70 70 49 44 20 3d 20 25 73 2f 25 TF("AppID = %s/% e180: 30 34 6c 78 22 2c 20 43 41 43 4b 45 59 5f 44 45 04lx", CACKEY_DE e190: 42 55 47 5f 46 55 4e 43 5f 4f 42 4a 49 44 5f 54 BUG_FUNC_OBJID_T e1a0: 4f 5f 53 54 52 28 63 63 63 5f 63 75 72 72 2d 3e O_STR(ccc_curr-> e1b0: 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 61 value_cardurl->a e1c0: 70 70 69 64 29 2c 20 28 75 6e 73 69 67 6e 65 64 ppid), (unsigned e1d0: 20 6c 6f 6e 67 29 20 63 63 63 5f 63 75 72 72 2d long) ccc_curr- e1e0: 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e >value_cardurl-> e1f0: 61 70 70 69 64 29 3b 0a 09 09 43 41 43 4b 45 59 appid);...CACKEY e200: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 4f _DEBUG_PRINTF("O e210: 62 6a 65 63 74 49 44 20 3d 20 25 73 2f 25 30 34 bjectID = %s/%04 e220: 6c 78 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 lx", CACKEY_DEBU e230: 47 5f 46 55 4e 43 5f 4f 42 4a 49 44 5f 54 4f 5f G_FUNC_OBJID_TO_ e240: 53 54 52 28 63 63 63 5f 63 75 72 72 2d 3e 76 61 STR(ccc_curr->va e250: 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 6f 62 6a lue_cardurl->obj e260: 65 63 74 69 64 29 2c 20 28 75 6e 73 69 67 6e 65 ectid), (unsigne e270: 64 20 6c 6f 6e 67 29 20 63 63 63 5f 63 75 72 72 d long) ccc_curr e280: 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d ->value_cardurl- e290: 3e 6f 62 6a 65 63 74 69 64 29 3b 0a 0a 09 09 6d >objectid);....m e2a0: 65 6d 63 70 79 28 63 75 72 72 5f 61 69 64 2c 20 emcpy(curr_aid, e2b0: 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f ccc_curr->value_ e2c0: 63 61 72 64 75 72 6c 2d 3e 72 69 64 2c 20 73 69 cardurl->rid, si e2d0: 7a 65 6f 66 28 63 63 63 5f 63 75 72 72 2d 3e 76 zeof(ccc_curr->v e2e0: 61 6c 75 65 5f 63 61 72 64 75 72 6c 2d 3e 72 69 alue_cardurl->ri e2f0: 64 29 29 3b 0a 09 09 63 75 72 72 5f 61 69 64 5b d));...curr_aid[ e300: 73 69 7a 65 6f 66 28 63 75 72 72 5f 61 69 64 29 sizeof(curr_aid) e310: 20 2d 20 32 5d 20 3d 20 28 63 63 63 5f 63 75 72 - 2] = (ccc_cur e320: 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c r->value_cardurl e330: 2d 3e 61 70 70 69 64 20 3e 3e 20 38 29 20 26 20 ->appid >> 8) & e340: 30 78 66 66 3b 0a 09 09 63 75 72 72 5f 61 69 64 0xff;...curr_aid e350: 5b 73 69 7a 65 6f 66 28 63 75 72 72 5f 61 69 64 [sizeof(curr_aid e360: 29 20 2d 20 31 5d 20 3d 20 63 63 63 5f 63 75 72 ) - 1] = ccc_cur e370: 72 2d 3e 76 61 6c 75 65 5f 63 61 72 64 75 72 6c r->value_cardurl e380: 2d 3e 61 70 70 69 64 20 26 20 30 78 66 66 3b 0a ->appid & 0xff;. e390: 0a 09 09 2f 2a 20 53 65 6c 65 63 74 20 66 6f 75 .../* Select fou e3a0: 6e 64 20 61 70 70 6c 65 74 20 2e 2e 2e 20 2a 2f nd applet ... */ e3b0: 0a 09 09 73 65 6c 65 63 74 5f 72 65 74 20 3d 20 ...select_ret = e3c0: 63 61 63 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 cackey_select_ap e3d0: 70 6c 65 74 28 73 6c 6f 74 2c 20 63 75 72 72 5f plet(slot, curr_ e3e0: 61 69 64 2c 20 73 69 7a 65 6f 66 28 63 75 72 72 aid, sizeof(curr e3f0: 5f 61 69 64 29 29 3b 0a 09 09 69 66 20 28 73 65 _aid));...if (se e400: 6c 65 63 74 5f 72 65 74 20 21 3d 20 43 41 43 4b lect_ret != CACK e410: 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a EY_PCSC_S_OK) {. e420: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ e430: 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 74 PRINTF("Failed t e440: 6f 20 73 65 6c 65 63 74 20 61 70 70 6c 65 74 2c o select applet, e450: 20 73 6b 69 70 70 69 6e 67 20 70 72 6f 63 65 73 skipping proces e460: 73 69 6e 67 20 6f 66 20 74 68 69 73 20 6f 62 6a sing of this obj e470: 65 63 74 22 29 3b 0a 0a 09 09 09 63 6f 6e 74 69 ect");.....conti e480: 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 2f 2a 20 2e nue;...}..../* . e490: 2e 2e 20 61 6e 64 20 6f 62 6a 65 63 74 20 28 66 .. and object (f e4a0: 69 6c 65 29 20 2a 2f 0a 09 09 73 65 6c 65 63 74 ile) */...select e4b0: 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 _ret = cackey_se e4c0: 6c 65 63 74 5f 66 69 6c 65 28 73 6c 6f 74 2c 20 lect_file(slot, e4d0: 63 63 63 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f ccc_curr->value_ e4e0: 63 61 72 64 75 72 6c 2d 3e 6f 62 6a 65 63 74 69 cardurl->objecti e4f0: 64 29 3b 0a 09 09 69 66 20 28 73 65 6c 65 63 74 d);...if (select e500: 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 _ret != CACKEY_P e510: 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 09 43 CSC_S_OK) {....C e520: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN e530: 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 73 65 TF("Failed to se e540: 6c 65 63 74 20 66 69 6c 65 2c 20 73 6b 69 70 70 lect file, skipp e550: 69 6e 67 20 70 72 6f 63 65 73 73 69 6e 67 20 6f ing processing o e560: 66 20 74 68 69 73 20 6f 62 6a 65 63 74 22 29 3b f this object"); e570: 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 .....continue;.. e580: 09 7d 0a 0a 09 09 2f 2a 20 50 72 6f 63 65 73 73 .}..../* Process e590: 20 74 68 69 73 20 66 69 6c 65 27 73 20 54 4c 56 this file's TLV e5a0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 63 65 72 looking for cer e5b0: 74 69 66 69 63 61 74 65 73 20 2a 2f 0a 09 09 61 tificates */...a e5c0: 70 70 5f 74 6c 76 20 3d 20 63 61 63 6b 65 79 5f pp_tlv = cackey_ e5d0: 72 65 61 64 5f 74 6c 76 28 73 6c 6f 74 29 3b 0a read_tlv(slot);. e5e0: 0a 09 09 66 6f 72 20 28 61 70 70 5f 63 75 72 72 ...for (app_curr e5f0: 20 3d 20 61 70 70 5f 74 6c 76 3b 20 61 70 70 5f = app_tlv; app_ e600: 63 75 72 72 3b 20 61 70 70 5f 63 75 72 72 20 3d curr; app_curr = e610: 20 61 70 70 5f 63 75 72 72 2d 3e 5f 6e 65 78 74 app_curr->_next e620: 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE e630: 42 55 47 5f 50 52 49 4e 54 46 28 22 46 6f 75 6e BUG_PRINTF("Foun e640: 64 20 74 61 67 3a 20 25 73 22 2c 20 43 41 43 4b d tag: %s", CACK e650: 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 54 41 EY_DEBUG_FUNC_TA e660: 47 5f 54 4f 5f 53 54 52 28 61 70 70 5f 63 75 72 G_TO_STR(app_cur e670: 72 2d 3e 74 61 67 29 29 3b 0a 09 09 09 69 66 20 r->tag));....if e680: 28 61 70 70 5f 63 75 72 72 2d 3e 74 61 67 20 21 (app_curr->tag ! e690: 3d 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 = GSCIS_TAG_CERT e6a0: 49 46 49 43 41 54 45 29 20 7b 0a 09 09 09 09 43 IFICATE) {.....C e6b0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN e6c0: 54 46 28 22 20 20 2e 2e 2e 20 73 6b 69 70 70 69 TF(" ... skippi e6d0: 6e 67 20 69 74 20 28 77 65 20 6f 6e 6c 79 20 63 ng it (we only c e6e0: 61 72 65 20 61 62 6f 75 74 20 43 45 52 54 49 46 are about CERTIF e6f0: 49 43 41 54 45 73 29 22 29 3b 0a 0a 09 09 09 09 ICATEs)");...... e700: 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 7d 0a 0a continue;....}.. e710: 09 09 09 63 75 72 72 5f 69 64 20 3d 20 26 63 65 ...curr_id = &ce e720: 72 74 73 5b 6f 75 74 69 64 78 5d 3b 0a 09 09 09 rts[outidx];.... e730: 6f 75 74 69 64 78 2b 2b 3b 0a 0a 09 09 09 6d 65 outidx++;.....me e740: 6d 63 70 79 28 63 75 72 72 5f 69 64 2d 3e 61 70 mcpy(curr_id->ap e750: 70 6c 65 74 2c 20 63 75 72 72 5f 61 69 64 2c 20 plet, curr_aid, e760: 73 69 7a 65 6f 66 28 63 75 72 72 5f 69 64 2d 3e sizeof(curr_id-> e770: 61 70 70 6c 65 74 29 29 3b 0a 09 09 09 63 75 72 applet));....cur e780: 72 5f 69 64 2d 3e 66 69 6c 65 20 3d 20 63 63 63 r_id->file = ccc e790: 5f 63 75 72 72 2d 3e 76 61 6c 75 65 5f 63 61 72 _curr->value_car e7a0: 64 75 72 6c 2d 3e 6f 62 6a 65 63 74 69 64 3b 0a durl->objectid;. e7b0: 09 09 09 63 75 72 72 5f 69 64 2d 3e 6b 65 79 73 ...curr_id->keys e7c0: 69 7a 65 20 3d 20 2d 31 3b 0a 0a 09 09 09 43 41 ize = -1;.....CA e7d0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT e7e0: 46 28 22 46 69 6c 6c 69 6e 67 20 63 75 72 72 5f F("Filling curr_ e7f0: 69 64 2d 3e 61 70 70 6c 65 74 20 28 25 70 29 20 id->applet (%p) e800: 77 69 74 68 20 25 6c 75 20 62 79 74 65 73 3a 22 with %lu bytes:" e810: 2c 20 63 75 72 72 5f 69 64 2d 3e 61 70 70 6c 65 , curr_id->apple e820: 74 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e t, (unsigned lon e830: 67 29 20 73 69 7a 65 6f 66 28 63 75 72 72 5f 69 g) sizeof(curr_i e840: 64 2d 3e 61 70 70 6c 65 74 29 29 3b 0a 09 09 09 d->applet));.... e850: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI e860: 4e 54 42 55 46 28 22 56 41 4c 3a 22 2c 20 63 75 NTBUF("VAL:", cu e870: 72 72 5f 69 64 2d 3e 61 70 70 6c 65 74 2c 20 73 rr_id->applet, s e880: 69 7a 65 6f 66 28 63 75 72 72 5f 69 64 2d 3e 61 izeof(curr_id->a e890: 70 70 6c 65 74 29 29 3b 0a 0a 09 09 09 63 75 72 pplet));.....cur e8a0: 72 5f 69 64 2d 3e 63 65 72 74 69 66 69 63 61 74 r_id->certificat e8b0: 65 5f 6c 65 6e 20 3d 20 61 70 70 5f 63 75 72 72 e_len = app_curr e8c0: 2d 3e 6c 65 6e 67 74 68 3b 0a 0a 09 09 09 63 75 ->length;.....cu e8d0: 72 72 5f 69 64 2d 3e 63 65 72 74 69 66 69 63 61 rr_id->certifica e8e0: 74 65 20 3d 20 6d 61 6c 6c 6f 63 28 63 75 72 72 te = malloc(curr e8f0: 5f 69 64 2d 3e 63 65 72 74 69 66 69 63 61 74 65 _id->certificate e900: 5f 6c 65 6e 29 3b 0a 09 09 09 6d 65 6d 63 70 79 _len);....memcpy e910: 28 63 75 72 72 5f 69 64 2d 3e 63 65 72 74 69 66 (curr_id->certif e920: 69 63 61 74 65 2c 20 61 70 70 5f 63 75 72 72 2d icate, app_curr- e930: 3e 76 61 6c 75 65 2c 20 63 75 72 72 5f 69 64 2d >value, curr_id- e940: 3e 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e >certificate_len e950: 29 3b 0a 0a 09 09 09 69 66 20 28 6f 75 74 69 64 );.....if (outid e960: 78 20 3e 3d 20 2a 63 6f 75 6e 74 29 20 7b 0a 09 x >= *count) {.. e970: 09 09 09 69 66 20 28 63 65 72 74 73 5f 72 65 73 ...if (certs_res e980: 69 7a 61 62 6c 65 29 20 7b 0a 09 09 09 09 09 2a izable) {......* e990: 63 6f 75 6e 74 20 2a 3d 20 32 3b 0a 09 09 09 09 count *= 2;..... e9a0: 09 63 65 72 74 73 20 3d 20 72 65 61 6c 6c 6f 63 .certs = realloc e9b0: 28 63 65 72 74 73 2c 20 73 69 7a 65 6f 66 28 2a (certs, sizeof(* e9c0: 63 65 72 74 73 29 20 2a 20 28 2a 63 6f 75 6e 74 certs) * (*count e9d0: 29 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b ));.....} else { e9e0: 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... e9f0: 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 63 .}....}...}....c ea00: 61 63 6b 65 79 5f 66 72 65 65 5f 74 6c 76 28 61 ackey_free_tlv(a ea10: 70 70 5f 74 6c 76 29 3b 0a 0a 09 09 69 66 20 28 pp_tlv);....if ( ea20: 6f 75 74 69 64 78 20 3e 3d 20 2a 63 6f 75 6e 74 outidx >= *count ea30: 29 20 7b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 ) {....break;... ea40: 7d 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 66 72 }..}...cackey_fr ea50: 65 65 5f 74 6c 76 28 63 63 63 5f 74 6c 76 29 3b ee_tlv(ccc_tlv); ea60: 0a 0a 09 2a 63 6f 75 6e 74 20 3d 20 6f 75 74 69 ...*count = outi ea70: 64 78 3b 0a 0a 09 69 66 20 28 63 65 72 74 73 5f dx;...if (certs_ ea80: 72 65 73 69 7a 61 62 6c 65 29 20 7b 0a 09 09 63 resizable) {...c ea90: 65 72 74 73 20 3d 20 72 65 61 6c 6c 6f 63 28 63 erts = realloc(c eaa0: 65 72 74 73 2c 20 73 69 7a 65 6f 66 28 2a 63 65 erts, sizeof(*ce eab0: 72 74 73 29 20 2a 20 28 2a 63 6f 75 6e 74 29 29 rts) * (*count)) eac0: 3b 0a 09 7d 0a 0a 09 2f 2a 20 54 65 72 6d 69 6e ;..}.../* Termin ead0: 61 74 65 20 53 6d 61 72 74 43 61 72 64 20 54 72 ate SmartCard Tr eae0: 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 63 61 ansaction */..ca eaf0: 63 6b 65 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 ckey_end_transac eb00: 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 72 65 tion(slot);...re eb10: 74 75 72 6e 28 63 65 72 74 73 29 3b 0a 7d 0a 0a turn(certs);.}.. eb20: 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a 20 /*. * SYNPOSIS. eb30: 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 * .... *. * eb40: 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 20 ARGUMENTS. * eb50: 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 52 .... *. * RETUR eb60: 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 2e N VALUE. * . eb70: 2e 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a 20 ... *. * NOTES. eb80: 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 2f * .... *. */ eb90: 0a 73 74 61 74 69 63 20 73 73 69 7a 65 5f 74 20 .static ssize_t eba0: 63 61 63 6b 65 79 5f 73 69 67 6e 64 65 63 72 79 cackey_signdecry ebb0: 70 74 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 pt(struct cackey ebc0: 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 73 74 72 _slot *slot, str ebd0: 75 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 uct cackey_ident ebe0: 69 74 79 20 2a 69 64 65 6e 74 69 74 79 2c 20 75 ity *identity, u ebf0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 75 nsigned char *bu ec00: 66 2c 20 73 69 7a 65 5f 74 20 62 75 66 6c 65 6e f, size_t buflen ec10: 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 , unsigned char ec20: 2a 6f 75 74 62 75 66 2c 20 73 69 7a 65 5f 74 20 *outbuf, size_t ec30: 6f 75 74 62 75 66 6c 65 6e 2c 20 69 6e 74 20 70 outbuflen, int p ec40: 61 64 49 6e 70 75 74 2c 20 69 6e 74 20 75 6e 70 adInput, int unp ec50: 61 64 4f 75 74 70 75 74 29 20 7b 0a 09 75 6e 73 adOutput) {..uns ec60: 69 67 6e 65 64 20 63 68 61 72 20 2a 74 6d 70 62 igned char *tmpb ec70: 75 66 2c 20 2a 74 6d 70 62 75 66 5f 73 2c 20 2a uf, *tmpbuf_s, * ec80: 6f 75 74 62 75 66 5f 73 3b 0a 09 75 6e 73 69 67 outbuf_s;..unsig ec90: 6e 65 64 20 63 68 61 72 20 62 79 74 65 73 5f 74 ned char bytes_t eca0: 6f 5f 73 65 6e 64 2c 20 70 31 3b 0a 09 75 6e 73 o_send, p1;..uns ecb0: 69 67 6e 65 64 20 63 68 61 72 20 62 6c 6f 63 6b igned char block ecc0: 74 79 70 65 3b 0a 09 63 61 63 6b 65 79 5f 72 65 type;..cackey_re ecd0: 74 20 73 65 6e 64 5f 72 65 74 3b 0a 09 75 69 6e t send_ret;..uin ece0: 74 31 36 5f 74 20 72 65 73 70 63 6f 64 65 3b 0a t16_t respcode;. ecf0: 09 73 73 69 7a 65 5f 74 20 72 65 74 76 61 6c 20 .ssize_t retval ed00: 3d 20 30 2c 20 75 6e 70 61 64 6f 66 66 73 65 74 = 0, unpadoffset ed10: 3b 0a 09 73 69 7a 65 5f 74 20 74 6d 70 62 75 66 ;..size_t tmpbuf ed20: 6c 65 6e 2c 20 70 61 64 6c 65 6e 2c 20 74 6d 70 len, padlen, tmp ed30: 6f 75 74 62 75 66 6c 65 6e 3b 0a 09 69 6e 74 20 outbuflen;..int ed40: 66 72 65 65 5f 74 6d 70 62 75 66 20 3d 20 30 3b free_tmpbuf = 0; ed50: 0a 09 69 6e 74 20 6c 65 3b 0a 0a 09 43 41 43 4b ..int le;...CACK ed60: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( ed70: 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if ed80: 20 28 73 6c 6f 74 20 3d 3d 20 4e 55 4c 4c 29 20 (slot == NULL) ed90: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG eda0: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. edb0: 20 73 6c 6f 74 20 69 73 20 4e 55 4c 4c 22 29 3b slot is NULL"); edc0: 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. edd0: 09 7d 0a 0a 09 69 66 20 28 62 75 66 20 3d 3d 20 .}...if (buf == ede0: 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY edf0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E ee00: 72 72 6f 72 2e 20 20 62 75 66 20 69 73 20 4e 55 rror. buf is NU ee10: 4c 4c 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 LL");....return( ee20: 2d 31 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 6f 75 -1);..}...if (ou ee30: 74 62 75 66 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a tbuf == NULL) {. ee40: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P ee50: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 6f RINTF("Error. o ee60: 75 74 62 75 66 20 69 73 20 4e 55 4c 4c 22 29 3b utbuf is NULL"); ee70: 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. ee80: 09 7d 0a 0a 09 69 66 20 28 69 64 65 6e 74 69 74 .}...if (identit ee90: 79 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 y == NULL) {...C eea0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN eeb0: 54 46 28 22 45 72 72 6f 72 2e 20 20 69 64 65 6e TF("Error. iden eec0: 74 69 74 79 20 69 73 20 4e 55 4c 4c 22 29 3b 0a tity is NULL");. eed0: 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 ...return(-1);.. eee0: 7d 0a 0a 09 69 66 20 28 69 64 65 6e 74 69 74 79 }...if (identity eef0: 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 ->pcsc_identity ef00: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC ef10: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF ef20: 28 22 45 72 72 6f 72 2e 20 20 69 64 65 6e 74 69 ("Error. identi ef30: 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 74 ty->pcsc_identit ef40: 79 20 69 73 20 4e 55 4c 4c 22 29 3b 0a 0a 09 09 y is NULL");.... ef50: 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a return(-1);..}.. ef60: 09 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 64 ./* Determine id ef70: 65 6e 74 69 74 79 20 4b 65 79 20 73 69 7a 65 20 entity Key size ef80: 2a 2f 0a 09 69 66 20 28 69 64 65 6e 74 69 74 79 */..if (identity ef90: 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 74 79 2d ->pcsc_identity- efa0: 3e 6b 65 79 73 69 7a 65 20 3c 20 30 29 20 7b 0a >keysize < 0) {. efb0: 09 09 69 64 65 6e 74 69 74 79 2d 3e 70 63 73 63 ..identity->pcsc efc0: 5f 69 64 65 6e 74 69 74 79 2d 3e 6b 65 79 73 69 _identity->keysi efd0: 7a 65 20 3d 20 78 35 30 39 5f 74 6f 5f 6b 65 79 ze = x509_to_key efe0: 73 69 7a 65 28 69 64 65 6e 74 69 74 79 2d 3e 70 size(identity->p eff0: 63 73 63 5f 69 64 65 6e 74 69 74 79 2d 3e 63 65 csc_identity->ce f000: 72 74 69 66 69 63 61 74 65 2c 20 69 64 65 6e 74 rtificate, ident f010: 69 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 ity->pcsc_identi f020: 74 79 2d 3e 63 65 72 74 69 66 69 63 61 74 65 5f ty->certificate_ f030: 6c 65 6e 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 50 61 len);..}.../* Pa f040: 64 20 6d 65 73 73 61 67 65 20 74 6f 20 6b 65 79 d message to key f050: 20 73 69 7a 65 20 2a 2f 0a 09 69 66 20 28 70 61 size */..if (pa f060: 64 49 6e 70 75 74 29 20 7b 0a 09 09 69 66 20 28 dInput) {...if ( f070: 69 64 65 6e 74 69 74 79 2d 3e 70 63 73 63 5f 69 identity->pcsc_i f080: 64 65 6e 74 69 74 79 2d 3e 6b 65 79 73 69 7a 65 dentity->keysize f090: 20 3e 20 30 29 20 7b 0a 09 09 09 69 66 20 28 62 > 0) {....if (b f0a0: 75 66 6c 65 6e 20 21 3d 20 69 64 65 6e 74 69 74 uflen != identit f0b0: 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 74 79 y->pcsc_identity f0c0: 2d 3e 6b 65 79 73 69 7a 65 29 20 7b 0a 09 09 09 ->keysize) {.... f0d0: 09 69 66 20 28 62 75 66 6c 65 6e 20 3e 20 28 69 .if (buflen > (i f0e0: 64 65 6e 74 69 74 79 2d 3e 70 63 73 63 5f 69 64 dentity->pcsc_id f0f0: 65 6e 74 69 74 79 2d 3e 6b 65 79 73 69 7a 65 20 entity->keysize f100: 2b 20 33 29 29 20 7b 0a 09 09 09 09 09 43 41 43 + 3)) {......CAC f110: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF f120: 28 22 45 72 72 6f 72 2e 20 20 4d 65 73 73 61 67 ("Error. Messag f130: 65 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 e is too large t f140: 6f 20 73 69 67 6e 2f 64 65 63 72 79 70 74 22 29 o sign/decrypt") f150: 3b 0a 0a 09 09 09 09 09 72 65 74 75 72 6e 28 2d ;.......return(- f160: 31 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 74 1);.....}......t f170: 6d 70 62 75 66 6c 65 6e 20 3d 20 69 64 65 6e 74 mpbuflen = ident f180: 69 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 ity->pcsc_identi f190: 74 79 2d 3e 6b 65 79 73 69 7a 65 3b 0a 09 09 09 ty->keysize;.... f1a0: 09 74 6d 70 62 75 66 20 3d 20 6d 61 6c 6c 6f 63 .tmpbuf = malloc f1b0: 28 74 6d 70 62 75 66 6c 65 6e 29 3b 0a 09 09 09 (tmpbuflen);.... f1c0: 09 66 72 65 65 5f 74 6d 70 62 75 66 20 3d 20 31 .free_tmpbuf = 1 f1d0: 3b 0a 0a 09 09 09 09 70 61 64 6c 65 6e 20 3d 20 ;......padlen = f1e0: 74 6d 70 62 75 66 6c 65 6e 20 2d 20 62 75 66 6c tmpbuflen - bufl f1f0: 65 6e 20 2d 20 33 3b 0a 0a 09 09 09 09 2f 2a 20 en - 3;....../* f200: 52 53 41 20 50 4b 43 53 23 31 20 45 4d 53 41 2d RSA PKCS#1 EMSA- f210: 50 4b 43 53 31 2d 76 31 5f 35 20 50 61 64 64 69 PKCS1-v1_5 Paddi f220: 6e 67 20 2a 2f 0a 09 09 09 09 74 6d 70 62 75 66 ng */.....tmpbuf f230: 5b 30 5d 20 3d 20 30 78 30 30 3b 0a 09 09 09 09 [0] = 0x00;..... f240: 74 6d 70 62 75 66 5b 31 5d 20 3d 20 30 78 30 31 tmpbuf[1] = 0x01 f250: 3b 0a 09 09 09 09 6d 65 6d 73 65 74 28 26 74 6d ;.....memset(&tm f260: 70 62 75 66 5b 32 5d 2c 20 30 78 46 46 2c 20 70 pbuf[2], 0xFF, p f270: 61 64 6c 65 6e 29 3b 0a 09 09 09 09 74 6d 70 62 adlen);.....tmpb f280: 75 66 5b 70 61 64 6c 65 6e 20 2b 20 32 5d 3d 20 uf[padlen + 2]= f290: 30 78 30 30 3b 0a 09 09 09 09 6d 65 6d 63 70 79 0x00;.....memcpy f2a0: 28 26 74 6d 70 62 75 66 5b 70 61 64 6c 65 6e 20 (&tmpbuf[padlen f2b0: 2b 20 33 5d 2c 20 62 75 66 2c 20 62 75 66 6c 65 + 3], buf, bufle f2c0: 6e 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f n);......CACKEY_ f2d0: 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 DEBUG_PRINTBUF(" f2e0: 55 6e 70 61 64 64 65 64 3a 22 2c 20 62 75 66 2c Unpadded:", buf, f2f0: 20 62 75 66 6c 65 6e 29 3b 0a 09 09 09 09 43 41 buflen);.....CA f300: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT f310: 42 55 46 28 22 50 61 64 64 65 64 3a 22 2c 20 74 BUF("Padded:", t f320: 6d 70 62 75 66 2c 20 74 6d 70 62 75 66 6c 65 6e mpbuf, tmpbuflen f330: 29 3b 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 );....} else {.. f340: 09 09 09 74 6d 70 62 75 66 20 3d 20 62 75 66 3b ...tmpbuf = buf; f350: 0a 09 09 09 09 74 6d 70 62 75 66 6c 65 6e 20 3d .....tmpbuflen = f360: 20 62 75 66 6c 65 6e 3b 0a 09 09 09 09 66 72 65 buflen;.....fre f370: 65 5f 74 6d 70 62 75 66 20 3d 20 30 3b 0a 09 09 e_tmpbuf = 0;... f380: 09 09 70 61 64 6c 65 6e 20 3d 20 30 3b 0a 09 09 ..padlen = 0;... f390: 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 .}...} else {... f3a0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR f3b0: 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 INTF("Unable to f3c0: 64 65 74 65 72 6d 69 6e 65 20 6b 65 79 20 73 69 determine key si f3d0: 7a 65 2c 20 68 6f 70 69 6e 67 20 74 68 65 20 6d ze, hoping the m f3e0: 65 73 73 61 67 65 20 69 73 20 70 72 6f 70 65 72 essage is proper f3f0: 6c 79 20 70 61 64 64 65 64 21 22 29 3b 0a 0a 09 ly padded!");... f400: 09 09 74 6d 70 62 75 66 20 3d 20 62 75 66 3b 0a ..tmpbuf = buf;. f410: 09 09 09 74 6d 70 62 75 66 6c 65 6e 20 3d 20 62 ...tmpbuflen = b f420: 75 66 6c 65 6e 3b 0a 09 09 09 66 72 65 65 5f 74 uflen;....free_t f430: 6d 70 62 75 66 20 3d 20 30 3b 0a 09 09 09 70 61 mpbuf = 0;....pa f440: 64 6c 65 6e 20 3d 20 30 3b 0a 09 09 7d 0a 09 7d dlen = 0;...}..} f450: 20 65 6c 73 65 20 7b 0a 09 09 74 6d 70 62 75 66 else {...tmpbuf f460: 20 3d 20 62 75 66 3b 0a 09 09 74 6d 70 62 75 66 = buf;...tmpbuf f470: 6c 65 6e 20 3d 20 62 75 66 6c 65 6e 3b 0a 09 09 len = buflen;... f480: 66 72 65 65 5f 74 6d 70 62 75 66 20 3d 20 30 3b free_tmpbuf = 0; f490: 0a 09 09 70 61 64 6c 65 6e 20 3d 20 30 3b 0a 09 ...padlen = 0;.. f4a0: 7d 0a 0a 09 2f 2a 20 42 65 67 69 6e 20 74 72 61 }.../* Begin tra f4b0: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 09 63 61 63 nsaction */..cac f4c0: 6b 65 79 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 key_begin_transa f4d0: 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a 0a 09 2f ction(slot);.../ f4e0: 2a 20 53 65 6c 65 63 74 20 63 6f 72 72 65 63 74 * Select correct f4f0: 20 61 70 70 6c 65 74 20 2a 2f 0a 09 43 41 43 4b applet */..CACK f500: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( f510: 22 53 65 6c 65 63 74 69 6e 67 20 61 70 70 6c 65 "Selecting apple f520: 74 20 66 6f 75 6e 64 20 61 74 20 25 70 20 2e 2e t found at %p .. f530: 2e 22 2c 20 69 64 65 6e 74 69 74 79 2d 3e 70 63 .", identity->pc f540: 73 63 5f 69 64 65 6e 74 69 74 79 2d 3e 61 70 70 sc_identity->app f550: 6c 65 74 29 3b 0a 09 63 61 63 6b 65 79 5f 73 65 let);..cackey_se f560: 6c 65 63 74 5f 61 70 70 6c 65 74 28 73 6c 6f 74 lect_applet(slot f570: 2c 20 69 64 65 6e 74 69 74 79 2d 3e 70 63 73 63 , identity->pcsc f580: 5f 69 64 65 6e 74 69 74 79 2d 3e 61 70 70 6c 65 _identity->apple f590: 74 2c 20 73 69 7a 65 6f 66 28 69 64 65 6e 74 69 t, sizeof(identi f5a0: 74 79 2d 3e 70 63 73 63 5f 69 64 65 6e 74 69 74 ty->pcsc_identit f5b0: 79 2d 3e 61 70 70 6c 65 74 29 29 3b 0a 0a 09 2f y->applet));.../ f5c0: 2a 20 53 65 6c 65 63 74 20 63 6f 72 72 65 63 74 * Select correct f5d0: 20 66 69 6c 65 20 2a 2f 0a 09 63 61 63 6b 65 79 file */..cackey f5e0: 5f 73 65 6c 65 63 74 5f 66 69 6c 65 28 73 6c 6f _select_file(slo f5f0: 74 2c 20 69 64 65 6e 74 69 74 79 2d 3e 70 63 73 t, identity->pcs f600: 63 5f 69 64 65 6e 74 69 74 79 2d 3e 66 69 6c 65 c_identity->file f610: 29 3b 0a 0a 09 74 6d 70 62 75 66 5f 73 20 3d 20 );...tmpbuf_s = f620: 74 6d 70 62 75 66 3b 0a 09 6f 75 74 62 75 66 5f tmpbuf;..outbuf_ f630: 73 20 3d 20 6f 75 74 62 75 66 3b 0a 09 77 68 69 s = outbuf;..whi f640: 6c 65 20 28 74 6d 70 62 75 66 6c 65 6e 29 20 7b le (tmpbuflen) { f650: 0a 09 09 69 66 20 28 74 6d 70 62 75 66 6c 65 6e ...if (tmpbuflen f660: 20 3e 20 32 34 35 29 20 7b 0a 09 09 09 62 79 74 > 245) {....byt f670: 65 73 5f 74 6f 5f 73 65 6e 64 20 3d 20 32 34 35 es_to_send = 245 f680: 3b 0a 09 09 09 70 31 20 3d 20 30 78 38 30 3b 0a ;....p1 = 0x80;. f690: 09 09 09 6c 65 20 3d 20 30 78 30 30 3b 0a 09 09 ...le = 0x00;... f6a0: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 62 79 74 65 } else {....byte f6b0: 73 5f 74 6f 5f 73 65 6e 64 20 3d 20 74 6d 70 62 s_to_send = tmpb f6c0: 75 66 6c 65 6e 3b 0a 09 09 09 70 31 20 3d 20 30 uflen;....p1 = 0 f6d0: 78 30 30 3b 0a 09 09 09 6c 65 20 3d 20 30 78 30 x00;....le = 0x0 f6e0: 30 3b 0a 09 09 7d 0a 0a 09 09 74 6d 70 6f 75 74 0;...}....tmpout f6f0: 62 75 66 6c 65 6e 20 3d 20 6f 75 74 62 75 66 6c buflen = outbufl f700: 65 6e 3b 0a 0a 09 09 73 65 6e 64 5f 72 65 74 20 en;....send_ret f710: 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 = cackey_send_ap f720: 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 du(slot, GSCIS_C f730: 4c 41 53 53 5f 47 4c 4f 42 41 4c 5f 50 4c 41 54 LASS_GLOBAL_PLAT f740: 46 4f 52 4d 2c 20 47 53 43 49 53 5f 49 4e 53 54 FORM, GSCIS_INST f750: 52 5f 53 49 47 4e 44 45 43 52 59 50 54 2c 20 70 R_SIGNDECRYPT, p f760: 31 2c 20 30 78 30 30 2c 20 62 79 74 65 73 5f 74 1, 0x00, bytes_t f770: 6f 5f 73 65 6e 64 2c 20 74 6d 70 62 75 66 2c 20 o_send, tmpbuf, f780: 6c 65 2c 20 26 72 65 73 70 63 6f 64 65 2c 20 6f le, &respcode, o f790: 75 74 62 75 66 2c 20 26 74 6d 70 6f 75 74 62 75 utbuf, &tmpoutbu f7a0: 66 6c 65 6e 29 3b 0a 09 09 69 66 20 28 73 65 6e flen);...if (sen f7b0: 64 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f d_ret != CACKEY_ f7c0: 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 09 PCSC_S_OK) {.... f7d0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI f7e0: 4e 54 46 28 22 41 44 50 55 20 53 65 6e 64 69 6e NTF("ADPU Sendin f7f0: 67 20 46 61 69 6c 65 64 20 2d 2d 20 72 65 74 75 g Failed -- retu f800: 72 6e 69 6e 67 20 69 6e 20 65 72 72 6f 72 2e 22 rning in error." f810: 29 3b 0a 0a 09 09 09 69 66 20 28 66 72 65 65 5f );.....if (free_ f820: 74 6d 70 62 75 66 29 20 7b 0a 09 09 09 09 69 66 tmpbuf) {.....if f830: 20 28 74 6d 70 62 75 66 5f 73 29 20 7b 0a 09 09 (tmpbuf_s) {... f840: 09 09 09 66 72 65 65 28 74 6d 70 62 75 66 5f 73 ...free(tmpbuf_s f850: 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 );.....}....}... f860: 09 09 2f 2a 20 45 6e 64 20 74 72 61 6e 73 61 63 ../* End transac f870: 74 69 6f 6e 20 2a 2f 0a 09 09 09 63 61 63 6b 65 tion */....cacke f880: 79 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f y_end_transactio f890: 6e 28 73 6c 6f 74 29 3b 0a 0a 09 09 09 69 66 20 n(slot);.....if f8a0: 28 72 65 73 70 63 6f 64 65 20 3d 3d 20 30 78 36 (respcode == 0x6 f8b0: 39 38 32 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 982) {.....CACKE f8c0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" f8d0: 53 65 63 75 72 69 74 79 20 73 74 61 74 75 73 20 Security status f8e0: 6e 6f 74 20 73 61 74 69 73 69 66 69 65 64 2e 20 not satisified. f8f0: 20 52 65 74 75 72 6e 69 6e 67 20 4e 45 45 44 4c Returning NEEDL f900: 4f 47 49 4e 22 29 3b 0a 0a 09 09 09 09 63 61 63 OGIN");......cac f910: 6b 65 79 5f 6d 61 72 6b 5f 73 6c 6f 74 5f 72 65 key_mark_slot_re f920: 73 65 74 28 73 6c 6f 74 29 3b 0a 09 09 09 09 73 set(slot);.....s f930: 6c 6f 74 2d 3e 74 6f 6b 65 6e 5f 66 6c 61 67 73 lot->token_flags f940: 20 3d 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52 45 51 = CKF_LOGIN_REQ f950: 55 49 52 45 44 3b 0a 0a 09 09 09 09 72 65 74 75 UIRED;......retu f960: 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E f970: 5f 4e 45 45 44 4c 4f 47 49 4e 29 3b 0a 09 09 09 _NEEDLOGIN);.... f980: 7d 0a 0a 09 09 09 69 66 20 28 73 65 6e 64 5f 72 }.....if (send_r f990: 65 74 20 3d 3d 20 43 41 43 4b 45 59 5f 50 43 53 et == CACKEY_PCS f9a0: 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 29 C_E_TOKENABSENT) f9b0: 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {.....CACKEY_DE f9c0: 42 55 47 5f 50 52 49 4e 54 46 28 22 54 6f 6b 65 BUG_PRINTF("Toke f9d0: 6e 20 61 62 73 65 6e 74 2e 20 20 52 65 74 75 72 n absent. Retur f9e0: 6e 69 6e 67 20 54 4f 4b 45 4e 41 42 53 45 4e 54 ning TOKENABSENT f9f0: 22 29 3b 0a 0a 09 09 09 09 63 61 63 6b 65 79 5f ");......cackey_ fa00: 6d 61 72 6b 5f 73 6c 6f 74 5f 72 65 73 65 74 28 mark_slot_reset( fa10: 73 6c 6f 74 29 3b 0a 09 09 09 09 73 6c 6f 74 2d slot);.....slot- fa20: 3e 74 6f 6b 65 6e 5f 66 6c 61 67 73 20 3d 20 43 >token_flags = C fa30: 4b 46 5f 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 KF_LOGIN_REQUIRE fa40: 44 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 43 D;......return(C fa50: 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b ACKEY_PCSC_E_TOK fa60: 45 4e 41 42 53 45 4e 54 29 3b 0a 09 09 09 7d 0a ENABSENT);....}. fa70: 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a ....return(-1);. fa80: 09 09 7d 0a 0a 09 09 74 6d 70 62 75 66 20 2b 3d ..}....tmpbuf += fa90: 20 62 79 74 65 73 5f 74 6f 5f 73 65 6e 64 3b 0a bytes_to_send;. faa0: 09 09 74 6d 70 62 75 66 6c 65 6e 20 2d 3d 20 62 ..tmpbuflen -= b fab0: 79 74 65 73 5f 74 6f 5f 73 65 6e 64 3b 0a 0a 09 ytes_to_send;... fac0: 09 6f 75 74 62 75 66 20 2b 3d 20 74 6d 70 6f 75 .outbuf += tmpou fad0: 74 62 75 66 6c 65 6e 3b 0a 09 09 6f 75 74 62 75 tbuflen;...outbu fae0: 66 6c 65 6e 20 2d 3d 20 74 6d 70 6f 75 74 62 75 flen -= tmpoutbu faf0: 66 6c 65 6e 3b 0a 09 09 72 65 74 76 61 6c 20 2b flen;...retval + fb00: 3d 20 74 6d 70 6f 75 74 62 75 66 6c 65 6e 3b 0a = tmpoutbuflen;. fb10: 09 7d 0a 0a 09 69 66 20 28 66 72 65 65 5f 74 6d .}...if (free_tm fb20: 70 62 75 66 29 20 7b 0a 09 09 69 66 20 28 74 6d pbuf) {...if (tm fb30: 70 62 75 66 5f 73 29 20 7b 0a 09 09 09 66 72 65 pbuf_s) {....fre fb40: 65 28 74 6d 70 62 75 66 5f 73 29 3b 0a 09 09 7d e(tmpbuf_s);...} fb50: 0a 09 7d 0a 0a 09 6f 75 74 62 75 66 20 3d 20 6f ..}...outbuf = o fb60: 75 74 62 75 66 5f 73 3b 0a 0a 09 2f 2a 20 45 6e utbuf_s;.../* En fb70: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f d transaction */ fb80: 0a 09 63 61 63 6b 65 79 5f 65 6e 64 5f 74 72 61 ..cackey_end_tra fb90: 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 3b 0a nsaction(slot);. fba0: 0a 23 69 66 64 65 66 20 43 41 43 4b 45 59 5f 50 .#ifdef CACKEY_P fbb0: 41 52 41 4e 4f 49 44 0a 23 20 20 69 66 64 65 66 ARANOID.# ifdef fbc0: 20 5f 50 4f 53 49 58 5f 53 53 49 5a 45 5f 4d 41 _POSIX_SSIZE_MA fbd0: 58 0a 09 69 66 20 28 6f 75 74 62 75 66 6c 65 6e X..if (outbuflen fbe0: 20 3e 20 5f 50 4f 53 49 58 5f 53 53 49 5a 45 5f > _POSIX_SSIZE_ fbf0: 4d 41 58 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f MAX) {...CACKEY_ fc00: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 4f 75 DEBUG_PRINTF("Ou fc10: 74 62 75 66 6c 65 6e 20 65 78 63 65 65 64 73 20 tbuflen exceeds fc20: 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c 20 72 maximum value, r fc30: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c eturning in fail fc40: 75 72 65 2e 20 28 6d 61 78 20 3d 20 25 6c 69 2c ure. (max = %li, fc50: 20 6f 75 74 62 75 66 6c 65 6e 20 3d 20 25 6c 75 outbuflen = %lu fc60: 29 22 2c 20 28 6c 6f 6e 67 29 20 5f 50 4f 53 49 )", (long) _POSI fc70: 58 5f 53 53 49 5a 45 5f 4d 41 58 2c 20 28 75 6e X_SSIZE_MAX, (un fc80: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6f 75 74 signed long) out fc90: 62 75 66 6c 65 6e 29 3b 0a 0a 09 09 72 65 74 75 buflen);....retu fca0: 72 6e 28 2d 31 29 3b 0a 09 7d 0a 23 20 20 65 6e rn(-1);..}.# en fcb0: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 09 2f 2a 20 dif.#endif.../* fcc0: 55 6e 70 61 64 20 72 65 70 6c 79 20 2a 2f 0a 09 Unpad reply */.. fcd0: 69 66 20 28 75 6e 70 61 64 4f 75 74 70 75 74 29 if (unpadOutput) fce0: 20 7b 0a 09 09 69 66 20 28 72 65 74 76 61 6c 20 {...if (retval fcf0: 3c 20 33 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 < 3) {....CACKEY fd00: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R fd10: 65 70 6c 79 20 69 73 20 74 6f 6f 20 73 6d 61 6c eply is too smal fd20: 6c 2c 20 77 65 20 61 72 65 20 6e 6f 74 20 61 62 l, we are not ab fd30: 6c 65 20 74 6f 20 75 6e 70 61 64 20 2d 2d 20 70 le to unpad -- p fd40: 61 73 73 69 6e 67 20 62 61 63 6b 20 61 6e 64 20 assing back and fd50: 68 6f 70 69 6e 67 20 66 6f 72 20 74 68 65 20 62 hoping for the b fd60: 65 73 74 21 22 29 3b 0a 0a 09 09 09 43 41 43 4b est!");.....CACK fd70: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( fd80: 22 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 73 75 "Returning in su fd90: 63 63 65 73 73 2c 20 72 65 74 76 61 6c 20 3d 20 ccess, retval = fda0: 25 6c 69 20 28 62 79 74 65 73 29 22 2c 20 28 6c %li (bytes)", (l fdb0: 6f 6e 67 29 20 72 65 74 76 61 6c 29 3b 0a 09 09 ong) retval);... fdc0: 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b .return(retval); fdd0: 0a 09 09 7d 0a 0a 09 09 69 66 20 28 6f 75 74 62 ...}....if (outb fde0: 75 66 5b 30 5d 20 21 3d 20 30 78 30 30 29 20 7b uf[0] != 0x00) { fdf0: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG fe00: 5f 50 52 49 4e 54 46 28 22 55 6e 72 65 63 6f 67 _PRINTF("Unrecog fe10: 6e 69 7a 65 64 20 70 61 64 64 69 6e 67 20 73 63 nized padding sc fe20: 68 65 6d 65 20 2d 2d 20 70 61 73 73 69 6e 67 20 heme -- passing fe30: 62 61 63 6b 20 61 6e 64 20 68 6f 70 69 6e 67 20 back and hoping fe40: 66 6f 72 20 74 68 65 20 62 65 73 74 21 22 29 3b for the best!"); fe50: 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU fe60: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return fe70: 69 6e 67 20 69 6e 20 73 75 63 63 65 73 73 2c 20 ing in success, fe80: 72 65 74 76 61 6c 20 3d 20 25 6c 69 20 28 62 79 retval = %li (by fe90: 74 65 73 29 22 2c 20 28 6c 6f 6e 67 29 20 72 65 tes)", (long) re fea0: 74 76 61 6c 29 3b 0a 09 09 09 72 65 74 75 72 6e tval);....return feb0: 28 72 65 74 76 61 6c 29 3b 0a 09 09 7d 0a 0a 09 (retval);...}... fec0: 09 62 6c 6f 63 6b 74 79 70 65 20 3d 20 6f 75 74 .blocktype = out fed0: 62 75 66 5b 31 5d 3b 0a 09 09 75 6e 70 61 64 6f buf[1];...unpado fee0: 66 66 73 65 74 20 3d 20 30 3b 0a 0a 09 09 73 77 ffset = 0;....sw fef0: 69 74 63 68 20 28 62 6c 6f 63 6b 74 79 70 65 29 itch (blocktype) ff00: 20 7b 0a 09 09 09 63 61 73 65 20 30 78 30 30 3a {....case 0x00: ff10: 0a 09 09 09 09 2f 2a 20 50 61 64 64 69 6e 67 20 ...../* Padding ff20: 53 63 68 65 6d 65 20 31 2c 20 74 68 65 20 66 69 Scheme 1, the fi ff30: 72 73 74 20 6e 6f 6e 2d 7a 65 72 6f 20 62 79 74 rst non-zero byt ff40: 65 20 69 73 20 74 68 65 20 73 74 61 72 74 20 6f e is the start o ff50: 66 20 64 61 74 61 20 2a 2f 0a 09 09 09 09 66 6f f data */.....fo ff60: 72 20 28 75 6e 70 61 64 6f 66 66 73 65 74 20 3d r (unpadoffset = ff70: 20 32 3b 20 75 6e 70 61 64 6f 66 66 73 65 74 20 2; unpadoffset ff80: 3c 20 72 65 74 76 61 6c 3b 20 75 6e 70 61 64 6f < retval; unpado ff90: 66 66 73 65 74 2b 2b 29 20 7b 0a 09 09 09 09 09 ffset++) {...... ffa0: 69 66 20 28 6f 75 74 62 75 66 5b 75 6e 70 61 64 if (outbuf[unpad ffb0: 6f 66 66 73 65 74 5d 20 21 3d 20 30 78 30 30 29 offset] != 0x00) ffc0: 20 7b 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a {.......break;. ffd0: 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 .....}.....}.... ffe0: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 .break;....case fff0: 30 78 30 31 3a 0a 09 09 09 09 2f 2a 20 50 61 64 0x01:...../* Pad 10000 64 69 6e 67 20 53 63 68 65 6d 65 20 32 2c 20 70 ding Scheme 2, p 10010 61 64 20 62 79 74 65 73 20 61 72 65 20 30 78 46 ad bytes are 0xF 10020 46 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 30 78 F followed by 0x 10030 30 30 20 2a 2f 0a 09 09 09 09 66 6f 72 20 28 75 00 */.....for (u 10040 6e 70 61 64 6f 66 66 73 65 74 20 3d 20 32 3b 20 npadoffset = 2; 10050 75 6e 70 61 64 6f 66 66 73 65 74 20 3c 20 72 65 unpadoffset < re 10060 74 76 61 6c 3b 20 75 6e 70 61 64 6f 66 66 73 65 tval; unpadoffse 10070 74 2b 2b 29 20 7b 0a 09 09 09 09 09 69 66 20 28 t++) {......if ( 10080 6f 75 74 62 75 66 5b 75 6e 70 61 64 6f 66 66 73 outbuf[unpadoffs 10090 65 74 5d 20 21 3d 20 30 78 46 46 29 20 7b 0a 09 et] != 0xFF) {.. 100a0 09 09 09 09 09 69 66 20 28 6f 75 74 62 75 66 5b .....if (outbuf[ 100b0 75 6e 70 61 64 6f 66 66 73 65 74 5d 20 3d 3d 20 unpadoffset] == 100c0 30 78 30 30 29 20 7b 0a 09 09 09 09 09 09 09 75 0x00) {........u 100d0 6e 70 61 64 6f 66 66 73 65 74 2b 2b 3b 0a 0a 09 npadoffset++;... 100e0 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 100f0 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 ...} else {..... 10100 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 10110 50 52 49 4e 54 46 28 22 49 6e 76 61 6c 69 64 20 PRINTF("Invalid 10120 70 61 64 64 69 6e 67 20 64 61 74 61 20 66 6f 75 padding data fou 10130 6e 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e nd, returning in 10140 20 66 61 69 6c 75 72 65 2c 20 73 68 6f 75 6c 64 failure, should 10150 20 68 61 76 65 20 62 65 65 6e 20 30 78 30 30 20 have been 0x00 10160 66 6f 75 6e 64 20 30 78 25 30 32 78 22 2c 20 28 found 0x%02x", ( 10170 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 6f 75 unsigned int) ou 10180 74 62 75 66 5b 75 6e 70 61 64 6f 66 66 73 65 74 tbuf[unpadoffset 10190 5d 29 3b 0a 0a 09 09 09 09 09 09 09 72 65 74 75 ]);.........retu 101a0 72 6e 28 2d 31 29 3b 0a 09 09 09 09 09 09 7d 0a rn(-1);.......}. 101b0 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 .....} else {... 101c0 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 101d0 5f 50 52 49 4e 54 46 28 22 49 6e 76 61 6c 69 64 _PRINTF("Invalid 101e0 20 70 61 64 64 69 6e 67 20 64 61 74 61 20 66 6f padding data fo 101f0 75 6e 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 und, returning i 10200 6e 20 66 61 69 6c 75 72 65 2c 20 73 68 6f 75 6c n failure, shoul 10210 64 20 68 61 76 65 20 62 65 65 6e 20 30 78 46 46 d have been 0xFF 10220 20 66 6f 75 6e 64 20 30 78 25 30 32 78 22 2c 20 found 0x%02x", 10230 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 6f (unsigned int) o 10240 75 74 62 75 66 5b 75 6e 70 61 64 6f 66 66 73 65 utbuf[unpadoffse 10250 74 5d 29 3b 0a 0a 09 09 09 09 09 09 72 65 74 75 t]);........retu 10260 72 6e 28 2d 31 29 3b 0a 09 09 09 09 09 7d 0a 09 rn(-1);......}.. 10270 09 09 09 7d 0a 09 09 09 09 62 72 65 61 6b 3b 0a ...}.....break;. 10280 09 09 09 63 61 73 65 20 30 78 30 32 3a 0a 09 09 ...case 0x02:... 10290 09 09 2f 2a 20 50 61 64 64 69 6e 67 20 53 63 68 ../* Padding Sch 102a0 65 6d 65 20 33 2c 20 70 61 64 20 62 79 74 65 73 eme 3, pad bytes 102b0 20 61 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 66 69 are non-zero fi 102c0 72 73 74 20 7a 65 72 6f 20 62 79 74 65 20 66 6f rst zero byte fo 102d0 75 6e 64 20 69 73 20 74 68 65 20 73 65 70 65 72 und is the seper 102e0 61 74 6f 72 20 62 79 74 65 20 2a 2f 0a 09 09 09 ator byte */.... 102f0 09 66 6f 72 20 28 75 6e 70 61 64 6f 66 66 73 65 .for (unpadoffse 10300 74 20 3d 20 32 3b 20 75 6e 70 61 64 6f 66 66 73 t = 2; unpadoffs 10310 65 74 20 3c 20 72 65 74 76 61 6c 3b 20 75 6e 70 et < retval; unp 10320 61 64 6f 66 66 73 65 74 2b 2b 29 20 7b 0a 09 09 adoffset++) {... 10330 09 09 09 69 66 20 28 6f 75 74 62 75 66 5b 75 6e ...if (outbuf[un 10340 70 61 64 6f 66 66 73 65 74 5d 20 3d 3d 20 30 78 padoffset] == 0x 10350 30 30 29 20 7b 0a 09 09 09 09 09 09 75 6e 70 61 00) {.......unpa 10360 64 6f 66 66 73 65 74 2b 2b 3b 0a 0a 09 09 09 09 doffset++;...... 10370 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a ..break;......}. 10380 09 09 09 09 7d 0a 09 09 09 09 62 72 65 61 6b 3b ....}.....break; 10390 0a 09 09 7d 0a 0a 09 09 69 66 20 28 75 6e 70 61 ...}....if (unpa 103a0 64 6f 66 66 73 65 74 20 3e 20 72 65 74 76 61 6c doffset > retval 103b0 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 ) {....CACKEY_DE 103c0 42 55 47 5f 50 52 49 4e 54 46 28 22 4f 66 66 73 BUG_PRINTF("Offs 103d0 65 74 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 et greater than 103e0 72 65 70 6c 79 20 73 69 7a 65 2c 20 61 62 6f 72 reply size, abor 103f0 74 69 6e 67 2e 20 20 28 75 6e 70 61 64 6f 66 66 ting. (unpadoff 10400 73 65 74 20 3d 20 25 6c 75 2c 20 72 65 74 76 61 set = %lu, retva 10410 6c 20 3d 20 25 6c 75 29 22 2c 20 28 75 6e 73 69 l = %lu)", (unsi 10420 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6e 70 61 64 gned long) unpad 10430 6f 66 66 73 65 74 2c 20 28 75 6e 73 69 67 6e 65 offset, (unsigne 10440 64 20 6c 6f 6e 67 29 20 72 65 74 76 61 6c 29 3b d long) retval); 10450 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b .....return(-1); 10460 0a 09 09 7d 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ...}....CACKEY_D 10470 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 50 EBUG_PRINTBUF("P 10480 61 64 64 65 64 3a 22 2c 20 6f 75 74 62 75 66 2c added:", outbuf, 10490 20 72 65 74 76 61 6c 29 3b 0a 0a 09 09 72 65 74 retval);....ret 104a0 76 61 6c 20 2d 3d 20 75 6e 70 61 64 6f 66 66 73 val -= unpadoffs 104b0 65 74 3b 0a 09 09 6d 65 6d 6d 6f 76 65 28 6f 75 et;...memmove(ou 104c0 74 62 75 66 2c 20 6f 75 74 62 75 66 20 2b 20 75 tbuf, outbuf + u 104d0 6e 70 61 64 6f 66 66 73 65 74 2c 20 72 65 74 76 npadoffset, retv 104e0 61 6c 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 al);....CACKEY_D 104f0 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28 22 55 EBUG_PRINTBUF("U 10500 6e 70 61 64 64 65 64 3a 22 2c 20 6f 75 74 62 75 npadded:", outbu 10510 66 2c 20 72 65 74 76 61 6c 29 3b 0a 09 7d 0a 0a f, retval);..}.. 10520 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 10530 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 10540 20 69 6e 20 73 75 63 63 65 73 73 2c 20 72 65 74 in success, ret 10550 76 61 6c 20 3d 20 25 6c 69 20 28 62 79 74 65 73 val = %li (bytes 10560 29 22 2c 20 28 6c 6f 6e 67 29 20 72 65 74 76 61 )", (long) retva 10570 6c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 l);...return(ret 10580 76 61 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 val);.}../*. * S 10590 59 4e 50 4f 53 49 53 0a 20 2a 20 20 20 20 20 2e YNPOSIS. * . 105a0 2e 2e 0a 20 2a 0a 20 2a 20 41 52 47 55 4d 45 4e ... *. * ARGUMEN 105b0 54 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a TS. * .... * 105c0 0a 20 2a 20 52 45 54 55 52 4e 20 56 41 4c 55 45 . * RETURN VALUE 105d0 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 . * .... *. 105e0 2a 20 4e 4f 54 45 53 0a 20 2a 20 20 20 20 20 2e * NOTES. * . 105f0 2e 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 61 74 69 63 ... *. */.static 10600 20 63 61 63 6b 65 79 5f 72 65 74 20 63 61 63 6b cackey_ret cack 10610 65 79 5f 6c 6f 67 69 6e 28 73 74 72 75 63 74 20 ey_login(struct 10620 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f cackey_slot *slo 10630 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 t, unsigned char 10640 20 2a 70 69 6e 2c 20 75 6e 73 69 67 6e 65 64 20 *pin, unsigned 10650 6c 6f 6e 67 20 70 69 6e 5f 6c 65 6e 2c 20 69 6e long pin_len, in 10660 74 20 2a 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 t *tries_remaini 10670 6e 67 5f 70 29 20 7b 0a 09 75 6e 73 69 67 6e 65 ng_p) {..unsigne 10680 64 20 63 68 61 72 20 63 61 63 5f 70 69 6e 5b 38 d char cac_pin[8 10690 5d 20 3d 20 7b 30 78 46 46 2c 20 30 78 46 46 2c ] = {0xFF, 0xFF, 106a0 20 30 78 46 46 2c 20 30 78 46 46 2c 20 30 78 46 0xFF, 0xFF, 0xF 106b0 46 2c 20 30 78 46 46 2c 20 30 78 46 46 2c 20 30 F, 0xFF, 0xFF, 0 106c0 78 46 46 7d 3b 0a 09 75 69 6e 74 31 36 5f 74 20 xFF};..uint16_t 106d0 72 65 73 70 6f 6e 73 65 5f 63 6f 64 65 3b 0a 09 response_code;.. 106e0 69 6e 74 20 74 72 69 65 73 5f 72 65 6d 61 69 6e int tries_remain 106f0 69 6e 67 3b 0a 09 69 6e 74 20 73 65 6e 64 5f 72 ing;..int send_r 10700 65 74 3b 0a 0a 09 2f 2a 20 49 6e 64 69 63 61 74 et;.../* Indicat 10710 65 20 74 68 61 74 20 77 65 20 64 6f 20 6e 6f 74 e that we do not 10720 20 6b 6e 6f 77 20 61 62 6f 75 74 20 68 6f 77 20 know about how 10730 6d 61 6e 79 20 74 72 69 65 73 20 61 72 65 20 72 many tries are r 10740 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 09 69 66 20 emaining */..if 10750 28 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 (tries_remaining 10760 5f 70 29 20 7b 0a 09 09 2a 74 72 69 65 73 5f 72 _p) {...*tries_r 10770 65 6d 61 69 6e 69 6e 67 5f 70 20 3d 20 2d 31 3b emaining_p = -1; 10780 0a 09 7d 0a 0a 09 2f 2a 20 41 70 70 61 72 65 6e ..}.../* Apparen 10790 74 6c 79 2c 20 43 41 43 20 50 49 4e 73 20 61 72 tly, CAC PINs ar 107a0 65 20 2a 45 58 41 43 54 4c 59 2a 20 38 20 62 79 e *EXACTLY* 8 by 107b0 74 65 73 20 6c 6f 6e 67 20 2d 2d 20 70 61 64 20 tes long -- pad 107c0 77 69 74 68 20 30 78 46 46 20 69 66 20 74 6f 6f with 0xFF if too 107d0 20 73 68 6f 72 74 20 2a 2f 0a 09 69 66 20 28 70 short */..if (p 107e0 69 6e 5f 6c 65 6e 20 3e 3d 20 38 29 20 7b 0a 09 in_len >= 8) {.. 107f0 09 6d 65 6d 63 70 79 28 63 61 63 5f 70 69 6e 2c .memcpy(cac_pin, 10800 20 70 69 6e 2c 20 38 29 3b 0a 09 7d 20 65 6c 73 pin, 8);..} els 10810 65 20 7b 0a 09 09 6d 65 6d 63 70 79 28 63 61 63 e {...memcpy(cac 10820 5f 70 69 6e 2c 20 70 69 6e 2c 20 70 69 6e 5f 6c _pin, pin, pin_l 10830 65 6e 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 49 73 73 en);..}.../* Iss 10840 75 65 20 50 49 4e 20 56 65 72 69 66 79 20 2a 2f ue PIN Verify */ 10850 0a 09 73 65 6e 64 5f 72 65 74 20 3d 20 63 61 63 ..send_ret = cac 10860 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75 28 73 6c key_send_apdu(sl 10870 6f 74 2c 20 47 53 43 49 53 5f 43 4c 41 53 53 5f ot, GSCIS_CLASS_ 10880 49 53 4f 37 38 31 36 2c 20 47 53 43 49 53 5f 49 ISO7816, GSCIS_I 10890 4e 53 54 52 5f 56 45 52 49 46 59 2c 20 30 78 30 NSTR_VERIFY, 0x0 108a0 30 2c 20 30 78 30 30 2c 20 73 69 7a 65 6f 66 28 0, 0x00, sizeof( 108b0 63 61 63 5f 70 69 6e 29 2c 20 63 61 63 5f 70 69 cac_pin), cac_pi 108c0 6e 2c 20 30 78 30 30 2c 20 26 72 65 73 70 6f 6e n, 0x00, &respon 108d0 73 65 5f 63 6f 64 65 2c 20 4e 55 4c 4c 2c 20 4e se_code, NULL, N 108e0 55 4c 4c 29 3b 0a 09 69 66 20 28 73 65 6e 64 5f ULL);..if (send_ 108f0 72 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 ret != CACKEY_PC 10900 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 69 66 20 SC_S_OK) {...if 10910 28 28 72 65 73 70 6f 6e 73 65 5f 63 6f 64 65 20 ((response_code 10920 26 20 30 78 36 33 43 30 29 20 3d 3d 20 30 78 36 & 0x63C0) == 0x6 10930 33 43 30 29 20 7b 0a 09 09 09 74 72 69 65 73 5f 3C0) {....tries_ 10940 72 65 6d 61 69 6e 69 6e 67 20 3d 20 28 72 65 73 remaining = (res 10950 70 6f 6e 73 65 5f 63 6f 64 65 20 26 20 30 78 46 ponse_code & 0xF 10960 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 );.....CACKEY_DE 10970 42 55 47 5f 50 52 49 4e 54 46 28 22 50 49 4e 20 BUG_PRINTF("PIN 10980 56 65 72 69 66 69 63 61 74 69 6f 6e 20 66 61 69 Verification fai 10990 6c 65 64 2c 20 25 69 20 74 72 69 65 73 20 72 65 led, %i tries re 109a0 6d 61 69 6e 69 6e 67 22 2c 20 74 72 69 65 73 5f maining", tries_ 109b0 72 65 6d 61 69 6e 69 6e 67 29 3b 0a 0a 09 09 09 remaining);..... 109c0 69 66 20 28 74 72 69 65 73 5f 72 65 6d 61 69 6e if (tries_remain 109d0 69 6e 67 5f 70 29 20 7b 0a 09 09 09 09 2a 74 72 ing_p) {.....*tr 109e0 69 65 73 5f 72 65 6d 61 69 6e 69 6e 67 5f 70 20 ies_remaining_p 109f0 3d 20 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e = tries_remainin 10a00 67 3b 0a 09 09 09 7d 0a 0a 09 09 09 72 65 74 75 g;....}.....retu 10a10 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 rn(CACKEY_PCSC_E 10a20 5f 42 41 44 50 49 4e 29 3b 0a 09 09 7d 0a 0a 09 _BADPIN);...}... 10a30 09 69 66 20 28 72 65 73 70 6f 6e 73 65 5f 63 6f .if (response_co 10a40 64 65 20 3d 3d 20 30 78 36 39 38 33 29 20 7b 0a de == 0x6983) {. 10a50 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 10a60 50 52 49 4e 54 46 28 22 50 49 4e 20 56 65 72 69 PRINTF("PIN Veri 10a70 66 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 2c fication failed, 10a80 20 64 65 76 69 63 65 20 69 73 20 6c 6f 63 6b 65 device is locke 10a90 64 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 d");.....return( 10aa0 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f 4c 4f CACKEY_PCSC_E_LO 10ab0 43 4b 45 44 29 3b 0a 09 09 7d 0a 0a 09 09 72 65 CKED);...}....re 10ac0 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC 10ad0 5f 45 5f 47 45 4e 45 52 49 43 29 3b 0a 09 7d 0a _E_GENERIC);..}. 10ae0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 10af0 52 49 4e 54 46 28 22 50 49 4e 20 56 65 72 69 66 RINTF("PIN Verif 10b00 69 63 61 74 69 6f 6e 20 73 75 63 63 65 65 64 65 ication succeede 10b10 64 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 41 d");...return(CA 10b20 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 3b CKEY_PCSC_S_OK); 10b30 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 .}../*. * SYNPOS 10b40 49 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a IS. * .... * 10b50 0a 20 2a 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a . * ARGUMENTS. * 10b60 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 52 .... *. * R 10b70 45 54 55 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 ETURN VALUE. * 10b80 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 .... *. * NOT 10b90 45 53 0a 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a ES. * .... * 10ba0 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63 61 63 6b . */.static cack 10bb0 65 79 5f 72 65 74 20 63 61 63 6b 65 79 5f 74 6f ey_ret cackey_to 10bc0 6b 65 6e 5f 70 72 65 73 65 6e 74 28 73 74 72 75 ken_present(stru 10bd0 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a ct cackey_slot * 10be0 73 6c 6f 74 29 20 7b 0a 09 63 61 63 6b 65 79 5f slot) {..cackey_ 10bf0 72 65 74 20 70 63 73 63 5f 63 6f 6e 6e 65 63 74 ret pcsc_connect 10c00 5f 72 65 74 3b 0a 09 44 57 4f 52 44 20 72 65 61 _ret;..DWORD rea 10c10 64 65 72 5f 6c 65 6e 2c 20 73 74 61 74 65 2c 20 der_len, state, 10c20 70 72 6f 74 6f 63 6f 6c 2c 20 61 74 72 5f 6c 65 protocol, atr_le 10c30 6e 3b 0a 09 42 59 54 45 20 61 74 72 5b 4d 41 58 n;..BYTE atr[MAX 10c40 5f 41 54 52 5f 53 49 5a 45 5d 3b 0a 09 4c 4f 4e _ATR_SIZE];..LON 10c50 47 20 73 74 61 74 75 73 5f 72 65 74 2c 20 73 63 G status_ret, sc 10c60 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 3b 0a ard_reconn_ret;. 10c70 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 10c80 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 10c90 3b 0a 0a 09 70 63 73 63 5f 63 6f 6e 6e 65 63 74 ;...pcsc_connect 10ca0 5f 72 65 74 20 3d 20 63 61 63 6b 65 79 5f 63 6f _ret = cackey_co 10cb0 6e 6e 65 63 74 5f 63 61 72 64 28 73 6c 6f 74 29 nnect_card(slot) 10cc0 3b 0a 09 69 66 20 28 70 63 73 63 5f 63 6f 6e 6e ;..if (pcsc_conn 10cd0 65 63 74 5f 72 65 74 20 21 3d 20 43 41 43 4b 45 ect_ret != CACKE 10ce0 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 20 7b 0a 09 Y_PCSC_S_OK) {.. 10cf0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 10d00 49 4e 54 46 28 22 55 6e 61 62 6c 65 20 74 6f 20 INTF("Unable to 10d10 63 6f 6e 6e 65 63 74 20 74 6f 20 63 61 72 64 2c connect to card, 10d20 20 72 65 74 75 72 6e 69 6e 67 20 74 6f 6b 65 6e returning token 10d30 20 61 62 73 65 6e 74 22 29 3b 0a 0a 09 09 72 65 absent");....re 10d40 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 43 turn(CACKEY_PCSC 10d50 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 29 3b _E_TOKENABSENT); 10d60 0a 09 7d 0a 0a 09 61 74 72 5f 6c 65 6e 20 3d 20 ..}...atr_len = 10d70 73 69 7a 65 6f 66 28 61 74 72 29 3b 0a 09 73 74 sizeof(atr);..st 10d80 61 74 75 73 5f 72 65 74 20 3d 20 53 43 61 72 64 atus_ret = SCard 10d90 53 74 61 74 75 73 28 73 6c 6f 74 2d 3e 70 63 73 Status(slot->pcs 10da0 63 5f 63 61 72 64 2c 20 4e 55 4c 4c 2c 20 26 72 c_card, NULL, &r 10db0 65 61 64 65 72 5f 6c 65 6e 2c 20 26 73 74 61 74 eader_len, &stat 10dc0 65 2c 20 26 70 72 6f 74 6f 63 6f 6c 2c 20 61 74 e, &protocol, at 10dd0 72 2c 20 26 61 74 72 5f 6c 65 6e 29 3b 0a 0a 09 r, &atr_len);... 10de0 69 66 20 28 73 74 61 74 75 73 5f 72 65 74 20 3d if (status_ret = 10df0 3d 20 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 = SCARD_E_INVALI 10e00 44 5f 48 41 4e 44 4c 45 29 20 7b 0a 09 09 43 41 D_HANDLE) {...CA 10e10 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 10e20 46 28 22 53 43 61 72 64 53 74 61 74 75 73 28 29 F("SCardStatus() 10e30 20 72 65 74 75 72 6e 65 64 20 53 43 41 52 44 5f returned SCARD_ 10e40 45 5f 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 E_INVALID_HANDLE 10e50 2c 20 6d 61 72 6b 69 6e 67 20 69 73 20 6e 6f 74 , marking is not 10e60 20 61 6c 72 65 61 64 79 20 63 6f 6e 6e 65 63 74 already connect 10e70 65 64 20 61 6e 64 20 74 72 79 69 6e 67 20 61 67 ed and trying ag 10e80 61 69 6e 22 29 3b 0a 09 09 63 61 63 6b 65 79 5f ain");...cackey_ 10e90 6d 61 72 6b 5f 73 6c 6f 74 5f 72 65 73 65 74 28 mark_slot_reset( 10ea0 73 6c 6f 74 29 3b 0a 0a 09 09 70 63 73 63 5f 63 slot);....pcsc_c 10eb0 6f 6e 6e 65 63 74 5f 72 65 74 20 3d 20 63 61 63 onnect_ret = cac 10ec0 6b 65 79 5f 63 6f 6e 6e 65 63 74 5f 63 61 72 64 key_connect_card 10ed0 28 73 6c 6f 74 29 3b 0a 09 09 69 66 20 28 70 63 (slot);...if (pc 10ee0 73 63 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 21 sc_connect_ret ! 10ef0 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f = CACKEY_PCSC_S_ 10f00 4f 4b 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f OK) {....CACKEY_ 10f10 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e DEBUG_PRINTF("Un 10f20 61 62 6c 65 20 74 6f 20 63 6f 6e 6e 65 63 74 20 able to connect 10f30 74 6f 20 63 61 72 64 2c 20 72 65 74 75 72 6e 69 to card, returni 10f40 6e 67 20 74 6f 6b 65 6e 20 61 62 73 65 6e 74 22 ng token absent" 10f50 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 41 );.....return(CA 10f60 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 CKEY_PCSC_E_TOKE 10f70 4e 41 42 53 45 4e 54 29 3b 0a 09 09 7d 0a 0a 09 NABSENT);...}... 10f80 09 61 74 72 5f 6c 65 6e 20 3d 20 73 69 7a 65 6f .atr_len = sizeo 10f90 66 28 61 74 72 29 3b 0a 09 09 73 74 61 74 75 73 f(atr);...status 10fa0 5f 72 65 74 20 3d 20 53 43 61 72 64 53 74 61 74 _ret = SCardStat 10fb0 75 73 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 us(slot->pcsc_ca 10fc0 72 64 2c 20 4e 55 4c 4c 2c 20 26 72 65 61 64 65 rd, NULL, &reade 10fd0 72 5f 6c 65 6e 2c 20 26 73 74 61 74 65 2c 20 26 r_len, &state, & 10fe0 70 72 6f 74 6f 63 6f 6c 2c 20 61 74 72 2c 20 26 protocol, atr, & 10ff0 61 74 72 5f 6c 65 6e 29 3b 0a 09 7d 0a 0a 09 69 atr_len);..}...i 11000 66 20 28 73 74 61 74 75 73 5f 72 65 74 20 21 3d f (status_ret != 11010 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 SCARD_S_SUCCESS 11020 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 61 72 ) {...cackey_mar 11030 6b 5f 73 6c 6f 74 5f 72 65 73 65 74 28 73 6c 6f k_slot_reset(slo 11040 74 29 3b 0a 0a 09 09 69 66 20 28 73 74 61 74 75 t);....if (statu 11050 73 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f 57 s_ret == SCARD_W 11060 5f 52 45 53 45 54 5f 43 41 52 44 29 20 7b 0a 09 _RESET_CARD) {.. 11070 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11080 52 49 4e 54 46 28 22 52 65 73 65 74 20 72 65 71 RINTF("Reset req 11090 75 69 72 65 64 2c 20 70 6c 65 61 73 65 20 68 6f uired, please ho 110a0 6c 64 2e 2e 2e 22 29 3b 0a 0a 09 09 09 73 63 61 ld...");.....sca 110b0 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 20 3d 20 rd_reconn_ret = 110c0 63 61 63 6b 65 79 5f 72 65 63 6f 6e 6e 65 63 74 cackey_reconnect 110d0 5f 63 61 72 64 28 73 6c 6f 74 2c 20 53 43 41 52 _card(slot, SCAR 110e0 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 20 7c 20 D_PROTOCOL_T0 | 110f0 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 SCARD_PROTOCOL_T 11100 31 2c 20 26 70 72 6f 74 6f 63 6f 6c 29 3b 0a 09 1, &protocol);.. 11110 09 09 69 66 20 28 73 63 61 72 64 5f 72 65 63 6f ..if (scard_reco 11120 6e 6e 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f nn_ret == SCARD_ 11130 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 S_SUCCESS) {.... 11140 09 2f 2a 20 55 70 64 61 74 65 20 70 72 6f 74 6f ./* Update proto 11150 63 6f 6c 20 2a 2f 0a 09 09 09 09 73 6c 6f 74 2d col */.....slot- 11160 3e 70 72 6f 74 6f 63 6f 6c 20 3d 20 70 72 6f 74 >protocol = prot 11170 6f 63 6f 6c 3b 0a 0a 09 09 09 09 2f 2a 20 52 65 ocol;....../* Re 11180 2d 65 73 74 61 62 6c 69 73 68 20 74 72 61 6e 73 -establish trans 11190 61 63 74 69 6f 6e 2c 20 69 66 20 69 74 20 77 61 action, if it wa 111a0 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 09 09 09 s present */.... 111b0 09 69 66 20 28 73 6c 6f 74 2d 3e 74 72 61 6e 73 .if (slot->trans 111c0 61 63 74 69 6f 6e 5f 64 65 70 74 68 20 3e 20 30 action_depth > 0 111d0 29 20 7b 0a 09 09 09 09 09 73 6c 6f 74 2d 3e 74 ) {......slot->t 111e0 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 68 ransaction_depth 111f0 2d 2d 3b 0a 09 09 09 09 09 73 6c 6f 74 2d 3e 74 --;......slot->t 11200 72 61 6e 73 61 63 74 69 6f 6e 5f 6e 65 65 64 5f ransaction_need_ 11210 68 77 5f 6c 6f 63 6b 20 3d 20 31 3b 0a 09 09 09 hw_lock = 1;.... 11220 09 09 63 61 63 6b 65 79 5f 62 65 67 69 6e 5f 74 ..cackey_begin_t 11230 72 61 6e 73 61 63 74 69 6f 6e 28 73 6c 6f 74 29 ransaction(slot) 11240 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 ;.....}......CAC 11250 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 11260 28 22 52 65 73 65 74 20 73 75 63 63 65 73 73 66 ("Reset successf 11270 75 6c 2c 20 72 65 71 75 65 72 79 69 6e 67 22 29 ul, requerying") 11280 3b 0a 09 09 09 09 73 74 61 74 75 73 5f 72 65 74 ;.....status_ret 11290 20 3d 20 53 43 61 72 64 53 74 61 74 75 73 28 73 = SCardStatus(s 112a0 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20 lot->pcsc_card, 112b0 4e 55 4c 4c 2c 20 26 72 65 61 64 65 72 5f 6c 65 NULL, &reader_le 112c0 6e 2c 20 26 73 74 61 74 65 2c 20 26 70 72 6f 74 n, &state, &prot 112d0 6f 63 6f 6c 2c 20 61 74 72 2c 20 26 61 74 72 5f ocol, atr, &atr_ 112e0 6c 65 6e 29 3b 0a 09 09 09 09 69 66 20 28 73 74 len);.....if (st 112f0 61 74 75 73 5f 72 65 74 20 21 3d 20 53 43 41 52 atus_ret != SCAR 11300 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 D_S_SUCCESS) {.. 11310 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 11320 5f 50 52 49 4e 54 46 28 22 53 74 69 6c 6c 20 75 _PRINTF("Still u 11330 6e 61 62 6c 65 20 74 6f 20 71 75 65 72 79 20 63 nable to query c 11340 61 72 64 20 73 74 61 74 75 73 2c 20 72 65 74 75 ard status, retu 11350 72 6e 69 6e 67 20 74 6f 6b 65 6e 20 61 62 73 65 rning token abse 11360 6e 74 2e 20 20 53 43 61 72 64 53 74 61 74 75 73 nt. SCardStatus 11370 28 29 20 3d 20 25 73 22 2c 20 43 41 43 4b 45 59 () = %s", CACKEY 11380 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 _DEBUG_FUNC_SCAR 11390 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 74 61 74 DERR_TO_STR(stat 113a0 75 73 5f 72 65 74 29 29 3b 0a 0a 09 09 09 09 09 us_ret));....... 113b0 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 return(CACKEY_PC 113c0 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 SC_E_TOKENABSENT 113d0 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 20 65 6c );.....}....} el 113e0 73 65 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f se {.....CACKEY_ 113f0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e DEBUG_PRINTF("Un 11400 61 62 6c 65 20 74 6f 20 72 65 63 6f 6e 6e 65 63 able to reconnec 11410 74 20 74 6f 20 63 61 72 64 2c 20 72 65 74 75 72 t to card, retur 11420 6e 69 6e 67 20 74 6f 6b 65 6e 20 61 62 73 65 6e ning token absen 11430 74 2e 20 20 53 43 61 72 64 52 65 63 6f 6e 6e 65 t. SCardReconne 11440 63 74 28 29 20 3d 20 25 73 22 2c 20 43 41 43 4b ct() = %s", CACK 11450 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 EY_DEBUG_FUNC_SC 11460 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 ARDERR_TO_STR(sc 11470 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74 29 29 ard_reconn_ret)) 11480 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 43 41 ;......return(CA 11490 43 4b 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 CKEY_PCSC_E_TOKE 114a0 4e 41 42 53 45 4e 54 29 3b 0a 09 09 09 7d 0a 09 NABSENT);....}.. 114b0 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 43 41 43 .} else {....CAC 114c0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 114d0 28 22 55 6e 61 62 6c 65 20 74 6f 20 71 75 65 72 ("Unable to quer 114e0 79 20 63 61 72 64 20 73 74 61 74 75 73 2c 20 72 y card status, r 114f0 65 74 75 72 6e 69 6e 67 20 74 6f 6b 65 6e 20 61 eturning token a 11500 62 73 65 6e 74 2e 20 20 53 43 61 72 64 53 74 61 bsent. SCardSta 11510 74 75 73 28 29 20 3d 20 25 73 22 2c 20 43 41 43 tus() = %s", CAC 11520 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 KEY_DEBUG_FUNC_S 11530 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 CARDERR_TO_STR(s 11540 74 61 74 75 73 5f 72 65 74 29 29 3b 0a 0a 09 09 tatus_ret));.... 11550 09 72 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 .return(CACKEY_P 11560 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 4e CSC_E_TOKENABSEN 11570 54 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 T);...}..}...if 11580 28 28 73 74 61 74 65 20 26 20 53 43 41 52 44 5f ((state & SCARD_ 11590 41 42 53 45 4e 54 29 20 3d 3d 20 53 43 41 52 44 ABSENT) == SCARD 115a0 5f 41 42 53 45 4e 54 29 20 7b 0a 09 09 43 41 43 _ABSENT) {...CAC 115b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 115c0 28 22 43 61 72 64 20 69 73 20 61 62 73 65 6e 74 ("Card is absent 115d0 2c 20 72 65 74 75 72 6e 69 6e 67 20 74 6f 6b 65 , returning toke 115e0 6e 20 61 62 73 65 6e 74 22 29 3b 0a 0a 09 09 72 n absent");....r 115f0 65 74 75 72 6e 28 43 41 43 4b 45 59 5f 50 43 53 eturn(CACKEY_PCS 11600 43 5f 45 5f 54 4f 4b 45 4e 41 42 53 45 4e 54 29 C_E_TOKENABSENT) 11610 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 11620 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 11630 72 6e 69 6e 67 20 74 6f 6b 65 6e 20 70 72 65 73 rning token pres 11640 65 6e 74 2e 22 29 3b 0a 0a 09 72 65 74 75 72 6e ent.");...return 11650 28 43 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 54 (CACKEY_PCSC_S_T 11660 4f 4b 45 4e 50 52 45 53 45 4e 54 29 3b 0a 7d 0a OKENPRESENT);.}. 11670 0a 2f 2a 0a 20 2a 20 53 59 4e 50 4f 53 49 53 0a ./*. * SYNPOSIS. 11680 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a * .... *. * 11690 20 41 52 47 55 4d 45 4e 54 53 0a 20 2a 20 20 20 ARGUMENTS. * 116a0 20 20 2e 2e 2e 0a 20 2a 0a 20 2a 20 52 45 54 55 .... *. * RETU 116b0 52 4e 20 56 41 4c 55 45 0a 20 2a 20 20 20 20 20 RN VALUE. * 116c0 2e 2e 2e 0a 20 2a 0a 20 2a 20 4e 4f 54 45 53 0a .... *. * NOTES. 116d0 20 2a 20 20 20 20 20 2e 2e 2e 0a 20 2a 0a 20 2a * .... *. * 116e0 2f 0a 73 74 61 74 69 63 20 73 73 69 7a 65 5f 74 /.static ssize_t 116f0 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 64 65 cackey_pcsc_ide 11700 6e 74 69 74 79 5f 74 6f 5f 6c 61 62 65 6c 28 73 ntity_to_label(s 11710 74 72 75 63 74 20 63 61 63 6b 65 79 5f 70 63 73 truct cackey_pcs 11720 63 5f 69 64 65 6e 74 69 74 79 20 2a 69 64 65 6e c_identity *iden 11730 74 69 74 79 2c 20 75 6e 73 69 67 6e 65 64 20 63 tity, unsigned c 11740 68 61 72 20 2a 6c 61 62 65 6c 5f 62 75 66 2c 20 har *label_buf, 11750 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6c 61 unsigned long la 11760 62 65 6c 5f 62 75 66 5f 6c 65 6e 29 20 7b 0a 09 bel_buf_len) {.. 11770 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 63 65 unsigned long ce 11780 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 3b 0a 09 rtificate_len;.. 11790 63 68 61 72 20 2a 6c 61 62 65 6c 5f 61 73 6e 31 char *label_asn1 117a0 3b 0a 09 76 6f 69 64 20 2a 63 65 72 74 69 66 69 ;..void *certifi 117b0 63 61 74 65 3b 0a 09 69 6e 74 20 78 35 30 39 5f cate;..int x509_ 117c0 72 65 61 64 5f 72 65 74 3b 0a 0a 09 63 65 72 74 read_ret;...cert 117d0 69 66 69 63 61 74 65 20 3d 20 69 64 65 6e 74 69 ificate = identi 117e0 74 79 2d 3e 63 65 72 74 69 66 69 63 61 74 65 3b ty->certificate; 117f0 0a 09 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 ..certificate_le 11800 6e 20 3d 20 69 64 65 6e 74 69 74 79 2d 3e 63 65 n = identity->ce 11810 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 3b 0a 0a rtificate_len;.. 11820 09 69 66 20 28 63 65 72 74 69 66 69 63 61 74 65 .if (certificate 11830 5f 6c 65 6e 20 3c 20 30 29 20 7b 0a 09 09 72 65 _len < 0) {...re 11840 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 78 turn(-1);..}...x 11850 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 509_read_ret = x 11860 35 30 39 5f 74 6f 5f 73 75 62 6a 65 63 74 28 63 509_to_subject(c 11870 65 72 74 69 66 69 63 61 74 65 2c 20 63 65 72 74 ertificate, cert 11880 69 66 69 63 61 74 65 5f 6c 65 6e 2c 20 28 76 6f ificate_len, (vo 11890 69 64 20 2a 2a 29 20 26 6c 61 62 65 6c 5f 61 73 id **) &label_as 118a0 6e 31 29 3b 0a 09 69 66 20 28 78 35 30 39 5f 72 n1);..if (x509_r 118b0 65 61 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 ead_ret < 0) {.. 118c0 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a .return(-1);..}. 118d0 0a 09 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 ..x509_read_ret 118e0 3d 20 78 35 30 39 5f 64 6e 5f 74 6f 5f 73 74 72 = x509_dn_to_str 118f0 69 6e 67 28 6c 61 62 65 6c 5f 61 73 6e 31 2c 20 ing(label_asn1, 11900 78 35 30 39 5f 72 65 61 64 5f 72 65 74 2c 20 28 x509_read_ret, ( 11910 63 68 61 72 20 2a 29 20 6c 61 62 65 6c 5f 62 75 char *) label_bu 11920 66 2c 20 6c 61 62 65 6c 5f 62 75 66 5f 6c 65 6e f, label_buf_len 11930 2c 20 22 43 4e 22 29 3b 0a 09 69 66 20 28 78 35 , "CN");..if (x5 11940 30 39 5f 72 65 61 64 5f 72 65 74 20 3c 3d 20 30 09_read_ret <= 0 11950 29 20 7b 0a 09 09 78 35 30 39 5f 72 65 61 64 5f ) {...x509_read_ 11960 72 65 74 20 3d 20 78 35 30 39 5f 64 6e 5f 74 6f ret = x509_dn_to 11970 5f 73 74 72 69 6e 67 28 6c 61 62 65 6c 5f 61 73 _string(label_as 11980 6e 31 2c 20 78 35 30 39 5f 72 65 61 64 5f 72 65 n1, x509_read_re 11990 74 2c 20 28 63 68 61 72 20 2a 29 20 6c 61 62 65 t, (char *) labe 119a0 6c 5f 62 75 66 2c 20 6c 61 62 65 6c 5f 62 75 66 l_buf, label_buf 119b0 5f 6c 65 6e 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 09 _len, NULL);.... 119c0 69 66 20 28 78 35 30 39 5f 72 65 61 64 5f 72 65 if (x509_read_re 119d0 74 20 3c 3d 20 30 29 20 7b 0a 09 09 09 72 65 74 t <= 0) {....ret 119e0 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09 7d 0a urn(-1);...}..}. 119f0 0a 23 69 66 64 65 66 20 43 41 43 4b 45 59 5f 50 .#ifdef CACKEY_P 11a00 41 52 41 4e 4f 49 44 0a 23 20 20 69 66 64 65 66 ARANOID.# ifdef 11a10 20 5f 50 4f 53 49 58 5f 53 53 49 5a 45 5f 4d 41 _POSIX_SSIZE_MA 11a20 58 0a 09 69 66 20 28 78 35 30 39 5f 72 65 61 64 X..if (x509_read 11a30 5f 72 65 74 20 3e 20 5f 50 4f 53 49 58 5f 53 53 _ret > _POSIX_SS 11a40 49 5a 45 5f 4d 41 58 29 20 7b 0a 09 09 43 41 43 IZE_MAX) {...CAC 11a50 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 11a60 28 22 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 ("x509_read_ret 11a70 65 78 63 65 65 64 73 20 6d 61 78 69 6d 75 6d 20 exceeds maximum 11a80 76 61 6c 75 65 2c 20 72 65 74 75 72 6e 69 6e 67 value, returning 11a90 20 69 6e 20 66 61 69 6c 75 72 65 2e 20 28 6d 61 in failure. (ma 11aa0 78 20 3d 20 25 6c 69 2c 20 78 35 30 39 5f 72 65 x = %li, x509_re 11ab0 61 64 5f 72 65 74 20 3d 20 25 6c 75 29 22 2c 20 ad_ret = %lu)", 11ac0 28 6c 6f 6e 67 29 20 5f 50 4f 53 49 58 5f 53 53 (long) _POSIX_SS 11ad0 49 5a 45 5f 4d 41 58 2c 20 28 75 6e 73 69 67 6e IZE_MAX, (unsign 11ae0 65 64 20 6c 6f 6e 67 29 20 78 35 30 39 5f 72 65 ed long) x509_re 11af0 61 64 5f 72 65 74 29 3b 0a 0a 09 09 72 65 74 75 ad_ret);....retu 11b00 72 6e 28 2d 31 29 3b 0a 09 7d 0a 23 20 20 65 6e rn(-1);..}.# en 11b10 64 69 66 0a 23 65 6e 64 69 66 0a 0a 09 72 65 74 dif.#endif...ret 11b20 75 72 6e 28 78 35 30 39 5f 72 65 61 64 5f 72 65 urn(x509_read_re 11b30 74 29 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e t);.}../* Return 11b40 73 20 30 20 6f 6e 20 73 75 63 63 65 73 73 20 2a s 0 on success * 11b50 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61 63 /.static int cac 11b60 6b 65 79 5f 6d 75 74 65 78 5f 63 72 65 61 74 65 key_mutex_create 11b70 28 76 6f 69 64 20 2a 2a 6d 75 74 65 78 29 20 7b (void **mutex) { 11b80 0a 09 70 74 68 72 65 61 64 5f 6d 75 74 65 78 5f ..pthread_mutex_ 11b90 74 20 2a 70 74 68 72 65 61 64 5f 6d 75 74 65 78 t *pthread_mutex 11ba0 3b 0a 09 69 6e 74 20 70 74 68 72 65 61 64 5f 72 ;..int pthread_r 11bb0 65 74 76 61 6c 3b 0a 09 43 4b 5f 52 56 20 63 75 etval;..CK_RV cu 11bc0 73 74 6f 6d 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 stom_retval;...C 11bd0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 11be0 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 11bf0 09 69 66 20 28 28 63 61 63 6b 65 79 5f 61 72 67 .if ((cackey_arg 11c00 73 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 4f 53 s.flags & CKF_OS 11c10 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 3d 3d 20 _LOCKING_OK) == 11c20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f CKF_OS_LOCKING_O 11c30 4b 29 20 7b 0a 09 09 70 74 68 72 65 61 64 5f 6d K) {...pthread_m 11c40 75 74 65 78 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 utex = malloc(si 11c50 7a 65 6f 66 28 2a 70 74 68 72 65 61 64 5f 6d 75 zeof(*pthread_mu 11c60 74 65 78 29 29 3b 0a 09 09 69 66 20 28 21 70 74 tex));...if (!pt 11c70 68 72 65 61 64 5f 6d 75 74 65 78 29 20 7b 0a 09 hread_mutex) {.. 11c80 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 11c90 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f RINTF("Failed to 11ca0 20 61 6c 6c 6f 63 61 74 65 20 6d 65 6d 6f 72 79 allocate memory 11cb0 2e 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 .");.....return( 11cc0 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 70 74 68 72 -1);...}....pthr 11cd0 65 61 64 5f 72 65 74 76 61 6c 20 3d 20 70 74 68 ead_retval = pth 11ce0 72 65 61 64 5f 6d 75 74 65 78 5f 69 6e 69 74 28 read_mutex_init( 11cf0 70 74 68 72 65 61 64 5f 6d 75 74 65 78 2c 20 4e pthread_mutex, N 11d00 55 4c 4c 29 3b 0a 09 09 69 66 20 28 70 74 68 72 ULL);...if (pthr 11d10 65 61 64 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 ead_retval != 0) 11d20 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB 11d30 55 47 5f 50 52 49 4e 54 46 28 22 70 74 68 72 65 UG_PRINTF("pthre 11d40 61 64 5f 6d 75 74 65 78 5f 69 6e 69 74 28 29 20 ad_mutex_init() 11d50 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 28 returned error ( 11d60 25 69 29 2e 22 2c 20 70 74 68 72 65 61 64 5f 72 %i).", pthread_r 11d70 65 74 76 61 6c 29 3b 0a 0a 09 09 09 72 65 74 75 etval);.....retu 11d80 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 2a rn(-1);...}....* 11d90 6d 75 74 65 78 20 3d 20 70 74 68 72 65 61 64 5f mutex = pthread_ 11da0 6d 75 74 65 78 3b 0a 09 7d 20 65 6c 73 65 20 7b mutex;..} else { 11db0 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 61 72 ...if (cackey_ar 11dc0 67 73 2e 43 72 65 61 74 65 4d 75 74 65 78 29 20 gs.CreateMutex) 11dd0 7b 0a 09 09 09 63 75 73 74 6f 6d 5f 72 65 74 76 {....custom_retv 11de0 61 6c 20 3d 20 63 61 63 6b 65 79 5f 61 72 67 73 al = cackey_args 11df0 2e 43 72 65 61 74 65 4d 75 74 65 78 28 6d 75 74 .CreateMutex(mut 11e00 65 78 29 3b 0a 0a 09 09 09 69 66 20 28 63 75 73 ex);.....if (cus 11e10 74 6f 6d 5f 72 65 74 76 61 6c 20 21 3d 20 43 4b tom_retval != CK 11e20 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 43 41 43 4b R_OK) {.....CACK 11e30 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 11e40 22 63 61 63 6b 65 79 5f 61 72 67 73 2e 43 72 65 "cackey_args.Cre 11e50 61 74 65 4d 75 74 65 78 28 29 20 72 65 74 75 72 ateMutex() retur 11e60 6e 65 64 20 65 72 72 6f 72 20 28 25 6c 69 29 2e ned error (%li). 11e70 22 2c 20 28 6c 6f 6e 67 29 20 63 75 73 74 6f 6d ", (long) custom 11e80 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 09 72 _retval);......r 11e90 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 09 7d 0a eturn(-1);....}. 11ea0 09 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f ..}..}...CACKEY_ 11eb0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 11ec0 74 75 72 6e 69 6e 67 20 73 75 63 65 73 73 66 75 turning sucessfu 11ed0 6c 6c 79 20 28 30 29 22 29 3b 0a 0a 09 72 65 74 lly (0)");...ret 11ee0 75 72 6e 28 30 29 3b 0a 7d 0a 0a 2f 2a 20 52 65 urn(0);.}../* Re 11ef0 74 75 72 6e 73 20 30 20 6f 6e 20 73 75 63 63 65 turns 0 on succe 11f00 73 73 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 ss */.static int 11f10 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f cackey_mutex_lo 11f20 63 6b 28 76 6f 69 64 20 2a 6d 75 74 65 78 29 20 ck(void *mutex) 11f30 7b 0a 09 70 74 68 72 65 61 64 5f 6d 75 74 65 78 {..pthread_mutex 11f40 5f 74 20 2a 70 74 68 72 65 61 64 5f 6d 75 74 65 _t *pthread_mute 11f50 78 3b 0a 09 69 6e 74 20 70 74 68 72 65 61 64 5f x;..int pthread_ 11f60 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 52 56 20 63 retval;..CK_RV c 11f70 75 73 74 6f 6d 5f 72 65 74 76 61 6c 3b 0a 0a 09 ustom_retval;... 11f80 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 11f90 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 11fa0 0a 09 69 66 20 28 28 63 61 63 6b 65 79 5f 61 72 ..if ((cackey_ar 11fb0 67 73 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 4f gs.flags & CKF_O 11fc0 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 3d 3d S_LOCKING_OK) == 11fd0 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f CKF_OS_LOCKING_ 11fe0 4f 4b 29 20 7b 0a 09 09 70 74 68 72 65 61 64 5f OK) {...pthread_ 11ff0 6d 75 74 65 78 20 3d 20 6d 75 74 65 78 3b 0a 0a mutex = mutex;.. 12000 09 09 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c ..pthread_retval 12010 20 3d 20 70 74 68 72 65 61 64 5f 6d 75 74 65 78 = pthread_mutex 12020 5f 6c 6f 63 6b 28 70 74 68 72 65 61 64 5f 6d 75 _lock(pthread_mu 12030 74 65 78 29 3b 0a 09 09 69 66 20 28 70 74 68 72 tex);...if (pthr 12040 65 61 64 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 ead_retval != 0) 12050 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {....CACKEY_DEB 12060 55 47 5f 50 52 49 4e 54 46 28 22 70 74 68 72 65 UG_PRINTF("pthre 12070 61 64 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 29 20 ad_mutex_lock() 12080 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 28 returned error ( 12090 25 69 29 2e 22 2c 20 70 74 68 72 65 61 64 5f 72 %i).", pthread_r 120a0 65 74 76 61 6c 29 3b 0a 0a 09 09 09 72 65 74 75 etval);.....retu 120b0 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09 7d 20 65 rn(-1);...}..} e 120c0 6c 73 65 20 7b 0a 09 09 69 66 20 28 63 61 63 6b lse {...if (cack 120d0 65 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 ey_args.LockMute 120e0 78 29 20 7b 0a 09 09 09 63 75 73 74 6f 6d 5f 72 x) {....custom_r 120f0 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 61 etval = cackey_a 12100 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 28 6d 75 rgs.LockMutex(mu 12110 74 65 78 29 3b 0a 0a 09 09 09 69 66 20 28 63 75 tex);.....if (cu 12120 73 74 6f 6d 5f 72 65 74 76 61 6c 20 21 3d 20 43 stom_retval != C 12130 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 43 41 43 KR_OK) {.....CAC 12140 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 12150 28 22 63 61 63 6b 65 79 5f 61 72 67 73 2e 4c 6f ("cackey_args.Lo 12160 63 6b 4d 75 74 65 78 28 29 20 72 65 74 75 72 6e ckMutex() return 12170 65 64 20 65 72 72 6f 72 20 28 25 6c 69 29 2e 22 ed error (%li)." 12180 2c 20 28 6c 6f 6e 67 29 20 63 75 73 74 6f 6d 5f , (long) custom_ 12190 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 09 72 65 retval);......re 121a0 74 75 72 6e 28 2d 31 29 3b 0a 09 09 09 7d 0a 09 turn(-1);....}.. 121b0 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 .}..}...CACKEY_D 121c0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 EBUG_PRINTF("Ret 121d0 75 72 6e 69 6e 67 20 73 75 63 65 73 73 66 75 6c urning sucessful 121e0 6c 79 20 28 30 29 22 29 3b 0a 0a 09 72 65 74 75 ly (0)");...retu 121f0 72 6e 28 30 29 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 rn(0);.}../* Ret 12200 75 72 6e 73 20 30 20 6f 6e 20 73 75 63 63 65 73 urns 0 on succes 12210 73 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 s */.static int 12220 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 12230 6f 63 6b 28 76 6f 69 64 20 2a 6d 75 74 65 78 29 ock(void *mutex) 12240 20 7b 0a 09 70 74 68 72 65 61 64 5f 6d 75 74 65 {..pthread_mute 12250 78 5f 74 20 2a 70 74 68 72 65 61 64 5f 6d 75 74 x_t *pthread_mut 12260 65 78 3b 0a 09 69 6e 74 20 70 74 68 72 65 61 64 ex;..int pthread 12270 5f 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 52 56 20 _retval;..CK_RV 12280 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 3b 0a 0a custom_retval;.. 12290 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 122a0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 122b0 0a 0a 09 69 66 20 28 28 63 61 63 6b 65 79 5f 61 ...if ((cackey_a 122c0 72 67 73 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f rgs.flags & CKF_ 122d0 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 3d OS_LOCKING_OK) = 122e0 3d 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 = CKF_OS_LOCKING 122f0 5f 4f 4b 29 20 7b 0a 09 09 70 74 68 72 65 61 64 _OK) {...pthread 12300 5f 6d 75 74 65 78 20 3d 20 6d 75 74 65 78 3b 0a _mutex = mutex;. 12310 0a 09 09 70 74 68 72 65 61 64 5f 72 65 74 76 61 ...pthread_retva 12320 6c 20 3d 20 70 74 68 72 65 61 64 5f 6d 75 74 65 l = pthread_mute 12330 78 5f 75 6e 6c 6f 63 6b 28 70 74 68 72 65 61 64 x_unlock(pthread 12340 5f 6d 75 74 65 78 29 3b 0a 09 09 69 66 20 28 70 _mutex);...if (p 12350 74 68 72 65 61 64 5f 72 65 74 76 61 6c 20 21 3d thread_retval != 12360 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 0) {....CACKEY_ 12370 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 70 74 DEBUG_PRINTF("pt 12380 68 72 65 61 64 5f 6d 75 74 65 78 5f 75 6e 6c 6f hread_mutex_unlo 12390 63 6b 28 29 20 72 65 74 75 72 6e 65 64 20 65 72 ck() returned er 123a0 72 6f 72 20 28 25 69 29 2e 22 2c 20 70 74 68 72 ror (%i).", pthr 123b0 65 61 64 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 ead_retval);.... 123c0 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d .return(-1);...} 123d0 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 ..} else {...if 123e0 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 55 6e 6c (cackey_args.Unl 123f0 6f 63 6b 4d 75 74 65 78 29 20 7b 0a 09 09 09 63 ockMutex) {....c 12400 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 3d 20 63 ustom_retval = c 12410 61 63 6b 65 79 5f 61 72 67 73 2e 55 6e 6c 6f 63 ackey_args.Unloc 12420 6b 4d 75 74 65 78 28 6d 75 74 65 78 29 3b 0a 0a kMutex(mutex);.. 12430 09 09 09 69 66 20 28 63 75 73 74 6f 6d 5f 72 65 ...if (custom_re 12440 74 76 61 6c 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 tval != CKR_OK) 12450 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {.....CACKEY_DEB 12460 55 47 5f 50 52 49 4e 54 46 28 22 63 61 63 6b 65 UG_PRINTF("cacke 12470 79 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 74 y_args.UnlockMut 12480 65 78 28 29 20 72 65 74 75 72 6e 65 64 20 65 72 ex() returned er 12490 72 6f 72 20 28 25 6c 69 29 2e 22 2c 20 28 6c 6f ror (%li).", (lo 124a0 6e 67 29 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 ng) custom_retva 124b0 6c 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 l);......return( 124c0 2d 31 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d -1);....}...}..} 124d0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 124e0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 124f0 67 20 73 75 63 65 73 73 66 75 6c 6c 79 20 28 30 g sucessfully (0 12500 29 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 30 29 )");...return(0) 12510 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 43 4b 5f 41 ;.}..static CK_A 12520 54 54 52 49 42 55 54 45 5f 50 54 52 20 63 61 63 TTRIBUTE_PTR cac 12530 6b 65 79 5f 67 65 74 5f 61 74 74 72 69 62 75 74 key_get_attribut 12540 65 73 28 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 es(CK_OBJECT_CLA 12550 53 53 20 6f 62 6a 65 63 74 63 6c 61 73 73 2c 20 SS objectclass, 12560 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 70 63 struct cackey_pc 12570 73 63 5f 69 64 65 6e 74 69 74 79 20 2a 69 64 65 sc_identity *ide 12580 6e 74 69 74 79 2c 20 75 6e 73 69 67 6e 65 64 20 ntity, unsigned 12590 6c 6f 6e 67 20 69 64 65 6e 74 69 74 79 5f 6e 75 long identity_nu 125a0 6d 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 m, CK_ULONG_PTR 125b0 70 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 73 74 61 pulCount) {..sta 125c0 74 69 63 20 43 4b 5f 42 42 4f 4f 4c 20 63 6b 5f tic CK_BBOOL ck_ 125d0 74 72 75 65 20 3d 20 31 3b 0a 09 73 74 61 74 69 true = 1;..stati 125e0 63 20 43 4b 5f 42 42 4f 4f 4c 20 63 6b 5f 66 61 c CK_BBOOL ck_fa 125f0 6c 73 65 20 3d 20 30 3b 0a 09 73 74 61 74 69 63 lse = 0;..static 12600 20 43 4b 5f 54 52 55 53 54 20 63 6b 5f 74 72 75 CK_TRUST ck_tru 12610 73 74 65 64 20 3d 20 43 4b 5f 54 52 55 53 54 45 sted = CK_TRUSTE 12620 44 5f 44 45 4c 45 47 41 54 4f 52 3b 0a 09 43 4b D_DELEGATOR;..CK 12630 5f 55 4c 4f 4e 47 20 6e 75 6d 61 74 74 72 73 20 _ULONG numattrs 12640 3d 20 30 2c 20 72 65 74 76 61 6c 5f 63 6f 75 6e = 0, retval_coun 12650 74 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 t;..CK_ATTRIBUTE 12660 5f 54 59 50 45 20 63 75 72 72 5f 61 74 74 72 5f _TYPE curr_attr_ 12670 74 79 70 65 3b 0a 09 43 4b 5f 41 54 54 52 49 42 type;..CK_ATTRIB 12680 55 54 45 20 63 75 72 72 5f 61 74 74 72 2c 20 2a UTE curr_attr, * 12690 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 56 4f 49 44 retval;..CK_VOID 126a0 5f 50 54 52 20 70 56 61 6c 75 65 3b 0a 09 43 4b _PTR pValue;..CK 126b0 5f 55 4c 4f 4e 47 20 75 6c 56 61 6c 75 65 4c 65 _ULONG ulValueLe 126c0 6e 3b 0a 09 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c n;..CK_OBJECT_CL 126d0 41 53 53 20 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c ASS ck_object_cl 126e0 61 73 73 3b 0a 09 43 4b 5f 43 45 52 54 49 46 49 ass;..CK_CERTIFI 126f0 43 41 54 45 5f 54 59 50 45 20 63 6b 5f 63 65 72 CATE_TYPE ck_cer 12700 74 69 66 69 63 61 74 65 5f 74 79 70 65 3b 0a 09 tificate_type;.. 12710 43 4b 5f 4b 45 59 5f 54 59 50 45 20 63 6b 5f 6b CK_KEY_TYPE ck_k 12720 65 79 5f 74 79 70 65 3b 0a 09 43 4b 5f 55 54 46 ey_type;..CK_UTF 12730 38 43 48 41 52 20 75 63 54 6d 70 42 75 66 5b 31 8CHAR ucTmpBuf[1 12740 30 32 34 5d 3b 0a 09 53 48 41 31 43 6f 6e 74 65 024];..SHA1Conte 12750 78 74 20 73 68 61 31 5f 63 74 78 3b 0a 09 4d 44 xt sha1_ctx;..MD 12760 35 5f 43 54 58 20 6d 64 35 5f 63 74 78 3b 0a 09 5_CTX md5_ctx;.. 12770 75 69 6e 74 38 5f 74 20 73 68 61 31 5f 68 61 73 uint8_t sha1_has 12780 68 5b 53 48 41 31 48 61 73 68 53 69 7a 65 5d 3b h[SHA1HashSize]; 12790 0a 09 75 69 6e 74 38 5f 74 20 6d 64 35 5f 68 61 ..uint8_t md5_ha 127a0 73 68 5b 4d 44 35 48 61 73 68 53 69 7a 65 5d 3b sh[MD5HashSize]; 127b0 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 ..unsigned char 127c0 2a 63 65 72 74 69 66 69 63 61 74 65 3b 0a 09 73 *certificate;..s 127d0 73 69 7a 65 5f 74 20 63 65 72 74 69 66 69 63 61 size_t certifica 127e0 74 65 5f 6c 65 6e 20 3d 20 2d 31 2c 20 78 35 30 te_len = -1, x50 127f0 39 5f 72 65 61 64 5f 72 65 74 3b 0a 09 69 6e 74 9_read_ret;..int 12800 20 70 56 61 6c 75 65 5f 66 72 65 65 3b 0a 0a 09 pValue_free;... 12810 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 12820 4e 54 46 28 22 43 61 6c 6c 65 64 20 28 6f 62 6a NTF("Called (obj 12830 65 63 74 43 6c 61 73 73 20 3d 20 25 6c 75 2c 20 ectClass = %lu, 12840 69 64 65 6e 74 69 74 79 5f 6e 75 6d 20 3d 20 25 identity_num = % 12850 6c 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 lu).", (unsigned 12860 20 6c 6f 6e 67 29 20 6f 62 6a 65 63 74 63 6c 61 long) objectcla 12870 73 73 2c 20 69 64 65 6e 74 69 74 79 5f 6e 75 6d ss, identity_num 12880 29 3b 0a 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 3d );...*pulCount = 12890 20 30 3b 0a 0a 09 69 66 20 28 6f 62 6a 65 63 74 0;...if (object 128a0 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43 45 52 class != CKO_CER 128b0 54 49 46 49 43 41 54 45 20 26 26 20 6f 62 6a 65 TIFICATE && obje 128c0 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 50 ctclass != CKO_P 128d0 55 42 4c 49 43 5f 4b 45 59 20 26 26 20 6f 62 6a UBLIC_KEY && obj 128e0 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f ectclass != CKO_ 128f0 50 52 49 56 41 54 45 5f 4b 45 59 20 26 26 20 6f PRIVATE_KEY && o 12900 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b bjectclass != CK 12910 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 53 54 O_NETSCAPE_TRUST 12920 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 12930 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 12940 6e 69 6e 67 20 30 20 6f 62 6a 65 63 74 73 20 28 ning 0 objects ( 12950 4e 55 4c 4c 29 2c 20 69 6e 76 61 6c 69 64 20 6f NULL), invalid o 12960 62 6a 65 63 74 20 63 6c 61 73 73 22 29 3b 0a 0a bject class");.. 12970 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a ..return(NULL);. 12980 09 7d 0a 0a 09 2f 2a 20 47 65 74 20 43 65 72 74 .}.../* Get Cert 12990 20 2a 2f 0a 09 69 66 20 28 69 64 65 6e 74 69 74 */..if (identit 129a0 79 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 y == NULL) {...C 129b0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 129c0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 30 20 TF("Returning 0 129d0 6f 62 6a 65 63 74 73 20 28 4e 55 4c 4c 29 2c 20 objects (NULL), 129e0 69 6e 76 61 6c 69 64 20 69 64 65 6e 74 69 79 20 invalid identiy 129f0 70 72 6f 76 69 64 65 64 22 29 3b 0a 0a 09 09 72 provided");....r 12a00 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a eturn(NULL);..}. 12a10 0a 09 63 65 72 74 69 66 69 63 61 74 65 20 3d 20 ..certificate = 12a20 69 64 65 6e 74 69 74 79 2d 3e 63 65 72 74 69 66 identity->certif 12a30 69 63 61 74 65 3b 0a 09 63 65 72 74 69 66 69 63 icate;..certific 12a40 61 74 65 5f 6c 65 6e 20 3d 20 69 64 65 6e 74 69 ate_len = identi 12a50 74 79 2d 3e 63 65 72 74 69 66 69 63 61 74 65 5f ty->certificate_ 12a60 6c 65 6e 3b 0a 0a 09 69 66 20 28 63 65 72 74 69 len;...if (certi 12a70 66 69 63 61 74 65 5f 6c 65 6e 20 3d 3d 20 2d 31 ficate_len == -1 12a80 20 7c 7c 20 63 65 72 74 69 66 69 63 61 74 65 20 || certificate 12a90 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 12aa0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 12ab0 28 22 52 65 74 75 72 6e 69 6e 67 20 30 20 6f 62 ("Returning 0 ob 12ac0 6a 65 63 74 73 20 28 4e 55 4c 4c 29 2c 20 74 68 jects (NULL), th 12ad0 69 73 20 69 64 65 6e 74 69 74 79 20 64 6f 65 73 is identity does 12ae0 20 6e 6f 74 20 68 61 76 65 20 61 6e 20 58 2e 35 not have an X.5 12af0 30 39 20 63 65 72 74 69 66 69 63 61 74 65 20 61 09 certificate a 12b00 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 69 ssociated with i 12b10 74 20 61 6e 64 20 77 69 6c 6c 20 6e 6f 74 20 77 t and will not w 12b20 6f 72 6b 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ork");....return 12b30 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 (NULL);..}.../* 12b40 56 65 72 69 66 79 20 74 68 61 74 20 63 65 72 74 Verify that cert 12b50 69 66 69 63 61 74 65 20 69 73 20 41 53 4e 2e 31 ificate is ASN.1 12b60 20 65 6e 63 6f 64 65 64 20 58 2e 35 30 39 20 63 encoded X.509 c 12b70 65 72 74 69 66 69 63 61 74 65 20 2a 2f 0a 09 69 ertificate */..i 12b80 66 20 28 78 35 30 39 5f 74 6f 5f 73 65 72 69 61 f (x509_to_seria 12b90 6c 28 63 65 72 74 69 66 69 63 61 74 65 2c 20 63 l(certificate, c 12ba0 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 2c 20 ertificate_len, 12bb0 4e 55 4c 4c 29 20 3c 20 30 29 20 7b 0a 09 09 43 NULL) < 0) {...C 12bc0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 12bd0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 30 20 TF("Returning 0 12be0 6f 62 6a 65 63 74 73 20 28 4e 55 4c 4c 29 2c 20 objects (NULL), 12bf0 74 68 65 20 58 2e 35 30 39 20 63 65 72 74 69 66 the X.509 certif 12c00 69 63 61 74 65 20 61 73 73 6f 63 69 61 74 65 64 icate associated 12c10 20 77 69 74 68 20 74 68 69 73 20 69 64 65 6e 74 with this ident 12c20 69 74 79 20 69 73 20 6e 6f 74 20 76 61 6c 69 64 ity is not valid 12c30 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55 ");....return(NU 12c40 4c 4c 29 3b 0a 09 7d 0a 0a 09 72 65 74 76 61 6c LL);..}...retval 12c50 5f 63 6f 75 6e 74 20 3d 20 36 34 3b 0a 09 72 65 _count = 64;..re 12c60 74 76 61 6c 20 3d 20 6d 61 6c 6c 6f 63 28 72 65 tval = malloc(re 12c70 74 76 61 6c 5f 63 6f 75 6e 74 20 2a 20 73 69 7a tval_count * siz 12c80 65 6f 66 28 2a 72 65 74 76 61 6c 29 29 3b 0a 0a eof(*retval));.. 12c90 09 66 6f 72 20 28 63 75 72 72 5f 61 74 74 72 5f .for (curr_attr_ 12ca0 74 79 70 65 20 3d 20 30 3b 20 63 75 72 72 5f 61 type = 0; curr_a 12cb0 74 74 72 5f 74 79 70 65 20 3c 20 30 78 63 65 35 ttr_type < 0xce5 12cc0 33 36 33 62 66 3b 20 63 75 72 72 5f 61 74 74 72 363bf; curr_attr 12cd0 5f 74 79 70 65 2b 2b 29 20 7b 0a 09 09 69 66 20 _type++) {...if 12ce0 28 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 20 (curr_attr_type 12cf0 3d 3d 20 30 78 38 30 30 29 20 7b 0a 09 09 09 63 == 0x800) {....c 12d00 75 72 72 5f 61 74 74 72 5f 74 79 70 65 20 3d 20 urr_attr_type = 12d10 30 78 63 65 35 33 36 33 30 30 3b 0a 09 09 7d 0a 0xce536300;...}. 12d20 0a 09 09 70 56 61 6c 75 65 5f 66 72 65 65 20 3d ...pValue_free = 12d30 20 30 3b 0a 09 09 70 56 61 6c 75 65 20 3d 20 4e 0;...pValue = N 12d40 55 4c 4c 3b 0a 09 09 75 6c 56 61 6c 75 65 4c 65 ULL;...ulValueLe 12d50 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47 29 20 2d 31 n = (CK_LONG) -1 12d60 3b 0a 0a 09 09 73 77 69 74 63 68 20 28 63 75 72 ;....switch (cur 12d70 72 5f 61 74 74 72 5f 74 79 70 65 29 20 7b 0a 09 r_attr_type) {.. 12d80 09 09 63 61 73 65 20 43 4b 41 5f 43 4c 41 53 53 ..case CKA_CLASS 12d90 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB 12da0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque 12db0 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute 12dc0 43 4b 41 5f 43 4c 41 53 53 20 28 30 78 25 30 38 CKA_CLASS (0x%08 12dd0 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 lx) ...", (unsig 12de0 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 ned long) curr_a 12df0 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 ttr_type);...... 12e00 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c 61 73 73 20 ck_object_class 12e10 3d 20 6f 62 6a 65 63 74 63 6c 61 73 73 3b 0a 0a = objectclass;.. 12e20 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b ....pValue = &ck 12e30 5f 6f 62 6a 65 63 74 5f 63 6c 61 73 73 3b 0a 09 _object_class;.. 12e40 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 ...ulValueLen = 12e50 73 69 7a 65 6f 66 28 63 6b 5f 6f 62 6a 65 63 74 sizeof(ck_object 12e60 5f 63 6c 61 73 73 29 3b 0a 0a 09 09 09 09 43 41 _class);......CA 12e70 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 12e80 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e F(" ... returnin 12e90 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c g %lu (%p/%lu)", 12ea0 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 12eb0 20 2a 28 28 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c *((CK_OBJECT_CL 12ec0 41 53 53 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 ASS *) pValue), 12ed0 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 pValue, (unsigne 12ee0 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c d long) ulValueL 12ef0 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b en);......break; 12f00 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 4f 4b ....case CKA_TOK 12f10 45 4e 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 EN:.....CACKEY_D 12f20 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 EBUG_PRINTF("Req 12f30 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 uesting attribut 12f40 65 20 43 4b 41 5f 54 4f 4b 45 4e 20 28 30 78 25 e CKA_TOKEN (0x% 12f50 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 08lx) ...", (uns 12f60 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 igned long) curr 12f70 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 _attr_type);.... 12f80 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74 ..pValue = &ck_t 12f90 72 75 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 rue;.....ulValue 12fa0 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f Len = sizeof(ck_ 12fb0 74 72 75 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b true);......CACK 12fc0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 12fd0 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning 12fe0 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 %lu (%p/%lu)", ( 12ff0 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a unsigned long) * 13000 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 ((CK_BBOOL *) pV 13010 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 alue), pValue, ( 13020 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 unsigned long) u 13030 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 lValueLen);..... 13040 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 .break;....case 13050 43 4b 41 5f 50 52 49 56 41 54 45 3a 0a 09 09 09 CKA_PRIVATE:.... 13060 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 13070 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting 13080 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 50 attribute CKA_P 13090 52 49 56 41 54 45 20 28 30 78 25 30 38 6c 78 29 RIVATE (0x%08lx) 130a0 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 ...", (unsigned 130b0 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 long) curr_attr 130c0 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 _type);......if 130d0 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 (objectclass != 130e0 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 CKO_NETSCAPE_TRU 130f0 53 54 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 ST) {......CACKE 13100 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 13110 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 ... but not get 13120 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 ting it because 13130 77 65 20 61 72 65 20 6e 6f 74 20 61 20 4e 65 74 we are not a Net 13140 73 63 61 70 65 20 74 72 75 73 74 20 6f 62 6a 65 scape trust obje 13150 63 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 ct");.......brea 13160 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 70 56 k;.....}......pV 13170 61 6c 75 65 20 3d 20 26 63 6b 5f 66 61 6c 73 65 alue = &ck_false 13180 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e ;.....ulValueLen 13190 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 66 61 6c = sizeof(ck_fal 131a0 73 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 se);......CACKEY 131b0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 131c0 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c ... returning %l 131d0 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e u (%p/%lu)", (un 131e0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 signed long) *(( 131f0 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c CK_BBOOL *) pVal 13200 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e ue), pValue, (un 13210 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV 13220 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b 13230 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK 13240 41 5f 54 52 55 53 54 45 44 3a 0a 09 09 09 09 43 A_TRUSTED:.....C 13250 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 13260 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 TF("Requesting a 13270 74 74 72 69 62 75 74 65 20 43 4b 41 5f 54 52 55 ttribute CKA_TRU 13280 53 54 45 44 20 28 30 78 25 30 38 6c 78 29 20 2e STED (0x%08lx) . 13290 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 132a0 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 132b0 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f ype);......if (o 132c0 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b bjectclass == CK 132d0 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 53 54 O_NETSCAPE_TRUST 132e0 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f ) {......CACKEY_ 132f0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 13300 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 .. but not getti 13310 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 ng it because we 13320 20 61 72 65 20 61 20 4e 65 74 73 63 61 70 65 20 are a Netscape 13330 74 72 75 73 74 20 6f 62 6a 65 63 74 22 29 3b 0a trust object");. 13340 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 13350 09 7d 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d .}......pValue = 13360 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 75 &ck_true;.....u 13370 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 lValueLen = size 13380 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a 0a 09 09 of(ck_true);.... 13390 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 133a0 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 RINTF(" ... retu 133b0 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c rning %lu (%p/%l 133c0 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c u)", (unsigned l 133d0 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c ong) *((CK_BBOOL 133e0 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 *) pValue), pVa 133f0 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c lue, (unsigned l 13400 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 ong) ulValueLen) 13410 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 ;......break;... 13420 09 63 61 73 65 20 43 4b 41 5f 4d 4f 44 49 46 49 .case CKA_MODIFI 13430 41 42 4c 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 ABLE:.....CACKEY 13440 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 13450 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 equesting attrib 13460 75 74 65 20 43 4b 41 5f 4d 4f 44 49 46 49 41 42 ute CKA_MODIFIAB 13470 4c 45 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e LE (0x%08lx) ... 13480 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 13490 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 g) curr_attr_typ 134a0 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 e);......pValue 134b0 3d 20 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 = &ck_false;.... 134c0 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 .ulValueLen = si 134d0 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b 0a zeof(ck_false);. 134e0 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 134f0 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 G_PRINTF(" ... r 13500 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 eturning %lu (%p 13510 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 /%lu)", (unsigne 13520 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 d long) *((CK_BB 13530 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 OOL *) pValue), 13540 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 pValue, (unsigne 13550 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c d long) ulValueL 13560 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b en);......break; 13570 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 4c 41 42 ....case CKA_LAB 13580 45 4c 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 EL:.....CACKEY_D 13590 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 EBUG_PRINTF("Req 135a0 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 uesting attribut 135b0 65 20 43 4b 41 5f 4c 41 42 45 4c 20 28 30 78 25 e CKA_LABEL (0x% 135c0 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 08lx) ...", (uns 135d0 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 igned long) curr 135e0 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 _attr_type);.... 135f0 09 09 2f 2a 20 58 58 58 3a 20 44 65 74 65 72 6d ../* XXX: Determ 13600 69 6e 65 20 6e 61 6d 65 20 2a 2f 0a 09 09 09 09 ine name */..... 13610 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 6e 70 ulValueLen = snp 13620 72 69 6e 74 66 28 28 63 68 61 72 20 2a 29 20 75 rintf((char *) u 13630 63 54 6d 70 42 75 66 2c 20 73 69 7a 65 6f 66 28 cTmpBuf, sizeof( 13640 75 63 54 6d 70 42 75 66 29 2c 20 22 49 64 65 6e ucTmpBuf), "Iden 13650 74 69 74 79 20 23 25 6c 75 22 2c 20 28 75 6e 73 tity #%lu", (uns 13660 69 67 6e 65 64 20 6c 6f 6e 67 29 20 69 64 65 6e igned long) iden 13670 74 69 74 79 5f 6e 75 6d 29 3b 0a 09 09 09 09 70 tity_num);.....p 13680 56 61 6c 75 65 20 3d 20 75 63 54 6d 70 42 75 66 Value = ucTmpBuf 13690 3b 0a 0a 09 09 09 09 69 66 20 28 75 6c 56 61 6c ;......if (ulVal 136a0 75 65 4c 65 6e 20 3e 3d 20 73 69 7a 65 6f 66 28 ueLen >= sizeof( 136b0 75 63 54 6d 70 42 75 66 29 29 20 7b 0a 09 09 09 ucTmpBuf)) {.... 136c0 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 30 ..ulValueLen = 0 136d0 3b 0a 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 ;......pValue = 136e0 4e 55 4c 4c 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 NULL;.....}..... 136f0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 13700 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 INTF(" ... retur 13710 6e 69 6e 67 20 28 25 70 2f 25 6c 75 29 22 2c 20 ning (%p/%lu)", 13720 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 pValue, (unsigne 13730 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c d long) ulValueL 13740 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b en);......break; 13750 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 56 41 4c ....case CKA_VAL 13760 55 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 UE:.....CACKEY_D 13770 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 EBUG_PRINTF("Req 13780 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 uesting attribut 13790 65 20 43 4b 41 5f 56 41 4c 55 45 20 28 30 78 25 e CKA_VALUE (0x% 137a0 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 08lx) ...", (uns 137b0 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 igned long) curr 137c0 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 _attr_type);.... 137d0 09 09 73 77 69 74 63 68 20 28 6f 62 6a 65 63 74 ..switch (object 137e0 63 6c 61 73 73 29 20 7b 0a 09 09 09 09 09 63 61 class) {......ca 137f0 73 65 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b se CKO_PRIVATE_K 13800 45 59 3a 0a 09 09 09 09 09 09 43 41 43 4b 45 59 EY:.......CACKEY 13810 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 13820 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 ... but not gett 13830 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 ing it because w 13840 65 20 61 72 65 20 61 20 70 72 69 76 61 74 65 20 e are a private 13850 6b 65 79 2e 22 29 3b 0a 0a 09 09 09 09 09 09 62 key.");........b 13860 72 65 61 6b 3b 0a 09 09 09 09 09 63 61 73 65 20 reak;......case 13870 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 CKO_NETSCAPE_TRU 13880 53 54 3a 0a 09 09 09 09 09 09 43 41 43 4b 45 59 ST:.......CACKEY 13890 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 138a0 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 ... but not gett 138b0 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 ing it because w 138c0 65 20 61 72 65 20 61 20 4e 65 74 73 63 61 70 65 e are a Netscape 138d0 20 74 72 75 73 74 20 6f 62 6a 65 63 74 22 29 3b trust object"); 138e0 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 ........break;.. 138f0 09 09 09 09 63 61 73 65 20 43 4b 4f 5f 50 55 42 ....case CKO_PUB 13900 4c 49 43 5f 4b 45 59 3a 0a 09 09 09 09 09 09 69 LIC_KEY:.......i 13910 66 20 28 63 65 72 74 69 66 69 63 61 74 65 5f 6c f (certificate_l 13920 65 6e 20 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 en >= 0) {...... 13930 09 09 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 ..x509_read_ret 13940 3d 20 78 35 30 39 5f 74 6f 5f 70 75 62 6b 65 79 = x509_to_pubkey 13950 28 63 65 72 74 69 66 69 63 61 74 65 2c 20 63 65 (certificate, ce 13960 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 2c 20 26 rtificate_len, & 13970 70 56 61 6c 75 65 29 3b 0a 09 09 09 09 09 09 09 pValue);........ 13980 69 66 20 28 78 35 30 39 5f 72 65 61 64 5f 72 65 if (x509_read_re 13990 74 20 3c 20 30 29 20 7b 20 0a 09 09 09 09 09 09 t < 0) { ....... 139a0 09 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b ..pValue = NULL; 139b0 0a 09 09 09 09 09 09 09 7d 20 65 6c 73 65 20 7b ........} else { 139c0 0a 09 09 09 09 09 09 09 09 75 6c 56 61 6c 75 65 .........ulValue 139d0 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 64 5f Len = x509_read_ 139e0 72 65 74 3b 0a 09 09 09 09 09 09 09 7d 0a 09 09 ret;........}... 139f0 09 09 09 09 7d 0a 0a 09 09 09 09 09 09 62 72 65 ....}........bre 13a00 61 6b 3b 0a 09 09 09 09 09 63 61 73 65 20 43 4b ak;......case CK 13a10 4f 5f 43 45 52 54 49 46 49 43 41 54 45 3a 0a 09 O_CERTIFICATE:.. 13a20 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 63 65 .....pValue = ce 13a30 72 74 69 66 69 63 61 74 65 3b 0a 09 09 09 09 09 rtificate;...... 13a40 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 63 65 .ulValueLen = ce 13a50 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 3b 0a 0a rtificate_len;.. 13a60 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 13a70 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 .}......CACKEY_D 13a80 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e EBUG_PRINTF(" .. 13a90 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 70 2f 25 . returning %p/% 13aa0 6c 75 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e lu", pValue, (un 13ab0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV 13ac0 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b 13ad0 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK 13ae0 41 5f 49 53 53 55 45 52 3a 0a 09 09 09 09 43 41 A_ISSUER:.....CA 13af0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 13b00 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 F("Requesting at 13b10 74 72 69 62 75 74 65 20 43 4b 41 5f 49 53 53 55 tribute CKA_ISSU 13b20 45 52 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e ER (0x%08lx) ... 13b30 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 13b40 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 g) curr_attr_typ 13b50 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a e);......if (obj 13b60 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f ectclass != CKO_ 13b70 43 45 52 54 49 46 49 43 41 54 45 20 26 26 20 6f CERTIFICATE && o 13b80 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b bjectclass != CK 13b90 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 53 54 O_NETSCAPE_TRUST 13ba0 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f ) {......CACKEY_ 13bb0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 13bc0 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 .. but not getti 13bd0 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 ng it because we 13be0 20 61 72 65 20 6e 6f 74 20 61 20 63 65 72 74 69 are not a certi 13bf0 66 69 63 61 74 65 20 6f 72 20 4e 65 74 73 63 61 ficate or Netsca 13c00 70 65 20 74 72 75 73 74 20 6f 62 6a 65 63 74 22 pe trust object" 13c10 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a );.......break;. 13c20 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 63 ....}......if (c 13c30 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3e ertificate_len > 13c40 3d 20 30 29 20 7b 0a 09 09 09 09 09 78 35 30 39 = 0) {......x509 13c50 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 30 39 _read_ret = x509 13c60 5f 74 6f 5f 69 73 73 75 65 72 28 63 65 72 74 69 _to_issuer(certi 13c70 66 69 63 61 74 65 2c 20 63 65 72 74 69 66 69 63 ficate, certific 13c80 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 65 ate_len, &pValue 13c90 29 3b 0a 09 09 09 09 09 69 66 20 28 78 35 30 39 );......if (x509 13ca0 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 29 20 7b _read_ret < 0) { 13cb0 0a 09 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 .......pValue = 13cc0 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 6c 73 NULL;......} els 13cd0 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 6c 75 e {.......ulValu 13ce0 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 64 eLen = x509_read 13cf0 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 09 09 _ret;......}.... 13d00 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 .}......CACKEY_D 13d10 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e EBUG_PRINTF(" .. 13d20 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 70 2f 25 . returning %p/% 13d30 6c 75 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e lu", pValue, (un 13d40 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV 13d50 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b 13d60 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK 13d70 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52 3a A_SERIAL_NUMBER: 13d80 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 13d90 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 G_PRINTF("Reques 13da0 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 ting attribute C 13db0 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52 KA_SERIAL_NUMBER 13dc0 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", 13dd0 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 13de0 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) 13df0 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 ;......if (objec 13e00 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43 45 tclass != CKO_CE 13e10 52 54 49 46 49 43 41 54 45 20 26 26 20 6f 62 6a RTIFICATE && obj 13e20 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f ectclass != CKO_ 13e30 4e 45 54 53 43 41 50 45 5f 54 52 55 53 54 29 20 NETSCAPE_TRUST) 13e40 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {......CACKEY_DE 13e50 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... 13e60 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 but not getting 13e70 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20 61 it because we a 13e80 72 65 20 6e 6f 74 20 61 20 63 65 72 74 69 66 69 re not a certifi 13e90 63 61 74 65 20 6f 72 20 4e 65 74 73 63 61 70 65 cate or Netscape 13ea0 20 74 72 75 73 74 20 6f 62 6a 65 63 74 22 29 3b trust object"); 13eb0 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 .......break;... 13ec0 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 63 65 72 ..}......if (cer 13ed0 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3e 3d 20 tificate_len >= 13ee0 30 29 20 7b 0a 09 09 09 09 09 78 35 30 39 5f 72 0) {......x509_r 13ef0 65 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f 74 ead_ret = x509_t 13f00 6f 5f 73 65 72 69 61 6c 28 63 65 72 74 69 66 69 o_serial(certifi 13f10 63 61 74 65 2c 20 63 65 72 74 69 66 69 63 61 74 cate, certificat 13f20 65 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 65 29 3b e_len, &pValue); 13f30 0a 09 09 09 09 09 69 66 20 28 78 35 30 39 5f 72 ......if (x509_r 13f40 65 61 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 ead_ret < 0) {.. 13f50 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 4e 55 .....pValue = NU 13f60 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 LL;......} else 13f70 7b 0a 09 09 09 09 09 09 75 6c 56 61 6c 75 65 4c {.......ulValueL 13f80 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 64 5f 72 en = x509_read_r 13f90 65 74 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d et;......}.....} 13fa0 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 13fb0 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... 13fc0 72 65 74 75 72 6e 69 6e 67 20 28 25 70 2f 25 6c returning (%p/%l 13fd0 75 29 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e u)", 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 53 55 42 4a 45 43 54 3a 0a 09 09 09 09 43 A_SUBJECT:.....C 14020 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 14030 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 TF("Requesting a 14040 74 74 72 69 62 75 74 65 20 43 4b 41 5f 53 55 42 ttribute CKA_SUB 14050 4a 45 43 54 20 28 30 78 25 30 38 6c 78 29 20 2e JECT (0x%08lx) . 14060 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 14070 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 14080 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f ype);......if (o 14090 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b bjectclass != CK 140a0 4f 5f 43 45 52 54 49 46 49 43 41 54 45 29 20 7b O_CERTIFICATE) { 140b0 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 140c0 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... 140d0 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 but not getting 140e0 69 74 20 62 65 63 61 75 73 65 20 77 65 20 61 72 it because we ar 140f0 65 20 6e 6f 74 20 61 20 63 65 72 74 69 66 69 63 e not a certific 14100 61 74 65 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 ate");.......bre 14110 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 ak;.....}......i 14120 66 20 28 63 65 72 74 69 66 69 63 61 74 65 5f 6c f (certificate_l 14130 65 6e 20 3e 3d 20 30 29 20 7b 0a 09 09 09 09 09 en >= 0) {...... 14140 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3d 20 x509_read_ret = 14150 78 35 30 39 5f 74 6f 5f 73 75 62 6a 65 63 74 28 x509_to_subject( 14160 63 65 72 74 69 66 69 63 61 74 65 2c 20 63 65 72 certificate, cer 14170 74 69 66 69 63 61 74 65 5f 6c 65 6e 2c 20 26 70 tificate_len, &p 14180 56 61 6c 75 65 29 3b 0a 09 09 09 09 09 69 66 20 Value);......if 14190 28 78 35 30 39 5f 72 65 61 64 5f 72 65 74 20 3c (x509_read_ret < 141a0 20 30 29 20 7b 0a 09 09 09 09 09 09 70 56 61 6c 0) {.......pVal 141b0 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 ue = NULL;...... 141c0 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 75 } else {.......u 141d0 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 78 35 30 39 lValueLen = x509 141e0 5f 72 65 61 64 5f 72 65 74 3b 0a 09 09 09 09 09 _read_ret;...... 141f0 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 }.....}......CAC 14200 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 14210 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 (" ... returning 14220 20 25 70 2f 25 6c 75 22 2c 20 70 56 61 6c 75 65 %p/%lu", pValue 14230 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 14240 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a ) ulValueLen);.. 14250 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 ....break;....ca 14260 73 65 20 43 4b 41 5f 49 44 3a 0a 09 09 09 09 43 se CKA_ID:.....C 14270 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 14280 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 TF("Requesting a 14290 74 74 72 69 62 75 74 65 20 43 4b 41 5f 49 44 20 ttribute CKA_ID 142a0 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 (0x%08lx) ...", 142b0 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 142c0 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b curr_attr_type); 142d0 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 ......if (object 142e0 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 4e 45 54 class == CKO_NET 142f0 53 43 41 50 45 5f 54 52 55 53 54 29 20 7b 0a 09 SCAPE_TRUST) {.. 14300 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 14310 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 _PRINTF(" ... bu 14320 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 t not getting it 14330 20 62 65 63 61 75 73 65 20 77 65 20 61 72 65 20 because we are 14340 61 20 4e 65 74 73 63 61 70 65 20 74 72 75 73 74 a Netscape trust 14350 20 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 09 object");...... 14360 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 .break;.....}... 14370 09 09 09 75 63 54 6d 70 42 75 66 5b 30 5d 20 3d ...ucTmpBuf[0] = 14380 20 28 28 69 64 65 6e 74 69 74 79 5f 6e 75 6d 20 ((identity_num 14390 2b 20 31 29 20 3e 3e 20 38 29 20 26 20 30 78 66 + 1) >> 8) & 0xf 143a0 66 3b 0a 09 09 09 09 75 63 54 6d 70 42 75 66 5b f;.....ucTmpBuf[ 143b0 31 5d 20 3d 20 20 28 69 64 65 6e 74 69 74 79 5f 1] = (identity_ 143c0 6e 75 6d 20 2b 20 31 29 20 26 20 30 78 66 66 3b num + 1) & 0xff; 143d0 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 ......pValue = & 143e0 75 63 54 6d 70 42 75 66 3b 0a 09 09 09 09 75 6c ucTmpBuf;.....ul 143f0 56 61 6c 75 65 4c 65 6e 20 3d 20 32 3b 0a 0a 09 ValueLen = 2;... 14400 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 14410 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 PRINTF(" ... ret 14420 75 72 6e 69 6e 67 20 25 70 2f 25 6c 75 22 2c 20 urning %p/%lu", 14430 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 pValue, (unsigne 14440 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c d long) ulValueL 14450 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b en);......break; 14460 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 43 45 52 ....case CKA_CER 14470 54 49 46 49 43 41 54 45 5f 54 59 50 45 3a 0a 09 TIFICATE_TYPE:.. 14480 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 14490 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 PRINTF("Requesti 144a0 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 ng attribute CKA 144b0 5f 43 45 52 54 49 46 49 43 41 54 45 5f 54 59 50 _CERTIFICATE_TYP 144c0 45 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 E (0x%08lx) ..." 144d0 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 144e0 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 ) curr_attr_type 144f0 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 );......if (obje 14500 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43 ctclass != CKO_C 14510 45 52 54 49 46 49 43 41 54 45 29 20 7b 0a 09 09 ERTIFICATE) {... 14520 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 14530 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 PRINTF(" ... but 14540 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 not getting it 14550 62 65 63 61 75 73 65 20 77 65 20 61 72 65 20 6e because we are n 14560 6f 74 20 61 20 63 65 72 74 69 66 69 63 61 74 65 ot a certificate 14570 2e 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b .");.......break 14580 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 2f 2a 20 ;.....}....../* 14590 57 65 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 We only support 145a0 6f 6e 65 20 63 65 72 74 69 66 69 63 61 74 65 20 one certificate 145b0 74 79 70 65 20 2a 2f 0a 09 09 09 09 63 6b 5f 63 type */.....ck_c 145c0 65 72 74 69 66 69 63 61 74 65 5f 74 79 70 65 20 ertificate_type 145d0 3d 20 43 4b 43 5f 58 5f 35 30 39 3b 0a 0a 09 09 = CKC_X_509;.... 145e0 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 63 ..pValue = &ck_c 145f0 65 72 74 69 66 69 63 61 74 65 5f 74 79 70 65 3b ertificate_type; 14600 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 .....ulValueLen 14610 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 63 65 72 74 = sizeof(ck_cert 14620 69 66 69 63 61 74 65 5f 74 79 70 65 29 3b 0a 0a ificate_type);.. 14630 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 14640 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 _PRINTF(" ... re 14650 74 75 72 6e 69 6e 67 20 43 4b 43 5f 58 5f 35 30 turning CKC_X_50 14660 39 20 28 25 6c 75 29 20 28 25 70 2f 25 6c 75 29 9 (%lu) (%p/%lu) 14670 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 14680 67 29 20 2a 28 28 43 4b 5f 43 45 52 54 49 46 49 g) *((CK_CERTIFI 14690 43 41 54 45 5f 54 59 50 45 20 2a 29 20 70 56 61 CATE_TYPE *) pVa 146a0 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 lue), pValue, (u 146b0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c nsigned long) ul 146c0 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 ValueLen);...... 146d0 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 break;....case C 146e0 4b 41 5f 4b 45 59 5f 54 59 50 45 3a 0a 09 09 09 KA_KEY_TYPE:.... 146f0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 14700 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 INTF("Requesting 14710 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 4b attribute CKA_K 14720 45 59 5f 54 59 50 45 20 28 30 78 25 30 38 6c 78 EY_TYPE (0x%08lx 14730 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 ) ...", (unsigne 14740 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 d long) curr_att 14750 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 r_type);......if 14760 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d (objectclass != 14770 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 CKO_PRIVATE_KEY 14780 20 26 26 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 && objectclass 14790 21 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b 45 != CKO_PUBLIC_KE 147a0 59 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 Y) {......CACKEY 147b0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 147c0 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 ... but not gett 147d0 69 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 ing it because w 147e0 65 20 61 72 65 20 6e 6f 74 20 61 20 6b 65 79 2e e are not a key. 147f0 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b ");.......break; 14800 0a 09 09 09 09 7d 0a 0a 09 09 09 09 2f 2a 20 57 .....}....../* W 14810 65 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f e only support o 14820 6e 65 20 6b 65 79 20 74 79 70 65 20 2a 2f 0a 09 ne key type */.. 14830 09 09 09 63 6b 5f 6b 65 79 5f 74 79 70 65 20 3d ...ck_key_type = 14840 20 43 4b 4b 5f 52 53 41 3b 0a 0a 09 09 09 09 70 CKK_RSA;......p 14850 56 61 6c 75 65 20 3d 20 26 63 6b 5f 6b 65 79 5f Value = &ck_key_ 14860 74 79 70 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 type;.....ulValu 14870 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b eLen = sizeof(ck 14880 5f 6b 65 79 5f 74 79 70 65 29 3b 0a 0a 09 09 09 _key_type);..... 14890 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 148a0 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 INTF(" ... retur 148b0 6e 69 6e 67 20 43 4b 4b 5f 52 53 41 20 28 25 6c ning CKK_RSA (%l 148c0 75 29 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 u) (%p/%lu)", (u 148d0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 nsigned long) *( 148e0 28 43 4b 5f 43 45 52 54 49 46 49 43 41 54 45 5f (CK_CERTIFICATE_ 148f0 54 59 50 45 20 2a 29 20 70 56 61 6c 75 65 29 2c TYPE *) pValue), 14900 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e pValue, (unsign 14910 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 ed long) ulValue 14920 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b Len);......break 14930 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 53 49 ;....case CKA_SI 14940 47 4e 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 GN:.....CACKEY_D 14950 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 EBUG_PRINTF("Req 14960 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 uesting attribut 14970 65 20 43 4b 41 5f 53 49 47 4e 20 28 30 78 25 30 e CKA_SIGN (0x%0 14980 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 8lx) ...", (unsi 14990 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f gned long) curr_ 149a0 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 attr_type);..... 149b0 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 .if (objectclass 149c0 20 3d 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 == CKO_NETSCAPE 149d0 5f 54 52 55 53 54 29 20 7b 0a 09 09 09 09 09 43 _TRUST) {......C 149e0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 149f0 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 TF(" ... but not 14a00 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 getting it beca 14a10 75 73 65 20 77 65 20 61 72 65 20 61 20 4e 65 74 use we are a Net 14a20 73 63 61 70 65 20 74 72 75 73 74 20 6f 62 6a 65 scape trust obje 14a30 63 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 ct");.......brea 14a40 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 k;.....}......if 14a50 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d (objectclass == 14a60 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 CKO_PRIVATE_KEY 14a70 29 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 65 20 ) {......pValue 14a80 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 = &ck_true;..... 14a90 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 .ulValueLen = si 14aa0 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a 09 zeof(ck_true);.. 14ab0 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 ...} else {..... 14ac0 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 66 61 .pValue = &ck_fa 14ad0 6c 73 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75 lse;......ulValu 14ae0 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b eLen = sizeof(ck 14af0 5f 66 61 6c 73 65 29 3b 0a 09 09 09 09 7d 0a 0a _false);.....}.. 14b00 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 14b10 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 _PRINTF(" ... re 14b20 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f turning %lu (%p/ 14b30 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 %lu)", (unsigned 14b40 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f long) *((CK_BBO 14b50 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 OL *) pValue), p 14b60 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 Value, (unsigned 14b70 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 long) ulValueLe 14b80 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a n);......break;. 14b90 09 09 09 63 61 73 65 20 43 4b 41 5f 53 49 47 4e ...case CKA_SIGN 14ba0 5f 52 45 43 4f 56 45 52 3a 0a 09 09 09 09 43 41 _RECOVER:.....CA 14bb0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 14bc0 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 F("Requesting at 14bd0 74 72 69 62 75 74 65 20 43 4b 41 5f 53 49 47 4e tribute CKA_SIGN 14be0 5f 52 45 43 4f 56 45 52 20 28 30 78 25 30 38 6c _RECOVER (0x%08l 14bf0 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e x) ...", (unsign 14c00 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 ed long) curr_at 14c10 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 tr_type);......i 14c20 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d f (objectclass = 14c30 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f 54 = CKO_NETSCAPE_T 14c40 52 55 53 54 29 20 7b 0a 09 09 09 09 09 43 41 43 RUST) {......CAC 14c50 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 14c60 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 (" ... but not g 14c70 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 etting it becaus 14c80 65 20 77 65 20 61 72 65 20 61 20 4e 65 74 73 63 e we are a Netsc 14c90 61 70 65 20 74 72 75 73 74 20 6f 62 6a 65 63 74 ape trust object 14ca0 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b ");.......break; 14cb0 0a 09 09 09 09 7d 0a 0a 09 09 09 09 2f 2a 20 57 .....}....../* W 14cc0 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 e currently only 14cd0 20 73 75 70 70 6f 72 74 20 22 53 69 67 6e 20 77 support "Sign w 14ce0 69 74 68 20 41 70 70 65 6e 64 69 78 22 20 2a 2f ith Appendix" */ 14cf0 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 .....pValue = &c 14d00 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 09 75 6c 56 k_false;.....ulV 14d10 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 alueLen = sizeof 14d20 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 0a 09 09 09 (ck_false);..... 14d30 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 14d40 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 INTF(" ... retur 14d50 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 ning %lu (%p/%lu 14d60 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f )", (unsigned lo 14d70 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 ng) *((CK_BBOOL 14d80 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c *) pValue), pVal 14d90 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f ue, (unsigned lo 14da0 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b ng) ulValueLen); 14db0 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 14dc0 63 61 73 65 20 43 4b 41 5f 44 45 43 52 59 50 54 case CKA_DECRYPT 14dd0 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB 14de0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque 14df0 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute 14e00 43 4b 41 5f 44 45 43 52 59 50 54 20 28 30 78 25 CKA_DECRYPT (0x% 14e10 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 08lx) ...", (uns 14e20 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 igned long) curr 14e30 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 _attr_type);.... 14e40 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 ..if (objectclas 14e50 73 20 3d 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 s == CKO_NETSCAP 14e60 45 5f 54 52 55 53 54 29 20 7b 0a 09 09 09 09 09 E_TRUST) {...... 14e70 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 14e80 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f NTF(" ... but no 14e90 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 t getting it bec 14ea0 61 75 73 65 20 77 65 20 61 72 65 20 61 20 4e 65 ause we are a Ne 14eb0 74 73 63 61 70 65 20 74 72 75 73 74 20 6f 62 6a tscape trust obj 14ec0 65 63 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 65 ect");.......bre 14ed0 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 ak;.....}......i 14ee0 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d f (objectclass = 14ef0 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 = CKO_PRIVATE_KE 14f00 59 20 7c 7c 20 6f 62 6a 65 63 74 63 6c 61 73 73 Y || objectclass 14f10 20 3d 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b == CKO_PUBLIC_K 14f20 45 59 29 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 EY) {......pValu 14f30 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 e = &ck_true;... 14f40 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 ...ulValueLen = 14f50 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b sizeof(ck_true); 14f60 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 .....} else {... 14f70 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f ...pValue = &ck_ 14f80 66 61 6c 73 65 3b 0a 09 09 09 09 09 75 6c 56 61 false;......ulVa 14f90 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 lueLen = sizeof( 14fa0 63 6b 5f 66 61 6c 73 65 29 3b 0a 09 09 09 09 7d ck_false);.....} 14fb0 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 14fc0 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... 14fd0 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 returning %lu (% 14fe0 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e p/%lu)", (unsign 14ff0 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 ed long) *((CK_B 15000 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c BOOL *) pValue), 15010 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e pValue, (unsign 15020 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 ed long) ulValue 15030 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b Len);......break 15040 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 53 45 ;....case CKA_SE 15050 4e 53 49 54 49 56 45 3a 0a 09 09 09 09 43 41 43 NSITIVE:.....CAC 15060 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 15070 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 ("Requesting att 15080 72 69 62 75 74 65 20 43 4b 41 5f 53 45 4e 53 49 ribute CKA_SENSI 15090 54 49 56 45 20 28 30 78 25 30 38 6c 78 29 20 2e TIVE (0x%08lx) . 150a0 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 150b0 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 150c0 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f ype);......if (o 150d0 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b bjectclass == CK 150e0 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 53 54 O_NETSCAPE_TRUST 150f0 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f ) {......CACKEY_ 15100 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 15110 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 .. but not getti 15120 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 ng it because we 15130 20 61 72 65 20 61 20 4e 65 74 73 63 61 70 65 20 are a Netscape 15140 74 72 75 73 74 20 6f 62 6a 65 63 74 22 29 3b 0a trust object");. 15150 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 15160 09 7d 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 .}......if (obje 15170 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 50 ctclass == CKO_P 15180 52 49 56 41 54 45 5f 4b 45 59 29 20 7b 0a 09 09 RIVATE_KEY) {... 15190 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f ...pValue = &ck_ 151a0 74 72 75 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c true;......ulVal 151b0 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 ueLen = sizeof(c 151c0 6b 5f 74 72 75 65 29 3b 0a 09 09 09 09 7d 20 65 k_true);.....} e 151d0 6c 73 65 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 lse {......pValu 151e0 65 20 3d 20 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 e = &ck_false;.. 151f0 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = 15200 20 73 69 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 65 sizeof(ck_false 15210 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 );.....}......CA 15220 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 15230 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e F(" ... returnin 15240 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c g %lu (%p/%lu)", 15250 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 15260 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 *((CK_BBOOL *) 15270 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c pValue), pValue, 15280 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 15290 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... 152a0 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 ...break;....cas 152b0 65 20 43 4b 41 5f 45 58 54 52 41 43 54 41 42 4c e CKA_EXTRACTABL 152c0 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 E:.....CACKEY_DE 152d0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 BUG_PRINTF("Requ 152e0 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 esting attribute 152f0 20 43 4b 41 5f 45 58 54 52 41 43 54 41 42 4c 45 CKA_EXTRACTABLE 15300 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c (0x%08lx) ...", 15310 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 15320 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 curr_attr_type) 15330 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 ;......if (objec 15340 74 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 4e 45 tclass == CKO_NE 15350 54 53 43 41 50 45 5f 54 52 55 53 54 29 20 7b 0a TSCAPE_TRUST) {. 15360 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 15370 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 62 G_PRINTF(" ... b 15380 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20 69 ut not getting i 15390 74 20 62 65 63 61 75 73 65 20 77 65 20 61 72 65 t because we are 153a0 20 61 20 4e 65 74 73 63 61 70 65 20 74 72 75 73 a Netscape trus 153b0 74 20 6f 62 6a 65 63 74 22 29 3b 0a 0a 09 09 09 t object");..... 153c0 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a ..break;.....}.. 153d0 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c ....if (objectcl 153e0 61 73 73 20 3d 3d 20 43 4b 4f 5f 50 52 49 56 41 ass == CKO_PRIVA 153f0 54 45 5f 4b 45 59 29 20 7b 0a 09 09 09 09 09 70 TE_KEY) {......p 15400 56 61 6c 75 65 20 3d 20 26 63 6b 5f 66 61 6c 73 Value = &ck_fals 15410 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75 65 4c e;......ulValueL 15420 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 74 en = sizeof(ck_t 15430 72 75 65 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 rue);.....} else 15440 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 65 20 3d {......pValue = 15450 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 09 &ck_true;...... 15460 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a ulValueLen = siz 15470 65 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 09 eof(ck_false);.. 15480 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 ...}......CACKEY 15490 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 154a0 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c ... returning %l 154b0 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e u (%p/%lu)", (un 154c0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 signed long) *(( 154d0 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c CK_BBOOL *) pVal 154e0 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e ue), pValue, (un 154f0 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV 15500 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b 15510 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK 15520 41 5f 4d 4f 44 55 4c 55 53 3a 0a 09 09 09 09 43 A_MODULUS:.....C 15530 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 15540 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 TF("Requesting a 15550 74 74 72 69 62 75 74 65 20 43 4b 41 5f 4d 4f 44 ttribute CKA_MOD 15560 55 4c 55 53 20 28 30 78 25 30 38 6c 78 29 20 2e ULUS (0x%08lx) . 15570 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 15580 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 15590 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f ype);......if (o 155a0 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b bjectclass == CK 155b0 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 53 54 O_NETSCAPE_TRUST 155c0 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f ) {......CACKEY_ 155d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 155e0 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 .. but not getti 155f0 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 ng it because we 15600 20 61 72 65 20 61 20 4e 65 74 73 63 61 70 65 20 are a Netscape 15610 74 72 75 73 74 20 6f 62 6a 65 63 74 22 29 3b 0a trust object");. 15620 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 15630 09 7d 0a 0a 09 09 09 09 69 66 20 28 63 65 72 74 .}......if (cert 15640 69 66 69 63 61 74 65 5f 6c 65 6e 20 3e 3d 20 30 ificate_len >= 0 15650 29 20 7b 0a 09 09 09 09 09 78 35 30 39 5f 72 65 ) {......x509_re 15660 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f 74 6f ad_ret = x509_to 15670 5f 6d 6f 64 75 6c 75 73 28 63 65 72 74 69 66 69 _modulus(certifi 15680 63 61 74 65 2c 20 63 65 72 74 69 66 69 63 61 74 cate, certificat 15690 65 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 65 29 3b e_len, &pValue); 156a0 0a 09 09 09 09 09 69 66 20 28 78 35 30 39 5f 72 ......if (x509_r 156b0 65 61 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 ead_ret < 0) {.. 156c0 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 4e 55 .....pValue = NU 156d0 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 LL;......} else 156e0 7b 0a 09 09 09 09 09 09 75 6c 56 61 6c 75 65 4c {.......ulValueL 156f0 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 64 5f 72 en = x509_read_r 15700 65 74 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d et;......}.....} 15710 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 15720 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 UG_PRINTF(" ... 15730 72 65 74 75 72 6e 69 6e 67 20 28 25 70 2f 25 6c returning (%p/%l 15740 75 29 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e u)", pValue, (un 15750 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV 15760 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b 15770 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK 15780 41 5f 50 55 42 4c 49 43 5f 45 58 50 4f 4e 45 4e A_PUBLIC_EXPONEN 15790 54 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 T:.....CACKEY_DE 157a0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 BUG_PRINTF("Requ 157b0 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 esting attribute 157c0 20 43 4b 41 5f 50 55 42 4c 49 43 5f 45 58 50 4f CKA_PUBLIC_EXPO 157d0 4e 45 4e 54 20 28 30 78 25 30 38 6c 78 29 20 2e NENT (0x%08lx) . 157e0 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ..", (unsigned l 157f0 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 ong) curr_attr_t 15800 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f ype);......if (o 15810 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b bjectclass == CK 15820 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 53 54 O_NETSCAPE_TRUST 15830 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f ) {......CACKEY_ 15840 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e DEBUG_PRINTF(" . 15850 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 .. but not getti 15860 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 ng it because we 15870 20 61 72 65 20 61 20 4e 65 74 73 63 61 70 65 20 are a Netscape 15880 74 72 75 73 74 20 6f 62 6a 65 63 74 22 29 3b 0a trust object");. 15890 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;.... 158a0 09 7d 0a 0a 09 09 09 09 69 66 20 28 63 65 72 74 .}......if (cert 158b0 69 66 69 63 61 74 65 5f 6c 65 6e 20 3e 3d 20 30 ificate_len >= 0 158c0 29 20 7b 0a 09 09 09 09 09 78 35 30 39 5f 72 65 ) {......x509_re 158d0 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f 74 6f ad_ret = x509_to 158e0 5f 65 78 70 6f 6e 65 6e 74 28 63 65 72 74 69 66 _exponent(certif 158f0 69 63 61 74 65 2c 20 63 65 72 74 69 66 69 63 61 icate, certifica 15900 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 65 29 te_len, &pValue) 15910 3b 0a 09 09 09 09 09 69 66 20 28 78 35 30 39 5f ;......if (x509_ 15920 72 65 61 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a read_ret < 0) {. 15930 09 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 4e ......pValue = N 15940 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 6c 73 65 ULL;......} else 15950 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 6c 75 65 {.......ulValue 15960 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 64 5f Len = x509_read_ 15970 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 ret;......}..... 15980 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 }......CACKEY_DE 15990 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... 159a0 20 72 65 74 75 72 6e 69 6e 67 20 28 25 70 2f 25 returning (%p/% 159b0 6c 75 29 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 lu)", pValue, (u 159c0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c nsigned long) ul 159d0 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 ValueLen);...... 159e0 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 break;....case C 159f0 4b 41 5f 54 52 55 53 54 5f 44 49 47 49 54 41 4c KA_TRUST_DIGITAL 15a00 5f 53 49 47 4e 41 54 55 52 45 3a 0a 09 09 09 63 _SIGNATURE:....c 15a10 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 4e 4f ase CKA_TRUST_NO 15a20 4e 5f 52 45 50 55 44 49 41 54 49 4f 4e 3a 0a 09 N_REPUDIATION:.. 15a30 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 ..case CKA_TRUST 15a40 5f 4b 45 59 5f 45 4e 43 49 50 48 45 52 4d 45 4e _KEY_ENCIPHERMEN 15a50 54 3a 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 T:....case CKA_T 15a60 52 55 53 54 5f 44 41 54 41 5f 45 4e 43 49 50 48 RUST_DATA_ENCIPH 15a70 45 52 4d 45 4e 54 3a 0a 09 09 09 63 61 73 65 20 ERMENT:....case 15a80 43 4b 41 5f 54 52 55 53 54 5f 4b 45 59 5f 41 47 CKA_TRUST_KEY_AG 15a90 52 45 45 4d 45 4e 54 3a 0a 09 09 09 63 61 73 65 REEMENT:....case 15aa0 20 43 4b 41 5f 54 52 55 53 54 5f 4b 45 59 5f 43 CKA_TRUST_KEY_C 15ab0 45 52 54 5f 53 49 47 4e 3a 0a 09 09 09 63 61 73 ERT_SIGN:....cas 15ac0 65 20 43 4b 41 5f 54 52 55 53 54 5f 43 52 4c 5f e CKA_TRUST_CRL_ 15ad0 53 49 47 4e 3a 0a 09 09 09 63 61 73 65 20 43 4b SIGN:....case CK 15ae0 41 5f 54 52 55 53 54 5f 53 45 52 56 45 52 5f 41 A_TRUST_SERVER_A 15af0 55 54 48 3a 0a 09 09 09 63 61 73 65 20 43 4b 41 UTH:....case CKA 15b00 5f 54 52 55 53 54 5f 43 4c 49 45 4e 54 5f 41 55 _TRUST_CLIENT_AU 15b10 54 48 3a 0a 09 09 09 63 61 73 65 20 43 4b 41 5f TH:....case CKA_ 15b20 54 52 55 53 54 5f 43 4f 44 45 5f 53 49 47 4e 49 TRUST_CODE_SIGNI 15b30 4e 47 3a 0a 09 09 09 63 61 73 65 20 43 4b 41 5f NG:....case CKA_ 15b40 54 52 55 53 54 5f 45 4d 41 49 4c 5f 50 52 4f 54 TRUST_EMAIL_PROT 15b50 45 43 54 49 4f 4e 3a 0a 09 09 09 09 43 41 43 4b ECTION:.....CACK 15b60 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 15b70 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 "Requesting attr 15b80 69 62 75 74 65 20 43 4b 41 5f 54 52 55 53 54 5f ibute CKA_TRUST_ 15b90 2e 2e 2e 20 28 30 78 25 30 38 6c 78 29 20 2e 2e ... (0x%08lx) .. 15ba0 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f .", (unsigned lo 15bb0 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 ng) curr_attr_ty 15bc0 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 pe);......pValue 15bd0 20 3d 20 26 63 6b 5f 74 72 75 73 74 65 64 3b 0a = &ck_trusted;. 15be0 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d ....ulValueLen = 15bf0 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 73 74 sizeof(ck_trust 15c00 65 64 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 ed);......CACKEY 15c10 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 _DEBUG_PRINTF(" 15c20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c ... returning %l 15c30 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e u (%p/%lu)", (un 15c40 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 signed long) *(( 15c50 43 4b 5f 54 52 55 53 54 20 2a 29 20 70 56 61 6c CK_TRUST *) pVal 15c60 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e ue), pValue, (un 15c70 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 signed long) ulV 15c80 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 alueLen);......b 15c90 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b reak;....case CK 15ca0 41 5f 43 45 52 54 5f 53 48 41 31 5f 48 41 53 48 A_CERT_SHA1_HASH 15cb0 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 :.....CACKEY_DEB 15cc0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 UG_PRINTF("Reque 15cd0 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 sting attribute 15ce0 43 4b 41 5f 43 45 52 54 5f 53 48 41 31 5f 48 41 CKA_CERT_SHA1_HA 15cf0 53 48 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e SH (0x%08lx) ... 15d00 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon 15d10 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 g) curr_attr_typ 15d20 65 29 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a e);......if (obj 15d30 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f ectclass != CKO_ 15d40 4e 45 54 53 43 41 50 45 5f 54 52 55 53 54 29 20 NETSCAPE_TRUST) 15d50 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 {......CACKEY_DE 15d60 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e BUG_PRINTF(" ... 15d70 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 but not getting 15d80 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20 61 it because we a 15d90 72 65 20 6e 6f 74 20 61 20 4e 65 74 73 63 61 70 re not a Netscap 15da0 65 20 74 72 75 73 74 20 6f 62 6a 65 63 74 22 29 e trust object") 15db0 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 ;.......break;.. 15dc0 09 09 09 7d 0a 0a 09 09 09 09 53 48 41 31 52 65 ...}......SHA1Re 15dd0 73 65 74 28 26 73 68 61 31 5f 63 74 78 29 3b 0a set(&sha1_ctx);. 15de0 09 09 09 09 53 48 41 31 49 6e 70 75 74 28 26 73 ....SHA1Input(&s 15df0 68 61 31 5f 63 74 78 2c 20 63 65 72 74 69 66 69 ha1_ctx, certifi 15e00 63 61 74 65 2c 20 63 65 72 74 69 66 69 63 61 74 cate, certificat 15e10 65 5f 6c 65 6e 29 3b 0a 09 09 09 09 53 48 41 31 e_len);.....SHA1 15e20 52 65 73 75 6c 74 28 26 73 68 61 31 5f 63 74 78 Result(&sha1_ctx 15e30 2c 20 73 68 61 31 5f 68 61 73 68 29 3b 0a 0a 09 , sha1_hash);... 15e40 09 09 09 70 56 61 6c 75 65 20 3d 20 73 68 61 31 ...pValue = sha1 15e50 5f 68 61 73 68 3b 0a 09 09 09 09 75 6c 56 61 6c _hash;.....ulVal 15e60 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 73 ueLen = sizeof(s 15e70 68 61 31 5f 68 61 73 68 29 3b 0a 0a 09 09 09 09 ha1_hash);...... 15e80 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 15e90 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e NTF(" ... return 15ea0 69 6e 67 20 25 70 2f 25 6c 75 22 2c 20 70 56 61 ing %p/%lu", pVa 15eb0 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c lue, (unsigned l 15ec0 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 ong) ulValueLen) 15ed0 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 ;......break;... 15ee0 09 63 61 73 65 20 43 4b 41 5f 43 45 52 54 5f 4d .case CKA_CERT_M 15ef0 44 35 5f 48 41 53 48 3a 0a 09 09 09 09 43 41 43 D5_HASH:.....CAC 15f00 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 15f10 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 ("Requesting att 15f20 72 69 62 75 74 65 20 43 4b 41 5f 43 45 52 54 5f ribute CKA_CERT_ 15f30 4d 44 35 5f 48 41 53 48 20 28 30 78 25 30 38 6c MD5_HASH (0x%08l 15f40 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e x) ...", (unsign 15f50 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 ed long) curr_at 15f60 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 tr_type);......i 15f70 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 f (objectclass ! 15f80 3d 20 43 4b 4f 5f 4e 45 54 53 43 41 50 45 5f 54 = CKO_NETSCAPE_T 15f90 52 55 53 54 29 20 7b 0a 09 09 09 09 09 43 41 43 RUST) {......CAC 15fa0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 15fb0 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20 67 (" ... but not g 15fc0 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75 73 etting it becaus 15fd0 65 20 77 65 20 61 72 65 20 6e 6f 74 20 61 20 4e e we are not a N 15fe0 65 74 73 63 61 70 65 20 74 72 75 73 74 20 6f 62 etscape trust ob 15ff0 6a 65 63 74 22 29 3b 0a 0a 09 09 09 09 09 62 72 ject");.......br 16000 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 eak;.....}...... 16010 4d 44 35 49 6e 69 74 28 26 6d 64 35 5f 63 74 78 MD5Init(&md5_ctx 16020 29 3b 0a 09 09 09 09 4d 44 35 55 70 64 61 74 65 );.....MD5Update 16030 28 26 6d 64 35 5f 63 74 78 2c 20 63 65 72 74 69 (&md5_ctx, certi 16040 66 69 63 61 74 65 2c 20 63 65 72 74 69 66 69 63 ficate, certific 16050 61 74 65 5f 6c 65 6e 29 3b 0a 09 09 09 09 4d 44 ate_len);.....MD 16060 35 46 69 6e 61 6c 28 6d 64 35 5f 68 61 73 68 2c 5Final(md5_hash, 16070 20 26 6d 64 35 5f 63 74 78 29 3b 0a 0a 09 09 09 &md5_ctx);..... 16080 09 70 56 61 6c 75 65 20 3d 20 6d 64 35 5f 68 61 .pValue = md5_ha 16090 73 68 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c sh;.....ulValueL 160a0 65 6e 20 3d 20 73 69 7a 65 6f 66 28 6d 64 35 5f en = sizeof(md5_ 160b0 68 61 73 68 29 3b 0a 0a 09 09 09 09 43 41 43 4b hash);......CACK 160c0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 160d0 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 " ... returning 160e0 25 70 2f 25 6c 75 22 2c 20 70 56 61 6c 75 65 2c %p/%lu", pValue, 160f0 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long) 16100 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 ulValueLen);... 16110 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 64 65 66 ...break;....def 16120 61 75 6c 74 3a 0a 09 09 09 09 70 56 61 6c 75 65 ault:.....pValue 16130 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 75 6c 56 = NULL;.....ulV 16140 61 6c 75 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f alueLen = (CK_LO 16150 4e 47 29 20 2d 31 3b 0a 09 09 09 09 62 72 65 61 NG) -1;.....brea 16160 6b 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 28 28 k;...}....if ((( 16170 43 4b 5f 4c 4f 4e 47 29 20 75 6c 56 61 6c 75 65 CK_LONG) ulValue 16180 4c 65 6e 29 20 21 3d 20 28 28 43 4b 5f 4c 4f 4e Len) != ((CK_LON 16190 47 29 20 2d 31 29 29 20 7b 0a 09 09 09 2f 2a 20 G) -1)) {..../* 161a0 50 75 73 68 20 63 75 72 72 5f 61 74 74 72 20 6f Push curr_attr o 161b0 6e 74 6f 20 74 68 65 20 73 74 61 63 6b 20 2a 2f nto the stack */ 161c0 0a 09 09 09 63 75 72 72 5f 61 74 74 72 2e 74 79 ....curr_attr.ty 161d0 70 65 20 3d 20 63 75 72 72 5f 61 74 74 72 5f 74 pe = curr_attr_t 161e0 79 70 65 3b 0a 09 09 09 63 75 72 72 5f 61 74 74 ype;....curr_att 161f0 72 2e 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 75 r.ulValueLen = u 16200 6c 56 61 6c 75 65 4c 65 6e 3b 0a 0a 09 09 09 63 lValueLen;.....c 16210 75 72 72 5f 61 74 74 72 2e 70 56 61 6c 75 65 20 urr_attr.pValue 16220 3d 20 6d 61 6c 6c 6f 63 28 63 75 72 72 5f 61 74 = malloc(curr_at 16230 74 72 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a tr.ulValueLen);. 16240 09 09 09 6d 65 6d 63 70 79 28 63 75 72 72 5f 61 ...memcpy(curr_a 16250 74 74 72 2e 70 56 61 6c 75 65 2c 20 70 56 61 6c ttr.pValue, pVal 16260 75 65 2c 20 63 75 72 72 5f 61 74 74 72 2e 75 6c ue, curr_attr.ul 16270 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 69 ValueLen);.....i 16280 66 20 28 70 56 61 6c 75 65 5f 66 72 65 65 20 26 f (pValue_free & 16290 26 20 70 56 61 6c 75 65 29 20 7b 0a 09 09 09 09 & pValue) {..... 162a0 66 72 65 65 28 70 56 61 6c 75 65 29 3b 0a 09 09 free(pValue);... 162b0 09 7d 0a 0a 09 09 09 69 66 20 28 6e 75 6d 61 74 .}.....if (numat 162c0 74 72 73 20 3e 3d 20 72 65 74 76 61 6c 5f 63 6f trs >= retval_co 162d0 75 6e 74 29 20 7b 0a 09 09 09 09 72 65 74 76 61 unt) {.....retva 162e0 6c 20 3d 20 72 65 61 6c 6c 6f 63 28 72 65 74 76 l = realloc(retv 162f0 61 6c 2c 20 72 65 74 76 61 6c 5f 63 6f 75 6e 74 al, retval_count 16300 20 2a 20 73 69 7a 65 6f 66 28 2a 72 65 74 76 61 * sizeof(*retva 16310 6c 29 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 6d 65 l));....}.....me 16320 6d 63 70 79 28 26 72 65 74 76 61 6c 5b 6e 75 6d mcpy(&retval[num 16330 61 74 74 72 73 5d 2c 20 26 63 75 72 72 5f 61 74 attrs], &curr_at 16340 74 72 2c 20 73 69 7a 65 6f 66 28 63 75 72 72 5f tr, sizeof(curr_ 16350 61 74 74 72 29 29 3b 0a 09 09 09 6e 75 6d 61 74 attr));....numat 16360 74 72 73 2b 2b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 trs++;...}..}... 16370 69 66 20 28 6e 75 6d 61 74 74 72 73 20 21 3d 20 if (numattrs != 16380 30 29 20 7b 0a 09 09 72 65 74 76 61 6c 5f 63 6f 0) {...retval_co 16390 75 6e 74 20 3d 20 6e 75 6d 61 74 74 72 73 3b 0a unt = numattrs;. 163a0 09 09 72 65 74 76 61 6c 20 3d 20 72 65 61 6c 6c ..retval = reall 163b0 6f 63 28 72 65 74 76 61 6c 2c 20 72 65 74 76 61 oc(retval, retva 163c0 6c 5f 63 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 l_count * sizeof 163d0 28 2a 72 65 74 76 61 6c 29 29 3b 0a 09 7d 20 65 (*retval));..} e 163e0 6c 73 65 20 7b 0a 09 09 66 72 65 65 28 72 65 74 lse {...free(ret 163f0 76 61 6c 29 3b 0a 0a 09 09 72 65 74 76 61 6c 20 val);....retval 16400 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a 09 2a 70 75 = NULL;..}...*pu 16410 6c 43 6f 75 6e 74 20 3d 20 6e 75 6d 61 74 74 72 lCount = numattr 16420 73 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 s;...CACKEY_DEBU 16430 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 16440 69 6e 67 20 25 6c 75 20 6f 62 6a 65 63 74 73 20 ing %lu objects 16450 28 25 70 29 2e 22 2c 20 6e 75 6d 61 74 74 72 73 (%p).", numattrs 16460 2c 20 72 65 74 76 61 6c 29 3b 0a 0a 09 72 65 74 , retval);...ret 16470 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a urn(retval);.}.. 16480 73 74 61 74 69 63 20 76 6f 69 64 20 63 61 63 6b static void cack 16490 65 79 5f 66 72 65 65 5f 69 64 65 6e 74 69 74 69 ey_free_identiti 164a0 65 73 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 es(struct cackey 164b0 5f 69 64 65 6e 74 69 74 79 20 2a 69 64 65 6e 74 _identity *ident 164c0 69 74 69 65 73 2c 20 75 6e 73 69 67 6e 65 64 20 ities, unsigned 164d0 6c 6f 6e 67 20 69 64 65 6e 74 69 74 69 65 73 5f long identities_ 164e0 63 6f 75 6e 74 29 20 7b 0a 09 43 4b 5f 41 54 54 count) {..CK_ATT 164f0 52 49 42 55 54 45 20 2a 63 75 72 72 5f 61 74 74 RIBUTE *curr_att 16500 72 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e r;..unsigned lon 16510 67 20 69 64 5f 69 64 78 2c 20 61 74 74 72 5f 69 g id_idx, attr_i 16520 64 78 3b 0a 0a 09 69 66 20 28 69 64 65 6e 74 69 dx;...if (identi 16530 74 69 65 73 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 ties == NULL || 16540 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 identities_count 16550 20 3d 3d 20 30 29 20 7b 0a 09 09 72 65 74 75 72 == 0) {...retur 16560 6e 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 5f n;..}...for (id_ 16570 69 64 78 20 3d 20 30 3b 20 69 64 5f 69 64 78 20 idx = 0; id_idx 16580 3c 20 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 < identities_cou 16590 6e 74 3b 20 69 64 5f 69 64 78 2b 2b 29 20 7b 0a nt; id_idx++) {. 165a0 09 09 69 66 20 28 69 64 65 6e 74 69 74 69 65 73 ..if (identities 165b0 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 [id_idx].attribu 165c0 74 65 73 29 20 7b 0a 09 09 09 66 6f 72 20 28 61 tes) {....for (a 165d0 74 74 72 5f 69 64 78 20 3d 20 30 3b 20 61 74 74 ttr_idx = 0; att 165e0 72 5f 69 64 78 20 3c 20 69 64 65 6e 74 69 74 69 r_idx < identiti 165f0 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 es[id_idx].attri 16600 62 75 74 65 73 5f 63 6f 75 6e 74 3b 20 61 74 74 butes_count; att 16610 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 63 r_idx++) {.....c 16620 75 72 72 5f 61 74 74 72 20 3d 20 26 69 64 65 6e urr_attr = &iden 16630 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 tities[id_idx].a 16640 74 74 72 69 62 75 74 65 73 5b 61 74 74 72 5f 69 ttributes[attr_i 16650 64 78 5d 3b 0a 0a 09 09 09 09 69 66 20 28 63 75 dx];......if (cu 16660 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 29 rr_attr->pValue) 16670 20 7b 0a 09 09 09 09 09 66 72 65 65 28 63 75 72 {......free(cur 16680 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 29 3b r_attr->pValue); 16690 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 .....}....}..... 166a0 69 66 20 28 69 64 65 6e 74 69 74 69 65 73 5b 69 if (identities[i 166b0 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 d_idx].attribute 166c0 73 29 20 7b 0a 09 09 09 09 66 72 65 65 28 69 64 s) {.....free(id 166d0 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d entities[id_idx] 166e0 2e 61 74 74 72 69 62 75 74 65 73 29 3b 0a 09 09 .attributes);... 166f0 09 7d 0a 0a 09 09 09 63 61 63 6b 65 79 5f 66 72 .}.....cackey_fr 16700 65 65 5f 63 65 72 74 73 28 69 64 65 6e 74 69 74 ee_certs(identit 16710 69 65 73 5b 69 64 5f 69 64 78 5d 2e 70 63 73 63 ies[id_idx].pcsc 16720 5f 69 64 65 6e 74 69 74 79 2c 20 31 2c 20 31 29 _identity, 1, 1) 16730 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 66 72 65 65 28 ;...}..}...free( 16740 69 64 65 6e 74 69 74 69 65 73 29 3b 0a 7d 0a 0a identities);.}.. 16750 73 74 61 74 69 63 20 73 74 72 75 63 74 20 63 61 static struct ca 16760 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 63 ckey_identity *c 16770 61 63 6b 65 79 5f 72 65 61 64 5f 69 64 65 6e 74 ackey_read_ident 16780 69 74 69 65 73 28 73 74 72 75 63 74 20 63 61 63 ities(struct cac 16790 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74 2c 20 key_slot *slot, 167a0 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 69 unsigned long *i 167b0 64 73 5f 66 6f 75 6e 64 29 20 7b 0a 09 73 74 72 ds_found) {..str 167c0 75 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f uct cackey_pcsc_ 167d0 69 64 65 6e 74 69 74 79 20 2a 70 63 73 63 5f 69 identity *pcsc_i 167e0 64 65 6e 74 69 74 69 65 73 3b 0a 09 73 74 72 75 dentities;..stru 167f0 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 ct cackey_identi 16800 74 79 20 2a 69 64 65 6e 74 69 74 69 65 73 3b 0a ty *identities;. 16810 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6e .unsigned long n 16820 75 6d 5f 69 64 73 2c 20 69 64 5f 69 64 78 2c 20 um_ids, id_idx, 16830 63 75 72 72 5f 69 64 5f 74 79 70 65 3b 0a 09 75 curr_id_type;..u 16840 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6e 75 6d nsigned long num 16850 5f 63 65 72 74 73 2c 20 6e 75 6d 5f 65 78 74 72 _certs, num_extr 16860 61 5f 63 65 72 74 73 2c 20 63 65 72 74 5f 69 64 a_certs, cert_id 16870 78 3b 0a 09 69 6e 74 20 69 6e 63 6c 75 64 65 5f x;..int include_ 16880 65 78 74 72 61 5f 63 65 72 74 73 20 3d 20 31 3b extra_certs = 1; 16890 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 168a0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 168b0 29 3b 0a 0a 09 69 66 20 28 67 65 74 65 6e 76 28 );...if (getenv( 168c0 22 43 41 43 4b 45 59 5f 4e 4f 5f 45 58 54 52 41 "CACKEY_NO_EXTRA 168d0 5f 43 45 52 54 53 22 29 20 21 3d 20 4e 55 4c 4c _CERTS") != NULL 168e0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 168f0 55 47 5f 50 52 49 4e 54 46 28 22 41 73 6b 65 64 UG_PRINTF("Asked 16900 20 6e 6f 74 20 74 6f 20 69 6e 63 6c 75 64 65 20 not to include 16910 65 78 74 72 61 20 28 44 6f 44 29 20 63 65 72 74 extra (DoD) cert 16920 69 66 69 63 61 74 65 73 22 29 3b 0a 0a 09 09 69 ificates");....i 16930 6e 63 6c 75 64 65 5f 65 78 74 72 61 5f 63 65 72 nclude_extra_cer 16940 74 73 20 3d 20 30 3b 0a 09 7d 0a 0a 09 69 66 20 ts = 0;..}...if 16950 28 69 6e 63 6c 75 64 65 5f 65 78 74 72 61 5f 63 (include_extra_c 16960 65 72 74 73 29 20 7b 0a 09 09 6e 75 6d 5f 65 78 erts) {...num_ex 16970 74 72 61 5f 63 65 72 74 73 20 3d 20 73 69 7a 65 tra_certs = size 16980 6f 66 28 65 78 74 72 61 5f 63 65 72 74 73 29 20 of(extra_certs) 16990 2f 20 73 69 7a 65 6f 66 28 65 78 74 72 61 5f 63 / sizeof(extra_c 169a0 65 72 74 73 5b 30 5d 29 3b 0a 0a 09 09 43 41 43 erts[0]);....CAC 169b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 169c0 28 22 49 6e 63 6c 75 64 69 6e 67 20 25 69 20 44 ("Including %i D 169d0 6f 44 20 43 65 72 74 69 66 69 63 61 74 65 73 20 oD Certificates 169e0 61 73 20 6f 62 6a 65 63 74 73 20 6f 6e 20 74 68 as objects on th 169f0 69 73 20 74 6f 6b 65 6e 22 2c 20 6e 75 6d 5f 65 is token", num_e 16a00 78 74 72 61 5f 63 65 72 74 73 29 3b 0a 09 7d 20 xtra_certs);..} 16a10 65 6c 73 65 20 7b 0a 09 09 6e 75 6d 5f 65 78 74 else {...num_ext 16a20 72 61 5f 63 65 72 74 73 20 3d 20 30 3b 0a 09 7d ra_certs = 0;..} 16a30 0a 0a 09 69 66 20 28 69 64 73 5f 66 6f 75 6e 64 ...if (ids_found 16a40 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 == NULL) {...CA 16a50 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 16a60 46 28 22 45 72 72 6f 72 2e 20 20 69 64 73 5f 66 F("Error. ids_f 16a70 6f 75 6e 64 20 69 73 20 4e 55 4c 4c 22 29 3b 0a ound is NULL");. 16a80 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b ...return(NULL); 16a90 0a 09 7d 0a 0a 09 70 63 73 63 5f 69 64 65 6e 74 ..}...pcsc_ident 16aa0 69 74 69 65 73 20 3d 20 63 61 63 6b 65 79 5f 72 ities = cackey_r 16ab0 65 61 64 5f 63 65 72 74 73 28 73 6c 6f 74 2c 20 ead_certs(slot, 16ac0 4e 55 4c 4c 2c 20 26 6e 75 6d 5f 63 65 72 74 73 NULL, &num_certs 16ad0 29 3b 0a 09 69 66 20 28 70 63 73 63 5f 69 64 65 );..if (pcsc_ide 16ae0 6e 74 69 74 69 65 73 20 21 3d 20 4e 55 4c 4c 29 ntities != NULL) 16af0 20 7b 0a 09 09 2f 2a 20 43 6f 6e 76 65 72 74 20 {.../* Convert 16b00 6e 75 6d 62 65 72 20 6f 66 20 43 65 72 74 73 20 number of Certs 16b10 74 6f 20 6e 75 6d 62 65 72 20 6f 66 20 6f 62 6a to number of obj 16b20 65 63 74 73 20 2a 2f 0a 09 09 6e 75 6d 5f 69 64 ects */...num_id 16b30 73 20 3d 20 28 43 4b 4f 5f 50 52 49 56 41 54 45 s = (CKO_PRIVATE 16b40 5f 4b 45 59 20 2d 20 43 4b 4f 5f 43 45 52 54 49 _KEY - CKO_CERTI 16b50 46 49 43 41 54 45 20 2b 20 31 29 20 2a 20 6e 75 FICATE + 1) * nu 16b60 6d 5f 63 65 72 74 73 3b 0a 09 09 6e 75 6d 5f 69 m_certs;...num_i 16b70 64 73 20 2b 3d 20 6e 75 6d 5f 65 78 74 72 61 5f ds += num_extra_ 16b80 63 65 72 74 73 20 2a 20 33 3b 0a 0a 09 09 69 64 certs * 3;....id 16b90 65 6e 74 69 74 69 65 73 20 3d 20 6d 61 6c 6c 6f entities = mallo 16ba0 63 28 6e 75 6d 5f 69 64 73 20 2a 20 73 69 7a 65 c(num_ids * size 16bb0 6f 66 28 2a 69 64 65 6e 74 69 74 69 65 73 29 29 of(*identities)) 16bc0 3b 0a 0a 09 09 2f 2a 20 41 64 64 20 63 65 72 74 ;..../* Add cert 16bd0 69 66 69 63 61 74 65 73 2c 20 70 75 62 6c 69 63 ificates, public 16be0 20 6b 65 79 73 2c 20 61 6e 64 20 70 72 69 76 61 keys, and priva 16bf0 74 65 20 6b 65 79 73 20 66 72 6f 6d 20 74 68 65 te keys from the 16c00 20 73 6d 61 72 74 63 61 72 64 20 2a 2f 0a 09 09 smartcard */... 16c10 69 64 5f 69 64 78 20 3d 20 30 3b 0a 09 09 66 6f id_idx = 0;...fo 16c20 72 20 28 63 65 72 74 5f 69 64 78 20 3d 20 30 3b r (cert_idx = 0; 16c30 20 63 65 72 74 5f 69 64 78 20 3c 20 6e 75 6d 5f cert_idx < num_ 16c40 63 65 72 74 73 3b 20 63 65 72 74 5f 69 64 78 2b certs; cert_idx+ 16c50 2b 29 20 7b 0a 09 09 09 66 6f 72 20 28 63 75 72 +) {....for (cur 16c60 72 5f 69 64 5f 74 79 70 65 20 3d 20 43 4b 4f 5f r_id_type = CKO_ 16c70 43 45 52 54 49 46 49 43 41 54 45 3b 20 63 75 72 CERTIFICATE; cur 16c80 72 5f 69 64 5f 74 79 70 65 20 3c 3d 20 43 4b 4f r_id_type <= CKO 16c90 5f 50 52 49 56 41 54 45 5f 4b 45 59 3b 20 63 75 _PRIVATE_KEY; cu 16ca0 72 72 5f 69 64 5f 74 79 70 65 2b 2b 29 20 7b 0a rr_id_type++) {. 16cb0 09 09 09 09 69 64 65 6e 74 69 74 69 65 73 5b 69 ....identities[i 16cc0 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 d_idx].attribute 16cd0 73 20 3d 20 63 61 63 6b 65 79 5f 67 65 74 5f 61 s = cackey_get_a 16ce0 74 74 72 69 62 75 74 65 73 28 63 75 72 72 5f 69 ttributes(curr_i 16cf0 64 5f 74 79 70 65 2c 20 26 70 63 73 63 5f 69 64 d_type, &pcsc_id 16d00 65 6e 74 69 74 69 65 73 5b 63 65 72 74 5f 69 64 entities[cert_id 16d10 78 5d 2c 20 63 65 72 74 5f 69 64 78 2c 20 26 69 x], cert_idx, &i 16d20 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 dentities[id_idx 16d30 5d 2e 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75 ].attributes_cou 16d40 6e 74 29 3b 0a 0a 09 09 09 09 69 64 65 6e 74 69 nt);......identi 16d50 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 70 63 73 ties[id_idx].pcs 16d60 63 5f 69 64 65 6e 74 69 74 79 20 3d 20 6d 61 6c c_identity = mal 16d70 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 69 64 65 6e loc(sizeof(*iden 16d80 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 70 tities[id_idx].p 16d90 63 73 63 5f 69 64 65 6e 74 69 74 79 29 29 3b 0a csc_identity));. 16da0 09 09 09 09 6d 65 6d 63 70 79 28 69 64 65 6e 74 ....memcpy(ident 16db0 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 70 63 ities[id_idx].pc 16dc0 73 63 5f 69 64 65 6e 74 69 74 79 2c 20 26 70 63 sc_identity, &pc 16dd0 73 63 5f 69 64 65 6e 74 69 74 69 65 73 5b 63 65 sc_identities[ce 16de0 72 74 5f 69 64 78 5d 2c 20 73 69 7a 65 6f 66 28 rt_idx], sizeof( 16df0 2a 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 *identities[id_i 16e00 64 78 5d 2e 70 63 73 63 5f 69 64 65 6e 74 69 74 dx].pcsc_identit 16e10 79 29 29 3b 0a 0a 09 09 09 09 69 64 65 6e 74 69 y));......identi 16e20 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 70 63 73 ties[id_idx].pcs 16e30 63 5f 69 64 65 6e 74 69 74 79 2d 3e 63 65 72 74 c_identity->cert 16e40 69 66 69 63 61 74 65 20 3d 20 6d 61 6c 6c 6f 63 ificate = malloc 16e50 28 70 63 73 63 5f 69 64 65 6e 74 69 74 69 65 73 (pcsc_identities 16e60 5b 63 65 72 74 5f 69 64 78 5d 2e 63 65 72 74 69 [cert_idx].certi 16e70 66 69 63 61 74 65 5f 6c 65 6e 29 3b 0a 09 09 09 ficate_len);.... 16e80 09 6d 65 6d 63 70 79 28 69 64 65 6e 74 69 74 69 .memcpy(identiti 16e90 65 73 5b 69 64 5f 69 64 78 5d 2e 70 63 73 63 5f es[id_idx].pcsc_ 16ea0 69 64 65 6e 74 69 74 79 2d 3e 63 65 72 74 69 66 identity->certif 16eb0 69 63 61 74 65 2c 20 70 63 73 63 5f 69 64 65 6e icate, pcsc_iden 16ec0 74 69 74 69 65 73 5b 63 65 72 74 5f 69 64 78 5d tities[cert_idx] 16ed0 2e 63 65 72 74 69 66 69 63 61 74 65 2c 20 70 63 .certificate, pc 16ee0 73 63 5f 69 64 65 6e 74 69 74 69 65 73 5b 63 65 sc_identities[ce 16ef0 72 74 5f 69 64 78 5d 2e 63 65 72 74 69 66 69 63 rt_idx].certific 16f00 61 74 65 5f 6c 65 6e 29 3b 0a 0a 09 09 09 09 69 ate_len);......i 16f10 64 5f 69 64 78 2b 2b 3b 0a 09 09 09 7d 0a 09 09 d_idx++;....}... 16f20 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 66 72 65 65 }....cackey_free 16f30 5f 63 65 72 74 73 28 70 63 73 63 5f 69 64 65 6e _certs(pcsc_iden 16f40 74 69 74 69 65 73 2c 20 6e 75 6d 5f 63 65 72 74 tities, num_cert 16f50 73 2c 20 31 29 3b 0a 0a 09 09 2f 2a 20 41 64 64 s, 1);..../* Add 16f60 20 44 6f 44 20 43 65 72 74 69 66 69 63 61 74 65 DoD Certificate 16f70 73 20 61 6e 64 20 4e 65 74 73 63 61 70 65 20 54 s and Netscape T 16f80 72 75 73 74 20 4f 62 6a 65 63 74 73 20 2a 2f 0a rust Objects */. 16f90 09 09 66 6f 72 20 28 63 65 72 74 5f 69 64 78 20 ..for (cert_idx 16fa0 3d 20 30 3b 20 63 65 72 74 5f 69 64 78 20 3c 20 = 0; cert_idx < 16fb0 6e 75 6d 5f 65 78 74 72 61 5f 63 65 72 74 73 3b num_extra_certs; 16fc0 20 63 65 72 74 5f 69 64 78 2b 2b 29 20 7b 0a 09 cert_idx++) {.. 16fd0 09 09 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f ..identities[id_ 16fe0 69 64 78 5d 2e 70 63 73 63 5f 69 64 65 6e 74 69 idx].pcsc_identi 16ff0 74 79 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 69 64 ty = NULL;....id 17000 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d entities[id_idx] 17010 2e 61 74 74 72 69 62 75 74 65 73 20 3d 20 63 61 .attributes = ca 17020 63 6b 65 79 5f 67 65 74 5f 61 74 74 72 69 62 75 ckey_get_attribu 17030 74 65 73 28 43 4b 4f 5f 43 45 52 54 49 46 49 43 tes(CKO_CERTIFIC 17040 41 54 45 2c 20 26 65 78 74 72 61 5f 63 65 72 74 ATE, &extra_cert 17050 73 5b 63 65 72 74 5f 69 64 78 5d 2c 20 30 78 66 s[cert_idx], 0xf 17060 30 30 30 20 7c 20 63 65 72 74 5f 69 64 78 2c 20 000 | cert_idx, 17070 26 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 &identities[id_i 17080 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 5f 63 dx].attributes_c 17090 6f 75 6e 74 29 3b 0a 09 09 09 69 64 5f 69 64 78 ount);....id_idx 170a0 2b 2b 3b 0a 0a 09 09 09 69 64 65 6e 74 69 74 69 ++;.....identiti 170b0 65 73 5b 69 64 5f 69 64 78 5d 2e 70 63 73 63 5f es[id_idx].pcsc_ 170c0 69 64 65 6e 74 69 74 79 20 3d 20 4e 55 4c 4c 3b identity = NULL; 170d0 0a 09 09 09 69 64 65 6e 74 69 74 69 65 73 5b 69 ....identities[i 170e0 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 d_idx].attribute 170f0 73 20 3d 20 63 61 63 6b 65 79 5f 67 65 74 5f 61 s = cackey_get_a 17100 74 74 72 69 62 75 74 65 73 28 43 4b 4f 5f 50 55 ttributes(CKO_PU 17110 42 4c 49 43 5f 4b 45 59 2c 20 26 65 78 74 72 61 BLIC_KEY, &extra 17120 5f 63 65 72 74 73 5b 63 65 72 74 5f 69 64 78 5d _certs[cert_idx] 17130 2c 20 30 78 66 30 30 30 20 7c 20 63 65 72 74 5f , 0xf000 | cert_ 17140 69 64 78 2c 20 26 69 64 65 6e 74 69 74 69 65 73 idx, &identities 17150 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 [id_idx].attribu 17160 74 65 73 5f 63 6f 75 6e 74 29 3b 0a 09 09 09 69 tes_count);....i 17170 64 5f 69 64 78 2b 2b 3b 0a 0a 09 09 09 69 64 65 d_idx++;.....ide 17180 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e ntities[id_idx]. 17190 70 63 73 63 5f 69 64 65 6e 74 69 74 79 20 3d 20 pcsc_identity = 171a0 4e 55 4c 4c 3b 0a 09 09 09 69 64 65 6e 74 69 74 NULL;....identit 171b0 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 ies[id_idx].attr 171c0 69 62 75 74 65 73 20 3d 20 63 61 63 6b 65 79 5f ibutes = cackey_ 171d0 67 65 74 5f 61 74 74 72 69 62 75 74 65 73 28 43 get_attributes(C 171e0 4b 4f 5f 4e 45 54 53 43 41 50 45 5f 54 52 55 53 KO_NETSCAPE_TRUS 171f0 54 2c 20 26 65 78 74 72 61 5f 63 65 72 74 73 5b T, &extra_certs[ 17200 63 65 72 74 5f 69 64 78 5d 2c 20 30 78 66 30 30 cert_idx], 0xf00 17210 30 20 7c 20 63 65 72 74 5f 69 64 78 2c 20 26 69 0 | cert_idx, &i 17220 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 dentities[id_idx 17230 5d 2e 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75 ].attributes_cou 17240 6e 74 29 3b 0a 09 09 09 69 64 5f 69 64 78 2b 2b nt);....id_idx++ 17250 3b 0a 09 09 7d 0a 0a 09 09 2a 69 64 73 5f 66 6f ;...}....*ids_fo 17260 75 6e 64 20 3d 20 6e 75 6d 5f 69 64 73 3b 0a 09 und = num_ids;.. 17270 09 72 65 74 75 72 6e 28 69 64 65 6e 74 69 74 69 .return(identiti 17280 65 73 29 3b 0a 09 7d 0a 0a 09 2a 69 64 73 5f 66 es);..}...*ids_f 17290 6f 75 6e 64 20 3d 20 30 3b 0a 09 72 65 74 75 72 ound = 0;..retur 172a0 6e 28 4e 55 4c 4c 29 3b 0a 7d 0a 0a 43 4b 5f 44 n(NULL);.}..CK_D 172b0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 172c0 4b 5f 52 56 2c 20 43 5f 49 6e 69 74 69 61 6c 69 K_RV, C_Initiali 172d0 7a 65 29 28 43 4b 5f 56 4f 49 44 5f 50 54 52 20 ze)(CK_VOID_PTR 172e0 70 49 6e 69 74 41 72 67 73 29 20 7b 0a 09 43 4b pInitArgs) {..CK 172f0 5f 43 5f 49 4e 49 54 49 41 4c 49 5a 45 5f 41 52 _C_INITIALIZE_AR 17300 47 53 20 43 4b 5f 50 54 52 20 61 72 67 73 3b 0a GS CK_PTR args;. 17310 09 75 69 6e 74 33 32 5f 74 20 69 64 78 3b 0a 09 .uint32_t idx;.. 17320 69 6e 74 20 6d 75 74 65 78 5f 69 6e 69 74 5f 72 int mutex_init_r 17330 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 et;...CACKEY_DEB 17340 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 17350 64 2e 22 29 3b 0a 0a 09 69 66 20 28 63 61 63 6b d.");...if (cack 17360 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 17370 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 17380 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 17390 20 41 6c 72 65 61 64 79 20 69 6e 69 74 69 61 6c Already initial 173a0 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 173b0 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 173c0 41 4c 52 45 41 44 59 5f 49 4e 49 54 49 41 4c 49 ALREADY_INITIALI 173d0 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 ZED);..}...if (p 173e0 49 6e 69 74 41 72 67 73 20 21 3d 20 4e 55 4c 4c InitArgs != NULL 173f0 29 20 7b 0a 09 09 61 72 67 73 20 3d 20 70 49 6e ) {...args = pIn 17400 69 74 41 72 67 73 3b 0a 09 09 6d 65 6d 63 70 79 itArgs;...memcpy 17410 28 26 63 61 63 6b 65 79 5f 61 72 67 73 2c 20 61 (&cackey_args, a 17420 72 67 73 2c 20 73 69 7a 65 6f 66 28 63 61 63 6b rgs, sizeof(cack 17430 65 79 5f 61 72 67 73 29 29 3b 0a 0a 09 09 69 66 ey_args));....if 17440 20 28 61 72 67 73 2d 3e 43 72 65 61 74 65 4d 75 (args->CreateMu 17450 74 65 78 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 61 tex == NULL || a 17460 72 67 73 2d 3e 44 65 73 74 72 6f 79 4d 75 74 65 rgs->DestroyMute 17470 78 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 x == NULL || arg 17480 73 2d 3e 4c 6f 63 6b 4d 75 74 65 78 20 3d 3d 20 s->LockMutex == 17490 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 55 6e NULL || args->Un 174a0 6c 6f 63 6b 4d 75 74 65 78 20 3d 3d 20 4e 55 4c lockMutex == NUL 174b0 4c 29 20 7b 0a 09 09 09 69 66 20 28 61 72 67 73 L) {....if (args 174c0 2d 3e 43 72 65 61 74 65 4d 75 74 65 78 20 21 3d ->CreateMutex != 174d0 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 44 NULL || args->D 174e0 65 73 74 72 6f 79 4d 75 74 65 78 20 21 3d 20 4e estroyMutex != N 174f0 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 4c 6f 63 ULL || args->Loc 17500 6b 4d 75 74 65 78 20 21 3d 20 4e 55 4c 4c 20 7c kMutex != NULL | 17510 7c 20 61 72 67 73 2d 3e 55 6e 6c 6f 63 6b 4d 75 | args->UnlockMu 17520 74 65 78 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 tex != NULL) {.. 17530 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 17540 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 53 PRINTF("Error. S 17550 6f 6d 65 2c 20 62 75 74 20 6e 6f 74 20 41 6c 6c ome, but not All 17560 20 74 68 72 65 61 64 69 6e 67 20 70 72 69 6d 69 threading primi 17570 74 69 76 65 73 20 70 72 6f 76 69 64 65 64 2e 22 tives provided." 17580 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 43 );......return(C 17590 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD 175a0 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 20 65 );....}...}..} e 175b0 6c 73 65 20 7b 0a 09 09 63 61 63 6b 65 79 5f 61 lse {...cackey_a 175c0 72 67 73 2e 43 72 65 61 74 65 4d 75 74 65 78 20 rgs.CreateMutex 175d0 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 6b 65 79 = NULL;...cackey 175e0 5f 61 72 67 73 2e 44 65 73 74 72 6f 79 4d 75 74 _args.DestroyMut 175f0 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 ex = NULL;...cac 17600 6b 65 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 key_args.LockMut 17610 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 ex = NULL;...cac 17620 6b 65 79 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d key_args.UnlockM 17630 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 utex = NULL;...c 17640 61 63 6b 65 79 5f 61 72 67 73 2e 66 6c 61 67 73 ackey_args.flags 17650 20 3d 20 30 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 = 0;..}...for ( 17660 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 28 idx = 0; idx < ( 17670 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 17680 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 17690 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 176a0 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b 0a [0])); idx++) {. 176b0 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 176c0 73 5b 69 64 78 5d 2e 61 63 74 69 76 65 20 3d 20 s[idx].active = 176d0 30 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 0;..}...for (idx 176e0 20 3d 20 30 3b 20 69 64 78 20 3c 20 28 73 69 7a = 0; idx < (siz 176f0 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 eof(cackey_slots 17700 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke 17710 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 3b 20 69 64 y_slots[0])); id 17720 78 2b 2b 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f x++) {...cackey_ 17730 73 6c 6f 74 73 5b 69 64 78 5d 2e 61 63 74 69 76 slots[idx].activ 17740 65 20 3d 20 30 3b 0a 09 09 63 61 63 6b 65 79 5f e = 0;...cackey_ 17750 73 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f slots[idx].pcsc_ 17760 72 65 61 64 65 72 20 3d 20 4e 55 4c 4c 3b 0a 09 reader = NULL;.. 17770 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 .cackey_slots[id 17780 78 5d 2e 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 x].transaction_d 17790 65 70 74 68 20 3d 20 30 3b 0a 09 09 63 61 63 6b epth = 0;...cack 177a0 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e 74 72 ey_slots[idx].tr 177b0 61 6e 73 61 63 74 69 6f 6e 5f 6e 65 65 64 5f 68 ansaction_need_h 177c0 77 5f 6c 6f 63 6b 20 3d 20 30 3b 0a 09 09 63 61 w_lock = 0;...ca 177d0 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d 2e ckey_slots[idx]. 177e0 73 6c 6f 74 5f 72 65 73 65 74 20 3d 20 30 3b 0a slot_reset = 0;. 177f0 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 ..cackey_slots[i 17800 64 78 5d 2e 74 6f 6b 65 6e 5f 66 6c 61 67 73 20 dx].token_flags 17810 3d 20 30 3b 0a 09 09 63 61 63 6b 65 79 5f 73 6c = 0;...cackey_sl 17820 6f 74 73 5b 69 64 78 5d 2e 6c 61 62 65 6c 20 3d ots[idx].label = 17830 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a 09 63 61 63 6b NULL;..}...cack 17840 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d ey_initialized = 17850 20 31 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 1;...if (!cacke 17860 79 5f 62 69 67 6c 6f 63 6b 5f 69 6e 69 74 29 20 y_biglock_init) 17870 7b 0a 09 09 6d 75 74 65 78 5f 69 6e 69 74 5f 72 {...mutex_init_r 17880 65 74 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 et = cackey_mute 17890 78 5f 63 72 65 61 74 65 28 26 63 61 63 6b 65 79 x_create(&cackey 178a0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 69 66 _biglock);....if 178b0 20 28 6d 75 74 65 78 5f 69 6e 69 74 5f 72 65 74 (mutex_init_ret 178c0 20 21 3d 20 30 29 20 7b 0a 09 09 09 43 41 43 4b != 0) {....CACK 178d0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 178e0 22 45 72 72 6f 72 2e 20 20 4d 75 74 65 78 20 69 "Error. Mutex i 178f0 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 66 61 nitialization fa 17900 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 09 72 65 74 iled.");.....ret 17910 75 72 6e 28 43 4b 52 5f 43 41 4e 54 5f 4c 4f 43 urn(CKR_CANT_LOC 17920 4b 29 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 K);...}....cacke 17930 79 5f 62 69 67 6c 6f 63 6b 5f 69 6e 69 74 20 3d y_biglock_init = 17940 20 31 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 1;..}...CACKEY_ 17950 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 17960 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 turning CKR_OK ( 17970 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a %i)", CKR_OK);.. 17980 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b .return(CKR_OK); 17990 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 179a0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 179b0 46 69 6e 61 6c 69 7a 65 29 28 43 4b 5f 56 4f 49 Finalize)(CK_VOI 179c0 44 5f 50 54 52 20 70 52 65 73 65 72 76 65 64 29 D_PTR pReserved) 179d0 20 7b 0a 09 75 69 6e 74 33 32 5f 74 20 69 64 78 {..uint32_t idx 179e0 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 179f0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 17a00 22 29 3b 0a 0a 09 69 66 20 28 70 52 65 73 65 72 ");...if (pReser 17a10 76 65 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 ved != NULL) {.. 17a20 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 17a30 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 52 65 INTF("Error. pRe 17a40 73 65 72 76 65 64 20 69 73 20 6e 6f 74 20 4e 55 served is not NU 17a50 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 17a60 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 17a70 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 AD);..}...if (!c 17a80 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 17a90 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 17aa0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 17ab0 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 17ac0 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 17ad0 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 17ae0 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 17af0 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d ..}...for (idx = 17b00 20 30 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 0; idx < (sizeo 17b10 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 17b20 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 17b30 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 ey_sessions[0])) 17b40 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 ; idx++) {...if 17b50 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 17b60 5b 69 64 78 5d 2e 61 63 74 69 76 65 29 20 7b 0a [idx].active) {. 17b70 09 09 09 43 5f 43 6c 6f 73 65 53 65 73 73 69 6f ...C_CloseSessio 17b80 6e 28 69 64 78 29 3b 0a 09 09 7d 0a 09 7d 0a 0a n(idx);...}..}.. 17b90 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f 64 69 .cackey_slots_di 17ba0 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 29 3b 0a sconnect_all();. 17bb0 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 ..for (idx = 0; 17bc0 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 idx < (sizeof(ca 17bd0 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 ckey_slots) / si 17be0 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 17bf0 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b s[0])); idx++) { 17c00 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c ...if (cackey_sl 17c10 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 72 65 ots[idx].pcsc_re 17c20 61 64 65 72 29 20 7b 0a 09 09 09 66 72 65 65 28 ader) {....free( 17c30 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 cackey_slots[idx 17c40 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 29 3b 0a ].pcsc_reader);. 17c50 09 09 7d 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f ..}..}...cackey_ 17c60 70 63 73 63 5f 64 69 73 63 6f 6e 6e 65 63 74 28 pcsc_disconnect( 17c70 29 3b 0a 0a 09 63 61 63 6b 65 79 5f 69 6e 69 74 );...cackey_init 17c80 69 61 6c 69 7a 65 64 20 3d 20 30 3b 0a 0a 09 43 ialized = 0;...C 17c90 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 17ca0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 17cb0 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ 17cc0 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b OK);...return(CK 17cd0 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 R_OK);.}..CK_DEF 17ce0 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 17cf0 52 56 2c 20 43 5f 47 65 74 49 6e 66 6f 29 28 43 RV, C_GetInfo)(C 17d00 4b 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f K_INFO_PTR pInfo 17d10 29 20 7b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 ) {..static CK_U 17d20 54 46 38 43 48 41 52 20 6d 61 6e 75 66 61 63 74 TF8CHAR manufact 17d30 75 72 65 72 49 44 5b 5d 20 3d 20 22 55 2e 53 2e urerID[] = "U.S. 17d40 20 47 6f 76 65 72 6e 6d 65 6e 74 22 3b 0a 09 73 Government";..s 17d50 74 61 74 69 63 20 43 4b 5f 55 54 46 38 43 48 41 tatic CK_UTF8CHA 17d60 52 20 6c 69 62 72 61 72 79 44 65 73 63 72 69 70 R libraryDescrip 17d70 74 69 6f 6e 5b 5d 20 3d 20 22 43 41 43 4b 65 79 tion[] = "CACKey 17d80 22 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ";...CACKEY_DEBU 17d90 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 17da0 2e 22 29 3b 0a 0a 09 69 66 20 28 70 49 6e 66 6f .");...if (pInfo 17db0 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 == NULL) {...CA 17dc0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 17dd0 46 28 22 45 72 72 6f 72 2e 20 70 49 6e 66 6f 20 F("Error. pInfo 17de0 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 is NULL.");....r 17df0 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 eturn(CKR_ARGUME 17e00 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 NTS_BAD);..}...i 17e10 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 17e20 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 17e30 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 17e40 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 17e50 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 17e60 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 17e70 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 17e80 5a 45 44 29 3b 0a 09 7d 0a 0a 09 70 49 6e 66 6f ZED);..}...pInfo 17e90 2d 3e 63 72 79 70 74 6f 6b 69 56 65 72 73 69 6f ->cryptokiVersio 17ea0 6e 2e 6d 61 6a 6f 72 20 3d 20 28 28 43 41 43 4b n.major = ((CACK 17eb0 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 53 EY_CRYPTOKI_VERS 17ec0 49 4f 4e 5f 43 4f 44 45 29 20 3e 3e 20 31 36 29 ION_CODE) >> 16) 17ed0 20 26 20 30 78 66 66 3b 0a 09 70 49 6e 66 6f 2d & 0xff;..pInfo- 17ee0 3e 63 72 79 70 74 6f 6b 69 56 65 72 73 69 6f 6e >cryptokiVersion 17ef0 2e 6d 69 6e 6f 72 20 3d 20 28 28 43 41 43 4b 45 .minor = ((CACKE 17f00 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 53 49 Y_CRYPTOKI_VERSI 17f10 4f 4e 5f 43 4f 44 45 29 20 3e 3e 20 38 29 20 26 ON_CODE) >> 8) & 17f20 20 30 78 66 66 3b 0a 0a 09 6d 65 6d 73 65 74 28 0xff;...memset( 17f30 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 pInfo->manufactu 17f40 72 65 72 49 44 2c 20 27 20 27 2c 20 73 69 7a 65 rerID, ' ', size 17f50 6f 66 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 of(pInfo->manufa 17f60 63 74 75 72 65 72 49 44 29 29 3b 0a 09 6d 65 6d cturerID));..mem 17f70 63 70 79 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 cpy(pInfo->manuf 17f80 61 63 74 75 72 65 72 49 44 2c 20 6d 61 6e 75 66 acturerID, manuf 17f90 61 63 74 75 72 65 72 49 44 2c 20 73 69 7a 65 6f acturerID, sizeo 17fa0 66 28 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 f(manufacturerID 17fb0 29 20 2d 20 31 29 3b 0a 0a 09 70 49 6e 66 6f 2d ) - 1);...pInfo- 17fc0 3e 66 6c 61 67 73 20 3d 20 30 78 30 30 3b 0a 0a >flags = 0x00;.. 17fd0 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6c .memset(pInfo->l 17fe0 69 62 72 61 72 79 44 65 73 63 72 69 70 74 69 6f ibraryDescriptio 17ff0 6e 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 n, ' ', sizeof(p 18000 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 44 65 73 Info->libraryDes 18010 63 72 69 70 74 69 6f 6e 29 29 3b 0a 09 6d 65 6d cription));..mem 18020 63 70 79 28 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 cpy(pInfo->libra 18030 72 79 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 6c ryDescription, l 18040 69 62 72 61 72 79 44 65 73 63 72 69 70 74 69 6f ibraryDescriptio 18050 6e 2c 20 73 69 7a 65 6f 66 28 6c 69 62 72 61 72 n, sizeof(librar 18060 79 44 65 73 63 72 69 70 74 69 6f 6e 29 20 2d 20 yDescription) - 18070 31 29 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 6c 69 62 1);...pInfo->lib 18080 72 61 72 79 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f raryVersion.majo 18090 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 65 74 76 r = (cackey_getv 180a0 65 72 73 69 6f 6e 28 29 20 3e 3e 20 31 36 29 20 ersion() >> 16) 180b0 26 20 30 78 66 66 3b 0a 09 70 49 6e 66 6f 2d 3e & 0xff;..pInfo-> 180c0 6c 69 62 72 61 72 79 56 65 72 73 69 6f 6e 2e 6d libraryVersion.m 180d0 69 6e 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 inor = (cackey_g 180e0 65 74 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 38 etversion() >> 8 180f0 29 20 26 20 30 78 66 66 3b 0a 0a 09 43 41 43 4b ) & 0xff;...CACK 18100 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 18110 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 18120 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) 18130 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O 18140 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 50 72 6f K);.}../*. * Pro 18150 63 65 73 73 20 6c 69 73 74 20 6f 66 20 72 65 61 cess list of rea 18160 64 65 72 73 2c 20 61 6e 64 20 63 72 65 61 74 65 ders, and create 18170 20 6d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e mapping between 18180 20 72 65 61 64 65 72 20 6e 61 6d 65 20 61 6e 64 reader name and 18190 20 73 6c 6f 74 20 49 44 0a 20 2a 2f 0a 43 4b 5f slot ID. */.CK_ 181a0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 181b0 43 4b 5f 52 56 2c 20 43 5f 47 65 74 53 6c 6f 74 CK_RV, C_GetSlot 181c0 4c 69 73 74 29 28 43 4b 5f 42 42 4f 4f 4c 20 74 List)(CK_BBOOL t 181d0 6f 6b 65 6e 50 72 65 73 65 6e 74 2c 20 43 4b 5f okenPresent, CK_ 181e0 53 4c 4f 54 5f 49 44 5f 50 54 52 20 70 53 6c 6f SLOT_ID_PTR pSlo 181f0 74 4c 69 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f tList, CK_ULONG_ 18200 50 54 52 20 70 75 6c 43 6f 75 6e 74 29 20 7b 0a PTR pulCount) {. 18210 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 .int mutex_retva 18220 6c 3b 0a 09 69 6e 74 20 70 63 73 63 5f 63 6f 6e l;..int pcsc_con 18230 6e 65 63 74 5f 72 65 74 3b 0a 09 43 4b 5f 55 4c nect_ret;..CK_UL 18240 4f 4e 47 20 63 6f 75 6e 74 2c 20 73 6c 6f 74 5f ONG count, slot_ 18250 63 6f 75 6e 74 20 3d 20 30 2c 20 63 75 72 72 73 count = 0, currs 18260 6c 6f 74 3b 0a 09 63 68 61 72 20 2a 70 63 73 63 lot;..char *pcsc 18270 5f 72 65 61 64 65 72 73 2c 20 2a 70 63 73 63 5f _readers, *pcsc_ 18280 72 65 61 64 65 72 73 5f 73 2c 20 2a 70 63 73 63 readers_s, *pcsc 18290 5f 72 65 61 64 65 72 73 5f 65 3b 0a 09 44 57 4f _readers_e;..DWO 182a0 52 44 20 70 63 73 63 5f 72 65 61 64 65 72 73 5f RD pcsc_readers_ 182b0 6c 65 6e 3b 0a 09 4c 4f 4e 47 20 73 63 61 72 64 len;..LONG scard 182c0 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 _listreaders_ret 182d0 3b 0a 09 73 69 7a 65 5f 74 20 63 75 72 72 5f 72 ;..size_t curr_r 182e0 65 61 64 65 72 5f 6c 65 6e 3b 0a 0a 09 43 41 43 eader_len;...CAC 182f0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 18300 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 18310 66 20 28 70 75 6c 43 6f 75 6e 74 20 3d 3d 20 4e f (pulCount == N 18320 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ULL) {...CACKEY_ 18330 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 18340 72 6f 72 2e 20 70 75 6c 43 6f 75 6e 74 20 69 73 ror. pulCount is 18350 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 NULL.");....ret 18360 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 urn(CKR_ARGUMENT 18370 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 S_BAD);..}...if 18380 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 18390 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 183a0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 183b0 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 183c0 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 183d0 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 183e0 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 183f0 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 D);..}...mutex_r 18400 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 18410 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 utex_lock(cackey 18420 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 18430 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 18440 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 18450 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 18460 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c r. Locking fail 18470 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 18480 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 18490 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 43 6c 65 OR);..}.../* Cle 184a0 61 72 20 6c 69 73 74 20 6f 66 20 73 6c 6f 74 73 ar list of slots 184b0 20 2a 2f 0a 09 69 66 20 28 70 53 6c 6f 74 4c 69 */..if (pSlotLi 184c0 73 74 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 st) {...CACKEY_D 184d0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 50 75 72 EBUG_PRINTF("Pur 184e0 67 69 6e 67 20 61 6c 6c 20 73 6c 6f 74 20 69 6e ging all slot in 184f0 66 6f 72 6d 61 74 69 6f 6e 2e 22 29 3b 0a 0a 09 formation.");... 18500 09 2f 2a 20 4f 6e 6c 79 20 75 70 64 61 74 65 20 ./* Only update 18510 74 68 65 20 6c 69 73 74 20 6f 66 20 73 6c 6f 74 the list of slot 18520 73 20 69 66 20 77 65 20 61 72 65 20 61 63 74 75 s if we are actu 18530 61 6c 6c 79 20 62 65 69 6e 67 20 73 75 70 70 6c ally being suppl 18540 79 20 74 68 65 20 73 6c 6f 74 20 69 6e 66 6f 72 y the slot infor 18550 6d 61 74 69 6f 6e 20 2a 2f 0a 09 09 63 61 63 6b mation */...cack 18560 65 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e ey_slots_disconn 18570 65 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 66 6f ect_all();....fo 18580 72 20 28 63 75 72 72 73 6c 6f 74 20 3d 20 30 3b r (currslot = 0; 18590 20 63 75 72 72 73 6c 6f 74 20 3c 20 28 73 69 7a currslot < (siz 185a0 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 eof(cackey_slots 185b0 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke 185c0 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 3b 20 63 75 y_slots[0])); cu 185d0 72 72 73 6c 6f 74 2b 2b 29 20 7b 0a 09 09 09 69 rrslot++) {....i 185e0 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b f (cackey_slots[ 185f0 63 75 72 72 73 6c 6f 74 5d 2e 70 63 73 63 5f 72 currslot].pcsc_r 18600 65 61 64 65 72 29 20 7b 0a 09 09 09 09 66 72 65 eader) {.....fre 18610 65 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 e(cackey_slots[c 18620 75 72 72 73 6c 6f 74 5d 2e 70 63 73 63 5f 72 65 urrslot].pcsc_re 18630 61 64 65 72 29 3b 0a 0a 09 09 09 09 63 61 63 6b ader);......cack 18640 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f ey_slots[currslo 18650 74 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 20 3d t].pcsc_reader = 18660 20 4e 55 4c 4c 3b 0a 09 09 09 7d 0a 0a 09 09 09 NULL;....}..... 18670 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 if (cackey_slots 18680 5b 63 75 72 72 73 6c 6f 74 5d 2e 6c 61 62 65 6c [currslot].label 18690 29 20 7b 0a 09 09 09 09 66 72 65 65 28 63 61 63 ) {.....free(cac 186a0 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c key_slots[currsl 186b0 6f 74 5d 2e 6c 61 62 65 6c 29 3b 0a 0a 09 09 09 ot].label);..... 186c0 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 .cackey_slots[cu 186d0 72 72 73 6c 6f 74 5d 2e 6c 61 62 65 6c 20 3d 20 rrslot].label = 186e0 4e 55 4c 4c 3b 0a 09 09 09 7d 0a 0a 09 09 09 63 NULL;....}.....c 186f0 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 ackey_slots[curr 18700 73 6c 6f 74 5d 2e 61 63 74 69 76 65 20 3d 20 30 slot].active = 0 18710 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 2f 2a 20 44 65 ;...}..}.../* De 18720 74 65 72 6d 69 6e 65 20 6c 69 73 74 20 6f 66 20 termine list of 18730 72 65 61 64 65 72 73 20 2a 2f 0a 09 70 63 73 63 readers */..pcsc 18740 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 20 3d 20 63 _connect_ret = c 18750 61 63 6b 65 79 5f 70 63 73 63 5f 63 6f 6e 6e 65 ackey_pcsc_conne 18760 63 74 28 29 3b 0a 09 69 66 20 28 70 63 73 63 5f ct();..if (pcsc_ 18770 63 6f 6e 6e 65 63 74 5f 72 65 74 20 21 3d 20 43 connect_ret != C 18780 41 43 4b 45 59 5f 50 43 53 43 5f 53 5f 4f 4b 29 ACKEY_PCSC_S_OK) 18790 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 187a0 47 5f 50 52 49 4e 54 46 28 22 43 6f 6e 6e 65 63 G_PRINTF("Connec 187b0 74 69 6f 6e 20 74 6f 20 50 43 2f 53 43 20 66 61 tion to PC/SC fa 187c0 69 6c 65 64 2c 20 61 73 73 75 6d 69 6e 67 20 6e iled, assuming n 187d0 6f 20 73 6c 6f 74 73 22 29 3b 0a 0a 09 09 73 6c o slots");....sl 187e0 6f 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 7d ot_count = 0;..} 187f0 20 65 6c 73 65 20 7b 0a 09 09 70 63 73 63 5f 72 else {...pcsc_r 18800 65 61 64 65 72 73 5f 6c 65 6e 20 3d 20 30 3b 0a eaders_len = 0;. 18810 0a 09 09 73 63 61 72 64 5f 6c 69 73 74 72 65 61 ...scard_listrea 18820 64 65 72 73 5f 72 65 74 20 3d 20 53 43 61 72 64 ders_ret = SCard 18830 4c 69 73 74 52 65 61 64 65 72 73 28 2a 63 61 63 ListReaders(*cac 18840 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 2c key_pcsc_handle, 18850 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 26 70 63 NULL, NULL, &pc 18860 73 63 5f 72 65 61 64 65 72 73 5f 6c 65 6e 29 3b sc_readers_len); 18870 0a 0a 09 09 69 66 20 28 73 63 61 72 64 5f 6c 69 ....if (scard_li 18880 73 74 72 65 61 64 65 72 73 5f 72 65 74 20 3d 3d streaders_ret == 18890 20 53 43 41 52 44 5f 46 5f 43 4f 4d 4d 5f 45 52 SCARD_F_COMM_ER 188a0 52 4f 52 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 ROR) {....CACKEY 188b0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 188c0 72 72 6f 72 2e 20 53 43 61 72 64 4c 69 73 74 52 rror. SCardListR 188d0 65 61 64 65 72 73 28 29 20 72 65 74 75 72 6e 65 eaders() returne 188e0 64 20 53 43 41 52 44 5f 46 5f 43 4f 4d 4d 5f 45 d SCARD_F_COMM_E 188f0 52 52 4f 52 2c 20 61 73 73 75 6d 69 6e 67 20 43 RROR, assuming C 18900 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 50 43 2f onnection to PC/ 18910 53 43 20 77 65 6e 74 20 61 77 61 79 2e 20 52 65 SC went away. Re 18920 63 6f 6e 6e 65 63 74 69 6e 67 2e 22 29 3b 0a 0a connecting.");.. 18930 09 09 09 63 61 63 6b 65 79 5f 70 63 73 63 5f 64 ...cackey_pcsc_d 18940 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 09 09 isconnect();.... 18950 63 61 63 6b 65 79 5f 70 63 73 63 5f 63 6f 6e 6e cackey_pcsc_conn 18960 65 63 74 28 29 3b 0a 0a 09 09 09 43 41 43 4b 45 ect();.....CACKE 18970 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 18980 54 72 79 69 6e 67 20 53 43 61 72 64 4c 69 73 74 Trying SCardList 18990 52 65 61 64 65 72 73 28 29 20 61 67 61 69 6e 22 Readers() again" 189a0 29 3b 0a 09 09 09 73 63 61 72 64 5f 6c 69 73 74 );....scard_list 189b0 72 65 61 64 65 72 73 5f 72 65 74 20 3d 20 53 43 readers_ret = SC 189c0 61 72 64 4c 69 73 74 52 65 61 64 65 72 73 28 2a ardListReaders(* 189d0 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 189e0 6c 65 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 le, NULL, NULL, 189f0 26 70 63 73 63 5f 72 65 61 64 65 72 73 5f 6c 65 &pcsc_readers_le 18a00 6e 29 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 73 n);...}....if (s 18a10 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 card_listreaders 18a20 5f 72 65 74 20 3d 3d 20 53 43 41 52 44 5f 53 5f _ret == SCARD_S_ 18a30 53 55 43 43 45 53 53 20 26 26 20 70 63 73 63 5f SUCCESS && pcsc_ 18a40 72 65 61 64 65 72 73 5f 6c 65 6e 20 21 3d 20 30 readers_len != 0 18a50 29 20 7b 0a 09 09 09 70 63 73 63 5f 72 65 61 64 ) {....pcsc_read 18a60 65 72 73 20 3d 20 6d 61 6c 6c 6f 63 28 70 63 73 ers = malloc(pcs 18a70 63 5f 72 65 61 64 65 72 73 5f 6c 65 6e 29 3b 0a c_readers_len);. 18a80 09 09 09 70 63 73 63 5f 72 65 61 64 65 72 73 5f ...pcsc_readers_ 18a90 73 20 3d 20 70 63 73 63 5f 72 65 61 64 65 72 73 s = pcsc_readers 18aa0 3b 0a 0a 09 09 09 73 63 61 72 64 5f 6c 69 73 74 ;.....scard_list 18ab0 72 65 61 64 65 72 73 5f 72 65 74 20 3d 20 53 43 readers_ret = SC 18ac0 61 72 64 4c 69 73 74 52 65 61 64 65 72 73 28 2a ardListReaders(* 18ad0 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 cackey_pcsc_hand 18ae0 6c 65 2c 20 4e 55 4c 4c 2c 20 70 63 73 63 5f 72 le, NULL, pcsc_r 18af0 65 61 64 65 72 73 2c 20 26 70 63 73 63 5f 72 65 eaders, &pcsc_re 18b00 61 64 65 72 73 5f 6c 65 6e 29 3b 0a 09 09 09 69 aders_len);....i 18b10 66 20 28 73 63 61 72 64 5f 6c 69 73 74 72 65 61 f (scard_listrea 18b20 64 65 72 73 5f 72 65 74 20 3d 3d 20 53 43 41 52 ders_ret == SCAR 18b30 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 D_S_SUCCESS) {.. 18b40 09 09 09 70 63 73 63 5f 72 65 61 64 65 72 73 5f ...pcsc_readers_ 18b50 65 20 3d 20 70 63 73 63 5f 72 65 61 64 65 72 73 e = pcsc_readers 18b60 20 2b 20 70 63 73 63 5f 72 65 61 64 65 72 73 5f + pcsc_readers_ 18b70 6c 65 6e 3b 0a 0a 09 09 09 09 2f 2a 20 53 74 61 len;....../* Sta 18b80 72 74 20 77 69 74 68 20 53 6c 6f 74 20 49 44 20 rt with Slot ID 18b90 31 2c 20 74 6f 20 61 76 6f 69 64 20 61 20 62 75 1, to avoid a bu 18ba0 67 20 69 6e 20 47 44 4d 20 6f 6e 20 52 48 45 4c g in GDM on RHEL 18bb0 20 2a 2f 0a 09 09 09 09 2f 2a 20 42 75 67 20 35 */...../* Bug 5 18bc0 39 34 39 31 31 3a 20 68 74 74 70 73 3a 2f 2f 62 94911: https://b 18bd0 75 67 7a 69 6c 6c 61 2e 72 65 64 68 61 74 2e 63 ugzilla.redhat.c 18be0 6f 6d 2f 73 68 6f 77 5f 62 75 67 2e 63 67 69 3f om/show_bug.cgi? 18bf0 69 64 3d 35 39 34 39 31 31 20 2a 2f 0a 09 09 09 id=594911 */.... 18c00 09 63 75 72 72 73 6c 6f 74 20 3d 20 31 3b 0a 09 .currslot = 1;.. 18c10 09 09 09 77 68 69 6c 65 20 28 70 63 73 63 5f 72 ...while (pcsc_r 18c20 65 61 64 65 72 73 20 3c 20 70 63 73 63 5f 72 65 eaders < pcsc_re 18c30 61 64 65 72 73 5f 65 29 20 7b 0a 09 09 09 09 09 aders_e) {...... 18c40 63 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e 20 curr_reader_len 18c50 3d 20 73 74 72 6c 65 6e 28 70 63 73 63 5f 72 65 = strlen(pcsc_re 18c60 61 64 65 72 73 29 3b 0a 0a 09 09 09 09 09 69 66 aders);.......if 18c70 20 28 28 70 63 73 63 5f 72 65 61 64 65 72 73 20 ((pcsc_readers 18c80 2b 20 63 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 + curr_reader_le 18c90 6e 29 20 3e 20 70 63 73 63 5f 72 65 61 64 65 72 n) > pcsc_reader 18ca0 73 5f 65 29 20 7b 0a 09 09 09 09 09 09 62 72 65 s_e) {.......bre 18cb0 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 ak;......}...... 18cc0 09 69 66 20 28 63 75 72 72 5f 72 65 61 64 65 72 .if (curr_reader 18cd0 5f 6c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 09 _len == 0) {.... 18ce0 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 7d ...break;......} 18cf0 0a 0a 09 09 09 09 09 69 66 20 28 63 75 72 72 73 .......if (currs 18d00 6c 6f 74 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 lot >= (sizeof(c 18d10 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 ackey_slots) / s 18d20 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f izeof(cackey_slo 18d30 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 09 09 09 ts[0]))) {...... 18d40 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 18d50 49 4e 54 46 28 22 46 6f 75 6e 64 20 6d 6f 72 65 INTF("Found more 18d60 20 72 65 61 64 65 72 73 20 74 68 61 6e 20 73 6c readers than sl 18d70 6f 74 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c ots are availabl 18d80 65 21 22 29 3b 0a 0a 09 09 09 09 09 09 62 72 65 e!");........bre 18d90 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 ak;......}...... 18da0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 18db0 49 4e 54 46 28 22 46 6f 75 6e 64 20 72 65 61 64 INTF("Found read 18dc0 65 72 3a 20 25 73 22 2c 20 70 63 73 63 5f 72 65 er: %s", pcsc_re 18dd0 61 64 65 72 73 29 3b 0a 0a 09 09 09 09 09 2f 2a aders);......./* 18de0 20 4f 6e 6c 79 20 75 70 64 61 74 65 20 74 68 65 Only update the 18df0 20 6c 69 73 74 20 6f 66 20 73 6c 6f 74 73 20 69 list of slots i 18e00 66 20 77 65 20 61 72 65 20 61 63 74 75 61 6c 6c f we are actuall 18e10 79 20 62 65 69 6e 67 20 61 73 6b 65 64 20 73 75 y being asked su 18e20 70 70 6c 79 20 74 68 65 20 73 6c 6f 74 20 69 6e pply the slot in 18e30 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 09 09 09 formation */.... 18e40 09 09 69 66 20 28 70 53 6c 6f 74 4c 69 73 74 29 ..if (pSlotList) 18e50 20 7b 0a 09 09 09 09 09 09 63 61 63 6b 65 79 5f {.......cackey_ 18e60 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e slots[currslot]. 18e70 61 63 74 69 76 65 20 3d 20 31 3b 0a 09 09 09 09 active = 1;..... 18e80 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 ..cackey_slots[c 18e90 75 72 72 73 6c 6f 74 5d 2e 70 63 73 63 5f 72 65 urrslot].pcsc_re 18ea0 61 64 65 72 20 3d 20 73 74 72 64 75 70 28 70 63 ader = strdup(pc 18eb0 73 63 5f 72 65 61 64 65 72 73 29 3b 0a 09 09 09 sc_readers);.... 18ec0 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b ...cackey_slots[ 18ed0 63 75 72 72 73 6c 6f 74 5d 2e 70 63 73 63 5f 63 currslot].pcsc_c 18ee0 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 20 3d 20 ard_connected = 18ef0 30 3b 0a 09 09 09 09 09 09 63 61 63 6b 65 79 5f 0;.......cackey_ 18f00 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e slots[currslot]. 18f10 74 72 61 6e 73 61 63 74 69 6f 6e 5f 64 65 70 74 transaction_dept 18f20 68 20 3d 20 30 3b 0a 09 09 09 09 09 09 63 61 63 h = 0;.......cac 18f30 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c key_slots[currsl 18f40 6f 74 5d 2e 74 72 61 6e 73 61 63 74 69 6f 6e 5f ot].transaction_ 18f50 6e 65 65 64 5f 68 77 5f 6c 6f 63 6b 20 3d 20 30 need_hw_lock = 0 18f60 3b 0a 09 09 09 09 09 09 63 61 63 6b 65 79 5f 73 ;.......cackey_s 18f70 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 73 lots[currslot].s 18f80 6c 6f 74 5f 72 65 73 65 74 20 3d 20 31 3b 0a 09 lot_reset = 1;.. 18f90 09 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 .....cackey_slot 18fa0 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 74 6f 6b 65 s[currslot].toke 18fb0 6e 5f 66 6c 61 67 73 20 3d 20 43 4b 46 5f 4c 4f n_flags = CKF_LO 18fc0 47 49 4e 5f 52 45 51 55 49 52 45 44 3b 0a 09 09 GIN_REQUIRED;... 18fd0 09 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 ....cackey_slots 18fe0 5b 63 75 72 72 73 6c 6f 74 5d 2e 6c 61 62 65 6c [currslot].label 18ff0 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 09 09 09 09 = NULL;........ 19000 63 61 63 6b 65 79 5f 6d 61 72 6b 5f 73 6c 6f 74 cackey_mark_slot 19010 5f 72 65 73 65 74 28 26 63 61 63 6b 65 79 5f 73 _reset(&cackey_s 19020 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 29 3b lots[currslot]); 19030 0a 09 09 09 09 09 7d 0a 09 09 09 09 09 63 75 72 ......}......cur 19040 72 73 6c 6f 74 2b 2b 3b 0a 0a 09 09 09 09 09 70 rslot++;.......p 19050 63 73 63 5f 72 65 61 64 65 72 73 20 2b 3d 20 63 csc_readers += c 19060 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e 20 2b urr_reader_len + 19070 20 31 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 2f 1;.....}....../ 19080 2a 20 53 74 61 72 74 20 77 69 74 68 20 53 6c 6f * Start with Slo 19090 74 20 49 44 20 31 2c 20 74 6f 20 61 76 6f 69 64 t ID 1, to avoid 190a0 20 61 20 62 75 67 20 69 6e 20 47 44 4d 20 6f 6e a bug in GDM on 190b0 20 52 48 45 4c 20 2a 2f 0a 09 09 09 09 2f 2a 20 RHEL */...../* 190c0 42 75 67 20 35 39 34 39 31 31 3a 20 68 74 74 70 Bug 594911: http 190d0 73 3a 2f 2f 62 75 67 7a 69 6c 6c 61 2e 72 65 64 s://bugzilla.red 190e0 68 61 74 2e 63 6f 6d 2f 73 68 6f 77 5f 62 75 67 hat.com/show_bug 190f0 2e 63 67 69 3f 69 64 3d 35 39 34 39 31 31 20 2a .cgi?id=594911 * 19100 2f 0a 09 09 09 09 69 66 20 28 63 75 72 72 73 6c /.....if (currsl 19110 6f 74 20 3e 20 31 29 20 7b 0a 09 09 09 09 09 2f ot > 1) {....../ 19120 2a 20 53 74 61 72 74 20 77 69 74 68 20 53 6c 6f * Start with Slo 19130 74 20 49 44 20 31 2c 20 74 6f 20 61 76 6f 69 64 t ID 1, to avoid 19140 20 61 20 62 75 67 20 69 6e 20 47 44 4d 20 6f 6e a bug in GDM on 19150 20 52 48 45 4c 20 2a 2f 0a 09 09 09 09 09 2f 2a RHEL */....../* 19160 20 42 75 67 20 35 39 34 39 31 31 3a 20 68 74 74 Bug 594911: htt 19170 70 73 3a 2f 2f 62 75 67 7a 69 6c 6c 61 2e 72 65 ps://bugzilla.re 19180 64 68 61 74 2e 63 6f 6d 2f 73 68 6f 77 5f 62 75 dhat.com/show_bu 19190 67 2e 63 67 69 3f 69 64 3d 35 39 34 39 31 31 20 g.cgi?id=594911 191a0 2a 2f 0a 09 09 09 09 09 73 6c 6f 74 5f 63 6f 75 */......slot_cou 191b0 6e 74 20 3d 20 63 75 72 72 73 6c 6f 74 20 2d 20 nt = currslot - 191c0 31 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 20 65 6c 1;.....}....} el 191d0 73 65 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f se {.....CACKEY_ 191e0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 65 DEBUG_PRINTF("Se 191f0 63 6f 6e 64 20 63 61 6c 6c 20 74 6f 20 53 43 61 cond call to SCa 19200 72 64 4c 69 73 74 52 65 61 64 65 72 73 20 66 61 rdListReaders fa 19210 69 6c 65 64 2c 20 72 65 74 75 72 6e 20 25 73 2f iled, return %s/ 19220 25 6c 69 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 %li", CACKEY_DEB 19230 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 UG_FUNC_SCARDERR 19240 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f 6c 69 _TO_STR(scard_li 19250 73 74 72 65 61 64 65 72 73 5f 72 65 74 29 2c 20 streaders_ret), 19260 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f 6c 69 73 (long) scard_lis 19270 74 72 65 61 64 65 72 73 5f 72 65 74 29 3b 0a 09 treaders_ret);.. 19280 09 09 7d 0a 0a 09 09 09 66 72 65 65 28 70 63 73 ..}.....free(pcs 19290 63 5f 72 65 61 64 65 72 73 5f 73 29 3b 0a 09 09 c_readers_s);... 192a0 7d 20 65 6c 73 65 20 7b 0a 09 09 09 43 41 43 4b } else {....CACK 192b0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 192c0 22 46 69 72 73 74 20 63 61 6c 6c 20 74 6f 20 53 "First call to S 192d0 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 73 20 CardListReaders 192e0 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 20 25 failed, return % 192f0 73 2f 25 6c 69 22 2c 20 43 41 43 4b 45 59 5f 44 s/%li", CACKEY_D 19300 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 EBUG_FUNC_SCARDE 19310 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f RR_TO_STR(scard_ 19320 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 29 listreaders_ret) 19330 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 64 5f 6c , (long) scard_l 19340 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 29 3b istreaders_ret); 19350 0a 09 09 7d 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f ...}..}...mutex_ 19360 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 19370 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 19380 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 19390 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 193a0 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 193b0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 193c0 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 193d0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 193e0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 193f0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i 19400 66 20 28 70 53 6c 6f 74 4c 69 73 74 20 3d 3d 20 f (pSlotList == 19410 4e 55 4c 4c 29 20 7b 0a 09 09 2a 70 75 6c 43 6f NULL) {...*pulCo 19420 75 6e 74 20 3d 20 73 6c 6f 74 5f 63 6f 75 6e 74 unt = slot_count 19430 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 19440 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 19450 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 2e ing CKR_OK (%i). 19460 20 20 46 6f 75 6e 64 20 25 6c 75 20 72 65 61 64 Found %lu read 19470 65 72 73 2c 20 62 75 74 20 6e 6f 74 20 73 74 6f ers, but not sto 19480 72 69 6e 67 20 49 44 73 20 28 70 53 6c 6f 74 4c ring IDs (pSlotL 19490 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 22 2c 20 43 ist == NULL)", C 194a0 4b 52 5f 4f 4b 2c 20 28 75 6e 73 69 67 6e 65 64 KR_OK, (unsigned 194b0 20 6c 6f 6e 67 29 20 73 6c 6f 74 5f 63 6f 75 6e long) slot_coun 194c0 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b t);....return(CK 194d0 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 63 6f 75 6e R_OK);..}...coun 194e0 74 20 3d 20 2a 70 75 6c 43 6f 75 6e 74 3b 0a 09 t = *pulCount;.. 194f0 69 66 20 28 63 6f 75 6e 74 20 3c 20 73 6c 6f 74 if (count < slot 19500 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 43 41 43 4b _count) {...CACK 19510 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 19520 22 45 72 72 6f 72 2e 20 55 73 65 72 20 61 6c 6c "Error. User all 19530 6f 63 61 74 65 64 20 25 6c 75 20 65 6e 74 72 69 ocated %lu entri 19540 65 73 2c 20 62 75 74 20 77 65 20 68 61 76 65 20 es, but we have 19550 25 6c 75 20 65 6e 74 72 69 65 73 2e 22 2c 20 63 %lu entries.", c 19560 6f 75 6e 74 2c 20 73 6c 6f 74 5f 63 6f 75 6e 74 ount, slot_count 19570 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 19580 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c _BUFFER_TOO_SMAL 19590 4c 29 3b 09 0a 09 7d 0a 0a 09 66 6f 72 20 28 63 L);...}...for (c 195a0 75 72 72 73 6c 6f 74 20 3d 20 30 3b 20 63 75 72 urrslot = 0; cur 195b0 72 73 6c 6f 74 20 3c 20 73 6c 6f 74 5f 63 6f 75 rslot < slot_cou 195c0 6e 74 3b 20 63 75 72 72 73 6c 6f 74 2b 2b 29 20 nt; currslot++) 195d0 7b 0a 09 09 2f 2a 20 53 74 61 72 74 20 77 69 74 {.../* Start wit 195e0 68 20 53 6c 6f 74 20 49 44 20 31 2c 20 74 6f 20 h Slot ID 1, to 195f0 61 76 6f 69 64 20 61 20 62 75 67 20 69 6e 20 47 avoid a bug in G 19600 44 4d 20 6f 6e 20 52 48 45 4c 20 2a 2f 0a 09 09 DM on RHEL */... 19610 2f 2a 20 42 75 67 20 35 39 34 39 31 31 3a 20 68 /* Bug 594911: h 19620 74 74 70 73 3a 2f 2f 62 75 67 7a 69 6c 6c 61 2e ttps://bugzilla. 19630 72 65 64 68 61 74 2e 63 6f 6d 2f 73 68 6f 77 5f redhat.com/show_ 19640 62 75 67 2e 63 67 69 3f 69 64 3d 35 39 34 39 31 bug.cgi?id=59491 19650 31 20 2a 2f 0a 09 09 70 53 6c 6f 74 4c 69 73 74 1 */...pSlotList 19660 5b 63 75 72 72 73 6c 6f 74 5d 20 3d 20 63 75 72 [currslot] = cur 19670 72 73 6c 6f 74 20 2b 20 31 3b 0a 09 7d 0a 0a 09 rslot + 1;..}... 19680 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 73 6c 6f 74 *pulCount = slot 19690 5f 63 6f 75 6e 74 3b 0a 0a 09 43 41 43 4b 45 59 _count;...CACKEY 196a0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 196b0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 eturning CKR_OK 196c0 28 25 69 29 2e 20 20 46 6f 75 6e 64 20 25 6c 75 (%i). Found %lu 196d0 20 72 65 61 64 65 72 73 2e 22 2c 20 43 4b 52 5f readers.", CKR_ 196e0 4f 4b 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f OK, (unsigned lo 196f0 6e 67 29 20 73 6c 6f 74 5f 63 6f 75 6e 74 29 3b ng) slot_count); 19700 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 19710 29 3b 0a 0a 09 74 6f 6b 65 6e 50 72 65 73 65 6e );...tokenPresen 19720 74 20 3d 20 74 6f 6b 65 6e 50 72 65 73 65 6e 74 t = tokenPresent 19730 3b 20 2f 2a 20 53 75 70 72 65 73 73 20 75 6e 75 ; /* Supress unu 19740 73 65 64 20 76 61 72 69 61 62 6c 65 20 77 61 72 sed variable war 19750 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 43 4b 5f 44 45 ning */.}..CK_DE 19760 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 19770 5f 52 56 2c 20 43 5f 47 65 74 53 6c 6f 74 49 6e _RV, C_GetSlotIn 19780 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 fo)(CK_SLOT_ID s 19790 6c 6f 74 49 44 2c 20 43 4b 5f 53 4c 4f 54 5f 49 lotID, CK_SLOT_I 197a0 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 7b NFO_PTR pInfo) { 197b0 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 54 46 38 ..static CK_UTF8 197c0 43 48 41 52 20 73 6c 6f 74 44 65 73 63 72 69 70 CHAR slotDescrip 197d0 74 69 6f 6e 5b 5d 20 3d 20 22 43 41 43 4b 65 79 tion[] = "CACKey 197e0 20 53 6c 6f 74 22 3b 0a 09 69 6e 74 20 6d 75 74 Slot";..int mut 197f0 65 78 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 ex_retval;..int 19800 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a 0a bytes_to_copy;.. 19810 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 19820 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 19830 0a 0a 09 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20 ...if (pInfo == 19840 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 NULL) {...CACKEY 19850 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 19860 72 72 6f 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e rror. pInfo is N 19870 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 ULL.");....retur 19880 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f n(CKR_ARGUMENTS_ 19890 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 BAD);..}...if (! 198a0 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 198b0 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 198c0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 198d0 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 198e0 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 198f0 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 19900 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 19910 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6c 6f 74 49 ;..}...if (slotI 19920 44 20 3c 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 D < 0 || slotID 19930 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 >= (sizeof(cacke 19940 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f y_slots) / sizeo 19950 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 f(cackey_slots[0 19960 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ]))) {...CACKEY_ 19970 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 19980 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f ror. Invalid slo 19990 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 t requested (%lu 199a0 29 2c 20 6f 75 74 73 69 64 65 20 6f 66 20 76 61 ), outside of va 199b0 6c 69 64 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 lid range", slot 199c0 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 ID);....return(C 199d0 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c KR_SLOT_ID_INVAL 199e0 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f ID);..}...mutex_ 199f0 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 19a00 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 mutex_lock(cacke 19a10 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 19a20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 19a30 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 19a40 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 19a50 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 or. Locking fai 19a60 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 19a70 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 19a80 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 ROR);..}...if (c 19a90 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 ackey_slots[slot 19aa0 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 29 ID].active == 0) 19ab0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 19ac0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 19ad0 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 Invalid slot re 19ae0 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 73 quested (%lu), s 19af0 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c lot not currentl 19b00 79 20 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 49 y active", slotI 19b10 44 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d 75 D);....cackey_mu 19b20 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 19b30 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 y_biglock);....r 19b40 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 eturn(CKR_SLOT_I 19b50 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a D_INVALID);..}.. 19b60 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 .pInfo->flags = 19b70 43 4b 46 5f 52 45 4d 4f 56 41 42 4c 45 5f 44 45 CKF_REMOVABLE_DE 19b80 56 49 43 45 20 7c 20 43 4b 46 5f 48 57 5f 53 4c VICE | CKF_HW_SL 19b90 4f 54 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 OT;...if (cackey 19ba0 5f 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 28 26 _token_present(& 19bb0 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo 19bc0 74 49 44 5d 29 20 3d 3d 20 43 41 43 4b 45 59 5f tID]) == CACKEY_ 19bd0 50 43 53 43 5f 53 5f 54 4f 4b 45 4e 50 52 45 53 PCSC_S_TOKENPRES 19be0 45 4e 54 29 20 7b 0a 09 09 70 49 6e 66 6f 2d 3e ENT) {...pInfo-> 19bf0 66 6c 61 67 73 20 7c 3d 20 43 4b 46 5f 54 4f 4b flags |= CKF_TOK 19c00 45 4e 5f 50 52 45 53 45 4e 54 3b 0a 09 7d 0a 0a EN_PRESENT;..}.. 19c10 09 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 20 3d .bytes_to_copy = 19c20 20 73 74 72 6c 65 6e 28 63 61 63 6b 65 79 5f 73 strlen(cackey_s 19c30 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 70 63 73 lots[slotID].pcs 19c40 63 5f 72 65 61 64 65 72 29 3b 0a 09 69 66 20 28 c_reader);..if ( 19c50 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 61 sizeof(pInfo->ma 19c60 6e 75 66 61 63 74 75 72 65 72 49 44 29 20 3c 20 nufacturerID) < 19c70 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 20 7b bytes_to_copy) { 19c80 0a 09 09 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 ...bytes_to_copy 19c90 20 3d 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d = sizeof(pInfo- 19ca0 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 >manufacturerID) 19cb0 3b 0a 09 7d 0a 09 6d 65 6d 63 70 79 28 70 49 6e ;..}..memcpy(pIn 19cc0 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 fo->manufacturer 19cd0 49 44 2c 20 63 61 63 6b 65 79 5f 73 6c 6f 74 73 ID, cackey_slots 19ce0 5b 73 6c 6f 74 49 44 5d 2e 70 63 73 63 5f 72 65 [slotID].pcsc_re 19cf0 61 64 65 72 2c 20 62 79 74 65 73 5f 74 6f 5f 63 ader, bytes_to_c 19d00 6f 70 79 29 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 opy);...mutex_re 19d10 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 19d20 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 19d30 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 19d40 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 19d50 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 19d60 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 19d70 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 or. Unlocking f 19d80 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 ailed.");....ret 19d90 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 19da0 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 6d 65 6d ERROR);..}...mem 19db0 73 65 74 28 70 49 6e 66 6f 2d 3e 73 6c 6f 74 44 set(pInfo->slotD 19dc0 65 73 63 72 69 70 74 69 6f 6e 2c 20 27 20 27 2c escription, ' ', 19dd0 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 73 sizeof(pInfo->s 19de0 6c 6f 74 44 65 73 63 72 69 70 74 69 6f 6e 29 29 lotDescription)) 19df0 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d ;..memcpy(pInfo- 19e00 3e 73 6c 6f 74 44 65 73 63 72 69 70 74 69 6f 6e >slotDescription 19e10 2c 20 73 6c 6f 74 44 65 73 63 72 69 70 74 69 6f , slotDescriptio 19e20 6e 2c 20 73 69 7a 65 6f 66 28 73 6c 6f 74 44 65 n, sizeof(slotDe 19e30 73 63 72 69 70 74 69 6f 6e 29 20 2d 20 31 29 3b scription) - 1); 19e40 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d ...memset(pInfo- 19e50 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c >manufacturerID, 19e60 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e ' ', sizeof(pIn 19e70 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 fo->manufacturer 19e80 49 44 29 29 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 68 ID));...pInfo->h 19e90 61 72 64 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d ardwareVersion.m 19ea0 61 6a 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 ajor = (cackey_g 19eb0 65 74 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 31 etversion() >> 1 19ec0 36 29 20 26 20 30 78 66 66 3b 0a 09 70 49 6e 66 6) & 0xff;..pInf 19ed0 6f 2d 3e 68 61 72 64 77 61 72 65 56 65 72 73 69 o->hardwareVersi 19ee0 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 63 61 63 6b on.minor = (cack 19ef0 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 20 ey_getversion() 19f00 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a 09 >> 8) & 0xff;... 19f10 70 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 72 65 56 pInfo->firmwareV 19f20 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 30 ersion.major = 0 19f30 78 30 30 3b 0a 09 70 49 6e 66 6f 2d 3e 66 69 72 x00;..pInfo->fir 19f40 6d 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e mwareVersion.min 19f50 6f 72 20 3d 20 30 78 30 30 3b 0a 0a 09 43 41 43 or = 0x00;...CAC 19f60 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 19f70 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 19f80 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b OK (%i)", CKR_OK 19f90 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 19fa0 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e OK);.}..CK_DEFIN 19fb0 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 19fc0 2c 20 43 5f 47 65 74 54 6f 6b 65 6e 49 6e 66 6f , C_GetTokenInfo 19fd0 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f )(CK_SLOT_ID slo 19fe0 74 49 44 2c 20 43 4b 5f 54 4f 4b 45 4e 5f 49 4e tID, CK_TOKEN_IN 19ff0 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 7b 0a FO_PTR pInfo) {. 1a000 09 73 74 61 74 69 63 20 43 4b 5f 55 54 46 38 43 .static CK_UTF8C 1a010 48 41 52 20 6d 61 6e 75 66 61 63 74 75 72 65 72 HAR manufacturer 1a020 49 44 5b 5d 20 3d 20 22 55 2e 53 2e 20 47 6f 76 ID[] = "U.S. Gov 1a030 65 72 6e 6d 65 6e 74 22 3b 0a 09 73 74 61 74 69 ernment";..stati 1a040 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20 64 65 c CK_UTF8CHAR de 1a050 66 61 75 6c 74 4c 61 62 65 6c 5b 5d 20 3d 20 22 faultLabel[] = " 1a060 55 6e 6b 6e 6f 77 6e 20 54 6f 6b 65 6e 22 3b 0a Unknown Token";. 1a070 09 73 74 61 74 69 63 20 43 4b 5f 55 54 46 38 43 .static CK_UTF8C 1a080 48 41 52 20 6d 6f 64 65 6c 5b 5d 20 3d 20 22 43 HAR model[] = "C 1a090 41 43 20 54 6f 6b 65 6e 22 3b 0a 09 73 74 72 75 AC Token";..stru 1a0a0 63 74 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 69 ct cackey_pcsc_i 1a0b0 64 65 6e 74 69 74 79 20 2a 70 63 73 63 5f 69 64 dentity *pcsc_id 1a0c0 65 6e 74 69 74 69 65 73 3b 0a 09 75 6e 73 69 67 entities;..unsig 1a0d0 6e 65 64 20 6c 6f 6e 67 20 6e 75 6d 5f 63 65 72 ned long num_cer 1a0e0 74 73 3b 0a 09 73 73 69 7a 65 5f 74 20 6c 61 62 ts;..ssize_t lab 1a0f0 65 6c 5f 72 65 74 3b 0a 09 69 6e 74 20 6d 75 74 el_ret;..int mut 1a100 65 78 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 ex_retval;..int 1a110 75 73 65 5f 64 65 66 61 75 6c 74 5f 6c 61 62 65 use_default_labe 1a120 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 l;...CACKEY_DEBU 1a130 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 1a140 2e 22 29 3b 0a 0a 09 69 66 20 28 70 49 6e 66 6f .");...if (pInfo 1a150 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 == NULL) {...CA 1a160 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1a170 46 28 22 45 72 72 6f 72 2e 20 70 49 6e 66 6f 20 F("Error. pInfo 1a180 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 is NULL.");....r 1a190 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 eturn(CKR_ARGUME 1a1a0 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 NTS_BAD);..}...i 1a1b0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 1a1c0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 1a1d0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1a1e0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 1a1f0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 1a200 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 1a210 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 1a220 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 ZED);..}...if (s 1a230 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f lotID < 0 || slo 1a240 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 tID >= (sizeof(c 1a250 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 ackey_slots) / s 1a260 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f izeof(cackey_slo 1a270 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 ts[0]))) {...CAC 1a280 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1a290 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 ("Error. Invalid 1a2a0 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 slot requested 1a2b0 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 6f (%lu), outside o 1a2c0 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 f valid range", 1a2d0 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 slotID);....retu 1a2e0 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 rn(CKR_SLOT_ID_I 1a2f0 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 NVALID);..}...mu 1a300 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 1a310 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 key_mutex_lock(c 1a320 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 1a330 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 1a340 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 1a350 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1a360 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 "Error. Locking 1a370 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 1a380 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 1a390 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i 1a3a0 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b f (cackey_slots[ 1a3b0 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 3d slotID].active = 1a3c0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 1a3d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1a3e0 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f ror. Invalid slo 1a3f0 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 t requested (%lu 1a400 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72 ), slot not curr 1a410 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20 73 ently active", s 1a420 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b 65 lotID);....cacke 1a430 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 1a440 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 1a450 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c ...return(CKR_SL 1a460 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a OT_ID_INVALID);. 1a470 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f .}...if (cackey_ 1a480 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 28 26 63 token_present(&c 1a490 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 ackey_slots[slot 1a4a0 49 44 5d 29 20 21 3d 20 43 41 43 4b 45 59 5f 50 ID]) != CACKEY_P 1a4b0 43 53 43 5f 53 5f 54 4f 4b 45 4e 50 52 45 53 45 CSC_S_TOKENPRESE 1a4c0 4e 54 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 NT) {...CACKEY_D 1a4d0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 4e 6f 20 EBUG_PRINTF("No 1a4e0 74 6f 6b 65 6e 20 69 73 20 70 72 65 73 65 6e 74 token is present 1a4f0 20 69 6e 20 73 6c 6f 74 49 44 20 3d 20 25 6c 75 in slotID = %lu 1a500 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 ", slotID);....c 1a510 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 1a520 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 1a530 6b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b k);....return(CK 1a540 52 5f 54 4f 4b 45 4e 5f 4e 4f 54 5f 50 52 45 53 R_TOKEN_NOT_PRES 1a550 45 4e 54 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 ENT);..}...mutex 1a560 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 1a570 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 1a580 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 1a590 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 1a5a0 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 1a5b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1a5c0 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e Error. Unlockin 1a5d0 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 1a5e0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 1a5f0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 1a600 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 74 6f 6b /* Determine tok 1a610 65 6e 20 6c 61 62 65 6c 20 66 72 6f 6d 20 63 65 en label from ce 1a620 72 74 69 66 69 63 61 74 65 73 20 2a 2f 0a 09 6d rtificates */..m 1a630 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6c 61 62 emset(pInfo->lab 1a640 65 6c 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 el, ' ', sizeof( 1a650 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 29 29 3b 0a pInfo->label));. 1a660 09 75 73 65 5f 64 65 66 61 75 6c 74 5f 6c 61 62 .use_default_lab 1a670 65 6c 20 3d 20 31 3b 0a 0a 09 69 66 20 28 63 61 el = 1;...if (ca 1a680 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 ckey_slots[slotI 1a690 44 5d 2e 6c 61 62 65 6c 20 3d 3d 20 4e 55 4c 4c D].label == NULL 1a6a0 29 20 7b 0a 09 09 70 63 73 63 5f 69 64 65 6e 74 ) {...pcsc_ident 1a6b0 69 74 69 65 73 20 3d 20 63 61 63 6b 65 79 5f 72 ities = cackey_r 1a6c0 65 61 64 5f 63 65 72 74 73 28 26 63 61 63 6b 65 ead_certs(&cacke 1a6d0 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2c y_slots[slotID], 1a6e0 20 4e 55 4c 4c 2c 20 26 6e 75 6d 5f 63 65 72 74 NULL, &num_cert 1a6f0 73 29 3b 0a 09 09 69 66 20 28 70 63 73 63 5f 69 s);...if (pcsc_i 1a700 64 65 6e 74 69 74 69 65 73 20 21 3d 20 4e 55 4c dentities != NUL 1a710 4c 29 20 7b 0a 09 09 09 69 66 20 28 6e 75 6d 5f L) {....if (num_ 1a720 63 65 72 74 73 20 3e 20 30 29 20 7b 0a 09 09 09 certs > 0) {.... 1a730 09 6c 61 62 65 6c 5f 72 65 74 20 3d 20 63 61 63 .label_ret = cac 1a740 6b 65 79 5f 70 63 73 63 5f 69 64 65 6e 74 69 74 key_pcsc_identit 1a750 79 5f 74 6f 5f 6c 61 62 65 6c 28 70 63 73 63 5f y_to_label(pcsc_ 1a760 69 64 65 6e 74 69 74 69 65 73 2c 20 70 49 6e 66 identities, pInf 1a770 6f 2d 3e 6c 61 62 65 6c 2c 20 73 69 7a 65 6f 66 o->label, sizeof 1a780 28 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 29 29 3b (pInfo->label)); 1a790 0a 09 09 09 09 69 66 20 28 6c 61 62 65 6c 5f 72 .....if (label_r 1a7a0 65 74 20 3e 20 30 29 20 7b 0a 09 09 09 09 09 75 et > 0) {......u 1a7b0 73 65 5f 64 65 66 61 75 6c 74 5f 6c 61 62 65 6c se_default_label 1a7c0 20 3d 20 30 3b 0a 0a 09 09 09 09 09 63 61 63 6b = 0;.......cack 1a7d0 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d ey_slots[slotID] 1a7e0 2e 6c 61 62 65 6c 20 3d 20 6d 61 6c 6c 6f 63 28 .label = malloc( 1a7f0 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6c 61 sizeof(pInfo->la 1a800 62 65 6c 29 29 3b 0a 0a 09 09 09 09 09 6d 65 6d bel));.......mem 1a810 63 70 79 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 cpy(cackey_slots 1a820 5b 73 6c 6f 74 49 44 5d 2e 6c 61 62 65 6c 2c 20 [slotID].label, 1a830 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20 73 69 pInfo->label, si 1a840 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6c 61 62 65 zeof(pInfo->labe 1a850 6c 29 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 0a l));.....}....}. 1a860 0a 09 09 09 63 61 63 6b 65 79 5f 66 72 65 65 5f ....cackey_free_ 1a870 63 65 72 74 73 28 70 63 73 63 5f 69 64 65 6e 74 certs(pcsc_ident 1a880 69 74 69 65 73 2c 20 6e 75 6d 5f 63 65 72 74 73 ities, num_certs 1a890 2c 20 31 29 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 , 1);...}..} els 1a8a0 65 20 7b 0a 09 09 6d 65 6d 63 70 79 28 70 49 6e e {...memcpy(pIn 1a8b0 66 6f 2d 3e 6c 61 62 65 6c 2c 20 63 61 63 6b 65 fo->label, cacke 1a8c0 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e y_slots[slotID]. 1a8d0 6c 61 62 65 6c 2c 20 73 69 7a 65 6f 66 28 70 49 label, sizeof(pI 1a8e0 6e 66 6f 2d 3e 6c 61 62 65 6c 29 29 3b 0a 0a 09 nfo->label));... 1a8f0 09 75 73 65 5f 64 65 66 61 75 6c 74 5f 6c 61 62 .use_default_lab 1a900 65 6c 20 3d 20 30 3b 0a 09 7d 0a 0a 09 69 66 20 el = 0;..}...if 1a910 28 75 73 65 5f 64 65 66 61 75 6c 74 5f 6c 61 62 (use_default_lab 1a920 65 6c 29 20 7b 0a 09 09 6d 65 6d 63 70 79 28 70 el) {...memcpy(p 1a930 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20 64 65 66 Info->label, def 1a940 61 75 6c 74 4c 61 62 65 6c 2c 20 73 69 7a 65 6f aultLabel, sizeo 1a950 66 28 64 65 66 61 75 6c 74 4c 61 62 65 6c 29 20 f(defaultLabel) 1a960 2d 20 31 29 3b 0a 09 7d 0a 0a 09 6d 65 6d 73 65 - 1);..}...memse 1a970 74 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 t(pInfo->manufac 1a980 74 75 72 65 72 49 44 2c 20 27 20 27 2c 20 73 69 turerID, ' ', si 1a990 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 zeof(pInfo->manu 1a9a0 66 61 63 74 75 72 65 72 49 44 29 29 3b 0a 09 6d facturerID));..m 1a9b0 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6d 61 6e emcpy(pInfo->man 1a9c0 75 66 61 63 74 75 72 65 72 49 44 2c 20 6d 61 6e ufacturerID, man 1a9d0 75 66 61 63 74 75 72 65 72 49 44 2c 20 73 69 7a ufacturerID, siz 1a9e0 65 6f 66 28 6d 61 6e 75 66 61 63 74 75 72 65 72 eof(manufacturer 1a9f0 49 44 29 20 2d 20 31 29 3b 0a 0a 09 6d 65 6d 73 ID) - 1);...mems 1aa00 65 74 28 70 49 6e 66 6f 2d 3e 6d 6f 64 65 6c 2c et(pInfo->model, 1aa10 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e ' ', sizeof(pIn 1aa20 66 6f 2d 3e 6d 6f 64 65 6c 29 29 3b 0a 09 6d 65 fo->model));..me 1aa30 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6d 6f 64 65 mcpy(pInfo->mode 1aa40 6c 2c 20 6d 6f 64 65 6c 2c 20 73 69 7a 65 6f 66 l, model, sizeof 1aa50 28 6d 6f 64 65 6c 29 20 2d 20 31 29 3b 0a 0a 09 (model) - 1);... 1aa60 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 73 65 memset(pInfo->se 1aa70 72 69 61 6c 4e 75 6d 62 65 72 2c 20 27 20 27 2c rialNumber, ' ', 1aa80 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 73 sizeof(pInfo->s 1aa90 65 72 69 61 6c 4e 75 6d 62 65 72 29 29 3b 0a 0a erialNumber));.. 1aaa0 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 75 .memset(pInfo->u 1aab0 74 63 54 69 6d 65 2c 20 27 20 27 2c 20 73 69 7a tcTime, ' ', siz 1aac0 65 6f 66 28 70 49 6e 66 6f 2d 3e 75 74 63 54 69 eof(pInfo->utcTi 1aad0 6d 65 29 29 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 68 me));...pInfo->h 1aae0 61 72 64 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d ardwareVersion.m 1aaf0 61 6a 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 ajor = (cackey_g 1ab00 65 74 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 31 etversion() >> 1 1ab10 36 29 20 26 20 30 78 66 66 3b 0a 09 70 49 6e 66 6) & 0xff;..pInf 1ab20 6f 2d 3e 68 61 72 64 77 61 72 65 56 65 72 73 69 o->hardwareVersi 1ab30 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 63 61 63 6b on.minor = (cack 1ab40 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 20 ey_getversion() 1ab50 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a 09 >> 8) & 0xff;... 1ab60 70 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 72 65 56 pInfo->firmwareV 1ab70 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 30 ersion.major = 0 1ab80 78 30 30 3b 0a 09 70 49 6e 66 6f 2d 3e 66 69 72 x00;..pInfo->fir 1ab90 6d 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e mwareVersion.min 1aba0 6f 72 20 3d 20 30 78 30 30 3b 0a 0a 09 70 49 6e or = 0x00;...pIn 1abb0 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 43 4b 46 5f fo->flags = CKF_ 1abc0 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 20 WRITE_PROTECTED 1abd0 7c 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 49 | CKF_USER_PIN_I 1abe0 4e 49 54 49 41 4c 49 5a 45 44 20 7c 20 43 4b 46 NITIALIZED | CKF 1abf0 5f 54 4f 4b 45 4e 5f 49 4e 49 54 49 41 4c 49 5a _TOKEN_INITIALIZ 1ac00 45 44 20 7c 20 63 61 63 6b 65 79 5f 73 6c 6f 74 ED | cackey_slot 1ac10 73 5b 73 6c 6f 74 49 44 5d 2e 74 6f 6b 65 6e 5f s[slotID].token_ 1ac20 66 6c 61 67 73 3b 0a 0a 09 70 49 6e 66 6f 2d 3e flags;...pInfo-> 1ac30 75 6c 4d 61 78 53 65 73 73 69 6f 6e 43 6f 75 6e ulMaxSessionCoun 1ac40 74 20 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b t = (sizeof(cack 1ac50 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 1ac60 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 1ac70 73 69 6f 6e 73 5b 30 5d 29 29 20 2d 20 31 3b 0a sions[0])) - 1;. 1ac80 09 70 49 6e 66 6f 2d 3e 75 6c 53 65 73 73 69 6f .pInfo->ulSessio 1ac90 6e 43 6f 75 6e 74 20 3d 20 43 4b 5f 55 4e 41 56 nCount = CK_UNAV 1aca0 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 AILABLE_INFORMAT 1acb0 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 4d ION;..pInfo->ulM 1acc0 61 78 52 77 53 65 73 73 69 6f 6e 43 6f 75 6e 74 axRwSessionCount 1acd0 20 3d 20 30 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c = 0;..pInfo->ul 1ace0 52 77 53 65 73 73 69 6f 6e 43 6f 75 6e 74 20 3d RwSessionCount = 1acf0 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f CK_UNAVAILABLE_ 1ad00 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 INFORMATION;..pI 1ad10 6e 66 6f 2d 3e 75 6c 4d 61 78 50 69 6e 4c 65 6e nfo->ulMaxPinLen 1ad20 20 3d 20 31 32 38 3b 0a 09 70 49 6e 66 6f 2d 3e = 128;..pInfo-> 1ad30 75 6c 4d 69 6e 50 69 6e 4c 65 6e 20 3d 20 30 3b ulMinPinLen = 0; 1ad40 0a 09 70 49 6e 66 6f 2d 3e 75 6c 54 6f 74 61 6c ..pInfo->ulTotal 1ad50 50 75 62 6c 69 63 4d 65 6d 6f 72 79 20 3d 20 43 PublicMemory = C 1ad60 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e K_UNAVAILABLE_IN 1ad70 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 FORMATION;..pInf 1ad80 6f 2d 3e 75 6c 46 72 65 65 50 75 62 6c 69 63 4d o->ulFreePublicM 1ad90 65 6d 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 56 41 emory = CK_UNAVA 1ada0 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 ILABLE_INFORMATI 1adb0 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 54 6f ON;..pInfo->ulTo 1adc0 74 61 6c 50 72 69 76 61 74 65 4d 65 6d 6f 72 79 talPrivateMemory 1add0 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c = CK_UNAVAILABL 1ade0 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09 E_INFORMATION;.. 1adf0 70 49 6e 66 6f 2d 3e 75 6c 46 72 65 65 50 72 69 pInfo->ulFreePri 1ae00 76 61 74 65 4d 65 6d 6f 72 79 20 3d 20 43 4b 5f vateMemory = CK_ 1ae10 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f UNAVAILABLE_INFO 1ae20 52 4d 41 54 49 4f 4e 3b 0a 0a 09 43 41 43 4b 45 RMATION;...CACKE 1ae30 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1ae40 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 1ae50 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b (%i)", CKR_OK); 1ae60 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 1ae70 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1ae80 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1ae90 43 5f 57 61 69 74 46 6f 72 53 6c 6f 74 45 76 65 C_WaitForSlotEve 1aea0 6e 74 29 28 43 4b 5f 46 4c 41 47 53 20 66 6c 61 nt)(CK_FLAGS fla 1aeb0 67 73 2c 20 43 4b 5f 53 4c 4f 54 5f 49 44 5f 50 gs, CK_SLOT_ID_P 1aec0 54 52 20 70 53 6c 6f 74 49 44 2c 20 43 4b 5f 56 TR pSlotID, CK_V 1aed0 4f 49 44 5f 50 54 52 20 70 52 65 73 65 72 76 65 OID_PTR pReserve 1aee0 64 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 d) {..CACKEY_DEB 1aef0 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 1af00 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 52 65 73 d.");...if (pRes 1af10 65 72 76 65 64 20 21 3d 20 4e 55 4c 4c 29 20 7b erved != NULL) { 1af20 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1af30 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 PRINTF("Error. p 1af40 52 65 73 65 72 76 65 64 20 69 73 20 6e 6f 74 20 Reserved is not 1af50 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 NULL.");....retu 1af60 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 rn(CKR_ARGUMENTS 1af70 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 _BAD);..}...if ( 1af80 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 1af90 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 1afa0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1afb0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 1afc0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 1afd0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 1afe0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 1aff0 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 58 58 58 3a 20 );..}.../* XXX: 1b000 54 4f 44 4f 3a 20 49 6d 70 6c 65 6d 65 6e 74 20 TODO: Implement 1b010 74 68 69 73 2e 2e 2e 20 2a 2f 0a 09 43 41 43 4b this... */..CACK 1b020 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1b030 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 1b040 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1b050 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 1b060 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1b070 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 1b080 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 1b090 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 1b0a0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 1b0b0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 CTION(CK_RV, C_G 1b0c0 65 74 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 29 etMechanismList) 1b0d0 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 (CK_SLOT_ID slot 1b0e0 49 44 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d ID, CK_MECHANISM 1b0f0 5f 54 59 50 45 5f 50 54 52 20 70 4d 65 63 68 61 _TYPE_PTR pMecha 1b100 6e 69 73 6d 4c 69 73 74 2c 20 43 4b 5f 55 4c 4f nismList, CK_ULO 1b110 4e 47 5f 50 54 52 20 70 75 6c 43 6f 75 6e 74 29 NG_PTR pulCount) 1b120 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 1b130 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 1b140 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 1b150 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 1b160 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1b170 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1b180 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 1b190 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1b1a0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 1b1b0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 1b1c0 0a 09 69 66 20 28 70 75 6c 43 6f 75 6e 74 20 3d ..if (pulCount = 1b1d0 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b = NULL) {...CACK 1b1e0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1b1f0 22 45 72 72 6f 72 2e 20 20 70 75 6c 43 6f 75 6e "Error. pulCoun 1b200 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 t is NULL.");... 1b210 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 .return(CKR_ARGU 1b220 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a MENTS_BAD);..}.. 1b230 09 69 66 20 28 70 4d 65 63 68 61 6e 69 73 6d 4c .if (pMechanismL 1b240 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 ist == NULL) {.. 1b250 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 31 3b 0a .*pulCount = 1;. 1b260 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1b270 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 1b280 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 g CKR_OK (%i)", 1b290 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 CKR_OK);....retu 1b2a0 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a rn(CKR_OK);..}.. 1b2b0 09 69 66 20 28 2a 70 75 6c 43 6f 75 6e 74 20 3c .if (*pulCount < 1b2c0 20 31 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 1) {...CACKEY_D 1b2d0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1b2e0 6f 72 2e 20 20 42 75 66 66 65 72 20 74 6f 6f 20 or. Buffer too 1b2f0 73 6d 61 6c 6c 2e 22 29 3b 0a 0a 09 09 72 65 74 small.");....ret 1b300 75 72 6e 28 43 4b 52 5f 42 55 46 46 45 52 5f 54 urn(CKR_BUFFER_T 1b310 4f 4f 5f 53 4d 41 4c 4c 29 3b 0a 09 7d 0a 0a 09 OO_SMALL);..}... 1b320 70 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 5b 30 pMechanismList[0 1b330 5d 20 3d 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 ] = CKM_RSA_PKCS 1b340 3b 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 31 ;..*pulCount = 1 1b350 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 1b360 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1b370 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c ng CKR_OK (%i)", 1b380 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 CKR_OK);...retu 1b390 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 rn(CKR_OK);.}..C 1b3a0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 1b3b0 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 4d 65 N(CK_RV, C_GetMe 1b3c0 63 68 61 6e 69 73 6d 49 6e 66 6f 29 28 43 4b 5f chanismInfo)(CK_ 1b3d0 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 SLOT_ID slotID, 1b3e0 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 59 50 CK_MECHANISM_TYP 1b3f0 45 20 74 79 70 65 2c 20 43 4b 5f 4d 45 43 48 41 E type, CK_MECHA 1b400 4e 49 53 4d 5f 49 4e 46 4f 5f 50 54 52 20 70 49 NISM_INFO_PTR pI 1b410 6e 66 6f 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 nfo) {..int mute 1b420 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b x_retval;...CACK 1b430 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1b440 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 1b450 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 (pInfo == NULL) 1b460 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1b470 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1b480 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 pInfo is NULL." 1b490 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1b4a0 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b _ARGUMENTS_BAD); 1b4b0 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ..}...if (!cacke 1b4c0 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 1b4d0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1b4e0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1b4f0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 1b500 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1b510 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 1b520 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 1b530 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 3c 20 30 ..if (slotID < 0 1b540 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 28 73 || slotID >= (s 1b550 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f izeof(cackey_slo 1b560 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ts) / sizeof(cac 1b570 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 20 key_slots[0]))) 1b580 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1b590 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1b5a0 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 Invalid slot req 1b5b0 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 6f 75 uested (%lu), ou 1b5c0 74 73 69 64 65 20 6f 66 20 76 61 6c 69 64 20 72 tside of valid r 1b5d0 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a ange", slotID);. 1b5e0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c ...return(CKR_SL 1b5f0 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a OT_ID_INVALID);. 1b600 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 .}...mutex_retva 1b610 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 1b620 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 _lock(cackey_big 1b630 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 lock);..if (mute 1b640 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b x_retval != 0) { 1b650 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1b660 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1b670 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 Locking failed." 1b680 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1b690 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 1b6a0 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 ..}...if (cackey 1b6b0 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 _slots[slotID].a 1b6c0 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09 09 ctive == 0) {... 1b6d0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1b6e0 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 NTF("Error. Inva 1b6f0 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 lid slot request 1b700 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 6e ed (%lu), slot n 1b710 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 ot currently act 1b720 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a ive", slotID);.. 1b730 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 1b740 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 1b750 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72 6e lock);....return 1b760 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 (CKR_SLOT_ID_INV 1b770 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 ALID);..}...mute 1b780 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 1b790 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 1b7a0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 1b7b0 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 1b7c0 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 1b7d0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1b7e0 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 "Error. Unlocki 1b7f0 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 1b800 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 1b810 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 1b820 09 73 77 69 74 63 68 20 28 74 79 70 65 29 20 7b .switch (type) { 1b830 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 53 41 5f ...case CKM_RSA_ 1b840 50 4b 43 53 3a 0a 09 09 09 70 49 6e 66 6f 2d 3e PKCS:....pInfo-> 1b850 75 6c 4d 69 6e 4b 65 79 53 69 7a 65 20 3d 20 35 ulMinKeySize = 5 1b860 31 32 3b 0a 09 09 09 70 49 6e 66 6f 2d 3e 75 6c 12;....pInfo->ul 1b870 4d 61 78 4b 65 79 53 69 7a 65 20 3d 20 38 31 39 MaxKeySize = 819 1b880 32 3b 0a 09 09 09 70 49 6e 66 6f 2d 3e 66 6c 61 2;....pInfo->fla 1b890 67 73 20 3d 20 43 4b 46 5f 48 57 20 7c 20 43 4b gs = CKF_HW | CK 1b8a0 46 5f 45 4e 43 52 59 50 54 20 7c 20 43 4b 46 5f F_ENCRYPT | CKF_ 1b8b0 44 45 43 52 59 50 54 20 7c 20 43 4b 46 5f 53 49 DECRYPT | CKF_SI 1b8c0 47 4e 20 7c 20 43 4b 46 5f 56 45 52 49 46 59 3b GN | CKF_VERIFY; 1b8d0 0a 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 ....break;..}... 1b8e0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1b8f0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 1b900 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR 1b910 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C 1b920 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 KR_OK);.}../* We 1b930 20 64 6f 6e 27 74 20 73 75 70 70 6f 72 74 20 74 don't support t 1b940 68 69 73 20 6d 65 74 68 6f 64 2e 20 2a 2f 0a 43 his method. */.C 1b950 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f K_DEFINE_FUNCTIO 1b960 4e 28 43 4b 5f 52 56 2c 20 43 5f 49 6e 69 74 54 N(CK_RV, C_InitT 1b970 6f 6b 65 6e 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 oken)(CK_SLOT_ID 1b980 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 55 54 46 38 slotID, CK_UTF8 1b990 43 48 41 52 5f 50 54 52 20 70 50 69 6e 2c 20 43 CHAR_PTR pPin, C 1b9a0 4b 5f 55 4c 4f 4e 47 20 75 6c 50 69 6e 4c 65 6e K_ULONG ulPinLen 1b9b0 2c 20 43 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 , CK_UTF8CHAR_PT 1b9c0 52 20 70 4c 61 62 65 6c 29 20 7b 0a 09 43 41 43 R pLabel) {..CAC 1b9d0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1b9e0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 1b9f0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 1ba00 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 1ba10 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1ba20 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 1ba30 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 1ba40 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 1ba50 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 1ba60 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 1ba70 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1ba80 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 54 4f Returning CKR_TO 1ba90 4b 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 KEN_WRITE_PROTEC 1baa0 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 54 TED (%i)", CKR_T 1bab0 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 OKEN_WRITE_PROTE 1bac0 43 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 CTED);...return( 1bad0 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 45 5f CKR_TOKEN_WRITE_ 1bae0 50 52 4f 54 45 43 54 45 44 29 3b 0a 7d 0a 0a 2f PROTECTED);.}../ 1baf0 2a 20 57 65 20 64 6f 6e 27 74 20 73 75 70 70 6f * We don't suppo 1bb00 72 74 20 74 68 69 73 20 6d 65 74 68 6f 64 2e 20 rt this method. 1bb10 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e */.CK_DEFINE_FUN 1bb20 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 49 CTION(CK_RV, C_I 1bb30 6e 69 74 50 49 4e 29 28 43 4b 5f 53 45 53 53 49 nitPIN)(CK_SESSI 1bb40 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 1bb50 6f 6e 2c 20 43 4b 5f 55 54 46 38 43 48 41 52 5f on, CK_UTF8CHAR_ 1bb60 50 54 52 20 70 50 69 6e 2c 20 43 4b 5f 55 4c 4f PTR pPin, CK_ULO 1bb70 4e 47 20 75 6c 50 69 6e 4c 65 6e 29 20 7b 0a 09 NG ulPinLen) {.. 1bb80 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1bb90 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 1bba0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 1bbb0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 1bbc0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1bbd0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 1bbe0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 1bbf0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 1bc00 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 1bc10 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 1bc20 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1bc30 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 1bc40 5f 54 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 4f _TOKEN_WRITE_PRO 1bc50 54 45 43 54 45 44 20 28 25 69 29 22 2c 20 43 4b TECTED (%i)", CK 1bc60 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 R_TOKEN_WRITE_PR 1bc70 4f 54 45 43 54 45 44 29 3b 0a 0a 09 72 65 74 75 OTECTED);...retu 1bc80 72 6e 28 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49 rn(CKR_TOKEN_WRI 1bc90 54 45 5f 50 52 4f 54 45 43 54 45 44 29 3b 0a 7d TE_PROTECTED);.} 1bca0 0a 0a 2f 2a 20 57 65 20 64 6f 6e 27 74 20 73 75 ../* We don't su 1bcb0 70 70 6f 72 74 20 74 68 69 73 20 6d 65 74 68 6f pport this metho 1bcc0 64 2e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f d. */.CK_DEFINE_ 1bcd0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1bce0 43 5f 53 65 74 50 49 4e 29 28 43 4b 5f 53 45 53 C_SetPIN)(CK_SES 1bcf0 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 1bd00 73 69 6f 6e 2c 20 43 4b 5f 55 54 46 38 43 48 41 sion, CK_UTF8CHA 1bd10 52 5f 50 54 52 20 70 4f 6c 64 50 69 6e 2c 20 43 R_PTR pOldPin, C 1bd20 4b 5f 55 4c 4f 4e 47 20 75 6c 4f 6c 64 50 69 6e K_ULONG ulOldPin 1bd30 4c 65 6e 2c 20 43 4b 5f 55 54 46 38 43 48 41 52 Len, CK_UTF8CHAR 1bd40 5f 50 54 52 20 70 4e 65 77 50 69 6e 2c 20 43 4b _PTR pNewPin, CK 1bd50 5f 55 4c 4f 4e 47 20 75 6c 4e 65 77 50 69 6e 4c _ULONG ulNewPinL 1bd60 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 en) {..CACKEY_DE 1bd70 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 1bd80 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 1bd90 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 1bda0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1bdb0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1bdc0 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 1bdd0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1bde0 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 1bdf0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 1be00 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 1be10 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 1be20 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 1be30 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 1be40 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 1be50 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 1be60 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 1be70 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1be80 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 1be90 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 1bea0 4b 5f 52 56 2c 20 43 5f 4f 70 65 6e 53 65 73 73 K_RV, C_OpenSess 1beb0 69 6f 6e 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 ion)(CK_SLOT_ID 1bec0 73 6c 6f 74 49 44 2c 20 43 4b 5f 46 4c 41 47 53 slotID, CK_FLAGS 1bed0 20 66 6c 61 67 73 2c 20 43 4b 5f 56 4f 49 44 5f flags, CK_VOID_ 1bee0 50 54 52 20 70 41 70 70 6c 69 63 61 74 69 6f 6e PTR pApplication 1bef0 2c 20 43 4b 5f 4e 4f 54 49 46 59 20 6e 6f 74 69 , CK_NOTIFY noti 1bf00 66 79 2c 20 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 fy, CK_SESSION_H 1bf10 41 4e 44 4c 45 5f 50 54 52 20 70 68 53 65 73 73 ANDLE_PTR phSess 1bf20 69 6f 6e 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 ion) {..unsigned 1bf30 20 6c 6f 6e 67 20 69 64 78 3b 0a 09 69 6e 74 20 long idx;..int 1bf40 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 09 69 mutex_retval;..i 1bf50 6e 74 20 66 6f 75 6e 64 5f 73 65 73 73 69 6f 6e nt found_session 1bf60 20 3d 20 30 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 = 0;...CACKEY_D 1bf70 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 1bf80 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 28 66 led.");...if ((f 1bf90 6c 61 67 73 20 26 20 43 4b 46 5f 53 45 52 49 41 lags & CKF_SERIA 1bfa0 4c 5f 53 45 53 53 49 4f 4e 29 20 21 3d 20 43 4b L_SESSION) != CK 1bfb0 46 5f 53 45 52 49 41 4c 5f 53 45 53 53 49 4f 4e F_SERIAL_SESSION 1bfc0 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ) {...return(CKR 1bfd0 5f 53 45 53 53 49 4f 4e 5f 50 41 52 41 4c 4c 45 _SESSION_PARALLE 1bfe0 4c 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 L_NOT_SUPPORTED) 1bff0 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b ;..}...if (!cack 1c000 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 1c010 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1c020 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1c030 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 1c040 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 1c050 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 1c060 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 1c070 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 3c 20 ...if (slotID < 1c080 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 28 0 || slotID >= ( 1c090 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c sizeof(cackey_sl 1c0a0 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 ots) / sizeof(ca 1c0b0 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 ckey_slots[0]))) 1c0c0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1c0d0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1c0e0 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 Invalid slot re 1c0f0 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 6f quested (%lu), o 1c100 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 64 20 utside of valid 1c110 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 3b range", slotID); 1c120 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 1c130 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b LOT_ID_INVALID); 1c140 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 ..}...mutex_retv 1c150 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 1c160 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 x_lock(cackey_bi 1c170 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 glock);..if (mut 1c180 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 1c190 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1c1a0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1c1b0 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e Locking failed. 1c1c0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1c1d0 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 1c1e0 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 ;..}...if (cacke 1c1f0 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e y_slots[slotID]. 1c200 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09 active == 0) {.. 1c210 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1c220 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 INTF("Error. Inv 1c230 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 alid slot reques 1c240 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 ted (%lu), slot 1c250 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 63 not currently ac 1c260 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a tive", slotID);. 1c270 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 1c280 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 1c290 67 6c 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72 glock);....retur 1c2a0 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e n(CKR_SLOT_ID_IN 1c2b0 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 VALID);..}.../* 1c2c0 56 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 Verify that the 1c2d0 63 61 72 64 20 69 73 20 61 63 74 75 61 6c 6c 79 card is actually 1c2e0 20 69 6e 20 74 68 65 20 73 6c 6f 74 2e 20 2a 2f in the slot. */ 1c2f0 0a 09 2f 2a 20 58 58 58 3a 20 43 68 65 63 6b 20 ../* XXX: Check 1c300 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 69 to make sure thi 1c310 73 20 69 73 20 69 6e 20 74 68 65 20 50 4b 43 53 s is in the PKCS 1c320 23 31 31 20 73 70 65 63 69 66 69 63 61 74 69 6f #11 specificatio 1c330 6e 20 2a 2f 0a 09 69 66 20 28 63 61 63 6b 65 79 n */..if (cackey 1c340 5f 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 28 26 _token_present(& 1c350 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo 1c360 74 49 44 5d 29 20 21 3d 20 43 41 43 4b 45 59 5f tID]) != CACKEY_ 1c370 50 43 53 43 5f 53 5f 54 4f 4b 45 4e 50 52 45 53 PCSC_S_TOKENPRES 1c380 45 4e 54 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ENT) {...CACKEY_ 1c390 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1c3a0 72 6f 72 2e 20 20 43 61 72 64 20 6e 6f 74 20 70 ror. Card not p 1c3b0 72 65 73 65 6e 74 2e 20 20 52 65 74 75 72 6e 69 resent. Returni 1c3c0 6e 67 20 43 4b 52 5f 44 45 56 49 43 45 5f 52 45 ng CKR_DEVICE_RE 1c3d0 4d 4f 56 45 44 22 29 3b 0a 0a 09 09 63 61 63 6b MOVED");....cack 1c3e0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 1c3f0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 1c400 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 44 ....return(CKR_D 1c410 45 56 49 43 45 5f 52 45 4d 4f 56 45 44 29 3b 0a EVICE_REMOVED);. 1c420 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 .}...for (idx = 1c430 31 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 1; idx < (sizeof 1c440 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 1c450 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke 1c460 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 3b y_sessions[0])); 1c470 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 idx++) {...if ( 1c480 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 !cackey_sessions 1c490 5b 69 64 78 5d 2e 61 63 74 69 76 65 29 20 7b 0a [idx].active) {. 1c4a0 09 09 09 66 6f 75 6e 64 5f 73 65 73 73 69 6f 6e ...found_session 1c4b0 20 3d 20 31 3b 0a 0a 09 09 09 2a 70 68 53 65 73 = 1;.....*phSes 1c4c0 73 69 6f 6e 20 3d 20 69 64 78 3b 0a 0a 09 09 09 sion = idx;..... 1c4d0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1c4e0 69 64 78 5d 2e 61 63 74 69 76 65 20 3d 20 31 3b idx].active = 1; 1c4f0 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 ....cackey_sessi 1c500 6f 6e 73 5b 69 64 78 5d 2e 73 6c 6f 74 49 44 20 ons[idx].slotID 1c510 3d 20 73 6c 6f 74 49 44 3b 0a 09 09 09 63 61 63 = slotID;....cac 1c520 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 key_sessions[idx 1c530 5d 2e 73 74 61 74 65 20 3d 20 43 4b 53 5f 52 4f ].state = CKS_RO 1c540 5f 50 55 42 4c 49 43 5f 53 45 53 53 49 4f 4e 3b _PUBLIC_SESSION; 1c550 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 ....cackey_sessi 1c560 6f 6e 73 5b 69 64 78 5d 2e 66 6c 61 67 73 20 3d ons[idx].flags = 1c570 20 66 6c 61 67 73 3b 0a 09 09 09 63 61 63 6b 65 flags;....cacke 1c580 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. 1c590 75 6c 44 65 76 69 63 65 45 72 72 6f 72 20 3d 20 ulDeviceError = 1c5a0 30 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 0;....cackey_ses 1c5b0 73 69 6f 6e 73 5b 69 64 78 5d 2e 70 41 70 70 6c sions[idx].pAppl 1c5c0 69 63 61 74 69 6f 6e 20 3d 20 70 41 70 70 6c 69 ication = pAppli 1c5d0 63 61 74 69 6f 6e 3b 0a 09 09 09 63 61 63 6b 65 cation;....cacke 1c5e0 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. 1c5f0 4e 6f 74 69 66 79 20 3d 20 6e 6f 74 69 66 79 3b Notify = notify; 1c600 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 .....cackey_sess 1c610 69 6f 6e 73 5b 69 64 78 5d 2e 69 64 65 6e 74 69 ions[idx].identi 1c620 74 69 65 73 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 ties = NULL;.... 1c630 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 1c640 69 64 78 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f idx].identities_ 1c650 63 6f 75 6e 74 20 3d 20 30 3b 0a 0a 09 09 09 63 count = 0;.....c 1c660 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 ackey_sessions[i 1c670 64 78 5d 2e 73 65 61 72 63 68 5f 61 63 74 69 76 dx].search_activ 1c680 65 20 3d 20 30 3b 0a 0a 09 09 09 63 61 63 6b 65 e = 0;.....cacke 1c690 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e y_sessions[idx]. 1c6a0 73 69 67 6e 5f 61 63 74 69 76 65 20 3d 20 30 3b sign_active = 0; 1c6b0 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 .....cackey_sess 1c6c0 69 6f 6e 73 5b 69 64 78 5d 2e 64 65 63 72 79 70 ions[idx].decryp 1c6d0 74 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a 0a 09 t_active = 0;... 1c6e0 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 1c6f0 73 5b 69 64 78 5d 2e 69 64 65 6e 74 69 74 69 65 s[idx].identitie 1c700 73 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f s = cackey_read_ 1c710 69 64 65 6e 74 69 74 69 65 73 28 26 63 61 63 6b identities(&cack 1c720 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d ey_slots[slotID] 1c730 2c 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f , &cackey_sessio 1c740 6e 73 5b 69 64 78 5d 2e 69 64 65 6e 74 69 74 69 ns[idx].identiti 1c750 65 73 5f 63 6f 75 6e 74 29 3b 0a 0a 0a 09 09 09 es_count);...... 1c760 62 72 65 61 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 break;...}..}... 1c770 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 1c780 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 1c790 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 1c7a0 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 1c7b0 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 1c7c0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1c7d0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c NTF("Error. Unl 1c7e0 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 1c7f0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1c800 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 1c810 09 7d 0a 0a 09 69 66 20 28 21 66 6f 75 6e 64 5f .}...if (!found_ 1c820 73 65 73 73 69 6f 6e 29 20 7b 0a 09 09 43 41 43 session) {...CAC 1c830 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1c840 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1c850 53 45 53 53 49 4f 4e 5f 43 4f 55 4e 54 20 28 25 SESSION_COUNT (% 1c860 69 29 22 2c 20 43 4b 52 5f 53 45 53 53 49 4f 4e i)", CKR_SESSION 1c870 5f 43 4f 55 4e 54 29 3b 0a 0a 09 09 72 65 74 75 _COUNT);....retu 1c880 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 43 rn(CKR_SESSION_C 1c890 4f 55 4e 54 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b OUNT);..}...CACK 1c8a0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1c8b0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f "Returning CKR_O 1c8c0 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 K (%i)", CKR_OK) 1c8d0 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ;...return(CKR_O 1c8e0 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 K);.}..CK_DEFINE 1c8f0 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 1c900 20 43 5f 43 6c 6f 73 65 53 65 73 73 69 6f 6e 29 C_CloseSession) 1c910 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 1c920 4c 45 20 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 LE hSession) {.. 1c930 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c int mutex_retval 1c940 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ;...CACKEY_DEBUG 1c950 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 1c960 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 1c970 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 1c980 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1c990 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1c9a0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 1c9b0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1c9c0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 1c9d0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 1c9e0 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d ..if (hSession = 1c9f0 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 = 0 || hSession 1ca00 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 >= (sizeof(cacke 1ca10 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 y_sessions) / si 1ca20 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 zeof(cackey_sess 1ca30 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 ions[0]))) {...C 1ca40 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1ca50 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 1ca60 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 ion out of range 1ca70 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 1ca80 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 1ca90 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 1caa0 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 1cab0 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c = cackey_mutex_l 1cac0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1cad0 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 1cae0 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 1caf0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1cb00 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f INTF("Error. Lo 1cb10 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 1cb20 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 1cb30 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 1cb40 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f }...if (!cackey_ 1cb50 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1cb60 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 n].active) {...c 1cb70 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 1cb80 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 1cb90 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 1cba0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1cbb0 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 r. Session not 1cbc0 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 active.");...... 1cbd0 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 1cbe0 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 1cbf0 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f D);..}...cackey_ 1cc00 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 1cc10 6e 5d 2e 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 n].active = 0;.. 1cc20 63 61 63 6b 65 79 5f 66 72 65 65 5f 69 64 65 6e cackey_free_iden 1cc30 74 69 74 69 65 73 28 63 61 63 6b 65 79 5f 73 65 tities(cackey_se 1cc40 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 1cc50 2e 69 64 65 6e 74 69 74 69 65 73 2c 20 63 61 63 .identities, cac 1cc60 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 1cc70 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 ssion].identitie 1cc80 73 5f 63 6f 75 6e 74 29 3b 0a 0a 09 6d 75 74 65 s_count);...mute 1cc90 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 x_retval = cacke 1cca0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 1ccb0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 1ccc0 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 1ccd0 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 1cce0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1ccf0 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 "Error. Unlocki 1cd00 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 ng failed.");... 1cd10 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 1cd20 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 1cd30 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1cd40 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 INTF("Returning 1cd50 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b CKR_OK (%i)", CK 1cd60 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 R_OK);...return( 1cd70 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 CKR_OK);.}..CK_D 1cd80 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 1cd90 4b 5f 52 56 2c 20 43 5f 43 6c 6f 73 65 41 6c 6c K_RV, C_CloseAll 1cda0 53 65 73 73 69 6f 6e 73 29 28 43 4b 5f 53 4c 4f Sessions)(CK_SLO 1cdb0 54 5f 49 44 20 73 6c 6f 74 49 44 29 20 7b 0a 09 T_ID slotID) {.. 1cdc0 75 69 6e 74 33 32 5f 74 20 69 64 78 3b 0a 09 69 uint32_t idx;..i 1cdd0 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b nt mutex_retval; 1cde0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1cdf0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 1ce00 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 1ce10 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 1ce20 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1ce30 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 1ce40 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 1ce50 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 1ce60 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 1ce70 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 1ce80 09 69 66 20 28 73 6c 6f 74 49 44 20 3c 20 30 20 .if (slotID < 0 1ce90 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 28 73 69 || slotID >= (si 1cea0 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 zeof(cackey_slot 1ceb0 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 1cec0 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b ey_slots[0]))) { 1ced0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1cee0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 PRINTF("Error. I 1cef0 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 nvalid slot requ 1cf00 65 73 74 65 64 20 28 25 6c 75 29 2c 20 6f 75 74 ested (%lu), out 1cf10 73 69 64 65 20 6f 66 20 76 61 6c 69 64 20 72 61 side of valid ra 1cf20 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a nge", slotID);.. 1cf30 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f ..return(CKR_SLO 1cf40 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 T_ID_INVALID);.. 1cf50 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 1cf60 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 1cf70 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 1cf80 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 1cf90 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 1cfa0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1cfb0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 1cfc0 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 1cfd0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1cfe0 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 1cff0 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f .}...if (cackey_ 1d000 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 slots[slotID].ac 1d010 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09 09 43 tive == 0) {...C 1d020 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1d030 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c TF("Error. Inval 1d040 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 id slot requeste 1d050 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f d (%lu), slot no 1d060 74 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 t currently acti 1d070 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 ve", slotID);... 1d080 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e .cackey_mutex_un 1d090 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 1d0a0 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 ock);....return( 1d0b0 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 CKR_SLOT_ID_INVA 1d0c0 4c 49 44 29 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 LID);..}...for ( 1d0d0 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 28 idx = 0; idx < ( 1d0e0 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 1d0f0 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 1d100 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 1d110 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b 0a [0])); idx++) {. 1d120 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73 ..if (cackey_ses 1d130 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 63 74 69 76 sions[idx].activ 1d140 65 29 20 7b 0a 09 09 09 69 66 20 28 63 61 63 6b e) {....if (cack 1d150 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d ey_sessions[idx] 1d160 2e 73 6c 6f 74 49 44 20 21 3d 20 73 6c 6f 74 49 .slotID != slotI 1d170 44 29 20 7b 0a 09 09 09 09 63 6f 6e 74 69 6e 75 D) {.....continu 1d180 65 3b 0a 09 09 09 7d 0a 0a 09 09 09 63 61 63 6b e;....}.....cack 1d190 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 1d1a0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 1d1b0 0a 09 09 09 43 5f 43 6c 6f 73 65 53 65 73 73 69 ....C_CloseSessi 1d1c0 6f 6e 28 69 64 78 29 3b 0a 09 09 09 63 61 63 6b on(idx);....cack 1d1d0 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 ey_mutex_lock(ca 1d1e0 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 1d1f0 09 7d 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 .}..}...mutex_re 1d200 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 1d210 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 1d220 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 1d230 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 1d240 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 1d250 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1d260 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 or. Unlocking f 1d270 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 ailed.");....ret 1d280 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 1d290 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 ERROR);..}...CAC 1d2a0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1d2b0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1d2c0 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b OK (%i)", CKR_OK 1d2d0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 1d2e0 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e OK);.}..CK_DEFIN 1d2f0 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 1d300 2c 20 43 5f 47 65 74 53 65 73 73 69 6f 6e 49 6e , C_GetSessionIn 1d310 66 6f 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 fo)(CK_SESSION_H 1d320 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 1d330 43 4b 5f 53 45 53 53 49 4f 4e 5f 49 4e 46 4f 5f CK_SESSION_INFO_ 1d340 50 54 52 20 70 49 6e 66 6f 29 20 7b 0a 09 69 6e PTR pInfo) {..in 1d350 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a t mutex_retval;. 1d360 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1d370 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 1d380 3b 0a 0a 09 69 66 20 28 70 49 6e 66 6f 20 3d 3d ;...if (pInfo == 1d390 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 NULL) {...CACKE 1d3a0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1d3b0 45 72 72 6f 72 2e 20 70 49 6e 66 6f 20 69 73 20 Error. pInfo is 1d3c0 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 NULL.");....retu 1d3d0 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 rn(CKR_ARGUMENTS 1d3e0 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 _BAD);..}...if ( 1d3f0 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 1d400 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 1d410 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 1d420 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 1d430 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 1d440 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 1d450 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 1d460 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 );..}...if (hSes 1d470 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 sion == 0 || hSe 1d480 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 ssion >= (sizeof 1d490 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 1d4a0 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke 1d4b0 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 y_sessions[0]))) 1d4c0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1d4d0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1d4e0 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 Session out of 1d4f0 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 range.");...... 1d500 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 1d510 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 1d520 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 D);..}...mutex_r 1d530 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 1d540 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 utex_lock(cackey 1d550 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 1d560 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 1d570 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 1d580 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1d590 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c r. Locking fail 1d5a0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1d5b0 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 1d5c0 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 OR);..}...if (!c 1d5d0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1d5e0 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 Session].active) 1d5f0 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 1d600 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 1d610 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 1d620 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1d630 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 1d640 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b n not active."); 1d650 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 1d660 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 1d670 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 70 INVALID);..}...p 1d680 49 6e 66 6f 2d 3e 73 6c 6f 74 49 44 20 3d 20 63 Info->slotID = c 1d690 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1d6a0 53 65 73 73 69 6f 6e 5d 2e 73 6c 6f 74 49 44 3b Session].slotID; 1d6b0 0a 09 70 49 6e 66 6f 2d 3e 73 74 61 74 65 20 3d ..pInfo->state = 1d6c0 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 1d6d0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 74 61 74 65 [hSession].state 1d6e0 3b 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 ;..pInfo->flags 1d6f0 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e = cackey_session 1d700 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 66 6c 61 67 s[hSession].flag 1d710 73 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 44 65 76 s;..pInfo->ulDev 1d720 69 63 65 45 72 72 6f 72 20 3d 20 63 61 63 6b 65 iceError = cacke 1d730 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 1d740 69 6f 6e 5d 2e 75 6c 44 65 76 69 63 65 45 72 72 ion].ulDeviceErr 1d750 6f 72 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 or;...mutex_retv 1d760 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 al = cackey_mute 1d770 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 1d780 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 1d790 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 1d7a0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 1d7b0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 1d7c0 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 . Unlocking fai 1d7d0 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 1d7e0 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 1d7f0 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ROR);..}...CACKE 1d800 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1d810 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 1d820 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b (%i)", CKR_OK); 1d830 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 1d840 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f );.}..CK_DEFINE_ 1d850 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 FUNCTION(CK_RV, 1d860 43 5f 47 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 C_GetOperationSt 1d870 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f ate)(CK_SESSION_ 1d880 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 1d890 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 4f 70 CK_BYTE_PTR pOp 1d8a0 65 72 61 74 69 6f 6e 53 74 61 74 65 2c 20 43 4b erationState, CK 1d8b0 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 4f 70 _ULONG_PTR pulOp 1d8c0 65 72 61 74 69 6f 6e 53 74 61 74 65 4c 65 6e 29 erationStateLen) 1d8d0 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 1d8e0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 1d8f0 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 1d900 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 1d910 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1d920 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1d930 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 1d940 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 1d950 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 1d960 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 1d970 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 1d980 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 1d990 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 1d9a0 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 1d9b0 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 1d9c0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 1d9d0 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 1d9e0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 1d9f0 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 1da00 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 1da10 56 2c 20 43 5f 53 65 74 4f 70 65 72 61 74 69 6f V, C_SetOperatio 1da20 6e 53 74 61 74 65 29 28 43 4b 5f 53 45 53 53 49 nState)(CK_SESSI 1da30 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 1da40 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 1da50 70 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 2c pOperationState, 1da60 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 4f 70 65 72 CK_ULONG ulOper 1da70 61 74 69 6f 6e 53 74 61 74 65 4c 65 6e 2c 20 43 ationStateLen, C 1da80 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 K_OBJECT_HANDLE 1da90 68 45 6e 63 72 79 70 74 69 6f 6e 4b 65 79 2c 20 hEncryptionKey, 1daa0 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 1dab0 20 68 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e hAuthentication 1dac0 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Key) {..CACKEY_D 1dad0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 1dae0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 1daf0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 1db00 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 1db10 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1db20 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 1db30 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 1db40 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 1db50 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 1db60 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 1db70 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 1db80 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 1db90 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 1dba0 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 1dbb0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 1dbc0 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 1dbd0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1dbe0 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 1dbf0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 1dc00 43 4b 5f 52 56 2c 20 43 5f 4c 6f 67 69 6e 29 28 CK_RV, C_Login)( 1dc10 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 1dc20 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 55 E hSession, CK_U 1dc30 53 45 52 5f 54 59 50 45 20 75 73 65 72 54 79 70 SER_TYPE userTyp 1dc40 65 2c 20 43 4b 5f 55 54 46 38 43 48 41 52 5f 50 e, CK_UTF8CHAR_P 1dc50 54 52 20 70 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e TR pPin, CK_ULON 1dc60 47 20 75 6c 50 69 6e 4c 65 6e 29 20 7b 0a 09 43 G ulPinLen) {..C 1dc70 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 K_SLOT_ID slotID 1dc80 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 ;..int mutex_ret 1dc90 76 61 6c 3b 0a 09 69 6e 74 20 74 72 69 65 73 5f val;..int tries_ 1dca0 72 65 6d 61 69 6e 69 6e 67 3b 0a 09 69 6e 74 20 remaining;..int 1dcb0 6c 6f 67 69 6e 5f 72 65 74 3b 0a 0a 09 43 41 43 login_ret;...CAC 1dcc0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1dcd0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 1dce0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 1dcf0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 1dd00 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1dd10 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 1dd20 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 1dd30 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 1dd40 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 1dd50 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 ZED);..}...if (h 1dd60 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 Session == 0 || 1dd70 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a hSession >= (siz 1dd80 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 eof(cackey_sessi 1dd90 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 ons) / sizeof(ca 1dda0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d ckey_sessions[0] 1ddb0 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ))) {...CACKEY_D 1ddc0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1ddd0 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 or. Session out 1dde0 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 of range.");... 1ddf0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 ...return(CKR_SE 1de00 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 SSION_HANDLE_INV 1de10 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 ALID);..}...if ( 1de20 75 73 65 72 54 79 70 65 20 21 3d 20 43 4b 55 5f userType != CKU_ 1de30 55 53 45 52 29 20 7b 0a 09 09 43 41 43 4b 45 59 USER) {...CACKEY 1de40 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1de50 72 72 6f 72 2e 20 20 57 65 20 6f 6e 6c 79 20 73 rror. We only s 1de60 75 70 70 6f 72 74 20 55 53 45 52 20 6d 6f 64 65 upport USER mode 1de70 2c 20 61 73 6b 65 64 20 66 6f 72 20 25 6c 75 20 , asked for %lu 1de80 6d 6f 64 65 2e 22 2c 20 28 75 6e 73 69 67 6e 65 mode.", (unsigne 1de90 64 20 6c 6f 6e 67 29 20 75 73 65 72 54 79 70 65 d long) userType 1dea0 29 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f )....return(CKR_ 1deb0 55 53 45 52 5f 54 59 50 45 5f 49 4e 56 41 4c 49 USER_TYPE_INVALI 1dec0 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 D);..}...mutex_r 1ded0 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d etval = cackey_m 1dee0 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 utex_lock(cackey 1def0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 1df00 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 1df10 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 1df20 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1df30 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c r. Locking fail 1df40 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1df50 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 1df60 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 OR);..}...if (!c 1df70 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 1df80 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 Session].active) 1df90 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 1dfa0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 1dfb0 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 1dfc0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1dfd0 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f ("Error. Sessio 1dfe0 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b n not active."); 1dff0 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 1e000 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 1e010 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 73 INVALID);..}...s 1e020 6c 6f 74 49 44 20 3d 20 63 61 63 6b 65 79 5f 73 lotID = cackey_s 1e030 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 1e040 5d 2e 73 6c 6f 74 49 44 3b 0a 0a 09 69 66 20 28 ].slotID;...if ( 1e050 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c slotID < 0 || sl 1e060 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 otID >= (sizeof( 1e070 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 cackey_slots) / 1e080 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c sizeof(cackey_sl 1e090 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 ots[0]))) {...CA 1e0a0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1e0b0 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 F("Error. Invali 1e0c0 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 d slot requested 1e0d0 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 (%lu), outside 1e0e0 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c of valid range", 1e0f0 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 slotID);....ret 1e100 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f urn(CKR_GENERAL_ 1e110 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 ERROR);..}...if 1e120 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c (cackey_slots[sl 1e130 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d 20 otID].active == 1e140 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 1e150 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1e160 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 r. Invalid slot 1e170 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c requested (%lu), 1e180 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65 6e slot not curren 1e190 74 6c 79 20 61 63 74 69 76 65 22 2c 20 73 6c 6f tly active", slo 1e1a0 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f tID);....cackey_ 1e1b0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 1e1c0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 1e1d0 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 1e1e0 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 1e1f0 09 6c 6f 67 69 6e 5f 72 65 74 20 3d 20 63 61 63 .login_ret = cac 1e200 6b 65 79 5f 6c 6f 67 69 6e 28 26 63 61 63 6b 65 key_login(&cacke 1e210 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2c y_slots[slotID], 1e220 20 70 50 69 6e 2c 20 75 6c 50 69 6e 4c 65 6e 2c pPin, ulPinLen, 1e230 20 26 74 72 69 65 73 5f 72 65 6d 61 69 6e 69 6e &tries_remainin 1e240 67 29 3b 0a 09 69 66 20 28 6c 6f 67 69 6e 5f 72 g);..if (login_r 1e250 65 74 20 21 3d 20 43 41 43 4b 45 59 5f 50 43 53 et != CACKEY_PCS 1e260 43 5f 53 5f 4f 4b 29 20 7b 0a 09 09 63 61 63 6b C_S_OK) {...cack 1e270 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 1e280 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 1e290 0a 0a 09 09 69 66 20 28 6c 6f 67 69 6e 5f 72 65 ....if (login_re 1e2a0 74 20 3d 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 t == CACKEY_PCSC 1e2b0 5f 45 5f 4c 4f 43 4b 45 44 29 20 7b 0a 09 09 09 _E_LOCKED) {.... 1e2c0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1e2d0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 54 6f 6b NTF("Error. Tok 1e2e0 65 6e 20 69 73 20 6c 6f 63 6b 65 64 2e 22 29 3b en is locked."); 1e2f0 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74 .....cackey_slot 1e300 73 5b 73 6c 6f 74 49 44 5d 2e 74 6f 6b 65 6e 5f s[slotID].token_ 1e310 66 6c 61 67 73 20 7c 3d 20 43 4b 46 5f 55 53 45 flags |= CKF_USE 1e320 52 5f 50 49 4e 5f 4c 4f 43 4b 45 44 3b 0a 0a 09 R_PIN_LOCKED;... 1e330 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 50 49 4e ..return(CKR_PIN 1e340 5f 4c 4f 43 4b 45 44 29 3b 0a 09 09 7d 20 65 6c _LOCKED);...} el 1e350 73 65 20 69 66 20 28 6c 6f 67 69 6e 5f 72 65 74 se if (login_ret 1e360 20 3d 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f == CACKEY_PCSC_ 1e370 45 5f 42 41 44 50 49 4e 29 20 7b 0a 09 09 09 43 E_BADPIN) {....C 1e380 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1e390 54 46 28 22 45 72 72 6f 72 2e 20 20 49 6e 76 61 TF("Error. Inva 1e3a0 6c 69 64 20 50 49 4e 2e 22 29 3b 0a 0a 09 09 09 lid PIN.");..... 1e3b0 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo 1e3c0 74 49 44 5d 2e 74 6f 6b 65 6e 5f 66 6c 61 67 73 tID].token_flags 1e3d0 20 7c 3d 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e |= CKF_USER_PIN 1e3e0 5f 43 4f 55 4e 54 5f 4c 4f 57 3b 0a 0a 09 09 09 _COUNT_LOW;..... 1e3f0 69 66 20 28 74 72 69 65 73 5f 72 65 6d 61 69 6e if (tries_remain 1e400 69 6e 67 20 3d 3d 20 31 29 20 7b 0a 09 09 09 09 ing == 1) {..... 1e410 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo 1e420 74 49 44 5d 2e 74 6f 6b 65 6e 5f 66 6c 61 67 73 tID].token_flags 1e430 20 7c 3d 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e |= CKF_USER_PIN 1e440 5f 46 49 4e 41 4c 5f 54 52 59 3b 0a 09 09 09 7d _FINAL_TRY;....} 1e450 0a 0a 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 1e460 50 49 4e 5f 49 4e 43 4f 52 52 45 43 54 29 3b 0a PIN_INCORRECT);. 1e470 09 09 7d 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 ..}....CACKEY_DE 1e480 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1e490 72 2e 20 20 55 6e 6b 6e 6f 77 6e 20 65 72 72 6f r. Unknown erro 1e4a0 72 20 72 65 74 75 72 6e 65 64 20 66 72 6f 6d 20 r returned from 1e4b0 63 61 63 6b 65 79 5f 6c 6f 67 69 6e 28 29 20 28 cackey_login() ( 1e4c0 25 69 29 22 2c 20 6c 6f 67 69 6e 5f 72 65 74 29 %i)", login_ret) 1e4d0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 1e4e0 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 1e4f0 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 6c 6f 74 .}...cackey_slot 1e500 73 5b 73 6c 6f 74 49 44 5d 2e 74 6f 6b 65 6e 5f s[slotID].token_ 1e510 66 6c 61 67 73 20 26 3d 20 7e 28 43 4b 46 5f 55 flags &= ~(CKF_U 1e520 53 45 52 5f 50 49 4e 5f 4c 4f 43 4b 45 44 20 7c SER_PIN_LOCKED | 1e530 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 43 4f CKF_USER_PIN_CO 1e540 55 4e 54 5f 4c 4f 57 20 7c 20 43 4b 46 5f 4c 4f UNT_LOW | CKF_LO 1e550 47 49 4e 5f 52 45 51 55 49 52 45 44 20 7c 20 43 GIN_REQUIRED | C 1e560 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 46 49 4e 41 KF_USER_PIN_FINA 1e570 4c 5f 54 52 59 29 3b 0a 0a 09 63 61 63 6b 65 79 L_TRY);...cackey 1e580 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 1e590 6f 6e 5d 2e 73 74 61 74 65 20 3d 20 43 4b 53 5f on].state = CKS_ 1e5a0 52 4f 5f 55 53 45 52 5f 46 55 4e 43 54 49 4f 4e RO_USER_FUNCTION 1e5b0 53 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 S;...mutex_retva 1e5c0 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 1e5d0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 1e5e0 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 1e5f0 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 1e600 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1e610 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1e620 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c Unlocking fail 1e630 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 1e640 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 1e650 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 OR);..}...CACKEY 1e660 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 1e670 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 eturning CKR_OK 1e680 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a (%i)", CKR_OK);. 1e690 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 ..return(CKR_OK) 1e6a0 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 1e6b0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 1e6c0 5f 4c 6f 67 6f 75 74 29 28 43 4b 5f 53 45 53 53 _Logout)(CK_SESS 1e6d0 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 1e6e0 69 6f 6e 29 20 7b 0a 09 43 4b 5f 53 4c 4f 54 5f ion) {..CK_SLOT_ 1e6f0 49 44 20 73 6c 6f 74 49 44 3b 0a 09 69 6e 74 20 ID slotID;..int 1e700 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 mutex_retval;... 1e710 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1e720 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 1e730 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 1e740 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 1e750 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1e760 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 1e770 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 1e780 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 1e790 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 1e7a0 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 ALIZED);..}...if 1e7b0 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 (hSession == 0 1e7c0 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 || hSession >= ( 1e7d0 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 1e7e0 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 ssions) / sizeof 1e7f0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 1e800 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 [0]))) {...CACKE 1e810 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1e820 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 1e830 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b out of range."); 1e840 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 1e850 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f _SESSION_HANDLE_ 1e860 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d INVALID);..}...m 1e870 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 1e880 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( 1e890 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 1e8a0 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 1e8b0 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 1e8c0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1e8d0 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e ("Error. Lockin 1e8e0 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 1e8f0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 1e900 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 1e910 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 if (!cackey_sess 1e920 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 ions[hSession].a 1e930 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 ctive) {...cacke 1e940 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 1e950 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 1e960 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1e970 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 1e980 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 Session not acti 1e990 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 ve.");......retu 1e9a0 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 rn(CKR_SESSION_H 1e9b0 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a ANDLE_INVALID);. 1e9c0 09 7d 0a 0a 09 73 6c 6f 74 49 44 20 3d 20 63 61 .}...slotID = ca 1e9d0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 1e9e0 65 73 73 69 6f 6e 5d 2e 73 6c 6f 74 49 44 3b 0a ession].slotID;. 1e9f0 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 3c 20 30 ..if (slotID < 0 1ea00 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 28 73 || slotID >= (s 1ea10 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f izeof(cackey_slo 1ea20 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ts) / sizeof(cac 1ea30 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 20 key_slots[0]))) 1ea40 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 1ea50 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 1ea60 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 Invalid slot req 1ea70 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 6f 75 uested (%lu), ou 1ea80 74 73 69 64 65 20 6f 66 20 76 61 6c 69 64 20 72 tside of valid r 1ea90 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a ange", slotID);. 1eaa0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 ...return(CKR_GE 1eab0 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d NERAL_ERROR);..} 1eac0 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c ...if (cackey_sl 1ead0 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 ots[slotID].acti 1eae0 76 65 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 ve == 0) {...CAC 1eaf0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1eb00 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 ("Error. Invalid 1eb10 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 slot requested 1eb20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 (%lu), slot not 1eb30 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 currently active 1eb40 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 ", slotID);....c 1eb50 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 1eb60 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 1eb70 6b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b k);....return(CK 1eb80 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 R_GENERAL_ERROR) 1eb90 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 ;..}...cackey_se 1eba0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 1ebb0 2e 73 74 61 74 65 20 3d 20 43 4b 53 5f 52 4f 5f .state = CKS_RO_ 1ebc0 50 55 42 4c 49 43 5f 53 45 53 53 49 4f 4e 3b 0a PUBLIC_SESSION;. 1ebd0 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c .cackey_slots[sl 1ebe0 6f 74 49 44 5d 2e 74 6f 6b 65 6e 5f 66 6c 61 67 otID].token_flag 1ebf0 73 20 3d 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52 45 s = CKF_LOGIN_RE 1ec00 51 55 49 52 45 44 3b 0a 0a 09 6d 75 74 65 78 5f QUIRED;...mutex_ 1ec10 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 1ec20 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 1ec30 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 1ec40 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 1ec50 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 1ec60 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 1ec70 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 1ec80 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 1ec90 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 1eca0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 L_ERROR);..}...C 1ecb0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1ecc0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 1ecd0 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ 1ece0 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b OK);...return(CK 1ecf0 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 R_OK);.}..CK_DEF 1ed00 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 1ed10 52 56 2c 20 43 5f 43 72 65 61 74 65 4f 62 6a 65 RV, C_CreateObje 1ed20 63 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 ct)(CK_SESSION_H 1ed30 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 1ed40 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 CK_ATTRIBUTE_PTR 1ed50 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 pTemplate, CK_U 1ed60 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 2c 20 43 4b LONG ulCount, CK 1ed70 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 _OBJECT_HANDLE_P 1ed80 54 52 20 70 68 4f 62 6a 65 63 74 29 20 7b 0a 09 TR phObject) {.. 1ed90 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 1eda0 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a NTF("Called.");. 1edb0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e ..if (!cackey_in 1edc0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 itialized) {...C 1edd0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1ede0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 TF("Error. Not 1edf0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a initialized.");. 1ee00 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 ...return(CKR_CR 1ee10 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 YPTOKI_NOT_INITI 1ee20 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 ALIZED);..}...CA 1ee30 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1ee40 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 F("Returning CKR 1ee50 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1ee60 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 PPORTED (%i)", C 1ee70 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 1ee80 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 SUPPORTED);...re 1ee90 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f turn(CKR_FUNCTIO 1eea0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 1eeb0 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 1eec0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 1eed0 5f 43 6f 70 79 4f 62 6a 65 63 74 29 28 43 4b 5f _CopyObject)(CK_ 1eee0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 1eef0 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 Session, CK_OBJE 1ef00 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 CT_HANDLE hObjec 1ef10 74 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f t, CK_ATTRIBUTE_ 1ef20 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 PTR pTemplate, C 1ef30 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 2c K_ULONG ulCount, 1ef40 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL 1ef50 45 5f 50 54 52 20 70 68 4e 65 77 4f 62 6a 65 63 E_PTR phNewObjec 1ef60 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 t) {..CACKEY_DEB 1ef70 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 1ef80 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 1ef90 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 1efa0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 1efb0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1efc0 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 1efd0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 1efe0 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 1eff0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 1f000 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 1f010 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1f020 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 1f030 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 1f040 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 1f050 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 1f060 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 1f070 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1f080 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 1f090 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 1f0a0 5f 52 56 2c 20 43 5f 44 65 73 74 72 6f 79 4f 62 _RV, C_DestroyOb 1f0b0 6a 65 63 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e ject)(CK_SESSION 1f0c0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 1f0d0 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 1f0e0 4c 45 20 68 4f 62 6a 65 63 74 29 20 7b 0a 09 43 LE hObject) {..C 1f0f0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1f100 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 1f110 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 1f120 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 1f130 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1f140 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 1f150 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 1f160 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 1f170 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 1f180 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 1f190 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1f1a0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 1f1b0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 1f1c0 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 1f1d0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 1f1e0 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 1f1f0 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 1f200 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 1f210 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 1f220 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 1f230 47 65 74 4f 62 6a 65 63 74 53 69 7a 65 29 28 43 GetObjectSize)(C 1f240 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 1f250 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 hSession, CK_OB 1f260 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a JECT_HANDLE hObj 1f270 65 63 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 ect, CK_ULONG_PT 1f280 52 20 70 75 6c 53 69 7a 65 29 20 7b 0a 09 43 41 R pulSize) {..CA 1f290 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 1f2a0 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 1f2b0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 1f2c0 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 1f2d0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1f2e0 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 1f2f0 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 1f300 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 1f310 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 1f320 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 1f330 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1f340 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 1f350 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 1f360 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 1f370 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 1f380 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 1f390 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 1f3a0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 1f3b0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 1f3c0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 CTION(CK_RV, C_G 1f3d0 65 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 65 etAttributeValue 1f3e0 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 1f3f0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 1f400 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 _OBJECT_HANDLE h 1f410 4f 62 6a 65 63 74 2c 20 43 4b 5f 41 54 54 52 49 Object, CK_ATTRI 1f420 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 BUTE_PTR pTempla 1f430 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 te, CK_ULONG ulC 1f440 6f 75 6e 74 29 20 7b 0a 09 43 4b 5f 41 54 54 52 ount) {..CK_ATTR 1f450 49 42 55 54 45 20 2a 63 75 72 72 5f 61 74 74 72 IBUTE *curr_attr 1f460 3b 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 ;..struct cackey 1f470 5f 69 64 65 6e 74 69 74 79 20 2a 69 64 65 6e 74 _identity *ident 1f480 69 74 79 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c ity;..unsigned l 1f490 6f 6e 67 20 69 64 65 6e 74 69 74 79 5f 69 64 78 ong identity_idx 1f4a0 2c 20 61 74 74 72 5f 69 64 78 2c 20 73 65 73 73 , attr_idx, sess 1f4b0 5f 61 74 74 72 5f 69 64 78 2c 20 6e 75 6d 5f 69 _attr_idx, num_i 1f4c0 64 73 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 ds;..int mutex_r 1f4d0 65 74 76 61 6c 3b 0a 09 43 4b 5f 52 56 20 72 65 etval;..CK_RV re 1f4e0 74 76 61 6c 20 3d 20 43 4b 52 5f 4f 4b 3b 0a 09 tval = CKR_OK;.. 1f4f0 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 56 61 6c CK_VOID_PTR pVal 1f500 75 65 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 75 6c ue;..CK_ULONG ul 1f510 56 61 6c 75 65 4c 65 6e 3b 0a 0a 09 43 41 43 4b ValueLen;...CACK 1f520 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 1f530 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 1f540 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 1f550 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 1f560 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 1f570 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 1f580 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 1f590 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 1f5a0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 1f5b0 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 ED);..}...if (hS 1f5c0 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 ession == 0 || h 1f5d0 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 Session >= (size 1f5e0 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 1f5f0 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ns) / sizeof(cac 1f600 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 key_sessions[0]) 1f610 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE 1f620 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1f630 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 r. Session out 1f640 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a of range.");.... 1f650 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES 1f660 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 SION_HANDLE_INVA 1f670 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 LID);..}...if (h 1f680 4f 62 6a 65 63 74 20 3d 3d 20 30 29 20 7b 0a 09 Object == 0) {.. 1f690 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 1f6a0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4f 62 INTF("Error. Ob 1f6b0 6a 65 63 74 20 68 61 6e 64 6c 65 20 6f 75 74 20 ject handle out 1f6c0 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a of range.");.... 1f6d0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 42 4a ..return(CKR_OBJ 1f6e0 45 43 54 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ECT_HANDLE_INVAL 1f6f0 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 6c ID);..}...if (ul 1f700 43 6f 75 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 09 Count == 0) {... 1f710 2f 2a 20 53 68 6f 72 74 20 63 69 72 63 75 69 74 /* Short circuit 1f720 2c 20 69 66 20 7a 65 72 6f 20 6f 62 6a 65 63 74 , if zero object 1f730 73 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64 s were specified 1f740 20 72 65 74 75 72 6e 20 7a 65 72 6f 20 69 74 65 return zero ite 1f750 6d 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 2a ms immediately * 1f760 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 /...CACKEY_DEBUG 1f770 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 1f780 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 20 28 ng CKR_OK (%i) ( 1f790 73 68 6f 72 74 20 63 69 72 63 75 69 74 29 22 2c short circuit)", 1f7a0 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 CKR_OK);....ret 1f7b0 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a urn(CKR_OK);..}. 1f7c0 0a 09 69 66 20 28 70 54 65 6d 70 6c 61 74 65 20 ..if (pTemplate 1f7d0 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 1f7e0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 1f7f0 28 22 45 72 72 6f 72 2e 20 20 70 54 65 6d 70 6c ("Error. pTempl 1f800 61 74 65 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a ate is NULL.");. 1f810 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 1f820 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} 1f830 0a 0a 09 69 64 65 6e 74 69 74 79 5f 69 64 78 20 ...identity_idx 1f840 3d 20 68 4f 62 6a 65 63 74 20 2d 20 31 3b 0a 0a = hObject - 1;.. 1f850 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 1f860 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 cackey_mutex_loc 1f870 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b k(cackey_biglock 1f880 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 );..if (mutex_re 1f890 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 tval != 0) {...C 1f8a0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 1f8b0 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b TF("Error. Lock 1f8c0 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a ing failed.");.. 1f8d0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e ..return(CKR_GEN 1f8e0 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a ERAL_ERROR);..}. 1f8f0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 ..if (!cackey_se 1f900 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 1f910 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 .active) {...cac 1f920 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 1f930 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 1f940 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 1f950 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 1f960 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 Session not ac 1f970 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 tive.");......re 1f980 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 1f990 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 1f9a0 3b 0a 09 7d 0a 0a 09 6e 75 6d 5f 69 64 73 20 3d ;..}...num_ids = 1f9b0 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 1f9c0 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 [hSession].ident 1f9d0 69 74 69 65 73 5f 63 6f 75 6e 74 3b 0a 0a 09 69 ities_count;...i 1f9e0 66 20 28 69 64 65 6e 74 69 74 79 5f 69 64 78 20 f (identity_idx 1f9f0 3e 3d 20 6e 75 6d 5f 69 64 73 29 20 7b 0a 09 09 >= num_ids) {... 1fa00 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 1fa10 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 1fa20 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 1fa30 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 1fa40 6f 72 2e 20 20 4f 62 6a 65 63 74 20 68 61 6e 64 or. Object hand 1fa50 6c 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e le out of range. 1fa60 20 20 69 64 65 6e 74 69 74 79 5f 69 64 78 20 3d identity_idx = 1fa70 20 25 6c 75 2c 20 6e 75 6d 5f 69 64 73 20 3d 20 %lu, num_ids = 1fa80 25 6c 75 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 %lu.", (unsigned 1fa90 20 6c 6f 6e 67 29 20 69 64 65 6e 74 69 74 79 5f long) identity_ 1faa0 69 64 78 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c idx, (unsigned l 1fab0 6f 6e 67 29 20 6e 75 6d 5f 69 64 73 29 3b 0a 0a ong) num_ids);.. 1fac0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 42 4a ..return(CKR_OBJ 1fad0 45 43 54 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ECT_HANDLE_INVAL 1fae0 49 44 29 3b 0a 09 7d 0a 0a 09 69 64 65 6e 74 69 ID);..}...identi 1faf0 74 79 20 3d 20 26 63 61 63 6b 65 79 5f 73 65 73 ty = &cackey_ses 1fb00 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 1fb10 69 64 65 6e 74 69 74 69 65 73 5b 69 64 65 6e 74 identities[ident 1fb20 69 74 79 5f 69 64 78 5d 3b 0a 0a 09 66 6f 72 20 ity_idx];...for 1fb30 28 61 74 74 72 5f 69 64 78 20 3d 20 30 3b 20 61 (attr_idx = 0; a 1fb40 74 74 72 5f 69 64 78 20 3c 20 75 6c 43 6f 75 6e ttr_idx < ulCoun 1fb50 74 3b 20 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b t; attr_idx++) { 1fb60 0a 09 09 63 75 72 72 5f 61 74 74 72 20 3d 20 26 ...curr_attr = & 1fb70 70 54 65 6d 70 6c 61 74 65 5b 61 74 74 72 5f 69 pTemplate[attr_i 1fb80 64 78 5d 3b 0a 0a 09 09 70 56 61 6c 75 65 20 3d dx];....pValue = 1fb90 20 4e 55 4c 4c 3b 0a 09 09 75 6c 56 61 6c 75 65 NULL;...ulValue 1fba0 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47 29 20 Len = (CK_LONG) 1fbb0 2d 31 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 -1;....CACKEY_DE 1fbc0 42 55 47 5f 50 52 49 4e 54 46 28 22 4c 6f 6f 6b BUG_PRINTF("Look 1fbd0 69 6e 67 20 66 6f 72 20 61 74 74 72 69 62 75 74 ing for attribut 1fbe0 65 20 30 78 25 30 38 6c 78 20 28 69 64 65 6e 74 e 0x%08lx (ident 1fbf0 69 74 79 3a 25 6c 75 29 20 2e 2e 2e 22 2c 20 28 ity:%lu) ...", ( 1fc00 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 unsigned long) c 1fc10 75 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 2c 20 urr_attr->type, 1fc20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 1fc30 69 64 65 6e 74 69 74 79 5f 69 64 78 29 3b 0a 0a identity_idx);.. 1fc40 09 09 66 6f 72 20 28 73 65 73 73 5f 61 74 74 72 ..for (sess_attr 1fc50 5f 69 64 78 20 3d 20 30 3b 20 73 65 73 73 5f 61 _idx = 0; sess_a 1fc60 74 74 72 5f 69 64 78 20 3c 20 69 64 65 6e 74 69 ttr_idx < identi 1fc70 74 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5f 63 ty->attributes_c 1fc80 6f 75 6e 74 3b 20 73 65 73 73 5f 61 74 74 72 5f ount; sess_attr_ 1fc90 69 64 78 2b 2b 29 20 7b 0a 09 09 09 69 66 20 28 idx++) {....if ( 1fca0 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 identity->attrib 1fcb0 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 utes[sess_attr_i 1fcc0 64 78 5d 2e 74 79 70 65 20 3d 3d 20 63 75 72 72 dx].type == curr 1fcd0 5f 61 74 74 72 2d 3e 74 79 70 65 29 20 7b 0a 09 _attr->type) {.. 1fce0 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 1fcf0 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 66 6f 75 PRINTF(" ... fou 1fd00 6e 64 20 69 74 2c 20 70 56 61 6c 75 65 20 3d 20 nd it, pValue = 1fd10 25 70 2c 20 75 6c 56 61 6c 75 65 4c 65 6e 20 3d %p, ulValueLen = 1fd20 20 25 6c 75 22 2c 20 69 64 65 6e 74 69 74 79 2d %lu", identity- 1fd30 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 >attributes[sess 1fd40 5f 61 74 74 72 5f 69 64 78 5d 2e 70 56 61 6c 75 _attr_idx].pValu 1fd50 65 2c 20 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 e, identity->att 1fd60 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 ributes[sess_att 1fd70 72 5f 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 r_idx].ulValueLe 1fd80 6e 29 3b 0a 09 09 09 09 0a 09 09 09 09 70 56 61 n);..........pVa 1fd90 6c 75 65 20 3d 20 69 64 65 6e 74 69 74 79 2d 3e lue = identity-> 1fda0 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f attributes[sess_ 1fdb0 61 74 74 72 5f 69 64 78 5d 2e 70 56 61 6c 75 65 attr_idx].pValue 1fdc0 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e ;.....ulValueLen 1fdd0 20 3d 20 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 = identity->att 1fde0 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 ributes[sess_att 1fdf0 72 5f 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 r_idx].ulValueLe 1fe00 6e 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 69 n;....}...}....i 1fe10 66 20 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 f (curr_attr->pV 1fe20 61 6c 75 65 20 26 26 20 70 56 61 6c 75 65 29 20 alue && pValue) 1fe30 7b 0a 09 09 09 69 66 20 28 63 75 72 72 5f 61 74 {....if (curr_at 1fe40 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 20 3e tr->ulValueLen > 1fe50 3d 20 75 6c 56 61 6c 75 65 4c 65 6e 29 20 7b 0a = ulValueLen) {. 1fe60 09 09 09 09 6d 65 6d 63 70 79 28 63 75 72 72 5f ....memcpy(curr_ 1fe70 61 74 74 72 2d 3e 70 56 61 6c 75 65 2c 20 70 56 attr->pValue, pV 1fe80 61 6c 75 65 2c 20 75 6c 56 61 6c 75 65 4c 65 6e alue, ulValueLen 1fe90 29 3b 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 );....} else {.. 1fea0 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 ...ulValueLen = 1feb0 28 43 4b 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 0a 09 (CK_LONG) -1;... 1fec0 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f ...retval = CKR_ 1fed0 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c BUFFER_TOO_SMALL 1fee0 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 63 75 ;....}...}....cu 1fef0 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 rr_attr->ulValue 1ff00 4c 65 6e 20 3d 20 75 6c 56 61 6c 75 65 4c 65 6e Len = ulValueLen 1ff10 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 1ff20 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 1ff30 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 1ff40 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 _biglock);..if ( 1ff50 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 1ff60 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 0) {...CACKEY_DE 1ff70 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 1ff80 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 r. Unlocking fa 1ff90 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 1ffa0 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 1ffb0 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 RROR);..}...if ( 1ffc0 72 65 74 76 61 6c 20 3d 3d 20 43 4b 52 5f 41 54 retval == CKR_AT 1ffd0 54 52 49 42 55 54 45 5f 54 59 50 45 5f 49 4e 56 TRIBUTE_TYPE_INV 1ffe0 41 4c 49 44 29 20 7b 0a 09 09 43 41 43 4b 45 59 ALID) {...CACKEY 1fff0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 20000 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 41 54 54 eturning CKR_ATT 20010 52 49 42 55 54 45 5f 54 59 50 45 5f 49 4e 56 41 RIBUTE_TYPE_INVA 20020 4c 49 44 20 28 25 69 29 22 2c 20 28 69 6e 74 29 LID (%i)", (int) 20030 20 72 65 74 76 61 6c 29 3b 0a 09 7d 20 65 6c 73 retval);..} els 20040 65 20 69 66 20 28 72 65 74 76 61 6c 20 3d 3d 20 e if (retval == 20050 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 CKR_BUFFER_TOO_S 20060 4d 41 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 MALL) {...CACKEY 20070 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 20080 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 42 55 46 eturning CKR_BUF 20090 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 20 28 25 FER_TOO_SMALL (% 200a0 69 29 22 2c 20 28 69 6e 74 29 20 72 65 74 76 61 i)", (int) retva 200b0 6c 29 3b 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 l);..} else if ( 200c0 72 65 74 76 61 6c 20 3d 3d 20 43 4b 52 5f 4f 4b retval == CKR_OK 200d0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 200e0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 200f0 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 20100 22 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c 29 ", (int) retval) 20110 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 43 41 ;..} else {...CA 20120 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 20130 46 28 22 52 65 74 75 72 6e 69 6e 67 20 25 69 22 F("Returning %i" 20140 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c 29 3b , (int) retval); 20150 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 ..}...return(ret 20160 76 61 6c 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 val);.}..CK_DEFI 20170 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 20180 56 2c 20 43 5f 53 65 74 41 74 74 72 69 62 75 74 V, C_SetAttribut 20190 65 56 61 6c 75 65 29 28 43 4b 5f 53 45 53 53 49 eValue)(CK_SESSI 201a0 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 201b0 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 on, CK_OBJECT_HA 201c0 4e 44 4c 45 20 68 4f 62 6a 65 63 74 2c 20 43 4b NDLE hObject, CK 201d0 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 _ATTRIBUTE_PTR p 201e0 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f Template, CK_ULO 201f0 4e 47 20 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 43 NG ulCount) {..C 20200 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 20210 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 20220 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 20230 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 20240 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 20250 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 20260 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 20270 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 20280 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 20290 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 202a0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 202b0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 202c0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 202d0 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 202e0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 202f0 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 20300 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 20310 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 20320 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 20330 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 20340 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 29 FindObjectsInit) 20350 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 20360 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 20370 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 54 ATTRIBUTE_PTR pT 20380 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e emplate, CK_ULON 20390 47 20 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 43 4b G ulCount) {..CK 203a0 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 3b _SLOT_ID slotID; 203b0 0a 09 43 4b 5f 55 4c 4f 4e 47 20 69 64 78 3b 0a ..CK_ULONG idx;. 203c0 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 .int mutex_retva 203d0 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 l;...CACKEY_DEBU 203e0 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 203f0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 20400 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 20410 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 20420 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 20430 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 20440 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 20450 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 20460 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 20470 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 ...if (hSession 20480 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e == 0 || hSession 20490 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b >= (sizeof(cack 204a0 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 ey_sessions) / s 204b0 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 204c0 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 sions[0]))) {... 204d0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 204e0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 NTF("Error. Ses 204f0 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 sion out of rang 20500 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 20510 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 20520 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 20530 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c }...mutex_retval 20540 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 20550 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 20560 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 ock);..if (mutex 20570 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a _retval != 0) {. 20580 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 20590 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c RINTF("Error. L 205a0 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 205b0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 205c0 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 205d0 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 205e0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 205f0 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 on].active) {... 20600 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 20610 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 20620 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 ck);....CACKEY_D 20630 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 20640 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 or. Session not 20650 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 active.");..... 20660 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 20670 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 20680 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 ID);..}...if (ca 20690 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 206a0 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 ession].search_a 206b0 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 ctive) {...cacke 206c0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 206d0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 206e0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 206f0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 20700 53 65 61 72 63 68 20 61 6c 72 65 61 64 79 20 61 Search already a 20710 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 ctive.");......r 20720 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 eturn(CKR_OPERAT 20730 49 4f 4e 5f 41 43 54 49 56 45 29 3b 0a 09 7d 0a ION_ACTIVE);..}. 20740 0a 09 73 6c 6f 74 49 44 20 3d 20 63 61 63 6b 65 ..slotID = cacke 20750 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 20760 69 6f 6e 5d 2e 73 6c 6f 74 49 44 3b 0a 0a 09 69 ion].slotID;...i 20770 66 20 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c f (slotID < 0 || 20780 20 73 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 slotID >= (size 20790 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 of(cackey_slots) 207a0 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 207b0 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 _slots[0]))) {.. 207c0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 207d0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 INTF("Error. Inv 207e0 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 alid slot reques 207f0 74 65 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 ted (%lu), outsi 20800 64 65 20 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 de of valid rang 20810 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 e", slotID);.... 20820 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 20830 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 20840 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 if (cackey_slots 20850 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 [slotID].active 20860 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 == 0) {...CACKEY 20870 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 20880 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c rror. Invalid sl 20890 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c ot requested (%l 208a0 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 u), slot not cur 208b0 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20 rently active", 208c0 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 6b slotID);....cack 208d0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 208e0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 208f0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 20900 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 20910 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 }...if (cackey_s 20920 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 73 6c 6f lots[slotID].slo 20930 74 5f 72 65 73 65 74 29 20 7b 0a 09 09 43 41 43 t_reset) {...CAC 20940 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 20950 28 22 54 68 65 20 73 6c 6f 74 20 68 61 73 20 62 ("The slot has b 20960 65 65 6e 20 72 65 73 65 74 20 73 69 6e 63 65 20 een reset since 20970 77 65 20 6c 61 73 74 20 6c 6f 6f 6b 65 64 20 66 we last looked f 20980 6f 72 20 69 64 65 6e 74 69 74 69 65 73 20 2d 2d or identities -- 20990 20 72 65 73 63 61 6e 6e 69 6e 67 22 29 3b 0a 0a rescanning");.. 209a0 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73 ..if (cackey_ses 209b0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 209c0 69 64 65 6e 74 69 74 69 65 73 20 21 3d 20 4e 55 identities != NU 209d0 4c 4c 29 20 7b 0a 09 09 09 63 61 63 6b 65 79 5f LL) {....cackey_ 209e0 66 72 65 65 5f 69 64 65 6e 74 69 74 69 65 73 28 free_identities( 209f0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 20a00 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 hSession].identi 20a10 74 69 65 73 2c 20 63 61 63 6b 65 79 5f 73 65 73 ties, cackey_ses 20a20 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 20a30 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 identities_count 20a40 29 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 );.....cackey_se 20a50 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 20a60 2e 69 64 65 6e 74 69 74 69 65 73 20 3d 20 4e 55 .identities = NU 20a70 4c 4c 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 LL;....cackey_se 20a80 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 20a90 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e .identities_coun 20aa0 74 20 3d 20 30 3b 0a 09 09 7d 0a 0a 09 09 69 66 t = 0;...}....if 20ab0 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 (cackey_slots[s 20ac0 6c 6f 74 49 44 5d 2e 6c 61 62 65 6c 20 21 3d 20 lotID].label != 20ad0 4e 55 4c 4c 29 20 7b 0a 09 09 09 66 72 65 65 28 NULL) {....free( 20ae0 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo 20af0 74 49 44 5d 2e 6c 61 62 65 6c 29 3b 0a 09 09 09 tID].label);.... 20b00 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo 20b10 74 49 44 5d 2e 6c 61 62 65 6c 20 3d 20 4e 55 4c tID].label = NUL 20b20 4c 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 L;...}....cackey 20b30 5f 6d 61 72 6b 5f 73 6c 6f 74 5f 72 65 73 65 74 _mark_slot_reset 20b40 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 (&cackey_slots[s 20b50 6c 6f 74 49 44 5d 29 3b 0a 09 09 63 61 63 6b 65 lotID]);...cacke 20b60 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e y_slots[slotID]. 20b70 73 6c 6f 74 5f 72 65 73 65 74 20 3d 20 30 3b 0a slot_reset = 0;. 20b80 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f .}...if (cackey_ 20b90 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 20ba0 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 3d 3d n].identities == 20bb0 20 4e 55 4c 4c 29 20 7b 0a 09 09 63 61 63 6b 65 NULL) {...cacke 20bc0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 20bd0 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 ion].identities 20be0 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 69 64 = cackey_read_id 20bf0 65 6e 74 69 74 69 65 73 28 26 63 61 63 6b 65 79 entities(&cackey 20c00 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2c 20 _slots[slotID], 20c10 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 &cackey_sessions 20c20 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 [hSession].ident 20c30 69 74 69 65 73 5f 63 6f 75 6e 74 29 3b 0a 09 7d ities_count);..} 20c40 0a 0a 09 69 66 20 28 70 54 65 6d 70 6c 61 74 65 ...if (pTemplate 20c50 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 69 66 != NULL) {...if 20c60 20 28 75 6c 43 6f 75 6e 74 20 21 3d 20 30 29 20 (ulCount != 0) 20c70 7b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 {....cackey_sess 20c80 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 20c90 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e earch_query_coun 20ca0 74 20 3d 20 75 6c 43 6f 75 6e 74 3b 0a 09 09 09 t = ulCount;.... 20cb0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 20cc0 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 hSession].search 20cd0 5f 71 75 65 72 79 20 3d 20 6d 61 6c 6c 6f 63 28 _query = malloc( 20ce0 75 6c 43 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 ulCount * sizeof 20cf0 28 2a 70 54 65 6d 70 6c 61 74 65 29 29 3b 0a 0a (*pTemplate));.. 20d00 09 09 09 6d 65 6d 63 70 79 28 63 61 63 6b 65 79 ...memcpy(cackey 20d10 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 20d20 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 on].search_query 20d30 2c 20 70 54 65 6d 70 6c 61 74 65 2c 20 75 6c 43 , pTemplate, ulC 20d40 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 28 2a 70 ount * sizeof(*p 20d50 54 65 6d 70 6c 61 74 65 29 29 3b 0a 09 09 09 66 Template));....f 20d60 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 or (idx = 0; idx 20d70 20 3c 20 75 6c 43 6f 75 6e 74 3b 20 69 64 78 2b < ulCount; idx+ 20d80 2b 29 20 7b 0a 09 09 09 09 69 66 20 28 70 54 65 +) {.....if (pTe 20d90 6d 70 6c 61 74 65 5b 69 64 78 5d 2e 75 6c 56 61 mplate[idx].ulVa 20da0 6c 75 65 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 lueLen == 0) {.. 20db0 09 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 ....cackey_sessi 20dc0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 ons[hSession].se 20dd0 61 72 63 68 5f 71 75 65 72 79 5b 69 64 78 5d 2e arch_query[idx]. 20de0 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 0a pValue = NULL;.. 20df0 09 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 .....continue;.. 20e00 09 09 09 7d 0a 0a 09 09 09 09 63 61 63 6b 65 79 ...}......cackey 20e10 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 20e20 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 on].search_query 20e30 5b 69 64 78 5d 2e 70 56 61 6c 75 65 20 3d 20 6d [idx].pValue = m 20e40 61 6c 6c 6f 63 28 70 54 65 6d 70 6c 61 74 65 5b alloc(pTemplate[ 20e50 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 idx].ulValueLen) 20e60 3b 0a 0a 09 09 09 09 69 66 20 28 63 61 63 6b 65 ;......if (cacke 20e70 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 20e80 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 ion].search_quer 20e90 79 5b 69 64 78 5d 2e 70 56 61 6c 75 65 29 20 7b y[idx].pValue) { 20ea0 0a 09 09 09 09 09 6d 65 6d 63 70 79 28 63 61 63 ......memcpy(cac 20eb0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 20ec0 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 ssion].search_qu 20ed0 65 72 79 5b 69 64 78 5d 2e 70 56 61 6c 75 65 2c ery[idx].pValue, 20ee0 20 70 54 65 6d 70 6c 61 74 65 5b 69 64 78 5d 2e pTemplate[idx]. 20ef0 70 56 61 6c 75 65 2c 20 70 54 65 6d 70 6c 61 74 pValue, pTemplat 20f00 65 5b 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 e[idx].ulValueLe 20f10 6e 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 n);.....}....}.. 20f20 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 63 61 63 .} else {....cac 20f30 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 20f40 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 ssion].search_qu 20f50 65 72 79 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 ery_count = 0;.. 20f60 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 20f70 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 s[hSession].sear 20f80 63 68 5f 71 75 65 72 79 20 3d 20 4e 55 4c 4c 3b ch_query = NULL; 20f90 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 ...}..} else {.. 20fa0 09 69 66 20 28 75 6c 43 6f 75 6e 74 20 21 3d 20 .if (ulCount != 20fb0 30 29 20 7b 0a 09 09 09 63 61 63 6b 65 79 5f 6d 0) {....cackey_m 20fc0 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 20fd0 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 20fe0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 20ff0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 21000 61 72 63 68 20 71 75 65 72 79 20 73 70 65 63 69 arch query speci 21010 66 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 62 75 fied as NULL, bu 21020 74 20 6e 75 6d 62 65 72 20 6f 66 20 71 75 65 72 t number of quer 21030 79 20 74 65 72 6d 73 20 6e 6f 74 20 73 70 65 63 y terms not spec 21040 69 66 69 65 64 20 61 73 20 30 2e 22 29 3b 0a 0a ified as 0.");.. 21050 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 21060 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 09 GUMENTS_BAD);... 21070 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 73 }....cackey_sess 21080 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 21090 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e earch_query_coun 210a0 74 20 3d 20 30 3b 0a 09 09 63 61 63 6b 65 79 5f t = 0;...cackey_ 210b0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 210c0 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 20 n].search_query 210d0 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a 09 63 61 63 = NULL;..}...cac 210e0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 210f0 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 ssion].search_ac 21100 74 69 76 65 20 3d 20 31 3b 0a 09 63 61 63 6b 65 tive = 1;..cacke 21110 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 21120 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 63 75 72 72 ion].search_curr 21130 5f 69 64 20 3d 20 30 3b 0a 0a 09 6d 75 74 65 78 _id = 0;...mutex 21140 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 21150 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 21160 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 21170 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 21180 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 21190 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 211a0 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e Error. Unlockin 211b0 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 211c0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 211d0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 211e0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 211f0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 21200 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 KR_OK (%i)", CKR 21210 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 _OK);...return(C 21220 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69 KR_OK);.}..stati 21230 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 70 6b 63 c int cackey_pkc 21240 73 31 31 5f 63 6f 6d 70 61 72 65 5f 61 74 74 72 s11_compare_attr 21250 69 62 75 74 65 73 28 43 4b 5f 41 54 54 52 49 42 ibutes(CK_ATTRIB 21260 55 54 45 20 2a 61 2c 20 43 4b 5f 41 54 54 52 49 UTE *a, CK_ATTRI 21270 42 55 54 45 20 2a 62 29 20 7b 0a 09 75 6e 73 69 BUTE *b) {..unsi 21280 67 6e 65 64 20 63 68 61 72 20 2a 73 6d 61 6c 6c gned char *small 21290 62 75 66 2c 20 2a 6c 61 72 67 65 62 75 66 3b 0a buf, *largebuf;. 212a0 09 73 69 7a 65 5f 74 20 73 6d 61 6c 6c 62 75 66 .size_t smallbuf 212b0 5f 6c 65 6e 2c 20 6c 61 72 67 65 62 75 66 5f 6c _len, largebuf_l 212c0 65 6e 3b 0a 0a 09 69 66 20 28 61 2d 3e 74 79 70 en;...if (a->typ 212d0 65 20 21 3d 20 62 2d 3e 74 79 70 65 29 20 7b 0a e != b->type) {. 212e0 09 09 72 65 74 75 72 6e 28 30 29 3b 0a 09 7d 0a ..return(0);..}. 212f0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 21300 52 49 4e 54 46 28 22 20 20 20 20 2e 2e 2e 20 66 RINTF(" ... f 21310 6f 75 6e 64 20 6d 61 74 63 68 69 6e 67 20 74 79 ound matching ty 21320 70 65 20 2e 2e 2e 22 29 3b 0a 0a 09 43 41 43 4b pe ...");...CACK 21330 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 EY_DEBUG_PRINTBU 21340 46 28 22 20 20 20 20 2e 2e 2e 20 6f 75 72 20 76 F(" ... our v 21350 61 6c 75 65 3a 22 2c 20 61 2d 3e 70 56 61 6c 75 alue:", a->pValu 21360 65 2c 20 61 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e e, a->ulValueLen 21370 29 3b 0a 0a 09 69 66 20 28 62 2d 3e 70 56 61 6c );...if (b->pVal 21380 75 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 ue == NULL) {... 21390 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 213a0 4e 54 46 28 22 20 20 20 20 20 20 20 2e 2e 2e 20 NTF(" ... 213b0 66 6f 75 6e 64 20 77 69 6c 64 63 61 72 64 20 6d found wildcard m 213c0 61 74 63 68 22 29 3b 0a 0a 09 09 72 65 74 75 72 atch");....retur 213d0 6e 28 31 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 61 n(1);..}...if (a 213e0 2d 3e 70 56 61 6c 75 65 20 3d 3d 20 4e 55 4c 4c ->pValue == NULL 213f0 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 30 29 3b ) {...return(0); 21400 0a 09 7d 0a 0a 20 09 69 66 20 28 62 2d 3e 75 6c ..}.. .if (b->ul 21410 56 61 6c 75 65 4c 65 6e 20 3d 3d 20 61 2d 3e 75 ValueLen == a->u 21420 6c 56 61 6c 75 65 4c 65 6e 20 26 26 20 6d 65 6d lValueLen && mem 21430 63 6d 70 28 61 2d 3e 70 56 61 6c 75 65 2c 20 62 cmp(a->pValue, b 21440 2d 3e 70 56 61 6c 75 65 2c 20 62 2d 3e 75 6c 56 ->pValue, b->ulV 21450 61 6c 75 65 4c 65 6e 29 20 3d 3d 20 30 29 20 7b alueLen) == 0) { 21460 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 21470 50 52 49 4e 54 46 28 22 20 20 20 20 20 20 20 2e PRINTF(" . 21480 2e 2e 20 66 6f 75 6e 64 20 65 78 61 63 74 20 6d .. found exact m 21490 61 74 63 68 22 29 3b 0a 0a 09 09 72 65 74 75 72 atch");....retur 214a0 6e 28 31 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 n(1);..}...switc 214b0 68 20 28 61 2d 3e 74 79 70 65 29 20 7b 0a 09 09 h (a->type) {... 214c0 63 61 73 65 20 43 4b 41 5f 4d 4f 44 55 4c 55 53 case CKA_MODULUS 214d0 3a 0a 09 09 09 69 66 20 28 61 2d 3e 75 6c 56 61 :....if (a->ulVa 214e0 6c 75 65 4c 65 6e 20 3d 3d 20 62 2d 3e 75 6c 56 lueLen == b->ulV 214f0 61 6c 75 65 4c 65 6e 29 20 7b 0a 09 09 09 09 62 alueLen) {.....b 21500 72 65 61 6b 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 reak;....}.....i 21510 66 20 28 61 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e f (a->ulValueLen 21520 20 3e 20 62 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e > b->ulValueLen 21530 29 20 7b 0a 09 09 09 09 73 6d 61 6c 6c 62 75 66 ) {.....smallbuf 21540 20 3d 20 62 2d 3e 70 56 61 6c 75 65 3b 0a 09 09 = b->pValue;... 21550 09 09 73 6d 61 6c 6c 62 75 66 5f 6c 65 6e 20 3d ..smallbuf_len = 21560 20 62 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a b->ulValueLen;. 21570 0a 09 09 09 09 6c 61 72 67 65 62 75 66 20 3d 20 .....largebuf = 21580 61 2d 3e 70 56 61 6c 75 65 3b 0a 09 09 09 09 6c a->pValue;.....l 21590 61 72 67 65 62 75 66 5f 6c 65 6e 20 3d 20 61 2d argebuf_len = a- 215a0 3e 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a 09 09 09 >ulValueLen;.... 215b0 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 73 6d 61 } else {.....sma 215c0 6c 6c 62 75 66 20 3d 20 61 2d 3e 70 56 61 6c 75 llbuf = a->pValu 215d0 65 3b 0a 09 09 09 09 73 6d 61 6c 6c 62 75 66 5f e;.....smallbuf_ 215e0 6c 65 6e 20 3d 20 61 2d 3e 75 6c 56 61 6c 75 65 len = a->ulValue 215f0 4c 65 6e 3b 0a 0a 09 09 09 09 6c 61 72 67 65 62 Len;......largeb 21600 75 66 20 3d 20 62 2d 3e 70 56 61 6c 75 65 3b 0a uf = b->pValue;. 21610 09 09 09 09 6c 61 72 67 65 62 75 66 5f 6c 65 6e ....largebuf_len 21620 20 3d 20 62 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e = b->ulValueLen 21630 3b 0a 09 09 09 7d 0a 0a 09 09 09 66 6f 72 20 28 ;....}.....for ( 21640 3b 20 6c 61 72 67 65 62 75 66 5f 6c 65 6e 20 21 ; largebuf_len ! 21650 3d 20 73 6d 61 6c 6c 62 75 66 5f 6c 65 6e 3b 20 = smallbuf_len; 21660 6c 61 72 67 65 62 75 66 2b 2b 2c 6c 61 72 67 65 largebuf++,large 21670 62 75 66 5f 6c 65 6e 2d 2d 29 20 7b 0a 09 09 09 buf_len--) {.... 21680 09 69 66 20 28 6c 61 72 67 65 62 75 66 5b 30 5d .if (largebuf[0] 21690 20 21 3d 20 30 29 20 7b 0a 09 09 09 09 09 62 72 != 0) {......br 216a0 65 61 6b 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 0a eak;.....}....}. 216b0 0a 09 09 09 69 66 20 28 6c 61 72 67 65 62 75 66 ....if (largebuf 216c0 5f 6c 65 6e 20 21 3d 20 73 6d 61 6c 6c 62 75 66 _len != smallbuf 216d0 5f 6c 65 6e 29 20 7b 0a 09 09 09 09 62 72 65 61 _len) {.....brea 216e0 6b 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 k;....}.....if ( 216f0 6d 65 6d 63 6d 70 28 6c 61 72 67 65 62 75 66 2c memcmp(largebuf, 21700 20 73 6d 61 6c 6c 62 75 66 2c 20 73 6d 61 6c 6c smallbuf, small 21710 62 75 66 5f 6c 65 6e 29 20 3d 3d 20 30 29 20 7b buf_len) == 0) { 21720 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 21730 47 5f 50 52 49 4e 54 46 28 22 20 20 20 20 20 20 G_PRINTF(" 21740 20 2e 2e 2e 20 66 6f 75 6e 64 20 61 70 70 72 6f ... found appro 21750 78 69 6d 61 74 65 20 6d 61 74 63 68 22 29 3b 0a ximate match");. 21760 0a 09 09 09 09 72 65 74 75 72 6e 28 31 29 3b 0a .....return(1);. 21770 09 09 09 7d 0a 0a 09 09 09 62 72 65 61 6b 3b 0a ...}.....break;. 21780 09 7d 0a 0a 09 72 65 74 75 72 6e 28 30 29 3b 0a .}...return(0);. 21790 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 217a0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 46 CTION(CK_RV, C_F 217b0 69 6e 64 4f 62 6a 65 63 74 73 29 28 43 4b 5f 53 indObjects)(CK_S 217c0 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 217d0 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 ession, CK_OBJEC 217e0 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4f T_HANDLE_PTR phO 217f0 62 6a 65 63 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 bject, CK_ULONG 21800 75 6c 4d 61 78 4f 62 6a 65 63 74 43 6f 75 6e 74 ulMaxObjectCount 21810 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 , CK_ULONG_PTR p 21820 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 29 20 7b ulObjectCount) { 21830 0a 09 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f ..struct cackey_ 21840 69 64 65 6e 74 69 74 79 20 2a 63 75 72 72 5f 69 identity *curr_i 21850 64 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 d;..CK_ATTRIBUTE 21860 20 2a 63 75 72 72 5f 61 74 74 72 3b 0a 09 43 4b *curr_attr;..CK 21870 5f 55 4c 4f 4e 47 20 63 75 72 72 5f 69 64 5f 69 _ULONG curr_id_i 21880 64 78 2c 20 63 75 72 72 5f 6f 75 74 5f 69 64 5f dx, curr_out_id_ 21890 69 64 78 2c 20 63 75 72 72 5f 61 74 74 72 5f 69 idx, curr_attr_i 218a0 64 78 2c 20 73 65 73 73 5f 61 74 74 72 5f 69 64 dx, sess_attr_id 218b0 78 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 6d 61 74 x;..CK_ULONG mat 218c0 63 68 65 64 5f 63 6f 75 6e 74 2c 20 70 72 65 76 ched_count, prev 218d0 5f 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 3b 0a _matched_count;. 218e0 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 .int mutex_retva 218f0 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 l;...CACKEY_DEBU 21900 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 21910 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 21920 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 21930 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 21940 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 21950 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 21960 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 21970 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 21980 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 21990 0a 0a 09 69 66 20 28 70 75 6c 4f 62 6a 65 63 74 ...if (pulObject 219a0 43 6f 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b Count == NULL) { 219b0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 219c0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 219d0 70 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 69 pulObjectCount i 219e0 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 s NULL.");....re 219f0 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 21a00 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if 21a10 20 28 70 68 4f 62 6a 65 63 74 20 3d 3d 20 4e 55 (phObject == NU 21a20 4c 4c 20 26 26 20 75 6c 4d 61 78 4f 62 6a 65 63 LL && ulMaxObjec 21a30 74 43 6f 75 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 tCount == 0) {.. 21a40 09 2f 2a 20 53 68 6f 72 74 20 63 69 72 63 75 69 ./* Short circui 21a50 74 2c 20 69 66 20 7a 65 72 6f 20 6f 62 6a 65 63 t, if zero objec 21a60 74 73 20 77 65 72 65 20 73 70 65 63 69 66 69 65 ts were specifie 21a70 64 20 72 65 74 75 72 6e 20 7a 65 72 6f 20 69 74 d return zero it 21a80 65 6d 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 ems immediately 21a90 2a 2f 0a 09 09 2a 70 75 6c 4f 62 6a 65 63 74 43 */...*pulObjectC 21aa0 6f 75 6e 74 20 3d 20 30 3b 0a 0a 09 09 43 41 43 ount = 0;....CAC 21ab0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 21ac0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 21ad0 4f 4b 20 28 25 69 29 20 28 73 68 6f 72 74 20 63 OK (%i) (short c 21ae0 69 72 63 75 69 74 29 22 2c 20 43 4b 52 5f 4f 4b ircuit)", CKR_OK 21af0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 21b00 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 _OK);..}...if (p 21b10 68 4f 62 6a 65 63 74 20 3d 3d 20 4e 55 4c 4c 29 hObject == NULL) 21b20 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 21b30 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 21b40 20 20 70 68 4f 62 6a 65 63 74 20 69 73 20 4e 55 phObject is NU 21b50 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e LL.");....return 21b60 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 (CKR_ARGUMENTS_B 21b70 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 6c AD);..}...if (ul 21b80 4d 61 78 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d MaxObjectCount = 21b90 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 21ba0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 21bb0 72 6f 72 2e 20 20 4d 61 78 69 6d 75 6d 20 6e 75 ror. Maximum nu 21bc0 6d 62 65 72 20 6f 66 20 6f 62 6a 65 63 74 73 20 mber of objects 21bd0 73 70 65 63 69 66 69 65 64 20 61 73 20 7a 65 72 specified as zer 21be0 6f 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 o.");....return( 21bf0 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 CKR_ARGUMENTS_BA 21c00 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 D);..}...if (hSe 21c10 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 ssion == 0 || hS 21c20 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f ession >= (sizeo 21c30 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e f(cackey_session 21c40 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b s) / sizeof(cack 21c50 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 ey_sessions[0])) 21c60 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 21c70 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 21c80 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f . Session out o 21c90 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 f range.");..... 21ca0 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 21cb0 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 21cc0 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f ID);..}...mutex_ 21cd0 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 21ce0 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 mutex_lock(cacke 21cf0 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 y_biglock);..if 21d00 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 21d10 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 0) {...CACKEY_D 21d20 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 21d30 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 or. Locking fai 21d40 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 led.");....retur 21d50 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 21d60 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 ROR);..}...if (! 21d70 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 21d80 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 hSession].active 21d90 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 21da0 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 21db0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 21dc0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 21dd0 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 F("Error. Sessi 21de0 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 on not active.") 21df0 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 21e00 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 R_SESSION_HANDLE 21e10 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 _INVALID);..}... 21e20 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 if (!cackey_sess 21e30 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 21e40 65 61 72 63 68 5f 61 63 74 69 76 65 29 20 7b 0a earch_active) {. 21e50 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 ..cackey_mutex_u 21e60 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 nlock(cackey_big 21e70 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 lock);....CACKEY 21e80 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 21e90 72 72 6f 72 2e 20 20 53 65 61 72 63 68 20 6e 6f rror. Search no 21ea0 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a t active.");.... 21eb0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 ..return(CKR_OPE 21ec0 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 RATION_NOT_INITI 21ed0 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 63 75 ALIZED);..}...cu 21ee0 72 72 5f 6f 75 74 5f 69 64 5f 69 64 78 20 3d 20 rr_out_id_idx = 21ef0 30 3b 0a 09 66 6f 72 20 28 63 75 72 72 5f 69 64 0;..for (curr_id 21f00 5f 69 64 78 20 3d 20 63 61 63 6b 65 79 5f 73 65 _idx = cackey_se 21f10 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 21f20 2e 73 65 61 72 63 68 5f 63 75 72 72 5f 69 64 3b .search_curr_id; 21f30 20 63 75 72 72 5f 69 64 5f 69 64 78 20 3c 20 63 curr_id_idx < c 21f40 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 21f50 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 Session].identit 21f60 69 65 73 5f 63 6f 75 6e 74 20 26 26 20 75 6c 4d ies_count && ulM 21f70 61 78 4f 62 6a 65 63 74 43 6f 75 6e 74 3b 20 63 axObjectCount; c 21f80 75 72 72 5f 69 64 5f 69 64 78 2b 2b 29 20 7b 0a urr_id_idx++) {. 21f90 09 09 63 75 72 72 5f 69 64 20 3d 20 26 63 61 63 ..curr_id = &cac 21fa0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 21fb0 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 ssion].identitie 21fc0 73 5b 63 75 72 72 5f 69 64 5f 69 64 78 5d 3b 0a s[curr_id_idx];. 21fd0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 21fe0 50 52 49 4e 54 46 28 22 50 72 6f 63 65 73 73 69 PRINTF("Processi 21ff0 6e 67 20 69 64 65 6e 74 69 74 79 3a 25 6c 75 22 ng identity:%lu" 22000 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long 22010 29 20 63 75 72 72 5f 69 64 5f 69 64 78 29 3b 0a ) curr_id_idx);. 22020 0a 09 09 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 ...matched_count 22030 20 3d 20 30 3b 0a 0a 09 09 66 6f 72 20 28 63 75 = 0;....for (cu 22040 72 72 5f 61 74 74 72 5f 69 64 78 20 3d 20 30 3b rr_attr_idx = 0; 22050 20 63 75 72 72 5f 61 74 74 72 5f 69 64 78 20 3c curr_attr_idx < 22060 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 cackey_sessions 22070 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 [hSession].searc 22080 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 3b 20 63 h_query_count; c 22090 75 72 72 5f 61 74 74 72 5f 69 64 78 2b 2b 29 20 urr_attr_idx++) 220a0 7b 0a 09 09 09 70 72 65 76 5f 6d 61 74 63 68 65 {....prev_matche 220b0 64 5f 63 6f 75 6e 74 20 3d 20 6d 61 74 63 68 65 d_count = matche 220c0 64 5f 63 6f 75 6e 74 3b 0a 0a 09 09 09 63 75 72 d_count;.....cur 220d0 72 5f 61 74 74 72 20 3d 20 26 63 61 63 6b 65 79 r_attr = &cackey 220e0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 220f0 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 on].search_query 22100 5b 63 75 72 72 5f 61 74 74 72 5f 69 64 78 5d 3b [curr_attr_idx]; 22110 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 .....CACKEY_DEBU 22120 47 5f 50 52 49 4e 54 46 28 22 20 20 43 68 65 63 G_PRINTF(" Chec 22130 6b 69 6e 67 20 66 6f 72 20 61 74 74 72 69 62 75 king for attribu 22140 74 65 20 25 73 20 28 30 78 25 30 38 6c 78 29 20 te %s (0x%08lx) 22150 69 6e 20 69 64 65 6e 74 69 74 79 3a 25 69 2e 2e in identity:%i.. 22160 2e 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55 47 .", CACKEY_DEBUG 22170 5f 46 55 4e 43 5f 41 54 54 52 49 42 55 54 45 5f _FUNC_ATTRIBUTE_ 22180 54 4f 5f 53 54 52 28 63 75 72 72 5f 61 74 74 72 TO_STR(curr_attr 22190 2d 3e 74 79 70 65 29 2c 20 28 75 6e 73 69 67 6e ->type), (unsign 221a0 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 ed long) curr_at 221b0 74 72 2d 3e 74 79 70 65 2c 20 28 69 6e 74 29 20 tr->type, (int) 221c0 63 75 72 72 5f 69 64 5f 69 64 78 29 3b 0a 09 09 curr_id_idx);... 221d0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 221e0 49 4e 54 42 55 46 28 22 20 20 20 20 56 61 6c 75 INTBUF(" Valu 221f0 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 3a 22 2c e looking for:", 22200 20 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c curr_attr->pVal 22210 75 65 2c 20 63 75 72 72 5f 61 74 74 72 2d 3e 75 ue, curr_attr->u 22220 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 lValueLen);..... 22230 66 6f 72 20 28 73 65 73 73 5f 61 74 74 72 5f 69 for (sess_attr_i 22240 64 78 20 3d 20 30 3b 20 73 65 73 73 5f 61 74 74 dx = 0; sess_att 22250 72 5f 69 64 78 20 3c 20 63 75 72 72 5f 69 64 2d r_idx < curr_id- 22260 3e 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e >attributes_coun 22270 74 3b 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 t; sess_attr_idx 22280 2b 2b 29 20 7b 0a 09 09 09 09 69 66 20 28 63 61 ++) {.....if (ca 22290 63 6b 65 79 5f 70 6b 63 73 31 31 5f 63 6f 6d 70 ckey_pkcs11_comp 222a0 61 72 65 5f 61 74 74 72 69 62 75 74 65 73 28 26 are_attributes(& 222b0 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 curr_id->attribu 222c0 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 tes[sess_attr_id 222d0 78 5d 2c 20 63 75 72 72 5f 61 74 74 72 29 29 20 x], curr_attr)) 222e0 7b 0a 09 09 09 09 09 6d 61 74 63 68 65 64 5f 63 {......matched_c 222f0 6f 75 6e 74 2b 2b 3b 0a 0a 09 09 09 09 09 62 72 ount++;.......br 22300 65 61 6b 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 0a eak;.....}....}. 22310 0a 09 09 09 2f 2a 20 49 66 20 74 68 65 20 61 74 ..../* If the at 22320 74 72 69 62 75 74 65 20 63 6f 75 6c 64 20 6e 6f tribute could no 22330 74 20 62 65 20 6d 61 74 63 68 65 64 2c 20 64 6f t be matched, do 22340 20 6e 6f 74 20 74 72 79 20 74 6f 20 6d 61 74 63 not try to matc 22350 68 20 61 64 64 69 74 69 6f 6e 61 6c 20 61 74 74 h additional att 22360 72 69 62 75 74 65 73 20 2a 2f 0a 09 09 09 69 66 ributes */....if 22370 20 28 70 72 65 76 5f 6d 61 74 63 68 65 64 5f 63 (prev_matched_c 22380 6f 75 6e 74 20 3d 3d 20 6d 61 74 63 68 65 64 5f ount == matched_ 22390 63 6f 75 6e 74 29 20 7b 0a 09 09 09 09 62 72 65 count) {.....bre 223a0 61 6b 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 ak;....}...}.... 223b0 69 66 20 28 6d 61 74 63 68 65 64 5f 63 6f 75 6e if (matched_coun 223c0 74 20 3d 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 t == cackey_sess 223d0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 ions[hSession].s 223e0 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e earch_query_coun 223f0 74 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 t) {....CACKEY_D 22400 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 20 2e EBUG_PRINTF(" . 22410 2e 2e 20 41 6c 6c 20 25 69 20 61 74 74 72 69 62 .. All %i attrib 22420 75 74 65 73 20 63 68 65 63 6b 65 64 20 66 6f 72 utes checked for 22430 20 66 6f 75 6e 64 2c 20 61 64 64 69 6e 67 20 69 found, adding i 22440 64 65 6e 74 69 74 79 3a 25 69 20 74 6f 20 72 65 dentity:%i to re 22450 74 75 72 6e 65 64 20 6c 69 73 74 22 2c 20 28 69 turned list", (i 22460 6e 74 29 20 63 61 63 6b 65 79 5f 73 65 73 73 69 nt) cackey_sessi 22470 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 ons[hSession].se 22480 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 arch_query_count 22490 2c 20 28 69 6e 74 29 20 63 75 72 72 5f 69 64 5f , (int) curr_id_ 224a0 69 64 78 29 3b 0a 0a 09 09 09 70 68 4f 62 6a 65 idx);.....phObje 224b0 63 74 5b 63 75 72 72 5f 6f 75 74 5f 69 64 5f 69 ct[curr_out_id_i 224c0 64 78 5d 20 3d 20 63 75 72 72 5f 69 64 5f 69 64 dx] = curr_id_id 224d0 78 20 2b 20 31 3b 0a 0a 09 09 09 75 6c 4d 61 78 x + 1;.....ulMax 224e0 4f 62 6a 65 63 74 43 6f 75 6e 74 2d 2d 3b 0a 0a ObjectCount--;.. 224f0 09 09 09 63 75 72 72 5f 6f 75 74 5f 69 64 5f 69 ...curr_out_id_i 22500 64 78 2b 2b 3b 0a 09 09 7d 20 65 6c 73 65 20 7b dx++;...} else { 22510 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 22520 5f 50 52 49 4e 54 46 28 22 20 20 2e 2e 2e 20 4e _PRINTF(" ... N 22530 6f 74 20 61 6c 6c 20 25 69 20 28 6f 6e 6c 79 20 ot all %i (only 22540 66 6f 75 6e 64 20 25 69 29 20 61 74 74 72 69 62 found %i) attrib 22550 75 74 65 73 20 63 68 65 63 6b 65 64 20 66 6f 72 utes checked for 22560 20 66 6f 75 6e 64 2c 20 6e 6f 74 20 61 64 64 69 found, not addi 22570 6e 67 20 69 64 65 6e 74 69 74 79 3a 25 69 22 2c ng identity:%i", 22580 20 28 69 6e 74 29 20 63 61 63 6b 65 79 5f 73 65 (int) cackey_se 22590 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 225a0 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f .search_query_co 225b0 75 6e 74 2c 20 28 69 6e 74 29 20 6d 61 74 63 68 unt, (int) match 225c0 65 64 5f 63 6f 75 6e 74 2c 20 28 69 6e 74 29 20 ed_count, (int) 225d0 63 75 72 72 5f 69 64 5f 69 64 78 29 3b 0a 09 09 curr_id_idx);... 225e0 7d 0a 09 7d 0a 09 63 61 63 6b 65 79 5f 73 65 73 }..}..cackey_ses 225f0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 22600 73 65 61 72 63 68 5f 63 75 72 72 5f 69 64 20 3d search_curr_id = 22610 20 63 75 72 72 5f 69 64 5f 69 64 78 3b 0a 09 2a curr_id_idx;..* 22620 70 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d pulObjectCount = 22630 20 63 75 72 72 5f 6f 75 74 5f 69 64 5f 69 64 78 curr_out_id_idx 22640 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c ;...mutex_retval 22650 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 22660 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 22670 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 glock);..if (mut 22680 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 22690 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 226a0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 226b0 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 Unlocking faile 226c0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 226d0 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 226e0 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f R);..}...CACKEY_ 226f0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 DEBUG_PRINTF("Re 22700 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 turning CKR_OK ( 22710 25 69 29 2c 20 6e 75 6d 20 6f 62 6a 65 63 74 73 %i), num objects 22720 20 3d 20 25 6c 75 22 2c 20 43 4b 52 5f 4f 4b 2c = %lu", CKR_OK, 22730 20 2a 70 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 *pulObjectCount 22740 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 22750 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e OK);.}..CK_DEFIN 22760 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 22770 2c 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 , C_FindObjectsF 22780 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e inal)(CK_SESSION 22790 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 227a0 29 20 7b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 69 64 ) {..CK_ULONG id 227b0 78 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 x;..int mutex_re 227c0 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 tval;...CACKEY_D 227d0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 227e0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 227f0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 22800 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 22810 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 22820 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 22830 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 22840 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 22850 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 22860 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 ..}...if (hSessi 22870 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 on == 0 || hSess 22880 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 ion >= (sizeof(c 22890 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 ackey_sessions) 228a0 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f / sizeof(cackey_ 228b0 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b sessions[0]))) { 228c0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 228d0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 228e0 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 Session out of r 228f0 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 ange.");......re 22900 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e turn(CKR_SESSION 22910 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 _HANDLE_INVALID) 22920 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 ;..}...mutex_ret 22930 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 val = cackey_mut 22940 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 ex_lock(cackey_b 22950 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 22960 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 22970 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 22980 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 22990 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 Locking failed 229a0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 229b0 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 KR_GENERAL_ERROR 229c0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 );..}...if (!cac 229d0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 229e0 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b ssion].active) { 229f0 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 22a00 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 22a10 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 22a20 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 22a30 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 Error. Session 22a40 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 not active.");.. 22a50 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 ....return(CKR_S 22a60 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e ESSION_HANDLE_IN 22a70 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 VALID);..}...if 22a80 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (!cackey_session 22a90 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 s[hSession].sear 22aa0 63 68 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 ch_active) {...c 22ab0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 22ac0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 22ad0 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 22ae0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 22af0 72 2e 20 20 53 65 61 72 63 68 20 6e 6f 74 20 61 r. Search not a 22b00 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 ctive.");......r 22b10 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 eturn(CKR_OPERAT 22b20 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 ION_NOT_INITIALI 22b30 5a 45 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 ZED);..}...cacke 22b40 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 22b50 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 74 69 ion].search_acti 22b60 76 65 20 3d 20 30 3b 0a 0a 09 66 6f 72 20 28 69 ve = 0;...for (i 22b70 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 63 61 dx = 0; idx < ca 22b80 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 22b90 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 ession].search_q 22ba0 75 65 72 79 5f 63 6f 75 6e 74 3b 20 69 64 78 2b uery_count; idx+ 22bb0 2b 29 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 +) {...if (cacke 22bc0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 22bd0 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 ion].search_quer 22be0 79 5b 69 64 78 5d 2e 70 56 61 6c 75 65 29 20 7b y[idx].pValue) { 22bf0 0a 09 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f ....free(cackey_ 22c00 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 22c10 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5b n].search_query[ 22c20 69 64 78 5d 2e 70 56 61 6c 75 65 29 3b 0a 09 09 idx].pValue);... 22c30 7d 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 }..}...if (cacke 22c40 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 22c50 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 ion].search_quer 22c60 79 29 20 7b 0a 09 09 66 72 65 65 28 63 61 63 6b y) {...free(cack 22c70 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 22c80 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 sion].search_que 22c90 72 79 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f ry);..}...mutex_ 22ca0 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 22cb0 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 22cc0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 key_biglock);..i 22cd0 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 f (mutex_retval 22ce0 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 != 0) {...CACKEY 22cf0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 22d00 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 rror. Unlocking 22d10 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 22d20 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 22d30 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 L_ERROR);..}...C 22d40 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 22d50 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 22d60 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f R_OK (%i)", CKR_ 22d70 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b OK);...return(CK 22d80 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 R_OK);.}..CK_DEF 22d90 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 22da0 52 56 2c 20 43 5f 45 6e 63 72 79 70 74 49 6e 69 RV, C_EncryptIni 22db0 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 t)(CK_SESSION_HA 22dc0 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 22dd0 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 K_MECHANISM_PTR 22de0 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f pMechanism, CK_O 22df0 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 BJECT_HANDLE hKe 22e00 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 y) {..CACKEY_DEB 22e10 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 22e20 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 22e30 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 22e40 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 22e50 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 22e60 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 22e70 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 22e80 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 22e90 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 22ea0 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 }...CACKEY_DEBUG 22eb0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 _PRINTF("Returni 22ec0 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ng CKR_FUNCTION_ 22ed0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 NOT_SUPPORTED (% 22ee0 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f i)", CKR_FUNCTIO 22ef0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 N_NOT_SUPPORTED) 22f00 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 ;...return(CKR_F 22f10 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 22f20 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 ORTED);.}..CK_DE 22f30 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b FINE_FUNCTION(CK 22f40 5f 52 56 2c 20 43 5f 45 6e 63 72 79 70 74 29 28 _RV, C_Encrypt)( 22f50 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 22f60 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 22f70 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 YTE_PTR pData, C 22f80 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 K_ULONG ulDataLe 22f90 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 22fa0 45 6e 63 72 79 70 74 65 64 44 61 74 61 2c 20 43 EncryptedData, C 22fb0 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 45 K_ULONG_PTR pulE 22fc0 6e 63 72 79 70 74 65 64 44 61 74 61 4c 65 6e 29 ncryptedDataLen) 22fd0 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 22fe0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 22ff0 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 23000 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 23010 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 23020 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 23030 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 23040 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 23050 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 23060 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 23070 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 23080 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 23090 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 230a0 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 230b0 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 230c0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 230d0 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 230e0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 230f0 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 23100 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 23110 56 2c 20 43 5f 45 6e 63 72 79 70 74 55 70 64 61 V, C_EncryptUpda 23120 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 te)(CK_SESSION_H 23130 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 23140 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 CK_BYTE_PTR pPar 23150 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 t, CK_ULONG ulPa 23160 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 rtLen, CK_BYTE_P 23170 54 52 20 70 45 6e 63 72 79 70 74 65 64 50 61 72 TR pEncryptedPar 23180 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 t, CK_ULONG_PTR 23190 70 75 6c 45 6e 63 72 79 70 74 65 64 50 61 72 74 pulEncryptedPart 231a0 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Len) {..CACKEY_D 231b0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 231c0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 231d0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 231e0 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 231f0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 23200 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 23210 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 23220 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 23230 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 23240 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 23250 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 23260 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 23270 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 23280 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 23290 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 232a0 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 232b0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 232c0 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 232d0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 232e0 43 4b 5f 52 56 2c 20 43 5f 45 6e 63 72 79 70 74 CK_RV, C_Encrypt 232f0 46 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f Final)(CK_SESSIO 23300 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 23310 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 23320 4c 61 73 74 45 6e 63 72 79 70 74 65 64 50 61 72 LastEncryptedPar 23330 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 t, CK_ULONG_PTR 23340 70 75 6c 4c 61 73 74 45 6e 63 72 79 70 74 65 64 pulLastEncrypted 23350 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b PartLen) {..CACK 23360 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 23370 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 23380 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 23390 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 233a0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 233b0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 233c0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 233d0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 233e0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 233f0 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 23400 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 23410 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 23420 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 23430 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 23440 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 23450 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 23460 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 23470 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 23480 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 23490 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 ION(CK_RV, C_Dec 234a0 72 79 70 74 49 6e 69 74 29 28 43 4b 5f 53 45 53 ryptInit)(CK_SES 234b0 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 234c0 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 sion, CK_MECHANI 234d0 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 SM_PTR pMechanis 234e0 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e m, CK_OBJECT_HAN 234f0 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09 69 6e 74 DLE hKey) {..int 23500 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a mutex_retval;.. 23510 09 68 4b 65 79 2d 2d 3b 0a 0a 09 43 41 43 4b 45 .hKey--;...CACKE 23520 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 23530 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 23540 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 23550 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 23560 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 23570 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 23580 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 23590 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 235a0 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 235b0 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65 D);..}...if (pMe 235c0 63 68 61 6e 69 73 6d 20 3d 3d 20 4e 55 4c 4c 29 chanism == NULL) 235d0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 235e0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 235f0 20 70 4d 65 63 68 61 6e 69 73 6d 20 69 73 20 4e pMechanism is N 23600 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 ULL.");....retur 23610 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f n(CKR_ARGUMENTS_ 23620 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 BAD);..}...if (p 23630 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 Mechanism->mecha 23640 6e 69 73 6d 20 21 3d 20 43 4b 4d 5f 52 53 41 5f nism != CKM_RSA_ 23650 50 4b 43 53 29 20 7b 0a 09 09 43 41 43 4b 45 59 PKCS) {...CACKEY 23660 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 23670 72 72 6f 72 2e 20 70 4d 65 63 68 61 6e 69 73 6d rror. pMechanism 23680 2d 3e 6d 65 63 68 61 6e 69 73 6d 20 6e 6f 74 20 ->mechanism not 23690 73 70 65 63 69 66 69 65 64 20 61 73 20 43 4b 4d specified as CKM 236a0 5f 52 53 41 5f 50 4b 43 53 22 29 3b 0a 0a 09 09 _RSA_PKCS");.... 236b0 72 65 74 75 72 6e 28 43 4b 52 5f 4d 45 43 48 41 return(CKR_MECHA 236c0 4e 49 53 4d 5f 50 41 52 41 4d 5f 49 4e 56 41 4c NISM_PARAM_INVAL 236d0 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 ID);..}...if (hS 236e0 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 ession == 0 || h 236f0 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 Session >= (size 23700 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f of(cackey_sessio 23710 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 ns) / sizeof(cac 23720 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 key_sessions[0]) 23730 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 )) {...CACKEY_DE 23740 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 23750 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 r. Session out 23760 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a of range.");.... 23770 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 ..return(CKR_SES 23780 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 SION_HANDLE_INVA 23790 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 LID);..}...mutex 237a0 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 237b0 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b _mutex_lock(cack 237c0 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 ey_biglock);..if 237d0 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 (mutex_retval ! 237e0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 237f0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 23800 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 ror. Locking fa 23810 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 iled.");....retu 23820 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 23830 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 RROR);..}...if ( 23840 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 !cackey_sessions 23850 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 [hSession].activ 23860 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 e) {...cackey_mu 23870 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 tex_unlock(cacke 23880 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 y_biglock);....C 23890 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 238a0 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 TF("Error. Sess 238b0 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 ion not active." 238c0 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 );......return(C 238d0 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c KR_SESSION_HANDL 238e0 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 238f0 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 .if (cackey_sess 23900 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 ions[hSession].d 23910 65 63 72 79 70 74 5f 61 63 74 69 76 65 29 20 7b ecrypt_active) { 23920 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 23930 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 23940 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 23950 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 23960 45 72 72 6f 72 2e 20 20 44 65 63 72 79 70 74 20 Error. Decrypt 23970 61 6c 72 65 61 64 79 20 69 6e 20 70 72 6f 67 72 already in progr 23980 65 73 73 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ess.");......ret 23990 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f urn(CKR_OPERATIO 239a0 4e 5f 41 43 54 49 56 45 29 3b 0a 09 7d 0a 0a 09 N_ACTIVE);..}... 239b0 69 66 20 28 68 4b 65 79 20 3e 3d 20 63 61 63 6b if (hKey >= cack 239c0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 239d0 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 sion].identities 239e0 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 63 61 63 6b _count) {...cack 239f0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 23a00 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 23a10 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 23a20 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 23a30 20 4b 65 79 20 68 61 6e 64 6c 65 20 6f 75 74 20 Key handle out 23a40 6f 66 20 72 61 6e 67 65 20 28 72 65 71 75 65 73 of range (reques 23a50 74 65 64 20 6b 65 79 20 25 6c 75 2c 20 6f 6e 6c ted key %lu, onl 23a60 79 20 25 6c 75 20 69 64 65 6e 74 69 74 69 65 73 y %lu identities 23a70 20 61 76 61 69 6c 61 62 6c 65 29 2e 22 2c 20 28 available).", ( 23a80 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 unsigned long) h 23a90 4b 65 79 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c Key, (unsigned l 23aa0 6f 6e 67 29 20 63 61 63 6b 65 79 5f 73 65 73 73 ong) cackey_sess 23ab0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 ions[hSession].i 23ac0 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 dentities_count) 23ad0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 23ae0 4b 45 59 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c KEY_HANDLE_INVAL 23af0 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 ID);..}...cackey 23b00 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 23b10 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 69 on].decrypt_acti 23b20 76 65 20 3d 20 31 3b 0a 0a 09 63 61 63 6b 65 79 ve = 1;...cackey 23b30 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 23b40 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 6d 65 63 68 on].decrypt_mech 23b50 61 6e 69 73 6d 20 3d 20 70 4d 65 63 68 61 6e 69 anism = pMechani 23b60 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 3b 0a 09 sm->mechanism;.. 23b70 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 23b80 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 hSession].decryp 23b90 74 5f 6d 65 63 68 5f 70 61 72 6d 20 3d 20 70 4d t_mech_parm = pM 23ba0 65 63 68 61 6e 69 73 6d 2d 3e 70 50 61 72 61 6d echanism->pParam 23bb0 65 74 65 72 3b 0a 09 63 61 63 6b 65 79 5f 73 65 eter;..cackey_se 23bc0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 23bd0 2e 64 65 63 72 79 70 74 5f 6d 65 63 68 5f 70 61 .decrypt_mech_pa 23be0 72 6d 6c 65 6e 20 3d 20 70 4d 65 63 68 61 6e 69 rmlen = pMechani 23bf0 73 6d 2d 3e 75 6c 50 61 72 61 6d 65 74 65 72 4c sm->ulParameterL 23c00 65 6e 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 en;..cackey_sess 23c10 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 ions[hSession].d 23c20 65 63 72 79 70 74 5f 69 64 65 6e 74 69 74 79 20 ecrypt_identity 23c30 3d 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f = &cackey_sessio 23c40 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 ns[hSession].ide 23c50 6e 74 69 74 69 65 73 5b 68 4b 65 79 5d 3b 0a 0a ntities[hKey];.. 23c60 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 23c70 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 23c80 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 23c90 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 23ca0 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 23cb0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 23cc0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e INTF("Error. Un 23cd0 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 locking failed." 23ce0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 23cf0 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 23d00 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 23d10 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 23d20 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 23d30 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 23d40 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 23d50 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 23d60 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 ION(CK_RV, C_Dec 23d70 72 79 70 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e rypt)(CK_SESSION 23d80 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 23d90 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 , CK_BYTE_PTR pE 23da0 6e 63 72 79 70 74 65 64 44 61 74 61 2c 20 43 4b ncryptedData, CK 23db0 5f 55 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74 _ULONG ulEncrypt 23dc0 65 64 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 edDataLen, CK_BY 23dd0 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b TE_PTR pData, CK 23de0 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 44 61 _ULONG_PTR pulDa 23df0 74 61 4c 65 6e 29 20 7b 0a 09 43 4b 5f 55 4c 4f taLen) {..CK_ULO 23e00 4e 47 20 64 61 74 61 6c 65 6e 5f 75 70 64 61 74 NG datalen_updat 23e10 65 2c 20 64 61 74 61 6c 65 6e 5f 66 69 6e 61 6c e, datalen_final 23e20 3b 0a 09 43 4b 5f 52 56 20 64 65 63 72 79 70 74 ;..CK_RV decrypt 23e30 5f 72 65 74 3b 0a 09 69 6e 74 20 6d 75 74 65 78 _ret;..int mutex 23e40 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 _retval;...CACKE 23e50 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 23e60 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 23e70 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c (!cackey_initial 23e80 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 ized) {...CACKEY 23e90 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 23ea0 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 rror. Not initi 23eb0 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 alized.");....re 23ec0 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b turn(CKR_CRYPTOK 23ed0 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 I_NOT_INITIALIZE 23ee0 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 75 6c D);..}...if (pul 23ef0 44 61 74 61 4c 65 6e 20 3d 3d 20 4e 55 4c 4c 29 DataLen == NULL) 23f00 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 23f10 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 23f20 20 70 75 6c 44 61 74 61 4c 65 6e 20 69 73 20 4e pulDataLen is N 23f30 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 ULL.");....retur 23f40 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f n(CKR_ARGUMENTS_ 23f50 42 41 44 29 3b 0a 09 7d 0a 0a 09 64 61 74 61 6c BAD);..}...datal 23f60 65 6e 5f 75 70 64 61 74 65 20 3d 20 2a 70 75 6c en_update = *pul 23f70 44 61 74 61 4c 65 6e 3b 0a 0a 09 64 65 63 72 79 DataLen;...decry 23f80 70 74 5f 72 65 74 20 3d 20 43 5f 44 65 63 72 79 pt_ret = C_Decry 23f90 70 74 55 70 64 61 74 65 28 68 53 65 73 73 69 6f ptUpdate(hSessio 23fa0 6e 2c 20 70 45 6e 63 72 79 70 74 65 64 44 61 74 n, pEncryptedDat 23fb0 61 2c 20 75 6c 45 6e 63 72 79 70 74 65 64 44 61 a, ulEncryptedDa 23fc0 74 61 4c 65 6e 2c 20 70 44 61 74 61 2c 20 26 64 taLen, pData, &d 23fd0 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 29 3b 0a atalen_update);. 23fe0 09 69 66 20 28 64 65 63 72 79 70 74 5f 72 65 74 .if (decrypt_ret 23ff0 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 != CKR_OK) {... 24000 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 24010 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 44 65 63 NTF("Error. Dec 24020 72 79 70 74 55 70 64 61 74 65 28 29 20 72 65 74 ryptUpdate() ret 24030 75 72 6e 65 64 20 66 61 69 6c 75 72 65 20 28 72 urned failure (r 24040 76 20 3d 20 25 6c 75 29 2e 22 2c 20 28 75 6e 73 v = %lu).", (uns 24050 69 67 6e 65 64 20 6c 6f 6e 67 29 20 64 65 63 72 igned long) decr 24060 79 70 74 5f 72 65 74 29 3b 0a 0a 09 09 69 66 20 ypt_ret);....if 24070 28 64 65 63 72 79 70 74 5f 72 65 74 20 21 3d 20 (decrypt_ret != 24080 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 CKR_BUFFER_TOO_S 24090 4d 41 4c 4c 29 20 7b 0a 09 09 09 2f 2a 20 54 65 MALL) {..../* Te 240a0 72 6d 69 6e 61 74 65 20 64 65 63 72 79 70 74 69 rminate decrypti 240b0 6f 6e 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a on operation */. 240c0 0a 09 09 09 6d 75 74 65 78 5f 72 65 74 76 61 6c ....mutex_retval 240d0 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f = cackey_mutex_ 240e0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c lock(cackey_bigl 240f0 6f 63 6b 29 3b 0a 09 09 09 69 66 20 28 6d 75 74 ock);....if (mut 24100 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 ex_retval != 0) 24110 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 {.....CACKEY_DEB 24120 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 24130 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 24140 64 2e 22 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 d.");......retur 24150 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 n(CKR_GENERAL_ER 24160 52 4f 52 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 ROR);....}.....i 24170 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 24180 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 ons[hSession].ac 24190 74 69 76 65 29 20 7b 0a 09 09 09 09 63 61 63 6b tive) {.....cack 241a0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 241b0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 241c0 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 ......CACKEY_DEB 241d0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 241e0 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 . Session not a 241f0 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 09 ctive.");....... 24200 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 .return(CKR_SESS 24210 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c ION_HANDLE_INVAL 24220 49 44 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 ID);....}.....if 24230 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f (!cackey_sessio 24240 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 ns[hSession].dec 24250 72 79 70 74 5f 61 63 74 69 76 65 29 20 7b 0a 09 rypt_active) {.. 24260 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 24270 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 24280 67 6c 6f 63 6b 29 3b 0a 0a 09 09 09 09 43 41 43 glock);......CAC 24290 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 242a0 28 22 45 72 72 6f 72 2e 20 20 44 65 63 72 79 70 ("Error. Decryp 242b0 74 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b t not active."); 242c0 0a 09 09 0a 09 09 09 09 72 65 74 75 72 6e 28 43 ........return(C 242d0 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 KR_OPERATION_NOT 242e0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 242f0 09 09 7d 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 ..}.....cackey_s 24300 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 24310 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 ].decrypt_active 24320 20 3d 20 30 3b 0a 0a 09 09 09 6d 75 74 65 78 5f = 0;.....mutex_ 24330 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f retval = cackey_ 24340 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 24350 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 09 key_biglock);... 24360 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 24370 6c 20 21 3d 20 30 29 20 7b 0a 09 09 09 09 43 41 l != 0) {.....CA 24380 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 24390 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 F("Error. Unloc 243a0 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a king failed.");. 243b0 0a 09 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 243c0 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 243d0 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 72 65 74 75 ...}...}....retu 243e0 72 6e 28 64 65 63 72 79 70 74 5f 72 65 74 29 3b rn(decrypt_ret); 243f0 0a 09 7d 0a 0a 09 69 66 20 28 70 44 61 74 61 29 ..}...if (pData) 24400 20 7b 0a 09 09 70 44 61 74 61 20 2b 3d 20 64 61 {...pData += da 24410 74 61 6c 65 6e 5f 75 70 64 61 74 65 3b 0a 09 7d talen_update;..} 24420 0a 09 64 61 74 61 6c 65 6e 5f 66 69 6e 61 6c 20 ..datalen_final 24430 3d 20 2a 70 75 6c 44 61 74 61 4c 65 6e 20 2d 20 = *pulDataLen - 24440 64 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 3b 0a datalen_update;. 24450 0a 09 64 65 63 72 79 70 74 5f 72 65 74 20 3d 20 ..decrypt_ret = 24460 43 5f 44 65 63 72 79 70 74 46 69 6e 61 6c 28 68 C_DecryptFinal(h 24470 53 65 73 73 69 6f 6e 2c 20 70 44 61 74 61 2c 20 Session, pData, 24480 26 64 61 74 61 6c 65 6e 5f 66 69 6e 61 6c 29 3b &datalen_final); 24490 0a 09 69 66 20 28 64 65 63 72 79 70 74 5f 72 65 ..if (decrypt_re 244a0 74 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 t != CKR_OK) {.. 244b0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 244c0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 44 65 INTF("Error. De 244d0 63 72 79 70 74 46 69 6e 61 6c 28 29 20 72 65 74 cryptFinal() ret 244e0 75 72 6e 65 64 20 66 61 69 6c 75 72 65 20 28 72 urned failure (r 244f0 76 20 3d 20 25 6c 75 29 2e 22 2c 20 28 75 6e 73 v = %lu).", (uns 24500 69 67 6e 65 64 20 6c 6f 6e 67 29 20 64 65 63 72 igned long) decr 24510 79 70 74 5f 72 65 74 29 3b 0a 0a 09 09 72 65 74 ypt_ret);....ret 24520 75 72 6e 28 64 65 63 72 79 70 74 5f 72 65 74 29 urn(decrypt_ret) 24530 3b 0a 09 7d 0a 0a 09 2a 70 75 6c 44 61 74 61 4c ;..}...*pulDataL 24540 65 6e 20 3d 20 64 61 74 61 6c 65 6e 5f 75 70 64 en = datalen_upd 24550 61 74 65 20 2b 20 64 61 74 61 6c 65 6e 5f 66 69 ate + datalen_fi 24560 6e 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 nal;...CACKEY_DE 24570 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 24580 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 rning CKR_OK (%i 24590 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 )", CKR_OK);...r 245a0 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d eturn(CKR_OK);.} 245b0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 245c0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 TION(CK_RV, C_De 245d0 63 72 79 70 74 55 70 64 61 74 65 29 28 43 4b 5f cryptUpdate)(CK_ 245e0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 245f0 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 24600 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 64 50 _PTR pEncryptedP 24610 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c art, CK_ULONG ul 24620 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e EncryptedPartLen 24630 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 , CK_BYTE_PTR pP 24640 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 art, CK_ULONG_PT 24650 52 20 70 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a R pulPartLen) {. 24660 09 73 74 61 74 69 63 20 43 4b 5f 42 59 54 45 20 .static CK_BYTE 24670 62 75 66 5b 31 36 33 38 34 5d 3b 0a 09 73 73 69 buf[16384];..ssi 24680 7a 65 5f 74 20 62 75 66 6c 65 6e 3b 0a 09 43 4b ze_t buflen;..CK 24690 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 3b _SLOT_ID slotID; 246a0 0a 09 43 4b 5f 52 56 20 72 65 74 76 61 6c 20 3d ..CK_RV retval = 246b0 20 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 CKR_GENERAL_ERR 246c0 4f 52 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 OR;..int mutex_r 246d0 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f etval;...CACKEY_ 246e0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 246f0 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 24700 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 24710 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 24720 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 24730 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 24740 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 24750 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 24760 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 24770 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 ;..}...if (hSess 24780 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 ion == 0 || hSes 24790 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 sion >= (sizeof( 247a0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 247b0 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 247c0 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 _sessions[0]))) 247d0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 247e0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 247f0 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 Session out of 24800 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 range.");......r 24810 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 24820 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 24830 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 45 6e 63 );..}...if (pEnc 24840 72 79 70 74 65 64 50 61 72 74 20 3d 3d 20 4e 55 ryptedPart == NU 24850 4c 4c 20 26 26 20 75 6c 45 6e 63 72 79 70 74 65 LL && ulEncrypte 24860 64 50 61 72 74 4c 65 6e 20 3d 3d 20 30 29 20 7b dPartLen == 0) { 24870 0a 09 09 2f 2a 20 53 68 6f 72 74 20 63 69 72 63 .../* Short circ 24880 75 69 74 20 69 66 20 77 65 20 61 72 65 20 61 73 uit if we are as 24890 6b 65 64 20 74 6f 20 64 65 63 72 79 70 74 20 6e ked to decrypt n 248a0 6f 74 68 69 6e 67 2e 2e 2e 20 2a 2f 0a 09 09 43 othing... */...C 248b0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 248c0 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b TF("Returning CK 248d0 52 5f 4f 4b 20 28 25 69 29 20 28 73 68 6f 72 74 R_OK (%i) (short 248e0 20 63 69 72 63 75 69 74 29 22 2c 20 43 4b 52 5f circuit)", CKR_ 248f0 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 OK);....return(C 24900 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 KR_OK);..}...if 24910 28 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 20 (pEncryptedPart 24920 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 24930 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 24940 28 22 45 72 72 6f 72 2e 20 70 45 6e 63 72 79 70 ("Error. pEncryp 24950 74 65 64 50 61 72 74 20 69 73 20 4e 55 4c 4c 2c tedPart is NULL, 24960 20 62 75 74 20 75 6c 45 6e 63 72 79 70 74 65 64 but ulEncrypted 24970 50 61 72 74 4c 65 6e 20 69 73 20 6e 6f 74 20 30 PartLen is not 0 24980 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 24990 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD 249a0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 6c 45 6e );..}...if (ulEn 249b0 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 3d cryptedPartLen = 249c0 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f = 0) {...CACKEY_ 249d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 249e0 72 6f 72 2e 20 75 6c 45 6e 63 72 79 70 74 65 64 ror. ulEncrypted 249f0 50 61 72 74 4c 65 6e 20 69 73 20 30 2c 20 62 75 PartLen is 0, bu 24a00 74 20 70 50 61 72 74 20 69 73 20 6e 6f 74 20 4e t pPart is not N 24a10 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 ULL.");....retur 24a20 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f n(CKR_ARGUMENTS_ 24a30 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 BAD);..}...if (p 24a40 75 6c 50 61 72 74 4c 65 6e 20 3d 3d 20 4e 55 4c ulPartLen == NUL 24a50 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 L) {...CACKEY_DE 24a60 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 24a70 72 2e 20 70 75 6c 50 61 72 74 4c 65 6e 20 69 73 r. pulPartLen is 24a80 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 NULL.");....ret 24a90 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 urn(CKR_ARGUMENT 24aa0 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 S_BAD);..}...mut 24ab0 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b ex_retval = cack 24ac0 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 ey_mutex_lock(ca 24ad0 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 24ae0 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 24af0 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 24b00 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 24b10 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 Error. Locking 24b20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 failed.");....re 24b30 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c turn(CKR_GENERAL 24b40 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 _ERROR);..}...if 24b50 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f (!cackey_sessio 24b60 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 ns[hSession].act 24b70 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f ive) {...cackey_ 24b80 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 mutex_unlock(cac 24b90 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 key_biglock);... 24ba0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 24bb0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 24bc0 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 ssion not active 24bd0 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e .");......return 24be0 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e (CKR_SESSION_HAN 24bf0 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d DLE_INVALID);..} 24c00 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 ...if (!cackey_s 24c10 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 24c20 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76 65 ].decrypt_active 24c30 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 ) {...cackey_mut 24c40 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 ex_unlock(cackey 24c50 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 _biglock);....CA 24c60 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 24c70 46 28 22 45 72 72 6f 72 2e 20 20 44 65 63 72 79 F("Error. Decry 24c80 70 74 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 pt not active.") 24c90 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b ;......return(CK 24ca0 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f R_OPERATION_NOT_ 24cb0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 24cc0 0a 0a 09 73 6c 6f 74 49 44 20 3d 20 63 61 63 6b ...slotID = cack 24cd0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 24ce0 73 69 6f 6e 5d 2e 73 6c 6f 74 49 44 3b 0a 0a 09 sion].slotID;... 24cf0 69 66 20 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c if (slotID < 0 | 24d00 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a | slotID >= (siz 24d10 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 eof(cackey_slots 24d20 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke 24d30 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a y_slots[0]))) {. 24d40 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 24d50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e RINTF("Error. In 24d60 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 valid slot reque 24d70 73 74 65 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 sted (%lu), outs 24d80 69 64 65 20 6f 66 20 76 61 6c 69 64 20 72 61 6e ide of valid ran 24d90 67 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 ge", slotID);... 24da0 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 .return(CKR_GENE 24db0 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a RAL_ERROR);..}.. 24dc0 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 .if (cackey_slot 24dd0 73 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 s[slotID].active 24de0 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 == 0) {...CACKE 24df0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 24e00 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 Error. Invalid s 24e10 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 lot requested (% 24e20 6c 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 lu), slot not cu 24e30 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c rrently active", 24e40 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 63 61 63 slotID);....cac 24e50 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 24e60 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 24e70 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 24e80 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 24e90 09 7d 0a 0a 09 73 77 69 74 63 68 20 28 63 61 63 .}...switch (cac 24ea0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 24eb0 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 6d ssion].decrypt_m 24ec0 65 63 68 61 6e 69 73 6d 29 20 7b 0a 09 09 63 61 echanism) {...ca 24ed0 73 65 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 3a se CKM_RSA_PKCS: 24ee0 0a 09 09 09 2f 2a 20 41 73 6b 20 63 61 72 64 20 ..../* Ask card 24ef0 74 6f 20 64 65 63 72 79 70 74 20 2a 2f 0a 09 09 to decrypt */... 24f00 09 62 75 66 6c 65 6e 20 3d 20 63 61 63 6b 65 79 .buflen = cackey 24f10 5f 73 69 67 6e 64 65 63 72 79 70 74 28 26 63 61 _signdecrypt(&ca 24f20 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 ckey_slots[slotI 24f30 44 5d 2c 20 63 61 63 6b 65 79 5f 73 65 73 73 69 D], cackey_sessi 24f40 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 ons[hSession].de 24f50 63 72 79 70 74 5f 69 64 65 6e 74 69 74 79 2c 20 crypt_identity, 24f60 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 pEncryptedPart, 24f70 75 6c 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c ulEncryptedPartL 24f80 65 6e 2c 20 62 75 66 2c 20 73 69 7a 65 6f 66 28 en, buf, sizeof( 24f90 62 75 66 29 2c 20 30 2c 20 31 29 3b 0a 0a 09 09 buf), 0, 1);.... 24fa0 09 69 66 20 28 62 75 66 6c 65 6e 20 3c 20 30 29 .if (buflen < 0) 24fb0 20 7b 0a 09 09 09 09 2f 2a 20 44 65 63 72 79 70 {...../* Decryp 24fc0 74 69 6f 6e 20 66 61 69 6c 65 64 2e 20 2a 2f 0a tion failed. */. 24fd0 09 09 09 09 69 66 20 28 62 75 66 6c 65 6e 20 3d ....if (buflen = 24fe0 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f = CACKEY_PCSC_E_ 24ff0 4e 45 45 44 4c 4f 47 49 4e 29 20 7b 0a 09 09 09 NEEDLOGIN) {.... 25000 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 55 ..retval = CKR_U 25010 53 45 52 5f 4e 4f 54 5f 4c 4f 47 47 45 44 5f 49 SER_NOT_LOGGED_I 25020 4e 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 69 66 N;.....} else if 25030 20 28 62 75 66 6c 65 6e 20 3d 3d 20 43 41 43 4b (buflen == CACK 25040 45 59 5f 50 43 53 43 5f 45 5f 54 4f 4b 45 4e 41 EY_PCSC_E_TOKENA 25050 42 53 45 4e 54 29 20 7b 0a 09 09 09 09 09 72 65 BSENT) {......re 25060 74 76 61 6c 20 3d 20 43 4b 52 5f 44 45 56 49 43 tval = CKR_DEVIC 25070 45 5f 52 45 4d 4f 56 45 44 3b 0a 09 09 09 09 7d E_REMOVED;.....} 25080 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 72 65 74 else {......ret 25090 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e 45 52 41 val = CKR_GENERA 250a0 4c 5f 45 52 52 4f 52 3b 0a 09 09 09 09 7d 0a 09 L_ERROR;.....}.. 250b0 09 09 7d 20 65 6c 73 65 20 69 66 20 28 28 28 75 ..} else if (((u 250c0 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 62 75 nsigned long) bu 250d0 66 6c 65 6e 29 20 3e 20 2a 70 75 6c 50 61 72 74 flen) > *pulPart 250e0 4c 65 6e 20 26 26 20 70 50 61 72 74 29 20 7b 0a Len && pPart) {. 250f0 09 09 09 09 2f 2a 20 44 65 63 72 79 70 74 65 64 ..../* Decrypted 25100 20 64 61 74 61 20 74 6f 6f 20 6c 61 72 67 65 20 data too large 25110 2a 2f 0a 09 09 09 09 72 65 74 76 61 6c 20 3d 20 */.....retval = 25120 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 CKR_BUFFER_TOO_S 25130 4d 41 4c 4c 3b 0a 09 09 09 7d 20 65 6c 73 65 20 MALL;....} else 25140 7b 0a 09 09 09 09 69 66 20 28 70 50 61 72 74 29 {.....if (pPart) 25150 20 7b 0a 09 09 09 09 09 6d 65 6d 63 70 79 28 70 {......memcpy(p 25160 50 61 72 74 2c 20 62 75 66 2c 20 62 75 66 6c 65 Part, buf, bufle 25170 6e 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 2a n);.....}......* 25180 70 75 6c 50 61 72 74 4c 65 6e 20 3d 20 62 75 66 pulPartLen = buf 25190 6c 65 6e 3b 0a 0a 09 09 09 09 72 65 74 76 61 6c len;......retval 251a0 20 3d 20 43 4b 52 5f 4f 4b 3b 0a 09 09 09 7d 0a = CKR_OK;....}. 251b0 0a 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 ....break;..}... 251c0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 251d0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 251e0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 251f0 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 25200 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 25210 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 25220 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c NTF("Error. Unl 25230 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 25240 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 25250 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 25260 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 25270 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 25280 69 6e 67 20 25 69 22 2c 20 28 69 6e 74 29 20 72 ing %i", (int) r 25290 65 74 76 61 6c 29 3b 0a 0a 09 72 65 74 75 72 6e etval);...return 252a0 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 43 4b 5f (retval);.}..CK_ 252b0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 252c0 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 74 CK_RV, C_Decrypt 252d0 46 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f Final)(CK_SESSIO 252e0 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 252f0 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 25300 4c 61 73 74 50 61 72 74 2c 20 43 4b 5f 55 4c 4f LastPart, CK_ULO 25310 4e 47 5f 50 54 52 20 70 75 6c 4c 61 73 74 50 61 NG_PTR pulLastPa 25320 72 74 4c 65 6e 29 20 7b 0a 09 69 6e 74 20 6d 75 rtLen) {..int mu 25330 74 65 78 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 tex_retval;..int 25340 20 74 65 72 6d 69 6e 61 74 65 5f 64 65 63 72 79 terminate_decry 25350 70 74 20 3d 20 31 3b 0a 0a 09 43 41 43 4b 45 59 pt = 1;...CACKEY 25360 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C 25370 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 alled.");...if ( 25380 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 !cackey_initiali 25390 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f zed) {...CACKEY_ 253a0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 253b0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 ror. Not initia 253c0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 lized.");....ret 253d0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 urn(CKR_CRYPTOKI 253e0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 _NOT_INITIALIZED 253f0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 );..}...if (hSes 25400 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 sion == 0 || hSe 25410 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 ssion >= (sizeof 25420 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 25430 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 ) / sizeof(cacke 25440 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 y_sessions[0]))) 25450 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 25460 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 25470 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 Session out of 25480 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 range.");...... 25490 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 254a0 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 254b0 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 75 6c D);..}...if (pul 254c0 4c 61 73 74 50 61 72 74 4c 65 6e 20 3d 3d 20 4e LastPartLen == N 254d0 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f ULL) {...CACKEY_ 254e0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 254f0 72 6f 72 2e 20 70 75 6c 4c 61 73 74 50 61 72 74 ror. pulLastPart 25500 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a Len is NULL.");. 25510 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 ...return(CKR_AR 25520 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d GUMENTS_BAD);..} 25530 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 ...mutex_retval 25540 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c = cackey_mutex_l 25550 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 25560 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 25570 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 25580 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 25590 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f INTF("Error. Lo 255a0 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b cking failed."); 255b0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 ....return(CKR_G 255c0 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 ENERAL_ERROR);.. 255d0 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f }...if (!cackey_ 255e0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 255f0 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 n].active) {...c 25600 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 25610 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 25620 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 k);....CACKEY_DE 25630 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 25640 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 r. Session not 25650 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 active.");...... 25660 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 return(CKR_SESSI 25670 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 ON_HANDLE_INVALI 25680 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 D);..}...if (!ca 25690 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 256a0 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f ession].decrypt_ 256b0 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b active) {...cack 256c0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 ey_mutex_unlock( 256d0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 256e0 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 ....CACKEY_DEBUG 256f0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 25700 20 44 65 63 72 79 70 74 20 6e 6f 74 20 61 63 74 Decrypt not act 25710 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 ive.");......ret 25720 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f urn(CKR_OPERATIO 25730 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 N_NOT_INITIALIZE 25740 44 29 3b 0a 09 7d 0a 0a 09 2a 70 75 6c 4c 61 73 D);..}...*pulLas 25750 74 50 61 72 74 4c 65 6e 20 3d 20 30 3b 0a 0a 09 tPartLen = 0;... 25760 69 66 20 28 70 4c 61 73 74 50 61 72 74 20 3d 3d if (pLastPart == 25770 20 4e 55 4c 4c 29 20 7b 0a 09 09 74 65 72 6d 69 NULL) {...termi 25780 6e 61 74 65 5f 64 65 63 72 79 70 74 20 3d 20 30 nate_decrypt = 0 25790 3b 0a 09 7d 0a 0a 09 69 66 20 28 74 65 72 6d 69 ;..}...if (termi 257a0 6e 61 74 65 5f 64 65 63 72 79 70 74 29 20 7b 0a nate_decrypt) {. 257b0 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 257c0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 s[hSession].decr 257d0 79 70 74 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a ypt_active = 0;. 257e0 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 .}...mutex_retva 257f0 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 25800 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 25810 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 iglock);..if (mu 25820 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 tex_retval != 0) 25830 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 25840 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 25850 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c Unlocking fail 25860 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 25870 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 (CKR_GENERAL_ERR 25880 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 OR);..}...CACKEY 25890 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 258a0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 eturning CKR_OK 258b0 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a (%i)", CKR_OK);. 258c0 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 ..return(CKR_OK) 258d0 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 ;.}..CK_DEFINE_F 258e0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 UNCTION(CK_RV, C 258f0 5f 44 69 67 65 73 74 49 6e 69 74 29 28 43 4b 5f _DigestInit)(CK_ 25900 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 25910 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 Session, CK_MECH 25920 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 ANISM_PTR pMecha 25930 6e 69 73 6d 29 20 7b 0a 09 43 41 43 4b 45 59 5f nism) {..CACKEY_ 25940 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 25950 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 25960 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 25970 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 25980 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 25990 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 259a0 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 259b0 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 259c0 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 259d0 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 259e0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 259f0 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 rning CKR_FUNCTI 25a00 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 25a10 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 (%i)", CKR_FUNC 25a20 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 25a30 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK 25a40 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 25a50 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b UPPORTED);.}..CK 25a60 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 25a70 28 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 (CK_RV, C_Digest 25a80 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 25a90 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 25aa0 5f 42 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c _BYTE_PTR pData, 25ab0 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 CK_ULONG ulData 25ac0 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 Len, CK_BYTE_PTR 25ad0 20 70 44 69 67 65 73 74 2c 20 43 4b 5f 55 4c 4f pDigest, CK_ULO 25ae0 4e 47 5f 50 54 52 20 70 75 6c 44 69 67 65 73 74 NG_PTR pulDigest 25af0 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Len) {..CACKEY_D 25b00 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 25b10 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 25b20 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 25b30 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 25b40 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 25b50 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 25b60 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 25b70 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 25b80 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 25b90 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 25ba0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 25bb0 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 25bc0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 25bd0 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 25be0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 25bf0 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 25c00 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 25c10 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 25c20 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 25c30 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 55 CK_RV, C_DigestU 25c40 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f pdate)(CK_SESSIO 25c50 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 25c60 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 25c70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 Part, CK_ULONG u 25c80 6c 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 lPartLen) {..CAC 25c90 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 25ca0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 25cb0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 25cc0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 25cd0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 25ce0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 25cf0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 25d00 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 25d10 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 25d20 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 25d30 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 25d40 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 25d50 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 25d60 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 25d70 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 25d80 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 25d90 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 25da0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 25db0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 25dc0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 69 TION(CK_RV, C_Di 25dd0 67 65 73 74 4b 65 79 29 28 43 4b 5f 53 45 53 53 gestKey)(CK_SESS 25de0 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 25df0 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 ion, CK_OBJECT_H 25e00 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 ANDLE hKey) {..C 25e10 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 25e20 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 25e30 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 25e40 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 25e50 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 25e60 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 25e70 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 25e80 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 25e90 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 25ea0 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 LIZED);..}...CAC 25eb0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 25ec0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f ("Returning CKR_ 25ed0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 25ee0 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b PORTED (%i)", CK 25ef0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 25f00 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 UPPORTED);...ret 25f10 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e urn(CKR_FUNCTION 25f20 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 25f30 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 .}..CK_DEFINE_FU 25f40 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f NCTION(CK_RV, C_ 25f50 44 69 67 65 73 74 46 69 6e 61 6c 29 28 43 4b 5f DigestFinal)(CK_ 25f60 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h 25f70 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 Session, CK_BYTE 25f80 5f 50 54 52 20 70 44 69 67 65 73 74 2c 20 43 4b _PTR pDigest, CK 25f90 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 44 69 _ULONG_PTR pulDi 25fa0 67 65 73 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b gestLen) {..CACK 25fb0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 25fc0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 25fd0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 25fe0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 25ff0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 26000 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 26010 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 26020 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 26030 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 26040 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 26050 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 26060 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 26070 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 26080 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 26090 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 260a0 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 260b0 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 260c0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 260d0 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 260e0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 ION(CK_RV, C_Sig 260f0 6e 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f nInit)(CK_SESSIO 26100 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f N_HANDLE hSessio 26110 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f n, CK_MECHANISM_ 26120 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 PTR pMechanism, 26130 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 CK_OBJECT_HANDLE 26140 20 68 4b 65 79 29 20 7b 0a 09 69 6e 74 20 6d 75 hKey) {..int mu 26150 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 68 4b tex_retval;...hK 26160 65 79 2d 2d 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 ey--;...CACKEY_D 26170 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 26180 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 26190 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 261a0 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 261b0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 261c0 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 261d0 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 261e0 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 261f0 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 26200 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 ..}...if (pMecha 26210 6e 69 73 6d 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a nism == NULL) {. 26220 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 26230 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 4d RINTF("Error. pM 26240 65 63 68 61 6e 69 73 6d 20 69 73 20 4e 55 4c 4c echanism is NULL 26250 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 26260 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 KR_ARGUMENTS_BAD 26270 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63 );..}...if (pMec 26280 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 hanism->mechanis 26290 6d 20 21 3d 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 m != CKM_RSA_PKC 262a0 53 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 S) {...CACKEY_DE 262b0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 262c0 72 2e 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d r. pMechanism->m 262d0 65 63 68 61 6e 69 73 6d 20 6e 6f 74 20 73 70 65 echanism not spe 262e0 63 69 66 69 65 64 20 61 73 20 43 4b 4d 5f 52 53 cified as CKM_RS 262f0 41 5f 50 4b 43 53 22 29 3b 0a 0a 09 09 72 65 74 A_PKCS");....ret 26300 75 72 6e 28 43 4b 52 5f 4d 45 43 48 41 4e 49 53 urn(CKR_MECHANIS 26310 4d 5f 50 41 52 41 4d 5f 49 4e 56 41 4c 49 44 29 M_PARAM_INVALID) 26320 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 ;..}...if (hSess 26330 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 ion == 0 || hSes 26340 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 sion >= (sizeof( 26350 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 cackey_sessions) 26360 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 / sizeof(cackey 26370 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 _sessions[0]))) 26380 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 26390 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 263a0 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 Session out of 263b0 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 range.");......r 263c0 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f eturn(CKR_SESSIO 263d0 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 N_HANDLE_INVALID 263e0 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 );..}...mutex_re 263f0 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 26400 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 26410 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d biglock);..if (m 26420 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 utex_retval != 0 26430 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 26440 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 26450 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 . Locking faile 26460 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 26470 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f CKR_GENERAL_ERRO 26480 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 R);..}...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 61 63 74 69 76 65 29 20 ession].active) 264b0 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 264c0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 264d0 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 264e0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 264f0 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e "Error. Session 26500 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a not active.");. 26510 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 26520 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 26530 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 NVALID);..}...if 26540 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e (cackey_session 26550 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 26560 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 _active) {...cac 26570 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b key_mutex_unlock 26580 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 (cackey_biglock) 26590 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 ;....CACKEY_DEBU 265a0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 265b0 20 20 53 69 67 6e 20 61 6c 72 65 61 64 79 20 69 Sign already i 265c0 6e 20 70 72 6f 67 72 65 73 73 2e 22 29 3b 0a 09 n progress.");.. 265d0 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f ....return(CKR_O 265e0 50 45 52 41 54 49 4f 4e 5f 41 43 54 49 56 45 29 PERATION_ACTIVE) 265f0 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 4b 65 79 20 ;..}...if (hKey 26600 3e 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f >= cackey_sessio 26610 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 ns[hSession].ide 26620 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 20 7b ntities_count) { 26630 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f ...cackey_mutex_ 26640 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 unlock(cackey_bi 26650 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 glock);....CACKE 26660 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 26670 45 72 72 6f 72 2e 20 20 4b 65 79 20 68 61 6e 64 Error. Key hand 26680 6c 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 le out of range 26690 28 72 65 71 75 65 73 74 65 64 20 6b 65 79 20 25 (requested key % 266a0 6c 75 2c 20 6f 6e 6c 79 20 25 6c 75 20 69 64 65 lu, only %lu ide 266b0 6e 74 69 74 69 65 73 20 61 76 61 69 6c 61 62 6c ntities availabl 266c0 65 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 e).", (unsigned 266d0 6c 6f 6e 67 29 20 68 4b 65 79 2c 20 28 75 6e 73 long) hKey, (uns 266e0 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 61 63 6b igned long) cack 266f0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 26700 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 sion].identities 26710 5f 63 6f 75 6e 74 29 3b 0a 0a 09 09 72 65 74 75 _count);....retu 26720 72 6e 28 43 4b 52 5f 4b 45 59 5f 48 41 4e 44 4c rn(CKR_KEY_HANDL 26730 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a E_INVALID);..}.. 26740 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 26750 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 26760 61 63 74 69 76 65 20 3d 20 31 3b 0a 0a 09 63 61 active = 1;...ca 26770 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 26780 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 6d 65 63 ession].sign_mec 26790 68 61 6e 69 73 6d 20 3d 20 70 4d 65 63 68 61 6e hanism = pMechan 267a0 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 3b 0a ism->mechanism;. 267b0 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e ..cackey_session 267c0 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 267d0 5f 62 75 66 6c 65 6e 20 3d 20 31 32 38 3b 0a 09 _buflen = 128;.. 267e0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 267f0 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 hSession].sign_b 26800 75 66 75 73 65 64 20 3d 20 30 3b 0a 09 63 61 63 ufused = 0;..cac 26810 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 26820 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 20 ssion].sign_buf 26830 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 = malloc(sizeof( 26840 2a 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 *cackey_sessions 26850 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 26860 62 75 66 29 20 2a 20 63 61 63 6b 65 79 5f 73 65 buf) * cackey_se 26870 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 26880 2e 73 69 67 6e 5f 62 75 66 6c 65 6e 29 3b 0a 0a .sign_buflen);.. 26890 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 268a0 49 4e 54 46 28 22 53 65 73 73 69 6f 6e 20 25 6c INTF("Session %l 268b0 75 20 73 69 67 6e 5f 69 64 65 6e 74 69 74 79 20 u sign_identity 268c0 69 73 20 25 70 20 28 69 64 65 6e 74 69 74 79 20 is %p (identity 268d0 23 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 #%lu)", (unsigne 268e0 64 20 6c 6f 6e 67 29 20 68 53 65 73 73 69 6f 6e d long) hSession 268f0 2c 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f , &cackey_sessio 26900 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 ns[hSession].ide 26910 6e 74 69 74 69 65 73 5b 68 4b 65 79 5d 2c 20 28 ntities[hKey], ( 26920 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 unsigned long) h 26930 4b 65 79 29 3b 0a 09 63 61 63 6b 65 79 5f 73 65 Key);..cackey_se 26940 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 26950 2e 73 69 67 6e 5f 69 64 65 6e 74 69 74 79 20 3d .sign_identity = 26960 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e &cackey_session 26970 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e s[hSession].iden 26980 74 69 74 69 65 73 5b 68 4b 65 79 5d 3b 0a 0a 09 tities[hKey];... 26990 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 mutex_retval = c 269a0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f ackey_mutex_unlo 269b0 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 ck(cackey_bigloc 269c0 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 k);..if (mutex_r 269d0 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 etval != 0) {... 269e0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 269f0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c NTF("Error. Unl 26a00 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 ocking failed.") 26a10 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 26a20 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a GENERAL_ERROR);. 26a30 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 26a40 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 26a50 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 ing CKR_OK (%i)" 26a60 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 , CKR_OK);...ret 26a70 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a urn(CKR_OK);.}.. 26a80 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 CK_DEFINE_FUNCTI 26a90 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e ON(CK_RV, C_Sign 26aa0 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 26ab0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK 26ac0 5f 42 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c _BYTE_PTR pData, 26ad0 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 CK_ULONG ulData 26ae0 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 Len, CK_BYTE_PTR 26af0 20 70 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f pSignature, CK_ 26b00 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 67 ULONG_PTR pulSig 26b10 6e 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09 75 6e natureLen) {..un 26b20 73 69 67 6e 65 64 20 6c 6f 6e 67 20 73 74 61 72 signed long star 26b30 74 5f 73 69 67 6e 5f 62 75 66 75 73 65 64 3b 0a t_sign_bufused;. 26b40 09 43 4b 5f 52 56 20 73 69 67 6e 5f 72 65 74 3b .CK_RV sign_ret; 26b50 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 ..int mutex_retv 26b60 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 al;...CACKEY_DEB 26b70 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle 26b80 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 d.");...if (!cac 26b90 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 key_initialized) 26ba0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 26bb0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 26bc0 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 Not initialize 26bd0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 d.");....return( 26be0 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 CKR_CRYPTOKI_NOT 26bf0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 _INITIALIZED);.. 26c00 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e }...if (hSession 26c10 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f == 0 || hSessio 26c20 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 n >= (sizeof(cac 26c30 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 key_sessions) / 26c40 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 sizeof(cackey_se 26c50 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 ssions[0]))) {.. 26c60 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 26c70 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 INTF("Error. Se 26c80 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e ssion out of ran 26c90 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 ge.");......retu 26ca0 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 rn(CKR_SESSION_H 26cb0 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a ANDLE_INVALID);. 26cc0 09 7d 0a 0a 09 73 74 61 72 74 5f 73 69 67 6e 5f .}...start_sign_ 26cd0 62 75 66 75 73 65 64 20 3d 20 63 61 63 6b 65 79 bufused = cackey 26ce0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 26cf0 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73 65 64 on].sign_bufused 26d00 3b 0a 0a 09 73 69 67 6e 5f 72 65 74 20 3d 20 43 ;...sign_ret = C 26d10 5f 53 69 67 6e 55 70 64 61 74 65 28 68 53 65 73 _SignUpdate(hSes 26d20 73 69 6f 6e 2c 20 70 44 61 74 61 2c 20 75 6c 44 sion, pData, ulD 26d30 61 74 61 4c 65 6e 29 3b 0a 09 69 66 20 28 73 69 ataLen);..if (si 26d40 67 6e 5f 72 65 74 20 21 3d 20 43 4b 52 5f 4f 4b gn_ret != CKR_OK 26d50 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 26d60 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 26d70 2e 20 20 53 69 67 6e 55 70 64 61 74 65 28 29 20 . SignUpdate() 26d80 72 65 74 75 72 6e 65 64 20 66 61 69 6c 75 72 65 returned failure 26d90 20 28 72 76 20 3d 20 25 6c 75 29 2e 22 2c 20 28 (rv = %lu).", ( 26da0 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 unsigned long) s 26db0 69 67 6e 5f 72 65 74 29 3b 0a 0a 09 09 69 66 20 ign_ret);....if 26dc0 28 73 69 67 6e 5f 72 65 74 20 21 3d 20 43 4b 52 (sign_ret != CKR 26dd0 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c _BUFFER_TOO_SMAL 26de0 4c 29 20 7b 0a 09 09 09 6d 75 74 65 78 5f 72 65 L) {....mutex_re 26df0 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 tval = cackey_mu 26e00 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f tex_lock(cackey_ 26e10 62 69 67 6c 6f 63 6b 29 3b 0a 09 09 09 69 66 20 biglock);....if 26e20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d (mutex_retval != 26e30 20 30 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 0) {.....CACKEY 26e40 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 26e50 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 rror. Locking f 26e60 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 09 09 72 ailed.");......r 26e70 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 26e80 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09 7d 0a 0a L_ERROR);....}.. 26e90 09 09 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 ...if (!cackey_s 26ea0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 26eb0 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 09 09 ].active) {..... 26ec0 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 26ed0 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 26ee0 63 6b 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 ck);......CACKEY 26ef0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 26f00 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e rror. Session n 26f10 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 ot active.");... 26f20 0a 09 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 26f30 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 26f40 4e 56 41 4c 49 44 29 3b 0a 09 09 09 7d 0a 0a 09 NVALID);....}... 26f50 09 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 ..if (!cackey_se 26f60 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 26f70 2e 73 69 67 6e 5f 61 63 74 69 76 65 29 20 7b 0a .sign_active) {. 26f80 09 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 ....cackey_mutex 26f90 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 26fa0 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 09 09 43 41 iglock);......CA 26fb0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 26fc0 46 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 20 F("Error. Sign 26fd0 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 not active.");.. 26fe0 09 0a 09 09 09 09 72 65 74 75 72 6e 28 43 4b 52 ......return(CKR 26ff0 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 _OPERATION_NOT_I 27000 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 09 09 NITIALIZED);.... 27010 7d 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 }.....cackey_ses 27020 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 27030 73 69 67 6e 5f 61 63 74 69 76 65 20 3d 20 30 3b sign_active = 0; 27040 0a 0a 09 09 09 6d 75 74 65 78 5f 72 65 74 76 61 .....mutex_retva 27050 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 l = cackey_mutex 27060 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 27070 69 67 6c 6f 63 6b 29 3b 0a 09 09 09 69 66 20 28 iglock);....if ( 27080 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 mutex_retval != 27090 30 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 0) {.....CACKEY_ 270a0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 DEBUG_PRINTF("Er 270b0 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 ror. Unlocking 270c0 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 09 09 failed.");...... 270d0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 270e0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09 7d 0a AL_ERROR);....}. 270f0 09 09 7d 0a 0a 09 09 72 65 74 75 72 6e 28 73 69 ..}....return(si 27100 67 6e 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 73 69 gn_ret);..}...si 27110 67 6e 5f 72 65 74 20 3d 20 43 5f 53 69 67 6e 46 gn_ret = C_SignF 27120 69 6e 61 6c 28 68 53 65 73 73 69 6f 6e 2c 20 70 inal(hSession, p 27130 53 69 67 6e 61 74 75 72 65 2c 20 70 75 6c 53 69 Signature, pulSi 27140 67 6e 61 74 75 72 65 4c 65 6e 29 3b 0a 09 69 66 gnatureLen);..if 27150 20 28 73 69 67 6e 5f 72 65 74 20 21 3d 20 43 4b (sign_ret != CK 27160 52 5f 4f 4b 29 20 7b 0a 09 09 69 66 20 28 73 69 R_OK) {...if (si 27170 67 6e 5f 72 65 74 20 3d 3d 20 43 4b 52 5f 42 55 gn_ret == CKR_BU 27180 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 20 FFER_TOO_SMALL) 27190 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {....CACKEY_DEBU 271a0 47 5f 50 52 49 4e 54 46 28 22 53 69 67 6e 46 69 G_PRINTF("SignFi 271b0 6e 61 6c 28 29 20 72 65 74 75 72 6e 65 64 20 43 nal() returned C 271c0 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d KR_BUFFER_TOO_SM 271d0 41 4c 4c 20 28 72 76 20 3d 20 25 6c 75 29 2c 20 ALL (rv = %lu), 271e0 75 6e 64 6f 69 6e 67 20 43 5f 53 69 67 6e 55 70 undoing C_SignUp 271f0 64 61 74 65 28 29 22 2c 20 28 75 6e 73 69 67 6e date()", (unsign 27200 65 64 20 6c 6f 6e 67 29 20 73 69 67 6e 5f 72 65 ed long) sign_re 27210 74 29 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 t);.....cackey_s 27220 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 27230 5d 2e 73 69 67 6e 5f 62 75 66 75 73 65 64 20 3d ].sign_bufused = 27240 20 73 74 61 72 74 5f 73 69 67 6e 5f 62 75 66 75 start_sign_bufu 27250 73 65 64 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 sed;.....return( 27260 73 69 67 6e 5f 72 65 74 29 3b 0a 09 09 7d 0a 0a sign_ret);...}.. 27270 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 27280 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 27290 69 67 6e 46 69 6e 61 6c 28 29 20 72 65 74 75 72 ignFinal() retur 272a0 6e 65 64 20 66 61 69 6c 75 72 65 20 28 72 76 20 ned failure (rv 272b0 3d 20 25 6c 75 29 2e 22 2c 20 28 75 6e 73 69 67 = %lu).", (unsig 272c0 6e 65 64 20 6c 6f 6e 67 29 20 73 69 67 6e 5f 72 ned long) sign_r 272d0 65 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 73 et);....return(s 272e0 69 67 6e 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 69 ign_ret);..}...i 272f0 66 20 28 70 53 69 67 6e 61 74 75 72 65 20 3d 3d f (pSignature == 27300 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 NULL) {...CACKE 27310 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 27320 70 53 69 67 6e 61 74 75 72 65 20 73 70 65 63 69 pSignature speci 27330 66 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 75 6e fied as NULL, un 27340 64 6f 69 6e 67 20 43 5f 53 69 67 6e 55 70 64 61 doing C_SignUpda 27350 74 65 28 29 22 29 3b 0a 0a 09 09 63 61 63 6b 65 te()");....cacke 27360 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 27370 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73 65 ion].sign_bufuse 27380 64 20 3d 20 73 74 61 72 74 5f 73 69 67 6e 5f 62 d = start_sign_b 27390 75 66 75 73 65 64 3b 0a 0a 09 09 72 65 74 75 72 ufused;....retur 273a0 6e 28 73 69 67 6e 5f 72 65 74 29 3b 0a 09 7d 0a n(sign_ret);..}. 273b0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 273c0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 273d0 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 CKR_OK (%i)", C 273e0 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e KR_OK);...return 273f0 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f (CKR_OK);.}..CK_ 27400 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 27410 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 55 70 64 CK_RV, C_SignUpd 27420 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f ate)(CK_SESSION_ 27430 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 27440 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 CK_BYTE_PTR pPa 27450 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 rt, CK_ULONG ulP 27460 61 72 74 4c 65 6e 29 20 7b 0a 09 69 6e 74 20 6d artLen) {..int m 27470 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 utex_retval;...C 27480 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e ACKEY_DEBUG_PRIN 27490 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a TF("Called.");.. 274a0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 .if (!cackey_ini 274b0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 tialized) {...CA 274c0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 274d0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 F("Error. Not i 274e0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a nitialized.");.. 274f0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 ..return(CKR_CRY 27500 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 PTOKI_NOT_INITIA 27510 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 LIZED);..}...if 27520 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c (hSession == 0 | 27530 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 | hSession >= (s 27540 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 27550 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 sions) / sizeof( 27560 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 27570 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 0]))) {...CACKEY 27580 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 27590 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f rror. Session o 275a0 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a ut of range.");. 275b0 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 275c0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 275d0 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 NVALID);..}...if 275e0 20 28 70 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 20 (pPart == NULL 275f0 26 26 20 75 6c 50 61 72 74 4c 65 6e 20 3d 3d 20 && ulPartLen == 27600 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 74 20 0) {.../* Short 27610 63 69 72 63 75 69 74 20 69 66 20 77 65 20 61 72 circuit if we ar 27620 65 20 61 73 6b 65 64 20 74 6f 20 73 69 67 6e 20 e asked to sign 27630 6e 6f 74 68 69 6e 67 2e 2e 2e 20 2a 2f 0a 09 09 nothing... */... 27640 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 27650 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 27660 4b 52 5f 4f 4b 20 28 25 69 29 20 28 73 68 6f 72 KR_OK (%i) (shor 27670 74 20 63 69 72 63 75 69 74 29 22 2c 20 43 4b 52 t circuit)", CKR 27680 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 _OK);....return( 27690 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 66 CKR_OK);..}...if 276a0 20 28 70 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 (pPart == NULL) 276b0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 {...CACKEY_DEBU 276c0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e G_PRINTF("Error. 276d0 20 70 50 61 72 74 20 69 73 20 4e 55 4c 4c 2c 20 pPart is NULL, 276e0 62 75 74 20 75 6c 50 61 72 74 4c 65 6e 20 69 73 but ulPartLen is 276f0 20 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 09 72 65 not 0.");....re 27700 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e turn(CKR_ARGUMEN 27710 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 TS_BAD);..}...if 27720 20 28 75 6c 50 61 72 74 4c 65 6e 20 3d 3d 20 30 (ulPartLen == 0 27730 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 27740 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 27750 2e 20 75 6c 50 61 72 74 4c 65 6e 20 69 73 20 30 . ulPartLen is 0 27760 2c 20 62 75 74 20 70 50 61 72 74 20 69 73 20 6e , but pPart is n 27770 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 ot NULL.");....r 27780 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 eturn(CKR_ARGUME 27790 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 6d NTS_BAD);..}...m 277a0 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 utex_retval = ca 277b0 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 ckey_mutex_lock( 277c0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b cackey_biglock); 277d0 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 ..if (mutex_retv 277e0 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 al != 0) {...CAC 277f0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 27800 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e ("Error. Lockin 27810 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 27820 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 27830 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 27840 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 if (!cackey_sess 27850 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 ions[hSession].a 27860 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 ctive) {...cacke 27870 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 y_mutex_unlock(c 27880 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 27890 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 278a0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 278b0 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 Session not acti 278c0 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 ve.");......retu 278d0 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 rn(CKR_SESSION_H 278e0 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a ANDLE_INVALID);. 278f0 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 .}...if (!cackey 27900 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 27910 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 29 on].sign_active) 27920 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 {...cackey_mute 27930 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f x_unlock(cackey_ 27940 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 biglock);....CAC 27950 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 27960 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 20 6e ("Error. Sign n 27970 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 ot active.");... 27980 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 ...return(CKR_OP 27990 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 ERATION_NOT_INIT 279a0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 73 IALIZED);..}...s 279b0 77 69 74 63 68 20 28 63 61 63 6b 65 79 5f 73 65 witch (cackey_se 279c0 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 279d0 2e 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 6d 29 .sign_mechanism) 279e0 20 7b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 53 {...case CKM_RS 279f0 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 63 A_PKCS:..../* Ac 27a00 63 75 6d 75 6c 61 74 65 20 64 69 72 65 63 74 6c cumulate directl 27a10 79 20 2a 2f 0a 09 09 09 69 66 20 28 28 63 61 63 y */....if ((cac 27a20 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 27a30 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 ssion].sign_bufu 27a40 73 65 64 20 2b 20 75 6c 50 61 72 74 4c 65 6e 29 sed + ulPartLen) 27a50 20 3e 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f > cackey_sessio 27a60 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 ns[hSession].sig 27a70 6e 5f 62 75 66 6c 65 6e 29 20 7b 0a 09 09 09 09 n_buflen) {..... 27a80 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 27a90 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 hSession].sign_b 27aa0 75 66 6c 65 6e 20 2a 3d 20 32 3b 0a 0a 09 09 09 uflen *= 2;..... 27ab0 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 .cackey_sessions 27ac0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 27ad0 62 75 66 20 3d 20 72 65 61 6c 6c 6f 63 28 63 61 buf = realloc(ca 27ae0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 ckey_sessions[hS 27af0 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 ession].sign_buf 27b00 2c 20 73 69 7a 65 6f 66 28 2a 63 61 63 6b 65 79 , sizeof(*cackey 27b10 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 _sessions[hSessi 27b20 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20 2a 20 on].sign_buf) * 27b30 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 27b40 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 hSession].sign_b 27b50 75 66 6c 65 6e 29 3b 0a 09 09 09 7d 0a 0a 09 09 uflen);....}.... 27b60 09 6d 65 6d 63 70 79 28 63 61 63 6b 65 79 5f 73 .memcpy(cackey_s 27b70 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 27b80 5d 2e 73 69 67 6e 5f 62 75 66 20 2b 20 63 61 63 ].sign_buf + cac 27b90 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 key_sessions[hSe 27ba0 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 ssion].sign_bufu 27bb0 73 65 64 2c 20 70 50 61 72 74 2c 20 75 6c 50 61 sed, pPart, ulPa 27bc0 72 74 4c 65 6e 29 3b 0a 0a 09 09 09 63 61 63 6b rtLen);.....cack 27bd0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 27be0 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73 sion].sign_bufus 27bf0 65 64 20 2b 3d 20 75 6c 50 61 72 74 4c 65 6e 3b ed += ulPartLen; 27c00 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a .....break;..}.. 27c10 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 .mutex_retval = 27c20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c cackey_mutex_unl 27c30 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f ock(cackey_biglo 27c40 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f ck);..if (mutex_ 27c50 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {.. 27c60 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 27c70 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e INTF("Error. Un 27c80 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 locking failed." 27c90 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 27ca0 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b _GENERAL_ERROR); 27cb0 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 27cc0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 27cd0 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 ning CKR_OK (%i) 27ce0 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 ", CKR_OK);...re 27cf0 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}. 27d00 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 27d10 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 ION(CK_RV, C_Sig 27d20 6e 46 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 nFinal)(CK_SESSI 27d30 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 27d40 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 27d50 70 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 pSignature, CK_U 27d60 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 67 6e LONG_PTR pulSign 27d70 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09 73 74 61 atureLen) {..sta 27d80 74 69 63 20 43 4b 5f 42 59 54 45 20 73 69 67 62 tic CK_BYTE sigb 27d90 75 66 5b 31 30 32 34 5d 3b 0a 09 73 73 69 7a 65 uf[1024];..ssize 27da0 5f 74 20 73 69 67 62 75 66 6c 65 6e 3b 0a 09 43 _t sigbuflen;..C 27db0 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 K_SLOT_ID slotID 27dc0 3b 0a 09 43 4b 5f 52 56 20 72 65 74 76 61 6c 20 ;..CK_RV retval 27dd0 3d 20 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 = CKR_GENERAL_ER 27de0 52 4f 52 3b 0a 09 69 6e 74 20 74 65 72 6d 69 6e ROR;..int termin 27df0 61 74 65 5f 73 69 67 6e 20 3d 20 31 3b 0a 09 69 ate_sign = 1;..i 27e00 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b nt mutex_retval; 27e10 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 27e20 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 PRINTF("Called." 27e30 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 );...if (!cackey 27e40 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a _initialized) {. 27e50 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 27e60 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e RINTF("Error. N 27e70 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 ot initialized." 27e80 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 );....return(CKR 27e90 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e _CRYPTOKI_NOT_IN 27ea0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a ITIALIZED);..}.. 27eb0 09 69 66 20 28 70 75 6c 53 69 67 6e 61 74 75 72 .if (pulSignatur 27ec0 65 4c 65 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a eLen == NULL) {. 27ed0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 27ee0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 75 RINTF("Error. pu 27ef0 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 20 69 73 lSignatureLen is 27f00 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 NULL.");....ret 27f10 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 urn(CKR_ARGUMENT 27f20 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 S_BAD);..}...if 27f30 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c (hSession == 0 | 27f40 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 | hSession >= (s 27f50 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 izeof(cackey_ses 27f60 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 sions) / sizeof( 27f70 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b cackey_sessions[ 27f80 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 0]))) {...CACKEY 27f90 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 _DEBUG_PRINTF("E 27fa0 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f rror. Session o 27fb0 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a ut of range.");. 27fc0 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f .....return(CKR_ 27fd0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 SESSION_HANDLE_I 27fe0 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 NVALID);..}...mu 27ff0 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 tex_retval = cac 28000 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 key_mutex_lock(c 28010 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a ackey_biglock);. 28020 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 .if (mutex_retva 28030 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b l != 0) {...CACK 28040 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 28050 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 "Error. Locking 28060 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 failed.");....r 28070 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 eturn(CKR_GENERA 28080 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 L_ERROR);..}...i 28090 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 f (!cackey_sessi 280a0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 ons[hSession].ac 280b0 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 tive) {...cackey 280c0 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 280d0 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a ckey_biglock);.. 280e0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 280f0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 RINTF("Error. S 28100 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 ession not activ 28110 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 e.");......retur 28120 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 n(CKR_SESSION_HA 28130 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 NDLE_INVALID);.. 28140 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f }...if (!cackey_ 28150 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 28160 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 29 20 n].sign_active) 28170 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 {...cackey_mutex 28180 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 _unlock(cackey_b 28190 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b iglock);....CACK 281a0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 281b0 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 20 6e 6f "Error. Sign no 281c0 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a t active.");.... 281d0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 ..return(CKR_OPE 281e0 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 RATION_NOT_INITI 281f0 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 73 6c ALIZED);..}...sl 28200 6f 74 49 44 20 3d 20 63 61 63 6b 65 79 5f 73 65 otID = cackey_se 28210 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d ssions[hSession] 28220 2e 73 6c 6f 74 49 44 3b 0a 0a 09 69 66 20 28 73 .slotID;...if (s 28230 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f lotID < 0 || slo 28240 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 tID >= (sizeof(c 28250 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 ackey_slots) / s 28260 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f izeof(cackey_slo 28270 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 ts[0]))) {...CAC 28280 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 28290 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 ("Error. Invalid 282a0 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 slot requested 282b0 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 6f (%lu), outside o 282c0 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c 20 f valid range", 282d0 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 slotID);....retu 282e0 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 rn(CKR_GENERAL_E 282f0 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 RROR);..}...if ( 28300 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73 6c 6f cackey_slots[slo 28310 74 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d 20 30 tID].active == 0 28320 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 28330 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 28340 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 . Invalid slot r 28350 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 equested (%lu), 28360 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65 6e 74 slot not current 28370 6c 79 20 61 63 74 69 76 65 22 2c 20 73 6c 6f 74 ly active", slot 28380 49 44 29 3b 0a 0a 09 09 63 61 63 6b 65 79 5f 6d ID);....cackey_m 28390 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b utex_unlock(cack 283a0 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 ey_biglock);.... 283b0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 283c0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 283d0 73 77 69 74 63 68 20 28 63 61 63 6b 65 79 5f 73 switch (cackey_s 283e0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e essions[hSession 283f0 5d 2e 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 6d ].sign_mechanism 28400 29 20 7b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 ) {...case CKM_R 28410 53 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 SA_PKCS:..../* A 28420 73 6b 20 63 61 72 64 20 74 6f 20 73 69 67 6e 20 sk card to sign 28430 2a 2f 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 */....CACKEY_DEB 28440 55 47 5f 50 52 49 4e 54 46 28 22 41 73 6b 69 6e UG_PRINTF("Askin 28450 67 20 74 6f 20 73 69 67 6e 20 66 72 6f 6d 20 69 g to sign from i 28460 64 65 6e 74 69 74 79 20 25 70 20 69 6e 20 73 65 dentity %p in se 28470 73 73 69 6f 6e 20 25 6c 75 22 2c 20 63 61 63 6b ssion %lu", cack 28480 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 ey_sessions[hSes 28490 73 69 6f 6e 5d 2e 73 69 67 6e 5f 69 64 65 6e 74 sion].sign_ident 284a0 69 74 79 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ity, (unsigned l 284b0 6f 6e 67 29 20 68 53 65 73 73 69 6f 6e 29 3b 0a ong) hSession);. 284c0 09 09 09 73 69 67 62 75 66 6c 65 6e 20 3d 20 63 ...sigbuflen = c 284d0 61 63 6b 65 79 5f 73 69 67 6e 64 65 63 72 79 70 ackey_signdecryp 284e0 74 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b t(&cackey_slots[ 284f0 73 6c 6f 74 49 44 5d 2c 20 63 61 63 6b 65 79 5f slotID], cackey_ 28500 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f sessions[hSessio 28510 6e 5d 2e 73 69 67 6e 5f 69 64 65 6e 74 69 74 79 n].sign_identity 28520 2c 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e , cackey_session 28530 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e s[hSession].sign 28540 5f 62 75 66 2c 20 63 61 63 6b 65 79 5f 73 65 73 _buf, cackey_ses 28550 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e sions[hSession]. 28560 73 69 67 6e 5f 62 75 66 75 73 65 64 2c 20 73 69 sign_bufused, si 28570 67 62 75 66 2c 20 73 69 7a 65 6f 66 28 73 69 67 gbuf, sizeof(sig 28580 62 75 66 29 2c 20 31 2c 20 30 29 3b 0a 0a 09 09 buf), 1, 0);.... 28590 09 69 66 20 28 73 69 67 62 75 66 6c 65 6e 20 3c .if (sigbuflen < 285a0 20 30 29 20 7b 0a 09 09 09 09 2f 2a 20 53 69 67 0) {...../* Sig 285b0 6e 69 6e 67 20 66 61 69 6c 65 64 2e 20 2a 2f 0a ning failed. */. 285c0 09 09 09 09 69 66 20 28 73 69 67 62 75 66 6c 65 ....if (sigbufle 285d0 6e 20 3d 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 n == CACKEY_PCSC 285e0 5f 45 5f 4e 45 45 44 4c 4f 47 49 4e 29 20 7b 0a _E_NEEDLOGIN) {. 285f0 09 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b .....retval = CK 28600 52 5f 55 53 45 52 5f 4e 4f 54 5f 4c 4f 47 47 45 R_USER_NOT_LOGGE 28610 44 5f 49 4e 3b 0a 09 09 09 09 7d 20 65 6c 73 65 D_IN;.....} else 28620 20 69 66 20 28 73 69 67 62 75 66 6c 65 6e 20 3d if (sigbuflen = 28630 3d 20 43 41 43 4b 45 59 5f 50 43 53 43 5f 45 5f = CACKEY_PCSC_E_ 28640 54 4f 4b 45 4e 41 42 53 45 4e 54 29 20 7b 0a 09 TOKENABSENT) {.. 28650 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 ....retval = CKR 28660 5f 44 45 56 49 43 45 5f 52 45 4d 4f 56 45 44 3b _DEVICE_REMOVED; 28670 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 .....} else {... 28680 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f ...retval = CKR_ 28690 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 GENERAL_ERROR;.. 286a0 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65 20 69 ...}....} else i 286b0 66 20 28 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f f (((unsigned lo 286c0 6e 67 29 20 73 69 67 62 75 66 6c 65 6e 29 20 3e ng) sigbuflen) > 286d0 20 2a 70 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 *pulSignatureLe 286e0 6e 20 26 26 20 70 53 69 67 6e 61 74 75 72 65 29 n && pSignature) 286f0 20 7b 0a 09 09 09 09 2f 2a 20 53 69 67 6e 65 64 {...../* Signed 28700 20 64 61 74 61 20 74 6f 6f 20 6c 61 72 67 65 20 data too large 28710 2a 2f 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 */.....CACKEY_DE 28720 42 55 47 5f 50 52 49 4e 54 46 28 22 72 65 74 76 BUG_PRINTF("retv 28730 61 6c 20 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f al = CKR_BUFFER_ 28740 54 4f 4f 5f 53 4d 41 4c 4c 3b 20 20 73 69 67 62 TOO_SMALL; sigb 28750 75 66 6c 65 6e 20 3d 20 25 6c 75 2c 20 70 75 6c uflen = %lu, pul 28760 53 69 67 6e 61 74 75 72 65 4c 65 6e 20 3d 20 25 SignatureLen = % 28770 6c 75 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c lu", (unsigned l 28780 6f 6e 67 29 20 73 69 67 62 75 66 6c 65 6e 2c 20 ong) sigbuflen, 28790 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long) 287a0 2a 70 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e *pulSignatureLen 287b0 29 3b 0a 0a 09 09 09 09 72 65 74 76 61 6c 20 3d );......retval = 287c0 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f CKR_BUFFER_TOO_ 287d0 53 4d 41 4c 4c 3b 0a 0a 09 09 09 09 74 65 72 6d SMALL;......term 287e0 69 6e 61 74 65 5f 73 69 67 6e 20 3d 20 30 3b 0a inate_sign = 0;. 287f0 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 ...} else {..... 28800 74 65 72 6d 69 6e 61 74 65 5f 73 69 67 6e 20 3d terminate_sign = 28810 20 30 3b 0a 0a 09 09 09 09 69 66 20 28 70 53 69 0;......if (pSi 28820 67 6e 61 74 75 72 65 29 20 7b 0a 09 09 09 09 09 gnature) {...... 28830 6d 65 6d 63 70 79 28 70 53 69 67 6e 61 74 75 72 memcpy(pSignatur 28840 65 2c 20 73 69 67 62 75 66 2c 20 73 69 67 62 75 e, sigbuf, sigbu 28850 66 6c 65 6e 29 3b 0a 0a 09 09 09 09 09 74 65 72 flen);.......ter 28860 6d 69 6e 61 74 65 5f 73 69 67 6e 20 3d 20 31 3b minate_sign = 1; 28870 0a 09 09 09 09 7d 0a 0a 09 09 09 09 2a 70 75 6c .....}......*pul 28880 53 69 67 6e 61 74 75 72 65 4c 65 6e 20 3d 20 73 SignatureLen = s 28890 69 67 62 75 66 6c 65 6e 3b 0a 0a 09 09 09 09 72 igbuflen;......r 288a0 65 74 76 61 6c 20 3d 20 43 4b 52 5f 4f 4b 3b 0a etval = CKR_OK;. 288b0 09 09 09 7d 0a 0a 09 09 09 62 72 65 61 6b 3b 0a ...}.....break;. 288c0 09 7d 0a 0a 09 69 66 20 28 74 65 72 6d 69 6e 61 .}...if (termina 288d0 74 65 5f 73 69 67 6e 29 20 7b 0a 09 09 69 66 20 te_sign) {...if 288e0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 (cackey_sessions 288f0 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f [hSession].sign_ 28900 62 75 66 29 20 7b 0a 09 09 09 66 72 65 65 28 63 buf) {....free(c 28910 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 ackey_sessions[h 28920 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 Session].sign_bu 28930 66 29 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 f);...}....cacke 28940 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 y_sessions[hSess 28950 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 ion].sign_active 28960 20 3d 20 30 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 = 0;..}...mutex 28970 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 _retval = cackey 28980 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 _mutex_unlock(ca 28990 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 ckey_biglock);.. 289a0 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c if (mutex_retval 289b0 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 != 0) {...CACKE 289c0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 289d0 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e Error. Unlockin 289e0 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 g failed.");.... 289f0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 return(CKR_GENER 28a00 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 AL_ERROR);..}... 28a10 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 28a20 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 25 NTF("Returning % 28a30 69 22 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c i", (int) retval 28a40 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 );...return(retv 28a50 61 6c 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e al);.}..CK_DEFIN 28a60 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 E_FUNCTION(CK_RV 28a70 2c 20 43 5f 53 69 67 6e 52 65 63 6f 76 65 72 49 , C_SignRecoverI 28a80 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f nit)(CK_SESSION_ 28a90 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 28aa0 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 CK_MECHANISM_PT 28ab0 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b R pMechanism, CK 28ac0 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 _OBJECT_HANDLE h 28ad0 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Key) {..CACKEY_D 28ae0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 28af0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 28b00 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 28b10 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 28b20 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 28b30 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 28b40 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 28b50 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 28b60 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 28b70 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 28b80 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 28b90 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 28ba0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 28bb0 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 28bc0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 28bd0 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 28be0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 28bf0 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 28c00 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 28c10 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 52 65 63 CK_RV, C_SignRec 28c20 6f 76 65 72 29 28 43 4b 5f 53 45 53 53 49 4f 4e over)(CK_SESSION 28c30 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 28c40 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 , CK_BYTE_PTR pD 28c50 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c ata, CK_ULONG ul 28c60 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 DataLen, CK_BYTE 28c70 5f 50 54 52 20 70 53 69 67 6e 61 74 75 72 65 2c _PTR pSignature, 28c80 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 CK_ULONG_PTR pu 28c90 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 29 20 7b lSignatureLen) { 28ca0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 28cb0 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 28cc0 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 28cd0 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 28ce0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 28cf0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 28d00 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 28d10 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 28d20 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 28d30 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 28d40 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 28d50 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 28d60 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 28d70 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 28d80 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 28d90 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 28da0 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 28db0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 28dc0 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 28dd0 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 28de0 20 43 5f 56 65 72 69 66 79 49 6e 69 74 29 28 43 C_VerifyInit)(C 28df0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 28e00 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 hSession, CK_ME 28e10 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 CHANISM_PTR pMec 28e20 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 hanism, CK_OBJEC 28e30 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b T_HANDLE hKey) { 28e40 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 28e50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 28e60 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 28e70 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 28e80 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 28e90 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 28ea0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 28eb0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 28ec0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 28ed0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 28ee0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 28ef0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 28f00 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 28f10 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 28f20 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 28f30 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 28f40 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 28f50 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 28f60 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 28f70 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 28f80 20 43 5f 56 65 72 69 66 79 29 28 43 4b 5f 53 45 C_Verify)(CK_SE 28f90 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe 28fa0 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 ssion, CK_BYTE_P 28fb0 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f TR pData, CK_ULO 28fc0 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b NG ulDataLen, CK 28fd0 5f 42 59 54 45 5f 50 54 52 20 70 53 69 67 6e 61 _BYTE_PTR pSigna 28fe0 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 ture, CK_ULONG u 28ff0 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 29 20 7b lSignatureLen) { 29000 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 29010 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 29020 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 29030 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 29040 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 29050 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 29060 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 29070 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 29080 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 29090 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 290a0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 290b0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 290c0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 290d0 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 290e0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 290f0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 29100 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 29110 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 29120 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 29130 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 29140 20 43 5f 56 65 72 69 66 79 55 70 64 61 74 65 29 C_VerifyUpdate) 29150 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND 29160 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_ 29170 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 BYTE_PTR pPart, 29180 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c CK_ULONG ulPartL 29190 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 en) {..CACKEY_DE 291a0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c BUG_PRINTF("Call 291b0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 ed.");...if (!ca 291c0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 ckey_initialized 291d0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 ) {...CACKEY_DEB 291e0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 UG_PRINTF("Error 291f0 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a . Not initializ 29200 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e ed.");....return 29210 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f (CKR_CRYPTOKI_NO 29220 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a T_INITIALIZED);. 29230 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 .}...CACKEY_DEBU 29240 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e G_PRINTF("Return 29250 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e ing CKR_FUNCTION 29260 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 _NOT_SUPPORTED ( 29270 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 %i)", CKR_FUNCTI 29280 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 29290 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f );...return(CKR_ 292a0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 292b0 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 PORTED);.}..CK_D 292c0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 292d0 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66 79 46 69 K_RV, C_VerifyFi 292e0 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f nal)(CK_SESSION_ 292f0 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession, 29300 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 CK_BYTE_PTR pSi 29310 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e gnature, CK_ULON 29320 47 20 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e G ulSignatureLen 29330 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 29340 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 29350 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 29360 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 29370 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 29380 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 29390 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 293a0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 293b0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 293c0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 293d0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 293e0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 293f0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 29400 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 29410 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 29420 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 29430 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 29440 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 29450 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 29460 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 29470 52 56 2c 20 43 5f 56 65 72 69 66 79 52 65 63 6f RV, C_VerifyReco 29480 76 65 72 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 verInit)(CK_SESS 29490 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 294a0 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 ion, CK_MECHANIS 294b0 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d M_PTR pMechanism 294c0 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 294d0 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b LE hKey) {..CACK 294e0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 294f0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 29500 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 29510 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 29520 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 29530 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 29540 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 29550 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 29560 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 29570 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 29580 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 29590 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 295a0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 295b0 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 295c0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 295d0 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 295e0 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 295f0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 29600 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 29610 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 ION(CK_RV, C_Ver 29620 69 66 79 52 65 63 6f 76 65 72 29 28 43 4b 5f 53 ifyRecover)(CK_S 29630 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 29640 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f ession, CK_BYTE_ 29650 50 54 52 20 70 53 69 67 6e 61 74 75 72 65 2c 20 PTR pSignature, 29660 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 69 67 6e 61 CK_ULONG ulSigna 29670 74 75 72 65 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 tureLen, CK_BYTE 29680 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 _PTR pData, CK_U 29690 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 44 61 74 61 LONG_PTR pulData 296a0 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 Len) {..CACKEY_D 296b0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c EBUG_PRINTF("Cal 296c0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 led.");...if (!c 296d0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 ackey_initialize 296e0 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 d) {...CACKEY_DE 296f0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f BUG_PRINTF("Erro 29700 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 r. Not initiali 29710 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 zed.");....retur 29720 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e n(CKR_CRYPTOKI_N 29730 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b OT_INITIALIZED); 29740 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 ..}...CACKEY_DEB 29750 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 UG_PRINTF("Retur 29760 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f ning CKR_FUNCTIO 29770 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 N_NOT_SUPPORTED 29780 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 (%i)", CKR_FUNCT 29790 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 297a0 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 D);...return(CKR 297b0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 297c0 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f PPORTED);.}..CK_ 297d0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 DEFINE_FUNCTION( 297e0 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 45 CK_RV, C_DigestE 297f0 6e 63 72 79 70 74 55 70 64 61 74 65 29 28 43 4b ncryptUpdate)(CK 29800 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 _SESSION_HANDLE 29810 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 hSession, CK_BYT 29820 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f E_PTR pPart, CK_ 29830 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 6e 2c ULONG ulPartLen, 29840 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e CK_BYTE_PTR pEn 29850 63 72 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f cryptedPart, CK_ 29860 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 45 6e 63 ULONG_PTR pulEnc 29870 72 79 70 74 65 64 50 61 72 74 4c 65 6e 29 20 7b ryptedPartLen) { 29880 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 29890 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 298a0 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 298b0 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 298c0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 298d0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 298e0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 298f0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 29900 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 29910 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 29920 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 29930 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 29940 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 29950 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 29960 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 29970 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 29980 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 29990 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 299a0 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 299b0 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 299c0 20 43 5f 44 65 63 72 79 70 74 44 69 67 65 73 74 C_DecryptDigest 299d0 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 Update)(CK_SESSI 299e0 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 299f0 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 on, CK_BYTE_PTR 29a00 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 pEncryptedPart, 29a10 43 4b 5f 55 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 CK_ULONG ulEncry 29a20 70 74 65 64 50 61 72 74 4c 65 6e 2c 20 43 4b 5f ptedPartLen, CK_ 29a30 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 BYTE_PTR pPart, 29a40 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul 29a50 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b PartLen) {..CACK 29a60 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 29a70 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 29a80 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 29a90 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 29aa0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 29ab0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 29ac0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 29ad0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 29ae0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 29af0 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 29b00 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 29b10 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 29b20 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 29b30 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 29b40 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 29b50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 29b60 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 29b70 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 29b80 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 29b90 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 ION(CK_RV, C_Sig 29ba0 6e 45 6e 63 72 79 70 74 55 70 64 61 74 65 29 28 nEncryptUpdate)( 29bb0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL 29bc0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B 29bd0 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 YTE_PTR pPart, C 29be0 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 K_ULONG ulPartLe 29bf0 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p 29c00 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 43 EncryptedPart, C 29c10 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 45 K_ULONG_PTR pulE 29c20 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 29 ncryptedPartLen) 29c30 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 29c40 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 29c50 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 29c60 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 29c70 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 29c80 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 29c90 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 29ca0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 29cb0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 29cc0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 29cd0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 29ce0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 29cf0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 29d00 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 29d10 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 29d20 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 29d30 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 29d40 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 29d50 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 TED);.}..CK_DEFI 29d60 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 NE_FUNCTION(CK_R 29d70 56 2c 20 43 5f 44 65 63 72 79 70 74 56 65 72 69 V, C_DecryptVeri 29d80 66 79 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 fyUpdate)(CK_SES 29d90 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 29da0 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 sion, CK_BYTE_PT 29db0 52 20 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 R pEncryptedPart 29dc0 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 45 6e 63 , CK_ULONG ulEnc 29dd0 72 79 70 74 65 64 50 61 72 74 4c 65 6e 2c 20 43 ryptedPartLen, C 29de0 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 K_BYTE_PTR pPart 29df0 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 , CK_ULONG_PTR p 29e00 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 ulPartLen) {..CA 29e10 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 CKEY_DEBUG_PRINT 29e20 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 F("Called.");... 29e30 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 if (!cackey_init 29e40 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 ialized) {...CAC 29e50 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 29e60 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e ("Error. Not in 29e70 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 itialized.");... 29e80 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 .return(CKR_CRYP 29e90 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c TOKI_NOT_INITIAL 29ea0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b IZED);..}...CACK 29eb0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 29ec0 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 "Returning CKR_F 29ed0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 29ee0 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 ORTED (%i)", CKR 29ef0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 _FUNCTION_NOT_SU 29f00 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 PPORTED);...retu 29f10 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f rn(CKR_FUNCTION_ 29f20 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 29f30 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e }..CK_DEFINE_FUN 29f40 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 CTION(CK_RV, C_G 29f50 65 6e 65 72 61 74 65 4b 65 79 29 28 43 4b 5f 53 enerateKey)(CK_S 29f60 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS 29f70 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 ession, CK_MECHA 29f80 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e NISM_PTR pMechan 29f90 69 73 6d 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 ism, CK_ATTRIBUT 29fa0 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c E_PTR pTemplate, 29fb0 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e CK_ULONG ulCoun 29fc0 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e t, CK_OBJECT_HAN 29fd0 44 4c 45 5f 50 54 52 20 70 68 4b 65 79 29 20 7b DLE_PTR phKey) { 29fe0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 29ff0 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 2a000 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 2a010 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 2a020 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 2a030 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 2a040 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 2a050 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 2a060 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 2a070 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 2a080 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 2a090 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 2a0a0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 2a0b0 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 2a0c0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 2a0d0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 2a0e0 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 2a0f0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 2a100 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 2a110 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 2a120 20 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 50 61 C_GenerateKeyPa 2a130 69 72 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 ir)(CK_SESSION_H 2a140 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession, 2a150 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 CK_MECHANISM_PTR 2a160 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f pMechanism, CK_ 2a170 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 50 ATTRIBUTE_PTR pP 2a180 75 62 6c 69 63 4b 65 79 54 65 6d 70 6c 61 74 65 ublicKeyTemplate 2a190 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 75 62 , CK_ULONG ulPub 2a1a0 6c 69 63 4b 65 79 41 74 74 72 69 62 75 74 65 43 licKeyAttributeC 2a1b0 6f 75 6e 74 2c 20 43 4b 5f 41 54 54 52 49 42 55 ount, CK_ATTRIBU 2a1c0 54 45 5f 50 54 52 20 70 50 72 69 76 61 74 65 4b TE_PTR pPrivateK 2a1d0 65 79 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 eyTemplate, CK_U 2a1e0 4c 4f 4e 47 20 75 6c 50 72 69 76 61 74 65 4b 65 LONG ulPrivateKe 2a1f0 79 41 74 74 72 69 62 75 74 65 43 6f 75 6e 74 2c yAttributeCount, 2a200 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL 2a210 45 5f 50 54 52 20 70 68 50 75 62 6c 69 63 4b 65 E_PTR phPublicKe 2a220 79 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e y, CK_OBJECT_HAN 2a230 44 4c 45 5f 50 54 52 20 70 68 50 72 69 76 61 74 DLE_PTR phPrivat 2a240 65 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f eKey) {..CACKEY_ 2a250 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 2a260 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 lled.");...if (! 2a270 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a cackey_initializ 2a280 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 ed) {...CACKEY_D 2a290 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 EBUG_PRINTF("Err 2a2a0 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c or. Not initial 2a2b0 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 ized.");....retu 2a2c0 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f rn(CKR_CRYPTOKI_ 2a2d0 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 NOT_INITIALIZED) 2a2e0 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 ;..}...CACKEY_DE 2a2f0 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 BUG_PRINTF("Retu 2a300 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 rning CKR_FUNCTI 2a310 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 ON_NOT_SUPPORTED 2a320 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 (%i)", CKR_FUNC 2a330 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 TION_NOT_SUPPORT 2a340 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b ED);...return(CK 2a350 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 R_FUNCTION_NOT_S 2a360 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b UPPORTED);.}..CK 2a370 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 2a380 28 43 4b 5f 52 56 2c 20 43 5f 57 72 61 70 4b 65 (CK_RV, C_WrapKe 2a390 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 y)(CK_SESSION_HA 2a3a0 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C 2a3b0 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 K_MECHANISM_PTR 2a3c0 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f pMechanism, CK_O 2a3d0 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 57 72 BJECT_HANDLE hWr 2a3e0 61 70 70 69 6e 67 4b 65 79 2c 20 43 4b 5f 4f 42 appingKey, CK_OB 2a3f0 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 JECT_HANDLE hKey 2a400 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 57 , CK_BYTE_PTR pW 2a410 72 61 70 70 65 64 4b 65 79 2c 20 43 4b 5f 55 4c rappedKey, CK_UL 2a420 4f 4e 47 5f 50 54 52 20 70 75 6c 57 72 61 70 70 ONG_PTR pulWrapp 2a430 65 64 4b 65 79 4c 65 6e 29 20 7b 0a 09 43 41 43 edKeyLen) {..CAC 2a440 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 2a450 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 ("Called.");...i 2a460 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 f (!cackey_initi 2a470 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b alized) {...CACK 2a480 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 2a490 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 "Error. Not ini 2a4a0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 tialized.");.... 2a4b0 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 return(CKR_CRYPT 2a4c0 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 OKI_NOT_INITIALI 2a4d0 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 ZED);..}...CACKE 2a4e0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 2a4f0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 2a500 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 2a510 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f RTED (%i)", CKR_ 2a520 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 FUNCTION_NOT_SUP 2a530 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 PORTED);...retur 2a540 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e n(CKR_FUNCTION_N 2a550 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d OT_SUPPORTED);.} 2a560 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 ..CK_DEFINE_FUNC 2a570 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 55 6e TION(CK_RV, C_Un 2a580 77 72 61 70 4b 65 79 29 28 43 4b 5f 53 45 53 53 wrapKey)(CK_SESS 2a590 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess 2a5a0 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 ion, CK_MECHANIS 2a5b0 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d M_PTR pMechanism 2a5c0 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 , CK_OBJECT_HAND 2a5d0 4c 45 20 68 55 6e 77 72 61 70 70 69 6e 67 4b 65 LE hUnwrappingKe 2a5e0 79 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 y, CK_BYTE_PTR p 2a5f0 57 72 61 70 70 65 64 4b 65 79 2c 20 43 4b 5f 55 WrappedKey, CK_U 2a600 4c 4f 4e 47 20 75 6c 57 72 61 70 70 65 64 4b 65 LONG ulWrappedKe 2a610 79 4c 65 6e 2c 20 43 4b 5f 41 54 54 52 49 42 55 yLen, CK_ATTRIBU 2a620 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 TE_PTR pTemplate 2a630 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 41 74 74 , CK_ULONG ulAtt 2a640 72 69 62 75 74 65 43 6f 75 6e 74 2c 20 43 4b 5f ributeCount, CK_ 2a650 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 OBJECT_HANDLE_PT 2a660 52 20 70 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b R phKey) {..CACK 2a670 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF( 2a680 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 "Called.");...if 2a690 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 (!cackey_initia 2a6a0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 lized) {...CACKE 2a6b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 2a6c0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 Error. Not init 2a6d0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 ialized.");....r 2a6e0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f eturn(CKR_CRYPTO 2a6f0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a KI_NOT_INITIALIZ 2a700 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 ED);..}...CACKEY 2a710 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 _DEBUG_PRINTF("R 2a720 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e eturning CKR_FUN 2a730 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 2a740 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 TED (%i)", CKR_F 2a750 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 UNCTION_NOT_SUPP 2a760 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e ORTED);...return 2a770 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f (CKR_FUNCTION_NO 2a780 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a T_SUPPORTED);.}. 2a790 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 .CK_DEFINE_FUNCT 2a7a0 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 72 ION(CK_RV, C_Der 2a7b0 69 76 65 4b 65 79 29 28 43 4b 5f 53 45 53 53 49 iveKey)(CK_SESSI 2a7c0 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 ON_HANDLE hSessi 2a7d0 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d on, CK_MECHANISM 2a7e0 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c _PTR pMechanism, 2a7f0 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL 2a800 45 20 68 42 61 73 65 4b 65 79 2c 20 43 4b 5f 41 E hBaseKey, CK_A 2a810 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 54 65 TTRIBUTE_PTR pTe 2a820 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 mplate, CK_ULONG 2a830 20 75 6c 41 74 74 72 69 62 75 74 65 43 6f 75 6e ulAttributeCoun 2a840 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e t, CK_OBJECT_HAN 2a850 44 4c 45 5f 50 54 52 20 70 68 4b 65 79 29 20 7b DLE_PTR phKey) { 2a860 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 2a870 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 RINTF("Called.") 2a880 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f ;...if (!cackey_ 2a890 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {.. 2a8a0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 2a8b0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f INTF("Error. No 2a8c0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 t initialized.") 2a8d0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f ;....return(CKR_ 2a8e0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 CRYPTOKI_NOT_INI 2a8f0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 TIALIZED);..}... 2a900 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI 2a910 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 NTF("Returning C 2a920 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f KR_FUNCTION_NOT_ 2a930 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c SUPPORTED (%i)", 2a940 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 2a950 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 T_SUPPORTED);... 2a960 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 return(CKR_FUNCT 2a970 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 ION_NOT_SUPPORTE 2a980 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 D);.}..CK_DEFINE 2a990 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c _FUNCTION(CK_RV, 2a9a0 20 43 5f 53 65 65 64 52 61 6e 64 6f 6d 29 28 43 C_SeedRandom)(C 2a9b0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE 2a9c0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY 2a9d0 54 45 5f 50 54 52 20 70 53 65 65 64 2c 20 43 4b TE_PTR pSeed, CK 2a9e0 5f 55 4c 4f 4e 47 20 75 6c 53 65 65 64 4c 65 6e _ULONG ulSeedLen 2a9f0 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU 2aa00 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called 2aa10 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b .");...if (!cack 2aa20 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 ey_initialized) 2aa30 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {...CACKEY_DEBUG 2aa40 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 _PRINTF("Error. 2aa50 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 Not initialized 2aa60 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 .");....return(C 2aa70 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f KR_CRYPTOKI_NOT_ 2aa80 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d INITIALIZED);..} 2aa90 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 2aaa0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 2aab0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 2aac0 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 OT_SUPPORTED (%i 2aad0 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e )", CKR_FUNCTION 2aae0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b _NOT_SUPPORTED); 2aaf0 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 ...return(CKR_FU 2ab00 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f NCTION_NOT_SUPPO 2ab10 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 RTED);.}..CK_DEF 2ab20 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f INE_FUNCTION(CK_ 2ab30 52 56 2c 20 43 5f 47 65 6e 65 72 61 74 65 52 61 RV, C_GenerateRa 2ab40 6e 64 6f 6d 29 28 43 4b 5f 53 45 53 53 49 4f 4e ndom)(CK_SESSION 2ab50 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e _HANDLE hSession 2ab60 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 52 , CK_BYTE_PTR pR 2ab70 61 6e 64 6f 6d 44 61 74 61 2c 20 43 4b 5f 55 4c andomData, CK_UL 2ab80 4f 4e 47 20 75 6c 52 61 6e 64 6f 6d 4c 65 6e 29 ONG ulRandomLen) 2ab90 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG 2aba0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e _PRINTF("Called. 2abb0 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 ");...if (!cacke 2abc0 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b y_initialized) { 2abd0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 2abe0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 PRINTF("Error. 2abf0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e Not initialized. 2ac00 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 2ac10 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 R_CRYPTOKI_NOT_I 2ac20 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a NITIALIZED);..}. 2ac30 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 ..CACKEY_DEBUG_P 2ac40 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 RINTF("Returning 2ac50 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f CKR_FUNCTION_NO 2ac60 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 T_SUPPORTED (%i) 2ac70 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 2ac80 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a NOT_SUPPORTED);. 2ac90 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e ..return(CKR_FUN 2aca0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 CTION_NOT_SUPPOR 2acb0 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 44 65 70 72 TED);.}../* Depr 2acc0 65 63 61 74 65 64 20 46 75 6e 63 74 69 6f 6e 20 ecated Function 2acd0 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e */.CK_DEFINE_FUN 2ace0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 CTION(CK_RV, C_G 2acf0 65 74 46 75 6e 63 74 69 6f 6e 53 74 61 74 75 73 etFunctionStatus 2ad00 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e )(CK_SESSION_HAN 2ad10 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 20 7b 0a DLE hSession) {. 2ad20 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 .CACKEY_DEBUG_PR 2ad30 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b INTF("Called."); 2ad40 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f ...CACKEY_DEBUG_ 2ad50 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e PRINTF("Returnin 2ad60 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e g CKR_FUNCTION_N 2ad70 4f 54 5f 50 41 52 41 4c 4c 45 4c 20 28 25 69 29 OT_PARALLEL (%i) 2ad80 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f ", CKR_FUNCTION_ 2ad90 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a NOT_PARALLEL);.. 2ada0 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 .return(CKR_FUNC 2adb0 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 TION_NOT_PARALLE 2adc0 4c 29 3b 0a 0a 09 68 53 65 73 73 69 6f 6e 20 3d L);...hSession = 2add0 20 68 53 65 73 73 69 6f 6e 3b 20 2f 2a 20 53 75 hSession; /* Su 2ade0 70 72 65 73 73 20 75 6e 75 73 65 64 20 76 61 72 press unused var 2adf0 69 61 62 6c 65 20 77 61 72 6e 69 6e 67 20 2a 2f iable warning */ 2ae00 0a 7d 0a 0a 2f 2a 20 44 65 70 72 65 63 61 74 65 .}../* Deprecate 2ae10 64 20 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 43 4b d Function */.CK 2ae20 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e _DEFINE_FUNCTION 2ae30 28 43 4b 5f 52 56 2c 20 43 5f 43 61 6e 63 65 6c (CK_RV, C_Cancel 2ae40 46 75 6e 63 74 69 6f 6e 29 28 43 4b 5f 53 45 53 Function)(CK_SES 2ae50 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes 2ae60 73 69 6f 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f sion) {..CACKEY_ 2ae70 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca 2ae80 6c 6c 65 64 2e 22 29 3b 0a 0a 09 43 41 43 4b 45 lled.");...CACKE 2ae90 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 2aea0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 Returning CKR_FU 2aeb0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c NCTION_NOT_PARAL 2aec0 4c 45 4c 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 LEL (%i)", CKR_F 2aed0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 UNCTION_NOT_PARA 2aee0 4c 4c 45 4c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 LLEL);...return( 2aef0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 CKR_FUNCTION_NOT 2af00 5f 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a 09 68 53 _PARALLEL);...hS 2af10 65 73 73 69 6f 6e 20 3d 20 68 53 65 73 73 69 6f ession = hSessio 2af20 6e 3b 20 2f 2a 20 53 75 70 72 65 73 73 20 75 6e n; /* Supress un 2af30 75 73 65 64 20 76 61 72 69 61 62 6c 65 20 77 61 used variable wa 2af40 72 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 43 4b 5f 44 rning */.}..CK_D 2af50 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 EFINE_FUNCTION(C 2af60 4b 5f 52 56 2c 20 43 5f 47 65 74 46 75 6e 63 74 K_RV, C_GetFunct 2af70 69 6f 6e 4c 69 73 74 29 28 43 4b 5f 46 55 4e 43 ionList)(CK_FUNC 2af80 54 49 4f 4e 5f 4c 49 53 54 5f 50 54 52 5f 50 54 TION_LIST_PTR_PT 2af90 52 20 70 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 R ppFunctionList 2afa0 29 20 7b 0a 09 43 4b 5f 46 55 4e 43 54 49 4f 4e ) {..CK_FUNCTION 2afb0 5f 4c 49 53 54 5f 50 54 52 20 70 46 75 6e 63 74 _LIST_PTR pFunct 2afc0 69 6f 6e 4c 69 73 74 3b 0a 0a 09 43 41 43 4b 45 ionList;...CACKE 2afd0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 2afe0 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 Called.");...if 2aff0 28 70 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 20 (ppFunctionList 2b000 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 == NULL) {...CAC 2b010 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 KEY_DEBUG_PRINTF 2b020 28 22 45 72 72 6f 72 2e 20 70 70 46 75 6e 63 74 ("Error. ppFunct 2b030 69 6f 6e 4c 69 73 74 20 69 73 20 4e 55 4c 4c 2e ionList is NULL. 2b040 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b ");....return(CK 2b050 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 R_ARGUMENTS_BAD) 2b060 3b 0a 09 7d 0a 0a 09 70 46 75 6e 63 74 69 6f 6e ;..}...pFunction 2b070 4c 69 73 74 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 List = malloc(si 2b080 7a 65 6f 66 28 2a 70 46 75 6e 63 74 69 6f 6e 4c zeof(*pFunctionL 2b090 69 73 74 29 29 3b 0a 0a 09 70 46 75 6e 63 74 69 ist));...pFuncti 2b0a0 6f 6e 4c 69 73 74 2d 3e 76 65 72 73 69 6f 6e 2e onList->version. 2b0b0 6d 61 6a 6f 72 20 3d 20 28 28 43 41 43 4b 45 59 major = ((CACKEY 2b0c0 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 53 49 4f _CRYPTOKI_VERSIO 2b0d0 4e 5f 43 4f 44 45 29 20 3e 3e 20 31 36 29 20 26 N_CODE) >> 16) & 2b0e0 20 30 78 66 66 3b 0a 09 70 46 75 6e 63 74 69 6f 0xff;..pFunctio 2b0f0 6e 4c 69 73 74 2d 3e 76 65 72 73 69 6f 6e 2e 6d nList->version.m 2b100 69 6e 6f 72 20 3d 20 28 28 43 41 43 4b 45 59 5f inor = ((CACKEY_ 2b110 43 52 59 50 54 4f 4b 49 5f 56 45 52 53 49 4f 4e CRYPTOKI_VERSION 2b120 5f 43 4f 44 45 29 20 3e 3e 20 38 29 20 26 20 30 _CODE) >> 8) & 0 2b130 78 66 66 3b 0a 0a 09 70 46 75 6e 63 74 69 6f 6e xff;...pFunction 2b140 4c 69 73 74 2d 3e 43 5f 49 6e 69 74 69 61 6c 69 List->C_Initiali 2b150 7a 65 20 3d 20 43 5f 49 6e 69 74 69 61 6c 69 7a ze = C_Initializ 2b160 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 e;..pFunctionLis 2b170 74 2d 3e 43 5f 46 69 6e 61 6c 69 7a 65 20 3d 20 t->C_Finalize = 2b180 43 5f 46 69 6e 61 6c 69 7a 65 3b 0a 09 70 46 75 C_Finalize;..pFu 2b190 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge 2b1a0 74 49 6e 66 6f 20 3d 20 43 5f 47 65 74 49 6e 66 tInfo = C_GetInf 2b1b0 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 o;..pFunctionLis 2b1c0 74 2d 3e 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 t->C_GetSlotList 2b1d0 20 3d 20 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 = C_GetSlotList 2b1e0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2b1f0 2d 3e 43 5f 47 65 74 53 6c 6f 74 49 6e 66 6f 20 ->C_GetSlotInfo 2b200 3d 20 43 5f 47 65 74 53 6c 6f 74 49 6e 66 6f 3b = C_GetSlotInfo; 2b210 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 2b220 3e 43 5f 47 65 74 54 6f 6b 65 6e 49 6e 66 6f 20 >C_GetTokenInfo 2b230 3d 20 43 5f 47 65 74 54 6f 6b 65 6e 49 6e 66 6f = C_GetTokenInfo 2b240 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2b250 2d 3e 43 5f 57 61 69 74 46 6f 72 53 6c 6f 74 45 ->C_WaitForSlotE 2b260 76 65 6e 74 20 3d 20 43 5f 57 61 69 74 46 6f 72 vent = C_WaitFor 2b270 53 6c 6f 74 45 76 65 6e 74 3b 0a 09 70 46 75 6e SlotEvent;..pFun 2b280 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 ctionList->C_Get 2b290 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 20 3d 20 MechanismList = 2b2a0 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 6d 4c 69 C_GetMechanismLi 2b2b0 73 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 st;..pFunctionLi 2b2c0 73 74 2d 3e 43 5f 47 65 74 4d 65 63 68 61 6e 69 st->C_GetMechani 2b2d0 73 6d 49 6e 66 6f 20 3d 20 43 5f 47 65 74 4d 65 smInfo = C_GetMe 2b2e0 63 68 61 6e 69 73 6d 49 6e 66 6f 3b 0a 09 70 46 chanismInfo;..pF 2b2f0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 49 unctionList->C_I 2b300 6e 69 74 54 6f 6b 65 6e 20 3d 20 43 5f 49 6e 69 nitToken = C_Ini 2b310 74 54 6f 6b 65 6e 3b 0a 09 70 46 75 6e 63 74 69 tToken;..pFuncti 2b320 6f 6e 4c 69 73 74 2d 3e 43 5f 49 6e 69 74 50 49 onList->C_InitPI 2b330 4e 20 3d 20 43 5f 49 6e 69 74 50 49 4e 3b 0a 09 N = C_InitPIN;.. 2b340 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2b350 5f 53 65 74 50 49 4e 20 3d 20 43 5f 53 65 74 50 _SetPIN = C_SetP 2b360 49 4e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 IN;..pFunctionLi 2b370 73 74 2d 3e 43 5f 4f 70 65 6e 53 65 73 73 69 6f st->C_OpenSessio 2b380 6e 20 3d 20 43 5f 4f 70 65 6e 53 65 73 73 69 6f n = C_OpenSessio 2b390 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 n;..pFunctionLis 2b3a0 74 2d 3e 43 5f 43 6c 6f 73 65 53 65 73 73 69 6f t->C_CloseSessio 2b3b0 6e 20 3d 20 43 5f 43 6c 6f 73 65 53 65 73 73 69 n = C_CloseSessi 2b3c0 6f 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 on;..pFunctionLi 2b3d0 73 74 2d 3e 43 5f 43 6c 6f 73 65 41 6c 6c 53 65 st->C_CloseAllSe 2b3e0 73 73 69 6f 6e 73 20 3d 20 43 5f 43 6c 6f 73 65 ssions = C_Close 2b3f0 41 6c 6c 53 65 73 73 69 6f 6e 73 3b 0a 09 70 46 AllSessions;..pF 2b400 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 unctionList->C_G 2b410 65 74 53 65 73 73 69 6f 6e 49 6e 66 6f 20 3d 20 etSessionInfo = 2b420 43 5f 47 65 74 53 65 73 73 69 6f 6e 49 6e 66 6f C_GetSessionInfo 2b430 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2b440 2d 3e 43 5f 47 65 74 4f 70 65 72 61 74 69 6f 6e ->C_GetOperation 2b450 53 74 61 74 65 20 3d 20 43 5f 47 65 74 4f 70 65 State = C_GetOpe 2b460 72 61 74 69 6f 6e 53 74 61 74 65 3b 0a 09 70 46 rationState;..pF 2b470 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 unctionList->C_S 2b480 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 etOperationState 2b490 20 3d 20 43 5f 53 65 74 4f 70 65 72 61 74 69 6f = C_SetOperatio 2b4a0 6e 53 74 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 nState;..pFuncti 2b4b0 6f 6e 4c 69 73 74 2d 3e 43 5f 4c 6f 67 69 6e 20 onList->C_Login 2b4c0 3d 20 43 5f 4c 6f 67 69 6e 3b 0a 09 70 46 75 6e = C_Login;..pFun 2b4d0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 4c 6f 67 ctionList->C_Log 2b4e0 6f 75 74 20 3d 20 43 5f 4c 6f 67 6f 75 74 3b 0a out = C_Logout;. 2b4f0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 2b500 43 5f 43 72 65 61 74 65 4f 62 6a 65 63 74 20 3d C_CreateObject = 2b510 20 43 5f 43 72 65 61 74 65 4f 62 6a 65 63 74 3b C_CreateObject; 2b520 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 2b530 3e 43 5f 43 6f 70 79 4f 62 6a 65 63 74 20 3d 20 >C_CopyObject = 2b540 43 5f 43 6f 70 79 4f 62 6a 65 63 74 3b 0a 09 70 C_CopyObject;..p 2b550 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_ 2b560 44 65 73 74 72 6f 79 4f 62 6a 65 63 74 20 3d 20 DestroyObject = 2b570 43 5f 44 65 73 74 72 6f 79 4f 62 6a 65 63 74 3b C_DestroyObject; 2b580 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 2b590 3e 43 5f 47 65 74 4f 62 6a 65 63 74 53 69 7a 65 >C_GetObjectSize 2b5a0 20 3d 20 43 5f 47 65 74 4f 62 6a 65 63 74 53 69 = C_GetObjectSi 2b5b0 7a 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 ze;..pFunctionLi 2b5c0 73 74 2d 3e 43 5f 47 65 74 41 74 74 72 69 62 75 st->C_GetAttribu 2b5d0 74 65 56 61 6c 75 65 20 3d 20 43 5f 47 65 74 41 teValue = C_GetA 2b5e0 74 74 72 69 62 75 74 65 56 61 6c 75 65 3b 0a 09 ttributeValue;.. 2b5f0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2b600 5f 53 65 74 41 74 74 72 69 62 75 74 65 56 61 6c _SetAttributeVal 2b610 75 65 20 3d 20 43 5f 53 65 74 41 74 74 72 69 62 ue = C_SetAttrib 2b620 75 74 65 56 61 6c 75 65 3b 0a 09 70 46 75 6e 63 uteValue;..pFunc 2b630 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 tionList->C_Find 2b640 4f 62 6a 65 63 74 73 49 6e 69 74 20 3d 20 43 5f ObjectsInit = C_ 2b650 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 3b FindObjectsInit; 2b660 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 2b670 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 20 3d >C_FindObjects = 2b680 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 3b 0a C_FindObjects;. 2b690 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 2b6a0 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 69 6e C_FindObjectsFin 2b6b0 61 6c 20 3d 20 43 5f 46 69 6e 64 4f 62 6a 65 63 al = C_FindObjec 2b6c0 74 73 46 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 tsFinal;..pFunct 2b6d0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 72 79 ionList->C_Encry 2b6e0 70 74 49 6e 69 74 20 3d 20 43 5f 45 6e 63 72 79 ptInit = C_Encry 2b6f0 70 74 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 ptInit;..pFuncti 2b700 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 72 79 70 onList->C_Encryp 2b710 74 20 3d 20 43 5f 45 6e 63 72 79 70 74 3b 0a 09 t = C_Encrypt;.. 2b720 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2b730 5f 45 6e 63 72 79 70 74 55 70 64 61 74 65 20 3d _EncryptUpdate = 2b740 20 43 5f 45 6e 63 72 79 70 74 55 70 64 61 74 65 C_EncryptUpdate 2b750 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2b760 2d 3e 43 5f 45 6e 63 72 79 70 74 46 69 6e 61 6c ->C_EncryptFinal 2b770 20 3d 20 43 5f 45 6e 63 72 79 70 74 46 69 6e 61 = C_EncryptFina 2b780 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 l;..pFunctionLis 2b790 74 2d 3e 43 5f 44 65 63 72 79 70 74 49 6e 69 74 t->C_DecryptInit 2b7a0 20 3d 20 43 5f 44 65 63 72 79 70 74 49 6e 69 74 = C_DecryptInit 2b7b0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2b7c0 2d 3e 43 5f 44 65 63 72 79 70 74 20 3d 20 43 5f ->C_Decrypt = C_ 2b7d0 44 65 63 72 79 70 74 3b 0a 09 70 46 75 6e 63 74 Decrypt;..pFunct 2b7e0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 72 79 ionList->C_Decry 2b7f0 70 74 55 70 64 61 74 65 20 3d 20 43 5f 44 65 63 ptUpdate = C_Dec 2b800 72 79 70 74 55 70 64 61 74 65 3b 0a 09 70 46 75 ryptUpdate;..pFu 2b810 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 nctionList->C_De 2b820 63 72 79 70 74 46 69 6e 61 6c 20 3d 20 43 5f 44 cryptFinal = C_D 2b830 65 63 72 79 70 74 46 69 6e 61 6c 3b 0a 09 70 46 ecryptFinal;..pF 2b840 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 unctionList->C_D 2b850 69 67 65 73 74 49 6e 69 74 20 3d 20 43 5f 44 69 igestInit = C_Di 2b860 67 65 73 74 49 6e 69 74 3b 0a 09 70 46 75 6e 63 gestInit;..pFunc 2b870 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 tionList->C_Dige 2b880 73 74 20 3d 20 43 5f 44 69 67 65 73 74 3b 0a 09 st = C_Digest;.. 2b890 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2b8a0 5f 44 69 67 65 73 74 55 70 64 61 74 65 20 3d 20 _DigestUpdate = 2b8b0 43 5f 44 69 67 65 73 74 55 70 64 61 74 65 3b 0a C_DigestUpdate;. 2b8c0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 2b8d0 43 5f 44 69 67 65 73 74 4b 65 79 20 3d 20 43 5f C_DigestKey = C_ 2b8e0 44 69 67 65 73 74 4b 65 79 3b 0a 09 70 46 75 6e DigestKey;..pFun 2b8f0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 ctionList->C_Dig 2b900 65 73 74 46 69 6e 61 6c 20 3d 20 43 5f 44 69 67 estFinal = C_Dig 2b910 65 73 74 46 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 estFinal;..pFunc 2b920 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e tionList->C_Sign 2b930 49 6e 69 74 20 3d 20 43 5f 53 69 67 6e 49 6e 69 Init = C_SignIni 2b940 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t;..pFunctionLis 2b950 74 2d 3e 43 5f 53 69 67 6e 20 3d 20 43 5f 53 69 t->C_Sign = C_Si 2b960 67 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 gn;..pFunctionLi 2b970 73 74 2d 3e 43 5f 53 69 67 6e 55 70 64 61 74 65 st->C_SignUpdate 2b980 20 3d 20 43 5f 53 69 67 6e 55 70 64 61 74 65 3b = C_SignUpdate; 2b990 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 2b9a0 3e 43 5f 53 69 67 6e 46 69 6e 61 6c 20 3d 20 43 >C_SignFinal = C 2b9b0 5f 53 69 67 6e 46 69 6e 61 6c 3b 0a 09 70 46 75 _SignFinal;..pFu 2b9c0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 nctionList->C_Si 2b9d0 67 6e 52 65 63 6f 76 65 72 49 6e 69 74 20 3d 20 gnRecoverInit = 2b9e0 43 5f 53 69 67 6e 52 65 63 6f 76 65 72 49 6e 69 C_SignRecoverIni 2b9f0 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t;..pFunctionLis 2ba00 74 2d 3e 43 5f 53 69 67 6e 52 65 63 6f 76 65 72 t->C_SignRecover 2ba10 20 3d 20 43 5f 53 69 67 6e 52 65 63 6f 76 65 72 = C_SignRecover 2ba20 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2ba30 2d 3e 43 5f 56 65 72 69 66 79 49 6e 69 74 20 3d ->C_VerifyInit = 2ba40 20 43 5f 56 65 72 69 66 79 49 6e 69 74 3b 0a 09 C_VerifyInit;.. 2ba50 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2ba60 5f 56 65 72 69 66 79 20 3d 20 43 5f 56 65 72 69 _Verify = C_Veri 2ba70 66 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 fy;..pFunctionLi 2ba80 73 74 2d 3e 43 5f 56 65 72 69 66 79 55 70 64 61 st->C_VerifyUpda 2ba90 74 65 20 3d 20 43 5f 56 65 72 69 66 79 55 70 64 te = C_VerifyUpd 2baa0 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c ate;..pFunctionL 2bab0 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 46 69 6e ist->C_VerifyFin 2bac0 61 6c 20 3d 20 43 5f 56 65 72 69 66 79 46 69 6e al = C_VerifyFin 2bad0 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 al;..pFunctionLi 2bae0 73 74 2d 3e 43 5f 56 65 72 69 66 79 52 65 63 6f st->C_VerifyReco 2baf0 76 65 72 49 6e 69 74 20 3d 20 43 5f 56 65 72 69 verInit = C_Veri 2bb00 66 79 52 65 63 6f 76 65 72 49 6e 69 74 3b 0a 09 fyRecoverInit;.. 2bb10 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2bb20 5f 56 65 72 69 66 79 52 65 63 6f 76 65 72 20 3d _VerifyRecover = 2bb30 20 43 5f 56 65 72 69 66 79 52 65 63 6f 76 65 72 C_VerifyRecover 2bb40 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2bb50 2d 3e 43 5f 44 69 67 65 73 74 45 6e 63 72 79 70 ->C_DigestEncryp 2bb60 74 55 70 64 61 74 65 20 3d 20 43 5f 44 69 67 65 tUpdate = C_Dige 2bb70 73 74 45 6e 63 72 79 70 74 55 70 64 61 74 65 3b stEncryptUpdate; 2bb80 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d ..pFunctionList- 2bb90 3e 43 5f 44 65 63 72 79 70 74 44 69 67 65 73 74 >C_DecryptDigest 2bba0 55 70 64 61 74 65 20 3d 20 43 5f 44 65 63 72 79 Update = C_Decry 2bbb0 70 74 44 69 67 65 73 74 55 70 64 61 74 65 3b 0a ptDigestUpdate;. 2bbc0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 2bbd0 43 5f 53 69 67 6e 45 6e 63 72 79 70 74 55 70 64 C_SignEncryptUpd 2bbe0 61 74 65 20 3d 20 43 5f 53 69 67 6e 45 6e 63 72 ate = C_SignEncr 2bbf0 79 70 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e yptUpdate;..pFun 2bc00 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 ctionList->C_Dec 2bc10 72 79 70 74 56 65 72 69 66 79 55 70 64 61 74 65 ryptVerifyUpdate 2bc20 20 3d 20 43 5f 44 65 63 72 79 70 74 56 65 72 69 = C_DecryptVeri 2bc30 66 79 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 fyUpdate;..pFunc 2bc40 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 6e 65 tionList->C_Gene 2bc50 72 61 74 65 4b 65 79 20 3d 20 43 5f 47 65 6e 65 rateKey = C_Gene 2bc60 72 61 74 65 4b 65 79 3b 0a 09 70 46 75 6e 63 74 rateKey;..pFunct 2bc70 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 6e 65 72 ionList->C_Gener 2bc80 61 74 65 4b 65 79 50 61 69 72 20 3d 20 43 5f 47 ateKeyPair = C_G 2bc90 65 6e 65 72 61 74 65 4b 65 79 50 61 69 72 3b 0a enerateKeyPair;. 2bca0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e .pFunctionList-> 2bcb0 43 5f 57 72 61 70 4b 65 79 20 3d 20 43 5f 57 72 C_WrapKey = C_Wr 2bcc0 61 70 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f apKey;..pFunctio 2bcd0 6e 4c 69 73 74 2d 3e 43 5f 55 6e 77 72 61 70 4b nList->C_UnwrapK 2bce0 65 79 20 3d 20 43 5f 55 6e 77 72 61 70 4b 65 79 ey = C_UnwrapKey 2bcf0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 ;..pFunctionList 2bd00 2d 3e 43 5f 44 65 72 69 76 65 4b 65 79 20 3d 20 ->C_DeriveKey = 2bd10 43 5f 44 65 72 69 76 65 4b 65 79 3b 0a 09 70 46 C_DeriveKey;..pF 2bd20 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 unctionList->C_S 2bd30 65 65 64 52 61 6e 64 6f 6d 20 3d 20 43 5f 53 65 eedRandom = C_Se 2bd40 65 64 52 61 6e 64 6f 6d 3b 0a 09 70 46 75 6e 63 edRandom;..pFunc 2bd50 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 6e 65 tionList->C_Gene 2bd60 72 61 74 65 52 61 6e 64 6f 6d 20 3d 20 43 5f 47 rateRandom = C_G 2bd70 65 6e 65 72 61 74 65 52 61 6e 64 6f 6d 3b 0a 09 enerateRandom;.. 2bd80 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2bd90 5f 47 65 74 46 75 6e 63 74 69 6f 6e 53 74 61 74 _GetFunctionStat 2bda0 75 73 20 3d 20 43 5f 47 65 74 46 75 6e 63 74 69 us = C_GetFuncti 2bdb0 6f 6e 53 74 61 74 75 73 3b 0a 09 70 46 75 6e 63 onStatus;..pFunc 2bdc0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 61 6e 63 tionList->C_Canc 2bdd0 65 6c 46 75 6e 63 74 69 6f 6e 20 3d 20 43 5f 43 elFunction = C_C 2bde0 61 6e 63 65 6c 46 75 6e 63 74 69 6f 6e 3b 0a 09 ancelFunction;.. 2bdf0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C 2be00 5f 47 65 74 46 75 6e 63 74 69 6f 6e 4c 69 73 74 _GetFunctionList 2be10 20 3d 20 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e = C_GetFunction 2be20 4c 69 73 74 3b 0a 0a 09 2a 70 70 46 75 6e 63 74 List;...*ppFunct 2be30 69 6f 6e 4c 69 73 74 20 3d 20 70 46 75 6e 63 74 ionList = pFunct 2be40 69 6f 6e 4c 69 73 74 3b 0a 0a 09 43 41 43 4b 45 ionList;...CACKE 2be50 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 Y_DEBUG_PRINTF(" 2be60 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b Returning CKR_OK 2be70 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b (%i)", CKR_OK); 2be80 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK 2be90 29 3b 0a 7d 0a 0a );.}..