0000: 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 79 #include <sys/ty
0010: 70 65 73 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 pes.h>.#include
0020: 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c <string.h>.#incl
0030: 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 23 ude <unistd.h>.#
0040: 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e include <stdlib.
0050: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 h>.#include <std
0060: 69 6f 2e 68 3e 0a 0a 23 69 66 6e 64 65 66 20 43 io.h>..#ifndef C
0070: 41 43 4b 45 59 5f 54 45 53 54 5f 41 46 4c 0a 23 ACKEY_TEST_AFL.#
0080: 69 6e 63 6c 75 64 65 20 22 6d 79 70 6b 63 73 31 include "mypkcs1
0090: 31 2e 68 22 0a 0a 73 74 61 74 69 63 20 63 68 61 1.h"..static cha
00a0: 72 20 2a 70 6b 63 73 31 31 5f 61 74 74 72 69 62 r *pkcs11_attrib
00b0: 75 74 65 5f 74 6f 5f 6e 61 6d 65 28 43 4b 5f 41 ute_to_name(CK_A
00c0: 54 54 52 49 42 55 54 45 5f 54 59 50 45 20 61 74 TTRIBUTE_TYPE at
00d0: 74 72 69 62 29 20 7b 0a 09 73 74 61 74 69 63 20 trib) {..static
00e0: 63 68 61 72 20 72 65 74 62 75 66 5b 31 30 32 34 char retbuf[1024
00f0: 5d 3b 0a 0a 09 73 77 69 74 63 68 20 28 61 74 74 ];...switch (att
0100: 72 69 62 29 20 7b 0a 09 09 63 61 73 65 20 30 78 rib) {...case 0x
0110: 30 30 30 30 30 30 30 30 3a 20 72 65 74 75 72 6e 00000000: return
0120: 20 22 43 4b 41 5f 43 4c 41 53 53 22 3b 0a 09 09 "CKA_CLASS";...
0130: 63 61 73 65 20 30 78 30 30 30 30 30 30 30 31 3a case 0x00000001:
0140: 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 54 4f 4b return "CKA_TOK
0150: 45 4e 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 EN";...case 0x00
0160: 30 30 30 30 30 32 3a 20 72 65 74 75 72 6e 20 22 000002: return "
0170: 43 4b 41 5f 50 52 49 56 41 54 45 22 3b 0a 09 09 CKA_PRIVATE";...
0180: 63 61 73 65 20 30 78 30 30 30 30 30 30 30 33 3a case 0x00000003:
0190: 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 4c 41 42 return "CKA_LAB
01a0: 45 4c 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 EL";...case 0x00
01b0: 30 30 30 30 31 30 3a 20 72 65 74 75 72 6e 20 22 000010: return "
01c0: 43 4b 41 5f 41 50 50 4c 49 43 41 54 49 4f 4e 22 CKA_APPLICATION"
01d0: 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 ;...case 0x00000
01e0: 30 31 31 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 011: return "CKA
01f0: 5f 56 41 4c 55 45 22 3b 0a 09 09 63 61 73 65 20 _VALUE";...case
0200: 30 78 30 30 30 30 30 30 31 32 3a 20 72 65 74 75 0x00000012: retu
0210: 72 6e 20 22 43 4b 41 5f 4f 42 4a 45 43 54 5f 49 rn "CKA_OBJECT_I
0220: 44 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 D";...case 0x000
0230: 30 30 30 38 30 3a 20 72 65 74 75 72 6e 20 22 43 00080: return "C
0240: 4b 41 5f 43 45 52 54 49 46 49 43 41 54 45 5f 54 KA_CERTIFICATE_T
0250: 59 50 45 22 3b 0a 09 09 63 61 73 65 20 30 78 30 YPE";...case 0x0
0260: 30 30 30 30 30 38 31 3a 20 72 65 74 75 72 6e 20 0000081: return
0270: 22 43 4b 41 5f 49 53 53 55 45 52 22 3b 0a 09 09 "CKA_ISSUER";...
0280: 63 61 73 65 20 30 78 30 30 30 30 30 30 38 32 3a case 0x00000082:
0290: 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 53 45 52 return "CKA_SER
02a0: 49 41 4c 5f 4e 55 4d 42 45 52 22 3b 0a 09 09 63 IAL_NUMBER";...c
02b0: 61 73 65 20 30 78 30 30 30 30 30 30 38 33 3a 20 ase 0x00000083:
02c0: 72 65 74 75 72 6e 20 22 43 4b 41 5f 41 43 5f 49 return "CKA_AC_I
02d0: 53 53 55 45 52 22 3b 0a 09 09 63 61 73 65 20 30 SSUER";...case 0
02e0: 78 30 30 30 30 30 30 38 34 3a 20 72 65 74 75 72 x00000084: retur
02f0: 6e 20 22 43 4b 41 5f 4f 57 4e 45 52 22 3b 0a 09 n "CKA_OWNER";..
0300: 09 63 61 73 65 20 30 78 30 30 30 30 30 30 38 35 .case 0x00000085
0310: 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 41 54 : return "CKA_AT
0320: 54 52 5f 54 59 50 45 53 22 3b 0a 09 09 63 61 73 TR_TYPES";...cas
0330: 65 20 30 78 30 30 30 30 30 30 38 36 3a 20 72 65 e 0x00000086: re
0340: 74 75 72 6e 20 22 43 4b 41 5f 54 52 55 53 54 45 turn "CKA_TRUSTE
0350: 44 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 D";...case 0x000
0360: 30 30 31 30 30 3a 20 72 65 74 75 72 6e 20 22 43 00100: return "C
0370: 4b 41 5f 4b 45 59 5f 54 59 50 45 22 3b 0a 09 09 KA_KEY_TYPE";...
0380: 63 61 73 65 20 30 78 30 30 30 30 30 31 30 31 3a case 0x00000101:
0390: 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 53 55 42 return "CKA_SUB
03a0: 4a 45 43 54 22 3b 0a 09 09 63 61 73 65 20 30 78 JECT";...case 0x
03b0: 30 30 30 30 30 31 30 32 3a 20 72 65 74 75 72 6e 00000102: return
03c0: 20 22 43 4b 41 5f 49 44 22 3b 0a 09 09 63 61 73 "CKA_ID";...cas
03d0: 65 20 30 78 30 30 30 30 30 31 30 33 3a 20 72 65 e 0x00000103: re
03e0: 74 75 72 6e 20 22 43 4b 41 5f 53 45 4e 53 49 54 turn "CKA_SENSIT
03f0: 49 56 45 22 3b 0a 09 09 63 61 73 65 20 30 78 30 IVE";...case 0x0
0400: 30 30 30 30 31 30 34 3a 20 72 65 74 75 72 6e 20 0000104: return
0410: 22 43 4b 41 5f 45 4e 43 52 59 50 54 22 3b 0a 09 "CKA_ENCRYPT";..
0420: 09 63 61 73 65 20 30 78 30 30 30 30 30 31 30 35 .case 0x00000105
0430: 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 44 45 : return "CKA_DE
0440: 43 52 59 50 54 22 3b 0a 09 09 63 61 73 65 20 30 CRYPT";...case 0
0450: 78 30 30 30 30 30 31 30 36 3a 20 72 65 74 75 72 x00000106: retur
0460: 6e 20 22 43 4b 41 5f 57 52 41 50 22 3b 0a 09 09 n "CKA_WRAP";...
0470: 63 61 73 65 20 30 78 30 30 30 30 30 31 30 37 3a case 0x00000107:
0480: 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 55 4e 57 return "CKA_UNW
0490: 52 41 50 22 3b 0a 09 09 63 61 73 65 20 30 78 30 RAP";...case 0x0
04a0: 30 30 30 30 31 30 38 3a 20 72 65 74 75 72 6e 20 0000108: return
04b0: 22 43 4b 41 5f 53 49 47 4e 22 3b 0a 09 09 63 61 "CKA_SIGN";...ca
04c0: 73 65 20 30 78 30 30 30 30 30 31 30 39 3a 20 72 se 0x00000109: r
04d0: 65 74 75 72 6e 20 22 43 4b 41 5f 53 49 47 4e 5f eturn "CKA_SIGN_
04e0: 52 45 43 4f 56 45 52 22 3b 0a 09 09 63 61 73 65 RECOVER";...case
04f0: 20 30 78 30 30 30 30 30 31 30 41 3a 20 72 65 74 0x0000010A: ret
0500: 75 72 6e 20 22 43 4b 41 5f 56 45 52 49 46 59 22 urn "CKA_VERIFY"
0510: 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 ;...case 0x00000
0520: 31 30 42 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 10B: return "CKA
0530: 5f 56 45 52 49 46 59 5f 52 45 43 4f 56 45 52 22 _VERIFY_RECOVER"
0540: 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 ;...case 0x00000
0550: 31 30 43 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 10C: return "CKA
0560: 5f 44 45 52 49 56 45 22 3b 0a 09 09 63 61 73 65 _DERIVE";...case
0570: 20 30 78 30 30 30 30 30 31 31 30 3a 20 72 65 74 0x00000110: ret
0580: 75 72 6e 20 22 43 4b 41 5f 53 54 41 52 54 5f 44 urn "CKA_START_D
0590: 41 54 45 22 3b 0a 09 09 63 61 73 65 20 30 78 30 ATE";...case 0x0
05a0: 30 30 30 30 31 31 31 3a 20 72 65 74 75 72 6e 20 0000111: return
05b0: 22 43 4b 41 5f 45 4e 44 5f 44 41 54 45 22 3b 0a "CKA_END_DATE";.
05c0: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31 32 ..case 0x0000012
05d0: 30 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 4d 0: return "CKA_M
05e0: 4f 44 55 4c 55 53 22 3b 0a 09 09 63 61 73 65 20 ODULUS";...case
05f0: 30 78 30 30 30 30 30 31 32 31 3a 20 72 65 74 75 0x00000121: retu
0600: 72 6e 20 22 43 4b 41 5f 4d 4f 44 55 4c 55 53 5f rn "CKA_MODULUS_
0610: 42 49 54 53 22 3b 0a 09 09 63 61 73 65 20 30 78 BITS";...case 0x
0620: 30 30 30 30 30 31 32 32 3a 20 72 65 74 75 72 6e 00000122: return
0630: 20 22 43 4b 41 5f 50 55 42 4c 49 43 5f 45 58 50 "CKA_PUBLIC_EXP
0640: 4f 4e 45 4e 54 22 3b 0a 09 09 63 61 73 65 20 30 ONENT";...case 0
0650: 78 30 30 30 30 30 31 32 33 3a 20 72 65 74 75 72 x00000123: retur
0660: 6e 20 22 43 4b 41 5f 50 52 49 56 41 54 45 5f 45 n "CKA_PRIVATE_E
0670: 58 50 4f 4e 45 4e 54 22 3b 0a 09 09 63 61 73 65 XPONENT";...case
0680: 20 30 78 30 30 30 30 30 31 32 34 3a 20 72 65 74 0x00000124: ret
0690: 75 72 6e 20 22 43 4b 41 5f 50 52 49 4d 45 5f 31 urn "CKA_PRIME_1
06a0: 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 ";...case 0x0000
06b0: 30 31 32 35 3a 20 72 65 74 75 72 6e 20 22 43 4b 0125: return "CK
06c0: 41 5f 50 52 49 4d 45 5f 32 22 3b 0a 09 09 63 61 A_PRIME_2";...ca
06d0: 73 65 20 30 78 30 30 30 30 30 31 32 36 3a 20 72 se 0x00000126: r
06e0: 65 74 75 72 6e 20 22 43 4b 41 5f 45 58 50 4f 4e eturn "CKA_EXPON
06f0: 45 4e 54 5f 31 22 3b 0a 09 09 63 61 73 65 20 30 ENT_1";...case 0
0700: 78 30 30 30 30 30 31 32 37 3a 20 72 65 74 75 72 x00000127: retur
0710: 6e 20 22 43 4b 41 5f 45 58 50 4f 4e 45 4e 54 5f n "CKA_EXPONENT_
0720: 32 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 2";...case 0x000
0730: 30 30 31 32 38 3a 20 72 65 74 75 72 6e 20 22 43 00128: return "C
0740: 4b 41 5f 43 4f 45 46 46 49 43 49 45 4e 54 22 3b KA_COEFFICIENT";
0750: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31 ...case 0x000001
0760: 33 30 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 30: return "CKA_
0770: 50 52 49 4d 45 22 3b 0a 09 09 63 61 73 65 20 30 PRIME";...case 0
0780: 78 30 30 30 30 30 31 33 31 3a 20 72 65 74 75 72 x00000131: retur
0790: 6e 20 22 43 4b 41 5f 53 55 42 50 52 49 4d 45 22 n "CKA_SUBPRIME"
07a0: 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 ;...case 0x00000
07b0: 31 33 32 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 132: return "CKA
07c0: 5f 42 41 53 45 22 3b 0a 09 09 63 61 73 65 20 30 _BASE";...case 0
07d0: 78 30 30 30 30 30 31 33 33 3a 20 72 65 74 75 72 x00000133: retur
07e0: 6e 20 22 43 4b 41 5f 50 52 49 4d 45 5f 42 49 54 n "CKA_PRIME_BIT
07f0: 53 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 S";...case 0x000
0800: 30 30 31 33 34 3a 20 72 65 74 75 72 6e 20 22 43 00134: return "C
0810: 4b 41 5f 53 55 42 5f 50 52 49 4d 45 5f 42 49 54 KA_SUB_PRIME_BIT
0820: 53 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 S";...case 0x000
0830: 30 30 31 36 30 3a 20 72 65 74 75 72 6e 20 22 43 00160: return "C
0840: 4b 41 5f 56 41 4c 55 45 5f 42 49 54 53 22 3b 0a KA_VALUE_BITS";.
0850: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31 36 ..case 0x0000016
0860: 31 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 56 1: return "CKA_V
0870: 41 4c 55 45 5f 4c 45 4e 22 3b 0a 09 09 63 61 73 ALUE_LEN";...cas
0880: 65 20 30 78 30 30 30 30 30 31 36 32 3a 20 72 65 e 0x00000162: re
0890: 74 75 72 6e 20 22 43 4b 41 5f 45 58 54 52 41 43 turn "CKA_EXTRAC
08a0: 54 41 42 4c 45 22 3b 0a 09 09 63 61 73 65 20 30 TABLE";...case 0
08b0: 78 30 30 30 30 30 31 36 33 3a 20 72 65 74 75 72 x00000163: retur
08c0: 6e 20 22 43 4b 41 5f 4c 4f 43 41 4c 22 3b 0a 09 n "CKA_LOCAL";..
08d0: 09 63 61 73 65 20 30 78 30 30 30 30 30 31 36 34 .case 0x00000164
08e0: 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 4e 45 : return "CKA_NE
08f0: 56 45 52 5f 45 58 54 52 41 43 54 41 42 4c 45 22 VER_EXTRACTABLE"
0900: 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 ;...case 0x00000
0910: 31 36 35 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 165: return "CKA
0920: 5f 41 4c 57 41 59 53 5f 53 45 4e 53 49 54 49 56 _ALWAYS_SENSITIV
0930: 45 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 E";...case 0x000
0940: 30 30 31 36 36 3a 20 72 65 74 75 72 6e 20 22 43 00166: return "C
0950: 4b 41 5f 4b 45 59 5f 47 45 4e 5f 4d 45 43 48 41 KA_KEY_GEN_MECHA
0960: 4e 49 53 4d 22 3b 0a 09 09 63 61 73 65 20 30 78 NISM";...case 0x
0970: 30 30 30 30 30 31 37 30 3a 20 72 65 74 75 72 6e 00000170: return
0980: 20 22 43 4b 41 5f 4d 4f 44 49 46 49 41 42 4c 45 "CKA_MODIFIABLE
0990: 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 ";...case 0x0000
09a0: 30 31 38 30 3a 20 72 65 74 75 72 6e 20 22 43 4b 0180: return "CK
09b0: 41 5f 45 43 5f 50 41 52 41 4d 53 22 3b 0a 09 09 A_EC_PARAMS";...
09c0: 63 61 73 65 20 30 78 30 30 30 30 30 31 38 31 3a case 0x00000181:
09d0: 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 45 43 5f return "CKA_EC_
09e0: 50 4f 49 4e 54 22 3b 0a 09 09 63 61 73 65 20 30 POINT";...case 0
09f0: 78 30 30 30 30 30 32 30 30 3a 20 72 65 74 75 72 x00000200: retur
0a00: 6e 20 22 43 4b 41 5f 53 45 43 4f 4e 44 41 52 59 n "CKA_SECONDARY
0a10: 5f 41 55 54 48 22 3b 0a 09 09 63 61 73 65 20 30 _AUTH";...case 0
0a20: 78 30 30 30 30 30 32 30 31 3a 20 72 65 74 75 72 x00000201: retur
0a30: 6e 20 22 43 4b 41 5f 41 55 54 48 5f 50 49 4e 5f n "CKA_AUTH_PIN_
0a40: 46 4c 41 47 53 22 3b 0a 09 09 63 61 73 65 20 30 FLAGS";...case 0
0a50: 78 30 30 30 30 30 33 30 30 3a 20 72 65 74 75 72 x00000300: retur
0a60: 6e 20 22 43 4b 41 5f 48 57 5f 46 45 41 54 55 52 n "CKA_HW_FEATUR
0a70: 45 5f 54 59 50 45 22 3b 0a 09 09 63 61 73 65 20 E_TYPE";...case
0a80: 30 78 30 30 30 30 30 33 30 31 3a 20 72 65 74 75 0x00000301: retu
0a90: 72 6e 20 22 43 4b 41 5f 52 45 53 45 54 5f 4f 4e rn "CKA_RESET_ON
0aa0: 5f 49 4e 49 54 22 3b 0a 09 09 63 61 73 65 20 30 _INIT";...case 0
0ab0: 78 30 30 30 30 30 33 30 32 3a 20 72 65 74 75 72 x00000302: retur
0ac0: 6e 20 22 43 4b 41 5f 48 41 53 5f 52 45 53 45 54 n "CKA_HAS_RESET
0ad0: 22 3b 0a 09 09 63 61 73 65 20 30 78 63 65 35 33 ";...case 0xce53
0ae0: 36 33 62 34 3a 20 72 65 74 75 72 6e 20 22 43 4b 63b4: return "CK
0af0: 41 5f 43 45 52 54 5f 53 48 41 31 5f 48 41 53 48 A_CERT_SHA1_HASH
0b00: 22 3b 0a 09 09 63 61 73 65 20 30 78 63 65 35 33 ";...case 0xce53
0b10: 36 33 62 35 3a 20 72 65 74 75 72 6e 20 22 43 4b 63b5: return "CK
0b20: 41 5f 43 45 52 54 5f 4d 44 35 5f 48 41 53 48 22 A_CERT_MD5_HASH"
0b30: 3b 0a 09 7d 0a 0a 09 73 6e 70 72 69 6e 74 66 28 ;..}...snprintf(
0b40: 72 65 74 62 75 66 2c 20 73 69 7a 65 6f 66 28 72 retbuf, sizeof(r
0b50: 65 74 62 75 66 29 2c 20 22 30 78 25 30 38 6c 78 etbuf), "0x%08lx
0b60: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon
0b70: 67 29 20 61 74 74 72 69 62 29 3b 0a 09 72 65 74 g) attrib);..ret
0b80: 62 75 66 5b 73 69 7a 65 6f 66 28 72 65 74 62 75 buf[sizeof(retbu
0b90: 66 29 20 2d 20 31 5d 20 3d 20 27 5c 30 27 3b 0a f) - 1] = '\0';.
0ba0: 0a 09 72 65 74 75 72 6e 28 72 65 74 62 75 66 29 ..return(retbuf)
0bb0: 3b 0a 7d 0a 0a 69 6e 74 20 6d 61 69 6e 5f 70 6b ;.}..int main_pk
0bc0: 63 73 31 31 28 76 6f 69 64 29 20 7b 0a 09 43 4b cs11(void) {..CK
0bd0: 5f 46 55 4e 43 54 49 4f 4e 5f 4c 49 53 54 5f 50 _FUNCTION_LIST_P
0be0: 54 52 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 TR pFunctionList
0bf0: 3b 0a 09 43 4b 5f 52 56 20 28 2a 43 5f 43 6c 6f ;..CK_RV (*C_Clo
0c00: 73 65 53 65 73 73 69 6f 6e 29 28 43 4b 5f 53 45 seSession)(CK_SE
0c10: 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe
0c20: 73 73 69 6f 6e 29 20 3d 20 4e 55 4c 4c 3b 0a 09 ssion) = NULL;..
0c30: 43 4b 5f 52 56 20 28 2a 43 5f 44 65 63 72 79 70 CK_RV (*C_Decryp
0c40: 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 t)(CK_SESSION_HA
0c50: 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C
0c60: 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 K_BYTE_PTR pEncr
0c70: 79 70 74 65 64 44 61 74 61 2c 20 43 4b 5f 55 4c yptedData, CK_UL
0c80: 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64 44 ONG ulEncryptedD
0c90: 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f ataLen, CK_BYTE_
0ca0: 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c PTR pData, CK_UL
0cb0: 4f 4e 47 5f 50 54 52 20 70 75 6c 44 61 74 61 4c ONG_PTR pulDataL
0cc0: 65 6e 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f en) = NULL;..CK_
0cd0: 52 56 20 28 2a 43 5f 44 65 63 72 79 70 74 49 6e RV (*C_DecryptIn
0ce0: 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 it)(CK_SESSION_H
0cf0: 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession,
0d00: 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 CK_MECHANISM_PTR
0d10: 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f pMechanism, CK_
0d20: 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b OBJECT_HANDLE hK
0d30: 65 79 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f ey) = NULL;..CK_
0d40: 52 56 20 28 2a 43 5f 45 6e 63 72 79 70 74 29 28 RV (*C_Encrypt)(
0d50: 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c CK_SESSION_HANDL
0d60: 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 E hSession, CK_B
0d70: 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 YTE_PTR pData, C
0d80: 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 K_ULONG ulDataLe
0d90: 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 n, CK_BYTE_PTR p
0da0: 45 6e 63 72 79 70 74 65 64 44 61 74 61 2c 20 43 EncryptedData, C
0db0: 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 45 K_ULONG_PTR pulE
0dc0: 6e 63 72 79 70 74 65 64 44 61 74 61 4c 65 6e 29 ncryptedDataLen)
0dd0: 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 = NULL;..CK_RV
0de0: 28 2a 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 29 (*C_EncryptInit)
0df0: 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 (CK_SESSION_HAND
0e00: 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f LE hSession, CK_
0e10: 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d MECHANISM_PTR pM
0e20: 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a echanism, CK_OBJ
0e30: 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 ECT_HANDLE hKey)
0e40: 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 = NULL;..CK_RV
0e50: 28 2a 43 5f 46 69 6e 61 6c 69 7a 65 29 28 43 4b (*C_Finalize)(CK
0e60: 5f 56 4f 49 44 5f 50 54 52 20 70 52 65 73 65 72 _VOID_PTR pReser
0e70: 76 65 64 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b ved) = NULL;..CK
0e80: 5f 52 56 20 28 2a 43 5f 46 69 6e 64 4f 62 6a 65 _RV (*C_FindObje
0e90: 63 74 73 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f cts)(CK_SESSION_
0ea0: 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession,
0eb0: 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c CK_OBJECT_HANDL
0ec0: 45 5f 50 54 52 20 70 68 4f 62 6a 65 63 74 2c 20 E_PTR phObject,
0ed0: 43 4b 5f 55 4c 4f 4e 47 20 75 6c 4d 61 78 4f 62 CK_ULONG ulMaxOb
0ee0: 6a 65 63 74 43 6f 75 6e 74 2c 20 43 4b 5f 55 4c jectCount, CK_UL
0ef0: 4f 4e 47 5f 50 54 52 20 70 75 6c 4f 62 6a 65 63 ONG_PTR pulObjec
0f00: 74 43 6f 75 6e 74 29 20 3d 20 4e 55 4c 4c 3b 0a tCount) = NULL;.
0f10: 09 43 4b 5f 52 56 20 28 2a 43 5f 46 69 6e 64 4f .CK_RV (*C_FindO
0f20: 62 6a 65 63 74 73 46 69 6e 61 6c 29 28 43 4b 5f bjectsFinal)(CK_
0f30: 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h
0f40: 53 65 73 73 69 6f 6e 29 20 3d 20 4e 55 4c 4c 3b Session) = NULL;
0f50: 0a 09 43 4b 5f 52 56 20 28 2a 43 5f 46 69 6e 64 ..CK_RV (*C_Find
0f60: 4f 62 6a 65 63 74 73 49 6e 69 74 29 28 43 4b 5f ObjectsInit)(CK_
0f70: 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h
0f80: 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 41 54 54 52 Session, CK_ATTR
0f90: 49 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c IBUTE_PTR pTempl
0fa0: 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c ate, CK_ULONG ul
0fb0: 43 6f 75 6e 74 29 20 3d 20 4e 55 4c 4c 3b 0a 09 Count) = NULL;..
0fc0: 43 4b 5f 52 56 20 28 2a 43 5f 47 65 74 41 74 74 CK_RV (*C_GetAtt
0fd0: 72 69 62 75 74 65 56 61 6c 75 65 29 28 43 4b 5f ributeValue)(CK_
0fe0: 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 SESSION_HANDLE h
0ff0: 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 Session, CK_OBJE
1000: 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 CT_HANDLE hObjec
1010: 74 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f t, CK_ATTRIBUTE_
1020: 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 PTR pTemplate, C
1030: 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 29 K_ULONG ulCount)
1040: 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 = NULL;..CK_RV
1050: 28 2a 43 5f 47 65 74 49 6e 66 6f 29 28 43 4b 5f (*C_GetInfo)(CK_
1060: 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 INFO_PTR pInfo)
1070: 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28 = NULL;..CK_RV (
1080: 2a 43 5f 47 65 74 53 65 73 73 69 6f 6e 49 6e 66 *C_GetSessionInf
1090: 6f 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 o)(CK_SESSION_HA
10a0: 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C
10b0: 4b 5f 53 45 53 53 49 4f 4e 5f 49 4e 46 4f 5f 50 K_SESSION_INFO_P
10c0: 54 52 20 70 49 6e 66 6f 29 20 3d 20 4e 55 4c 4c TR pInfo) = NULL
10d0: 3b 0a 09 43 4b 5f 52 56 20 28 2a 43 5f 47 65 74 ;..CK_RV (*C_Get
10e0: 53 6c 6f 74 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f SlotInfo)(CK_SLO
10f0: 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f T_ID slotID, CK_
1100: 53 4c 4f 54 5f 49 4e 46 4f 5f 50 54 52 20 70 49 SLOT_INFO_PTR pI
1110: 6e 66 6f 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b nfo) = NULL;..CK
1120: 5f 52 56 20 28 2a 43 5f 47 65 74 53 6c 6f 74 4c _RV (*C_GetSlotL
1130: 69 73 74 29 28 43 4b 5f 42 42 4f 4f 4c 20 74 6f ist)(CK_BBOOL to
1140: 6b 65 6e 50 72 65 73 65 6e 74 2c 20 43 4b 5f 53 kenPresent, CK_S
1150: 4c 4f 54 5f 49 44 5f 50 54 52 20 70 53 6c 6f 74 LOT_ID_PTR pSlot
1160: 4c 69 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 List, CK_ULONG_P
1170: 54 52 20 70 75 6c 43 6f 75 6e 74 29 20 3d 20 4e TR pulCount) = N
1180: 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28 2a 43 5f ULL;..CK_RV (*C_
1190: 47 65 74 54 6f 6b 65 6e 49 6e 66 6f 29 28 43 4b GetTokenInfo)(CK
11a0: 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c _SLOT_ID slotID,
11b0: 20 43 4b 5f 54 4f 4b 45 4e 5f 49 4e 46 4f 5f 50 CK_TOKEN_INFO_P
11c0: 54 52 20 70 49 6e 66 6f 29 20 3d 20 4e 55 4c 4c TR pInfo) = NULL
11d0: 3b 0a 09 43 4b 5f 52 56 20 28 2a 43 5f 49 6e 69 ;..CK_RV (*C_Ini
11e0: 74 69 61 6c 69 7a 65 29 28 43 4b 5f 56 4f 49 44 tialize)(CK_VOID
11f0: 5f 50 54 52 20 70 49 6e 69 74 41 72 67 73 29 20 _PTR pInitArgs)
1200: 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28 = NULL;..CK_RV (
1210: 2a 43 5f 4c 6f 67 69 6e 29 28 43 4b 5f 53 45 53 *C_Login)(CK_SES
1220: 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes
1230: 73 69 6f 6e 2c 20 43 4b 5f 55 53 45 52 5f 54 59 sion, CK_USER_TY
1240: 50 45 20 75 73 65 72 54 79 70 65 2c 20 43 4b 5f PE userType, CK_
1250: 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 50 69 UTF8CHAR_PTR pPi
1260: 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 69 n, CK_ULONG ulPi
1270: 6e 4c 65 6e 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 nLen) = NULL;..C
1280: 4b 5f 52 56 20 28 2a 43 5f 4f 70 65 6e 53 65 73 K_RV (*C_OpenSes
1290: 73 69 6f 6e 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 sion)(CK_SLOT_ID
12a0: 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 46 4c 41 47 slotID, CK_FLAG
12b0: 53 20 66 6c 61 67 73 2c 20 43 4b 5f 56 4f 49 44 S flags, CK_VOID
12c0: 5f 50 54 52 20 70 41 70 70 6c 69 63 61 74 69 6f _PTR pApplicatio
12d0: 6e 2c 20 43 4b 5f 4e 4f 54 49 46 59 20 6e 6f 74 n, CK_NOTIFY not
12e0: 69 66 79 2c 20 43 4b 5f 53 45 53 53 49 4f 4e 5f ify, CK_SESSION_
12f0: 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 53 65 73 HANDLE_PTR phSes
1300: 73 69 6f 6e 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 sion) = NULL;..C
1310: 4b 5f 52 56 20 28 2a 43 5f 53 69 67 6e 29 28 43 K_RV (*C_Sign)(C
1320: 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE
1330: 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 hSession, CK_BY
1340: 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b TE_PTR pData, CK
1350: 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e _ULONG ulDataLen
1360: 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 , CK_BYTE_PTR pS
1370: 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f ignature, CK_ULO
1380: 4e 47 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 74 NG_PTR pulSignat
1390: 75 72 65 4c 65 6e 29 20 3d 20 4e 55 4c 4c 3b 0a ureLen) = NULL;.
13a0: 09 43 4b 5f 52 56 20 28 2a 43 5f 53 69 67 6e 49 .CK_RV (*C_SignI
13b0: 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f nit)(CK_SESSION_
13c0: 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c HANDLE hSession,
13d0: 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 CK_MECHANISM_PT
13e0: 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b R pMechanism, CK
13f0: 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 _OBJECT_HANDLE h
1400: 4b 65 79 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b Key) = NULL;..CK
1410: 5f 43 5f 49 4e 49 54 49 41 4c 49 5a 45 5f 41 52 _C_INITIALIZE_AR
1420: 47 53 20 69 6e 69 74 61 72 67 73 3b 0a 09 43 4b GS initargs;..CK
1430: 5f 49 4e 46 4f 20 63 6c 69 65 6e 74 69 6e 66 6f _INFO clientinfo
1440: 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 6e 75 6d 53 ;..CK_ULONG numS
1450: 6c 6f 74 73 2c 20 63 75 72 72 53 6c 6f 74 3b 0a lots, currSlot;.
1460: 09 43 4b 5f 53 4c 4f 54 5f 49 44 5f 50 54 52 20 .CK_SLOT_ID_PTR
1470: 73 6c 6f 74 73 3b 0a 09 43 4b 5f 53 4c 4f 54 5f slots;..CK_SLOT_
1480: 49 4e 46 4f 20 73 6c 6f 74 49 6e 66 6f 3b 0a 09 INFO slotInfo;..
1490: 43 4b 5f 54 4f 4b 45 4e 5f 49 4e 46 4f 20 74 6f CK_TOKEN_INFO to
14a0: 6b 65 6e 49 6e 66 6f 3b 0a 09 43 4b 5f 53 45 53 kenInfo;..CK_SES
14b0: 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 SION_HANDLE hSes
14c0: 73 69 6f 6e 3b 0a 09 43 4b 5f 53 45 53 53 49 4f sion;..CK_SESSIO
14d0: 4e 5f 49 4e 46 4f 20 73 65 73 73 69 6f 6e 49 6e N_INFO sessionIn
14e0: 66 6f 3b 0a 09 43 4b 5f 4f 42 4a 45 43 54 5f 48 fo;..CK_OBJECT_H
14f0: 41 4e 44 4c 45 20 68 4f 62 6a 65 63 74 2c 20 2a ANDLE hObject, *
1500: 70 72 69 76 61 74 65 4b 65 79 4f 62 6a 65 63 74 privateKeyObject
1510: 73 5f 72 6f 6f 74 2c 20 2a 70 72 69 76 61 74 65 s_root, *private
1520: 4b 65 79 4f 62 6a 65 63 74 73 2c 20 2a 63 75 72 KeyObjects, *cur
1530: 72 50 72 69 76 4b 65 79 3b 0a 09 43 4b 5f 55 4c rPrivKey;..CK_UL
1540: 4f 4e 47 20 75 6c 4f 62 6a 65 63 74 43 6f 75 6e ONG ulObjectCoun
1550: 74 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 t;..CK_ATTRIBUTE
1560: 20 74 65 6d 70 6c 61 74 65 5b 5d 20 3d 20 7b 0a template[] = {.
1570: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1580: 20 20 20 20 20 20 20 20 20 20 20 20 7b 43 4b 41 {CKA
1590: 5f 43 4c 41 53 53 2c 20 4e 55 4c 4c 2c 20 30 7d _CLASS, NULL, 0}
15a0: 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 43 {C
15c0: 4b 41 5f 54 4f 4b 45 4e 2c 20 4e 55 4c 4c 2c 20 KA_TOKEN, NULL,
15d0: 30 7d 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 0},..
15e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15f0: 7b 43 4b 41 5f 4c 41 42 45 4c 2c 20 4e 55 4c 4c {CKA_LABEL, NULL
1600: 2c 20 30 7d 2c 0a 09 20 20 20 20 20 20 20 20 20 , 0},..
1610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1620: 20 20 7b 43 4b 41 5f 50 52 49 56 41 54 45 2c 20 {CKA_PRIVATE,
1630: 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 20 20 20 NULL, 0},..
1640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1650: 20 20 20 20 20 20 7b 43 4b 41 5f 49 44 2c 20 4e {CKA_ID, N
1660: 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 20 20 20 20 ULL, 0},..
1670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1680: 20 20 20 20 20 7b 43 4b 41 5f 53 45 52 49 41 4c {CKA_SERIAL
1690: 5f 4e 55 4d 42 45 52 2c 20 4e 55 4c 4c 2c 20 30 _NUMBER, NULL, 0
16a0: 7d 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 },..
16b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
16c0: 43 4b 41 5f 53 55 42 4a 45 43 54 2c 20 4e 55 4c CKA_SUBJECT, NUL
16d0: 4c 2c 20 30 7d 2c 0a 09 20 20 20 20 20 20 20 20 L, 0},..
16e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16f0: 20 20 20 7b 43 4b 41 5f 49 53 53 55 45 52 2c 20 {CKA_ISSUER,
1700: 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 20 20 20 NULL, 0},..
1710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1720: 20 20 20 20 20 20 7b 43 4b 41 5f 43 45 52 54 49 {CKA_CERTI
1730: 46 49 43 41 54 45 5f 54 59 50 45 2c 20 4e 55 4c FICATE_TYPE, NUL
1740: 4c 2c 20 30 7d 2c 0a 09 20 20 20 20 20 20 20 20 L, 0},..
1750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1760: 20 20 20 7b 43 4b 41 5f 4b 45 59 5f 54 59 50 45 {CKA_KEY_TYPE
1770: 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 20 , NULL, 0},..
1780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1790: 20 20 20 20 20 20 20 20 7b 43 4b 41 5f 53 49 47 {CKA_SIG
17a0: 4e 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 N, NULL, 0},..
17b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17c0: 20 20 20 20 20 20 20 20 20 7b 43 4b 41 5f 56 41 {CKA_VA
17d0: 4c 55 45 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 LUE, NULL, 0},..
17e0: 09 09 09 20 20 20 7b 43 4b 41 5f 43 45 52 54 5f ... {CKA_CERT_
17f0: 4d 44 35 5f 48 41 53 48 2c 20 4e 55 4c 4c 2c 20 MD5_HASH, NULL,
1800: 30 7d 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 5f 0},..... {CKA_
1810: 43 45 52 54 5f 53 48 41 31 5f 48 41 53 48 2c 20 CERT_SHA1_HASH,
1820: 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 09 09 09 20 20 NULL, 0},.....
1830: 20 7b 43 4b 41 5f 54 52 55 53 54 45 44 2c 20 4e {CKA_TRUSTED, N
1840: 55 4c 4c 2c 20 30 7d 2c 0a 09 09 09 09 20 20 20 ULL, 0},.....
1850: 7b 43 4b 41 5f 54 52 55 53 54 5f 43 4c 49 45 4e {CKA_TRUST_CLIEN
1860: 54 5f 41 55 54 48 2c 20 4e 55 4c 4c 2c 20 30 7d T_AUTH, NULL, 0}
1870: 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 5f 54 52 ,..... {CKA_TR
1880: 55 53 54 5f 43 4f 44 45 5f 53 49 47 4e 49 4e 47 UST_CODE_SIGNING
1890: 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 09 09 09 , NULL, 0},.....
18a0: 20 20 20 7b 43 4b 41 5f 54 52 55 53 54 5f 43 52 {CKA_TRUST_CR
18b0: 4c 5f 53 49 47 4e 2c 20 4e 55 4c 4c 2c 20 30 7d L_SIGN, NULL, 0}
18c0: 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 5f 54 52 ,..... {CKA_TR
18d0: 55 53 54 5f 44 41 54 41 5f 45 4e 43 49 50 48 45 UST_DATA_ENCIPHE
18e0: 52 4d 45 4e 54 2c 20 4e 55 4c 4c 2c 20 30 7d 2c RMENT, NULL, 0},
18f0: 0a 09 09 09 09 20 20 20 7b 43 4b 41 5f 54 52 55 ..... {CKA_TRU
1900: 53 54 5f 44 49 47 49 54 41 4c 5f 53 49 47 4e 41 ST_DIGITAL_SIGNA
1910: 54 55 52 45 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a TURE, NULL, 0},.
1920: 09 09 09 09 20 20 20 7b 43 4b 41 5f 54 52 55 53 .... {CKA_TRUS
1930: 54 5f 45 4d 41 49 4c 5f 50 52 4f 54 45 43 54 49 T_EMAIL_PROTECTI
1940: 4f 4e 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 09 ON, NULL, 0},...
1950: 09 09 20 20 20 7b 43 4b 41 5f 54 52 55 53 54 5f .. {CKA_TRUST_
1960: 4b 45 59 5f 41 47 52 45 45 4d 45 4e 54 2c 20 4e KEY_AGREEMENT, N
1970: 55 4c 4c 2c 20 30 7d 2c 0a 09 09 09 09 20 20 20 ULL, 0},.....
1980: 7b 43 4b 41 5f 54 52 55 53 54 5f 4b 45 59 5f 43 {CKA_TRUST_KEY_C
1990: 45 52 54 5f 53 49 47 4e 2c 20 4e 55 4c 4c 2c 20 ERT_SIGN, NULL,
19a0: 30 7d 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 5f 0},..... {CKA_
19b0: 54 52 55 53 54 5f 4b 45 59 5f 45 4e 43 49 50 48 TRUST_KEY_ENCIPH
19c0: 45 52 4d 45 4e 54 2c 20 4e 55 4c 4c 2c 20 30 7d ERMENT, NULL, 0}
19d0: 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 5f 54 52 ,..... {CKA_TR
19e0: 55 53 54 5f 4e 4f 4e 5f 52 45 50 55 44 49 41 54 UST_NON_REPUDIAT
19f0: 49 4f 4e 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 ION, NULL, 0},..
1a00: 09 09 09 20 20 20 7b 43 4b 41 5f 54 52 55 53 54 ... {CKA_TRUST
1a10: 5f 53 45 52 56 45 52 5f 41 55 54 48 2c 20 4e 55 _SERVER_AUTH, NU
1a20: 4c 4c 2c 20 30 7d 0a 09 20 20 20 20 20 20 20 20 LL, 0}..
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a40: 20 20 7d 2c 20 2a 63 75 72 72 5f 61 74 74 72 3b }, *curr_attr;
1a50: 0a 09 43 4b 5f 55 4c 4f 4e 47 20 63 75 72 72 5f ..CK_ULONG curr_
1a60: 61 74 74 72 5f 69 64 78 3b 0a 09 43 4b 5f 55 4c attr_idx;..CK_UL
1a70: 4f 4e 47 20 62 79 74 65 5f 69 64 78 3b 0a 09 43 ONG byte_idx;..C
1a80: 4b 5f 55 54 46 38 43 48 41 52 20 75 73 65 72 5f K_UTF8CHAR user_
1a90: 70 69 6e 5b 31 30 32 34 5d 2c 20 2a 70 75 63 56 pin[1024], *pucV
1aa0: 61 6c 75 65 3b 0a 09 43 4b 5f 4f 42 4a 45 43 54 alue;..CK_OBJECT
1ab0: 5f 43 4c 41 53 53 20 6f 62 6a 65 63 74 43 6c 61 _CLASS objectCla
1ac0: 73 73 3b 0a 09 43 4b 5f 42 59 54 45 20 73 69 67 ss;..CK_BYTE sig
1ad0: 6e 61 74 75 72 65 5b 31 30 32 34 5d 2c 20 65 6e nature[1024], en
1ae0: 63 72 79 70 74 65 64 5f 62 75 66 5b 31 36 33 38 crypted_buf[1638
1af0: 34 5d 2c 20 64 65 63 72 79 70 74 65 64 5f 62 75 4], decrypted_bu
1b00: 66 5b 31 36 33 38 34 5d 3b 0a 09 43 4b 5f 55 4c f[16384];..CK_UL
1b10: 4f 4e 47 20 73 69 67 6e 61 74 75 72 65 5f 6c 65 ONG signature_le
1b20: 6e 2c 20 65 6e 63 72 79 70 74 65 64 5f 62 75 66 n, encrypted_buf
1b30: 6c 65 6e 2c 20 64 65 63 72 79 70 74 65 64 5f 62 len, decrypted_b
1b40: 75 66 6c 65 6e 3b 0a 09 43 4b 5f 4d 45 43 48 41 uflen;..CK_MECHA
1b50: 4e 49 53 4d 20 6d 65 63 68 61 6e 69 73 6d 20 3d NISM mechanism =
1b60: 20 7b 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 2c 20 {CKM_RSA_PKCS,
1b70: 4e 55 4c 4c 2c 20 30 7d 3b 0a 09 43 4b 5f 52 56 NULL, 0};..CK_RV
1b80: 20 63 68 6b 5f 72 76 3b 0a 09 63 68 61 72 20 2a chk_rv;..char *
1b90: 66 67 65 74 73 5f 72 65 74 3b 0a 09 69 6e 74 20 fgets_ret;..int
1ba0: 69 3b 0a 0a 09 63 68 6b 5f 72 76 20 3d 20 43 5f i;...chk_rv = C_
1bb0: 47 65 74 46 75 6e 63 74 69 6f 6e 4c 69 73 74 28 GetFunctionList(
1bc0: 26 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 29 3b &pFunctionList);
1bd0: 0a 09 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 ..if (chk_rv !=
1be0: 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 70 72 69 6e CKR_OK) {...prin
1bf0: 74 66 28 22 43 5f 47 65 74 46 75 6e 63 74 69 6f tf("C_GetFunctio
1c00: 6e 4c 69 73 74 28 29 20 66 61 69 6c 65 64 2e 22 nList() failed."
1c10: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 31 29 3b );....return(1);
1c20: 0a 09 7d 0a 0a 09 43 5f 43 6c 6f 73 65 53 65 73 ..}...C_CloseSes
1c30: 73 69 6f 6e 20 3d 20 70 46 75 6e 63 74 69 6f 6e sion = pFunction
1c40: 4c 69 73 74 2d 3e 43 5f 43 6c 6f 73 65 53 65 73 List->C_CloseSes
1c50: 73 69 6f 6e 3b 0a 09 43 5f 44 65 63 72 79 70 74 sion;..C_Decrypt
1c60: 20 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 = pFunctionList
1c70: 2d 3e 43 5f 44 65 63 72 79 70 74 3b 0a 09 43 5f ->C_Decrypt;..C_
1c80: 44 65 63 72 79 70 74 49 6e 69 74 20 3d 20 70 46 DecryptInit = pF
1c90: 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 unctionList->C_D
1ca0: 65 63 72 79 70 74 49 6e 69 74 3b 0a 09 43 5f 45 ecryptInit;..C_E
1cb0: 6e 63 72 79 70 74 20 3d 20 70 46 75 6e 63 74 69 ncrypt = pFuncti
1cc0: 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 72 79 70 onList->C_Encryp
1cd0: 74 3b 0a 09 43 5f 45 6e 63 72 79 70 74 49 6e 69 t;..C_EncryptIni
1ce0: 74 20 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t = pFunctionLis
1cf0: 74 2d 3e 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 t->C_EncryptInit
1d00: 3b 0a 09 43 5f 46 69 6e 61 6c 69 7a 65 20 3d 20 ;..C_Finalize =
1d10: 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C
1d20: 5f 46 69 6e 61 6c 69 7a 65 3b 0a 09 43 5f 46 69 _Finalize;..C_Fi
1d30: 6e 64 4f 62 6a 65 63 74 73 20 3d 20 70 46 75 6e ndObjects = pFun
1d40: 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e ctionList->C_Fin
1d50: 64 4f 62 6a 65 63 74 73 3b 0a 09 43 5f 46 69 6e dObjects;..C_Fin
1d60: 64 4f 62 6a 65 63 74 73 46 69 6e 61 6c 20 3d 20 dObjectsFinal =
1d70: 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C
1d80: 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 69 6e 61 _FindObjectsFina
1d90: 6c 3b 0a 09 43 5f 46 69 6e 64 4f 62 6a 65 63 74 l;..C_FindObject
1da0: 73 49 6e 69 74 20 3d 20 70 46 75 6e 63 74 69 6f sInit = pFunctio
1db0: 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a nList->C_FindObj
1dc0: 65 63 74 73 49 6e 69 74 3b 0a 09 43 5f 47 65 74 ectsInit;..C_Get
1dd0: 41 74 74 72 69 62 75 74 65 56 61 6c 75 65 20 3d AttributeValue =
1de0: 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e pFunctionList->
1df0: 43 5f 47 65 74 41 74 74 72 69 62 75 74 65 56 61 C_GetAttributeVa
1e00: 6c 75 65 3b 0a 09 43 5f 47 65 74 49 6e 66 6f 20 lue;..C_GetInfo
1e10: 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d = pFunctionList-
1e20: 3e 43 5f 47 65 74 49 6e 66 6f 3b 0a 09 43 5f 47 >C_GetInfo;..C_G
1e30: 65 74 53 65 73 73 69 6f 6e 49 6e 66 6f 20 3d 20 etSessionInfo =
1e40: 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C
1e50: 5f 47 65 74 53 65 73 73 69 6f 6e 49 6e 66 6f 3b _GetSessionInfo;
1e60: 0a 09 43 5f 47 65 74 53 6c 6f 74 49 6e 66 6f 20 ..C_GetSlotInfo
1e70: 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d = pFunctionList-
1e80: 3e 43 5f 47 65 74 53 6c 6f 74 49 6e 66 6f 3b 0a >C_GetSlotInfo;.
1e90: 09 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 20 3d .C_GetSlotList =
1ea0: 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e pFunctionList->
1eb0: 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 3b 0a 09 C_GetSlotList;..
1ec0: 43 5f 47 65 74 54 6f 6b 65 6e 49 6e 66 6f 20 3d C_GetTokenInfo =
1ed0: 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e pFunctionList->
1ee0: 43 5f 47 65 74 54 6f 6b 65 6e 49 6e 66 6f 3b 0a C_GetTokenInfo;.
1ef0: 09 43 5f 49 6e 69 74 69 61 6c 69 7a 65 20 3d 20 .C_Initialize =
1f00: 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 pFunctionList->C
1f10: 5f 49 6e 69 74 69 61 6c 69 7a 65 3b 0a 09 43 5f _Initialize;..C_
1f20: 4c 6f 67 69 6e 20 3d 20 70 46 75 6e 63 74 69 6f Login = pFunctio
1f30: 6e 4c 69 73 74 2d 3e 43 5f 4c 6f 67 69 6e 3b 0a nList->C_Login;.
1f40: 09 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 20 3d .C_OpenSession =
1f50: 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e pFunctionList->
1f60: 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 3b 0a 09 C_OpenSession;..
1f70: 43 5f 53 69 67 6e 20 3d 20 70 46 75 6e 63 74 69 C_Sign = pFuncti
1f80: 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 3b 0a onList->C_Sign;.
1f90: 09 43 5f 53 69 67 6e 49 6e 69 74 20 3d 20 70 46 .C_SignInit = pF
1fa0: 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 unctionList->C_S
1fb0: 69 67 6e 49 6e 69 74 3b 0a 0a 09 70 72 69 76 61 ignInit;...priva
1fc0: 74 65 4b 65 79 4f 62 6a 65 63 74 73 20 3d 20 6d teKeyObjects = m
1fd0: 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 70 72 alloc(sizeof(*pr
1fe0: 69 76 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 29 ivateKeyObjects)
1ff0: 20 2a 20 31 30 32 34 29 3b 0a 09 70 72 69 76 61 * 1024);..priva
2000: 74 65 4b 65 79 4f 62 6a 65 63 74 73 5f 72 6f 6f teKeyObjects_roo
2010: 74 20 3d 20 70 72 69 76 61 74 65 4b 65 79 4f 62 t = privateKeyOb
2020: 6a 65 63 74 73 3b 0a 09 66 6f 72 20 28 69 20 3d jects;..for (i =
2030: 20 30 3b 20 69 20 3c 20 31 30 32 34 3b 20 69 2b 0; i < 1024; i+
2040: 2b 29 20 7b 0a 09 09 70 72 69 76 61 74 65 4b 65 +) {...privateKe
2050: 79 4f 62 6a 65 63 74 73 5b 69 5d 20 3d 20 43 4b yObjects[i] = CK
2060: 5f 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 3b _INVALID_HANDLE;
2070: 0a 09 7d 0a 0a 09 69 6e 69 74 61 72 67 73 2e 43 ..}...initargs.C
2080: 72 65 61 74 65 4d 75 74 65 78 20 3d 20 4e 55 4c reateMutex = NUL
2090: 4c 3b 0a 09 69 6e 69 74 61 72 67 73 2e 44 65 73 L;..initargs.Des
20a0: 74 72 6f 79 4d 75 74 65 78 20 3d 20 4e 55 4c 4c troyMutex = NULL
20b0: 3b 0a 09 69 6e 69 74 61 72 67 73 2e 4c 6f 63 6b ;..initargs.Lock
20c0: 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 69 Mutex = NULL;..i
20d0: 6e 69 74 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 nitargs.UnlockMu
20e0: 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 69 6e 69 tex = NULL;..ini
20f0: 74 61 72 67 73 2e 66 6c 61 67 73 20 3d 20 43 4b targs.flags = CK
2100: 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 3b F_OS_LOCKING_OK;
2110: 0a 09 69 6e 69 74 61 72 67 73 2e 70 52 65 73 65 ..initargs.pRese
2120: 72 76 65 64 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 63 rved = NULL;...c
2130: 68 6b 5f 72 76 20 3d 20 43 5f 49 6e 69 74 69 61 hk_rv = C_Initia
2140: 6c 69 7a 65 28 26 69 6e 69 74 61 72 67 73 29 3b lize(&initargs);
2150: 0a 09 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 ..if (chk_rv !=
2160: 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 69 6e 69 74 CKR_OK) {...init
2170: 61 72 67 73 2e 43 72 65 61 74 65 4d 75 74 65 78 args.CreateMutex
2180: 20 3d 20 4e 55 4c 4c 3b 0a 09 09 69 6e 69 74 61 = NULL;...inita
2190: 72 67 73 2e 44 65 73 74 72 6f 79 4d 75 74 65 78 rgs.DestroyMutex
21a0: 20 3d 20 4e 55 4c 4c 3b 0a 09 09 69 6e 69 74 61 = NULL;...inita
21b0: 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 20 3d 20 rgs.LockMutex =
21c0: 4e 55 4c 4c 3b 0a 09 09 69 6e 69 74 61 72 67 73 NULL;...initargs
21d0: 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 20 3d 20 4e .UnlockMutex = N
21e0: 55 4c 4c 3b 0a 09 09 69 6e 69 74 61 72 67 73 2e ULL;...initargs.
21f0: 66 6c 61 67 73 20 3d 20 30 3b 0a 09 09 69 6e 69 flags = 0;...ini
2200: 74 61 72 67 73 2e 70 52 65 73 65 72 76 65 64 20 targs.pReserved
2210: 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 63 68 6b 5f 72 = NULL;....chk_r
2220: 76 20 3d 20 43 5f 49 6e 69 74 69 61 6c 69 7a 65 v = C_Initialize
2230: 28 26 69 6e 69 74 61 72 67 73 29 3b 0a 09 09 69 (&initargs);...i
2240: 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 f (chk_rv != CKR
2250: 5f 4f 4b 29 20 7b 0a 09 09 09 70 72 69 6e 74 66 _OK) {....printf
2260: 28 22 43 5f 49 6e 69 74 69 61 6c 69 7a 65 28 29 ("C_Initialize()
2270: 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 09 failed.");.....
2280: 72 65 74 75 72 6e 28 31 29 3b 0a 09 09 7d 0a 09 return(1);...}..
2290: 7d 0a 0a 09 63 68 6b 5f 72 76 20 3d 20 43 5f 47 }...chk_rv = C_G
22a0: 65 74 49 6e 66 6f 28 26 63 6c 69 65 6e 74 69 6e etInfo(&clientin
22b0: 66 6f 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 76 fo);..if (chk_rv
22c0: 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 != CKR_OK) {...
22d0: 72 65 74 75 72 6e 28 31 29 3b 0a 09 7d 0a 0a 09 return(1);..}...
22e0: 70 72 69 6e 74 66 28 22 50 4b 43 53 23 31 31 20 printf("PKCS#11
22f0: 43 6c 69 65 6e 74 20 56 65 72 73 69 6f 6e 3a 20 Client Version:
2300: 25 69 2e 25 69 2c 20 4c 69 62 72 61 72 79 20 56 %i.%i, Library V
2310: 65 72 73 69 6f 6e 20 25 69 2e 25 69 5c 6e 22 2c ersion %i.%i\n",
2320: 20 63 6c 69 65 6e 74 69 6e 66 6f 2e 63 72 79 70 clientinfo.cryp
2330: 74 6f 6b 69 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f tokiVersion.majo
2340: 72 2c 20 63 6c 69 65 6e 74 69 6e 66 6f 2e 63 72 r, clientinfo.cr
2350: 79 70 74 6f 6b 69 56 65 72 73 69 6f 6e 2e 6d 69 yptokiVersion.mi
2360: 6e 6f 72 2c 20 63 6c 69 65 6e 74 69 6e 66 6f 2e nor, clientinfo.
2370: 6c 69 62 72 61 72 79 56 65 72 73 69 6f 6e 2e 6d libraryVersion.m
2380: 61 6a 6f 72 2c 20 63 6c 69 65 6e 74 69 6e 66 6f ajor, clientinfo
2390: 2e 6c 69 62 72 61 72 79 56 65 72 73 69 6f 6e 2e .libraryVersion.
23a0: 6d 69 6e 6f 72 29 3b 0a 09 70 72 69 6e 74 66 28 minor);..printf(
23b0: 22 50 4b 43 53 23 31 31 20 4d 61 6e 75 66 49 44 "PKCS#11 ManufID
23c0: 3a 20 25 2e 2a 73 2c 20 4c 69 62 72 61 72 79 44 : %.*s, LibraryD
23d0: 65 73 63 3a 20 25 2e 2a 73 5c 6e 22 2c 20 33 32 esc: %.*s\n", 32
23e0: 2c 20 63 6c 69 65 6e 74 69 6e 66 6f 2e 6d 61 6e , clientinfo.man
23f0: 75 66 61 63 74 75 72 65 72 49 44 2c 20 33 32 2c ufacturerID, 32,
2400: 20 63 6c 69 65 6e 74 69 6e 66 6f 2e 6c 69 62 72 clientinfo.libr
2410: 61 72 79 44 65 73 63 72 69 70 74 69 6f 6e 29 3b aryDescription);
2420: 0a 0a 09 63 68 6b 5f 72 76 20 3d 20 43 5f 47 65 ...chk_rv = C_Ge
2430: 74 53 6c 6f 74 4c 69 73 74 28 46 41 4c 53 45 2c tSlotList(FALSE,
2440: 20 4e 55 4c 4c 2c 20 26 6e 75 6d 53 6c 6f 74 73 NULL, &numSlots
2450: 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 76 20 21 );..if (chk_rv !
2460: 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 72 65 = CKR_OK) {...re
2470: 74 75 72 6e 28 31 29 3b 0a 09 7d 0a 0a 09 70 72 turn(1);..}...pr
2480: 69 6e 74 66 28 22 4e 75 6d 62 65 72 20 6f 66 20 intf("Number of
2490: 53 6c 6f 74 73 3a 20 25 6c 75 5c 6e 22 2c 20 6e Slots: %lu\n", n
24a0: 75 6d 53 6c 6f 74 73 29 3b 0a 0a 09 73 6c 6f 74 umSlots);...slot
24b0: 73 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f s = malloc(sizeo
24c0: 66 28 2a 73 6c 6f 74 73 29 20 2a 20 6e 75 6d 53 f(*slots) * numS
24d0: 6c 6f 74 73 29 3b 0a 0a 09 63 68 6b 5f 72 76 20 lots);...chk_rv
24e0: 3d 20 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 28 = C_GetSlotList(
24f0: 46 41 4c 53 45 2c 20 73 6c 6f 74 73 2c 20 26 6e FALSE, slots, &n
2500: 75 6d 53 6c 6f 74 73 29 3b 0a 09 69 66 20 28 63 umSlots);..if (c
2510: 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 hk_rv != CKR_OK)
2520: 20 7b 0a 09 09 72 65 74 75 72 6e 28 31 29 3b 0a {...return(1);.
2530: 09 7d 0a 0a 09 66 6f 72 20 28 63 75 72 72 53 6c .}...for (currSl
2540: 6f 74 20 3d 20 30 3b 20 63 75 72 72 53 6c 6f 74 ot = 0; currSlot
2550: 20 3c 20 6e 75 6d 53 6c 6f 74 73 3b 20 63 75 72 < numSlots; cur
2560: 72 53 6c 6f 74 2b 2b 29 20 7b 0a 09 09 70 72 69 rSlot++) {...pri
2570: 6e 74 66 28 22 20 20 53 6c 6f 74 20 25 6c 75 3a ntf(" Slot %lu:
2580: 5c 6e 22 2c 20 63 75 72 72 53 6c 6f 74 29 3b 0a \n", currSlot);.
2590: 0a 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f 47 65 ...chk_rv = C_Ge
25a0: 74 53 6c 6f 74 49 6e 66 6f 28 73 6c 6f 74 73 5b tSlotInfo(slots[
25b0: 63 75 72 72 53 6c 6f 74 5d 2c 20 26 73 6c 6f 74 currSlot], &slot
25c0: 49 6e 66 6f 29 3b 0a 09 09 69 66 20 28 63 68 6b Info);...if (chk
25d0: 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b _rv != CKR_OK) {
25e0: 0a 09 09 09 72 65 74 75 72 6e 28 31 29 3b 0a 09 ....return(1);..
25f0: 09 7d 0a 0a 09 09 70 72 69 6e 74 66 28 22 20 20 .}....printf("
2600: 20 20 49 64 20 20 20 20 20 3a 20 25 6c 75 5c 6e Id : %lu\n
2610: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon
2620: 67 29 20 73 6c 6f 74 73 5b 63 75 72 72 53 6c 6f g) slots[currSlo
2630: 74 5d 29 3b 0a 09 09 70 72 69 6e 74 66 28 22 20 t]);...printf("
2640: 20 20 20 44 65 73 63 20 20 20 3a 20 25 2e 2a 73 Desc : %.*s
2650: 5c 6e 22 2c 20 33 32 2c 20 73 6c 6f 74 49 6e 66 \n", 32, slotInf
2660: 6f 2e 73 6c 6f 74 44 65 73 63 72 69 70 74 69 6f o.slotDescriptio
2670: 6e 29 3b 0a 09 09 70 72 69 6e 74 66 28 22 20 20 n);...printf("
2680: 20 20 4d 61 6e 75 66 49 44 3a 20 25 2e 2a 73 5c ManufID: %.*s\
2690: 6e 22 2c 20 33 32 2c 20 73 6c 6f 74 49 6e 66 6f n", 32, slotInfo
26a0: 2e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 .manufacturerID)
26b0: 3b 0a 09 09 70 72 69 6e 74 66 28 22 20 20 20 20 ;...printf("
26c0: 48 57 56 65 72 73 20 3a 20 25 69 2e 25 69 5c 6e HWVers : %i.%i\n
26d0: 22 2c 20 73 6c 6f 74 49 6e 66 6f 2e 68 61 72 64 ", slotInfo.hard
26e0: 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f wareVersion.majo
26f0: 72 2c 20 73 6c 6f 74 49 6e 66 6f 2e 68 61 72 64 r, slotInfo.hard
2700: 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f wareVersion.mino
2710: 72 29 3b 0a 09 09 70 72 69 6e 74 66 28 22 20 20 r);...printf("
2720: 20 20 46 57 56 65 72 73 20 3a 20 25 69 2e 25 69 FWVers : %i.%i
2730: 5c 6e 22 2c 20 73 6c 6f 74 49 6e 66 6f 2e 66 69 \n", slotInfo.fi
2740: 72 6d 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 61 rmwareVersion.ma
2750: 6a 6f 72 2c 20 73 6c 6f 74 49 6e 66 6f 2e 66 69 jor, slotInfo.fi
2760: 72 6d 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 rmwareVersion.mi
2770: 6e 6f 72 29 3b 0a 09 09 70 72 69 6e 74 66 28 22 nor);...printf("
2780: 20 20 20 20 46 6c 61 67 73 20 20 3a 20 22 29 3b Flags : ");
2790: 0a 09 09 69 66 20 28 28 73 6c 6f 74 49 6e 66 6f ...if ((slotInfo
27a0: 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 54 4f 4b .flags & CKF_TOK
27b0: 45 4e 5f 50 52 45 53 45 4e 54 29 20 3d 3d 20 43 EN_PRESENT) == C
27c0: 4b 46 5f 54 4f 4b 45 4e 5f 50 52 45 53 45 4e 54 KF_TOKEN_PRESENT
27d0: 29 20 7b 0a 09 09 09 70 72 69 6e 74 66 28 22 43 ) {....printf("C
27e0: 4b 46 5f 54 4f 4b 45 4e 5f 50 52 45 53 45 4e 54 KF_TOKEN_PRESENT
27f0: 20 22 29 3b 0a 09 09 7d 0a 09 09 69 66 20 28 28 ");...}...if ((
2800: 73 6c 6f 74 49 6e 66 6f 2e 66 6c 61 67 73 20 26 slotInfo.flags &
2810: 20 43 4b 46 5f 52 45 4d 4f 56 41 42 4c 45 5f 44 CKF_REMOVABLE_D
2820: 45 56 49 43 45 29 20 3d 3d 20 43 4b 46 5f 52 45 EVICE) == CKF_RE
2830: 4d 4f 56 41 42 4c 45 5f 44 45 56 49 43 45 29 20 MOVABLE_DEVICE)
2840: 7b 0a 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 {....printf("CKF
2850: 5f 52 45 4d 4f 56 41 42 4c 45 5f 44 45 56 49 43 _REMOVABLE_DEVIC
2860: 45 20 22 29 3b 0a 09 09 7d 0a 09 09 69 66 20 28 E ");...}...if (
2870: 28 73 6c 6f 74 49 6e 66 6f 2e 66 6c 61 67 73 20 (slotInfo.flags
2880: 26 20 43 4b 46 5f 48 57 5f 53 4c 4f 54 29 20 3d & CKF_HW_SLOT) =
2890: 3d 20 43 4b 46 5f 48 57 5f 53 4c 4f 54 29 20 7b = CKF_HW_SLOT) {
28a0: 0a 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f ....printf("CKF_
28b0: 48 57 5f 53 4c 4f 54 20 22 29 3b 0a 09 09 7d 0a HW_SLOT ");...}.
28c0: 09 09 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a ..printf("\n");.
28d0: 0a 09 09 69 66 20 28 28 73 6c 6f 74 49 6e 66 6f ...if ((slotInfo
28e0: 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 54 4f 4b .flags & CKF_TOK
28f0: 45 4e 5f 50 52 45 53 45 4e 54 29 20 3d 3d 20 43 EN_PRESENT) == C
2900: 4b 46 5f 54 4f 4b 45 4e 5f 50 52 45 53 45 4e 54 KF_TOKEN_PRESENT
2910: 29 20 7b 0a 09 09 09 70 72 69 6e 74 66 28 22 20 ) {....printf("
2920: 20 20 20 54 6f 6b 65 6e 3a 5c 6e 22 29 3b 0a 0a Token:\n");..
2930: 09 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f 47 65 ...chk_rv = C_Ge
2940: 74 54 6f 6b 65 6e 49 6e 66 6f 28 73 6c 6f 74 73 tTokenInfo(slots
2950: 5b 63 75 72 72 53 6c 6f 74 5d 2c 20 26 74 6f 6b [currSlot], &tok
2960: 65 6e 49 6e 66 6f 29 3b 0a 09 09 09 69 66 20 28 enInfo);....if (
2970: 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b chk_rv != CKR_OK
2980: 29 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 28 31 ) {.....return(1
2990: 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 70 72 69 6e );....}.....prin
29a0: 74 66 28 22 20 20 20 20 20 20 4c 61 62 65 6c 20 tf(" Label
29b0: 20 3a 20 25 2e 2a 73 5c 6e 22 2c 20 33 32 2c 20 : %.*s\n", 32,
29c0: 74 6f 6b 65 6e 49 6e 66 6f 2e 6c 61 62 65 6c 29 tokenInfo.label)
29d0: 3b 0a 09 09 09 70 72 69 6e 74 66 28 22 20 20 20 ;....printf("
29e0: 20 20 20 4d 61 6e 75 66 49 44 3a 20 25 2e 2a 73 ManufID: %.*s
29f0: 5c 6e 22 2c 20 33 32 2c 20 74 6f 6b 65 6e 49 6e \n", 32, tokenIn
2a00: 66 6f 2e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 fo.manufacturerI
2a10: 44 29 3b 0a 09 09 09 70 72 69 6e 74 66 28 22 20 D);....printf("
2a20: 20 20 20 20 20 4d 6f 64 65 6c 20 20 3a 20 25 2e Model : %.
2a30: 2a 73 5c 6e 22 2c 20 31 36 2c 20 74 6f 6b 65 6e *s\n", 16, token
2a40: 49 6e 66 6f 2e 6d 6f 64 65 6c 29 3b 0a 09 09 09 Info.model);....
2a50: 70 72 69 6e 74 66 28 22 20 20 20 20 20 20 53 65 printf(" Se
2a60: 72 4e 6f 20 20 3a 20 25 2e 2a 73 5c 6e 22 2c 20 rNo : %.*s\n",
2a70: 31 36 2c 20 74 6f 6b 65 6e 49 6e 66 6f 2e 73 65 16, tokenInfo.se
2a80: 72 69 61 6c 4e 75 6d 62 65 72 29 3b 0a 09 09 09 rialNumber);....
2a90: 70 72 69 6e 74 66 28 22 20 20 20 20 20 20 48 57 printf(" HW
2aa0: 56 65 72 73 20 3a 20 25 69 2e 25 69 5c 6e 22 2c Vers : %i.%i\n",
2ab0: 20 74 6f 6b 65 6e 49 6e 66 6f 2e 68 61 72 64 77 tokenInfo.hardw
2ac0: 61 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 areVersion.major
2ad0: 2c 20 74 6f 6b 65 6e 49 6e 66 6f 2e 68 61 72 64 , tokenInfo.hard
2ae0: 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f wareVersion.mino
2af0: 72 29 3b 0a 09 09 09 70 72 69 6e 74 66 28 22 20 r);....printf("
2b00: 20 20 20 20 20 46 57 56 65 72 73 20 3a 20 25 69 FWVers : %i
2b10: 2e 25 69 5c 6e 22 2c 20 74 6f 6b 65 6e 49 6e 66 .%i\n", tokenInf
2b20: 6f 2e 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f o.firmwareVersio
2b30: 6e 2e 6d 61 6a 6f 72 2c 20 74 6f 6b 65 6e 49 6e n.major, tokenIn
2b40: 66 6f 2e 66 69 72 6d 77 61 72 65 56 65 72 73 69 fo.firmwareVersi
2b50: 6f 6e 2e 6d 69 6e 6f 72 29 3b 0a 09 09 09 70 72 on.minor);....pr
2b60: 69 6e 74 66 28 22 20 20 20 20 20 20 46 6c 61 67 intf(" Flag
2b70: 73 20 20 3a 20 22 29 3b 0a 09 09 09 69 66 20 28 s : ");....if (
2b80: 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 (tokenInfo.flags
2b90: 20 26 20 43 4b 46 5f 52 4e 47 29 20 3d 3d 20 43 & CKF_RNG) == C
2ba0: 4b 46 5f 52 4e 47 29 20 7b 0a 09 09 09 09 70 72 KF_RNG) {.....pr
2bb0: 69 6e 74 66 28 22 43 4b 46 5f 52 4e 47 20 22 29 intf("CKF_RNG ")
2bc0: 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28 74 ;....}....if ((t
2bd0: 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 okenInfo.flags &
2be0: 20 43 4b 46 5f 57 52 49 54 45 5f 50 52 4f 54 45 CKF_WRITE_PROTE
2bf0: 43 54 45 44 29 20 3d 3d 20 43 4b 46 5f 57 52 49 CTED) == CKF_WRI
2c00: 54 45 5f 50 52 4f 54 45 43 54 45 44 29 20 7b 0a TE_PROTECTED) {.
2c10: 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f ....printf("CKF_
2c20: 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 20 WRITE_PROTECTED
2c30: 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 ");....}....if (
2c40: 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 (tokenInfo.flags
2c50: 20 26 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52 45 51 & CKF_LOGIN_REQ
2c60: 55 49 52 45 44 29 20 3d 3d 20 43 4b 46 5f 4c 4f UIRED) == CKF_LO
2c70: 47 49 4e 5f 52 45 51 55 49 52 45 44 29 20 7b 0a GIN_REQUIRED) {.
2c80: 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f ....printf("CKF_
2c90: 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 20 22 LOGIN_REQUIRED "
2ca0: 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28 );....}....if ((
2cb0: 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 tokenInfo.flags
2cc0: 26 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 49 & CKF_USER_PIN_I
2cd0: 4e 49 54 49 41 4c 49 5a 45 44 29 20 3d 3d 20 43 NITIALIZED) == C
2ce0: 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 49 4e 49 54 KF_USER_PIN_INIT
2cf0: 49 41 4c 49 5a 45 44 29 20 7b 0a 09 09 09 09 70 IALIZED) {.....p
2d00: 72 69 6e 74 66 28 22 43 4b 46 5f 55 53 45 52 5f rintf("CKF_USER_
2d10: 50 49 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 44 20 PIN_INITIALIZED
2d20: 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 ");....}....if (
2d30: 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 (tokenInfo.flags
2d40: 20 26 20 43 4b 46 5f 52 45 53 54 4f 52 45 5f 4b & CKF_RESTORE_K
2d50: 45 59 5f 4e 4f 54 5f 4e 45 45 44 45 44 29 20 3d EY_NOT_NEEDED) =
2d60: 3d 20 43 4b 46 5f 52 45 53 54 4f 52 45 5f 4b 45 = CKF_RESTORE_KE
2d70: 59 5f 4e 4f 54 5f 4e 45 45 44 45 44 29 20 7b 0a Y_NOT_NEEDED) {.
2d80: 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f ....printf("CKF_
2d90: 52 45 53 54 4f 52 45 5f 4b 45 59 5f 4e 4f 54 5f RESTORE_KEY_NOT_
2da0: 4e 45 45 44 45 44 20 22 29 3b 0a 09 09 09 7d 0a NEEDED ");....}.
2db0: 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66 ...if ((tokenInf
2dc0: 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 43 4c o.flags & CKF_CL
2dd0: 4f 43 4b 5f 4f 4e 5f 54 4f 4b 45 4e 29 20 3d 3d OCK_ON_TOKEN) ==
2de0: 20 43 4b 46 5f 43 4c 4f 43 4b 5f 4f 4e 5f 54 4f CKF_CLOCK_ON_TO
2df0: 4b 45 4e 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 KEN) {.....print
2e00: 66 28 22 43 4b 46 5f 43 4c 4f 43 4b 5f 4f 4e 5f f("CKF_CLOCK_ON_
2e10: 54 4f 4b 45 4e 20 22 29 3b 0a 09 09 09 7d 0a 09 TOKEN ");....}..
2e20: 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66 6f ..if ((tokenInfo
2e30: 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 50 52 4f .flags & CKF_PRO
2e40: 54 45 43 54 45 44 5f 41 55 54 48 45 4e 54 49 43 TECTED_AUTHENTIC
2e50: 41 54 49 4f 4e 5f 50 41 54 48 29 20 3d 3d 20 43 ATION_PATH) == C
2e60: 4b 46 5f 50 52 4f 54 45 43 54 45 44 5f 41 55 54 KF_PROTECTED_AUT
2e70: 48 45 4e 54 49 43 41 54 49 4f 4e 5f 50 41 54 48 HENTICATION_PATH
2e80: 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 ) {.....printf("
2e90: 43 4b 46 5f 50 52 4f 54 45 43 54 45 44 5f 41 55 CKF_PROTECTED_AU
2ea0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 5f 50 41 54 THENTICATION_PAT
2eb0: 48 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 H ");....}....if
2ec0: 20 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 ((tokenInfo.fla
2ed0: 67 73 20 26 20 43 4b 46 5f 44 55 41 4c 5f 43 52 gs & CKF_DUAL_CR
2ee0: 59 50 54 4f 5f 4f 50 45 52 41 54 49 4f 4e 53 29 YPTO_OPERATIONS)
2ef0: 20 3d 3d 20 43 4b 46 5f 44 55 41 4c 5f 43 52 59 == CKF_DUAL_CRY
2f00: 50 54 4f 5f 4f 50 45 52 41 54 49 4f 4e 53 29 20 PTO_OPERATIONS)
2f10: 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b {.....printf("CK
2f20: 46 5f 44 55 41 4c 5f 43 52 59 50 54 4f 5f 4f 50 F_DUAL_CRYPTO_OP
2f30: 45 52 41 54 49 4f 4e 53 20 22 29 3b 0a 09 09 09 ERATIONS ");....
2f40: 7d 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 }....if ((tokenI
2f50: 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f nfo.flags & CKF_
2f60: 54 4f 4b 45 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 TOKEN_INITIALIZE
2f70: 44 29 20 3d 3d 20 43 4b 46 5f 54 4f 4b 45 4e 5f D) == CKF_TOKEN_
2f80: 49 4e 49 54 49 41 4c 49 5a 45 44 29 20 7b 0a 09 INITIALIZED) {..
2f90: 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 54 ...printf("CKF_T
2fa0: 4f 4b 45 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 44 OKEN_INITIALIZED
2fb0: 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 ");....}....if
2fc0: 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 ((tokenInfo.flag
2fd0: 73 20 26 20 43 4b 46 5f 53 45 43 4f 4e 44 41 52 s & CKF_SECONDAR
2fe0: 59 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e Y_AUTHENTICATION
2ff0: 29 20 3d 3d 20 43 4b 46 5f 53 45 43 4f 4e 44 41 ) == CKF_SECONDA
3000: 52 59 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f RY_AUTHENTICATIO
3010: 4e 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 N) {.....printf(
3020: 22 43 4b 46 5f 53 45 43 4f 4e 44 41 52 59 5f 41 "CKF_SECONDARY_A
3030: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 22 29 UTHENTICATION ")
3040: 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28 74 ;....}....if ((t
3050: 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 okenInfo.flags &
3060: 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 43 4f CKF_USER_PIN_CO
3070: 55 4e 54 5f 4c 4f 57 29 20 3d 3d 20 43 4b 46 5f UNT_LOW) == CKF_
3080: 55 53 45 52 5f 50 49 4e 5f 43 4f 55 4e 54 5f 4c USER_PIN_COUNT_L
3090: 4f 57 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 OW) {.....printf
30a0: 28 22 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 43 ("CKF_USER_PIN_C
30b0: 4f 55 4e 54 5f 4c 4f 57 20 22 29 3b 0a 09 09 09 OUNT_LOW ");....
30c0: 7d 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 }....if ((tokenI
30d0: 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f nfo.flags & CKF_
30e0: 55 53 45 52 5f 50 49 4e 5f 46 49 4e 41 4c 5f 54 USER_PIN_FINAL_T
30f0: 52 59 29 20 3d 3d 20 43 4b 46 5f 55 53 45 52 5f RY) == CKF_USER_
3100: 50 49 4e 5f 46 49 4e 41 4c 5f 54 52 59 29 20 7b PIN_FINAL_TRY) {
3110: 0a 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 .....printf("CKF
3120: 5f 55 53 45 52 5f 50 49 4e 5f 46 49 4e 41 4c 5f _USER_PIN_FINAL_
3130: 54 52 59 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 TRY ");....}....
3140: 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 if ((tokenInfo.f
3150: 6c 61 67 73 20 26 20 43 4b 46 5f 55 53 45 52 5f lags & CKF_USER_
3160: 50 49 4e 5f 4c 4f 43 4b 45 44 29 20 3d 3d 20 43 PIN_LOCKED) == C
3170: 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 4c 4f 43 4b KF_USER_PIN_LOCK
3180: 45 44 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 ED) {.....printf
3190: 28 22 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 4c ("CKF_USER_PIN_L
31a0: 4f 43 4b 45 44 20 22 29 3b 0a 09 09 09 7d 0a 09 OCKED ");....}..
31b0: 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66 6f ..if ((tokenInfo
31c0: 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 55 53 45 .flags & CKF_USE
31d0: 52 5f 50 49 4e 5f 54 4f 5f 42 45 5f 43 48 41 4e R_PIN_TO_BE_CHAN
31e0: 47 45 44 29 20 3d 3d 20 43 4b 46 5f 55 53 45 52 GED) == CKF_USER
31f0: 5f 50 49 4e 5f 54 4f 5f 42 45 5f 43 48 41 4e 47 _PIN_TO_BE_CHANG
3200: 45 44 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 ED) {.....printf
3210: 28 22 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 54 ("CKF_USER_PIN_T
3220: 4f 5f 42 45 5f 43 48 41 4e 47 45 44 20 22 29 3b O_BE_CHANGED ");
3230: 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28 74 6f ....}....if ((to
3240: 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 kenInfo.flags &
3250: 43 4b 46 5f 53 4f 5f 50 49 4e 5f 43 4f 55 4e 54 CKF_SO_PIN_COUNT
3260: 5f 4c 4f 57 29 20 3d 3d 20 43 4b 46 5f 53 4f 5f _LOW) == CKF_SO_
3270: 50 49 4e 5f 43 4f 55 4e 54 5f 4c 4f 57 29 20 7b PIN_COUNT_LOW) {
3280: 0a 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 .....printf("CKF
3290: 5f 53 4f 5f 50 49 4e 5f 43 4f 55 4e 54 5f 4c 4f _SO_PIN_COUNT_LO
32a0: 57 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 W ");....}....if
32b0: 20 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 ((tokenInfo.fla
32c0: 67 73 20 26 20 43 4b 46 5f 53 4f 5f 50 49 4e 5f gs & CKF_SO_PIN_
32d0: 46 49 4e 41 4c 5f 54 52 59 29 20 3d 3d 20 43 4b FINAL_TRY) == CK
32e0: 46 5f 53 4f 5f 50 49 4e 5f 46 49 4e 41 4c 5f 54 F_SO_PIN_FINAL_T
32f0: 52 59 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 RY) {.....printf
3300: 28 22 43 4b 46 5f 53 4f 5f 50 49 4e 5f 46 49 4e ("CKF_SO_PIN_FIN
3310: 41 4c 5f 54 52 59 20 22 29 3b 0a 09 09 09 7d 0a AL_TRY ");....}.
3320: 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66 ...if ((tokenInf
3330: 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 53 4f o.flags & CKF_SO
3340: 5f 50 49 4e 5f 4c 4f 43 4b 45 44 29 20 3d 3d 20 _PIN_LOCKED) ==
3350: 43 4b 46 5f 53 4f 5f 50 49 4e 5f 4c 4f 43 4b 45 CKF_SO_PIN_LOCKE
3360: 44 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 D) {.....printf(
3370: 22 43 4b 46 5f 53 4f 5f 50 49 4e 5f 4c 4f 43 4b "CKF_SO_PIN_LOCK
3380: 45 44 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 ED ");....}....i
3390: 66 20 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c f ((tokenInfo.fl
33a0: 61 67 73 20 26 20 43 4b 46 5f 53 4f 5f 50 49 4e ags & CKF_SO_PIN
33b0: 5f 54 4f 5f 42 45 5f 43 48 41 4e 47 45 44 29 20 _TO_BE_CHANGED)
33c0: 3d 3d 20 43 4b 46 5f 53 4f 5f 50 49 4e 5f 54 4f == CKF_SO_PIN_TO
33d0: 5f 42 45 5f 43 48 41 4e 47 45 44 29 20 7b 0a 09 _BE_CHANGED) {..
33e0: 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 53 ...printf("CKF_S
33f0: 4f 5f 50 49 4e 5f 54 4f 5f 42 45 5f 43 48 41 4e O_PIN_TO_BE_CHAN
3400: 47 45 44 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 GED ");....}....
3410: 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 09 09 printf("\n");...
3420: 7d 0a 09 7d 0a 0a 09 63 68 6b 5f 72 76 20 3d 20 }..}...chk_rv =
3430: 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 28 73 6c C_OpenSession(sl
3440: 6f 74 73 5b 30 5d 2c 20 43 4b 46 5f 53 45 52 49 ots[0], CKF_SERI
3450: 41 4c 5f 53 45 53 53 49 4f 4e 2c 20 4e 55 4c 4c AL_SESSION, NULL
3460: 2c 20 4e 55 4c 4c 2c 20 26 68 53 65 73 73 69 6f , NULL, &hSessio
3470: 6e 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 76 20 n);..if (chk_rv
3480: 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 63 == CKR_OK) {...c
3490: 68 6b 5f 72 76 20 3d 20 43 5f 47 65 74 54 6f 6b hk_rv = C_GetTok
34a0: 65 6e 49 6e 66 6f 28 73 6c 6f 74 73 5b 30 5d 2c enInfo(slots[0],
34b0: 20 26 74 6f 6b 65 6e 49 6e 66 6f 29 3b 0a 09 09 &tokenInfo);...
34c0: 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b if (chk_rv != CK
34d0: 52 5f 4f 4b 29 20 7b 0a 09 09 09 72 65 74 75 72 R_OK) {....retur
34e0: 6e 28 31 29 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 n(1);...}....if
34f0: 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 ((tokenInfo.flag
3500: 73 20 26 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52 45 s & CKF_LOGIN_RE
3510: 51 55 49 52 45 44 29 20 3d 3d 20 43 4b 46 5f 4c QUIRED) == CKF_L
3520: 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 20 26 26 OGIN_REQUIRED &&
3530: 20 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 (tokenInfo.flag
3540: 73 20 26 20 43 4b 46 5f 50 52 4f 54 45 43 54 45 s & CKF_PROTECTE
3550: 44 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e D_AUTHENTICATION
3560: 5f 50 41 54 48 29 20 3d 3d 20 30 29 20 7b 0a 09 _PATH) == 0) {..
3570: 09 09 66 67 65 74 73 5f 72 65 74 20 3d 20 4e 55 ..fgets_ret = NU
3580: 4c 4c 3b 0a 0a 09 09 09 77 68 69 6c 65 20 28 66 LL;.....while (f
3590: 67 65 74 73 5f 72 65 74 20 3d 3d 20 4e 55 4c 4c gets_ret == NULL
35a0: 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 ) {.....printf("
35b0: 2a 2a 20 45 4e 54 45 52 20 50 49 4e 3a 20 22 29 ** ENTER PIN: ")
35c0: 3b 0a 09 09 09 09 66 66 6c 75 73 68 28 73 74 64 ;.....fflush(std
35d0: 6f 75 74 29 3b 0a 0a 09 09 09 09 66 67 65 74 73 out);......fgets
35e0: 5f 72 65 74 20 3d 20 66 67 65 74 73 28 28 63 68 _ret = fgets((ch
35f0: 61 72 20 2a 29 20 75 73 65 72 5f 70 69 6e 2c 20 ar *) user_pin,
3600: 73 69 7a 65 6f 66 28 75 73 65 72 5f 70 69 6e 29 sizeof(user_pin)
3610: 2c 20 73 74 64 69 6e 29 3b 0a 09 09 09 7d 0a 0a , stdin);....}..
3620: 09 09 09 69 66 20 28 73 74 72 6c 65 6e 28 28 63 ...if (strlen((c
3630: 68 61 72 20 2a 29 20 75 73 65 72 5f 70 69 6e 29 har *) user_pin)
3640: 20 3e 3d 20 31 29 20 7b 0a 09 09 09 09 77 68 69 >= 1) {.....whi
3650: 6c 65 20 28 75 73 65 72 5f 70 69 6e 5b 73 74 72 le (user_pin[str
3660: 6c 65 6e 28 28 63 68 61 72 20 2a 29 20 75 73 65 len((char *) use
3670: 72 5f 70 69 6e 29 20 2d 20 31 5d 20 3c 20 27 20 r_pin) - 1] < '
3680: 27 29 20 7b 0a 09 09 09 09 09 75 73 65 72 5f 70 ') {......user_p
3690: 69 6e 5b 73 74 72 6c 65 6e 28 28 63 68 61 72 20 in[strlen((char
36a0: 2a 29 20 75 73 65 72 5f 70 69 6e 29 20 2d 20 31 *) user_pin) - 1
36b0: 5d 20 3d 20 27 5c 30 27 3b 0a 09 09 09 09 7d 0a ] = '\0';.....}.
36c0: 09 09 09 7d 0a 0a 09 09 09 63 68 6b 5f 72 76 20 ...}.....chk_rv
36d0: 3d 20 43 5f 4c 6f 67 69 6e 28 68 53 65 73 73 69 = C_Login(hSessi
36e0: 6f 6e 2c 20 43 4b 55 5f 55 53 45 52 2c 20 75 73 on, CKU_USER, us
36f0: 65 72 5f 70 69 6e 2c 20 73 74 72 6c 65 6e 28 28 er_pin, strlen((
3700: 63 68 61 72 20 2a 29 20 75 73 65 72 5f 70 69 6e char *) user_pin
3710: 29 29 3b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 ));...} else {..
3720: 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f 4c 6f 67 ..chk_rv = C_Log
3730: 69 6e 28 68 53 65 73 73 69 6f 6e 2c 20 43 4b 55 in(hSession, CKU
3740: 5f 55 53 45 52 2c 20 4e 55 4c 4c 2c 20 30 29 3b _USER, NULL, 0);
3750: 0a 09 09 7d 0a 09 09 69 66 20 28 63 68 6b 5f 72 ...}...if (chk_r
3760: 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 v == CKR_OK) {..
3770: 09 09 70 72 69 6e 74 66 28 22 4c 6f 67 69 6e 20 ..printf("Login
3780: 74 6f 20 64 65 76 69 63 65 20 73 75 63 63 65 65 to device succee
3790: 64 2e 5c 6e 22 29 3b 0a 09 09 7d 20 65 6c 73 65 d.\n");...} else
37a0: 20 7b 0a 09 09 09 70 72 69 6e 74 66 28 22 4c 6f {....printf("Lo
37b0: 67 69 6e 20 74 6f 20 64 65 76 69 63 65 20 66 61 gin to device fa
37c0: 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09 7d 0a 0a iled.\n");...}..
37d0: 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f 47 65 74 ..chk_rv = C_Get
37e0: 53 65 73 73 69 6f 6e 49 6e 66 6f 28 68 53 65 73 SessionInfo(hSes
37f0: 73 69 6f 6e 2c 20 26 73 65 73 73 69 6f 6e 49 6e sion, &sessionIn
3800: 66 6f 29 3b 0a 09 09 69 66 20 28 63 68 6b 5f 72 fo);...if (chk_r
3810: 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 v == CKR_OK) {..
3820: 09 09 70 72 69 6e 74 66 28 22 53 65 73 73 69 6f ..printf("Sessio
3830: 6e 20 49 6e 66 6f 3a 5c 6e 22 29 3b 0a 09 09 09 n Info:\n");....
3840: 70 72 69 6e 74 66 28 22 20 20 53 6c 6f 74 20 49 printf(" Slot I
3850: 44 3a 20 25 6c 75 5c 6e 22 2c 20 28 75 6e 73 69 D: %lu\n", (unsi
3860: 67 6e 65 64 20 6c 6f 6e 67 29 20 73 65 73 73 69 gned long) sessi
3870: 6f 6e 49 6e 66 6f 2e 73 6c 6f 74 49 44 29 3b 0a onInfo.slotID);.
3880: 09 09 09 70 72 69 6e 74 66 28 22 20 20 44 65 76 ...printf(" Dev
3890: 20 45 72 72 3a 20 25 6c 75 5c 6e 22 2c 20 28 75 Err: %lu\n", (u
38a0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 65 nsigned long) se
38b0: 73 73 69 6f 6e 49 6e 66 6f 2e 75 6c 44 65 76 69 ssionInfo.ulDevi
38c0: 63 65 45 72 72 6f 72 29 3b 0a 0a 09 09 09 70 72 ceError);.....pr
38d0: 69 6e 74 66 28 22 20 20 53 74 61 74 65 20 20 3a intf(" State :
38e0: 20 22 29 3b 0a 09 09 09 69 66 20 28 73 65 73 73 ");....if (sess
38f0: 69 6f 6e 49 6e 66 6f 2e 73 74 61 74 65 20 3d 3d ionInfo.state ==
3900: 20 43 4b 53 5f 52 4f 5f 50 55 42 4c 49 43 5f 53 CKS_RO_PUBLIC_S
3910: 45 53 53 49 4f 4e 29 20 7b 0a 09 09 09 09 70 72 ESSION) {.....pr
3920: 69 6e 74 66 28 22 43 4b 53 5f 52 4f 5f 50 55 42 intf("CKS_RO_PUB
3930: 4c 49 43 5f 53 45 53 53 49 4f 4e 5c 6e 22 29 3b LIC_SESSION\n");
3940: 0a 09 09 09 7d 20 65 6c 73 65 20 69 66 20 28 73 ....} else if (s
3950: 65 73 73 69 6f 6e 49 6e 66 6f 2e 73 74 61 74 65 essionInfo.state
3960: 20 3d 3d 20 43 4b 53 5f 52 4f 5f 55 53 45 52 5f == CKS_RO_USER_
3970: 46 55 4e 43 54 49 4f 4e 53 29 20 7b 0a 09 09 09 FUNCTIONS) {....
3980: 09 70 72 69 6e 74 66 28 22 43 4b 53 5f 52 4f 5f .printf("CKS_RO_
3990: 55 53 45 52 5f 46 55 4e 43 54 49 4f 4e 53 5c 6e USER_FUNCTIONS\n
39a0: 22 29 3b 0a 09 09 09 7d 20 65 6c 73 65 20 69 66 ");....} else if
39b0: 20 28 73 65 73 73 69 6f 6e 49 6e 66 6f 2e 73 74 (sessionInfo.st
39c0: 61 74 65 20 3d 3d 20 43 4b 53 5f 52 57 5f 50 55 ate == CKS_RW_PU
39d0: 42 4c 49 43 5f 53 45 53 53 49 4f 4e 29 20 7b 0a BLIC_SESSION) {.
39e0: 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b 53 5f ....printf("CKS_
39f0: 52 57 5f 50 55 42 4c 49 43 5f 53 45 53 53 49 4f RW_PUBLIC_SESSIO
3a00: 4e 5c 6e 22 29 3b 0a 09 09 09 7d 20 65 6c 73 65 N\n");....} else
3a10: 20 69 66 20 28 73 65 73 73 69 6f 6e 49 6e 66 6f if (sessionInfo
3a20: 2e 73 74 61 74 65 20 3d 3d 20 43 4b 53 5f 52 57 .state == CKS_RW
3a30: 5f 55 53 45 52 5f 46 55 4e 43 54 49 4f 4e 53 29 _USER_FUNCTIONS)
3a40: 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 43 {.....printf("C
3a50: 4b 53 5f 52 57 5f 55 53 45 52 5f 46 55 4e 43 54 KS_RW_USER_FUNCT
3a60: 49 4f 4e 53 5c 6e 22 29 3b 0a 09 09 09 7d 20 65 IONS\n");....} e
3a70: 6c 73 65 20 69 66 20 28 73 65 73 73 69 6f 6e 49 lse if (sessionI
3a80: 6e 66 6f 2e 73 74 61 74 65 20 3d 3d 20 43 4b 53 nfo.state == CKS
3a90: 5f 52 4f 5f 50 55 42 4c 49 43 5f 53 45 53 53 49 _RO_PUBLIC_SESSI
3aa0: 4f 4e 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 ON) {.....printf
3ab0: 28 22 43 4b 53 5f 52 57 5f 53 4f 5f 46 55 4e 43 ("CKS_RW_SO_FUNC
3ac0: 54 49 4f 4e 53 5c 6e 22 29 3b 0a 09 09 09 7d 20 TIONS\n");....}
3ad0: 65 6c 73 65 20 7b 0a 09 09 09 09 70 72 69 6e 74 else {.....print
3ae0: 66 28 22 55 6e 6b 6e 6f 77 6e 20 28 25 6c 75 29 f("Unknown (%lu)
3af0: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon
3b00: 67 29 20 73 65 73 73 69 6f 6e 49 6e 66 6f 2e 73 g) sessionInfo.s
3b10: 74 61 74 65 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 tate);....}.....
3b20: 70 72 69 6e 74 66 28 22 20 20 46 6c 61 67 73 20 printf(" Flags
3b30: 20 3a 20 22 29 3b 0a 09 09 09 69 66 20 28 28 73 : ");....if ((s
3b40: 65 73 73 69 6f 6e 49 6e 66 6f 2e 66 6c 61 67 73 essionInfo.flags
3b50: 20 26 20 43 4b 46 5f 52 57 5f 53 45 53 53 49 4f & CKF_RW_SESSIO
3b60: 4e 29 20 3d 3d 20 43 4b 46 5f 52 57 5f 53 45 53 N) == CKF_RW_SES
3b70: 53 49 4f 4e 29 20 7b 0a 09 09 09 09 70 72 69 6e SION) {.....prin
3b80: 74 66 28 22 43 4b 46 5f 52 57 5f 53 45 53 53 49 tf("CKF_RW_SESSI
3b90: 4f 4e 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 ON ");....}....i
3ba0: 66 20 28 28 73 65 73 73 69 6f 6e 49 6e 66 6f 2e f ((sessionInfo.
3bb0: 66 6c 61 67 73 20 26 20 43 4b 46 5f 53 45 52 49 flags & CKF_SERI
3bc0: 41 4c 5f 53 45 53 53 49 4f 4e 29 20 3d 3d 20 43 AL_SESSION) == C
3bd0: 4b 46 5f 53 45 52 49 41 4c 5f 53 45 53 53 49 4f KF_SERIAL_SESSIO
3be0: 4e 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 N) {.....printf(
3bf0: 22 43 4b 46 5f 53 45 52 49 41 4c 5f 53 45 53 53 "CKF_SERIAL_SESS
3c00: 49 4f 4e 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 ION ");....}....
3c10: 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 09 09 printf("\n");...
3c20: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 70 72 69 6e } else {....prin
3c30: 74 66 28 22 47 65 74 53 65 73 73 69 6f 6e 49 6e tf("GetSessionIn
3c40: 66 6f 28 29 20 66 61 69 6c 65 64 2e 5c 6e 22 29 fo() failed.\n")
3c50: 3b 0a 09 09 7d 0a 0a 09 09 63 68 6b 5f 72 76 20 ;...}....chk_rv
3c60: 3d 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49 = C_FindObjectsI
3c70: 6e 69 74 28 68 53 65 73 73 69 6f 6e 2c 20 4e 55 nit(hSession, NU
3c80: 4c 4c 2c 20 30 29 3b 0a 09 09 69 66 20 28 63 68 LL, 0);...if (ch
3c90: 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20 k_rv == CKR_OK)
3ca0: 7b 0a 09 09 09 77 68 69 6c 65 20 28 31 29 20 7b {....while (1) {
3cb0: 0a 09 09 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f .....chk_rv = C_
3cc0: 46 69 6e 64 4f 62 6a 65 63 74 73 28 68 53 65 73 FindObjects(hSes
3cd0: 73 69 6f 6e 2c 20 26 68 4f 62 6a 65 63 74 2c 20 sion, &hObject,
3ce0: 31 2c 20 26 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 1, &ulObjectCoun
3cf0: 74 29 3b 0a 09 09 09 09 69 66 20 28 63 68 6b 5f t);.....if (chk_
3d00: 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a rv != CKR_OK) {.
3d10: 09 09 09 09 09 70 72 69 6e 74 66 28 22 46 69 6e .....printf("Fin
3d20: 64 4f 62 6a 65 63 74 73 28 29 20 66 61 69 6c 65 dObjects() faile
3d30: 64 2e 5c 6e 22 29 3b 0a 09 09 09 09 09 62 72 65 d.\n");......bre
3d40: 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 ak;.....}......i
3d50: 66 20 28 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 f (ulObjectCount
3d60: 20 3d 3d 20 30 29 20 7b 0a 09 09 09 09 09 62 72 == 0) {......br
3d70: 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 eak;.....}......
3d80: 69 66 20 28 75 6c 4f 62 6a 65 63 74 43 6f 75 6e if (ulObjectCoun
3d90: 74 20 21 3d 20 31 29 20 7b 0a 09 09 09 09 09 70 t != 1) {......p
3da0: 72 69 6e 74 66 28 22 46 69 6e 64 4f 62 6a 65 63 rintf("FindObjec
3db0: 74 73 28 29 20 72 65 74 75 72 6e 65 64 20 61 20 ts() returned a
3dc0: 77 65 69 72 64 20 6e 75 6d 62 65 72 20 6f 66 20 weird number of
3dd0: 6f 62 6a 65 63 74 73 2e 20 20 41 73 6b 65 64 20 objects. Asked
3de0: 66 6f 72 20 31 2c 20 67 6f 74 20 25 6c 75 2e 5c for 1, got %lu.\
3df0: 6e 22 2c 20 75 6c 4f 62 6a 65 63 74 43 6f 75 6e n", ulObjectCoun
3e00: 74 29 3b 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a t);......break;.
3e10: 09 09 09 09 7d 0a 0a 09 09 09 09 70 72 69 6e 74 ....}......print
3e20: 66 28 22 20 20 4f 62 6a 65 63 74 20 49 6e 66 6f f(" Object Info
3e30: 20 28 6f 62 6a 65 63 74 20 25 6c 75 29 3a 5c 6e (object %lu):\n
3e40: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ", (unsigned lon
3e50: 67 29 20 68 4f 62 6a 65 63 74 29 3b 0a 0a 09 09 g) hObject);....
3e60: 09 09 66 6f 72 20 28 63 75 72 72 5f 61 74 74 72 ..for (curr_attr
3e70: 5f 69 64 78 20 3d 20 30 3b 20 63 75 72 72 5f 61 _idx = 0; curr_a
3e80: 74 74 72 5f 69 64 78 20 3c 20 28 73 69 7a 65 6f ttr_idx < (sizeo
3e90: 66 28 74 65 6d 70 6c 61 74 65 29 20 2f 20 73 69 f(template) / si
3ea0: 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65 5b 30 5d zeof(template[0]
3eb0: 29 29 3b 20 63 75 72 72 5f 61 74 74 72 5f 69 64 )); curr_attr_id
3ec0: 78 2b 2b 29 20 7b 0a 09 09 09 09 09 63 75 72 72 x++) {......curr
3ed0: 5f 61 74 74 72 20 3d 20 26 74 65 6d 70 6c 61 74 _attr = &templat
3ee0: 65 5b 63 75 72 72 5f 61 74 74 72 5f 69 64 78 5d e[curr_attr_idx]
3ef0: 3b 0a 09 09 09 09 09 69 66 20 28 63 75 72 72 5f ;......if (curr_
3f00: 61 74 74 72 2d 3e 70 56 61 6c 75 65 29 20 7b 0a attr->pValue) {.
3f10: 09 09 09 09 09 09 66 72 65 65 28 63 75 72 72 5f ......free(curr_
3f20: 61 74 74 72 2d 3e 70 56 61 6c 75 65 29 3b 0a 09 attr->pValue);..
3f30: 09 09 09 09 7d 0a 0a 09 09 09 09 09 63 75 72 72 ....}.......curr
3f40: 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 20 3d 20 _attr->pValue =
3f50: 4e 55 4c 4c 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 NULL;.....}.....
3f60: 09 63 68 6b 5f 72 76 20 3d 20 43 5f 47 65 74 41 .chk_rv = C_GetA
3f70: 74 74 72 69 62 75 74 65 56 61 6c 75 65 28 68 53 ttributeValue(hS
3f80: 65 73 73 69 6f 6e 2c 20 68 4f 62 6a 65 63 74 2c ession, hObject,
3f90: 20 26 74 65 6d 70 6c 61 74 65 5b 30 5d 2c 20 73 &template[0], s
3fa0: 69 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65 29 20 izeof(template)
3fb0: 2f 20 73 69 7a 65 6f 66 28 74 65 6d 70 6c 61 74 / sizeof(templat
3fc0: 65 5b 30 5d 29 29 3b 0a 09 09 09 09 69 66 20 28 e[0]));.....if (
3fd0: 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 41 54 chk_rv == CKR_AT
3fe0: 54 52 49 42 55 54 45 5f 54 59 50 45 5f 49 4e 56 TRIBUTE_TYPE_INV
3ff0: 41 4c 49 44 20 7c 7c 20 63 68 6b 5f 72 76 20 3d ALID || chk_rv =
4000: 3d 20 43 4b 52 5f 41 54 54 52 49 42 55 54 45 5f = CKR_ATTRIBUTE_
4010: 53 45 4e 53 49 54 49 56 45 20 7c 7c 20 63 68 6b SENSITIVE || chk
4020: 5f 72 76 20 3d 3d 20 43 4b 52 5f 42 55 46 46 45 _rv == CKR_BUFFE
4030: 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a 09 R_TOO_SMALL) {..
4040: 09 09 09 09 63 68 6b 5f 72 76 20 3d 20 43 4b 52 ....chk_rv = CKR
4050: 5f 4f 4b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 _OK;.....}......
4060: 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d 20 43 4b if (chk_rv == CK
4070: 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 09 66 6f 72 R_OK) {......for
4080: 20 28 63 75 72 72 5f 61 74 74 72 5f 69 64 78 20 (curr_attr_idx
4090: 3d 20 30 3b 20 63 75 72 72 5f 61 74 74 72 5f 69 = 0; curr_attr_i
40a0: 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 74 65 6d dx < (sizeof(tem
40b0: 70 6c 61 74 65 29 20 2f 20 73 69 7a 65 6f 66 28 plate) / sizeof(
40c0: 74 65 6d 70 6c 61 74 65 5b 30 5d 29 29 3b 20 63 template[0])); c
40d0: 75 72 72 5f 61 74 74 72 5f 69 64 78 2b 2b 29 20 urr_attr_idx++)
40e0: 7b 0a 09 09 09 09 09 09 63 75 72 72 5f 61 74 74 {.......curr_att
40f0: 72 20 3d 20 26 74 65 6d 70 6c 61 74 65 5b 63 75 r = &template[cu
4100: 72 72 5f 61 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 rr_attr_idx];...
4110: 09 09 09 09 09 69 66 20 28 28 28 43 4b 5f 4c 4f .....if (((CK_LO
4120: 4e 47 29 20 63 75 72 72 5f 61 74 74 72 2d 3e 75 NG) curr_attr->u
4130: 6c 56 61 6c 75 65 4c 65 6e 29 20 21 3d 20 28 28 lValueLen) != ((
4140: 43 4b 5f 4c 4f 4e 47 29 20 2d 31 29 29 20 7b 0a CK_LONG) -1)) {.
4150: 09 09 09 09 09 09 09 63 75 72 72 5f 61 74 74 72 .......curr_attr
4160: 2d 3e 70 56 61 6c 75 65 20 3d 20 6d 61 6c 6c 6f ->pValue = mallo
4170: 63 28 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 c(curr_attr->ulV
4180: 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 09 09 09 09 alueLen);.......
4190: 7d 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 63 }......}.......c
41a0: 68 6b 5f 72 76 20 3d 20 43 5f 47 65 74 41 74 74 hk_rv = C_GetAtt
41b0: 72 69 62 75 74 65 56 61 6c 75 65 28 68 53 65 73 ributeValue(hSes
41c0: 73 69 6f 6e 2c 20 68 4f 62 6a 65 63 74 2c 20 26 sion, hObject, &
41d0: 74 65 6d 70 6c 61 74 65 5b 30 5d 2c 20 73 69 7a template[0], siz
41e0: 65 6f 66 28 74 65 6d 70 6c 61 74 65 29 20 2f 20 eof(template) /
41f0: 73 69 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65 5b sizeof(template[
4200: 30 5d 29 29 3b 0a 09 09 09 09 09 69 66 20 28 63 0]));......if (c
4210: 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b 20 hk_rv == CKR_OK
4220: 7c 7c 20 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 || chk_rv == CKR
4230: 5f 41 54 54 52 49 42 55 54 45 5f 53 45 4e 53 49 _ATTRIBUTE_SENSI
4240: 54 49 56 45 20 7c 7c 20 63 68 6b 5f 72 76 20 3d TIVE || chk_rv =
4250: 3d 20 43 4b 52 5f 41 54 54 52 49 42 55 54 45 5f = CKR_ATTRIBUTE_
4260: 54 59 50 45 5f 49 4e 56 41 4c 49 44 20 7c 7c 20 TYPE_INVALID ||
4270: 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 42 55 chk_rv == CKR_BU
4280: 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 20 FFER_TOO_SMALL)
4290: 7b 0a 09 09 09 09 09 09 66 6f 72 20 28 63 75 72 {.......for (cur
42a0: 72 5f 61 74 74 72 5f 69 64 78 20 3d 20 30 3b 20 r_attr_idx = 0;
42b0: 63 75 72 72 5f 61 74 74 72 5f 69 64 78 20 3c 20 curr_attr_idx <
42c0: 28 73 69 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65 (sizeof(template
42d0: 29 20 2f 20 73 69 7a 65 6f 66 28 74 65 6d 70 6c ) / sizeof(templ
42e0: 61 74 65 5b 30 5d 29 29 3b 20 63 75 72 72 5f 61 ate[0])); curr_a
42f0: 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 ttr_idx++) {....
4300: 09 09 09 09 63 75 72 72 5f 61 74 74 72 20 3d 20 ....curr_attr =
4310: 26 74 65 6d 70 6c 61 74 65 5b 63 75 72 72 5f 61 &template[curr_a
4320: 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 09 09 09 ttr_idx];.......
4330: 09 09 69 66 20 28 63 75 72 72 5f 61 74 74 72 2d ..if (curr_attr-
4340: 3e 70 56 61 6c 75 65 29 20 7b 0a 09 09 09 09 09 >pValue) {......
4350: 09 09 09 73 77 69 74 63 68 20 28 63 75 72 72 5f ...switch (curr_
4360: 61 74 74 72 2d 3e 74 79 70 65 29 20 7b 0a 09 09 attr->type) {...
4370: 09 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f .......case CKA_
4380: 4c 41 42 45 4c 3a 0a 09 09 09 09 09 09 09 09 09 LABEL:..........
4390: 09 70 72 69 6e 74 66 28 22 20 20 20 20 5b 25 6c .printf(" [%l
43a0: 75 5d 20 25 32 30 73 3a 20 25 2e 2a 73 5c 6e 22 u] %20s: %.*s\n"
43b0: 2c 20 68 4f 62 6a 65 63 74 2c 20 70 6b 63 73 31 , hObject, pkcs1
43c0: 31 5f 61 74 74 72 69 62 75 74 65 5f 74 6f 5f 6e 1_attribute_to_n
43d0: 61 6d 65 28 63 75 72 72 5f 61 74 74 72 2d 3e 74 ame(curr_attr->t
43e0: 79 70 65 29 2c 20 28 69 6e 74 29 20 63 75 72 72 ype), (int) curr
43f0: 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 _attr->ulValueLe
4400: 6e 2c 20 28 63 68 61 72 20 2a 29 20 63 75 72 72 n, (char *) curr
4410: 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 29 3b 0a _attr->pValue);.
4420: 09 09 09 09 09 09 09 09 09 09 62 72 65 61 6b 3b ..........break;
4430: 0a 09 09 09 09 09 09 09 09 09 63 61 73 65 20 43 ..........case C
4440: 4b 41 5f 43 4c 41 53 53 3a 0a 09 09 09 09 09 09 KA_CLASS:.......
4450: 09 09 09 09 6f 62 6a 65 63 74 43 6c 61 73 73 20 ....objectClass
4460: 3d 20 2a 28 28 43 4b 5f 4f 42 4a 45 43 54 5f 43 = *((CK_OBJECT_C
4470: 4c 41 53 53 20 2a 29 20 63 75 72 72 5f 61 74 74 LASS *) curr_att
4480: 72 2d 3e 70 56 61 6c 75 65 29 3b 0a 0a 09 09 09 r->pValue);.....
4490: 09 09 09 09 09 09 09 69 66 20 28 6f 62 6a 65 63 .......if (objec
44a0: 74 43 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 50 52 tClass == CKO_PR
44b0: 49 56 41 54 45 5f 4b 45 59 29 20 7b 0a 09 09 09 IVATE_KEY) {....
44c0: 09 09 09 09 09 09 09 09 2a 70 72 69 76 61 74 65 ........*private
44d0: 4b 65 79 4f 62 6a 65 63 74 73 20 3d 20 68 4f 62 KeyObjects = hOb
44e0: 6a 65 63 74 3b 0a 09 09 09 09 09 09 09 09 09 09 ject;...........
44f0: 09 70 72 69 76 61 74 65 4b 65 79 4f 62 6a 65 63 .privateKeyObjec
4500: 74 73 2b 2b 3b 0a 09 09 09 09 09 09 09 09 09 09 ts++;...........
4510: 7d 0a 09 09 09 09 09 09 09 09 09 63 61 73 65 20 }..........case
4520: 43 4b 41 5f 54 4f 4b 45 4e 3a 0a 09 09 09 09 09 CKA_TOKEN:......
4530: 09 09 09 09 63 61 73 65 20 43 4b 41 5f 49 44 3a ....case CKA_ID:
4540: 0a 09 09 09 09 09 09 09 09 09 63 61 73 65 20 43 ..........case C
4550: 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52 KA_SERIAL_NUMBER
4560: 3a 0a 09 09 09 09 09 09 09 09 09 63 61 73 65 20 :..........case
4570: 43 4b 41 5f 50 52 49 56 41 54 45 3a 0a 09 09 09 CKA_PRIVATE:....
4580: 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 43 ......case CKA_C
4590: 45 52 54 49 46 49 43 41 54 45 5f 54 59 50 45 3a ERTIFICATE_TYPE:
45a0: 0a 09 09 09 09 09 09 09 09 09 63 61 73 65 20 43 ..........case C
45b0: 4b 41 5f 4b 45 59 5f 54 59 50 45 3a 0a 09 09 09 KA_KEY_TYPE:....
45c0: 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 53 ......case CKA_S
45d0: 49 47 4e 3a 0a 09 09 09 09 09 09 09 09 09 63 61 IGN:..........ca
45e0: 73 65 20 43 4b 41 5f 44 45 43 52 59 50 54 3a 0a se CKA_DECRYPT:.
45f0: 09 09 09 09 09 09 09 09 09 63 61 73 65 20 43 4b .........case CK
4600: 41 5f 54 52 55 53 54 45 44 3a 0a 09 09 09 09 09 A_TRUSTED:......
4610: 09 09 09 09 63 61 73 65 20 43 4b 41 5f 43 45 52 ....case CKA_CER
4620: 54 5f 4d 44 35 5f 48 41 53 48 3a 0a 09 09 09 09 T_MD5_HASH:.....
4630: 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 43 45 .....case CKA_CE
4640: 52 54 5f 53 48 41 31 5f 48 41 53 48 3a 0a 0a 09 RT_SHA1_HASH:...
4650: 09 09 09 09 09 09 09 09 09 70 75 63 56 61 6c 75 .........pucValu
4660: 65 20 3d 20 63 75 72 72 5f 61 74 74 72 2d 3e 70 e = curr_attr->p
4670: 56 61 6c 75 65 3b 0a 0a 09 09 09 09 09 09 09 09 Value;..........
4680: 09 09 70 72 69 6e 74 66 28 22 20 20 20 20 5b 25 ..printf(" [%
4690: 6c 75 5d 20 25 32 30 73 3a 20 22 2c 20 68 4f 62 lu] %20s: ", hOb
46a0: 6a 65 63 74 2c 20 70 6b 63 73 31 31 5f 61 74 74 ject, pkcs11_att
46b0: 72 69 62 75 74 65 5f 74 6f 5f 6e 61 6d 65 28 63 ribute_to_name(c
46c0: 75 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 29 29 urr_attr->type))
46d0: 3b 0a 0a 09 09 09 09 09 09 09 09 09 09 66 6f 72 ;............for
46e0: 20 28 62 79 74 65 5f 69 64 78 20 3d 20 30 3b 20 (byte_idx = 0;
46f0: 62 79 74 65 5f 69 64 78 20 3c 20 63 75 72 72 5f byte_idx < curr_
4700: 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e attr->ulValueLen
4710: 3b 20 62 79 74 65 5f 69 64 78 2b 2b 29 20 7b 0a ; byte_idx++) {.
4720: 09 09 09 09 09 09 09 09 09 09 09 70 72 69 6e 74 ...........print
4730: 66 28 22 25 30 32 78 20 22 2c 20 28 75 6e 73 69 f("%02x ", (unsi
4740: 67 6e 65 64 20 69 6e 74 29 20 70 75 63 56 61 6c gned int) pucVal
4750: 75 65 5b 62 79 74 65 5f 69 64 78 5d 29 3b 0a 09 ue[byte_idx]);..
4760: 09 09 09 09 09 09 09 09 09 7d 0a 0a 09 09 09 09 .........}......
4770: 09 09 09 09 09 09 70 72 69 6e 74 66 28 22 3b 3b ......printf(";;
4780: 20 25 70 2f 25 6c 75 5c 6e 22 2c 20 63 75 72 72 %p/%lu\n", curr
4790: 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 2c 20 63 _attr->pValue, c
47a0: 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 urr_attr->ulValu
47b0: 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 09 09 09 09 eLen);..........
47c0: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 09 09 ..break;........
47d0: 09 09 63 61 73 65 20 43 4b 41 5f 53 55 42 4a 45 ..case CKA_SUBJE
47e0: 43 54 3a 0a 09 09 09 09 09 09 09 09 09 63 61 73 CT:..........cas
47f0: 65 20 43 4b 41 5f 49 53 53 55 45 52 3a 0a 09 09 e CKA_ISSUER:...
4800: 09 09 09 09 09 09 09 09 70 75 63 56 61 6c 75 65 ........pucValue
4810: 20 3d 20 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 = curr_attr->pV
4820: 61 6c 75 65 3b 0a 0a 09 09 09 09 09 09 09 09 09 alue;...........
4830: 09 70 72 69 6e 74 66 28 22 20 20 20 20 5b 25 6c .printf(" [%l
4840: 75 5d 20 25 32 30 73 3a 20 22 2c 20 68 4f 62 6a u] %20s: ", hObj
4850: 65 63 74 2c 20 70 6b 63 73 31 31 5f 61 74 74 72 ect, pkcs11_attr
4860: 69 62 75 74 65 5f 74 6f 5f 6e 61 6d 65 28 63 75 ibute_to_name(cu
4870: 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 29 29 3b rr_attr->type));
4880: 0a 0a 09 09 09 09 09 09 09 09 09 09 66 6f 72 20 ............for
4890: 28 62 79 74 65 5f 69 64 78 20 3d 20 30 3b 20 62 (byte_idx = 0; b
48a0: 79 74 65 5f 69 64 78 20 3c 20 63 75 72 72 5f 61 yte_idx < curr_a
48b0: 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 3b ttr->ulValueLen;
48c0: 20 62 79 74 65 5f 69 64 78 2b 2b 29 20 7b 0a 09 byte_idx++) {..
48d0: 09 09 09 09 09 09 09 09 09 09 70 72 69 6e 74 66 ..........printf
48e0: 28 22 5c 5c 78 25 30 32 78 22 2c 20 28 75 6e 73 ("\\x%02x", (uns
48f0: 69 67 6e 65 64 20 69 6e 74 29 20 70 75 63 56 61 igned int) pucVa
4900: 6c 75 65 5b 62 79 74 65 5f 69 64 78 5d 29 3b 0a lue[byte_idx]);.
4910: 09 09 09 09 09 09 09 09 09 09 7d 0a 0a 09 09 09 ..........}.....
4920: 09 09 09 09 09 09 09 70 72 69 6e 74 66 28 22 20 .......printf("
4930: 3b 3b 20 25 70 2f 25 6c 75 5c 6e 22 2c 20 63 75 ;; %p/%lu\n", cu
4940: 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 2c rr_attr->pValue,
4950: 20 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 curr_attr->ulVa
4960: 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 09 09 lueLen);........
4970: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 ....break;......
4980: 09 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 ....case CKA_TRU
4990: 53 54 5f 43 4c 49 45 4e 54 5f 41 55 54 48 3a 0a ST_CLIENT_AUTH:.
49a0: 09 09 09 09 09 09 09 09 09 63 61 73 65 20 43 4b .........case CK
49b0: 41 5f 54 52 55 53 54 5f 43 4f 44 45 5f 53 49 47 A_TRUST_CODE_SIG
49c0: 4e 49 4e 47 3a 0a 09 09 09 09 09 09 09 09 09 63 NING:..........c
49d0: 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 43 52 ase CKA_TRUST_CR
49e0: 4c 5f 53 49 47 4e 3a 0a 09 09 09 09 09 09 09 09 L_SIGN:.........
49f0: 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f .case CKA_TRUST_
4a00: 44 41 54 41 5f 45 4e 43 49 50 48 45 52 4d 45 4e DATA_ENCIPHERMEN
4a10: 54 3a 0a 09 09 09 09 09 09 09 09 09 63 61 73 65 T:..........case
4a20: 20 43 4b 41 5f 54 52 55 53 54 5f 44 49 47 49 54 CKA_TRUST_DIGIT
4a30: 41 4c 5f 53 49 47 4e 41 54 55 52 45 3a 0a 09 09 AL_SIGNATURE:...
4a40: 09 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f .......case CKA_
4a50: 54 52 55 53 54 5f 45 4d 41 49 4c 5f 50 52 4f 54 TRUST_EMAIL_PROT
4a60: 45 43 54 49 4f 4e 3a 0a 09 09 09 09 09 09 09 09 ECTION:.........
4a70: 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f .case CKA_TRUST_
4a80: 4b 45 59 5f 41 47 52 45 45 4d 45 4e 54 3a 0a 09 KEY_AGREEMENT:..
4a90: 09 09 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 ........case CKA
4aa0: 5f 54 52 55 53 54 5f 4b 45 59 5f 43 45 52 54 5f _TRUST_KEY_CERT_
4ab0: 53 49 47 4e 3a 0a 09 09 09 09 09 09 09 09 09 63 SIGN:..........c
4ac0: 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 4b 45 ase CKA_TRUST_KE
4ad0: 59 5f 45 4e 43 49 50 48 45 52 4d 45 4e 54 3a 0a Y_ENCIPHERMENT:.
4ae0: 09 09 09 09 09 09 09 09 09 63 61 73 65 20 43 4b .........case CK
4af0: 41 5f 54 52 55 53 54 5f 4e 4f 4e 5f 52 45 50 55 A_TRUST_NON_REPU
4b00: 44 49 41 54 49 4f 4e 3a 0a 09 09 09 09 09 09 09 DIATION:........
4b10: 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 ..case CKA_TRUST
4b20: 5f 53 45 52 56 45 52 5f 41 55 54 48 3a 0a 09 09 _SERVER_AUTH:...
4b30: 09 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 ........break;..
4b40: 09 09 09 09 09 09 09 09 64 65 66 61 75 6c 74 3a ........default:
4b50: 0a 09 09 09 09 09 09 09 09 09 09 70 72 69 6e 74 ...........print
4b60: 66 28 22 20 20 20 20 5b 25 6c 75 5d 20 25 32 30 f(" [%lu] %20
4b70: 73 3a 20 25 70 2f 25 6c 75 5c 6e 22 2c 20 68 4f s: %p/%lu\n", hO
4b80: 62 6a 65 63 74 2c 20 70 6b 63 73 31 31 5f 61 74 bject, pkcs11_at
4b90: 74 72 69 62 75 74 65 5f 74 6f 5f 6e 61 6d 65 28 tribute_to_name(
4ba0: 63 75 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 29 curr_attr->type)
4bb0: 2c 20 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 , curr_attr->pVa
4bc0: 6c 75 65 2c 20 63 75 72 72 5f 61 74 74 72 2d 3e lue, curr_attr->
4bd0: 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 ulValueLen);....
4be0: 09 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 ........break;..
4bf0: 09 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09 09 .......}........
4c00: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 09 } else {........
4c10: 09 70 72 69 6e 74 66 28 22 20 20 20 20 5b 25 6c .printf(" [%l
4c20: 75 5d 20 25 32 30 73 3a 20 28 6e 6f 74 20 66 6f u] %20s: (not fo
4c30: 75 6e 64 29 5c 6e 22 2c 20 68 4f 62 6a 65 63 74 und)\n", hObject
4c40: 2c 20 70 6b 63 73 31 31 5f 61 74 74 72 69 62 75 , pkcs11_attribu
4c50: 74 65 5f 74 6f 5f 6e 61 6d 65 28 63 75 72 72 5f te_to_name(curr_
4c60: 61 74 74 72 2d 3e 74 79 70 65 29 29 3b 0a 09 09 attr->type));...
4c70: 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 09 09 66 .....}.........f
4c80: 72 65 65 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 ree(curr_attr->p
4c90: 56 61 6c 75 65 29 3b 0a 09 09 09 09 09 09 09 63 Value);........c
4ca0: 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 urr_attr->pValue
4cb0: 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 09 09 7d = NULL;.......}
4cc0: 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 ......} else {..
4cd0: 09 09 09 09 09 70 72 69 6e 74 66 28 22 47 65 74 .....printf("Get
4ce0: 41 74 74 72 69 62 75 74 65 56 61 6c 75 65 28 29 AttributeValue()
4cf0: 2f 32 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a /2 failed.\n");.
4d00: 09 09 09 09 09 7d 0a 09 09 09 09 7d 20 65 6c 73 .....}.....} els
4d10: 65 20 7b 0a 09 09 09 09 09 70 72 69 6e 74 66 28 e {......printf(
4d20: 22 47 65 74 41 74 74 72 69 62 75 74 65 56 61 6c "GetAttributeVal
4d30: 75 65 28 68 4f 62 6a 65 63 74 3d 25 6c 75 29 2f ue(hObject=%lu)/
4d40: 31 20 66 61 69 6c 65 64 20 28 72 76 20 3d 20 25 1 failed (rv = %
4d50: 6c 75 29 2e 5c 6e 22 2c 20 28 75 6e 73 69 67 6e lu).\n", (unsign
4d60: 65 64 20 6c 6f 6e 67 29 20 68 4f 62 6a 65 63 74 ed long) hObject
4d70: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long
4d80: 29 20 63 68 6b 5f 72 76 29 3b 0a 09 09 09 09 7d ) chk_rv);.....}
4d90: 0a 0a 09 09 09 7d 0a 0a 09 09 09 63 68 6b 5f 72 .....}.....chk_r
4da0: 76 20 3d 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 v = C_FindObject
4db0: 73 46 69 6e 61 6c 28 68 53 65 73 73 69 6f 6e 29 sFinal(hSession)
4dc0: 3b 0a 09 09 09 69 66 20 28 63 68 6b 5f 72 76 20 ;....if (chk_rv
4dd0: 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 != CKR_OK) {....
4de0: 09 70 72 69 6e 74 66 28 22 46 69 6e 64 4f 62 6a .printf("FindObj
4df0: 65 63 74 73 46 69 6e 61 6c 28 29 20 66 61 69 6c ectsFinal() fail
4e00: 65 64 2e 5c 6e 22 29 3b 0a 09 09 09 7d 0a 09 09 ed.\n");....}...
4e10: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 70 72 69 6e } else {....prin
4e20: 74 66 28 22 46 69 6e 64 4f 62 6a 65 63 74 73 49 tf("FindObjectsI
4e30: 6e 69 74 28 29 20 66 61 69 6c 65 64 2e 5c 6e 22 nit() failed.\n"
4e40: 29 3b 0a 09 09 7d 0a 0a 09 09 70 72 69 6e 74 66 );...}....printf
4e50: 28 22 2d 2d 2d 20 4f 70 65 72 61 74 69 6f 6e 73 ("--- Operations
4e60: 20 2d 2d 2d 5c 6e 22 29 3b 0a 0a 09 09 66 6f 72 ---\n");....for
4e70: 20 28 63 75 72 72 50 72 69 76 4b 65 79 20 3d 20 (currPrivKey =
4e80: 70 72 69 76 61 74 65 4b 65 79 4f 62 6a 65 63 74 privateKeyObject
4e90: 73 5f 72 6f 6f 74 3b 20 2a 63 75 72 72 50 72 69 s_root; *currPri
4ea0: 76 4b 65 79 20 21 3d 20 43 4b 5f 49 4e 56 41 4c vKey != CK_INVAL
4eb0: 49 44 5f 48 41 4e 44 4c 45 3b 20 63 75 72 72 50 ID_HANDLE; currP
4ec0: 72 69 76 4b 65 79 2b 2b 29 20 7b 0a 09 09 09 63 rivKey++) {....c
4ed0: 68 6b 5f 72 76 20 3d 20 43 5f 53 69 67 6e 49 6e hk_rv = C_SignIn
4ee0: 69 74 28 68 53 65 73 73 69 6f 6e 2c 20 26 6d 65 it(hSession, &me
4ef0: 63 68 61 6e 69 73 6d 2c 20 2a 63 75 72 72 50 72 chanism, *currPr
4f00: 69 76 4b 65 79 29 3b 0a 09 09 09 69 66 20 28 63 ivKey);....if (c
4f10: 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29 hk_rv == CKR_OK)
4f20: 20 7b 0a 09 09 09 09 73 69 67 6e 61 74 75 72 65 {.....signature
4f30: 5f 6c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 73 69 _len = sizeof(si
4f40: 67 6e 61 74 75 72 65 29 3b 0a 0a 09 09 09 09 63 gnature);......c
4f50: 68 6b 5f 72 76 20 3d 20 43 5f 53 69 67 6e 28 68 hk_rv = C_Sign(h
4f60: 53 65 73 73 69 6f 6e 2c 20 28 43 4b 5f 42 59 54 Session, (CK_BYT
4f70: 45 5f 50 54 52 29 20 22 54 65 73 74 22 2c 20 73 E_PTR) "Test", s
4f80: 74 72 6c 65 6e 28 22 54 65 73 74 22 29 2c 20 28 trlen("Test"), (
4f90: 43 4b 5f 42 59 54 45 5f 50 54 52 29 20 26 73 69 CK_BYTE_PTR) &si
4fa0: 67 6e 61 74 75 72 65 2c 20 26 73 69 67 6e 61 74 gnature, &signat
4fb0: 75 72 65 5f 6c 65 6e 29 3b 0a 09 09 09 09 69 66 ure_len);.....if
4fc0: 20 28 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f (chk_rv == CKR_
4fd0: 4f 4b 29 20 7b 0a 09 09 09 09 09 70 72 69 6e 74 OK) {......print
4fe0: 66 28 22 5b 25 30 34 6c 75 2f 25 30 32 6c 78 5d f("[%04lu/%02lx]
4ff0: 20 53 69 67 6e 61 74 75 72 65 3a 20 22 2c 20 28 Signature: ", (
5000: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a unsigned long) *
5010: 63 75 72 72 50 72 69 76 4b 65 79 2c 20 28 75 6e currPrivKey, (un
5020: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6d 65 63 signed long) mec
5030: 68 61 6e 69 73 6d 2e 6d 65 63 68 61 6e 69 73 6d hanism.mechanism
5040: 29 3b 0a 0a 09 09 09 09 09 66 6f 72 20 28 62 79 );.......for (by
5050: 74 65 5f 69 64 78 20 3d 20 30 3b 20 62 79 74 65 te_idx = 0; byte
5060: 5f 69 64 78 20 3c 20 73 69 67 6e 61 74 75 72 65 _idx < signature
5070: 5f 6c 65 6e 3b 20 62 79 74 65 5f 69 64 78 2b 2b _len; byte_idx++
5080: 29 20 7b 0a 09 09 09 09 09 09 70 72 69 6e 74 66 ) {.......printf
5090: 28 22 25 30 32 78 20 22 2c 20 28 75 6e 73 69 67 ("%02x ", (unsig
50a0: 6e 65 64 20 69 6e 74 29 20 73 69 67 6e 61 74 75 ned int) signatu
50b0: 72 65 5b 62 79 74 65 5f 69 64 78 5d 29 3b 0a 09 re[byte_idx]);..
50c0: 09 09 09 09 7d 0a 0a 09 09 09 09 09 70 72 69 6e ....}.......prin
50d0: 74 66 28 22 5c 6e 22 29 3b 0a 09 09 09 09 7d 20 tf("\n");.....}
50e0: 65 6c 73 65 20 7b 0a 09 09 09 09 09 70 72 69 6e else {......prin
50f0: 74 66 28 22 53 69 67 6e 28 29 20 66 61 69 6c 65 tf("Sign() faile
5100: 64 2e 5c 6e 22 29 3b 0a 09 09 09 09 7d 0a 09 09 d.\n");.....}...
5110: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 70 72 .} else {.....pr
5120: 69 6e 74 66 28 22 53 69 67 6e 49 6e 69 74 28 29 intf("SignInit()
5130: 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09 failed.\n");...
5140: 09 7d 0a 09 09 7d 0a 0a 09 09 66 6f 72 20 28 63 .}...}....for (c
5150: 75 72 72 50 72 69 76 4b 65 79 20 3d 20 70 72 69 urrPrivKey = pri
5160: 76 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 5f 72 vateKeyObjects_r
5170: 6f 6f 74 3b 20 2a 63 75 72 72 50 72 69 76 4b 65 oot; *currPrivKe
5180: 79 20 21 3d 20 43 4b 5f 49 4e 56 41 4c 49 44 5f y != CK_INVALID_
5190: 48 41 4e 44 4c 45 3b 20 63 75 72 72 50 72 69 76 HANDLE; currPriv
51a0: 4b 65 79 2b 2b 29 20 7b 0a 09 09 09 63 68 6b 5f Key++) {....chk_
51b0: 72 76 20 3d 20 43 5f 45 6e 63 72 79 70 74 49 6e rv = C_EncryptIn
51c0: 69 74 28 68 53 65 73 73 69 6f 6e 2c 20 26 6d 65 it(hSession, &me
51d0: 63 68 61 6e 69 73 6d 2c 20 2a 63 75 72 72 50 72 chanism, *currPr
51e0: 69 76 4b 65 79 29 3b 0a 09 09 09 69 66 20 28 63 ivKey);....if (c
51f0: 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29 hk_rv == CKR_OK)
5200: 20 7b 0a 09 09 09 09 65 6e 63 72 79 70 74 65 64 {.....encrypted
5210: 5f 62 75 66 6c 65 6e 20 3d 20 73 69 7a 65 6f 66 _buflen = sizeof
5220: 28 65 6e 63 72 79 70 74 65 64 5f 62 75 66 29 3b (encrypted_buf);
5230: 0a 0a 09 09 09 09 63 68 6b 5f 72 76 20 3d 20 43 ......chk_rv = C
5240: 5f 45 6e 63 72 79 70 74 28 68 53 65 73 73 69 6f _Encrypt(hSessio
5250: 6e 2c 20 28 43 4b 5f 42 59 54 45 5f 50 54 52 29 n, (CK_BYTE_PTR)
5260: 20 22 54 65 73 74 22 2c 20 73 74 72 6c 65 6e 28 "Test", strlen(
5270: 22 54 65 73 74 22 29 2c 20 65 6e 63 72 79 70 74 "Test"), encrypt
5280: 65 64 5f 62 75 66 2c 20 26 65 6e 63 72 79 70 74 ed_buf, &encrypt
5290: 65 64 5f 62 75 66 6c 65 6e 29 3b 0a 09 09 09 09 ed_buflen);.....
52a0: 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d 20 43 4b if (chk_rv == CK
52b0: 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 09 70 72 69 R_OK) {......pri
52c0: 6e 74 66 28 22 5b 25 30 34 6c 75 2f 25 30 32 6c ntf("[%04lu/%02l
52d0: 78 5d 20 45 6e 63 72 79 70 74 65 64 28 54 65 73 x] Encrypted(Tes
52e0: 74 29 3a 20 22 2c 20 28 75 6e 73 69 67 6e 65 64 t): ", (unsigned
52f0: 20 6c 6f 6e 67 29 20 2a 63 75 72 72 50 72 69 76 long) *currPriv
5300: 4b 65 79 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c Key, (unsigned l
5310: 6f 6e 67 29 20 6d 65 63 68 61 6e 69 73 6d 2e 6d ong) mechanism.m
5320: 65 63 68 61 6e 69 73 6d 29 3b 0a 0a 09 09 09 09 echanism);......
5330: 09 66 6f 72 20 28 62 79 74 65 5f 69 64 78 20 3d .for (byte_idx =
5340: 20 30 3b 20 62 79 74 65 5f 69 64 78 20 3c 20 65 0; byte_idx < e
5350: 6e 63 72 79 70 74 65 64 5f 62 75 66 6c 65 6e 3b ncrypted_buflen;
5360: 20 62 79 74 65 5f 69 64 78 2b 2b 29 20 7b 0a 09 byte_idx++) {..
5370: 09 09 09 09 09 70 72 69 6e 74 66 28 22 25 30 32 .....printf("%02
5380: 78 20 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 69 x ", (unsigned i
5390: 6e 74 29 20 65 6e 63 72 79 70 74 65 64 5f 62 75 nt) encrypted_bu
53a0: 66 5b 62 79 74 65 5f 69 64 78 5d 29 3b 0a 09 09 f[byte_idx]);...
53b0: 09 09 09 7d 0a 0a 09 09 09 09 09 70 72 69 6e 74 ...}.......print
53c0: 66 28 22 5c 6e 22 29 3b 0a 09 09 09 09 7d 20 65 f("\n");.....} e
53d0: 6c 73 65 20 7b 0a 09 09 09 09 09 70 72 69 6e 74 lse {......print
53e0: 66 28 22 45 6e 63 72 79 70 74 28 29 20 66 61 69 f("Encrypt() fai
53f0: 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09 09 09 7d 0a led.\n");.....}.
5400: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 ...} else {.....
5410: 70 72 69 6e 74 66 28 22 45 6e 63 72 79 70 74 49 printf("EncryptI
5420: 6e 69 74 28 29 20 66 61 69 6c 65 64 2e 5c 6e 22 nit() failed.\n"
5430: 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 66 );....}...}....f
5440: 6f 72 20 28 63 75 72 72 50 72 69 76 4b 65 79 20 or (currPrivKey
5450: 3d 20 70 72 69 76 61 74 65 4b 65 79 4f 62 6a 65 = privateKeyObje
5460: 63 74 73 5f 72 6f 6f 74 3b 20 2a 63 75 72 72 50 cts_root; *currP
5470: 72 69 76 4b 65 79 20 21 3d 20 43 4b 5f 49 4e 56 rivKey != CK_INV
5480: 41 4c 49 44 5f 48 41 4e 44 4c 45 3b 20 63 75 72 ALID_HANDLE; cur
5490: 72 50 72 69 76 4b 65 79 2b 2b 29 20 7b 0a 09 09 rPrivKey++) {...
54a0: 09 63 68 6b 5f 72 76 20 3d 20 43 5f 44 65 63 72 .chk_rv = C_Decr
54b0: 79 70 74 49 6e 69 74 28 68 53 65 73 73 69 6f 6e yptInit(hSession
54c0: 2c 20 26 6d 65 63 68 61 6e 69 73 6d 2c 20 2a 63 , &mechanism, *c
54d0: 75 72 72 50 72 69 76 4b 65 79 29 3b 0a 09 09 09 urrPrivKey);....
54e0: 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d 20 43 4b if (chk_rv == CK
54f0: 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 64 65 63 72 R_OK) {.....decr
5500: 79 70 74 65 64 5f 62 75 66 6c 65 6e 20 3d 20 73 ypted_buflen = s
5510: 69 7a 65 6f 66 28 64 65 63 72 79 70 74 65 64 5f izeof(decrypted_
5520: 62 75 66 29 3b 0a 0a 09 09 09 09 63 68 6b 5f 72 buf);......chk_r
5530: 76 20 3d 20 43 5f 44 65 63 72 79 70 74 28 68 53 v = C_Decrypt(hS
5540: 65 73 73 69 6f 6e 2c 20 28 43 4b 5f 42 59 54 45 ession, (CK_BYTE
5550: 5f 50 54 52 29 20 22 5c 78 34 63 5c 78 33 36 5c _PTR) "\x4c\x36\
5560: 78 30 66 5c 78 38 36 5c 78 32 64 5c 78 62 37 5c x0f\x86\x2d\xb7\
5570: 78 62 32 5c 78 34 36 5c 78 39 32 5c 78 31 31 5c xb2\x46\x92\x11\
5580: 78 37 65 5c 78 35 66 5c 78 64 31 5c 78 65 62 5c x7e\x5f\xd1\xeb\
5590: 78 32 63 5c 78 62 30 5c 78 64 62 5c 78 33 34 5c x2c\xb0\xdb\x34\
55a0: 78 36 30 5c 78 62 38 5c 78 30 63 5c 78 66 38 5c x60\xb8\x0c\xf8\
55b0: 78 32 37 5c 78 62 35 5c 78 66 62 5c 78 63 65 5c x27\xb5\xfb\xce\
55c0: 78 64 31 5c 78 66 34 5c 78 35 38 5c 78 61 33 5c xd1\xf4\x58\xa3\
55d0: 78 32 30 5c 78 35 32 5c 78 39 64 5c 78 39 37 5c x20\x52\x9d\x97\
55e0: 78 30 38 5c 78 64 38 5c 78 32 62 5c 78 35 65 5c x08\xd8\x2b\x5e\
55f0: 78 62 32 5c 78 33 37 5c 78 34 36 5c 78 37 32 5c xb2\x37\x46\x72\
5600: 78 34 35 5c 78 37 63 5c 78 36 36 5c 78 32 33 5c x45\x7c\x66\x23\
5610: 78 35 33 5c 78 62 35 5c 78 61 35 5c 78 31 36 5c x53\xb5\xa5\x16\
5620: 78 36 31 5c 78 39 36 5c 78 62 63 5c 78 35 63 5c x61\x96\xbc\x5c\
5630: 78 38 64 5c 78 38 35 5c 78 31 38 5c 78 32 34 5c x8d\x85\x18\x24\
5640: 78 63 66 5c 78 37 34 5c 78 37 66 5c 78 63 32 5c xcf\x74\x7f\xc2\
5650: 78 32 33 5c 78 31 35 5c 78 64 36 5c 78 34 32 5c x23\x15\xd6\x42\
5660: 78 37 32 5c 78 61 35 5c 78 32 62 5c 78 32 39 5c x72\xa5\x2b\x29\
5670: 78 32 39 5c 78 31 64 5c 78 61 36 5c 78 65 61 5c x29\x1d\xa6\xea\
5680: 78 32 62 5c 78 63 62 5c 78 35 37 5c 78 35 39 5c x2b\xcb\x57\x59\
5690: 78 62 33 5c 78 35 66 5c 78 65 32 5c 78 66 38 5c xb3\x5f\xe2\xf8\
56a0: 78 33 30 5c 78 31 32 5c 78 32 66 5c 78 31 62 5c x30\x12\x2f\x1b\
56b0: 78 66 61 5c 78 62 64 5c 78 61 39 5c 78 31 39 5c xfa\xbd\xa9\x19\
56c0: 78 65 66 5c 78 35 63 5c 78 62 62 5c 78 34 38 5c xef\x5c\xbb\x48\
56d0: 78 64 63 5c 78 32 38 5c 78 34 32 5c 78 64 64 5c xdc\x28\x42\xdd\
56e0: 78 39 30 5c 78 62 65 5c 78 36 33 5c 78 65 62 5c x90\xbe\x63\xeb\
56f0: 78 35 39 5c 78 30 63 5c 78 61 66 5c 78 35 39 5c x59\x0c\xaf\x59\
5700: 78 63 62 5c 78 65 34 5c 78 36 61 5c 78 66 32 5c xcb\xe4\x6a\xf2\
5710: 78 35 36 5c 78 32 34 5c 78 34 31 5c 78 63 32 5c x56\x24\x41\xc2\
5720: 78 37 37 5c 78 37 62 5c 78 63 39 5c 78 66 38 5c x77\x7b\xc9\xf8\
5730: 78 30 32 5c 78 30 66 5c 78 36 37 5c 78 33 64 5c x02\x0f\x67\x3d\
5740: 78 32 61 5c 78 39 38 5c 78 39 31 5c 78 31 34 5c x2a\x98\x91\x14\
5750: 78 61 32 5c 78 35 37 22 2c 20 31 32 38 2c 20 64 xa2\x57", 128, d
5760: 65 63 72 79 70 74 65 64 5f 62 75 66 2c 20 26 64 ecrypted_buf, &d
5770: 65 63 72 79 70 74 65 64 5f 62 75 66 6c 65 6e 29 ecrypted_buflen)
5780: 3b 0a 09 09 09 09 69 66 20 28 63 68 6b 5f 72 76 ;.....if (chk_rv
5790: 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 == CKR_OK) {...
57a0: 09 09 09 70 72 69 6e 74 66 28 22 5b 25 30 34 6c ...printf("[%04l
57b0: 75 2f 25 30 32 6c 78 5d 20 44 65 63 72 79 70 74 u/%02lx] Decrypt
57c0: 65 64 28 49 74 20 77 6f 72 6b 73 21 29 3a 20 22 ed(It works!): "
57d0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 , (unsigned long
57e0: 29 20 2a 63 75 72 72 50 72 69 76 4b 65 79 2c 20 ) *currPrivKey,
57f0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long)
5800: 6d 65 63 68 61 6e 69 73 6d 2e 6d 65 63 68 61 6e mechanism.mechan
5810: 69 73 6d 29 3b 0a 0a 09 09 09 09 09 66 6f 72 20 ism);.......for
5820: 28 62 79 74 65 5f 69 64 78 20 3d 20 30 3b 20 62 (byte_idx = 0; b
5830: 79 74 65 5f 69 64 78 20 3c 20 64 65 63 72 79 70 yte_idx < decryp
5840: 74 65 64 5f 62 75 66 6c 65 6e 3b 20 62 79 74 65 ted_buflen; byte
5850: 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09 09 _idx++) {.......
5860: 70 72 69 6e 74 66 28 22 25 30 32 78 20 22 2c 20 printf("%02x ",
5870: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 64 (unsigned int) d
5880: 65 63 72 79 70 74 65 64 5f 62 75 66 5b 62 79 74 ecrypted_buf[byt
5890: 65 5f 69 64 78 5d 29 3b 0a 09 09 09 09 09 7d 0a e_idx]);......}.
58a0: 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22 5c 6e ......printf("\n
58b0: 22 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b ");.....} else {
58c0: 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22 44 65 ......printf("De
58d0: 63 72 79 70 74 28 29 20 66 61 69 6c 65 64 2e 5c crypt() failed.\
58e0: 6e 22 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 20 n");.....}....}
58f0: 65 6c 73 65 20 7b 0a 09 09 09 09 70 72 69 6e 74 else {.....print
5900: 66 28 22 44 65 63 72 79 70 74 49 6e 69 74 28 29 f("DecryptInit()
5910: 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09 failed.\n");...
5920: 09 7d 0a 09 09 7d 0a 0a 09 09 63 68 6b 5f 72 76 .}...}....chk_rv
5930: 20 3d 20 43 5f 43 6c 6f 73 65 53 65 73 73 69 6f = C_CloseSessio
5940: 6e 28 68 53 65 73 73 69 6f 6e 29 3b 0a 09 09 69 n(hSession);...i
5950: 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 f (chk_rv != CKR
5960: 5f 4f 4b 29 20 7b 0a 09 09 09 70 72 69 6e 74 66 _OK) {....printf
5970: 28 22 43 6c 6f 73 65 53 65 73 73 69 6f 6e 20 66 ("CloseSession f
5980: 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09 7d 0a ailed.\n");...}.
5990: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 70 72 69 6e .} else {...prin
59a0: 74 66 28 22 4f 70 65 6e 53 65 73 73 69 6f 6e 20 tf("OpenSession
59b0: 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09 7d 0a failed.\n");..}.
59c0: 0a 09 43 5f 46 69 6e 61 6c 69 7a 65 28 4e 55 4c ..C_Finalize(NUL
59d0: 4c 29 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 73 29 L);...if (slots)
59e0: 20 7b 0a 09 09 66 72 65 65 28 73 6c 6f 74 73 29 {...free(slots)
59f0: 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 72 69 76 61 ;..}...if (priva
5a00: 74 65 4b 65 79 4f 62 6a 65 63 74 73 5f 72 6f 6f teKeyObjects_roo
5a10: 74 29 20 7b 0a 09 09 66 72 65 65 28 70 72 69 76 t) {...free(priv
5a20: 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 5f 72 6f ateKeyObjects_ro
5a30: 6f 74 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e ot);..}...return
5a40: 28 30 29 3b 0a 7d 0a 0a 69 6e 74 20 6d 61 69 6e (0);.}..int main
5a50: 28 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 (int argc, char
5a60: 2a 2a 61 72 67 76 29 20 7b 0a 09 69 6e 74 20 72 **argv) {..int r
5a70: 65 74 76 61 6c 20 3d 20 30 2c 20 63 6b 5f 72 65 etval = 0, ck_re
5a80: 74 76 61 6c 3b 0a 0a 09 70 72 69 6e 74 66 28 22 tval;...printf("
5a90: 54 65 73 74 69 6e 67 20 6c 69 62 63 61 63 6b 65 Testing libcacke
5aa0: 79 2e 2e 2e 5c 6e 22 29 3b 0a 0a 09 63 6b 5f 72 y...\n");...ck_r
5ab0: 65 74 76 61 6c 20 3d 20 6d 61 69 6e 5f 70 6b 63 etval = main_pkc
5ac0: 73 31 31 28 29 3b 0a 0a 09 69 66 20 28 63 6b 5f s11();...if (ck_
5ad0: 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 retval != 0) {..
5ae0: 09 72 65 74 76 61 6c 20 3d 20 63 6b 5f 72 65 74 .retval = ck_ret
5af0: 76 61 6c 3b 0a 09 7d 0a 0a 09 70 72 69 6e 74 66 val;..}...printf
5b00: 28 22 54 65 73 74 69 6e 67 20 6c 69 62 63 61 63 ("Testing libcac
5b10: 6b 65 79 2e 2e 2e 20 44 4f 4e 45 2e 20 53 74 61 key... DONE. Sta
5b20: 74 75 73 20 3d 20 25 69 5c 6e 22 2c 20 63 6b 5f tus = %i\n", ck_
5b30: 72 65 74 76 61 6c 29 3b 0a 0a 09 72 65 74 75 72 retval);...retur
5b40: 6e 28 72 65 74 76 61 6c 29 3b 0a 0a 09 2f 2a 20 n(retval);.../*
5b50: 55 4e 52 45 41 43 48 45 44 3a 20 54 68 69 73 20 UNREACHED: This
5b60: 69 73 20 6a 75 73 74 20 74 6f 20 73 75 70 72 65 is just to supre
5b70: 73 73 20 61 20 77 61 72 6e 69 6e 67 20 61 62 6f ss a warning abo
5b80: 75 74 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 ut arguments to
5b90: 6d 61 69 6e 20 77 65 20 64 6f 20 6e 6f 74 20 75 main we do not u
5ba0: 73 65 2e 20 2a 2f 0a 09 61 72 67 63 20 3d 20 61 se. */..argc = a
5bb0: 72 67 63 3b 0a 09 61 72 67 76 20 3d 20 61 72 67 rgc;..argv = arg
5bc0: 76 3b 0a 7d 0a 23 65 6c 73 65 20 2f 2a 20 43 41 v;.}.#else /* CA
5bd0: 43 4b 45 59 5f 54 45 53 54 5f 41 46 4c 20 2a 2f CKEY_TEST_AFL */
5be0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 73 .#include <sys/s
5bf0: 74 61 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 tat.h>.#include
5c00: 3c 73 79 73 2f 74 79 70 65 73 2e 68 3e 0a 23 69 <sys/types.h>.#i
5c10: 6e 63 6c 75 64 65 20 3c 66 63 6e 74 6c 2e 68 3e nclude <fcntl.h>
5c20: 0a 0a 2f 2a 20 49 6e 63 6c 75 64 65 20 74 68 65 ../* Include the
5c30: 20 43 41 43 4b 65 79 20 73 6f 75 72 63 65 20 2a CACKey source *
5c40: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 63 61 63 6b /.#include "cack
5c50: 65 79 2e 63 22 0a 0a 2f 2a 20 46 61 6b 65 20 61 ey.c"../* Fake a
5c60: 20 73 6d 61 72 74 63 61 72 64 20 2a 2f 0a 73 74 smartcard */.st
5c70: 61 74 69 63 20 69 6e 74 20 73 63 61 72 64 5f 69 atic int scard_i
5c80: 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 30 nTransaction = 0
5c90: 3b 0a 73 74 61 74 69 63 20 4c 4f 4e 47 20 73 63 ;.static LONG sc
5ca0: 61 72 64 5f 70 72 6f 74 6f 63 6f 6c 3b 0a 0a 50 ard_protocol;..P
5cb0: 43 53 43 5f 41 50 49 20 4c 4f 4e 47 20 53 43 61 CSC_API LONG SCa
5cc0: 72 64 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 rdEstablishConte
5cd0: 78 74 28 44 57 4f 52 44 20 64 77 53 63 6f 70 65 xt(DWORD dwScope
5ce0: 2c 20 4c 50 43 56 4f 49 44 20 70 76 52 65 73 65 , LPCVOID pvRese
5cf0: 72 76 65 64 31 2c 20 4c 50 43 56 4f 49 44 20 70 rved1, LPCVOID p
5d00: 76 52 65 73 65 72 76 65 64 32 2c 20 4c 50 53 43 vReserved2, LPSC
5d10: 41 52 44 43 4f 4e 54 45 58 54 20 70 68 43 6f 6e ARDCONTEXT phCon
5d20: 74 65 78 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f text) {..CACKEY_
5d30: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca
5d40: 6c 6c 65 64 22 29 3b 0a 0a 09 2a 70 68 43 6f 6e lled");...*phCon
5d50: 74 65 78 74 20 3d 20 34 32 3b 0a 0a 09 72 65 74 text = 42;...ret
5d60: 75 72 6e 28 53 43 41 52 44 5f 53 5f 53 55 43 43 urn(SCARD_S_SUCC
5d70: 45 53 53 29 3b 0a 7d 0a 0a 50 43 53 43 5f 41 50 ESS);.}..PCSC_AP
5d80: 49 20 4c 4f 4e 47 20 53 43 61 72 64 49 73 56 61 I LONG SCardIsVa
5d90: 6c 69 64 43 6f 6e 74 65 78 74 28 53 43 41 52 44 lidContext(SCARD
5da0: 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 CONTEXT hContext
5db0: 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ) {..CACKEY_DEBU
5dc0: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called
5dd0: 22 29 3b 0a 0a 09 69 66 20 28 68 43 6f 6e 74 65 ");...if (hConte
5de0: 78 74 20 21 3d 20 34 32 29 20 7b 0a 09 09 72 65 xt != 42) {...re
5df0: 74 75 72 6e 28 53 43 41 52 44 5f 45 5f 49 4e 56 turn(SCARD_E_INV
5e00: 41 4c 49 44 5f 48 41 4e 44 4c 45 29 3b 0a 09 7d ALID_HANDLE);..}
5e10: 0a 0a 09 72 65 74 75 72 6e 28 53 43 41 52 44 5f ...return(SCARD_
5e20: 53 5f 53 55 43 43 45 53 53 29 3b 0a 7d 0a 0a 50 S_SUCCESS);.}..P
5e30: 43 53 43 5f 41 50 49 20 4c 4f 4e 47 20 53 43 61 CSC_API LONG SCa
5e40: 72 64 4c 69 73 74 52 65 61 64 65 72 73 28 53 43 rdListReaders(SC
5e50: 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 ARDCONTEXT hCont
5e60: 65 78 74 2c 20 4c 50 43 53 54 52 20 6d 73 7a 47 ext, LPCSTR mszG
5e70: 72 6f 75 70 73 2c 20 4c 50 53 54 52 20 6d 73 7a roups, LPSTR msz
5e80: 52 65 61 64 65 72 73 2c 20 4c 50 44 57 4f 52 44 Readers, LPDWORD
5e90: 20 70 63 63 68 52 65 61 64 65 72 73 29 20 7b 0a pcchReaders) {.
5ea0: 09 73 74 61 74 69 63 20 63 68 61 72 20 2a 72 65 .static char *re
5eb0: 61 64 65 72 73 20 3d 20 22 52 45 41 44 45 52 30 aders = "READER0
5ec0: 22 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 ";...CACKEY_DEBU
5ed0: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 G_PRINTF("Called
5ee0: 22 29 3b 0a 0a 09 69 66 20 28 68 43 6f 6e 74 65 ");...if (hConte
5ef0: 78 74 20 21 3d 20 34 32 29 20 7b 0a 09 09 72 65 xt != 42) {...re
5f00: 74 75 72 6e 28 53 43 41 52 44 5f 45 5f 49 4e 56 turn(SCARD_E_INV
5f10: 41 4c 49 44 5f 48 41 4e 44 4c 45 29 3b 0a 09 7d ALID_HANDLE);..}
5f20: 0a 0a 09 2a 70 63 63 68 52 65 61 64 65 72 73 20 ...*pcchReaders
5f30: 3d 20 73 74 72 6c 65 6e 28 72 65 61 64 65 72 73 = strlen(readers
5f40: 29 20 2b 20 31 3b 0a 0a 09 69 66 20 28 6d 73 7a ) + 1;...if (msz
5f50: 52 65 61 64 65 72 73 20 3d 3d 20 4e 55 4c 4c 29 Readers == NULL)
5f60: 20 7b 0a 09 09 72 65 74 75 72 6e 28 53 43 41 52 {...return(SCAR
5f70: 44 5f 53 5f 53 55 43 43 45 53 53 29 3b 0a 09 7d D_S_SUCCESS);..}
5f80: 0a 0a 09 6d 65 6d 63 70 79 28 6d 73 7a 52 65 61 ...memcpy(mszRea
5f90: 64 65 72 73 2c 20 72 65 61 64 65 72 73 2c 20 2a ders, readers, *
5fa0: 70 63 63 68 52 65 61 64 65 72 73 29 3b 0a 0a 09 pcchReaders);...
5fb0: 72 65 74 75 72 6e 28 53 43 41 52 44 5f 53 5f 53 return(SCARD_S_S
5fc0: 55 43 43 45 53 53 29 3b 0a 7d 0a 0a 50 43 53 43 UCCESS);.}..PCSC
5fd0: 5f 41 50 49 20 4c 4f 4e 47 20 53 43 61 72 64 42 _API LONG SCardB
5fe0: 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 eginTransaction(
5ff0: 53 43 41 52 44 48 41 4e 44 4c 45 20 68 43 61 72 SCARDHANDLE hCar
6000: 64 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 d) {..CACKEY_DEB
6010: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle
6020: 64 22 29 3b 0a 0a 09 69 66 20 28 68 43 61 72 64 d");...if (hCard
6030: 20 21 3d 20 39 39 29 20 7b 0a 09 09 72 65 74 75 != 99) {...retu
6040: 72 6e 28 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c rn(SCARD_E_INVAL
6050: 49 44 5f 48 41 4e 44 4c 45 29 3b 0a 09 7d 0a 0a ID_HANDLE);..}..
6060: 09 69 66 20 28 73 63 61 72 64 5f 69 6e 54 72 61 .if (scard_inTra
6070: 6e 73 61 63 74 69 6f 6e 29 20 7b 0a 09 09 72 65 nsaction) {...re
6080: 74 75 72 6e 28 53 43 41 52 44 5f 45 5f 53 48 41 turn(SCARD_E_SHA
6090: 52 49 4e 47 5f 56 49 4f 4c 41 54 49 4f 4e 29 3b RING_VIOLATION);
60a0: 0a 09 7d 0a 0a 09 73 63 61 72 64 5f 69 6e 54 72 ..}...scard_inTr
60b0: 61 6e 73 61 63 74 69 6f 6e 20 3d 20 31 3b 0a 0a ansaction = 1;..
60c0: 09 72 65 74 75 72 6e 28 53 43 41 52 44 5f 53 5f .return(SCARD_S_
60d0: 53 55 43 43 45 53 53 29 3b 0a 7d 0a 50 43 53 43 SUCCESS);.}.PCSC
60e0: 5f 41 50 49 20 4c 4f 4e 47 20 53 43 61 72 64 45 _API LONG SCardE
60f0: 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e 28 53 43 ndTransaction(SC
6100: 41 52 44 48 41 4e 44 4c 45 20 68 43 61 72 64 2c ARDHANDLE hCard,
6110: 20 44 57 4f 52 44 20 64 77 44 69 73 70 6f 73 69 DWORD dwDisposi
6120: 74 69 6f 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f tion) {..CACKEY_
6130: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 DEBUG_PRINTF("Ca
6140: 6c 6c 65 64 22 29 3b 0a 0a 09 69 66 20 28 68 43 lled");...if (hC
6150: 61 72 64 20 21 3d 20 39 39 29 20 7b 0a 09 09 72 ard != 99) {...r
6160: 65 74 75 72 6e 28 53 43 41 52 44 5f 45 5f 49 4e eturn(SCARD_E_IN
6170: 56 41 4c 49 44 5f 48 41 4e 44 4c 45 29 3b 0a 09 VALID_HANDLE);..
6180: 7d 0a 0a 09 73 63 61 72 64 5f 69 6e 54 72 61 6e }...scard_inTran
6190: 73 61 63 74 69 6f 6e 20 3d 20 30 3b 0a 0a 09 72 saction = 0;...r
61a0: 65 74 75 72 6e 28 53 43 41 52 44 5f 53 5f 53 55 eturn(SCARD_S_SU
61b0: 43 43 45 53 53 29 3b 0a 7d 0a 0a 50 43 53 43 5f CCESS);.}..PCSC_
61c0: 41 50 49 20 4c 4f 4e 47 20 53 43 61 72 64 53 74 API LONG SCardSt
61d0: 61 74 75 73 28 53 43 41 52 44 48 41 4e 44 4c 45 atus(SCARDHANDLE
61e0: 20 68 43 61 72 64 2c 20 4c 50 53 54 52 20 6d 73 hCard, LPSTR ms
61f0: 7a 52 65 61 64 65 72 4e 61 6d 65 2c 20 4c 50 44 zReaderName, LPD
6200: 57 4f 52 44 20 70 63 63 68 52 65 61 64 65 72 4c WORD pcchReaderL
6210: 65 6e 2c 20 4c 50 44 57 4f 52 44 20 70 64 77 53 en, LPDWORD pdwS
6220: 74 61 74 65 2c 20 4c 50 44 57 4f 52 44 20 70 64 tate, LPDWORD pd
6230: 77 50 72 6f 74 6f 63 6f 6c 2c 20 4c 50 42 59 54 wProtocol, LPBYT
6240: 45 20 70 62 41 74 72 2c 20 4c 50 44 57 4f 52 44 E pbAtr, LPDWORD
6250: 20 70 63 62 41 74 72 4c 65 6e 29 20 7b 0a 09 4c pcbAtrLen) {..L
6260: 4f 4e 47 20 73 63 61 72 64 6c 69 73 74 72 65 61 ONG scardlistrea
6270: 64 65 72 73 5f 72 65 74 3b 0a 0a 09 43 41 43 4b ders_ret;...CACK
6280: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 EY_DEBUG_PRINTF(
6290: 22 43 61 6c 6c 65 64 22 29 3b 0a 0a 09 69 66 20 "Called");...if
62a0: 28 68 43 61 72 64 20 21 3d 20 39 39 29 20 7b 0a (hCard != 99) {.
62b0: 09 09 72 65 74 75 72 6e 28 53 43 41 52 44 5f 45 ..return(SCARD_E
62c0: 5f 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 29 _INVALID_HANDLE)
62d0: 3b 0a 09 7d 0a 0a 09 2a 70 64 77 53 74 61 74 65 ;..}...*pdwState
62e0: 20 3d 20 30 3b 0a 09 73 63 61 72 64 6c 69 73 74 = 0;..scardlist
62f0: 72 65 61 64 65 72 73 5f 72 65 74 20 3d 20 53 43 readers_ret = SC
6300: 61 72 64 4c 69 73 74 52 65 61 64 65 72 73 28 34 ardListReaders(4
6310: 32 2c 20 4e 55 4c 4c 2c 20 6d 73 7a 52 65 61 64 2, NULL, mszRead
6320: 65 72 4e 61 6d 65 2c 20 70 63 63 68 52 65 61 64 erName, pcchRead
6330: 65 72 4c 65 6e 29 3b 0a 09 69 66 20 28 73 63 61 erLen);..if (sca
6340: 72 64 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 rdlistreaders_re
6350: 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 t != SCARD_S_SUC
6360: 43 45 53 53 29 20 7b 0a 09 09 72 65 74 75 72 6e CESS) {...return
6370: 28 73 63 61 72 64 6c 69 73 74 72 65 61 64 65 72 (scardlistreader
6380: 73 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 2a 70 64 s_ret);..}...*pd
6390: 77 50 72 6f 74 6f 63 6f 6c 20 3d 20 73 63 61 72 wProtocol = scar
63a0: 64 5f 70 72 6f 74 6f 63 6f 6c 3b 0a 0a 09 72 65 d_protocol;...re
63b0: 74 75 72 6e 28 53 43 41 52 44 5f 53 5f 53 55 43 turn(SCARD_S_SUC
63c0: 43 45 53 53 29 3b 0a 7d 0a 0a 50 43 53 43 5f 41 CESS);.}..PCSC_A
63d0: 50 49 20 4c 4f 4e 47 20 53 43 61 72 64 43 6f 6e PI LONG SCardCon
63e0: 6e 65 63 74 28 53 43 41 52 44 43 4f 4e 54 45 58 nect(SCARDCONTEX
63f0: 54 20 68 43 6f 6e 74 65 78 74 2c 20 4c 50 43 53 T hContext, LPCS
6400: 54 52 20 73 7a 52 65 61 64 65 72 2c 20 44 57 4f TR szReader, DWO
6410: 52 44 20 64 77 53 68 61 72 65 4d 6f 64 65 2c 20 RD dwShareMode,
6420: 44 57 4f 52 44 20 64 77 50 72 65 66 65 72 72 65 DWORD dwPreferre
6430: 64 50 72 6f 74 6f 63 6f 6c 73 2c 20 4c 50 53 43 dProtocols, LPSC
6440: 41 52 44 48 41 4e 44 4c 45 20 70 68 43 61 72 64 ARDHANDLE phCard
6450: 2c 20 4c 50 44 57 4f 52 44 20 70 64 77 41 63 74 , LPDWORD pdwAct
6460: 69 76 65 50 72 6f 74 6f 63 6f 6c 29 20 7b 0a 09 iveProtocol) {..
6470: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI
6480: 4e 54 46 28 22 43 61 6c 6c 65 64 22 29 3b 0a 0a NTF("Called");..
6490: 09 69 66 20 28 68 43 6f 6e 74 65 78 74 20 21 3d .if (hContext !=
64a0: 20 34 32 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 42) {...return(
64b0: 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f SCARD_E_INVALID_
64c0: 48 41 4e 44 4c 45 29 3b 0a 09 7d 0a 0a 09 69 66 HANDLE);..}...if
64d0: 20 28 28 64 77 50 72 65 66 65 72 72 65 64 50 72 ((dwPreferredPr
64e0: 6f 74 6f 63 6f 6c 73 20 26 20 53 43 41 52 44 5f otocols & SCARD_
64f0: 50 52 4f 54 4f 43 4f 4c 5f 54 30 29 20 3d 3d 20 PROTOCOL_T0) ==
6500: 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 SCARD_PROTOCOL_T
6510: 30 29 20 7b 0a 09 09 2a 70 64 77 41 63 74 69 76 0) {...*pdwActiv
6520: 65 50 72 6f 74 6f 63 6f 6c 20 3d 20 53 43 41 52 eProtocol = SCAR
6530: 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 3b 0a 09 D_PROTOCOL_T0;..
6540: 7d 20 65 6c 73 65 20 7b 0a 09 09 2a 70 64 77 41 } else {...*pdwA
6550: 63 74 69 76 65 50 72 6f 74 6f 63 6f 6c 20 3d 20 ctiveProtocol =
6560: 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 SCARD_PROTOCOL_T
6570: 31 3b 0a 09 7d 0a 0a 09 73 63 61 72 64 5f 70 72 1;..}...scard_pr
6580: 6f 74 6f 63 6f 6c 20 3d 20 2a 70 64 77 41 63 74 otocol = *pdwAct
6590: 69 76 65 50 72 6f 74 6f 63 6f 6c 3b 0a 0a 09 2a iveProtocol;...*
65a0: 70 68 43 61 72 64 20 3d 20 39 39 3b 0a 0a 09 72 phCard = 99;...r
65b0: 65 74 75 72 6e 28 53 43 41 52 44 5f 53 5f 53 55 eturn(SCARD_S_SU
65c0: 43 43 45 53 53 29 3b 0a 7d 0a 0a 50 43 53 43 5f CCESS);.}..PCSC_
65d0: 41 50 49 20 4c 4f 4e 47 20 53 43 61 72 64 44 69 API LONG SCardDi
65e0: 73 63 6f 6e 6e 65 63 74 28 53 43 41 52 44 48 41 sconnect(SCARDHA
65f0: 4e 44 4c 45 20 68 43 61 72 64 2c 20 44 57 4f 52 NDLE hCard, DWOR
6600: 44 20 64 77 44 69 73 70 6f 73 69 74 69 6f 6e 29 D dwDisposition)
6610: 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 {..CACKEY_DEBUG
6620: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 22 _PRINTF("Called"
6630: 29 3b 0a 0a 09 69 66 20 28 68 43 61 72 64 20 21 );...if (hCard !
6640: 3d 20 39 39 29 20 7b 0a 09 09 72 65 74 75 72 6e = 99) {...return
6650: 28 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 (SCARD_E_INVALID
6660: 5f 48 41 4e 44 4c 45 29 3b 0a 09 7d 0a 0a 09 72 _HANDLE);..}...r
6670: 65 74 75 72 6e 28 53 43 41 52 44 5f 53 5f 53 55 eturn(SCARD_S_SU
6680: 43 43 45 53 53 29 3b 0a 7d 0a 0a 50 43 53 43 5f CCESS);.}..PCSC_
6690: 41 50 49 20 4c 4f 4e 47 20 53 43 61 72 64 52 65 API LONG SCardRe
66a0: 63 6f 6e 6e 65 63 74 28 53 43 41 52 44 48 41 4e connect(SCARDHAN
66b0: 44 4c 45 20 68 43 61 72 64 2c 20 44 57 4f 52 44 DLE hCard, DWORD
66c0: 20 64 77 53 68 61 72 65 4d 6f 64 65 2c 20 44 57 dwShareMode, DW
66d0: 4f 52 44 20 64 77 50 72 65 66 65 72 72 65 64 50 ORD dwPreferredP
66e0: 72 6f 74 6f 63 6f 6c 73 2c 20 44 57 4f 52 44 20 rotocols, DWORD
66f0: 64 77 49 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e dwInitialization
6700: 2c 20 4c 50 44 57 4f 52 44 20 70 64 77 41 63 74 , LPDWORD pdwAct
6710: 69 76 65 50 72 6f 74 6f 63 6f 6c 29 20 7b 0a 09 iveProtocol) {..
6720: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 CACKEY_DEBUG_PRI
6730: 4e 54 46 28 22 43 61 6c 6c 65 64 22 29 3b 0a 0a NTF("Called");..
6740: 09 69 66 20 28 68 43 61 72 64 20 21 3d 20 39 39 .if (hCard != 99
6750: 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 53 43 41 ) {...return(SCA
6760: 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 48 41 4e RD_E_INVALID_HAN
6770: 44 4c 45 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 DLE);..}...retur
6780: 6e 28 53 43 61 72 64 43 6f 6e 6e 65 63 74 28 34 n(SCardConnect(4
6790: 32 2c 20 4e 55 4c 4c 2c 20 64 77 53 68 61 72 65 2, NULL, dwShare
67a0: 4d 6f 64 65 2c 20 64 77 50 72 65 66 65 72 72 65 Mode, dwPreferre
67b0: 64 50 72 6f 74 6f 63 6f 6c 73 2c 20 4e 55 4c 4c dProtocols, NULL
67c0: 2c 20 70 64 77 41 63 74 69 76 65 50 72 6f 74 6f , pdwActiveProto
67d0: 63 6f 6c 29 29 3b 0a 7d 0a 0a 50 43 53 43 5f 41 col));.}..PCSC_A
67e0: 50 49 20 4c 4f 4e 47 20 53 43 61 72 64 52 65 6c PI LONG SCardRel
67f0: 65 61 73 65 43 6f 6e 74 65 78 74 28 53 43 41 52 easeContext(SCAR
6800: 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 DCONTEXT hContex
6810: 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 t) {..CACKEY_DEB
6820: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 UG_PRINTF("Calle
6830: 64 22 29 3b 0a 0a 09 69 66 20 28 68 43 6f 6e 74 d");...if (hCont
6840: 65 78 74 20 21 3d 20 34 32 29 20 7b 0a 09 09 72 ext != 42) {...r
6850: 65 74 75 72 6e 28 53 43 41 52 44 5f 45 5f 49 4e eturn(SCARD_E_IN
6860: 56 41 4c 49 44 5f 48 41 4e 44 4c 45 29 3b 0a 09 VALID_HANDLE);..
6870: 7d 0a 0a 09 72 65 74 75 72 6e 28 53 43 41 52 44 }...return(SCARD
6880: 5f 53 5f 53 55 43 43 45 53 53 29 3b 0a 7d 0a 0a _S_SUCCESS);.}..
6890: 50 43 53 43 5f 41 50 49 20 4c 4f 4e 47 20 53 43 PCSC_API LONG SC
68a0: 61 72 64 54 72 61 6e 73 6d 69 74 28 53 43 41 52 ardTransmit(SCAR
68b0: 44 48 41 4e 44 4c 45 20 68 43 61 72 64 2c 20 63 DHANDLE hCard, c
68c0: 6f 6e 73 74 20 53 43 41 52 44 5f 49 4f 5f 52 45 onst SCARD_IO_RE
68d0: 51 55 45 53 54 20 2a 70 69 6f 53 65 6e 64 50 63 QUEST *pioSendPc
68e0: 69 2c 20 4c 50 43 42 59 54 45 20 70 62 53 65 6e i, LPCBYTE pbSen
68f0: 64 42 75 66 66 65 72 2c 20 44 57 4f 52 44 20 63 dBuffer, DWORD c
6900: 62 53 65 6e 64 4c 65 6e 67 74 68 2c 20 53 43 41 bSendLength, SCA
6910: 52 44 5f 49 4f 5f 52 45 51 55 45 53 54 20 2a 70 RD_IO_REQUEST *p
6920: 69 6f 52 65 63 76 50 63 69 2c 20 4c 50 42 59 54 ioRecvPci, LPBYT
6930: 45 20 70 62 52 65 63 76 42 75 66 66 65 72 2c 20 E pbRecvBuffer,
6940: 4c 50 44 57 4f 52 44 20 70 63 62 52 65 63 76 4c LPDWORD pcbRecvL
6950: 65 6e 67 74 68 29 20 7b 0a 09 43 41 43 4b 45 59 ength) {..CACKEY
6960: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 _DEBUG_PRINTF("C
6970: 61 6c 6c 65 64 22 29 3b 0a 0a 09 69 66 20 28 68 alled");...if (h
6980: 43 61 72 64 20 21 3d 20 39 39 29 20 7b 0a 09 09 Card != 99) {...
6990: 72 65 74 75 72 6e 28 53 43 41 52 44 5f 45 5f 49 return(SCARD_E_I
69a0: 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 29 3b 0a NVALID_HANDLE);.
69b0: 09 7d 0a 0a 09 70 62 52 65 63 76 42 75 66 66 65 .}...pbRecvBuffe
69c0: 72 5b 30 5d 20 3d 20 30 78 39 30 3b 0a 09 70 62 r[0] = 0x90;..pb
69d0: 52 65 63 76 42 75 66 66 65 72 5b 31 5d 20 3d 20 RecvBuffer[1] =
69e0: 30 78 30 30 3b 0a 0a 09 2a 70 63 62 52 65 63 76 0x00;...*pcbRecv
69f0: 4c 65 6e 67 74 68 20 3d 20 32 3b 0a 0a 09 72 65 Length = 2;...re
6a00: 74 75 72 6e 28 53 43 41 52 44 5f 53 5f 53 55 43 turn(SCARD_S_SUC
6a10: 43 45 53 53 29 3b 0a 7d 0a 0a 2f 2a 20 41 6d 65 CESS);.}../* Ame
6a20: 72 69 63 61 6e 20 46 75 7a 7a 79 20 4c 6f 70 20 rican Fuzzy Lop
6a30: 74 65 73 74 69 6e 67 20 70 72 6f 67 72 61 6d 20 testing program
6a40: 2a 2f 0a 69 6e 74 20 6d 61 69 6e 28 69 6e 74 20 */.int main(int
6a50: 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 argc, char **arg
6a60: 76 29 20 7b 0a 09 43 4b 5f 46 55 4e 43 54 49 4f v) {..CK_FUNCTIO
6a70: 4e 5f 4c 49 53 54 5f 50 54 52 20 70 46 75 6e 63 N_LIST_PTR pFunc
6a80: 74 69 6f 6e 4c 69 73 74 3b 0a 09 43 4b 5f 52 56 tionList;..CK_RV
6a90: 20 28 2a 43 5f 43 6c 6f 73 65 53 65 73 73 69 6f (*C_CloseSessio
6aa0: 6e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 n)(CK_SESSION_HA
6ab0: 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 20 3d NDLE hSession) =
6ac0: 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28 2a NULL;..CK_RV (*
6ad0: 43 5f 46 69 6e 61 6c 69 7a 65 29 28 43 4b 5f 56 C_Finalize)(CK_V
6ae0: 4f 49 44 5f 50 54 52 20 70 52 65 73 65 72 76 65 OID_PTR pReserve
6af0: 64 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 d) = NULL;..CK_R
6b00: 56 20 28 2a 43 5f 46 69 6e 64 4f 62 6a 65 63 74 V (*C_FindObject
6b10: 73 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 s)(CK_SESSION_HA
6b20: 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 NDLE hSession, C
6b30: 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f K_OBJECT_HANDLE_
6b40: 50 54 52 20 70 68 4f 62 6a 65 63 74 2c 20 43 4b PTR phObject, CK
6b50: 5f 55 4c 4f 4e 47 20 75 6c 4d 61 78 4f 62 6a 65 _ULONG ulMaxObje
6b60: 63 74 43 6f 75 6e 74 2c 20 43 4b 5f 55 4c 4f 4e ctCount, CK_ULON
6b70: 47 5f 50 54 52 20 70 75 6c 4f 62 6a 65 63 74 43 G_PTR pulObjectC
6b80: 6f 75 6e 74 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 ount) = NULL;..C
6b90: 4b 5f 52 56 20 28 2a 43 5f 46 69 6e 64 4f 62 6a K_RV (*C_FindObj
6ba0: 65 63 74 73 46 69 6e 61 6c 29 28 43 4b 5f 53 45 ectsFinal)(CK_SE
6bb0: 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe
6bc0: 73 73 69 6f 6e 29 20 3d 20 4e 55 4c 4c 3b 0a 09 ssion) = NULL;..
6bd0: 43 4b 5f 52 56 20 28 2a 43 5f 46 69 6e 64 4f 62 CK_RV (*C_FindOb
6be0: 6a 65 63 74 73 49 6e 69 74 29 28 43 4b 5f 53 45 jectsInit)(CK_SE
6bf0: 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe
6c00: 73 73 69 6f 6e 2c 20 43 4b 5f 41 54 54 52 49 42 ssion, CK_ATTRIB
6c10: 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 UTE_PTR pTemplat
6c20: 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f e, CK_ULONG ulCo
6c30: 75 6e 74 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b unt) = NULL;..CK
6c40: 5f 52 56 20 28 2a 43 5f 47 65 74 41 74 74 72 69 _RV (*C_GetAttri
6c50: 62 75 74 65 56 61 6c 75 65 29 28 43 4b 5f 53 45 buteValue)(CK_SE
6c60: 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 SSION_HANDLE hSe
6c70: 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 ssion, CK_OBJECT
6c80: 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 74 2c _HANDLE hObject,
6c90: 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 CK_ATTRIBUTE_PT
6ca0: 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f R pTemplate, CK_
6cb0: 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 29 20 3d ULONG ulCount) =
6cc0: 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28 2a NULL;..CK_RV (*
6cd0: 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 29 28 43 C_GetSlotList)(C
6ce0: 4b 5f 42 42 4f 4f 4c 20 74 6f 6b 65 6e 50 72 65 K_BBOOL tokenPre
6cf0: 73 65 6e 74 2c 20 43 4b 5f 53 4c 4f 54 5f 49 44 sent, CK_SLOT_ID
6d00: 5f 50 54 52 20 70 53 6c 6f 74 4c 69 73 74 2c 20 _PTR pSlotList,
6d10: 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c CK_ULONG_PTR pul
6d20: 43 6f 75 6e 74 29 20 3d 20 4e 55 4c 4c 3b 0a 09 Count) = NULL;..
6d30: 43 4b 5f 52 56 20 28 2a 43 5f 47 65 74 54 6f 6b CK_RV (*C_GetTok
6d40: 65 6e 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f enInfo)(CK_SLOT_
6d50: 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 54 4f ID slotID, CK_TO
6d60: 4b 45 4e 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e KEN_INFO_PTR pIn
6d70: 66 6f 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f fo) = NULL;..CK_
6d80: 52 56 20 28 2a 43 5f 49 6e 69 74 69 61 6c 69 7a RV (*C_Initializ
6d90: 65 29 28 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 e)(CK_VOID_PTR p
6da0: 49 6e 69 74 41 72 67 73 29 20 3d 20 4e 55 4c 4c InitArgs) = NULL
6db0: 3b 0a 09 43 4b 5f 52 56 20 28 2a 43 5f 4c 6f 67 ;..CK_RV (*C_Log
6dc0: 69 6e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 in)(CK_SESSION_H
6dd0: 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 ANDLE hSession,
6de0: 43 4b 5f 55 53 45 52 5f 54 59 50 45 20 75 73 65 CK_USER_TYPE use
6df0: 72 54 79 70 65 2c 20 43 4b 5f 55 54 46 38 43 48 rType, CK_UTF8CH
6e00: 41 52 5f 50 54 52 20 70 50 69 6e 2c 20 43 4b 5f AR_PTR pPin, CK_
6e10: 55 4c 4f 4e 47 20 75 6c 50 69 6e 4c 65 6e 29 20 ULONG ulPinLen)
6e20: 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28 = NULL;..CK_RV (
6e30: 2a 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 29 28 *C_OpenSession)(
6e40: 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 CK_SLOT_ID slotI
6e50: 44 2c 20 43 4b 5f 46 4c 41 47 53 20 66 6c 61 67 D, CK_FLAGS flag
6e60: 73 2c 20 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 s, CK_VOID_PTR p
6e70: 41 70 70 6c 69 63 61 74 69 6f 6e 2c 20 43 4b 5f Application, CK_
6e80: 4e 4f 54 49 46 59 20 6e 6f 74 69 66 79 2c 20 43 NOTIFY notify, C
6e90: 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE
6ea0: 5f 50 54 52 20 70 68 53 65 73 73 69 6f 6e 29 20 _PTR phSession)
6eb0: 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28 = NULL;..CK_RV (
6ec0: 2a 43 5f 53 69 67 6e 29 28 43 4b 5f 53 45 53 53 *C_Sign)(CK_SESS
6ed0: 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 ION_HANDLE hSess
6ee0: 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 ion, CK_BYTE_PTR
6ef0: 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 pData, CK_ULONG
6f00: 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 ulDataLen, CK_B
6f10: 59 54 45 5f 50 54 52 20 70 53 69 67 6e 61 74 75 YTE_PTR pSignatu
6f20: 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 re, CK_ULONG_PTR
6f30: 20 70 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e pulSignatureLen
6f40: 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 ) = NULL;..CK_RV
6f50: 20 28 2a 43 5f 53 69 67 6e 49 6e 69 74 29 28 43 (*C_SignInit)(C
6f60: 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 K_SESSION_HANDLE
6f70: 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 hSession, CK_ME
6f80: 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 CHANISM_PTR pMec
6f90: 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 hanism, CK_OBJEC
6fa0: 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 3d T_HANDLE hKey) =
6fb0: 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 43 5f 49 4e 49 NULL;..CK_C_INI
6fc0: 54 49 41 4c 49 5a 45 5f 41 52 47 53 20 69 6e 69 TIALIZE_ARGS ini
6fd0: 74 61 72 67 73 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 targs;..CK_ULONG
6fe0: 20 6e 75 6d 53 6c 6f 74 73 3b 0a 09 43 4b 5f 53 numSlots;..CK_S
6ff0: 4c 4f 54 5f 49 44 5f 50 54 52 20 73 6c 6f 74 73 LOT_ID_PTR slots
7000: 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 54 4f 4b = NULL;..CK_TOK
7010: 45 4e 5f 49 4e 46 4f 20 74 6f 6b 65 6e 49 6e 66 EN_INFO tokenInf
7020: 6f 3b 0a 09 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 o;..CK_SESSION_H
7030: 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 3b 0a ANDLE hSession;.
7040: 09 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c .CK_OBJECT_HANDL
7050: 45 20 68 4f 62 6a 65 63 74 2c 20 2a 70 72 69 76 E hObject, *priv
7060: 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 5f 72 6f ateKeyObjects_ro
7070: 6f 74 20 3d 20 4e 55 4c 4c 2c 20 2a 70 72 69 76 ot = NULL, *priv
7080: 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 2c 20 2a ateKeyObjects, *
7090: 63 75 72 72 50 72 69 76 4b 65 79 3b 0a 09 43 4b currPrivKey;..CK
70a0: 5f 55 4c 4f 4e 47 20 75 6c 4f 62 6a 65 63 74 43 _ULONG ulObjectC
70b0: 6f 75 6e 74 3b 0a 09 43 4b 5f 41 54 54 52 49 42 ount;..CK_ATTRIB
70c0: 55 54 45 20 74 65 6d 70 6c 61 74 65 5b 5d 20 3d UTE template[] =
70d0: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 {..
70e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
70f0: 43 4b 41 5f 43 4c 41 53 53 2c 20 4e 55 4c 4c 2c CKA_CLASS, NULL,
7100: 20 30 7d 2c 0a 09 20 20 20 20 20 20 20 20 20 20 0},..
7110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7120: 20 7b 43 4b 41 5f 54 4f 4b 45 4e 2c 20 4e 55 4c {CKA_TOKEN, NUL
7130: 4c 2c 20 30 7d 2c 0a 09 20 20 20 20 20 20 20 20 L, 0},..
7140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7150: 20 20 20 7b 43 4b 41 5f 4c 41 42 45 4c 2c 20 4e {CKA_LABEL, N
7160: 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 20 20 20 20 ULL, 0},..
7170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7180: 20 20 20 20 20 7b 43 4b 41 5f 50 52 49 56 41 54 {CKA_PRIVAT
7190: 45 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 E, NULL, 0},..
71a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
71b0: 20 20 20 20 20 20 20 20 20 7b 43 4b 41 5f 49 44 {CKA_ID
71c0: 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 20 , NULL, 0},..
71d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
71e0: 20 20 20 20 20 20 20 20 7b 43 4b 41 5f 53 45 52 {CKA_SER
71f0: 49 41 4c 5f 4e 55 4d 42 45 52 2c 20 4e 55 4c 4c IAL_NUMBER, NULL
7200: 2c 20 30 7d 2c 0a 09 20 20 20 20 20 20 20 20 20 , 0},..
7210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7220: 20 20 7b 43 4b 41 5f 53 55 42 4a 45 43 54 2c 20 {CKA_SUBJECT,
7230: 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 20 20 20 NULL, 0},..
7240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7250: 20 20 20 20 20 20 7b 43 4b 41 5f 49 53 53 55 45 {CKA_ISSUE
7260: 52 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 R, NULL, 0},..
7270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7280: 20 20 20 20 20 20 20 20 20 7b 43 4b 41 5f 43 45 {CKA_CE
7290: 52 54 49 46 49 43 41 54 45 5f 54 59 50 45 2c 20 RTIFICATE_TYPE,
72a0: 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 20 20 20 NULL, 0},..
72b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
72c0: 20 20 20 20 20 20 7b 43 4b 41 5f 4b 45 59 5f 54 {CKA_KEY_T
72d0: 59 50 45 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 YPE, NULL, 0},..
72e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
72f0: 20 20 20 20 20 20 20 20 20 20 20 7b 43 4b 41 5f {CKA_
7300: 53 49 47 4e 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a SIGN, NULL, 0},.
7310: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
7320: 20 20 20 20 20 20 20 20 20 20 20 20 7b 43 4b 41 {CKA
7330: 5f 56 41 4c 55 45 2c 20 4e 55 4c 4c 2c 20 30 7d _VALUE, NULL, 0}
7340: 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 5f 43 45 ,..... {CKA_CE
7350: 52 54 5f 4d 44 35 5f 48 41 53 48 2c 20 4e 55 4c RT_MD5_HASH, NUL
7360: 4c 2c 20 30 7d 2c 0a 09 09 09 09 20 20 20 7b 43 L, 0},..... {C
7370: 4b 41 5f 43 45 52 54 5f 53 48 41 31 5f 48 41 53 KA_CERT_SHA1_HAS
7380: 48 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 09 09 H, NULL, 0},....
7390: 09 20 20 20 7b 43 4b 41 5f 54 52 55 53 54 45 44 . {CKA_TRUSTED
73a0: 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 09 09 09 , NULL, 0},.....
73b0: 20 20 20 7b 43 4b 41 5f 54 52 55 53 54 5f 43 4c {CKA_TRUST_CL
73c0: 49 45 4e 54 5f 41 55 54 48 2c 20 4e 55 4c 4c 2c IENT_AUTH, NULL,
73d0: 20 30 7d 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 0},..... {CKA
73e0: 5f 54 52 55 53 54 5f 43 4f 44 45 5f 53 49 47 4e _TRUST_CODE_SIGN
73f0: 49 4e 47 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 ING, NULL, 0},..
7400: 09 09 09 20 20 20 7b 43 4b 41 5f 54 52 55 53 54 ... {CKA_TRUST
7410: 5f 43 52 4c 5f 53 49 47 4e 2c 20 4e 55 4c 4c 2c _CRL_SIGN, NULL,
7420: 20 30 7d 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 0},..... {CKA
7430: 5f 54 52 55 53 54 5f 44 41 54 41 5f 45 4e 43 49 _TRUST_DATA_ENCI
7440: 50 48 45 52 4d 45 4e 54 2c 20 4e 55 4c 4c 2c 20 PHERMENT, NULL,
7450: 30 7d 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 5f 0},..... {CKA_
7460: 54 52 55 53 54 5f 44 49 47 49 54 41 4c 5f 53 49 TRUST_DIGITAL_SI
7470: 47 4e 41 54 55 52 45 2c 20 4e 55 4c 4c 2c 20 30 GNATURE, NULL, 0
7480: 7d 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 5f 54 },..... {CKA_T
7490: 52 55 53 54 5f 45 4d 41 49 4c 5f 50 52 4f 54 45 RUST_EMAIL_PROTE
74a0: 43 54 49 4f 4e 2c 20 4e 55 4c 4c 2c 20 30 7d 2c CTION, NULL, 0},
74b0: 0a 09 09 09 09 20 20 20 7b 43 4b 41 5f 54 52 55 ..... {CKA_TRU
74c0: 53 54 5f 4b 45 59 5f 41 47 52 45 45 4d 45 4e 54 ST_KEY_AGREEMENT
74d0: 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 09 09 09 , NULL, 0},.....
74e0: 20 20 20 7b 43 4b 41 5f 54 52 55 53 54 5f 4b 45 {CKA_TRUST_KE
74f0: 59 5f 43 45 52 54 5f 53 49 47 4e 2c 20 4e 55 4c Y_CERT_SIGN, NUL
7500: 4c 2c 20 30 7d 2c 0a 09 09 09 09 20 20 20 7b 43 L, 0},..... {C
7510: 4b 41 5f 54 52 55 53 54 5f 4b 45 59 5f 45 4e 43 KA_TRUST_KEY_ENC
7520: 49 50 48 45 52 4d 45 4e 54 2c 20 4e 55 4c 4c 2c IPHERMENT, NULL,
7530: 20 30 7d 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 0},..... {CKA
7540: 5f 54 52 55 53 54 5f 4e 4f 4e 5f 52 45 50 55 44 _TRUST_NON_REPUD
7550: 49 41 54 49 4f 4e 2c 20 4e 55 4c 4c 2c 20 30 7d IATION, NULL, 0}
7560: 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 5f 54 52 ,..... {CKA_TR
7570: 55 53 54 5f 53 45 52 56 45 52 5f 41 55 54 48 2c UST_SERVER_AUTH,
7580: 20 4e 55 4c 4c 2c 20 30 7d 0a 09 20 20 20 20 20 NULL, 0}..
7590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
75a0: 20 20 20 20 20 7d 2c 20 2a 63 75 72 72 5f 61 74 }, *curr_at
75b0: 74 72 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 63 75 tr;..CK_ULONG cu
75c0: 72 72 5f 61 74 74 72 5f 69 64 78 3b 0a 09 43 4b rr_attr_idx;..CK
75d0: 5f 55 4c 4f 4e 47 20 62 79 74 65 5f 69 64 78 3b _ULONG byte_idx;
75e0: 0a 09 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 ..CK_OBJECT_CLAS
75f0: 53 20 6f 62 6a 65 63 74 43 6c 61 73 73 3b 0a 09 S objectClass;..
7600: 43 4b 5f 42 59 54 45 20 73 69 67 6e 61 74 75 72 CK_BYTE signatur
7610: 65 5b 31 30 32 34 5d 3b 0a 09 43 4b 5f 55 4c 4f e[1024];..CK_ULO
7620: 4e 47 20 73 69 67 6e 61 74 75 72 65 5f 6c 65 6e NG signature_len
7630: 3b 0a 09 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 20 ;..CK_MECHANISM
7640: 6d 65 63 68 61 6e 69 73 6d 20 3d 20 7b 43 4b 4d mechanism = {CKM
7650: 5f 52 53 41 5f 50 4b 43 53 2c 20 4e 55 4c 4c 2c _RSA_PKCS, NULL,
7660: 20 30 7d 3b 0a 09 43 4b 5f 52 56 20 63 68 6b 5f 0};..CK_RV chk_
7670: 72 76 3b 0a 09 73 73 69 7a 65 5f 74 20 72 65 61 rv;..ssize_t rea
7680: 64 5f 72 65 74 3b 0a 09 63 68 61 72 20 64 61 74 d_ret;..char dat
7690: 61 5b 38 31 39 32 5d 2c 20 2a 66 69 6c 65 4e 61 a[8192], *fileNa
76a0: 6d 65 20 3d 20 4e 55 4c 4c 3b 0a 09 75 6e 73 69 me = NULL;..unsi
76b0: 67 6e 65 64 20 6c 6f 6e 67 20 64 61 74 61 5f 6c gned long data_l
76c0: 65 6e 3b 0a 09 69 6e 74 20 66 64 3b 0a 09 69 6e en;..int fd;..in
76d0: 74 20 69 3b 0a 09 69 6e 74 20 69 6e 69 74 69 61 t i;..int initia
76e0: 6c 69 7a 65 64 20 3d 20 30 3b 0a 09 69 6e 74 20 lized = 0;..int
76f0: 72 65 74 76 61 6c 20 3d 20 31 3b 0a 0a 09 66 69 retval = 1;...fi
7700: 6c 65 4e 61 6d 65 20 3d 20 61 72 67 76 5b 31 5d leName = argv[1]
7710: 3b 0a 09 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 ;..if (fileName
7720: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 67 6f 74 == NULL) {...got
7730: 6f 20 63 6c 65 61 6e 75 70 3b 0a 09 7d 0a 0a 09 o cleanup;..}...
7740: 66 64 20 3d 20 6f 70 65 6e 28 66 69 6c 65 4e 61 fd = open(fileNa
7750: 6d 65 2c 20 4f 5f 52 44 4f 4e 4c 59 29 3b 0a 09 me, O_RDONLY);..
7760: 69 66 20 28 66 64 20 3c 20 30 29 20 7b 0a 09 09 if (fd < 0) {...
7770: 67 6f 74 6f 20 63 6c 65 61 6e 75 70 3b 0a 09 7d goto cleanup;..}
7780: 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d 20 72 65 ...read_ret = re
7790: 61 64 28 66 64 2c 20 64 61 74 61 2c 20 73 69 7a ad(fd, data, siz
77a0: 65 6f 66 28 64 61 74 61 29 29 3b 0a 09 69 66 20 eof(data));..if
77b0: 28 72 65 61 64 5f 72 65 74 20 3c 20 30 29 20 7b (read_ret < 0) {
77c0: 0a 09 09 67 6f 74 6f 20 63 6c 65 61 6e 75 70 3b ...goto cleanup;
77d0: 0a 09 7d 0a 0a 09 64 61 74 61 5f 6c 65 6e 20 3d ..}...data_len =
77e0: 20 72 65 61 64 5f 72 65 74 3b 0a 0a 09 63 6c 6f read_ret;...clo
77f0: 73 65 28 66 64 29 3b 0a 0a 09 63 68 6b 5f 72 76 se(fd);...chk_rv
7800: 20 3d 20 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e = C_GetFunction
7810: 4c 69 73 74 28 26 70 46 75 6e 63 74 69 6f 6e 4c List(&pFunctionL
7820: 69 73 74 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 ist);..if (chk_r
7830: 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 v != CKR_OK) {..
7840: 09 70 72 69 6e 74 66 28 22 43 5f 47 65 74 46 75 .printf("C_GetFu
7850: 6e 63 74 69 6f 6e 4c 69 73 74 28 29 20 66 61 69 nctionList() fai
7860: 6c 65 64 2e 22 29 3b 0a 0a 09 09 67 6f 74 6f 20 led.");....goto
7870: 63 6c 65 61 6e 75 70 3b 0a 09 7d 0a 0a 09 43 5f cleanup;..}...C_
7880: 43 6c 6f 73 65 53 65 73 73 69 6f 6e 20 3d 20 70 CloseSession = p
7890: 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_
78a0: 43 6c 6f 73 65 53 65 73 73 69 6f 6e 3b 0a 09 43 CloseSession;..C
78b0: 5f 46 69 6e 61 6c 69 7a 65 20 3d 20 70 46 75 6e _Finalize = pFun
78c0: 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e ctionList->C_Fin
78d0: 61 6c 69 7a 65 3b 0a 09 43 5f 46 69 6e 64 4f 62 alize;..C_FindOb
78e0: 6a 65 63 74 73 20 3d 20 70 46 75 6e 63 74 69 6f jects = pFunctio
78f0: 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a nList->C_FindObj
7900: 65 63 74 73 3b 0a 09 43 5f 46 69 6e 64 4f 62 6a ects;..C_FindObj
7910: 65 63 74 73 46 69 6e 61 6c 20 3d 20 70 46 75 6e ectsFinal = pFun
7920: 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e ctionList->C_Fin
7930: 64 4f 62 6a 65 63 74 73 46 69 6e 61 6c 3b 0a 09 dObjectsFinal;..
7940: 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 C_FindObjectsIni
7950: 74 20 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 t = pFunctionLis
7960: 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 t->C_FindObjects
7970: 49 6e 69 74 3b 0a 09 43 5f 47 65 74 41 74 74 72 Init;..C_GetAttr
7980: 69 62 75 74 65 56 61 6c 75 65 20 3d 20 70 46 75 ibuteValue = pFu
7990: 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge
79a0: 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 65 3b tAttributeValue;
79b0: 0a 09 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 20 ..C_GetSlotList
79c0: 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d = pFunctionList-
79d0: 3e 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 3b 0a >C_GetSlotList;.
79e0: 09 43 5f 47 65 74 54 6f 6b 65 6e 49 6e 66 6f 20 .C_GetTokenInfo
79f0: 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d = pFunctionList-
7a00: 3e 43 5f 47 65 74 54 6f 6b 65 6e 49 6e 66 6f 3b >C_GetTokenInfo;
7a10: 0a 09 43 5f 49 6e 69 74 69 61 6c 69 7a 65 20 3d ..C_Initialize =
7a20: 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e pFunctionList->
7a30: 43 5f 49 6e 69 74 69 61 6c 69 7a 65 3b 0a 09 43 C_Initialize;..C
7a40: 5f 4c 6f 67 69 6e 20 3d 20 70 46 75 6e 63 74 69 _Login = pFuncti
7a50: 6f 6e 4c 69 73 74 2d 3e 43 5f 4c 6f 67 69 6e 3b onList->C_Login;
7a60: 0a 09 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 20 ..C_OpenSession
7a70: 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d = pFunctionList-
7a80: 3e 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 3b 0a >C_OpenSession;.
7a90: 09 43 5f 53 69 67 6e 20 3d 20 70 46 75 6e 63 74 .C_Sign = pFunct
7aa0: 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 3b ionList->C_Sign;
7ab0: 0a 09 43 5f 53 69 67 6e 49 6e 69 74 20 3d 20 70 ..C_SignInit = p
7ac0: 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_
7ad0: 53 69 67 6e 49 6e 69 74 3b 0a 0a 09 70 72 69 76 SignInit;...priv
7ae0: 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 20 3d 20 ateKeyObjects =
7af0: 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 70 malloc(sizeof(*p
7b00: 72 69 76 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 rivateKeyObjects
7b10: 29 20 2a 20 31 30 32 34 29 3b 0a 09 70 72 69 76 ) * 1024);..priv
7b20: 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 5f 72 6f ateKeyObjects_ro
7b30: 6f 74 20 3d 20 70 72 69 76 61 74 65 4b 65 79 4f ot = privateKeyO
7b40: 62 6a 65 63 74 73 3b 0a 09 66 6f 72 20 28 69 20 bjects;..for (i
7b50: 3d 20 30 3b 20 69 20 3c 20 31 30 32 34 3b 20 69 = 0; i < 1024; i
7b60: 2b 2b 29 20 7b 0a 09 09 70 72 69 76 61 74 65 4b ++) {...privateK
7b70: 65 79 4f 62 6a 65 63 74 73 5b 69 5d 20 3d 20 43 eyObjects[i] = C
7b80: 4b 5f 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 K_INVALID_HANDLE
7b90: 3b 0a 09 7d 0a 0a 09 69 6e 69 74 61 72 67 73 2e ;..}...initargs.
7ba0: 43 72 65 61 74 65 4d 75 74 65 78 20 3d 20 4e 55 CreateMutex = NU
7bb0: 4c 4c 3b 0a 09 69 6e 69 74 61 72 67 73 2e 44 65 LL;..initargs.De
7bc0: 73 74 72 6f 79 4d 75 74 65 78 20 3d 20 4e 55 4c stroyMutex = NUL
7bd0: 4c 3b 0a 09 69 6e 69 74 61 72 67 73 2e 4c 6f 63 L;..initargs.Loc
7be0: 6b 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 kMutex = NULL;..
7bf0: 69 6e 69 74 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d initargs.UnlockM
7c00: 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 69 6e utex = NULL;..in
7c10: 69 74 61 72 67 73 2e 66 6c 61 67 73 20 3d 20 43 itargs.flags = C
7c20: 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b KF_OS_LOCKING_OK
7c30: 3b 0a 09 69 6e 69 74 61 72 67 73 2e 70 52 65 73 ;..initargs.pRes
7c40: 65 72 76 65 64 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 erved = NULL;...
7c50: 63 68 6b 5f 72 76 20 3d 20 43 5f 49 6e 69 74 69 chk_rv = C_Initi
7c60: 61 6c 69 7a 65 28 26 69 6e 69 74 61 72 67 73 29 alize(&initargs)
7c70: 3b 0a 09 69 66 20 28 63 68 6b 5f 72 76 20 21 3d ;..if (chk_rv !=
7c80: 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 69 6e 69 CKR_OK) {...ini
7c90: 74 61 72 67 73 2e 43 72 65 61 74 65 4d 75 74 65 targs.CreateMute
7ca0: 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 69 6e 69 74 x = NULL;...init
7cb0: 61 72 67 73 2e 44 65 73 74 72 6f 79 4d 75 74 65 args.DestroyMute
7cc0: 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 69 6e 69 74 x = NULL;...init
7cd0: 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 20 3d args.LockMutex =
7ce0: 20 4e 55 4c 4c 3b 0a 09 09 69 6e 69 74 61 72 67 NULL;...initarg
7cf0: 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 20 3d 20 s.UnlockMutex =
7d00: 4e 55 4c 4c 3b 0a 09 09 69 6e 69 74 61 72 67 73 NULL;...initargs
7d10: 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 09 09 69 6e .flags = 0;...in
7d20: 69 74 61 72 67 73 2e 70 52 65 73 65 72 76 65 64 itargs.pReserved
7d30: 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 63 68 6b 5f = NULL;....chk_
7d40: 72 76 20 3d 20 43 5f 49 6e 69 74 69 61 6c 69 7a rv = C_Initializ
7d50: 65 28 26 69 6e 69 74 61 72 67 73 29 3b 0a 09 09 e(&initargs);...
7d60: 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b if (chk_rv != CK
7d70: 52 5f 4f 4b 29 20 7b 0a 09 09 09 70 72 69 6e 74 R_OK) {....print
7d80: 66 28 22 43 5f 49 6e 69 74 69 61 6c 69 7a 65 28 f("C_Initialize(
7d90: 29 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 ) failed.");....
7da0: 09 67 6f 74 6f 20 63 6c 65 61 6e 75 70 3b 0a 09 .goto cleanup;..
7db0: 09 7d 0a 09 7d 0a 0a 09 69 6e 69 74 69 61 6c 69 .}..}...initiali
7dc0: 7a 65 64 20 3d 20 31 3b 0a 0a 09 63 68 6b 5f 72 zed = 1;...chk_r
7dd0: 76 20 3d 20 43 5f 47 65 74 53 6c 6f 74 4c 69 73 v = C_GetSlotLis
7de0: 74 28 46 41 4c 53 45 2c 20 4e 55 4c 4c 2c 20 26 t(FALSE, NULL, &
7df0: 6e 75 6d 53 6c 6f 74 73 29 3b 0a 09 69 66 20 28 numSlots);..if (
7e00: 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b chk_rv != CKR_OK
7e10: 29 20 7b 0a 09 09 67 6f 74 6f 20 63 6c 65 61 6e ) {...goto clean
7e20: 75 70 3b 0a 09 7d 0a 0a 09 69 66 20 28 6e 75 6d up;..}...if (num
7e30: 53 6c 6f 74 73 20 3d 3d 20 30 29 20 7b 0a 09 09 Slots == 0) {...
7e40: 67 6f 74 6f 20 63 6c 65 61 6e 75 70 3b 0a 09 7d goto cleanup;..}
7e50: 0a 0a 09 73 6c 6f 74 73 20 3d 20 6d 61 6c 6c 6f ...slots = mallo
7e60: 63 28 73 69 7a 65 6f 66 28 2a 73 6c 6f 74 73 29 c(sizeof(*slots)
7e70: 20 2a 20 6e 75 6d 53 6c 6f 74 73 29 3b 0a 0a 09 * numSlots);...
7e80: 69 66 20 28 73 6c 6f 74 73 20 3d 3d 20 4e 55 4c if (slots == NUL
7e90: 4c 29 20 7b 0a 09 09 67 6f 74 6f 20 63 6c 65 61 L) {...goto clea
7ea0: 6e 75 70 3b 0a 09 7d 0a 0a 09 63 68 6b 5f 72 76 nup;..}...chk_rv
7eb0: 20 3d 20 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 = C_GetSlotList
7ec0: 28 46 41 4c 53 45 2c 20 73 6c 6f 74 73 2c 20 26 (FALSE, slots, &
7ed0: 6e 75 6d 53 6c 6f 74 73 29 3b 0a 09 69 66 20 28 numSlots);..if (
7ee0: 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b chk_rv != CKR_OK
7ef0: 29 20 7b 0a 09 09 67 6f 74 6f 20 63 6c 65 61 6e ) {...goto clean
7f00: 75 70 3b 0a 09 7d 0a 0a 09 63 68 6b 5f 72 76 20 up;..}...chk_rv
7f10: 3d 20 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 28 = C_OpenSession(
7f20: 73 6c 6f 74 73 5b 30 5d 2c 20 43 4b 46 5f 53 45 slots[0], CKF_SE
7f30: 52 49 41 4c 5f 53 45 53 53 49 4f 4e 2c 20 4e 55 RIAL_SESSION, NU
7f40: 4c 4c 2c 20 4e 55 4c 4c 2c 20 26 68 53 65 73 73 LL, NULL, &hSess
7f50: 69 6f 6e 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 ion);..if (chk_r
7f60: 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 v != CKR_OK) {..
7f70: 09 67 6f 74 6f 20 63 6c 65 61 6e 75 70 3b 0a 09 .goto cleanup;..
7f80: 7d 0a 0a 09 63 68 6b 5f 72 76 20 3d 20 43 5f 47 }...chk_rv = C_G
7f90: 65 74 54 6f 6b 65 6e 49 6e 66 6f 28 73 6c 6f 74 etTokenInfo(slot
7fa0: 73 5b 30 5d 2c 20 26 74 6f 6b 65 6e 49 6e 66 6f s[0], &tokenInfo
7fb0: 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 76 20 21 );..if (chk_rv !
7fc0: 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 67 6f = CKR_OK) {...go
7fd0: 74 6f 20 63 6c 65 61 6e 75 70 3b 0a 09 7d 0a 0a to cleanup;..}..
7fe0: 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e .if ((tokenInfo.
7ff0: 66 6c 61 67 73 20 26 20 43 4b 46 5f 4c 4f 47 49 flags & CKF_LOGI
8000: 4e 5f 52 45 51 55 49 52 45 44 29 20 3d 3d 20 43 N_REQUIRED) == C
8010: 4b 46 5f 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 KF_LOGIN_REQUIRE
8020: 44 20 26 26 20 28 74 6f 6b 65 6e 49 6e 66 6f 2e D && (tokenInfo.
8030: 66 6c 61 67 73 20 26 20 43 4b 46 5f 50 52 4f 54 flags & CKF_PROT
8040: 45 43 54 45 44 5f 41 55 54 48 45 4e 54 49 43 41 ECTED_AUTHENTICA
8050: 54 49 4f 4e 5f 50 41 54 48 29 20 3d 3d 20 30 29 TION_PATH) == 0)
8060: 20 7b 0a 09 09 70 72 69 6e 74 66 28 22 55 6e 61 {...printf("Una
8070: 62 6c 65 20 74 6f 20 6c 6f 67 69 6e 20 74 6f 20 ble to login to
8080: 63 61 72 64 2e 5c 6e 22 29 3b 0a 0a 09 09 67 6f card.\n");....go
8090: 74 6f 20 63 6c 65 61 6e 75 70 3b 0a 09 7d 0a 0a to cleanup;..}..
80a0: 09 63 68 6b 5f 72 76 20 3d 20 43 5f 4c 6f 67 69 .chk_rv = C_Logi
80b0: 6e 28 68 53 65 73 73 69 6f 6e 2c 20 43 4b 55 5f n(hSession, CKU_
80c0: 55 53 45 52 2c 20 4e 55 4c 4c 2c 20 30 29 3b 0a USER, NULL, 0);.
80d0: 09 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 .if (chk_rv != C
80e0: 4b 52 5f 4f 4b 29 20 7b 0a 09 09 70 72 69 6e 74 KR_OK) {...print
80f0: 66 28 22 4c 6f 67 69 6e 20 74 6f 20 64 65 76 69 f("Login to devi
8100: 63 65 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a ce failed.\n");.
8110: 0a 09 09 67 6f 74 6f 20 63 6c 65 61 6e 75 70 3b ...goto cleanup;
8120: 0a 09 7d 0a 0a 09 63 68 6b 5f 72 76 20 3d 20 43 ..}...chk_rv = C
8130: 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 _FindObjectsInit
8140: 28 68 53 65 73 73 69 6f 6e 2c 20 4e 55 4c 4c 2c (hSession, NULL,
8150: 20 30 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 76 0);..if (chk_rv
8160: 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 != CKR_OK) {...
8170: 67 6f 74 6f 20 63 6c 65 61 6e 75 70 3b 0a 09 7d goto cleanup;..}
8180: 0a 0a 09 77 68 69 6c 65 20 28 31 29 20 7b 0a 09 ...while (1) {..
8190: 09 63 68 6b 5f 72 76 20 3d 20 43 5f 46 69 6e 64 .chk_rv = C_Find
81a0: 4f 62 6a 65 63 74 73 28 68 53 65 73 73 69 6f 6e Objects(hSession
81b0: 2c 20 26 68 4f 62 6a 65 63 74 2c 20 31 2c 20 26 , &hObject, 1, &
81c0: 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 29 3b 0a ulObjectCount);.
81d0: 09 09 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 ..if (chk_rv !=
81e0: 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 70 72 69 CKR_OK) {....pri
81f0: 6e 74 66 28 22 46 69 6e 64 4f 62 6a 65 63 74 73 ntf("FindObjects
8200: 28 29 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a () failed.\n");.
8210: 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 ...break;...}...
8220: 09 69 66 20 28 75 6c 4f 62 6a 65 63 74 43 6f 75 .if (ulObjectCou
8230: 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 09 09 62 72 nt == 0) {....br
8240: 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 eak;...}....if (
8250: 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 21 3d ulObjectCount !=
8260: 20 31 29 20 7b 0a 09 09 09 70 72 69 6e 74 66 28 1) {....printf(
8270: 22 46 69 6e 64 4f 62 6a 65 63 74 73 28 29 20 72 "FindObjects() r
8280: 65 74 75 72 6e 65 64 20 61 20 77 65 69 72 64 20 eturned a weird
8290: 6e 75 6d 62 65 72 20 6f 66 20 6f 62 6a 65 63 74 number of object
82a0: 73 2e 20 20 41 73 6b 65 64 20 66 6f 72 20 31 2c s. Asked for 1,
82b0: 20 67 6f 74 20 25 6c 75 2e 5c 6e 22 2c 20 75 6c got %lu.\n", ul
82c0: 4f 62 6a 65 63 74 43 6f 75 6e 74 29 3b 0a 09 09 ObjectCount);...
82d0: 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09 66 .break;...}....f
82e0: 6f 72 20 28 63 75 72 72 5f 61 74 74 72 5f 69 64 or (curr_attr_id
82f0: 78 20 3d 20 30 3b 20 63 75 72 72 5f 61 74 74 72 x = 0; curr_attr
8300: 5f 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 74 _idx < (sizeof(t
8310: 65 6d 70 6c 61 74 65 29 20 2f 20 73 69 7a 65 6f emplate) / sizeo
8320: 66 28 74 65 6d 70 6c 61 74 65 5b 30 5d 29 29 3b f(template[0]));
8330: 20 63 75 72 72 5f 61 74 74 72 5f 69 64 78 2b 2b curr_attr_idx++
8340: 29 20 7b 0a 09 09 09 63 75 72 72 5f 61 74 74 72 ) {....curr_attr
8350: 20 3d 20 26 74 65 6d 70 6c 61 74 65 5b 63 75 72 = &template[cur
8360: 72 5f 61 74 74 72 5f 69 64 78 5d 3b 0a 09 09 09 r_attr_idx];....
8370: 69 66 20 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 if (curr_attr->p
8380: 56 61 6c 75 65 29 20 7b 0a 09 09 09 09 66 72 65 Value) {.....fre
8390: 65 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 e(curr_attr->pVa
83a0: 6c 75 65 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 63 lue);....}.....c
83b0: 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 urr_attr->pValue
83c0: 20 3d 20 4e 55 4c 4c 3b 0a 09 09 7d 0a 0a 09 09 = NULL;...}....
83d0: 63 68 6b 5f 72 76 20 3d 20 43 5f 47 65 74 41 74 chk_rv = C_GetAt
83e0: 74 72 69 62 75 74 65 56 61 6c 75 65 28 68 53 65 tributeValue(hSe
83f0: 73 73 69 6f 6e 2c 20 68 4f 62 6a 65 63 74 2c 20 ssion, hObject,
8400: 26 74 65 6d 70 6c 61 74 65 5b 30 5d 2c 20 73 69 &template[0], si
8410: 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65 29 20 2f zeof(template) /
8420: 20 73 69 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65 sizeof(template
8430: 5b 30 5d 29 29 3b 0a 09 09 69 66 20 28 63 68 6b [0]));...if (chk
8440: 5f 72 76 20 3d 3d 20 43 4b 52 5f 41 54 54 52 49 _rv == CKR_ATTRI
8450: 42 55 54 45 5f 54 59 50 45 5f 49 4e 56 41 4c 49 BUTE_TYPE_INVALI
8460: 44 20 7c 7c 20 63 68 6b 5f 72 76 20 3d 3d 20 43 D || chk_rv == C
8470: 4b 52 5f 41 54 54 52 49 42 55 54 45 5f 53 45 4e KR_ATTRIBUTE_SEN
8480: 53 49 54 49 56 45 20 7c 7c 20 63 68 6b 5f 72 76 SITIVE || chk_rv
8490: 20 3d 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 == CKR_BUFFER_T
84a0: 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a 09 09 09 63 OO_SMALL) {....c
84b0: 68 6b 5f 72 76 20 3d 20 43 4b 52 5f 4f 4b 3b 0a hk_rv = CKR_OK;.
84c0: 09 09 7d 0a 0a 09 09 69 66 20 28 63 68 6b 5f 72 ..}....if (chk_r
84d0: 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 v != CKR_OK) {..
84e0: 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a ..continue;...}.
84f0: 0a 09 09 66 6f 72 20 28 63 75 72 72 5f 61 74 74 ...for (curr_att
8500: 72 5f 69 64 78 20 3d 20 30 3b 20 63 75 72 72 5f r_idx = 0; curr_
8510: 61 74 74 72 5f 69 64 78 20 3c 20 28 73 69 7a 65 attr_idx < (size
8520: 6f 66 28 74 65 6d 70 6c 61 74 65 29 20 2f 20 73 of(template) / s
8530: 69 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65 5b 30 izeof(template[0
8540: 5d 29 29 3b 20 63 75 72 72 5f 61 74 74 72 5f 69 ])); curr_attr_i
8550: 64 78 2b 2b 29 20 7b 0a 09 09 09 63 75 72 72 5f dx++) {....curr_
8560: 61 74 74 72 20 3d 20 26 74 65 6d 70 6c 61 74 65 attr = &template
8570: 5b 63 75 72 72 5f 61 74 74 72 5f 69 64 78 5d 3b [curr_attr_idx];
8580: 0a 0a 09 09 09 69 66 20 28 28 28 43 4b 5f 4c 4f .....if (((CK_LO
8590: 4e 47 29 20 63 75 72 72 5f 61 74 74 72 2d 3e 75 NG) curr_attr->u
85a0: 6c 56 61 6c 75 65 4c 65 6e 29 20 21 3d 20 28 28 lValueLen) != ((
85b0: 43 4b 5f 4c 4f 4e 47 29 20 2d 31 29 29 20 7b 0a CK_LONG) -1)) {.
85c0: 09 09 09 09 63 75 72 72 5f 61 74 74 72 2d 3e 70 ....curr_attr->p
85d0: 56 61 6c 75 65 20 3d 20 6d 61 6c 6c 6f 63 28 63 Value = malloc(c
85e0: 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 urr_attr->ulValu
85f0: 65 4c 65 6e 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a eLen);....}...}.
8600: 0a 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f 47 65 ...chk_rv = C_Ge
8610: 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 65 28 tAttributeValue(
8620: 68 53 65 73 73 69 6f 6e 2c 20 68 4f 62 6a 65 63 hSession, hObjec
8630: 74 2c 20 26 74 65 6d 70 6c 61 74 65 5b 30 5d 2c t, &template[0],
8640: 20 73 69 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65 sizeof(template
8650: 29 20 2f 20 73 69 7a 65 6f 66 28 74 65 6d 70 6c ) / sizeof(templ
8660: 61 74 65 5b 30 5d 29 29 3b 0a 09 09 69 66 20 28 ate[0]));...if (
8670: 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b chk_rv == CKR_OK
8680: 20 7c 7c 20 63 68 6b 5f 72 76 20 3d 3d 20 43 4b || chk_rv == CK
8690: 52 5f 41 54 54 52 49 42 55 54 45 5f 53 45 4e 53 R_ATTRIBUTE_SENS
86a0: 49 54 49 56 45 20 7c 7c 20 63 68 6b 5f 72 76 20 ITIVE || chk_rv
86b0: 3d 3d 20 43 4b 52 5f 41 54 54 52 49 42 55 54 45 == CKR_ATTRIBUTE
86c0: 5f 54 59 50 45 5f 49 4e 56 41 4c 49 44 20 7c 7c _TYPE_INVALID ||
86d0: 20 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 42 chk_rv == CKR_B
86e0: 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 UFFER_TOO_SMALL)
86f0: 20 7b 0a 09 09 09 66 6f 72 20 28 63 75 72 72 5f {....for (curr_
8700: 61 74 74 72 5f 69 64 78 20 3d 20 30 3b 20 63 75 attr_idx = 0; cu
8710: 72 72 5f 61 74 74 72 5f 69 64 78 20 3c 20 28 73 rr_attr_idx < (s
8720: 69 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65 29 20 izeof(template)
8730: 2f 20 73 69 7a 65 6f 66 28 74 65 6d 70 6c 61 74 / sizeof(templat
8740: 65 5b 30 5d 29 29 3b 20 63 75 72 72 5f 61 74 74 e[0])); curr_att
8750: 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 63 r_idx++) {.....c
8760: 75 72 72 5f 61 74 74 72 20 3d 20 26 74 65 6d 70 urr_attr = &temp
8770: 6c 61 74 65 5b 63 75 72 72 5f 61 74 74 72 5f 69 late[curr_attr_i
8780: 64 78 5d 3b 0a 0a 09 09 09 09 69 66 20 28 63 75 dx];......if (cu
8790: 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 29 rr_attr->pValue)
87a0: 20 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20 28 {......switch (
87b0: 63 75 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 29 curr_attr->type)
87c0: 20 7b 0a 09 09 09 09 09 09 63 61 73 65 20 43 4b {.......case CK
87d0: 41 5f 43 4c 41 53 53 3a 0a 09 09 09 09 09 09 09 A_CLASS:........
87e0: 6f 62 6a 65 63 74 43 6c 61 73 73 20 3d 20 2a 28 objectClass = *(
87f0: 28 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 53 (CK_OBJECT_CLASS
8800: 20 2a 29 20 63 75 72 72 5f 61 74 74 72 2d 3e 70 *) curr_attr->p
8810: 56 61 6c 75 65 29 3b 0a 0a 09 09 09 09 09 09 09 Value);.........
8820: 69 66 20 28 6f 62 6a 65 63 74 43 6c 61 73 73 20 if (objectClass
8830: 3d 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b == CKO_PRIVATE_K
8840: 45 59 29 20 7b 0a 09 09 09 09 09 09 09 09 2a 70 EY) {.........*p
8850: 72 69 76 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 rivateKeyObjects
8860: 20 3d 20 68 4f 62 6a 65 63 74 3b 0a 09 09 09 09 = hObject;.....
8870: 09 09 09 09 70 72 69 76 61 74 65 4b 65 79 4f 62 ....privateKeyOb
8880: 6a 65 63 74 73 2b 2b 3b 0a 09 09 09 09 09 09 09 jects++;........
8890: 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 20 65 }......}.....} e
88a0: 6c 73 65 20 7b 0a 09 09 09 09 09 66 72 65 65 28 lse {......free(
88b0: 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 curr_attr->pValu
88c0: 65 29 3b 0a 09 09 09 09 09 63 75 72 72 5f 61 74 e);......curr_at
88d0: 74 72 2d 3e 70 56 61 6c 75 65 20 3d 20 4e 55 4c tr->pValue = NUL
88e0: 4c 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 L;.....}....}...
88f0: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 70 72 69 6e } else {....prin
8900: 74 66 28 22 47 65 74 41 74 74 72 69 62 75 74 65 tf("GetAttribute
8910: 56 61 6c 75 65 28 68 4f 62 6a 65 63 74 3d 25 6c Value(hObject=%l
8920: 75 29 2f 31 20 66 61 69 6c 65 64 20 28 72 76 20 u)/1 failed (rv
8930: 3d 20 25 6c 75 29 2e 5c 6e 22 2c 20 28 75 6e 73 = %lu).\n", (uns
8940: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 4f 62 6a igned long) hObj
8950: 65 63 74 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c ect, (unsigned l
8960: 6f 6e 67 29 20 63 68 6b 5f 72 76 29 3b 0a 09 09 ong) chk_rv);...
8970: 7d 0a 0a 09 7d 0a 0a 09 63 68 6b 5f 72 76 20 3d }...}...chk_rv =
8980: 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 69 C_FindObjectsFi
8990: 6e 61 6c 28 68 53 65 73 73 69 6f 6e 29 3b 0a 09 nal(hSession);..
89a0: 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b if (chk_rv != CK
89b0: 52 5f 4f 4b 29 20 7b 0a 09 09 70 72 69 6e 74 66 R_OK) {...printf
89c0: 28 22 46 69 6e 64 4f 62 6a 65 63 74 73 46 69 6e ("FindObjectsFin
89d0: 61 6c 28 29 20 66 61 69 6c 65 64 2e 5c 6e 22 29 al() failed.\n")
89e0: 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 63 75 72 72 ;..}...for (curr
89f0: 50 72 69 76 4b 65 79 20 3d 20 70 72 69 76 61 74 PrivKey = privat
8a00: 65 4b 65 79 4f 62 6a 65 63 74 73 5f 72 6f 6f 74 eKeyObjects_root
8a10: 3b 20 2a 63 75 72 72 50 72 69 76 4b 65 79 20 21 ; *currPrivKey !
8a20: 3d 20 43 4b 5f 49 4e 56 41 4c 49 44 5f 48 41 4e = CK_INVALID_HAN
8a30: 44 4c 45 3b 20 63 75 72 72 50 72 69 76 4b 65 79 DLE; currPrivKey
8a40: 2b 2b 29 20 7b 0a 09 09 63 68 6b 5f 72 76 20 3d ++) {...chk_rv =
8a50: 20 43 5f 53 69 67 6e 49 6e 69 74 28 68 53 65 73 C_SignInit(hSes
8a60: 73 69 6f 6e 2c 20 26 6d 65 63 68 61 6e 69 73 6d sion, &mechanism
8a70: 2c 20 2a 63 75 72 72 50 72 69 76 4b 65 79 29 3b , *currPrivKey);
8a80: 0a 09 09 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d ...if (chk_rv ==
8a90: 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 73 69 CKR_OK) {....si
8aa0: 67 6e 61 74 75 72 65 5f 6c 65 6e 20 3d 20 73 69 gnature_len = si
8ab0: 7a 65 6f 66 28 73 69 67 6e 61 74 75 72 65 29 3b zeof(signature);
8ac0: 0a 0a 09 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f .....chk_rv = C_
8ad0: 53 69 67 6e 28 68 53 65 73 73 69 6f 6e 2c 20 28 Sign(hSession, (
8ae0: 43 4b 5f 42 59 54 45 5f 50 54 52 29 20 64 61 74 CK_BYTE_PTR) dat
8af0: 61 2c 20 64 61 74 61 5f 6c 65 6e 2c 20 28 43 4b a, data_len, (CK
8b00: 5f 42 59 54 45 5f 50 54 52 29 20 26 73 69 67 6e _BYTE_PTR) &sign
8b10: 61 74 75 72 65 2c 20 26 73 69 67 6e 61 74 75 72 ature, &signatur
8b20: 65 5f 6c 65 6e 29 3b 0a 09 09 09 69 66 20 28 63 e_len);....if (c
8b30: 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29 hk_rv == CKR_OK)
8b40: 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 5b {.....printf("[
8b50: 25 30 34 6c 75 2f 25 30 32 6c 78 5d 20 53 69 67 %04lu/%02lx] Sig
8b60: 6e 61 74 75 72 65 3a 20 22 2c 20 28 75 6e 73 69 nature: ", (unsi
8b70: 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 63 75 72 72 gned long) *curr
8b80: 50 72 69 76 4b 65 79 2c 20 28 75 6e 73 69 67 6e PrivKey, (unsign
8b90: 65 64 20 6c 6f 6e 67 29 20 6d 65 63 68 61 6e 69 ed long) mechani
8ba0: 73 6d 2e 6d 65 63 68 61 6e 69 73 6d 29 3b 0a 0a sm.mechanism);..
8bb0: 09 09 09 09 66 6f 72 20 28 62 79 74 65 5f 69 64 ....for (byte_id
8bc0: 78 20 3d 20 30 3b 20 62 79 74 65 5f 69 64 78 20 x = 0; byte_idx
8bd0: 3c 20 73 69 67 6e 61 74 75 72 65 5f 6c 65 6e 3b < signature_len;
8be0: 20 62 79 74 65 5f 69 64 78 2b 2b 29 20 7b 0a 09 byte_idx++) {..
8bf0: 09 09 09 09 70 72 69 6e 74 66 28 22 25 30 32 78 ....printf("%02x
8c00: 20 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 69 6e ", (unsigned in
8c10: 74 29 20 73 69 67 6e 61 74 75 72 65 5b 62 79 74 t) signature[byt
8c20: 65 5f 69 64 78 5d 29 3b 0a 09 09 09 09 7d 0a 0a e_idx]);.....}..
8c30: 09 09 09 09 70 72 69 6e 74 66 28 22 5c 6e 22 29 ....printf("\n")
8c40: 3b 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 ;....} else {...
8c50: 09 09 70 72 69 6e 74 66 28 22 53 69 67 6e 28 29 ..printf("Sign()
8c60: 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09 failed.\n");...
8c70: 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 .}...} else {...
8c80: 09 70 72 69 6e 74 66 28 22 53 69 67 6e 49 6e 69 .printf("SignIni
8c90: 74 28 29 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b t() failed.\n");
8ca0: 0a 09 09 7d 0a 09 7d 0a 0a 09 63 68 6b 5f 72 76 ...}..}...chk_rv
8cb0: 20 3d 20 43 5f 43 6c 6f 73 65 53 65 73 73 69 6f = C_CloseSessio
8cc0: 6e 28 68 53 65 73 73 69 6f 6e 29 3b 0a 09 69 66 n(hSession);..if
8cd0: 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f (chk_rv != CKR_
8ce0: 4f 4b 29 20 7b 0a 09 09 70 72 69 6e 74 66 28 22 OK) {...printf("
8cf0: 43 6c 6f 73 65 53 65 73 73 69 6f 6e 20 66 61 69 CloseSession fai
8d00: 6c 65 64 2e 5c 6e 22 29 3b 0a 09 7d 0a 0a 09 72 led.\n");..}...r
8d10: 65 74 76 61 6c 20 3d 20 30 3b 0a 0a 63 6c 65 61 etval = 0;..clea
8d20: 6e 75 70 3a 0a 09 69 66 20 28 69 6e 69 74 69 61 nup:..if (initia
8d30: 6c 69 7a 65 64 29 20 7b 0a 09 09 43 5f 46 69 6e lized) {...C_Fin
8d40: 61 6c 69 7a 65 28 4e 55 4c 4c 29 3b 0a 09 7d 0a alize(NULL);..}.
8d50: 0a 09 69 66 20 28 73 6c 6f 74 73 29 20 7b 0a 09 ..if (slots) {..
8d60: 09 66 72 65 65 28 73 6c 6f 74 73 29 3b 0a 09 7d .free(slots);..}
8d70: 0a 0a 09 69 66 20 28 70 72 69 76 61 74 65 4b 65 ...if (privateKe
8d80: 79 4f 62 6a 65 63 74 73 5f 72 6f 6f 74 29 20 7b yObjects_root) {
8d90: 0a 09 09 66 72 65 65 28 70 72 69 76 61 74 65 4b ...free(privateK
8da0: 65 79 4f 62 6a 65 63 74 73 5f 72 6f 6f 74 29 3b eyObjects_root);
8db0: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 ..}...return(ret
8dc0: 76 61 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a val);.}.#endif.