Hex Artifact Content

Artifact 86bd0fe2e2f572c9202ee4ff77ec02cf2cd50111:


0000: 23 69 6e 63 6c 75 64 65 20 22 6d 79 70 6b 63 73  #include "mypkcs
0010: 31 31 2e 68 22 0a 0a 23 69 6e 63 6c 75 64 65 20  11.h"..#include 
0020: 3c 73 79 73 2f 74 79 70 65 73 2e 68 3e 0a 23 69  <sys/types.h>.#i
0030: 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68  nclude <string.h
0040: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73  >.#include <unis
0050: 74 64 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  td.h>.#include <
0060: 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75  stdlib.h>.#inclu
0070: 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 0a 0a 73  de <stdio.h>...s
0080: 74 61 74 69 63 20 63 68 61 72 20 2a 70 6b 63 73  tatic char *pkcs
0090: 31 31 5f 61 74 74 72 69 62 75 74 65 5f 74 6f 5f  11_attribute_to_
00a0: 6e 61 6d 65 28 43 4b 5f 41 54 54 52 49 42 55 54  name(CK_ATTRIBUT
00b0: 45 5f 54 59 50 45 20 61 74 74 72 69 62 29 20 7b  E_TYPE attrib) {
00c0: 0a 09 73 74 61 74 69 63 20 63 68 61 72 20 72 65  ..static char re
00d0: 74 62 75 66 5b 31 30 32 34 5d 3b 0a 0a 09 73 77  tbuf[1024];...sw
00e0: 69 74 63 68 20 28 61 74 74 72 69 62 29 20 7b 0a  itch (attrib) {.
00f0: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 30 30  ..case 0x0000000
0100: 30 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 43  0: return "CKA_C
0110: 4c 41 53 53 22 3b 0a 09 09 63 61 73 65 20 30 78  LASS";...case 0x
0120: 30 30 30 30 30 30 30 31 3a 20 72 65 74 75 72 6e  00000001: return
0130: 20 22 43 4b 41 5f 54 4f 4b 45 4e 22 3b 0a 09 09   "CKA_TOKEN";...
0140: 63 61 73 65 20 30 78 30 30 30 30 30 30 30 32 3a  case 0x00000002:
0150: 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 50 52 49   return "CKA_PRI
0160: 56 41 54 45 22 3b 0a 09 09 63 61 73 65 20 30 78  VATE";...case 0x
0170: 30 30 30 30 30 30 30 33 3a 20 72 65 74 75 72 6e  00000003: return
0180: 20 22 43 4b 41 5f 4c 41 42 45 4c 22 3b 0a 09 09   "CKA_LABEL";...
0190: 63 61 73 65 20 30 78 30 30 30 30 30 30 31 30 3a  case 0x00000010:
01a0: 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 41 50 50   return "CKA_APP
01b0: 4c 49 43 41 54 49 4f 4e 22 3b 0a 09 09 63 61 73  LICATION";...cas
01c0: 65 20 30 78 30 30 30 30 30 30 31 31 3a 20 72 65  e 0x00000011: re
01d0: 74 75 72 6e 20 22 43 4b 41 5f 56 41 4c 55 45 22  turn "CKA_VALUE"
01e0: 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30  ;...case 0x00000
01f0: 30 31 32 3a 20 72 65 74 75 72 6e 20 22 43 4b 41  012: return "CKA
0200: 5f 4f 42 4a 45 43 54 5f 49 44 22 3b 0a 09 09 63  _OBJECT_ID";...c
0210: 61 73 65 20 30 78 30 30 30 30 30 30 38 30 3a 20  ase 0x00000080: 
0220: 72 65 74 75 72 6e 20 22 43 4b 41 5f 43 45 52 54  return "CKA_CERT
0230: 49 46 49 43 41 54 45 5f 54 59 50 45 22 3b 0a 09  IFICATE_TYPE";..
0240: 09 63 61 73 65 20 30 78 30 30 30 30 30 30 38 31  .case 0x00000081
0250: 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 49 53  : return "CKA_IS
0260: 53 55 45 52 22 3b 0a 09 09 63 61 73 65 20 30 78  SUER";...case 0x
0270: 30 30 30 30 30 30 38 32 3a 20 72 65 74 75 72 6e  00000082: return
0280: 20 22 43 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 4d   "CKA_SERIAL_NUM
0290: 42 45 52 22 3b 0a 09 09 63 61 73 65 20 30 78 30  BER";...case 0x0
02a0: 30 30 30 30 30 38 33 3a 20 72 65 74 75 72 6e 20  0000083: return 
02b0: 22 43 4b 41 5f 41 43 5f 49 53 53 55 45 52 22 3b  "CKA_AC_ISSUER";
02c0: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 30  ...case 0x000000
02d0: 38 34 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f  84: return "CKA_
02e0: 4f 57 4e 45 52 22 3b 0a 09 09 63 61 73 65 20 30  OWNER";...case 0
02f0: 78 30 30 30 30 30 30 38 35 3a 20 72 65 74 75 72  x00000085: retur
0300: 6e 20 22 43 4b 41 5f 41 54 54 52 5f 54 59 50 45  n "CKA_ATTR_TYPE
0310: 53 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30  S";...case 0x000
0320: 30 30 30 38 36 3a 20 72 65 74 75 72 6e 20 22 43  00086: return "C
0330: 4b 41 5f 54 52 55 53 54 45 44 22 3b 0a 09 09 63  KA_TRUSTED";...c
0340: 61 73 65 20 30 78 30 30 30 30 30 31 30 30 3a 20  ase 0x00000100: 
0350: 72 65 74 75 72 6e 20 22 43 4b 41 5f 4b 45 59 5f  return "CKA_KEY_
0360: 54 59 50 45 22 3b 0a 09 09 63 61 73 65 20 30 78  TYPE";...case 0x
0370: 30 30 30 30 30 31 30 31 3a 20 72 65 74 75 72 6e  00000101: return
0380: 20 22 43 4b 41 5f 53 55 42 4a 45 43 54 22 3b 0a   "CKA_SUBJECT";.
0390: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31 30  ..case 0x0000010
03a0: 32 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 49  2: return "CKA_I
03b0: 44 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30  D";...case 0x000
03c0: 30 30 31 30 33 3a 20 72 65 74 75 72 6e 20 22 43  00103: return "C
03d0: 4b 41 5f 53 45 4e 53 49 54 49 56 45 22 3b 0a 09  KA_SENSITIVE";..
03e0: 09 63 61 73 65 20 30 78 30 30 30 30 30 31 30 34  .case 0x00000104
03f0: 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 45 4e  : return "CKA_EN
0400: 43 52 59 50 54 22 3b 0a 09 09 63 61 73 65 20 30  CRYPT";...case 0
0410: 78 30 30 30 30 30 31 30 35 3a 20 72 65 74 75 72  x00000105: retur
0420: 6e 20 22 43 4b 41 5f 44 45 43 52 59 50 54 22 3b  n "CKA_DECRYPT";
0430: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31  ...case 0x000001
0440: 30 36 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f  06: return "CKA_
0450: 57 52 41 50 22 3b 0a 09 09 63 61 73 65 20 30 78  WRAP";...case 0x
0460: 30 30 30 30 30 31 30 37 3a 20 72 65 74 75 72 6e  00000107: return
0470: 20 22 43 4b 41 5f 55 4e 57 52 41 50 22 3b 0a 09   "CKA_UNWRAP";..
0480: 09 63 61 73 65 20 30 78 30 30 30 30 30 31 30 38  .case 0x00000108
0490: 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 53 49  : return "CKA_SI
04a0: 47 4e 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30  GN";...case 0x00
04b0: 30 30 30 31 30 39 3a 20 72 65 74 75 72 6e 20 22  000109: return "
04c0: 43 4b 41 5f 53 49 47 4e 5f 52 45 43 4f 56 45 52  CKA_SIGN_RECOVER
04d0: 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30  ";...case 0x0000
04e0: 30 31 30 41 3a 20 72 65 74 75 72 6e 20 22 43 4b  010A: return "CK
04f0: 41 5f 56 45 52 49 46 59 22 3b 0a 09 09 63 61 73  A_VERIFY";...cas
0500: 65 20 30 78 30 30 30 30 30 31 30 42 3a 20 72 65  e 0x0000010B: re
0510: 74 75 72 6e 20 22 43 4b 41 5f 56 45 52 49 46 59  turn "CKA_VERIFY
0520: 5f 52 45 43 4f 56 45 52 22 3b 0a 09 09 63 61 73  _RECOVER";...cas
0530: 65 20 30 78 30 30 30 30 30 31 30 43 3a 20 72 65  e 0x0000010C: re
0540: 74 75 72 6e 20 22 43 4b 41 5f 44 45 52 49 56 45  turn "CKA_DERIVE
0550: 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30  ";...case 0x0000
0560: 30 31 31 30 3a 20 72 65 74 75 72 6e 20 22 43 4b  0110: return "CK
0570: 41 5f 53 54 41 52 54 5f 44 41 54 45 22 3b 0a 09  A_START_DATE";..
0580: 09 63 61 73 65 20 30 78 30 30 30 30 30 31 31 31  .case 0x00000111
0590: 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 45 4e  : return "CKA_EN
05a0: 44 5f 44 41 54 45 22 3b 0a 09 09 63 61 73 65 20  D_DATE";...case 
05b0: 30 78 30 30 30 30 30 31 32 30 3a 20 72 65 74 75  0x00000120: retu
05c0: 72 6e 20 22 43 4b 41 5f 4d 4f 44 55 4c 55 53 22  rn "CKA_MODULUS"
05d0: 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30  ;...case 0x00000
05e0: 31 32 31 3a 20 72 65 74 75 72 6e 20 22 43 4b 41  121: return "CKA
05f0: 5f 4d 4f 44 55 4c 55 53 5f 42 49 54 53 22 3b 0a  _MODULUS_BITS";.
0600: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31 32  ..case 0x0000012
0610: 32 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 50  2: return "CKA_P
0620: 55 42 4c 49 43 5f 45 58 50 4f 4e 45 4e 54 22 3b  UBLIC_EXPONENT";
0630: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31  ...case 0x000001
0640: 32 33 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f  23: return "CKA_
0650: 50 52 49 56 41 54 45 5f 45 58 50 4f 4e 45 4e 54  PRIVATE_EXPONENT
0660: 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30  ";...case 0x0000
0670: 30 31 32 34 3a 20 72 65 74 75 72 6e 20 22 43 4b  0124: return "CK
0680: 41 5f 50 52 49 4d 45 5f 31 22 3b 0a 09 09 63 61  A_PRIME_1";...ca
0690: 73 65 20 30 78 30 30 30 30 30 31 32 35 3a 20 72  se 0x00000125: r
06a0: 65 74 75 72 6e 20 22 43 4b 41 5f 50 52 49 4d 45  eturn "CKA_PRIME
06b0: 5f 32 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30  _2";...case 0x00
06c0: 30 30 30 31 32 36 3a 20 72 65 74 75 72 6e 20 22  000126: return "
06d0: 43 4b 41 5f 45 58 50 4f 4e 45 4e 54 5f 31 22 3b  CKA_EXPONENT_1";
06e0: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31  ...case 0x000001
06f0: 32 37 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f  27: return "CKA_
0700: 45 58 50 4f 4e 45 4e 54 5f 32 22 3b 0a 09 09 63  EXPONENT_2";...c
0710: 61 73 65 20 30 78 30 30 30 30 30 31 32 38 3a 20  ase 0x00000128: 
0720: 72 65 74 75 72 6e 20 22 43 4b 41 5f 43 4f 45 46  return "CKA_COEF
0730: 46 49 43 49 45 4e 54 22 3b 0a 09 09 63 61 73 65  FICIENT";...case
0740: 20 30 78 30 30 30 30 30 31 33 30 3a 20 72 65 74   0x00000130: ret
0750: 75 72 6e 20 22 43 4b 41 5f 50 52 49 4d 45 22 3b  urn "CKA_PRIME";
0760: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31  ...case 0x000001
0770: 33 31 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f  31: return "CKA_
0780: 53 55 42 50 52 49 4d 45 22 3b 0a 09 09 63 61 73  SUBPRIME";...cas
0790: 65 20 30 78 30 30 30 30 30 31 33 32 3a 20 72 65  e 0x00000132: re
07a0: 74 75 72 6e 20 22 43 4b 41 5f 42 41 53 45 22 3b  turn "CKA_BASE";
07b0: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31  ...case 0x000001
07c0: 33 33 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f  33: return "CKA_
07d0: 50 52 49 4d 45 5f 42 49 54 53 22 3b 0a 09 09 63  PRIME_BITS";...c
07e0: 61 73 65 20 30 78 30 30 30 30 30 31 33 34 3a 20  ase 0x00000134: 
07f0: 72 65 74 75 72 6e 20 22 43 4b 41 5f 53 55 42 5f  return "CKA_SUB_
0800: 50 52 49 4d 45 5f 42 49 54 53 22 3b 0a 09 09 63  PRIME_BITS";...c
0810: 61 73 65 20 30 78 30 30 30 30 30 31 36 30 3a 20  ase 0x00000160: 
0820: 72 65 74 75 72 6e 20 22 43 4b 41 5f 56 41 4c 55  return "CKA_VALU
0830: 45 5f 42 49 54 53 22 3b 0a 09 09 63 61 73 65 20  E_BITS";...case 
0840: 30 78 30 30 30 30 30 31 36 31 3a 20 72 65 74 75  0x00000161: retu
0850: 72 6e 20 22 43 4b 41 5f 56 41 4c 55 45 5f 4c 45  rn "CKA_VALUE_LE
0860: 4e 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30  N";...case 0x000
0870: 30 30 31 36 32 3a 20 72 65 74 75 72 6e 20 22 43  00162: return "C
0880: 4b 41 5f 45 58 54 52 41 43 54 41 42 4c 45 22 3b  KA_EXTRACTABLE";
0890: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31  ...case 0x000001
08a0: 36 33 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f  63: return "CKA_
08b0: 4c 4f 43 41 4c 22 3b 0a 09 09 63 61 73 65 20 30  LOCAL";...case 0
08c0: 78 30 30 30 30 30 31 36 34 3a 20 72 65 74 75 72  x00000164: retur
08d0: 6e 20 22 43 4b 41 5f 4e 45 56 45 52 5f 45 58 54  n "CKA_NEVER_EXT
08e0: 52 41 43 54 41 42 4c 45 22 3b 0a 09 09 63 61 73  RACTABLE";...cas
08f0: 65 20 30 78 30 30 30 30 30 31 36 35 3a 20 72 65  e 0x00000165: re
0900: 74 75 72 6e 20 22 43 4b 41 5f 41 4c 57 41 59 53  turn "CKA_ALWAYS
0910: 5f 53 45 4e 53 49 54 49 56 45 22 3b 0a 09 09 63  _SENSITIVE";...c
0920: 61 73 65 20 30 78 30 30 30 30 30 31 36 36 3a 20  ase 0x00000166: 
0930: 72 65 74 75 72 6e 20 22 43 4b 41 5f 4b 45 59 5f  return "CKA_KEY_
0940: 47 45 4e 5f 4d 45 43 48 41 4e 49 53 4d 22 3b 0a  GEN_MECHANISM";.
0950: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31 37  ..case 0x0000017
0960: 30 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 4d  0: return "CKA_M
0970: 4f 44 49 46 49 41 42 4c 45 22 3b 0a 09 09 63 61  ODIFIABLE";...ca
0980: 73 65 20 30 78 30 30 30 30 30 31 38 30 3a 20 72  se 0x00000180: r
0990: 65 74 75 72 6e 20 22 43 4b 41 5f 45 43 5f 50 41  eturn "CKA_EC_PA
09a0: 52 41 4d 53 22 3b 0a 09 09 63 61 73 65 20 30 78  RAMS";...case 0x
09b0: 30 30 30 30 30 31 38 31 3a 20 72 65 74 75 72 6e  00000181: return
09c0: 20 22 43 4b 41 5f 45 43 5f 50 4f 49 4e 54 22 3b   "CKA_EC_POINT";
09d0: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 32  ...case 0x000002
09e0: 30 30 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f  00: return "CKA_
09f0: 53 45 43 4f 4e 44 41 52 59 5f 41 55 54 48 22 3b  SECONDARY_AUTH";
0a00: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 32  ...case 0x000002
0a10: 30 31 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f  01: return "CKA_
0a20: 41 55 54 48 5f 50 49 4e 5f 46 4c 41 47 53 22 3b  AUTH_PIN_FLAGS";
0a30: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 33  ...case 0x000003
0a40: 30 30 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f  00: return "CKA_
0a50: 48 57 5f 46 45 41 54 55 52 45 5f 54 59 50 45 22  HW_FEATURE_TYPE"
0a60: 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30  ;...case 0x00000
0a70: 33 30 31 3a 20 72 65 74 75 72 6e 20 22 43 4b 41  301: return "CKA
0a80: 5f 52 45 53 45 54 5f 4f 4e 5f 49 4e 49 54 22 3b  _RESET_ON_INIT";
0a90: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 33  ...case 0x000003
0aa0: 30 32 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f  02: return "CKA_
0ab0: 48 41 53 5f 52 45 53 45 54 22 3b 0a 09 09 63 61  HAS_RESET";...ca
0ac0: 73 65 20 30 78 63 65 35 33 36 33 62 34 3a 20 72  se 0xce5363b4: r
0ad0: 65 74 75 72 6e 20 22 43 4b 41 5f 43 45 52 54 5f  eturn "CKA_CERT_
0ae0: 53 48 41 31 5f 48 41 53 48 22 3b 0a 09 09 63 61  SHA1_HASH";...ca
0af0: 73 65 20 30 78 63 65 35 33 36 33 62 35 3a 20 72  se 0xce5363b5: r
0b00: 65 74 75 72 6e 20 22 43 4b 41 5f 43 45 52 54 5f  eturn "CKA_CERT_
0b10: 4d 44 35 5f 48 41 53 48 22 3b 0a 09 7d 0a 0a 09  MD5_HASH";..}...
0b20: 73 6e 70 72 69 6e 74 66 28 72 65 74 62 75 66 2c  snprintf(retbuf,
0b30: 20 73 69 7a 65 6f 66 28 72 65 74 62 75 66 29 2c   sizeof(retbuf),
0b40: 20 22 30 78 25 30 38 6c 78 22 2c 20 28 75 6e 73   "0x%08lx", (uns
0b50: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 61 74 74 72  igned long) attr
0b60: 69 62 29 3b 0a 09 72 65 74 62 75 66 5b 73 69 7a  ib);..retbuf[siz
0b70: 65 6f 66 28 72 65 74 62 75 66 29 20 2d 20 31 5d  eof(retbuf) - 1]
0b80: 20 3d 20 27 5c 30 27 3b 0a 0a 09 72 65 74 75 72   = '\0';...retur
0b90: 6e 28 72 65 74 62 75 66 29 3b 0a 7d 0a 0a 69 6e  n(retbuf);.}..in
0ba0: 74 20 6d 61 69 6e 5f 70 6b 63 73 31 31 28 76 6f  t main_pkcs11(vo
0bb0: 69 64 29 20 7b 0a 09 43 4b 5f 46 55 4e 43 54 49  id) {..CK_FUNCTI
0bc0: 4f 4e 5f 4c 49 53 54 5f 50 54 52 20 70 46 75 6e  ON_LIST_PTR pFun
0bd0: 63 74 69 6f 6e 4c 69 73 74 3b 0a 09 43 4b 5f 52  ctionList;..CK_R
0be0: 56 20 28 2a 43 5f 43 6c 6f 73 65 53 65 73 73 69  V (*C_CloseSessi
0bf0: 6f 6e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48  on)(CK_SESSION_H
0c00: 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 20  ANDLE hSession) 
0c10: 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28  = NULL;..CK_RV (
0c20: 2a 43 5f 44 65 63 72 79 70 74 29 28 43 4b 5f 53  *C_Decrypt)(CK_S
0c30: 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53  ESSION_HANDLE hS
0c40: 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f  ession, CK_BYTE_
0c50: 50 54 52 20 70 45 6e 63 72 79 70 74 65 64 44 61  PTR pEncryptedDa
0c60: 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 45  ta, CK_ULONG ulE
0c70: 6e 63 72 79 70 74 65 64 44 61 74 61 4c 65 6e 2c  ncryptedDataLen,
0c80: 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 61   CK_BYTE_PTR pDa
0c90: 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52  ta, CK_ULONG_PTR
0ca0: 20 70 75 6c 44 61 74 61 4c 65 6e 29 20 3d 20 4e   pulDataLen) = N
0cb0: 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28 2a 43 5f  ULL;..CK_RV (*C_
0cc0: 44 65 63 72 79 70 74 49 6e 69 74 29 28 43 4b 5f  DecryptInit)(CK_
0cd0: 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68  SESSION_HANDLE h
0ce0: 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48  Session, CK_MECH
0cf0: 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61  ANISM_PTR pMecha
0d00: 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f  nism, CK_OBJECT_
0d10: 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 3d 20 4e  HANDLE hKey) = N
0d20: 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28 2a 43 5f  ULL;..CK_RV (*C_
0d30: 45 6e 63 72 79 70 74 29 28 43 4b 5f 53 45 53 53  Encrypt)(CK_SESS
0d40: 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73  ION_HANDLE hSess
0d50: 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52  ion, CK_BYTE_PTR
0d60: 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47   pData, CK_ULONG
0d70: 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42   ulDataLen, CK_B
0d80: 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 74  YTE_PTR pEncrypt
0d90: 65 64 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47  edData, CK_ULONG
0da0: 5f 50 54 52 20 70 75 6c 45 6e 63 72 79 70 74 65  _PTR pulEncrypte
0db0: 64 44 61 74 61 4c 65 6e 29 20 3d 20 4e 55 4c 4c  dDataLen) = NULL
0dc0: 3b 0a 09 43 4b 5f 52 56 20 28 2a 43 5f 45 6e 63  ;..CK_RV (*C_Enc
0dd0: 72 79 70 74 49 6e 69 74 29 28 43 4b 5f 53 45 53  ryptInit)(CK_SES
0de0: 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73  SION_HANDLE hSes
0df0: 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49  sion, CK_MECHANI
0e00: 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73  SM_PTR pMechanis
0e10: 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e  m, CK_OBJECT_HAN
0e20: 44 4c 45 20 68 4b 65 79 29 20 3d 20 4e 55 4c 4c  DLE hKey) = NULL
0e30: 3b 0a 09 43 4b 5f 52 56 20 28 2a 43 5f 46 69 6e  ;..CK_RV (*C_Fin
0e40: 61 6c 69 7a 65 29 28 43 4b 5f 56 4f 49 44 5f 50  alize)(CK_VOID_P
0e50: 54 52 20 70 52 65 73 65 72 76 65 64 29 20 3d 20  TR pReserved) = 
0e60: 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28 2a 43  NULL;..CK_RV (*C
0e70: 5f 46 69 6e 64 4f 62 6a 65 63 74 73 29 28 43 4b  _FindObjects)(CK
0e80: 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20  _SESSION_HANDLE 
0e90: 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a  hSession, CK_OBJ
0ea0: 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70  ECT_HANDLE_PTR p
0eb0: 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 55 4c 4f 4e  hObject, CK_ULON
0ec0: 47 20 75 6c 4d 61 78 4f 62 6a 65 63 74 43 6f 75  G ulMaxObjectCou
0ed0: 6e 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52  nt, CK_ULONG_PTR
0ee0: 20 70 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 29   pulObjectCount)
0ef0: 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20   = NULL;..CK_RV 
0f00: 28 2a 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46  (*C_FindObjectsF
0f10: 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e  inal)(CK_SESSION
0f20: 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e  _HANDLE hSession
0f30: 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56  ) = NULL;..CK_RV
0f40: 20 28 2a 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73   (*C_FindObjects
0f50: 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e  Init)(CK_SESSION
0f60: 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e  _HANDLE hSession
0f70: 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50  , CK_ATTRIBUTE_P
0f80: 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b  TR pTemplate, CK
0f90: 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 29 20  _ULONG ulCount) 
0fa0: 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28  = NULL;..CK_RV (
0fb0: 2a 43 5f 47 65 74 41 74 74 72 69 62 75 74 65 56  *C_GetAttributeV
0fc0: 61 6c 75 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e  alue)(CK_SESSION
0fd0: 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e  _HANDLE hSession
0fe0: 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44  , CK_OBJECT_HAND
0ff0: 4c 45 20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 41  LE hObject, CK_A
1000: 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 54 65  TTRIBUTE_PTR pTe
1010: 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47  mplate, CK_ULONG
1020: 20 75 6c 43 6f 75 6e 74 29 20 3d 20 4e 55 4c 4c   ulCount) = NULL
1030: 3b 0a 09 43 4b 5f 52 56 20 28 2a 43 5f 47 65 74  ;..CK_RV (*C_Get
1040: 49 6e 66 6f 29 28 43 4b 5f 49 4e 46 4f 5f 50 54  Info)(CK_INFO_PT
1050: 52 20 70 49 6e 66 6f 29 20 3d 20 4e 55 4c 4c 3b  R pInfo) = NULL;
1060: 0a 09 43 4b 5f 52 56 20 28 2a 43 5f 47 65 74 53  ..CK_RV (*C_GetS
1070: 65 73 73 69 6f 6e 49 6e 66 6f 29 28 43 4b 5f 53  essionInfo)(CK_S
1080: 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53  ESSION_HANDLE hS
1090: 65 73 73 69 6f 6e 2c 20 43 4b 5f 53 45 53 53 49  ession, CK_SESSI
10a0: 4f 4e 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66  ON_INFO_PTR pInf
10b0: 6f 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52  o) = NULL;..CK_R
10c0: 56 20 28 2a 43 5f 47 65 74 53 6c 6f 74 49 6e 66  V (*C_GetSlotInf
10d0: 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c  o)(CK_SLOT_ID sl
10e0: 6f 74 49 44 2c 20 43 4b 5f 53 4c 4f 54 5f 49 4e  otID, CK_SLOT_IN
10f0: 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 3d 20  FO_PTR pInfo) = 
1100: 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28 2a 43  NULL;..CK_RV (*C
1110: 5f 47 65 74 53 6c 6f 74 4c 69 73 74 29 28 43 4b  _GetSlotList)(CK
1120: 5f 42 42 4f 4f 4c 20 74 6f 6b 65 6e 50 72 65 73  _BBOOL tokenPres
1130: 65 6e 74 2c 20 43 4b 5f 53 4c 4f 54 5f 49 44 5f  ent, CK_SLOT_ID_
1140: 50 54 52 20 70 53 6c 6f 74 4c 69 73 74 2c 20 43  PTR pSlotList, C
1150: 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 43  K_ULONG_PTR pulC
1160: 6f 75 6e 74 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43  ount) = NULL;..C
1170: 4b 5f 52 56 20 28 2a 43 5f 47 65 74 54 6f 6b 65  K_RV (*C_GetToke
1180: 6e 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49  nInfo)(CK_SLOT_I
1190: 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 54 4f 4b  D slotID, CK_TOK
11a0: 45 4e 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66  EN_INFO_PTR pInf
11b0: 6f 29 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52  o) = NULL;..CK_R
11c0: 56 20 28 2a 43 5f 49 6e 69 74 69 61 6c 69 7a 65  V (*C_Initialize
11d0: 29 28 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 49  )(CK_VOID_PTR pI
11e0: 6e 69 74 41 72 67 73 29 20 3d 20 4e 55 4c 4c 3b  nitArgs) = NULL;
11f0: 0a 09 43 4b 5f 52 56 20 28 2a 43 5f 4c 6f 67 69  ..CK_RV (*C_Logi
1200: 6e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41  n)(CK_SESSION_HA
1210: 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43  NDLE hSession, C
1220: 4b 5f 55 53 45 52 5f 54 59 50 45 20 75 73 65 72  K_USER_TYPE user
1230: 54 79 70 65 2c 20 43 4b 5f 55 54 46 38 43 48 41  Type, CK_UTF8CHA
1240: 52 5f 50 54 52 20 70 50 69 6e 2c 20 43 4b 5f 55  R_PTR pPin, CK_U
1250: 4c 4f 4e 47 20 75 6c 50 69 6e 4c 65 6e 29 20 3d  LONG ulPinLen) =
1260: 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28 2a   NULL;..CK_RV (*
1270: 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 29 28 43  C_OpenSession)(C
1280: 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44  K_SLOT_ID slotID
1290: 2c 20 43 4b 5f 46 4c 41 47 53 20 66 6c 61 67 73  , CK_FLAGS flags
12a0: 2c 20 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 41  , CK_VOID_PTR pA
12b0: 70 70 6c 69 63 61 74 69 6f 6e 2c 20 43 4b 5f 4e  pplication, CK_N
12c0: 4f 54 49 46 59 20 6e 6f 74 69 66 79 2c 20 43 4b  OTIFY notify, CK
12d0: 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f  _SESSION_HANDLE_
12e0: 50 54 52 20 70 68 53 65 73 73 69 6f 6e 29 20 3d  PTR phSession) =
12f0: 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20 28 2a   NULL;..CK_RV (*
1300: 43 5f 53 69 67 6e 29 28 43 4b 5f 53 45 53 53 49  C_Sign)(CK_SESSI
1310: 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69  ON_HANDLE hSessi
1320: 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20  on, CK_BYTE_PTR 
1330: 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20  pData, CK_ULONG 
1340: 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59  ulDataLen, CK_BY
1350: 54 45 5f 50 54 52 20 70 53 69 67 6e 61 74 75 72  TE_PTR pSignatur
1360: 65 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20  e, CK_ULONG_PTR 
1370: 70 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 29  pulSignatureLen)
1380: 20 3d 20 4e 55 4c 4c 3b 0a 09 43 4b 5f 52 56 20   = NULL;..CK_RV 
1390: 28 2a 43 5f 53 69 67 6e 49 6e 69 74 29 28 43 4b  (*C_SignInit)(CK
13a0: 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20  _SESSION_HANDLE 
13b0: 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43  hSession, CK_MEC
13c0: 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68  HANISM_PTR pMech
13d0: 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54  anism, CK_OBJECT
13e0: 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 3d 20  _HANDLE hKey) = 
13f0: 4e 55 4c 4c 3b 0a 09 43 4b 5f 43 5f 49 4e 49 54  NULL;..CK_C_INIT
1400: 49 41 4c 49 5a 45 5f 41 52 47 53 20 69 6e 69 74  IALIZE_ARGS init
1410: 61 72 67 73 3b 0a 09 43 4b 5f 49 4e 46 4f 20 63  args;..CK_INFO c
1420: 6c 69 65 6e 74 69 6e 66 6f 3b 0a 09 43 4b 5f 55  lientinfo;..CK_U
1430: 4c 4f 4e 47 20 6e 75 6d 53 6c 6f 74 73 2c 20 63  LONG numSlots, c
1440: 75 72 72 53 6c 6f 74 3b 0a 09 43 4b 5f 53 4c 4f  urrSlot;..CK_SLO
1450: 54 5f 49 44 5f 50 54 52 20 73 6c 6f 74 73 3b 0a  T_ID_PTR slots;.
1460: 09 43 4b 5f 53 4c 4f 54 5f 49 4e 46 4f 20 73 6c  .CK_SLOT_INFO sl
1470: 6f 74 49 6e 66 6f 3b 0a 09 43 4b 5f 54 4f 4b 45  otInfo;..CK_TOKE
1480: 4e 5f 49 4e 46 4f 20 74 6f 6b 65 6e 49 6e 66 6f  N_INFO tokenInfo
1490: 3b 0a 09 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41  ;..CK_SESSION_HA
14a0: 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 3b 0a 09  NDLE hSession;..
14b0: 43 4b 5f 53 45 53 53 49 4f 4e 5f 49 4e 46 4f 20  CK_SESSION_INFO 
14c0: 73 65 73 73 69 6f 6e 49 6e 66 6f 3b 0a 09 43 4b  sessionInfo;..CK
14d0: 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68  _OBJECT_HANDLE h
14e0: 4f 62 6a 65 63 74 2c 20 2a 70 72 69 76 61 74 65  Object, *private
14f0: 4b 65 79 4f 62 6a 65 63 74 73 5f 72 6f 6f 74 2c  KeyObjects_root,
1500: 20 2a 70 72 69 76 61 74 65 4b 65 79 4f 62 6a 65   *privateKeyObje
1510: 63 74 73 2c 20 2a 63 75 72 72 50 72 69 76 4b 65  cts, *currPrivKe
1520: 79 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 75 6c 4f  y;..CK_ULONG ulO
1530: 62 6a 65 63 74 43 6f 75 6e 74 3b 0a 09 43 4b 5f  bjectCount;..CK_
1540: 41 54 54 52 49 42 55 54 45 20 74 65 6d 70 6c 61  ATTRIBUTE templa
1550: 74 65 5b 5d 20 3d 20 7b 0a 09 20 20 20 20 20 20  te[] = {..      
1560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1570: 20 20 20 20 20 7b 43 4b 41 5f 43 4c 41 53 53 2c       {CKA_CLASS,
1580: 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 20 20   NULL, 0},..    
1590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a0: 20 20 20 20 20 20 20 7b 43 4b 41 5f 54 4f 4b 45         {CKA_TOKE
15b0: 4e 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20  N, NULL, 0},..  
15c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d0: 20 20 20 20 20 20 20 20 20 7b 43 4b 41 5f 4c 41           {CKA_LA
15e0: 42 45 4c 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09  BEL, NULL, 0},..
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1600: 20 20 20 20 20 20 20 20 20 20 20 7b 43 4b 41 5f             {CKA_
1610: 50 52 49 56 41 54 45 2c 20 4e 55 4c 4c 2c 20 30  PRIVATE, NULL, 0
1620: 7d 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  },..            
1630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1640: 43 4b 41 5f 49 44 2c 20 4e 55 4c 4c 2c 20 30 7d  CKA_ID, NULL, 0}
1650: 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 43                {C
1670: 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52  KA_SERIAL_NUMBER
1680: 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 20  , NULL, 0},..   
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a0: 20 20 20 20 20 20 20 20 7b 43 4b 41 5f 53 55 42          {CKA_SUB
16b0: 4a 45 43 54 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a  JECT, NULL, 0},.
16c0: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 43 4b 41              {CKA
16e0: 5f 49 53 53 55 45 52 2c 20 4e 55 4c 4c 2c 20 30  _ISSUER, NULL, 0
16f0: 7d 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  },..            
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1710: 43 4b 41 5f 43 45 52 54 49 46 49 43 41 54 45 5f  CKA_CERTIFICATE_
1720: 54 59 50 45 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a  TYPE, NULL, 0},.
1730: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1740: 20 20 20 20 20 20 20 20 20 20 20 20 7b 43 4b 41              {CKA
1750: 5f 4b 45 59 5f 54 59 50 45 2c 20 4e 55 4c 4c 2c  _KEY_TYPE, NULL,
1760: 20 30 7d 2c 0a 09 20 20 20 20 20 20 20 20 20 20   0},..          
1770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1780: 20 7b 43 4b 41 5f 53 49 47 4e 2c 20 4e 55 4c 4c   {CKA_SIGN, NULL
1790: 2c 20 30 7d 2c 0a 09 20 20 20 20 20 20 20 20 20  , 0},..         
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b0: 20 20 7b 43 4b 41 5f 56 41 4c 55 45 2c 20 4e 55    {CKA_VALUE, NU
17c0: 4c 4c 2c 20 30 7d 2c 0a 09 09 09 09 20 20 20 7b  LL, 0},.....   {
17d0: 43 4b 41 5f 43 45 52 54 5f 4d 44 35 5f 48 41 53  CKA_CERT_MD5_HAS
17e0: 48 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 09 09  H, NULL, 0},....
17f0: 09 20 20 20 7b 43 4b 41 5f 43 45 52 54 5f 53 48  .   {CKA_CERT_SH
1800: 41 31 5f 48 41 53 48 2c 20 4e 55 4c 4c 2c 20 30  A1_HASH, NULL, 0
1810: 7d 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 5f 54  },.....   {CKA_T
1820: 52 55 53 54 45 44 2c 20 4e 55 4c 4c 2c 20 30 7d  RUSTED, NULL, 0}
1830: 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 5f 54 52  ,.....   {CKA_TR
1840: 55 53 54 5f 43 4c 49 45 4e 54 5f 41 55 54 48 2c  UST_CLIENT_AUTH,
1850: 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 09 09 09 20   NULL, 0},..... 
1860: 20 20 7b 43 4b 41 5f 54 52 55 53 54 5f 43 4f 44    {CKA_TRUST_COD
1870: 45 5f 53 49 47 4e 49 4e 47 2c 20 4e 55 4c 4c 2c  E_SIGNING, NULL,
1880: 20 30 7d 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41   0},.....   {CKA
1890: 5f 54 52 55 53 54 5f 43 52 4c 5f 53 49 47 4e 2c  _TRUST_CRL_SIGN,
18a0: 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 09 09 09 20   NULL, 0},..... 
18b0: 20 20 7b 43 4b 41 5f 54 52 55 53 54 5f 44 41 54    {CKA_TRUST_DAT
18c0: 41 5f 45 4e 43 49 50 48 45 52 4d 45 4e 54 2c 20  A_ENCIPHERMENT, 
18d0: 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 09 09 09 20 20  NULL, 0},.....  
18e0: 20 7b 43 4b 41 5f 54 52 55 53 54 5f 44 49 47 49   {CKA_TRUST_DIGI
18f0: 54 41 4c 5f 53 49 47 4e 41 54 55 52 45 2c 20 4e  TAL_SIGNATURE, N
1900: 55 4c 4c 2c 20 30 7d 2c 0a 09 09 09 09 20 20 20  ULL, 0},.....   
1910: 7b 43 4b 41 5f 54 52 55 53 54 5f 45 4d 41 49 4c  {CKA_TRUST_EMAIL
1920: 5f 50 52 4f 54 45 43 54 49 4f 4e 2c 20 4e 55 4c  _PROTECTION, NUL
1930: 4c 2c 20 30 7d 2c 0a 09 09 09 09 20 20 20 7b 43  L, 0},.....   {C
1940: 4b 41 5f 54 52 55 53 54 5f 4b 45 59 5f 41 47 52  KA_TRUST_KEY_AGR
1950: 45 45 4d 45 4e 54 2c 20 4e 55 4c 4c 2c 20 30 7d  EEMENT, NULL, 0}
1960: 2c 0a 09 09 09 09 20 20 20 7b 43 4b 41 5f 54 52  ,.....   {CKA_TR
1970: 55 53 54 5f 4b 45 59 5f 43 45 52 54 5f 53 49 47  UST_KEY_CERT_SIG
1980: 4e 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 09 09  N, NULL, 0},....
1990: 09 20 20 20 7b 43 4b 41 5f 54 52 55 53 54 5f 4b  .   {CKA_TRUST_K
19a0: 45 59 5f 45 4e 43 49 50 48 45 52 4d 45 4e 54 2c  EY_ENCIPHERMENT,
19b0: 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 09 09 09 20   NULL, 0},..... 
19c0: 20 20 7b 43 4b 41 5f 54 52 55 53 54 5f 4e 4f 4e    {CKA_TRUST_NON
19d0: 5f 52 45 50 55 44 49 41 54 49 4f 4e 2c 20 4e 55  _REPUDIATION, NU
19e0: 4c 4c 2c 20 30 7d 2c 0a 09 09 09 09 20 20 20 7b  LL, 0},.....   {
19f0: 43 4b 41 5f 54 52 55 53 54 5f 53 45 52 56 45 52  CKA_TRUST_SERVER
1a00: 5f 41 55 54 48 2c 20 4e 55 4c 4c 2c 20 30 7d 0a  _AUTH, NULL, 0}.
1a10: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a20: 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2a 63             }, *c
1a30: 75 72 72 5f 61 74 74 72 3b 0a 09 43 4b 5f 55 4c  urr_attr;..CK_UL
1a40: 4f 4e 47 20 63 75 72 72 5f 61 74 74 72 5f 69 64  ONG curr_attr_id
1a50: 78 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 62 79 74  x;..CK_ULONG byt
1a60: 65 5f 69 64 78 3b 0a 09 43 4b 5f 55 54 46 38 43  e_idx;..CK_UTF8C
1a70: 48 41 52 20 75 73 65 72 5f 70 69 6e 5b 31 30 32  HAR user_pin[102
1a80: 34 5d 2c 20 2a 70 75 63 56 61 6c 75 65 3b 0a 09  4], *pucValue;..
1a90: 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 53 20  CK_OBJECT_CLASS 
1aa0: 6f 62 6a 65 63 74 43 6c 61 73 73 3b 0a 09 43 4b  objectClass;..CK
1ab0: 5f 42 59 54 45 20 73 69 67 6e 61 74 75 72 65 5b  _BYTE signature[
1ac0: 31 30 32 34 5d 2c 20 65 6e 63 72 79 70 74 65 64  1024], encrypted
1ad0: 5f 62 75 66 5b 31 36 33 38 34 5d 2c 20 64 65 63  _buf[16384], dec
1ae0: 72 79 70 74 65 64 5f 62 75 66 5b 31 36 33 38 34  rypted_buf[16384
1af0: 5d 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 73 69 67  ];..CK_ULONG sig
1b00: 6e 61 74 75 72 65 5f 6c 65 6e 2c 20 65 6e 63 72  nature_len, encr
1b10: 79 70 74 65 64 5f 62 75 66 6c 65 6e 2c 20 64 65  ypted_buflen, de
1b20: 63 72 79 70 74 65 64 5f 62 75 66 6c 65 6e 3b 0a  crypted_buflen;.
1b30: 09 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 20 6d 65  .CK_MECHANISM me
1b40: 63 68 61 6e 69 73 6d 20 3d 20 7b 43 4b 4d 5f 52  chanism = {CKM_R
1b50: 53 41 5f 50 4b 43 53 2c 20 4e 55 4c 4c 2c 20 30  SA_PKCS, NULL, 0
1b60: 7d 3b 0a 09 43 4b 5f 52 56 20 63 68 6b 5f 72 76  };..CK_RV chk_rv
1b70: 3b 0a 09 63 68 61 72 20 2a 66 67 65 74 73 5f 72  ;..char *fgets_r
1b80: 65 74 3b 0a 09 69 6e 74 20 69 3b 0a 0a 09 63 68  et;..int i;...ch
1b90: 6b 5f 72 76 20 3d 20 43 5f 47 65 74 46 75 6e 63  k_rv = C_GetFunc
1ba0: 74 69 6f 6e 4c 69 73 74 28 26 70 46 75 6e 63 74  tionList(&pFunct
1bb0: 69 6f 6e 4c 69 73 74 29 3b 0a 09 69 66 20 28 63  ionList);..if (c
1bc0: 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29  hk_rv != CKR_OK)
1bd0: 20 7b 0a 09 09 70 72 69 6e 74 66 28 22 43 5f 47   {...printf("C_G
1be0: 65 74 46 75 6e 63 74 69 6f 6e 4c 69 73 74 28 29  etFunctionList()
1bf0: 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72   failed.");....r
1c00: 65 74 75 72 6e 28 31 29 3b 0a 09 7d 0a 0a 09 43  eturn(1);..}...C
1c10: 5f 43 6c 6f 73 65 53 65 73 73 69 6f 6e 20 3d 20  _CloseSession = 
1c20: 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43  pFunctionList->C
1c30: 5f 43 6c 6f 73 65 53 65 73 73 69 6f 6e 3b 0a 09  _CloseSession;..
1c40: 43 5f 44 65 63 72 79 70 74 20 3d 20 70 46 75 6e  C_Decrypt = pFun
1c50: 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63  ctionList->C_Dec
1c60: 72 79 70 74 3b 0a 09 43 5f 44 65 63 72 79 70 74  rypt;..C_Decrypt
1c70: 49 6e 69 74 20 3d 20 70 46 75 6e 63 74 69 6f 6e  Init = pFunction
1c80: 4c 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 49  List->C_DecryptI
1c90: 6e 69 74 3b 0a 09 43 5f 45 6e 63 72 79 70 74 20  nit;..C_Encrypt 
1ca0: 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d  = pFunctionList-
1cb0: 3e 43 5f 45 6e 63 72 79 70 74 3b 0a 09 43 5f 45  >C_Encrypt;..C_E
1cc0: 6e 63 72 79 70 74 49 6e 69 74 20 3d 20 70 46 75  ncryptInit = pFu
1cd0: 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e  nctionList->C_En
1ce0: 63 72 79 70 74 49 6e 69 74 3b 0a 09 43 5f 46 69  cryptInit;..C_Fi
1cf0: 6e 61 6c 69 7a 65 20 3d 20 70 46 75 6e 63 74 69  nalize = pFuncti
1d00: 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 61 6c 69  onList->C_Finali
1d10: 7a 65 3b 0a 09 43 5f 46 69 6e 64 4f 62 6a 65 63  ze;..C_FindObjec
1d20: 74 73 20 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69  ts = pFunctionLi
1d30: 73 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74  st->C_FindObject
1d40: 73 3b 0a 09 43 5f 46 69 6e 64 4f 62 6a 65 63 74  s;..C_FindObject
1d50: 73 46 69 6e 61 6c 20 3d 20 70 46 75 6e 63 74 69  sFinal = pFuncti
1d60: 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 4f 62  onList->C_FindOb
1d70: 6a 65 63 74 73 46 69 6e 61 6c 3b 0a 09 43 5f 46  jectsFinal;..C_F
1d80: 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 20 3d  indObjectsInit =
1d90: 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e   pFunctionList->
1da0: 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69  C_FindObjectsIni
1db0: 74 3b 0a 09 43 5f 47 65 74 41 74 74 72 69 62 75  t;..C_GetAttribu
1dc0: 74 65 56 61 6c 75 65 20 3d 20 70 46 75 6e 63 74  teValue = pFunct
1dd0: 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 41 74  ionList->C_GetAt
1de0: 74 72 69 62 75 74 65 56 61 6c 75 65 3b 0a 09 43  tributeValue;..C
1df0: 5f 47 65 74 49 6e 66 6f 20 3d 20 70 46 75 6e 63  _GetInfo = pFunc
1e00: 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 49  tionList->C_GetI
1e10: 6e 66 6f 3b 0a 09 43 5f 47 65 74 53 65 73 73 69  nfo;..C_GetSessi
1e20: 6f 6e 49 6e 66 6f 20 3d 20 70 46 75 6e 63 74 69  onInfo = pFuncti
1e30: 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 53 65 73  onList->C_GetSes
1e40: 73 69 6f 6e 49 6e 66 6f 3b 0a 09 43 5f 47 65 74  sionInfo;..C_Get
1e50: 53 6c 6f 74 49 6e 66 6f 20 3d 20 70 46 75 6e 63  SlotInfo = pFunc
1e60: 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 53  tionList->C_GetS
1e70: 6c 6f 74 49 6e 66 6f 3b 0a 09 43 5f 47 65 74 53  lotInfo;..C_GetS
1e80: 6c 6f 74 4c 69 73 74 20 3d 20 70 46 75 6e 63 74  lotList = pFunct
1e90: 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 53 6c  ionList->C_GetSl
1ea0: 6f 74 4c 69 73 74 3b 0a 09 43 5f 47 65 74 54 6f  otList;..C_GetTo
1eb0: 6b 65 6e 49 6e 66 6f 20 3d 20 70 46 75 6e 63 74  kenInfo = pFunct
1ec0: 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 54 6f  ionList->C_GetTo
1ed0: 6b 65 6e 49 6e 66 6f 3b 0a 09 43 5f 49 6e 69 74  kenInfo;..C_Init
1ee0: 69 61 6c 69 7a 65 20 3d 20 70 46 75 6e 63 74 69  ialize = pFuncti
1ef0: 6f 6e 4c 69 73 74 2d 3e 43 5f 49 6e 69 74 69 61  onList->C_Initia
1f00: 6c 69 7a 65 3b 0a 09 43 5f 4c 6f 67 69 6e 20 3d  lize;..C_Login =
1f10: 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e   pFunctionList->
1f20: 43 5f 4c 6f 67 69 6e 3b 0a 09 43 5f 4f 70 65 6e  C_Login;..C_Open
1f30: 53 65 73 73 69 6f 6e 20 3d 20 70 46 75 6e 63 74  Session = pFunct
1f40: 69 6f 6e 4c 69 73 74 2d 3e 43 5f 4f 70 65 6e 53  ionList->C_OpenS
1f50: 65 73 73 69 6f 6e 3b 0a 09 43 5f 53 69 67 6e 20  ession;..C_Sign 
1f60: 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d  = pFunctionList-
1f70: 3e 43 5f 53 69 67 6e 3b 0a 09 43 5f 53 69 67 6e  >C_Sign;..C_Sign
1f80: 49 6e 69 74 20 3d 20 70 46 75 6e 63 74 69 6f 6e  Init = pFunction
1f90: 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 49 6e 69 74  List->C_SignInit
1fa0: 3b 0a 0a 09 70 72 69 76 61 74 65 4b 65 79 4f 62  ;...privateKeyOb
1fb0: 6a 65 63 74 73 20 3d 20 6d 61 6c 6c 6f 63 28 73  jects = malloc(s
1fc0: 69 7a 65 6f 66 28 2a 70 72 69 76 61 74 65 4b 65  izeof(*privateKe
1fd0: 79 4f 62 6a 65 63 74 73 29 20 2a 20 31 30 32 34  yObjects) * 1024
1fe0: 29 3b 0a 09 70 72 69 76 61 74 65 4b 65 79 4f 62  );..privateKeyOb
1ff0: 6a 65 63 74 73 5f 72 6f 6f 74 20 3d 20 70 72 69  jects_root = pri
2000: 76 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 3b 0a  vateKeyObjects;.
2010: 09 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c  .for (i = 0; i <
2020: 20 31 30 32 34 3b 20 69 2b 2b 29 20 7b 0a 09 09   1024; i++) {...
2030: 70 72 69 76 61 74 65 4b 65 79 4f 62 6a 65 63 74  privateKeyObject
2040: 73 5b 69 5d 20 3d 20 43 4b 5f 49 4e 56 41 4c 49  s[i] = CK_INVALI
2050: 44 5f 48 41 4e 44 4c 45 3b 0a 09 7d 0a 0a 09 69  D_HANDLE;..}...i
2060: 6e 69 74 61 72 67 73 2e 43 72 65 61 74 65 4d 75  nitargs.CreateMu
2070: 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 69 6e 69  tex = NULL;..ini
2080: 74 61 72 67 73 2e 44 65 73 74 72 6f 79 4d 75 74  targs.DestroyMut
2090: 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 69 6e 69 74  ex = NULL;..init
20a0: 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 20 3d  args.LockMutex =
20b0: 20 4e 55 4c 4c 3b 0a 09 69 6e 69 74 61 72 67 73   NULL;..initargs
20c0: 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 20 3d 20 4e  .UnlockMutex = N
20d0: 55 4c 4c 3b 0a 09 69 6e 69 74 61 72 67 73 2e 66  ULL;..initargs.f
20e0: 6c 61 67 73 20 3d 20 43 4b 46 5f 4f 53 5f 4c 4f  lags = CKF_OS_LO
20f0: 43 4b 49 4e 47 5f 4f 4b 3b 0a 09 69 6e 69 74 61  CKING_OK;..inita
2100: 72 67 73 2e 70 52 65 73 65 72 76 65 64 20 3d 20  rgs.pReserved = 
2110: 4e 55 4c 4c 3b 0a 0a 09 63 68 6b 5f 72 76 20 3d  NULL;...chk_rv =
2120: 20 43 5f 49 6e 69 74 69 61 6c 69 7a 65 28 26 69   C_Initialize(&i
2130: 6e 69 74 61 72 67 73 29 3b 0a 09 69 66 20 28 63  nitargs);..if (c
2140: 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29  hk_rv != CKR_OK)
2150: 20 7b 0a 09 09 69 6e 69 74 61 72 67 73 2e 43 72   {...initargs.Cr
2160: 65 61 74 65 4d 75 74 65 78 20 3d 20 4e 55 4c 4c  eateMutex = NULL
2170: 3b 0a 09 09 69 6e 69 74 61 72 67 73 2e 44 65 73  ;...initargs.Des
2180: 74 72 6f 79 4d 75 74 65 78 20 3d 20 4e 55 4c 4c  troyMutex = NULL
2190: 3b 0a 09 09 69 6e 69 74 61 72 67 73 2e 4c 6f 63  ;...initargs.Loc
21a0: 6b 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09  kMutex = NULL;..
21b0: 09 69 6e 69 74 61 72 67 73 2e 55 6e 6c 6f 63 6b  .initargs.Unlock
21c0: 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09  Mutex = NULL;...
21d0: 69 6e 69 74 61 72 67 73 2e 66 6c 61 67 73 20 3d  initargs.flags =
21e0: 20 30 3b 0a 09 09 69 6e 69 74 61 72 67 73 2e 70   0;...initargs.p
21f0: 52 65 73 65 72 76 65 64 20 3d 20 4e 55 4c 4c 3b  Reserved = NULL;
2200: 0a 0a 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f 49  ....chk_rv = C_I
2210: 6e 69 74 69 61 6c 69 7a 65 28 26 69 6e 69 74 61  nitialize(&inita
2220: 72 67 73 29 3b 0a 09 09 69 66 20 28 63 68 6b 5f  rgs);...if (chk_
2230: 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a  rv != CKR_OK) {.
2240: 09 09 09 70 72 69 6e 74 66 28 22 43 5f 49 6e 69  ...printf("C_Ini
2250: 74 69 61 6c 69 7a 65 28 29 20 66 61 69 6c 65 64  tialize() failed
2260: 2e 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28  .");.....return(
2270: 31 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 63 68 6b  1);...}..}...chk
2280: 5f 72 76 20 3d 20 43 5f 47 65 74 49 6e 66 6f 28  _rv = C_GetInfo(
2290: 26 63 6c 69 65 6e 74 69 6e 66 6f 29 3b 0a 09 69  &clientinfo);..i
22a0: 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52  f (chk_rv != CKR
22b0: 5f 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e 28  _OK) {...return(
22c0: 31 29 3b 0a 09 7d 0a 0a 09 70 72 69 6e 74 66 28  1);..}...printf(
22d0: 22 50 4b 43 53 23 31 31 20 43 6c 69 65 6e 74 20  "PKCS#11 Client 
22e0: 56 65 72 73 69 6f 6e 3a 20 25 69 2e 25 69 2c 20  Version: %i.%i, 
22f0: 4c 69 62 72 61 72 79 20 56 65 72 73 69 6f 6e 20  Library Version 
2300: 25 69 2e 25 69 5c 6e 22 2c 20 63 6c 69 65 6e 74  %i.%i\n", client
2310: 69 6e 66 6f 2e 63 72 79 70 74 6f 6b 69 56 65 72  info.cryptokiVer
2320: 73 69 6f 6e 2e 6d 61 6a 6f 72 2c 20 63 6c 69 65  sion.major, clie
2330: 6e 74 69 6e 66 6f 2e 63 72 79 70 74 6f 6b 69 56  ntinfo.cryptokiV
2340: 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 2c 20 63 6c  ersion.minor, cl
2350: 69 65 6e 74 69 6e 66 6f 2e 6c 69 62 72 61 72 79  ientinfo.library
2360: 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 2c 20 63  Version.major, c
2370: 6c 69 65 6e 74 69 6e 66 6f 2e 6c 69 62 72 61 72  lientinfo.librar
2380: 79 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 29 3b  yVersion.minor);
2390: 0a 09 70 72 69 6e 74 66 28 22 50 4b 43 53 23 31  ..printf("PKCS#1
23a0: 31 20 4d 61 6e 75 66 49 44 3a 20 25 2e 2a 73 2c  1 ManufID: %.*s,
23b0: 20 4c 69 62 72 61 72 79 44 65 73 63 3a 20 25 2e   LibraryDesc: %.
23c0: 2a 73 5c 6e 22 2c 20 33 32 2c 20 63 6c 69 65 6e  *s\n", 32, clien
23d0: 74 69 6e 66 6f 2e 6d 61 6e 75 66 61 63 74 75 72  tinfo.manufactur
23e0: 65 72 49 44 2c 20 33 32 2c 20 63 6c 69 65 6e 74  erID, 32, client
23f0: 69 6e 66 6f 2e 6c 69 62 72 61 72 79 44 65 73 63  info.libraryDesc
2400: 72 69 70 74 69 6f 6e 29 3b 0a 0a 09 63 68 6b 5f  ription);...chk_
2410: 72 76 20 3d 20 43 5f 47 65 74 53 6c 6f 74 4c 69  rv = C_GetSlotLi
2420: 73 74 28 46 41 4c 53 45 2c 20 4e 55 4c 4c 2c 20  st(FALSE, NULL, 
2430: 26 6e 75 6d 53 6c 6f 74 73 29 3b 0a 09 69 66 20  &numSlots);..if 
2440: 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f  (chk_rv != CKR_O
2450: 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 31 29  K) {...return(1)
2460: 3b 0a 09 7d 0a 0a 09 70 72 69 6e 74 66 28 22 4e  ;..}...printf("N
2470: 75 6d 62 65 72 20 6f 66 20 53 6c 6f 74 73 3a 20  umber of Slots: 
2480: 25 6c 75 5c 6e 22 2c 20 6e 75 6d 53 6c 6f 74 73  %lu\n", numSlots
2490: 29 3b 0a 0a 09 73 6c 6f 74 73 20 3d 20 6d 61 6c  );...slots = mal
24a0: 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 73 6c 6f 74  loc(sizeof(*slot
24b0: 73 29 20 2a 20 6e 75 6d 53 6c 6f 74 73 29 3b 0a  s) * numSlots);.
24c0: 0a 09 63 68 6b 5f 72 76 20 3d 20 43 5f 47 65 74  ..chk_rv = C_Get
24d0: 53 6c 6f 74 4c 69 73 74 28 46 41 4c 53 45 2c 20  SlotList(FALSE, 
24e0: 73 6c 6f 74 73 2c 20 26 6e 75 6d 53 6c 6f 74 73  slots, &numSlots
24f0: 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 76 20 21  );..if (chk_rv !
2500: 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 72 65  = CKR_OK) {...re
2510: 74 75 72 6e 28 31 29 3b 0a 09 7d 0a 0a 09 66 6f  turn(1);..}...fo
2520: 72 20 28 63 75 72 72 53 6c 6f 74 20 3d 20 30 3b  r (currSlot = 0;
2530: 20 63 75 72 72 53 6c 6f 74 20 3c 20 6e 75 6d 53   currSlot < numS
2540: 6c 6f 74 73 3b 20 63 75 72 72 53 6c 6f 74 2b 2b  lots; currSlot++
2550: 29 20 7b 0a 09 09 70 72 69 6e 74 66 28 22 20 20  ) {...printf("  
2560: 53 6c 6f 74 20 25 6c 75 3a 5c 6e 22 2c 20 63 75  Slot %lu:\n", cu
2570: 72 72 53 6c 6f 74 29 3b 0a 0a 09 09 63 68 6b 5f  rrSlot);....chk_
2580: 72 76 20 3d 20 43 5f 47 65 74 53 6c 6f 74 49 6e  rv = C_GetSlotIn
2590: 66 6f 28 73 6c 6f 74 73 5b 63 75 72 72 53 6c 6f  fo(slots[currSlo
25a0: 74 5d 2c 20 26 73 6c 6f 74 49 6e 66 6f 29 3b 0a  t], &slotInfo);.
25b0: 09 09 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20  ..if (chk_rv != 
25c0: 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 72 65 74  CKR_OK) {....ret
25d0: 75 72 6e 28 31 29 3b 0a 09 09 7d 0a 0a 09 09 70  urn(1);...}....p
25e0: 72 69 6e 74 66 28 22 20 20 20 20 49 64 20 20 20  rintf("    Id   
25f0: 20 20 3a 20 25 6c 75 5c 6e 22 2c 20 28 75 6e 73    : %lu\n", (uns
2600: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 6c 6f 74  igned long) slot
2610: 73 5b 63 75 72 72 53 6c 6f 74 5d 29 3b 0a 09 09  s[currSlot]);...
2620: 70 72 69 6e 74 66 28 22 20 20 20 20 44 65 73 63  printf("    Desc
2630: 20 20 20 3a 20 25 2e 2a 73 5c 6e 22 2c 20 33 32     : %.*s\n", 32
2640: 2c 20 73 6c 6f 74 49 6e 66 6f 2e 73 6c 6f 74 44  , slotInfo.slotD
2650: 65 73 63 72 69 70 74 69 6f 6e 29 3b 0a 09 09 70  escription);...p
2660: 72 69 6e 74 66 28 22 20 20 20 20 4d 61 6e 75 66  rintf("    Manuf
2670: 49 44 3a 20 25 2e 2a 73 5c 6e 22 2c 20 33 32 2c  ID: %.*s\n", 32,
2680: 20 73 6c 6f 74 49 6e 66 6f 2e 6d 61 6e 75 66 61   slotInfo.manufa
2690: 63 74 75 72 65 72 49 44 29 3b 0a 09 09 70 72 69  cturerID);...pri
26a0: 6e 74 66 28 22 20 20 20 20 48 57 56 65 72 73 20  ntf("    HWVers 
26b0: 3a 20 25 69 2e 25 69 5c 6e 22 2c 20 73 6c 6f 74  : %i.%i\n", slot
26c0: 49 6e 66 6f 2e 68 61 72 64 77 61 72 65 56 65 72  Info.hardwareVer
26d0: 73 69 6f 6e 2e 6d 61 6a 6f 72 2c 20 73 6c 6f 74  sion.major, slot
26e0: 49 6e 66 6f 2e 68 61 72 64 77 61 72 65 56 65 72  Info.hardwareVer
26f0: 73 69 6f 6e 2e 6d 69 6e 6f 72 29 3b 0a 09 09 70  sion.minor);...p
2700: 72 69 6e 74 66 28 22 20 20 20 20 46 57 56 65 72  rintf("    FWVer
2710: 73 20 3a 20 25 69 2e 25 69 5c 6e 22 2c 20 73 6c  s : %i.%i\n", sl
2720: 6f 74 49 6e 66 6f 2e 66 69 72 6d 77 61 72 65 56  otInfo.firmwareV
2730: 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 2c 20 73 6c  ersion.major, sl
2740: 6f 74 49 6e 66 6f 2e 66 69 72 6d 77 61 72 65 56  otInfo.firmwareV
2750: 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 29 3b 0a 09  ersion.minor);..
2760: 09 70 72 69 6e 74 66 28 22 20 20 20 20 46 6c 61  .printf("    Fla
2770: 67 73 20 20 3a 20 22 29 3b 0a 09 09 69 66 20 28  gs  : ");...if (
2780: 28 73 6c 6f 74 49 6e 66 6f 2e 66 6c 61 67 73 20  (slotInfo.flags 
2790: 26 20 43 4b 46 5f 54 4f 4b 45 4e 5f 50 52 45 53  & CKF_TOKEN_PRES
27a0: 45 4e 54 29 20 3d 3d 20 43 4b 46 5f 54 4f 4b 45  ENT) == CKF_TOKE
27b0: 4e 5f 50 52 45 53 45 4e 54 29 20 7b 0a 09 09 09  N_PRESENT) {....
27c0: 70 72 69 6e 74 66 28 22 43 4b 46 5f 54 4f 4b 45  printf("CKF_TOKE
27d0: 4e 5f 50 52 45 53 45 4e 54 20 22 29 3b 0a 09 09  N_PRESENT ");...
27e0: 7d 0a 09 09 69 66 20 28 28 73 6c 6f 74 49 6e 66  }...if ((slotInf
27f0: 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 52 45  o.flags & CKF_RE
2800: 4d 4f 56 41 42 4c 45 5f 44 45 56 49 43 45 29 20  MOVABLE_DEVICE) 
2810: 3d 3d 20 43 4b 46 5f 52 45 4d 4f 56 41 42 4c 45  == CKF_REMOVABLE
2820: 5f 44 45 56 49 43 45 29 20 7b 0a 09 09 09 70 72  _DEVICE) {....pr
2830: 69 6e 74 66 28 22 43 4b 46 5f 52 45 4d 4f 56 41  intf("CKF_REMOVA
2840: 42 4c 45 5f 44 45 56 49 43 45 20 22 29 3b 0a 09  BLE_DEVICE ");..
2850: 09 7d 0a 09 09 69 66 20 28 28 73 6c 6f 74 49 6e  .}...if ((slotIn
2860: 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 48  fo.flags & CKF_H
2870: 57 5f 53 4c 4f 54 29 20 3d 3d 20 43 4b 46 5f 48  W_SLOT) == CKF_H
2880: 57 5f 53 4c 4f 54 29 20 7b 0a 09 09 09 70 72 69  W_SLOT) {....pri
2890: 6e 74 66 28 22 43 4b 46 5f 48 57 5f 53 4c 4f 54  ntf("CKF_HW_SLOT
28a0: 20 22 29 3b 0a 09 09 7d 0a 09 09 70 72 69 6e 74   ");...}...print
28b0: 66 28 22 5c 6e 22 29 3b 0a 0a 09 09 69 66 20 28  f("\n");....if (
28c0: 28 73 6c 6f 74 49 6e 66 6f 2e 66 6c 61 67 73 20  (slotInfo.flags 
28d0: 26 20 43 4b 46 5f 54 4f 4b 45 4e 5f 50 52 45 53  & CKF_TOKEN_PRES
28e0: 45 4e 54 29 20 3d 3d 20 43 4b 46 5f 54 4f 4b 45  ENT) == CKF_TOKE
28f0: 4e 5f 50 52 45 53 45 4e 54 29 20 7b 0a 09 09 09  N_PRESENT) {....
2900: 70 72 69 6e 74 66 28 22 20 20 20 20 54 6f 6b 65  printf("    Toke
2910: 6e 3a 5c 6e 22 29 3b 0a 0a 09 09 09 63 68 6b 5f  n:\n");.....chk_
2920: 72 76 20 3d 20 43 5f 47 65 74 54 6f 6b 65 6e 49  rv = C_GetTokenI
2930: 6e 66 6f 28 73 6c 6f 74 73 5b 63 75 72 72 53 6c  nfo(slots[currSl
2940: 6f 74 5d 2c 20 26 74 6f 6b 65 6e 49 6e 66 6f 29  ot], &tokenInfo)
2950: 3b 0a 09 09 09 69 66 20 28 63 68 6b 5f 72 76 20  ;....if (chk_rv 
2960: 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09  != CKR_OK) {....
2970: 09 72 65 74 75 72 6e 28 31 29 3b 0a 09 09 09 7d  .return(1);....}
2980: 0a 0a 09 09 09 70 72 69 6e 74 66 28 22 20 20 20  .....printf("   
2990: 20 20 20 4c 61 62 65 6c 20 20 3a 20 25 2e 2a 73     Label  : %.*s
29a0: 5c 6e 22 2c 20 33 32 2c 20 74 6f 6b 65 6e 49 6e  \n", 32, tokenIn
29b0: 66 6f 2e 6c 61 62 65 6c 29 3b 0a 09 09 09 70 72  fo.label);....pr
29c0: 69 6e 74 66 28 22 20 20 20 20 20 20 4d 61 6e 75  intf("      Manu
29d0: 66 49 44 3a 20 25 2e 2a 73 5c 6e 22 2c 20 33 32  fID: %.*s\n", 32
29e0: 2c 20 74 6f 6b 65 6e 49 6e 66 6f 2e 6d 61 6e 75  , tokenInfo.manu
29f0: 66 61 63 74 75 72 65 72 49 44 29 3b 0a 09 09 09  facturerID);....
2a00: 70 72 69 6e 74 66 28 22 20 20 20 20 20 20 4d 6f  printf("      Mo
2a10: 64 65 6c 20 20 3a 20 25 2e 2a 73 5c 6e 22 2c 20  del  : %.*s\n", 
2a20: 31 36 2c 20 74 6f 6b 65 6e 49 6e 66 6f 2e 6d 6f  16, tokenInfo.mo
2a30: 64 65 6c 29 3b 0a 09 09 09 70 72 69 6e 74 66 28  del);....printf(
2a40: 22 20 20 20 20 20 20 53 65 72 4e 6f 20 20 3a 20  "      SerNo  : 
2a50: 25 2e 2a 73 5c 6e 22 2c 20 31 36 2c 20 74 6f 6b  %.*s\n", 16, tok
2a60: 65 6e 49 6e 66 6f 2e 73 65 72 69 61 6c 4e 75 6d  enInfo.serialNum
2a70: 62 65 72 29 3b 0a 09 09 09 70 72 69 6e 74 66 28  ber);....printf(
2a80: 22 20 20 20 20 20 20 48 57 56 65 72 73 20 3a 20  "      HWVers : 
2a90: 25 69 2e 25 69 5c 6e 22 2c 20 74 6f 6b 65 6e 49  %i.%i\n", tokenI
2aa0: 6e 66 6f 2e 68 61 72 64 77 61 72 65 56 65 72 73  nfo.hardwareVers
2ab0: 69 6f 6e 2e 6d 61 6a 6f 72 2c 20 74 6f 6b 65 6e  ion.major, token
2ac0: 49 6e 66 6f 2e 68 61 72 64 77 61 72 65 56 65 72  Info.hardwareVer
2ad0: 73 69 6f 6e 2e 6d 69 6e 6f 72 29 3b 0a 09 09 09  sion.minor);....
2ae0: 70 72 69 6e 74 66 28 22 20 20 20 20 20 20 46 57  printf("      FW
2af0: 56 65 72 73 20 3a 20 25 69 2e 25 69 5c 6e 22 2c  Vers : %i.%i\n",
2b00: 20 74 6f 6b 65 6e 49 6e 66 6f 2e 66 69 72 6d 77   tokenInfo.firmw
2b10: 61 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72  areVersion.major
2b20: 2c 20 74 6f 6b 65 6e 49 6e 66 6f 2e 66 69 72 6d  , tokenInfo.firm
2b30: 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f  wareVersion.mino
2b40: 72 29 3b 0a 09 09 09 70 72 69 6e 74 66 28 22 20  r);....printf(" 
2b50: 20 20 20 20 20 46 6c 61 67 73 20 20 3a 20 22 29       Flags  : ")
2b60: 3b 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49  ;....if ((tokenI
2b70: 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f  nfo.flags & CKF_
2b80: 52 4e 47 29 20 3d 3d 20 43 4b 46 5f 52 4e 47 29  RNG) == CKF_RNG)
2b90: 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 43   {.....printf("C
2ba0: 4b 46 5f 52 4e 47 20 22 29 3b 0a 09 09 09 7d 0a  KF_RNG ");....}.
2bb0: 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66  ...if ((tokenInf
2bc0: 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 57 52  o.flags & CKF_WR
2bd0: 49 54 45 5f 50 52 4f 54 45 43 54 45 44 29 20 3d  ITE_PROTECTED) =
2be0: 3d 20 43 4b 46 5f 57 52 49 54 45 5f 50 52 4f 54  = CKF_WRITE_PROT
2bf0: 45 43 54 45 44 29 20 7b 0a 09 09 09 09 70 72 69  ECTED) {.....pri
2c00: 6e 74 66 28 22 43 4b 46 5f 57 52 49 54 45 5f 50  ntf("CKF_WRITE_P
2c10: 52 4f 54 45 43 54 45 44 20 22 29 3b 0a 09 09 09  ROTECTED ");....
2c20: 7d 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49  }....if ((tokenI
2c30: 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f  nfo.flags & CKF_
2c40: 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 29 20  LOGIN_REQUIRED) 
2c50: 3d 3d 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 7b 0a 09 09 09 09 70 72 69  UIRED) {.....pri
2c70: 6e 74 66 28 22 43 4b 46 5f 4c 4f 47 49 4e 5f 52  ntf("CKF_LOGIN_R
2c80: 45 51 55 49 52 45 44 20 22 29 3b 0a 09 09 09 7d  EQUIRED ");....}
2c90: 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e  ....if ((tokenIn
2ca0: 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 55  fo.flags & CKF_U
2cb0: 53 45 52 5f 50 49 4e 5f 49 4e 49 54 49 41 4c 49  SER_PIN_INITIALI
2cc0: 5a 45 44 29 20 3d 3d 20 43 4b 46 5f 55 53 45 52  ZED) == CKF_USER
2cd0: 5f 50 49 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _PIN_INITIALIZED
2ce0: 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22  ) {.....printf("
2cf0: 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 49 4e 49  CKF_USER_PIN_INI
2d00: 54 49 41 4c 49 5a 45 44 20 22 29 3b 0a 09 09 09  TIALIZED ");....
2d10: 7d 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49  }....if ((tokenI
2d20: 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f  nfo.flags & CKF_
2d30: 52 45 53 54 4f 52 45 5f 4b 45 59 5f 4e 4f 54 5f  RESTORE_KEY_NOT_
2d40: 4e 45 45 44 45 44 29 20 3d 3d 20 43 4b 46 5f 52  NEEDED) == CKF_R
2d50: 45 53 54 4f 52 45 5f 4b 45 59 5f 4e 4f 54 5f 4e  ESTORE_KEY_NOT_N
2d60: 45 45 44 45 44 29 20 7b 0a 09 09 09 09 70 72 69  EEDED) {.....pri
2d70: 6e 74 66 28 22 43 4b 46 5f 52 45 53 54 4f 52 45  ntf("CKF_RESTORE
2d80: 5f 4b 45 59 5f 4e 4f 54 5f 4e 45 45 44 45 44 20  _KEY_NOT_NEEDED 
2d90: 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28  ");....}....if (
2da0: 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73  (tokenInfo.flags
2db0: 20 26 20 43 4b 46 5f 43 4c 4f 43 4b 5f 4f 4e 5f   & CKF_CLOCK_ON_
2dc0: 54 4f 4b 45 4e 29 20 3d 3d 20 43 4b 46 5f 43 4c  TOKEN) == CKF_CL
2dd0: 4f 43 4b 5f 4f 4e 5f 54 4f 4b 45 4e 29 20 7b 0a  OCK_ON_TOKEN) {.
2de0: 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f  ....printf("CKF_
2df0: 43 4c 4f 43 4b 5f 4f 4e 5f 54 4f 4b 45 4e 20 22  CLOCK_ON_TOKEN "
2e00: 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28  );....}....if ((
2e10: 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20  tokenInfo.flags 
2e20: 26 20 43 4b 46 5f 50 52 4f 54 45 43 54 45 44 5f  & CKF_PROTECTED_
2e30: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 5f 50  AUTHENTICATION_P
2e40: 41 54 48 29 20 3d 3d 20 43 4b 46 5f 50 52 4f 54  ATH) == CKF_PROT
2e50: 45 43 54 45 44 5f 41 55 54 48 45 4e 54 49 43 41  ECTED_AUTHENTICA
2e60: 54 49 4f 4e 5f 50 41 54 48 29 20 7b 0a 09 09 09  TION_PATH) {....
2e70: 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 50 52 4f  .printf("CKF_PRO
2e80: 54 45 43 54 45 44 5f 41 55 54 48 45 4e 54 49 43  TECTED_AUTHENTIC
2e90: 41 54 49 4f 4e 5f 50 41 54 48 20 22 29 3b 0a 09  ATION_PATH ");..
2ea0: 09 09 7d 0a 09 09 09 69 66 20 28 28 74 6f 6b 65  ..}....if ((toke
2eb0: 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b  nInfo.flags & CK
2ec0: 46 5f 44 55 41 4c 5f 43 52 59 50 54 4f 5f 4f 50  F_DUAL_CRYPTO_OP
2ed0: 45 52 41 54 49 4f 4e 53 29 20 3d 3d 20 43 4b 46  ERATIONS) == CKF
2ee0: 5f 44 55 41 4c 5f 43 52 59 50 54 4f 5f 4f 50 45  _DUAL_CRYPTO_OPE
2ef0: 52 41 54 49 4f 4e 53 29 20 7b 0a 09 09 09 09 70  RATIONS) {.....p
2f00: 72 69 6e 74 66 28 22 43 4b 46 5f 44 55 41 4c 5f  rintf("CKF_DUAL_
2f10: 43 52 59 50 54 4f 5f 4f 50 45 52 41 54 49 4f 4e  CRYPTO_OPERATION
2f20: 53 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66  S ");....}....if
2f30: 20 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61   ((tokenInfo.fla
2f40: 67 73 20 26 20 43 4b 46 5f 54 4f 4b 45 4e 5f 49  gs & CKF_TOKEN_I
2f50: 4e 49 54 49 41 4c 49 5a 45 44 29 20 3d 3d 20 43  NITIALIZED) == C
2f60: 4b 46 5f 54 4f 4b 45 4e 5f 49 4e 49 54 49 41 4c  KF_TOKEN_INITIAL
2f70: 49 5a 45 44 29 20 7b 0a 09 09 09 09 70 72 69 6e  IZED) {.....prin
2f80: 74 66 28 22 43 4b 46 5f 54 4f 4b 45 4e 5f 49 4e  tf("CKF_TOKEN_IN
2f90: 49 54 49 41 4c 49 5a 45 44 20 22 29 3b 0a 09 09  ITIALIZED ");...
2fa0: 09 7d 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e  .}....if ((token
2fb0: 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46  Info.flags & CKF
2fc0: 5f 53 45 43 4f 4e 44 41 52 59 5f 41 55 54 48 45  _SECONDARY_AUTHE
2fd0: 4e 54 49 43 41 54 49 4f 4e 29 20 3d 3d 20 43 4b  NTICATION) == CK
2fe0: 46 5f 53 45 43 4f 4e 44 41 52 59 5f 41 55 54 48  F_SECONDARY_AUTH
2ff0: 45 4e 54 49 43 41 54 49 4f 4e 29 20 7b 0a 09 09  ENTICATION) {...
3000: 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 53 45  ..printf("CKF_SE
3010: 43 4f 4e 44 41 52 59 5f 41 55 54 48 45 4e 54 49  CONDARY_AUTHENTI
3020: 43 41 54 49 4f 4e 20 22 29 3b 0a 09 09 09 7d 0a  CATION ");....}.
3030: 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66  ...if ((tokenInf
3040: 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 55 53  o.flags & CKF_US
3050: 45 52 5f 50 49 4e 5f 43 4f 55 4e 54 5f 4c 4f 57  ER_PIN_COUNT_LOW
3060: 29 20 3d 3d 20 43 4b 46 5f 55 53 45 52 5f 50 49  ) == CKF_USER_PI
3070: 4e 5f 43 4f 55 4e 54 5f 4c 4f 57 29 20 7b 0a 09  N_COUNT_LOW) {..
3080: 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 55  ...printf("CKF_U
3090: 53 45 52 5f 50 49 4e 5f 43 4f 55 4e 54 5f 4c 4f  SER_PIN_COUNT_LO
30a0: 57 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66  W ");....}....if
30b0: 20 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61   ((tokenInfo.fla
30c0: 67 73 20 26 20 43 4b 46 5f 55 53 45 52 5f 50 49  gs & CKF_USER_PI
30d0: 4e 5f 46 49 4e 41 4c 5f 54 52 59 29 20 3d 3d 20  N_FINAL_TRY) == 
30e0: 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 46 49 4e  CKF_USER_PIN_FIN
30f0: 41 4c 5f 54 52 59 29 20 7b 0a 09 09 09 09 70 72  AL_TRY) {.....pr
3100: 69 6e 74 66 28 22 43 4b 46 5f 55 53 45 52 5f 50  intf("CKF_USER_P
3110: 49 4e 5f 46 49 4e 41 4c 5f 54 52 59 20 22 29 3b  IN_FINAL_TRY ");
3120: 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28 74 6f  ....}....if ((to
3130: 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20  kenInfo.flags & 
3140: 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 4c 4f 43  CKF_USER_PIN_LOC
3150: 4b 45 44 29 20 3d 3d 20 43 4b 46 5f 55 53 45 52  KED) == CKF_USER
3160: 5f 50 49 4e 5f 4c 4f 43 4b 45 44 29 20 7b 0a 09  _PIN_LOCKED) {..
3170: 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 55  ...printf("CKF_U
3180: 53 45 52 5f 50 49 4e 5f 4c 4f 43 4b 45 44 20 22  SER_PIN_LOCKED "
3190: 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28  );....}....if ((
31a0: 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20  tokenInfo.flags 
31b0: 26 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 54  & CKF_USER_PIN_T
31c0: 4f 5f 42 45 5f 43 48 41 4e 47 45 44 29 20 3d 3d  O_BE_CHANGED) ==
31d0: 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 54 4f   CKF_USER_PIN_TO
31e0: 5f 42 45 5f 43 48 41 4e 47 45 44 29 20 7b 0a 09  _BE_CHANGED) {..
31f0: 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 55  ...printf("CKF_U
3200: 53 45 52 5f 50 49 4e 5f 54 4f 5f 42 45 5f 43 48  SER_PIN_TO_BE_CH
3210: 41 4e 47 45 44 20 22 29 3b 0a 09 09 09 7d 0a 09  ANGED ");....}..
3220: 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66 6f  ..if ((tokenInfo
3230: 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 53 4f 5f  .flags & CKF_SO_
3240: 50 49 4e 5f 43 4f 55 4e 54 5f 4c 4f 57 29 20 3d  PIN_COUNT_LOW) =
3250: 3d 20 43 4b 46 5f 53 4f 5f 50 49 4e 5f 43 4f 55  = CKF_SO_PIN_COU
3260: 4e 54 5f 4c 4f 57 29 20 7b 0a 09 09 09 09 70 72  NT_LOW) {.....pr
3270: 69 6e 74 66 28 22 43 4b 46 5f 53 4f 5f 50 49 4e  intf("CKF_SO_PIN
3280: 5f 43 4f 55 4e 54 5f 4c 4f 57 20 22 29 3b 0a 09  _COUNT_LOW ");..
3290: 09 09 7d 0a 09 09 09 69 66 20 28 28 74 6f 6b 65  ..}....if ((toke
32a0: 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b  nInfo.flags & CK
32b0: 46 5f 53 4f 5f 50 49 4e 5f 46 49 4e 41 4c 5f 54  F_SO_PIN_FINAL_T
32c0: 52 59 29 20 3d 3d 20 43 4b 46 5f 53 4f 5f 50 49  RY) == CKF_SO_PI
32d0: 4e 5f 46 49 4e 41 4c 5f 54 52 59 29 20 7b 0a 09  N_FINAL_TRY) {..
32e0: 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 53  ...printf("CKF_S
32f0: 4f 5f 50 49 4e 5f 46 49 4e 41 4c 5f 54 52 59 20  O_PIN_FINAL_TRY 
3300: 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28  ");....}....if (
3310: 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73  (tokenInfo.flags
3320: 20 26 20 43 4b 46 5f 53 4f 5f 50 49 4e 5f 4c 4f   & CKF_SO_PIN_LO
3330: 43 4b 45 44 29 20 3d 3d 20 43 4b 46 5f 53 4f 5f  CKED) == CKF_SO_
3340: 50 49 4e 5f 4c 4f 43 4b 45 44 29 20 7b 0a 09 09  PIN_LOCKED) {...
3350: 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 53 4f  ..printf("CKF_SO
3360: 5f 50 49 4e 5f 4c 4f 43 4b 45 44 20 22 29 3b 0a  _PIN_LOCKED ");.
3370: 09 09 09 7d 0a 09 09 09 69 66 20 28 28 74 6f 6b  ...}....if ((tok
3380: 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43  enInfo.flags & C
3390: 4b 46 5f 53 4f 5f 50 49 4e 5f 54 4f 5f 42 45 5f  KF_SO_PIN_TO_BE_
33a0: 43 48 41 4e 47 45 44 29 20 3d 3d 20 43 4b 46 5f  CHANGED) == CKF_
33b0: 53 4f 5f 50 49 4e 5f 54 4f 5f 42 45 5f 43 48 41  SO_PIN_TO_BE_CHA
33c0: 4e 47 45 44 29 20 7b 0a 09 09 09 09 70 72 69 6e  NGED) {.....prin
33d0: 74 66 28 22 43 4b 46 5f 53 4f 5f 50 49 4e 5f 54  tf("CKF_SO_PIN_T
33e0: 4f 5f 42 45 5f 43 48 41 4e 47 45 44 20 22 29 3b  O_BE_CHANGED ");
33f0: 0a 09 09 09 7d 0a 09 09 09 70 72 69 6e 74 66 28  ....}....printf(
3400: 22 5c 6e 22 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09  "\n");...}..}...
3410: 63 68 6b 5f 72 76 20 3d 20 43 5f 4f 70 65 6e 53  chk_rv = C_OpenS
3420: 65 73 73 69 6f 6e 28 73 6c 6f 74 73 5b 30 5d 2c  ession(slots[0],
3430: 20 43 4b 46 5f 53 45 52 49 41 4c 5f 53 45 53 53   CKF_SERIAL_SESS
3440: 49 4f 4e 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c  ION, NULL, NULL,
3450: 20 26 68 53 65 73 73 69 6f 6e 29 3b 0a 09 69 66   &hSession);..if
3460: 20 28 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f   (chk_rv == CKR_
3470: 4f 4b 29 20 7b 0a 09 09 63 68 6b 5f 72 76 20 3d  OK) {...chk_rv =
3480: 20 43 5f 47 65 74 54 6f 6b 65 6e 49 6e 66 6f 28   C_GetTokenInfo(
3490: 73 6c 6f 74 73 5b 30 5d 2c 20 26 74 6f 6b 65 6e  slots[0], &token
34a0: 49 6e 66 6f 29 3b 0a 09 09 69 66 20 28 63 68 6b  Info);...if (chk
34b0: 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b  _rv != CKR_OK) {
34c0: 0a 09 09 09 72 65 74 75 72 6e 28 31 29 3b 0a 09  ....return(1);..
34d0: 09 7d 0a 0a 09 09 69 66 20 28 28 74 6f 6b 65 6e  .}....if ((token
34e0: 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46  Info.flags & CKF
34f0: 5f 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 29  _LOGIN_REQUIRED)
3500: 20 3d 3d 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52 45   == CKF_LOGIN_RE
3510: 51 55 49 52 45 44 29 20 7b 0a 09 09 09 66 67 65  QUIRED) {....fge
3520: 74 73 5f 72 65 74 20 3d 20 4e 55 4c 4c 3b 0a 0a  ts_ret = NULL;..
3530: 09 09 09 77 68 69 6c 65 20 28 66 67 65 74 73 5f  ...while (fgets_
3540: 72 65 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09  ret == NULL) {..
3550: 09 09 09 70 72 69 6e 74 66 28 22 2a 2a 20 45 4e  ...printf("** EN
3560: 54 45 52 20 50 49 4e 3a 20 22 29 3b 0a 09 09 09  TER PIN: ");....
3570: 09 66 66 6c 75 73 68 28 73 74 64 6f 75 74 29 3b  .fflush(stdout);
3580: 0a 0a 09 09 09 09 66 67 65 74 73 5f 72 65 74 20  ......fgets_ret 
3590: 3d 20 66 67 65 74 73 28 28 63 68 61 72 20 2a 29  = fgets((char *)
35a0: 20 75 73 65 72 5f 70 69 6e 2c 20 73 69 7a 65 6f   user_pin, sizeo
35b0: 66 28 75 73 65 72 5f 70 69 6e 29 2c 20 73 74 64  f(user_pin), std
35c0: 69 6e 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66  in);....}.....if
35d0: 20 28 73 74 72 6c 65 6e 28 28 63 68 61 72 20 2a   (strlen((char *
35e0: 29 20 75 73 65 72 5f 70 69 6e 29 20 3e 3d 20 31  ) user_pin) >= 1
35f0: 29 20 7b 0a 09 09 09 09 77 68 69 6c 65 20 28 75  ) {.....while (u
3600: 73 65 72 5f 70 69 6e 5b 73 74 72 6c 65 6e 28 28  ser_pin[strlen((
3610: 63 68 61 72 20 2a 29 20 75 73 65 72 5f 70 69 6e  char *) user_pin
3620: 29 20 2d 20 31 5d 20 3c 20 27 20 27 29 20 7b 0a  ) - 1] < ' ') {.
3630: 09 09 09 09 09 75 73 65 72 5f 70 69 6e 5b 73 74  .....user_pin[st
3640: 72 6c 65 6e 28 28 63 68 61 72 20 2a 29 20 75 73  rlen((char *) us
3650: 65 72 5f 70 69 6e 29 20 2d 20 31 5d 20 3d 20 27  er_pin) - 1] = '
3660: 5c 30 27 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  \0';.....}....}.
3670: 0a 09 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f 4c  ....chk_rv = C_L
3680: 6f 67 69 6e 28 68 53 65 73 73 69 6f 6e 2c 20 43  ogin(hSession, C
3690: 4b 55 5f 55 53 45 52 2c 20 75 73 65 72 5f 70 69  KU_USER, user_pi
36a0: 6e 2c 20 73 74 72 6c 65 6e 28 28 63 68 61 72 20  n, strlen((char 
36b0: 2a 29 20 75 73 65 72 5f 70 69 6e 29 29 3b 0a 09  *) user_pin));..
36c0: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 63 68 6b  .} else {....chk
36d0: 5f 72 76 20 3d 20 43 5f 4c 6f 67 69 6e 28 68 53  _rv = C_Login(hS
36e0: 65 73 73 69 6f 6e 2c 20 43 4b 55 5f 55 53 45 52  ession, CKU_USER
36f0: 2c 20 4e 55 4c 4c 2c 20 30 29 3b 0a 09 09 7d 0a  , NULL, 0);...}.
3700: 09 09 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d 20  ..if (chk_rv == 
3710: 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 70 72 69  CKR_OK) {....pri
3720: 6e 74 66 28 22 4c 6f 67 69 6e 20 74 6f 20 64 65  ntf("Login to de
3730: 76 69 63 65 20 73 75 63 63 65 65 64 2e 5c 6e 22  vice succeed.\n"
3740: 29 3b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09  );...} else {...
3750: 09 70 72 69 6e 74 66 28 22 4c 6f 67 69 6e 20 74  .printf("Login t
3760: 6f 20 64 65 76 69 63 65 20 66 61 69 6c 65 64 2e  o device failed.
3770: 5c 6e 22 29 3b 0a 09 09 7d 0a 0a 09 09 63 68 6b  \n");...}....chk
3780: 5f 72 76 20 3d 20 43 5f 47 65 74 53 65 73 73 69  _rv = C_GetSessi
3790: 6f 6e 49 6e 66 6f 28 68 53 65 73 73 69 6f 6e 2c  onInfo(hSession,
37a0: 20 26 73 65 73 73 69 6f 6e 49 6e 66 6f 29 3b 0a   &sessionInfo);.
37b0: 09 09 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d 20  ..if (chk_rv == 
37c0: 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 70 72 69  CKR_OK) {....pri
37d0: 6e 74 66 28 22 53 65 73 73 69 6f 6e 20 49 6e 66  ntf("Session Inf
37e0: 6f 3a 5c 6e 22 29 3b 0a 09 09 09 70 72 69 6e 74  o:\n");....print
37f0: 66 28 22 20 20 53 6c 6f 74 20 49 44 3a 20 25 6c  f("  Slot ID: %l
3800: 75 5c 6e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20  u\n", (unsigned 
3810: 6c 6f 6e 67 29 20 73 65 73 73 69 6f 6e 49 6e 66  long) sessionInf
3820: 6f 2e 73 6c 6f 74 49 44 29 3b 0a 09 09 09 70 72  o.slotID);....pr
3830: 69 6e 74 66 28 22 20 20 44 65 76 20 45 72 72 3a  intf("  Dev Err:
3840: 20 25 6c 75 5c 6e 22 2c 20 28 75 6e 73 69 67 6e   %lu\n", (unsign
3850: 65 64 20 6c 6f 6e 67 29 20 73 65 73 73 69 6f 6e  ed long) session
3860: 49 6e 66 6f 2e 75 6c 44 65 76 69 63 65 45 72 72  Info.ulDeviceErr
3870: 6f 72 29 3b 0a 0a 09 09 09 70 72 69 6e 74 66 28  or);.....printf(
3880: 22 20 20 53 74 61 74 65 20 20 3a 20 22 29 3b 0a  "  State  : ");.
3890: 09 09 09 69 66 20 28 73 65 73 73 69 6f 6e 49 6e  ...if (sessionIn
38a0: 66 6f 2e 73 74 61 74 65 20 3d 3d 20 43 4b 53 5f  fo.state == CKS_
38b0: 52 4f 5f 50 55 42 4c 49 43 5f 53 45 53 53 49 4f  RO_PUBLIC_SESSIO
38c0: 4e 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28  N) {.....printf(
38d0: 22 43 4b 53 5f 52 4f 5f 50 55 42 4c 49 43 5f 53  "CKS_RO_PUBLIC_S
38e0: 45 53 53 49 4f 4e 5c 6e 22 29 3b 0a 09 09 09 7d  ESSION\n");....}
38f0: 20 65 6c 73 65 20 69 66 20 28 73 65 73 73 69 6f   else if (sessio
3900: 6e 49 6e 66 6f 2e 73 74 61 74 65 20 3d 3d 20 43  nInfo.state == C
3910: 4b 53 5f 52 4f 5f 55 53 45 52 5f 46 55 4e 43 54  KS_RO_USER_FUNCT
3920: 49 4f 4e 53 29 20 7b 0a 09 09 09 09 70 72 69 6e  IONS) {.....prin
3930: 74 66 28 22 43 4b 53 5f 52 4f 5f 55 53 45 52 5f  tf("CKS_RO_USER_
3940: 46 55 4e 43 54 49 4f 4e 53 5c 6e 22 29 3b 0a 09  FUNCTIONS\n");..
3950: 09 09 7d 20 65 6c 73 65 20 69 66 20 28 73 65 73  ..} else if (ses
3960: 73 69 6f 6e 49 6e 66 6f 2e 73 74 61 74 65 20 3d  sionInfo.state =
3970: 3d 20 43 4b 53 5f 52 57 5f 50 55 42 4c 49 43 5f  = CKS_RW_PUBLIC_
3980: 53 45 53 53 49 4f 4e 29 20 7b 0a 09 09 09 09 70  SESSION) {.....p
3990: 72 69 6e 74 66 28 22 43 4b 53 5f 52 57 5f 50 55  rintf("CKS_RW_PU
39a0: 42 4c 49 43 5f 53 45 53 53 49 4f 4e 5c 6e 22 29  BLIC_SESSION\n")
39b0: 3b 0a 09 09 09 7d 20 65 6c 73 65 20 69 66 20 28  ;....} else if (
39c0: 73 65 73 73 69 6f 6e 49 6e 66 6f 2e 73 74 61 74  sessionInfo.stat
39d0: 65 20 3d 3d 20 43 4b 53 5f 52 57 5f 55 53 45 52  e == CKS_RW_USER
39e0: 5f 46 55 4e 43 54 49 4f 4e 53 29 20 7b 0a 09 09  _FUNCTIONS) {...
39f0: 09 09 70 72 69 6e 74 66 28 22 43 4b 53 5f 52 57  ..printf("CKS_RW
3a00: 5f 55 53 45 52 5f 46 55 4e 43 54 49 4f 4e 53 5c  _USER_FUNCTIONS\
3a10: 6e 22 29 3b 0a 09 09 09 7d 20 65 6c 73 65 20 69  n");....} else i
3a20: 66 20 28 73 65 73 73 69 6f 6e 49 6e 66 6f 2e 73  f (sessionInfo.s
3a30: 74 61 74 65 20 3d 3d 20 43 4b 53 5f 52 4f 5f 50  tate == CKS_RO_P
3a40: 55 42 4c 49 43 5f 53 45 53 53 49 4f 4e 29 20 7b  UBLIC_SESSION) {
3a50: 0a 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b 53  .....printf("CKS
3a60: 5f 52 57 5f 53 4f 5f 46 55 4e 43 54 49 4f 4e 53  _RW_SO_FUNCTIONS
3a70: 5c 6e 22 29 3b 0a 09 09 09 7d 20 65 6c 73 65 20  \n");....} else 
3a80: 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 55 6e  {.....printf("Un
3a90: 6b 6e 6f 77 6e 20 28 25 6c 75 29 22 2c 20 28 75  known (%lu)", (u
3aa0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 65  nsigned long) se
3ab0: 73 73 69 6f 6e 49 6e 66 6f 2e 73 74 61 74 65 29  ssionInfo.state)
3ac0: 3b 0a 09 09 09 7d 0a 0a 09 09 09 70 72 69 6e 74  ;....}.....print
3ad0: 66 28 22 20 20 46 6c 61 67 73 20 20 3a 20 22 29  f("  Flags  : ")
3ae0: 3b 0a 09 09 09 69 66 20 28 28 73 65 73 73 69 6f  ;....if ((sessio
3af0: 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b  nInfo.flags & CK
3b00: 46 5f 52 57 5f 53 45 53 53 49 4f 4e 29 20 3d 3d  F_RW_SESSION) ==
3b10: 20 43 4b 46 5f 52 57 5f 53 45 53 53 49 4f 4e 29   CKF_RW_SESSION)
3b20: 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 43   {.....printf("C
3b30: 4b 46 5f 52 57 5f 53 45 53 53 49 4f 4e 20 22 29  KF_RW_SESSION ")
3b40: 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28 73  ;....}....if ((s
3b50: 65 73 73 69 6f 6e 49 6e 66 6f 2e 66 6c 61 67 73  essionInfo.flags
3b60: 20 26 20 43 4b 46 5f 53 45 52 49 41 4c 5f 53 45   & CKF_SERIAL_SE
3b70: 53 53 49 4f 4e 29 20 3d 3d 20 43 4b 46 5f 53 45  SSION) == CKF_SE
3b80: 52 49 41 4c 5f 53 45 53 53 49 4f 4e 29 20 7b 0a  RIAL_SESSION) {.
3b90: 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f  ....printf("CKF_
3ba0: 53 45 52 49 41 4c 5f 53 45 53 53 49 4f 4e 20 22  SERIAL_SESSION "
3bb0: 29 3b 0a 09 09 09 7d 0a 09 09 09 70 72 69 6e 74  );....}....print
3bc0: 66 28 22 5c 6e 22 29 3b 0a 09 09 7d 20 65 6c 73  f("\n");...} els
3bd0: 65 20 7b 0a 09 09 09 70 72 69 6e 74 66 28 22 47  e {....printf("G
3be0: 65 74 53 65 73 73 69 6f 6e 49 6e 66 6f 28 29 20  etSessionInfo() 
3bf0: 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09 7d  failed.\n");...}
3c00: 0a 0a 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f 46  ....chk_rv = C_F
3c10: 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 28 68  indObjectsInit(h
3c20: 53 65 73 73 69 6f 6e 2c 20 4e 55 4c 4c 2c 20 30  Session, NULL, 0
3c30: 29 3b 0a 09 09 69 66 20 28 63 68 6b 5f 72 76 20  );...if (chk_rv 
3c40: 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09  == CKR_OK) {....
3c50: 77 68 69 6c 65 20 28 31 29 20 7b 0a 09 09 09 09  while (1) {.....
3c60: 63 68 6b 5f 72 76 20 3d 20 43 5f 46 69 6e 64 4f  chk_rv = C_FindO
3c70: 62 6a 65 63 74 73 28 68 53 65 73 73 69 6f 6e 2c  bjects(hSession,
3c80: 20 26 68 4f 62 6a 65 63 74 2c 20 31 2c 20 26 75   &hObject, 1, &u
3c90: 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 29 3b 0a 09  lObjectCount);..
3ca0: 09 09 09 69 66 20 28 63 68 6b 5f 72 76 20 21 3d  ...if (chk_rv !=
3cb0: 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 09   CKR_OK) {......
3cc0: 70 72 69 6e 74 66 28 22 46 69 6e 64 4f 62 6a 65  printf("FindObje
3cd0: 63 74 73 28 29 20 66 61 69 6c 65 64 2e 5c 6e 22  cts() failed.\n"
3ce0: 29 3b 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09  );......break;..
3cf0: 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 75 6c  ...}......if (ul
3d00: 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 3d 20 30  ObjectCount == 0
3d10: 29 20 7b 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a  ) {......break;.
3d20: 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 75  ....}......if (u
3d30: 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 21 3d 20  lObjectCount != 
3d40: 31 29 20 7b 0a 09 09 09 09 09 70 72 69 6e 74 66  1) {......printf
3d50: 28 22 46 69 6e 64 4f 62 6a 65 63 74 73 28 29 20  ("FindObjects() 
3d60: 72 65 74 75 72 6e 65 64 20 61 20 77 65 69 72 64  returned a weird
3d70: 20 6e 75 6d 62 65 72 20 6f 66 20 6f 62 6a 65 63   number of objec
3d80: 74 73 2e 20 20 41 73 6b 65 64 20 66 6f 72 20 31  ts.  Asked for 1
3d90: 2c 20 67 6f 74 20 25 6c 75 2e 5c 6e 22 2c 20 75  , got %lu.\n", u
3da0: 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 29 3b 0a 09  lObjectCount);..
3db0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d  ....break;.....}
3dc0: 0a 0a 09 09 09 09 70 72 69 6e 74 66 28 22 20 20  ......printf("  
3dd0: 4f 62 6a 65 63 74 20 49 6e 66 6f 20 28 6f 62 6a  Object Info (obj
3de0: 65 63 74 20 25 6c 75 29 3a 5c 6e 22 2c 20 28 75  ect %lu):\n", (u
3df0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 4f  nsigned long) hO
3e00: 62 6a 65 63 74 29 3b 0a 0a 09 09 09 09 66 6f 72  bject);......for
3e10: 20 28 63 75 72 72 5f 61 74 74 72 5f 69 64 78 20   (curr_attr_idx 
3e20: 3d 20 30 3b 20 63 75 72 72 5f 61 74 74 72 5f 69  = 0; curr_attr_i
3e30: 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 74 65 6d  dx < (sizeof(tem
3e40: 70 6c 61 74 65 29 20 2f 20 73 69 7a 65 6f 66 28  plate) / sizeof(
3e50: 74 65 6d 70 6c 61 74 65 5b 30 5d 29 29 3b 20 63  template[0])); c
3e60: 75 72 72 5f 61 74 74 72 5f 69 64 78 2b 2b 29 20  urr_attr_idx++) 
3e70: 7b 0a 09 09 09 09 09 63 75 72 72 5f 61 74 74 72  {......curr_attr
3e80: 20 3d 20 26 74 65 6d 70 6c 61 74 65 5b 63 75 72   = &template[cur
3e90: 72 5f 61 74 74 72 5f 69 64 78 5d 3b 0a 09 09 09  r_attr_idx];....
3ea0: 09 09 69 66 20 28 63 75 72 72 5f 61 74 74 72 2d  ..if (curr_attr-
3eb0: 3e 70 56 61 6c 75 65 29 20 7b 0a 09 09 09 09 09  >pValue) {......
3ec0: 09 66 72 65 65 28 63 75 72 72 5f 61 74 74 72 2d  .free(curr_attr-
3ed0: 3e 70 56 61 6c 75 65 29 3b 0a 09 09 09 09 09 7d  >pValue);......}
3ee0: 0a 0a 09 09 09 09 09 63 75 72 72 5f 61 74 74 72  .......curr_attr
3ef0: 2d 3e 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b  ->pValue = NULL;
3f00: 0a 09 09 09 09 7d 0a 0a 09 09 09 09 63 68 6b 5f  .....}......chk_
3f10: 72 76 20 3d 20 43 5f 47 65 74 41 74 74 72 69 62  rv = C_GetAttrib
3f20: 75 74 65 56 61 6c 75 65 28 68 53 65 73 73 69 6f  uteValue(hSessio
3f30: 6e 2c 20 68 4f 62 6a 65 63 74 2c 20 26 74 65 6d  n, hObject, &tem
3f40: 70 6c 61 74 65 5b 30 5d 2c 20 73 69 7a 65 6f 66  plate[0], sizeof
3f50: 28 74 65 6d 70 6c 61 74 65 29 20 2f 20 73 69 7a  (template) / siz
3f60: 65 6f 66 28 74 65 6d 70 6c 61 74 65 5b 30 5d 29  eof(template[0])
3f70: 29 3b 0a 09 09 09 09 69 66 20 28 63 68 6b 5f 72  );.....if (chk_r
3f80: 76 20 3d 3d 20 43 4b 52 5f 41 54 54 52 49 42 55  v == CKR_ATTRIBU
3f90: 54 45 5f 54 59 50 45 5f 49 4e 56 41 4c 49 44 20  TE_TYPE_INVALID 
3fa0: 7c 7c 20 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52  || chk_rv == CKR
3fb0: 5f 41 54 54 52 49 42 55 54 45 5f 53 45 4e 53 49  _ATTRIBUTE_SENSI
3fc0: 54 49 56 45 20 7c 7c 20 63 68 6b 5f 72 76 20 3d  TIVE || chk_rv =
3fd0: 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f  = CKR_BUFFER_TOO
3fe0: 5f 53 4d 41 4c 4c 29 20 7b 0a 09 09 09 09 09 63  _SMALL) {......c
3ff0: 68 6b 5f 72 76 20 3d 20 43 4b 52 5f 4f 4b 3b 0a  hk_rv = CKR_OK;.
4000: 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 63  ....}......if (c
4010: 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29  hk_rv == CKR_OK)
4020: 20 7b 0a 09 09 09 09 09 66 6f 72 20 28 63 75 72   {......for (cur
4030: 72 5f 61 74 74 72 5f 69 64 78 20 3d 20 30 3b 20  r_attr_idx = 0; 
4040: 63 75 72 72 5f 61 74 74 72 5f 69 64 78 20 3c 20  curr_attr_idx < 
4050: 28 73 69 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65  (sizeof(template
4060: 29 20 2f 20 73 69 7a 65 6f 66 28 74 65 6d 70 6c  ) / sizeof(templ
4070: 61 74 65 5b 30 5d 29 29 3b 20 63 75 72 72 5f 61  ate[0])); curr_a
4080: 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09  ttr_idx++) {....
4090: 09 09 09 63 75 72 72 5f 61 74 74 72 20 3d 20 26  ...curr_attr = &
40a0: 74 65 6d 70 6c 61 74 65 5b 63 75 72 72 5f 61 74  template[curr_at
40b0: 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 09 09 09 09  tr_idx];........
40c0: 69 66 20 28 28 28 43 4b 5f 4c 4f 4e 47 29 20 63  if (((CK_LONG) c
40d0: 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75  urr_attr->ulValu
40e0: 65 4c 65 6e 29 20 21 3d 20 28 28 43 4b 5f 4c 4f  eLen) != ((CK_LO
40f0: 4e 47 29 20 2d 31 29 29 20 7b 0a 09 09 09 09 09  NG) -1)) {......
4100: 09 09 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61  ..curr_attr->pVa
4110: 6c 75 65 20 3d 20 6d 61 6c 6c 6f 63 28 63 75 72  lue = malloc(cur
4120: 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c  r_attr->ulValueL
4130: 65 6e 29 3b 0a 09 09 09 09 09 09 7d 0a 09 09 09  en);.......}....
4140: 09 09 7d 0a 0a 09 09 09 09 09 63 68 6b 5f 72 76  ..}.......chk_rv
4150: 20 3d 20 43 5f 47 65 74 41 74 74 72 69 62 75 74   = C_GetAttribut
4160: 65 56 61 6c 75 65 28 68 53 65 73 73 69 6f 6e 2c  eValue(hSession,
4170: 20 68 4f 62 6a 65 63 74 2c 20 26 74 65 6d 70 6c   hObject, &templ
4180: 61 74 65 5b 30 5d 2c 20 73 69 7a 65 6f 66 28 74  ate[0], sizeof(t
4190: 65 6d 70 6c 61 74 65 29 20 2f 20 73 69 7a 65 6f  emplate) / sizeo
41a0: 66 28 74 65 6d 70 6c 61 74 65 5b 30 5d 29 29 3b  f(template[0]));
41b0: 0a 09 09 09 09 09 69 66 20 28 63 68 6b 5f 72 76  ......if (chk_rv
41c0: 20 3d 3d 20 43 4b 52 5f 4f 4b 20 7c 7c 20 63 68   == CKR_OK || ch
41d0: 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 41 54 54 52  k_rv == CKR_ATTR
41e0: 49 42 55 54 45 5f 53 45 4e 53 49 54 49 56 45 20  IBUTE_SENSITIVE 
41f0: 7c 7c 20 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52  || chk_rv == CKR
4200: 5f 41 54 54 52 49 42 55 54 45 5f 54 59 50 45 5f  _ATTRIBUTE_TYPE_
4210: 49 4e 56 41 4c 49 44 20 7c 7c 20 63 68 6b 5f 72  INVALID || chk_r
4220: 76 20 3d 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f  v == CKR_BUFFER_
4230: 54 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a 09 09 09  TOO_SMALL) {....
4240: 09 09 09 66 6f 72 20 28 63 75 72 72 5f 61 74 74  ...for (curr_att
4250: 72 5f 69 64 78 20 3d 20 30 3b 20 63 75 72 72 5f  r_idx = 0; curr_
4260: 61 74 74 72 5f 69 64 78 20 3c 20 28 73 69 7a 65  attr_idx < (size
4270: 6f 66 28 74 65 6d 70 6c 61 74 65 29 20 2f 20 73  of(template) / s
4280: 69 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65 5b 30  izeof(template[0
4290: 5d 29 29 3b 20 63 75 72 72 5f 61 74 74 72 5f 69  ])); curr_attr_i
42a0: 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09 09 09 63  dx++) {........c
42b0: 75 72 72 5f 61 74 74 72 20 3d 20 26 74 65 6d 70  urr_attr = &temp
42c0: 6c 61 74 65 5b 63 75 72 72 5f 61 74 74 72 5f 69  late[curr_attr_i
42d0: 64 78 5d 3b 0a 0a 09 09 09 09 09 09 09 69 66 20  dx];.........if 
42e0: 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c  (curr_attr->pVal
42f0: 75 65 29 20 7b 0a 09 09 09 09 09 09 09 09 73 77  ue) {.........sw
4300: 69 74 63 68 20 28 63 75 72 72 5f 61 74 74 72 2d  itch (curr_attr-
4310: 3e 74 79 70 65 29 20 7b 0a 09 09 09 09 09 09 09  >type) {........
4320: 09 09 63 61 73 65 20 43 4b 41 5f 4c 41 42 45 4c  ..case CKA_LABEL
4330: 3a 0a 09 09 09 09 09 09 09 09 09 09 70 72 69 6e  :...........prin
4340: 74 66 28 22 20 20 20 20 5b 25 6c 75 5d 20 25 32  tf("    [%lu] %2
4350: 30 73 3a 20 25 2e 2a 73 5c 6e 22 2c 20 68 4f 62  0s: %.*s\n", hOb
4360: 6a 65 63 74 2c 20 70 6b 63 73 31 31 5f 61 74 74  ject, pkcs11_att
4370: 72 69 62 75 74 65 5f 74 6f 5f 6e 61 6d 65 28 63  ribute_to_name(c
4380: 75 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 29 2c  urr_attr->type),
4390: 20 28 69 6e 74 29 20 63 75 72 72 5f 61 74 74 72   (int) curr_attr
43a0: 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 2c 20 28 63  ->ulValueLen, (c
43b0: 68 61 72 20 2a 29 20 63 75 72 72 5f 61 74 74 72  har *) curr_attr
43c0: 2d 3e 70 56 61 6c 75 65 29 3b 0a 09 09 09 09 09  ->pValue);......
43d0: 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09  .....break;.....
43e0: 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 43 4c  .....case CKA_CL
43f0: 41 53 53 3a 0a 09 09 09 09 09 09 09 09 09 09 6f  ASS:...........o
4400: 62 6a 65 63 74 43 6c 61 73 73 20 3d 20 2a 28 28  bjectClass = *((
4410: 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 53 20  CK_OBJECT_CLASS 
4420: 2a 29 20 63 75 72 72 5f 61 74 74 72 2d 3e 70 56  *) curr_attr->pV
4430: 61 6c 75 65 29 3b 0a 0a 09 09 09 09 09 09 09 09  alue);..........
4440: 09 09 69 66 20 28 6f 62 6a 65 63 74 43 6c 61 73  ..if (objectClas
4450: 73 20 3d 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45  s == CKO_PRIVATE
4460: 5f 4b 45 59 29 20 7b 0a 09 09 09 09 09 09 09 09  _KEY) {.........
4470: 09 09 09 2a 70 72 69 76 61 74 65 4b 65 79 4f 62  ...*privateKeyOb
4480: 6a 65 63 74 73 20 3d 20 68 4f 62 6a 65 63 74 3b  jects = hObject;
4490: 0a 09 09 09 09 09 09 09 09 09 09 09 70 72 69 76  ............priv
44a0: 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 2b 2b 3b  ateKeyObjects++;
44b0: 0a 09 09 09 09 09 09 09 09 09 09 7d 0a 09 09 09  ...........}....
44c0: 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 54  ......case CKA_T
44d0: 4f 4b 45 4e 3a 0a 09 09 09 09 09 09 09 09 09 63  OKEN:..........c
44e0: 61 73 65 20 43 4b 41 5f 49 44 3a 0a 09 09 09 09  ase CKA_ID:.....
44f0: 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 53 45  .....case CKA_SE
4500: 52 49 41 4c 5f 4e 55 4d 42 45 52 3a 0a 09 09 09  RIAL_NUMBER:....
4510: 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 50  ......case CKA_P
4520: 52 49 56 41 54 45 3a 0a 09 09 09 09 09 09 09 09  RIVATE:.........
4530: 09 63 61 73 65 20 43 4b 41 5f 43 45 52 54 49 46  .case CKA_CERTIF
4540: 49 43 41 54 45 5f 54 59 50 45 3a 0a 09 09 09 09  ICATE_TYPE:.....
4550: 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 4b 45  .....case CKA_KE
4560: 59 5f 54 59 50 45 3a 0a 09 09 09 09 09 09 09 09  Y_TYPE:.........
4570: 09 63 61 73 65 20 43 4b 41 5f 53 49 47 4e 3a 0a  .case CKA_SIGN:.
4580: 09 09 09 09 09 09 09 09 09 63 61 73 65 20 43 4b  .........case CK
4590: 41 5f 44 45 43 52 59 50 54 3a 0a 09 09 09 09 09  A_DECRYPT:......
45a0: 09 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55  ....case CKA_TRU
45b0: 53 54 45 44 3a 0a 09 09 09 09 09 09 09 09 09 63  STED:..........c
45c0: 61 73 65 20 43 4b 41 5f 43 45 52 54 5f 4d 44 35  ase CKA_CERT_MD5
45d0: 5f 48 41 53 48 3a 0a 09 09 09 09 09 09 09 09 09  _HASH:..........
45e0: 63 61 73 65 20 43 4b 41 5f 43 45 52 54 5f 53 48  case CKA_CERT_SH
45f0: 41 31 5f 48 41 53 48 3a 0a 0a 09 09 09 09 09 09  A1_HASH:........
4600: 09 09 09 09 70 75 63 56 61 6c 75 65 20 3d 20 63  ....pucValue = c
4610: 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65  urr_attr->pValue
4620: 3b 0a 0a 09 09 09 09 09 09 09 09 09 09 70 72 69  ;............pri
4630: 6e 74 66 28 22 20 20 20 20 5b 25 6c 75 5d 20 25  ntf("    [%lu] %
4640: 32 30 73 3a 20 22 2c 20 68 4f 62 6a 65 63 74 2c  20s: ", hObject,
4650: 20 70 6b 63 73 31 31 5f 61 74 74 72 69 62 75 74   pkcs11_attribut
4660: 65 5f 74 6f 5f 6e 61 6d 65 28 63 75 72 72 5f 61  e_to_name(curr_a
4670: 74 74 72 2d 3e 74 79 70 65 29 29 3b 0a 0a 09 09  ttr->type));....
4680: 09 09 09 09 09 09 09 09 66 6f 72 20 28 62 79 74  ........for (byt
4690: 65 5f 69 64 78 20 3d 20 30 3b 20 62 79 74 65 5f  e_idx = 0; byte_
46a0: 69 64 78 20 3c 20 63 75 72 72 5f 61 74 74 72 2d  idx < curr_attr-
46b0: 3e 75 6c 56 61 6c 75 65 4c 65 6e 3b 20 62 79 74  >ulValueLen; byt
46c0: 65 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09  e_idx++) {......
46d0: 09 09 09 09 09 09 70 72 69 6e 74 66 28 22 25 30  ......printf("%0
46e0: 32 78 20 22 2c 20 28 75 6e 73 69 67 6e 65 64 20  2x ", (unsigned 
46f0: 69 6e 74 29 20 70 75 63 56 61 6c 75 65 5b 62 79  int) pucValue[by
4700: 74 65 5f 69 64 78 5d 29 3b 0a 09 09 09 09 09 09  te_idx]);.......
4710: 09 09 09 09 7d 0a 0a 09 09 09 09 09 09 09 09 09  ....}...........
4720: 09 70 72 69 6e 74 66 28 22 3b 3b 20 25 70 2f 25  .printf(";; %p/%
4730: 6c 75 5c 6e 22 2c 20 63 75 72 72 5f 61 74 74 72  lu\n", curr_attr
4740: 2d 3e 70 56 61 6c 75 65 2c 20 63 75 72 72 5f 61  ->pValue, curr_a
4750: 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 29  ttr->ulValueLen)
4760: 3b 0a 0a 09 09 09 09 09 09 09 09 09 09 62 72 65  ;............bre
4770: 61 6b 3b 0a 09 09 09 09 09 09 09 09 09 63 61 73  ak;..........cas
4780: 65 20 43 4b 41 5f 53 55 42 4a 45 43 54 3a 0a 09  e CKA_SUBJECT:..
4790: 09 09 09 09 09 09 09 09 63 61 73 65 20 43 4b 41  ........case CKA
47a0: 5f 49 53 53 55 45 52 3a 0a 09 09 09 09 09 09 09  _ISSUER:........
47b0: 09 09 09 70 75 63 56 61 6c 75 65 20 3d 20 63 75  ...pucValue = cu
47c0: 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 3b  rr_attr->pValue;
47d0: 0a 0a 09 09 09 09 09 09 09 09 09 09 70 72 69 6e  ............prin
47e0: 74 66 28 22 20 20 20 20 5b 25 6c 75 5d 20 25 32  tf("    [%lu] %2
47f0: 30 73 3a 20 22 2c 20 68 4f 62 6a 65 63 74 2c 20  0s: ", hObject, 
4800: 70 6b 63 73 31 31 5f 61 74 74 72 69 62 75 74 65  pkcs11_attribute
4810: 5f 74 6f 5f 6e 61 6d 65 28 63 75 72 72 5f 61 74  _to_name(curr_at
4820: 74 72 2d 3e 74 79 70 65 29 29 3b 0a 0a 09 09 09  tr->type));.....
4830: 09 09 09 09 09 09 09 66 6f 72 20 28 62 79 74 65  .......for (byte
4840: 5f 69 64 78 20 3d 20 30 3b 20 62 79 74 65 5f 69  _idx = 0; byte_i
4850: 64 78 20 3c 20 63 75 72 72 5f 61 74 74 72 2d 3e  dx < curr_attr->
4860: 75 6c 56 61 6c 75 65 4c 65 6e 3b 20 62 79 74 65  ulValueLen; byte
4870: 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09 09  _idx++) {.......
4880: 09 09 09 09 09 70 72 69 6e 74 66 28 22 5c 5c 78  .....printf("\\x
4890: 25 30 32 78 22 2c 20 28 75 6e 73 69 67 6e 65 64  %02x", (unsigned
48a0: 20 69 6e 74 29 20 70 75 63 56 61 6c 75 65 5b 62   int) pucValue[b
48b0: 79 74 65 5f 69 64 78 5d 29 3b 0a 09 09 09 09 09  yte_idx]);......
48c0: 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 09 09 09  .....}..........
48d0: 09 09 70 72 69 6e 74 66 28 22 20 3b 3b 20 25 70  ..printf(" ;; %p
48e0: 2f 25 6c 75 5c 6e 22 2c 20 63 75 72 72 5f 61 74  /%lu\n", curr_at
48f0: 74 72 2d 3e 70 56 61 6c 75 65 2c 20 63 75 72 72  tr->pValue, curr
4900: 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65  _attr->ulValueLe
4910: 6e 29 3b 0a 0a 09 09 09 09 09 09 09 09 09 09 62  n);............b
4920: 72 65 61 6b 3b 0a 09 09 09 09 09 09 09 09 09 63  reak;..........c
4930: 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 43 4c  ase CKA_TRUST_CL
4940: 49 45 4e 54 5f 41 55 54 48 3a 0a 09 09 09 09 09  IENT_AUTH:......
4950: 09 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55  ....case CKA_TRU
4960: 53 54 5f 43 4f 44 45 5f 53 49 47 4e 49 4e 47 3a  ST_CODE_SIGNING:
4970: 0a 09 09 09 09 09 09 09 09 09 63 61 73 65 20 43  ..........case C
4980: 4b 41 5f 54 52 55 53 54 5f 43 52 4c 5f 53 49 47  KA_TRUST_CRL_SIG
4990: 4e 3a 0a 09 09 09 09 09 09 09 09 09 63 61 73 65  N:..........case
49a0: 20 43 4b 41 5f 54 52 55 53 54 5f 44 41 54 41 5f   CKA_TRUST_DATA_
49b0: 45 4e 43 49 50 48 45 52 4d 45 4e 54 3a 0a 09 09  ENCIPHERMENT:...
49c0: 09 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f  .......case CKA_
49d0: 54 52 55 53 54 5f 44 49 47 49 54 41 4c 5f 53 49  TRUST_DIGITAL_SI
49e0: 47 4e 41 54 55 52 45 3a 0a 09 09 09 09 09 09 09  GNATURE:........
49f0: 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54  ..case CKA_TRUST
4a00: 5f 45 4d 41 49 4c 5f 50 52 4f 54 45 43 54 49 4f  _EMAIL_PROTECTIO
4a10: 4e 3a 0a 09 09 09 09 09 09 09 09 09 63 61 73 65  N:..........case
4a20: 20 43 4b 41 5f 54 52 55 53 54 5f 4b 45 59 5f 41   CKA_TRUST_KEY_A
4a30: 47 52 45 45 4d 45 4e 54 3a 0a 09 09 09 09 09 09  GREEMENT:.......
4a40: 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53  ...case CKA_TRUS
4a50: 54 5f 4b 45 59 5f 43 45 52 54 5f 53 49 47 4e 3a  T_KEY_CERT_SIGN:
4a60: 0a 09 09 09 09 09 09 09 09 09 63 61 73 65 20 43  ..........case C
4a70: 4b 41 5f 54 52 55 53 54 5f 4b 45 59 5f 45 4e 43  KA_TRUST_KEY_ENC
4a80: 49 50 48 45 52 4d 45 4e 54 3a 0a 09 09 09 09 09  IPHERMENT:......
4a90: 09 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55  ....case CKA_TRU
4aa0: 53 54 5f 4e 4f 4e 5f 52 45 50 55 44 49 41 54 49  ST_NON_REPUDIATI
4ab0: 4f 4e 3a 0a 09 09 09 09 09 09 09 09 09 63 61 73  ON:..........cas
4ac0: 65 20 43 4b 41 5f 54 52 55 53 54 5f 53 45 52 56  e CKA_TRUST_SERV
4ad0: 45 52 5f 41 55 54 48 3a 0a 09 09 09 09 09 09 09  ER_AUTH:........
4ae0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 09  ...break;.......
4af0: 09 09 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 09  ...default:.....
4b00: 09 09 09 09 09 09 70 72 69 6e 74 66 28 22 20 20  ......printf("  
4b10: 20 20 5b 25 6c 75 5d 20 25 32 30 73 3a 20 25 70    [%lu] %20s: %p
4b20: 2f 25 6c 75 5c 6e 22 2c 20 68 4f 62 6a 65 63 74  /%lu\n", hObject
4b30: 2c 20 70 6b 63 73 31 31 5f 61 74 74 72 69 62 75  , pkcs11_attribu
4b40: 74 65 5f 74 6f 5f 6e 61 6d 65 28 63 75 72 72 5f  te_to_name(curr_
4b50: 61 74 74 72 2d 3e 74 79 70 65 29 2c 20 63 75 72  attr->type), cur
4b60: 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 2c 20  r_attr->pValue, 
4b70: 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c  curr_attr->ulVal
4b80: 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 09 09 09  ueLen);.........
4b90: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 09  ...break;.......
4ba0: 09 09 7d 0a 09 09 09 09 09 09 09 7d 20 65 6c 73  ..}........} els
4bb0: 65 20 7b 0a 09 09 09 09 09 09 09 09 70 72 69 6e  e {.........prin
4bc0: 74 66 28 22 20 20 20 20 5b 25 6c 75 5d 20 25 32  tf("    [%lu] %2
4bd0: 30 73 3a 20 28 6e 6f 74 20 66 6f 75 6e 64 29 5c  0s: (not found)\
4be0: 6e 22 2c 20 68 4f 62 6a 65 63 74 2c 20 70 6b 63  n", hObject, pkc
4bf0: 73 31 31 5f 61 74 74 72 69 62 75 74 65 5f 74 6f  s11_attribute_to
4c00: 5f 6e 61 6d 65 28 63 75 72 72 5f 61 74 74 72 2d  _name(curr_attr-
4c10: 3e 74 79 70 65 29 29 3b 0a 09 09 09 09 09 09 09  >type));........
4c20: 7d 0a 0a 09 09 09 09 09 09 09 66 72 65 65 28 63  }.........free(c
4c30: 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65  urr_attr->pValue
4c40: 29 3b 0a 09 09 09 09 09 09 09 63 75 72 72 5f 61  );........curr_a
4c50: 74 74 72 2d 3e 70 56 61 6c 75 65 20 3d 20 4e 55  ttr->pValue = NU
4c60: 4c 4c 3b 0a 09 09 09 09 09 09 7d 0a 09 09 09 09  LL;.......}.....
4c70: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09  .} else {.......
4c80: 70 72 69 6e 74 66 28 22 47 65 74 41 74 74 72 69  printf("GetAttri
4c90: 62 75 74 65 56 61 6c 75 65 28 29 2f 32 20 66 61  buteValue()/2 fa
4ca0: 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09 09 09 09  iled.\n");......
4cb0: 7d 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  }.....} else {..
4cc0: 09 09 09 09 70 72 69 6e 74 66 28 22 47 65 74 41  ....printf("GetA
4cd0: 74 74 72 69 62 75 74 65 56 61 6c 75 65 28 68 4f  ttributeValue(hO
4ce0: 62 6a 65 63 74 3d 25 6c 75 29 2f 31 20 66 61 69  bject=%lu)/1 fai
4cf0: 6c 65 64 20 28 72 76 20 3d 20 25 6c 75 29 2e 5c  led (rv = %lu).\
4d00: 6e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f  n", (unsigned lo
4d10: 6e 67 29 20 68 4f 62 6a 65 63 74 2c 20 28 75 6e  ng) hObject, (un
4d20: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 68 6b  signed long) chk
4d30: 5f 72 76 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09  _rv);.....}.....
4d40: 7d 0a 0a 09 09 09 63 68 6b 5f 72 76 20 3d 20 43  }.....chk_rv = C
4d50: 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 69 6e 61  _FindObjectsFina
4d60: 6c 28 68 53 65 73 73 69 6f 6e 29 3b 0a 09 09 09  l(hSession);....
4d70: 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b  if (chk_rv != CK
4d80: 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 70 72 69 6e  R_OK) {.....prin
4d90: 74 66 28 22 46 69 6e 64 4f 62 6a 65 63 74 73 46  tf("FindObjectsF
4da0: 69 6e 61 6c 28 29 20 66 61 69 6c 65 64 2e 5c 6e  inal() failed.\n
4db0: 22 29 3b 0a 09 09 09 7d 0a 09 09 7d 20 65 6c 73  ");....}...} els
4dc0: 65 20 7b 0a 09 09 09 70 72 69 6e 74 66 28 22 46  e {....printf("F
4dd0: 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 28 29  indObjectsInit()
4de0: 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09   failed.\n");...
4df0: 7d 0a 0a 09 09 70 72 69 6e 74 66 28 22 2d 2d 2d  }....printf("---
4e00: 20 4f 70 65 72 61 74 69 6f 6e 73 20 2d 2d 2d 5c   Operations ---\
4e10: 6e 22 29 3b 0a 0a 09 09 66 6f 72 20 28 63 75 72  n");....for (cur
4e20: 72 50 72 69 76 4b 65 79 20 3d 20 70 72 69 76 61  rPrivKey = priva
4e30: 74 65 4b 65 79 4f 62 6a 65 63 74 73 5f 72 6f 6f  teKeyObjects_roo
4e40: 74 3b 20 2a 63 75 72 72 50 72 69 76 4b 65 79 20  t; *currPrivKey 
4e50: 21 3d 20 43 4b 5f 49 4e 56 41 4c 49 44 5f 48 41  != CK_INVALID_HA
4e60: 4e 44 4c 45 3b 20 63 75 72 72 50 72 69 76 4b 65  NDLE; currPrivKe
4e70: 79 2b 2b 29 20 7b 0a 09 09 09 63 68 6b 5f 72 76  y++) {....chk_rv
4e80: 20 3d 20 43 5f 53 69 67 6e 49 6e 69 74 28 68 53   = C_SignInit(hS
4e90: 65 73 73 69 6f 6e 2c 20 26 6d 65 63 68 61 6e 69  ession, &mechani
4ea0: 73 6d 2c 20 2a 63 75 72 72 50 72 69 76 4b 65 79  sm, *currPrivKey
4eb0: 29 3b 0a 09 09 09 69 66 20 28 63 68 6b 5f 72 76  );....if (chk_rv
4ec0: 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09   == CKR_OK) {...
4ed0: 09 09 73 69 67 6e 61 74 75 72 65 5f 6c 65 6e 20  ..signature_len 
4ee0: 3d 20 73 69 7a 65 6f 66 28 73 69 67 6e 61 74 75  = sizeof(signatu
4ef0: 72 65 29 3b 0a 0a 09 09 09 09 63 68 6b 5f 72 76  re);......chk_rv
4f00: 20 3d 20 43 5f 53 69 67 6e 28 68 53 65 73 73 69   = C_Sign(hSessi
4f10: 6f 6e 2c 20 28 43 4b 5f 42 59 54 45 5f 50 54 52  on, (CK_BYTE_PTR
4f20: 29 20 22 54 65 73 74 22 2c 20 73 74 72 6c 65 6e  ) "Test", strlen
4f30: 28 22 54 65 73 74 22 29 2c 20 28 43 4b 5f 42 59  ("Test"), (CK_BY
4f40: 54 45 5f 50 54 52 29 20 26 73 69 67 6e 61 74 75  TE_PTR) &signatu
4f50: 72 65 2c 20 26 73 69 67 6e 61 74 75 72 65 5f 6c  re, &signature_l
4f60: 65 6e 29 3b 0a 09 09 09 09 69 66 20 28 63 68 6b  en);.....if (chk
4f70: 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b  _rv == CKR_OK) {
4f80: 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22 5b 25  ......printf("[%
4f90: 30 34 6c 75 2f 25 30 32 6c 78 5d 20 53 69 67 6e  04lu/%02lx] Sign
4fa0: 61 74 75 72 65 3a 20 22 2c 20 28 75 6e 73 69 67  ature: ", (unsig
4fb0: 6e 65 64 20 6c 6f 6e 67 29 20 2a 63 75 72 72 50  ned long) *currP
4fc0: 72 69 76 4b 65 79 2c 20 28 75 6e 73 69 67 6e 65  rivKey, (unsigne
4fd0: 64 20 6c 6f 6e 67 29 20 6d 65 63 68 61 6e 69 73  d long) mechanis
4fe0: 6d 2e 6d 65 63 68 61 6e 69 73 6d 29 3b 0a 0a 09  m.mechanism);...
4ff0: 09 09 09 09 66 6f 72 20 28 62 79 74 65 5f 69 64  ....for (byte_id
5000: 78 20 3d 20 30 3b 20 62 79 74 65 5f 69 64 78 20  x = 0; byte_idx 
5010: 3c 20 73 69 67 6e 61 74 75 72 65 5f 6c 65 6e 3b  < signature_len;
5020: 20 62 79 74 65 5f 69 64 78 2b 2b 29 20 7b 0a 09   byte_idx++) {..
5030: 09 09 09 09 09 70 72 69 6e 74 66 28 22 25 30 32  .....printf("%02
5040: 78 20 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 69  x ", (unsigned i
5050: 6e 74 29 20 73 69 67 6e 61 74 75 72 65 5b 62 79  nt) signature[by
5060: 74 65 5f 69 64 78 5d 29 3b 0a 09 09 09 09 09 7d  te_idx]);......}
5070: 0a 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22 5c  .......printf("\
5080: 6e 22 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20  n");.....} else 
5090: 7b 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22 53  {......printf("S
50a0: 69 67 6e 28 29 20 66 61 69 6c 65 64 2e 5c 6e 22  ign() failed.\n"
50b0: 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 20 65 6c  );.....}....} el
50c0: 73 65 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28  se {.....printf(
50d0: 22 53 69 67 6e 49 6e 69 74 28 29 20 66 61 69 6c  "SignInit() fail
50e0: 65 64 2e 5c 6e 22 29 3b 0a 09 09 09 7d 0a 09 09  ed.\n");....}...
50f0: 7d 0a 0a 09 09 66 6f 72 20 28 63 75 72 72 50 72  }....for (currPr
5100: 69 76 4b 65 79 20 3d 20 70 72 69 76 61 74 65 4b  ivKey = privateK
5110: 65 79 4f 62 6a 65 63 74 73 5f 72 6f 6f 74 3b 20  eyObjects_root; 
5120: 2a 63 75 72 72 50 72 69 76 4b 65 79 20 21 3d 20  *currPrivKey != 
5130: 43 4b 5f 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c  CK_INVALID_HANDL
5140: 45 3b 20 63 75 72 72 50 72 69 76 4b 65 79 2b 2b  E; currPrivKey++
5150: 29 20 7b 0a 09 09 09 63 68 6b 5f 72 76 20 3d 20  ) {....chk_rv = 
5160: 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 28 68 53  C_EncryptInit(hS
5170: 65 73 73 69 6f 6e 2c 20 26 6d 65 63 68 61 6e 69  ession, &mechani
5180: 73 6d 2c 20 2a 63 75 72 72 50 72 69 76 4b 65 79  sm, *currPrivKey
5190: 29 3b 0a 09 09 09 69 66 20 28 63 68 6b 5f 72 76  );....if (chk_rv
51a0: 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09   == CKR_OK) {...
51b0: 09 09 65 6e 63 72 79 70 74 65 64 5f 62 75 66 6c  ..encrypted_bufl
51c0: 65 6e 20 3d 20 73 69 7a 65 6f 66 28 65 6e 63 72  en = sizeof(encr
51d0: 79 70 74 65 64 5f 62 75 66 29 3b 0a 0a 09 09 09  ypted_buf);.....
51e0: 09 63 68 6b 5f 72 76 20 3d 20 43 5f 45 6e 63 72  .chk_rv = C_Encr
51f0: 79 70 74 28 68 53 65 73 73 69 6f 6e 2c 20 28 43  ypt(hSession, (C
5200: 4b 5f 42 59 54 45 5f 50 54 52 29 20 22 54 65 73  K_BYTE_PTR) "Tes
5210: 74 22 2c 20 73 74 72 6c 65 6e 28 22 54 65 73 74  t", strlen("Test
5220: 22 29 2c 20 65 6e 63 72 79 70 74 65 64 5f 62 75  "), encrypted_bu
5230: 66 2c 20 26 65 6e 63 72 79 70 74 65 64 5f 62 75  f, &encrypted_bu
5240: 66 6c 65 6e 29 3b 0a 09 09 09 09 69 66 20 28 63  flen);.....if (c
5250: 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29  hk_rv == CKR_OK)
5260: 20 7b 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22   {......printf("
5270: 5b 25 30 34 6c 75 2f 25 30 32 6c 78 5d 20 45 6e  [%04lu/%02lx] En
5280: 63 72 79 70 74 65 64 28 54 65 73 74 29 3a 20 22  crypted(Test): "
5290: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67  , (unsigned long
52a0: 29 20 2a 63 75 72 72 50 72 69 76 4b 65 79 2c 20  ) *currPrivKey, 
52b0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20  (unsigned long) 
52c0: 6d 65 63 68 61 6e 69 73 6d 2e 6d 65 63 68 61 6e  mechanism.mechan
52d0: 69 73 6d 29 3b 0a 0a 09 09 09 09 09 66 6f 72 20  ism);.......for 
52e0: 28 62 79 74 65 5f 69 64 78 20 3d 20 30 3b 20 62  (byte_idx = 0; b
52f0: 79 74 65 5f 69 64 78 20 3c 20 65 6e 63 72 79 70  yte_idx < encryp
5300: 74 65 64 5f 62 75 66 6c 65 6e 3b 20 62 79 74 65  ted_buflen; byte
5310: 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09 09  _idx++) {.......
5320: 70 72 69 6e 74 66 28 22 25 30 32 78 20 22 2c 20  printf("%02x ", 
5330: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 65  (unsigned int) e
5340: 6e 63 72 79 70 74 65 64 5f 62 75 66 5b 62 79 74  ncrypted_buf[byt
5350: 65 5f 69 64 78 5d 29 3b 0a 09 09 09 09 09 7d 0a  e_idx]);......}.
5360: 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22 5c 6e  ......printf("\n
5370: 22 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b  ");.....} else {
5380: 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22 45 6e  ......printf("En
5390: 63 72 79 70 74 28 29 20 66 61 69 6c 65 64 2e 5c  crypt() failed.\
53a0: 6e 22 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 20  n");.....}....} 
53b0: 65 6c 73 65 20 7b 0a 09 09 09 09 70 72 69 6e 74  else {.....print
53c0: 66 28 22 45 6e 63 72 79 70 74 49 6e 69 74 28 29  f("EncryptInit()
53d0: 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09   failed.\n");...
53e0: 09 7d 0a 09 09 7d 0a 0a 09 09 66 6f 72 20 28 63  .}...}....for (c
53f0: 75 72 72 50 72 69 76 4b 65 79 20 3d 20 70 72 69  urrPrivKey = pri
5400: 76 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 5f 72  vateKeyObjects_r
5410: 6f 6f 74 3b 20 2a 63 75 72 72 50 72 69 76 4b 65  oot; *currPrivKe
5420: 79 20 21 3d 20 43 4b 5f 49 4e 56 41 4c 49 44 5f  y != CK_INVALID_
5430: 48 41 4e 44 4c 45 3b 20 63 75 72 72 50 72 69 76  HANDLE; currPriv
5440: 4b 65 79 2b 2b 29 20 7b 0a 09 09 09 63 68 6b 5f  Key++) {....chk_
5450: 72 76 20 3d 20 43 5f 44 65 63 72 79 70 74 49 6e  rv = C_DecryptIn
5460: 69 74 28 68 53 65 73 73 69 6f 6e 2c 20 26 6d 65  it(hSession, &me
5470: 63 68 61 6e 69 73 6d 2c 20 2a 63 75 72 72 50 72  chanism, *currPr
5480: 69 76 4b 65 79 29 3b 0a 09 09 09 69 66 20 28 63  ivKey);....if (c
5490: 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29  hk_rv == CKR_OK)
54a0: 20 7b 0a 09 09 09 09 64 65 63 72 79 70 74 65 64   {.....decrypted
54b0: 5f 62 75 66 6c 65 6e 20 3d 20 73 69 7a 65 6f 66  _buflen = sizeof
54c0: 28 64 65 63 72 79 70 74 65 64 5f 62 75 66 29 3b  (decrypted_buf);
54d0: 0a 0a 09 09 09 09 63 68 6b 5f 72 76 20 3d 20 43  ......chk_rv = C
54e0: 5f 44 65 63 72 79 70 74 28 68 53 65 73 73 69 6f  _Decrypt(hSessio
54f0: 6e 2c 20 28 43 4b 5f 42 59 54 45 5f 50 54 52 29  n, (CK_BYTE_PTR)
5500: 20 22 5c 78 34 63 5c 78 33 36 5c 78 30 66 5c 78   "\x4c\x36\x0f\x
5510: 38 36 5c 78 32 64 5c 78 62 37 5c 78 62 32 5c 78  86\x2d\xb7\xb2\x
5520: 34 36 5c 78 39 32 5c 78 31 31 5c 78 37 65 5c 78  46\x92\x11\x7e\x
5530: 35 66 5c 78 64 31 5c 78 65 62 5c 78 32 63 5c 78  5f\xd1\xeb\x2c\x
5540: 62 30 5c 78 64 62 5c 78 33 34 5c 78 36 30 5c 78  b0\xdb\x34\x60\x
5550: 62 38 5c 78 30 63 5c 78 66 38 5c 78 32 37 5c 78  b8\x0c\xf8\x27\x
5560: 62 35 5c 78 66 62 5c 78 63 65 5c 78 64 31 5c 78  b5\xfb\xce\xd1\x
5570: 66 34 5c 78 35 38 5c 78 61 33 5c 78 32 30 5c 78  f4\x58\xa3\x20\x
5580: 35 32 5c 78 39 64 5c 78 39 37 5c 78 30 38 5c 78  52\x9d\x97\x08\x
5590: 64 38 5c 78 32 62 5c 78 35 65 5c 78 62 32 5c 78  d8\x2b\x5e\xb2\x
55a0: 33 37 5c 78 34 36 5c 78 37 32 5c 78 34 35 5c 78  37\x46\x72\x45\x
55b0: 37 63 5c 78 36 36 5c 78 32 33 5c 78 35 33 5c 78  7c\x66\x23\x53\x
55c0: 62 35 5c 78 61 35 5c 78 31 36 5c 78 36 31 5c 78  b5\xa5\x16\x61\x
55d0: 39 36 5c 78 62 63 5c 78 35 63 5c 78 38 64 5c 78  96\xbc\x5c\x8d\x
55e0: 38 35 5c 78 31 38 5c 78 32 34 5c 78 63 66 5c 78  85\x18\x24\xcf\x
55f0: 37 34 5c 78 37 66 5c 78 63 32 5c 78 32 33 5c 78  74\x7f\xc2\x23\x
5600: 31 35 5c 78 64 36 5c 78 34 32 5c 78 37 32 5c 78  15\xd6\x42\x72\x
5610: 61 35 5c 78 32 62 5c 78 32 39 5c 78 32 39 5c 78  a5\x2b\x29\x29\x
5620: 31 64 5c 78 61 36 5c 78 65 61 5c 78 32 62 5c 78  1d\xa6\xea\x2b\x
5630: 63 62 5c 78 35 37 5c 78 35 39 5c 78 62 33 5c 78  cb\x57\x59\xb3\x
5640: 35 66 5c 78 65 32 5c 78 66 38 5c 78 33 30 5c 78  5f\xe2\xf8\x30\x
5650: 31 32 5c 78 32 66 5c 78 31 62 5c 78 66 61 5c 78  12\x2f\x1b\xfa\x
5660: 62 64 5c 78 61 39 5c 78 31 39 5c 78 65 66 5c 78  bd\xa9\x19\xef\x
5670: 35 63 5c 78 62 62 5c 78 34 38 5c 78 64 63 5c 78  5c\xbb\x48\xdc\x
5680: 32 38 5c 78 34 32 5c 78 64 64 5c 78 39 30 5c 78  28\x42\xdd\x90\x
5690: 62 65 5c 78 36 33 5c 78 65 62 5c 78 35 39 5c 78  be\x63\xeb\x59\x
56a0: 30 63 5c 78 61 66 5c 78 35 39 5c 78 63 62 5c 78  0c\xaf\x59\xcb\x
56b0: 65 34 5c 78 36 61 5c 78 66 32 5c 78 35 36 5c 78  e4\x6a\xf2\x56\x
56c0: 32 34 5c 78 34 31 5c 78 63 32 5c 78 37 37 5c 78  24\x41\xc2\x77\x
56d0: 37 62 5c 78 63 39 5c 78 66 38 5c 78 30 32 5c 78  7b\xc9\xf8\x02\x
56e0: 30 66 5c 78 36 37 5c 78 33 64 5c 78 32 61 5c 78  0f\x67\x3d\x2a\x
56f0: 39 38 5c 78 39 31 5c 78 31 34 5c 78 61 32 5c 78  98\x91\x14\xa2\x
5700: 35 37 22 2c 20 31 32 38 2c 20 64 65 63 72 79 70  57", 128, decryp
5710: 74 65 64 5f 62 75 66 2c 20 26 64 65 63 72 79 70  ted_buf, &decryp
5720: 74 65 64 5f 62 75 66 6c 65 6e 29 3b 0a 09 09 09  ted_buflen);....
5730: 09 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d 20 43  .if (chk_rv == C
5740: 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 09 70 72  KR_OK) {......pr
5750: 69 6e 74 66 28 22 5b 25 30 34 6c 75 2f 25 30 32  intf("[%04lu/%02
5760: 6c 78 5d 20 44 65 63 72 79 70 74 65 64 28 49 74  lx] Decrypted(It
5770: 20 77 6f 72 6b 73 21 29 3a 20 22 2c 20 28 75 6e   works!): ", (un
5780: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 63 75  signed long) *cu
5790: 72 72 50 72 69 76 4b 65 79 2c 20 28 75 6e 73 69  rrPrivKey, (unsi
57a0: 67 6e 65 64 20 6c 6f 6e 67 29 20 6d 65 63 68 61  gned long) mecha
57b0: 6e 69 73 6d 2e 6d 65 63 68 61 6e 69 73 6d 29 3b  nism.mechanism);
57c0: 0a 0a 09 09 09 09 09 66 6f 72 20 28 62 79 74 65  .......for (byte
57d0: 5f 69 64 78 20 3d 20 30 3b 20 62 79 74 65 5f 69  _idx = 0; byte_i
57e0: 64 78 20 3c 20 64 65 63 72 79 70 74 65 64 5f 62  dx < decrypted_b
57f0: 75 66 6c 65 6e 3b 20 62 79 74 65 5f 69 64 78 2b  uflen; byte_idx+
5800: 2b 29 20 7b 0a 09 09 09 09 09 09 70 72 69 6e 74  +) {.......print
5810: 66 28 22 25 30 32 78 20 22 2c 20 28 75 6e 73 69  f("%02x ", (unsi
5820: 67 6e 65 64 20 69 6e 74 29 20 64 65 63 72 79 70  gned int) decryp
5830: 74 65 64 5f 62 75 66 5b 62 79 74 65 5f 69 64 78  ted_buf[byte_idx
5840: 5d 29 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09  ]);......}......
5850: 09 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 09  .printf("\n");..
5860: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
5870: 09 70 72 69 6e 74 66 28 22 44 65 63 72 79 70 74  .printf("Decrypt
5880: 28 29 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a  () failed.\n");.
5890: 09 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65 20  ....}....} else 
58a0: 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 44 65  {.....printf("De
58b0: 63 72 79 70 74 49 6e 69 74 28 29 20 66 61 69 6c  cryptInit() fail
58c0: 65 64 2e 5c 6e 22 29 3b 0a 09 09 09 7d 0a 09 09  ed.\n");....}...
58d0: 7d 0a 0a 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f  }....chk_rv = C_
58e0: 43 6c 6f 73 65 53 65 73 73 69 6f 6e 28 68 53 65  CloseSession(hSe
58f0: 73 73 69 6f 6e 29 3b 0a 09 09 69 66 20 28 63 68  ssion);...if (ch
5900: 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20  k_rv != CKR_OK) 
5910: 7b 0a 09 09 09 70 72 69 6e 74 66 28 22 43 6c 6f  {....printf("Clo
5920: 73 65 53 65 73 73 69 6f 6e 20 66 61 69 6c 65 64  seSession failed
5930: 2e 5c 6e 22 29 3b 0a 09 09 7d 0a 09 7d 20 65 6c  .\n");...}..} el
5940: 73 65 20 7b 0a 09 09 70 72 69 6e 74 66 28 22 4f  se {...printf("O
5950: 70 65 6e 53 65 73 73 69 6f 6e 20 66 61 69 6c 65  penSession faile
5960: 64 2e 5c 6e 22 29 3b 0a 09 7d 0a 0a 09 43 5f 46  d.\n");..}...C_F
5970: 69 6e 61 6c 69 7a 65 28 4e 55 4c 4c 29 3b 0a 0a  inalize(NULL);..
5980: 09 69 66 20 28 73 6c 6f 74 73 29 20 7b 0a 09 09  .if (slots) {...
5990: 66 72 65 65 28 73 6c 6f 74 73 29 3b 0a 09 7d 0a  free(slots);..}.
59a0: 0a 09 69 66 20 28 70 72 69 76 61 74 65 4b 65 79  ..if (privateKey
59b0: 4f 62 6a 65 63 74 73 5f 72 6f 6f 74 29 20 7b 0a  Objects_root) {.
59c0: 09 09 66 72 65 65 28 70 72 69 76 61 74 65 4b 65  ..free(privateKe
59d0: 79 4f 62 6a 65 63 74 73 5f 72 6f 6f 74 29 3b 0a  yObjects_root);.
59e0: 09 7d 0a 0a 09 72 65 74 75 72 6e 28 30 29 3b 0a  .}...return(0);.
59f0: 7d 0a 0a 69 6e 74 20 6d 61 69 6e 28 76 6f 69 64  }..int main(void
5a00: 29 20 7b 0a 09 69 6e 74 20 72 65 74 76 61 6c 20  ) {..int retval 
5a10: 3d 20 30 2c 20 63 6b 5f 72 65 74 76 61 6c 3b 0a  = 0, ck_retval;.
5a20: 0a 09 70 72 69 6e 74 66 28 22 54 65 73 74 69 6e  ..printf("Testin
5a30: 67 20 6c 69 62 63 61 63 6b 65 79 2e 2e 2e 5c 6e  g libcackey...\n
5a40: 22 29 3b 0a 0a 09 63 6b 5f 72 65 74 76 61 6c 20  ");...ck_retval 
5a50: 3d 20 6d 61 69 6e 5f 70 6b 63 73 31 31 28 29 3b  = main_pkcs11();
5a60: 0a 0a 09 69 66 20 28 63 6b 5f 72 65 74 76 61 6c  ...if (ck_retval
5a70: 20 21 3d 20 30 29 20 7b 0a 09 09 72 65 74 76 61   != 0) {...retva
5a80: 6c 20 3d 20 63 6b 5f 72 65 74 76 61 6c 3b 0a 09  l = ck_retval;..
5a90: 7d 0a 0a 09 70 72 69 6e 74 66 28 22 54 65 73 74  }...printf("Test
5aa0: 69 6e 67 20 6c 69 62 63 61 63 6b 65 79 2e 2e 2e  ing libcackey...
5ab0: 20 44 4f 4e 45 2e 20 53 74 61 74 75 73 20 3d 20   DONE. Status = 
5ac0: 25 69 5c 6e 22 2c 20 63 6b 5f 72 65 74 76 61 6c  %i\n", ck_retval
5ad0: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76  );...return(retv
5ae0: 61 6c 29 3b 0a 7d 0a                             al);.}.