Hex Artifact Content

Artifact 7438606333bc3a23160c03219a9ab657e878ebe4:


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 44 65 73 63 20  rintf("    Desc 
25f0: 20 20 3a 20 25 2e 2a 73 5c 6e 22 2c 20 33 32 2c    : %.*s\n", 32,
2600: 20 73 6c 6f 74 49 6e 66 6f 2e 73 6c 6f 74 44 65   slotInfo.slotDe
2610: 73 63 72 69 70 74 69 6f 6e 29 3b 0a 09 09 70 72  scription);...pr
2620: 69 6e 74 66 28 22 20 20 20 20 4d 61 6e 75 66 49  intf("    ManufI
2630: 44 3a 20 25 2e 2a 73 5c 6e 22 2c 20 33 32 2c 20  D: %.*s\n", 32, 
2640: 73 6c 6f 74 49 6e 66 6f 2e 6d 61 6e 75 66 61 63  slotInfo.manufac
2650: 74 75 72 65 72 49 44 29 3b 0a 09 09 70 72 69 6e  turerID);...prin
2660: 74 66 28 22 20 20 20 20 48 57 56 65 72 73 20 3a  tf("    HWVers :
2670: 20 25 69 2e 25 69 5c 6e 22 2c 20 73 6c 6f 74 49   %i.%i\n", slotI
2680: 6e 66 6f 2e 68 61 72 64 77 61 72 65 56 65 72 73  nfo.hardwareVers
2690: 69 6f 6e 2e 6d 61 6a 6f 72 2c 20 73 6c 6f 74 49  ion.major, slotI
26a0: 6e 66 6f 2e 68 61 72 64 77 61 72 65 56 65 72 73  nfo.hardwareVers
26b0: 69 6f 6e 2e 6d 69 6e 6f 72 29 3b 0a 09 09 70 72  ion.minor);...pr
26c0: 69 6e 74 66 28 22 20 20 20 20 46 57 56 65 72 73  intf("    FWVers
26d0: 20 3a 20 25 69 2e 25 69 5c 6e 22 2c 20 73 6c 6f   : %i.%i\n", slo
26e0: 74 49 6e 66 6f 2e 66 69 72 6d 77 61 72 65 56 65  tInfo.firmwareVe
26f0: 72 73 69 6f 6e 2e 6d 61 6a 6f 72 2c 20 73 6c 6f  rsion.major, slo
2700: 74 49 6e 66 6f 2e 66 69 72 6d 77 61 72 65 56 65  tInfo.firmwareVe
2710: 72 73 69 6f 6e 2e 6d 69 6e 6f 72 29 3b 0a 09 09  rsion.minor);...
2720: 70 72 69 6e 74 66 28 22 20 20 20 20 46 6c 61 67  printf("    Flag
2730: 73 20 20 3a 20 22 29 3b 0a 09 09 69 66 20 28 28  s  : ");...if ((
2740: 73 6c 6f 74 49 6e 66 6f 2e 66 6c 61 67 73 20 26  slotInfo.flags &
2750: 20 43 4b 46 5f 54 4f 4b 45 4e 5f 50 52 45 53 45   CKF_TOKEN_PRESE
2760: 4e 54 29 20 3d 3d 20 43 4b 46 5f 54 4f 4b 45 4e  NT) == CKF_TOKEN
2770: 5f 50 52 45 53 45 4e 54 29 20 7b 0a 09 09 09 70  _PRESENT) {....p
2780: 72 69 6e 74 66 28 22 43 4b 46 5f 54 4f 4b 45 4e  rintf("CKF_TOKEN
2790: 5f 50 52 45 53 45 4e 54 20 22 29 3b 0a 09 09 7d  _PRESENT ");...}
27a0: 0a 09 09 69 66 20 28 28 73 6c 6f 74 49 6e 66 6f  ...if ((slotInfo
27b0: 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 52 45 4d  .flags & CKF_REM
27c0: 4f 56 41 42 4c 45 5f 44 45 56 49 43 45 29 20 3d  OVABLE_DEVICE) =
27d0: 3d 20 43 4b 46 5f 52 45 4d 4f 56 41 42 4c 45 5f  = CKF_REMOVABLE_
27e0: 44 45 56 49 43 45 29 20 7b 0a 09 09 09 70 72 69  DEVICE) {....pri
27f0: 6e 74 66 28 22 43 4b 46 5f 52 45 4d 4f 56 41 42  ntf("CKF_REMOVAB
2800: 4c 45 5f 44 45 56 49 43 45 20 22 29 3b 0a 09 09  LE_DEVICE ");...
2810: 7d 0a 09 09 69 66 20 28 28 73 6c 6f 74 49 6e 66  }...if ((slotInf
2820: 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 48 57  o.flags & CKF_HW
2830: 5f 53 4c 4f 54 29 20 3d 3d 20 43 4b 46 5f 48 57  _SLOT) == CKF_HW
2840: 5f 53 4c 4f 54 29 20 7b 0a 09 09 09 70 72 69 6e  _SLOT) {....prin
2850: 74 66 28 22 43 4b 46 5f 48 57 5f 53 4c 4f 54 20  tf("CKF_HW_SLOT 
2860: 22 29 3b 0a 09 09 7d 0a 09 09 70 72 69 6e 74 66  ");...}...printf
2870: 28 22 5c 6e 22 29 3b 0a 0a 09 09 69 66 20 28 28  ("\n");....if ((
2880: 73 6c 6f 74 49 6e 66 6f 2e 66 6c 61 67 73 20 26  slotInfo.flags &
2890: 20 43 4b 46 5f 54 4f 4b 45 4e 5f 50 52 45 53 45   CKF_TOKEN_PRESE
28a0: 4e 54 29 20 3d 3d 20 43 4b 46 5f 54 4f 4b 45 4e  NT) == CKF_TOKEN
28b0: 5f 50 52 45 53 45 4e 54 29 20 7b 0a 09 09 09 70  _PRESENT) {....p
28c0: 72 69 6e 74 66 28 22 20 20 20 20 54 6f 6b 65 6e  rintf("    Token
28d0: 3a 5c 6e 22 29 3b 0a 0a 09 09 09 63 68 6b 5f 72  :\n");.....chk_r
28e0: 76 20 3d 20 43 5f 47 65 74 54 6f 6b 65 6e 49 6e  v = C_GetTokenIn
28f0: 66 6f 28 73 6c 6f 74 73 5b 63 75 72 72 53 6c 6f  fo(slots[currSlo
2900: 74 5d 2c 20 26 74 6f 6b 65 6e 49 6e 66 6f 29 3b  t], &tokenInfo);
2910: 0a 09 09 09 69 66 20 28 63 68 6b 5f 72 76 20 21  ....if (chk_rv !
2920: 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09  = CKR_OK) {.....
2930: 72 65 74 75 72 6e 28 31 29 3b 0a 09 09 09 7d 0a  return(1);....}.
2940: 0a 09 09 09 70 72 69 6e 74 66 28 22 20 20 20 20  ....printf("    
2950: 20 20 4c 61 62 65 6c 20 20 3a 20 25 2e 2a 73 5c    Label  : %.*s\
2960: 6e 22 2c 20 33 32 2c 20 74 6f 6b 65 6e 49 6e 66  n", 32, tokenInf
2970: 6f 2e 6c 61 62 65 6c 29 3b 0a 09 09 09 70 72 69  o.label);....pri
2980: 6e 74 66 28 22 20 20 20 20 20 20 4d 61 6e 75 66  ntf("      Manuf
2990: 49 44 3a 20 25 2e 2a 73 5c 6e 22 2c 20 33 32 2c  ID: %.*s\n", 32,
29a0: 20 74 6f 6b 65 6e 49 6e 66 6f 2e 6d 61 6e 75 66   tokenInfo.manuf
29b0: 61 63 74 75 72 65 72 49 44 29 3b 0a 09 09 09 70  acturerID);....p
29c0: 72 69 6e 74 66 28 22 20 20 20 20 20 20 4d 6f 64  rintf("      Mod
29d0: 65 6c 20 20 3a 20 25 2e 2a 73 5c 6e 22 2c 20 31  el  : %.*s\n", 1
29e0: 36 2c 20 74 6f 6b 65 6e 49 6e 66 6f 2e 6d 6f 64  6, tokenInfo.mod
29f0: 65 6c 29 3b 0a 09 09 09 70 72 69 6e 74 66 28 22  el);....printf("
2a00: 20 20 20 20 20 20 53 65 72 4e 6f 20 20 3a 20 25        SerNo  : %
2a10: 2e 2a 73 5c 6e 22 2c 20 31 36 2c 20 74 6f 6b 65  .*s\n", 16, toke
2a20: 6e 49 6e 66 6f 2e 73 65 72 69 61 6c 4e 75 6d 62  nInfo.serialNumb
2a30: 65 72 29 3b 0a 09 09 09 70 72 69 6e 74 66 28 22  er);....printf("
2a40: 20 20 20 20 20 20 48 57 56 65 72 73 20 3a 20 25        HWVers : %
2a50: 69 2e 25 69 5c 6e 22 2c 20 74 6f 6b 65 6e 49 6e  i.%i\n", tokenIn
2a60: 66 6f 2e 68 61 72 64 77 61 72 65 56 65 72 73 69  fo.hardwareVersi
2a70: 6f 6e 2e 6d 61 6a 6f 72 2c 20 74 6f 6b 65 6e 49  on.major, tokenI
2a80: 6e 66 6f 2e 68 61 72 64 77 61 72 65 56 65 72 73  nfo.hardwareVers
2a90: 69 6f 6e 2e 6d 69 6e 6f 72 29 3b 0a 09 09 09 70  ion.minor);....p
2aa0: 72 69 6e 74 66 28 22 20 20 20 20 20 20 46 57 56  rintf("      FWV
2ab0: 65 72 73 20 3a 20 25 69 2e 25 69 5c 6e 22 2c 20  ers : %i.%i\n", 
2ac0: 74 6f 6b 65 6e 49 6e 66 6f 2e 66 69 72 6d 77 61  tokenInfo.firmwa
2ad0: 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 2c  reVersion.major,
2ae0: 20 74 6f 6b 65 6e 49 6e 66 6f 2e 66 69 72 6d 77   tokenInfo.firmw
2af0: 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72  areVersion.minor
2b00: 29 3b 0a 09 09 09 70 72 69 6e 74 66 28 22 20 20  );....printf("  
2b10: 20 20 20 20 46 6c 61 67 73 20 20 3a 20 22 29 3b      Flags  : ");
2b20: 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e  ....if ((tokenIn
2b30: 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 52  fo.flags & CKF_R
2b40: 4e 47 29 20 3d 3d 20 43 4b 46 5f 52 4e 47 29 20  NG) == CKF_RNG) 
2b50: 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b  {.....printf("CK
2b60: 46 5f 52 4e 47 20 22 29 3b 0a 09 09 09 7d 0a 09  F_RNG ");....}..
2b70: 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66 6f  ..if ((tokenInfo
2b80: 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 57 52 49  .flags & CKF_WRI
2b90: 54 45 5f 50 52 4f 54 45 43 54 45 44 29 20 3d 3d  TE_PROTECTED) ==
2ba0: 20 43 4b 46 5f 57 52 49 54 45 5f 50 52 4f 54 45   CKF_WRITE_PROTE
2bb0: 43 54 45 44 29 20 7b 0a 09 09 09 09 70 72 69 6e  CTED) {.....prin
2bc0: 74 66 28 22 43 4b 46 5f 57 52 49 54 45 5f 50 52  tf("CKF_WRITE_PR
2bd0: 4f 54 45 43 54 45 44 20 22 29 3b 0a 09 09 09 7d  OTECTED ");....}
2be0: 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e  ....if ((tokenIn
2bf0: 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 4c  fo.flags & CKF_L
2c00: 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 29 20 3d  OGIN_REQUIRED) =
2c10: 3d 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52 45 51 55  = CKF_LOGIN_REQU
2c20: 49 52 45 44 29 20 7b 0a 09 09 09 09 70 72 69 6e  IRED) {.....prin
2c30: 74 66 28 22 43 4b 46 5f 4c 4f 47 49 4e 5f 52 45  tf("CKF_LOGIN_RE
2c40: 51 55 49 52 45 44 20 22 29 3b 0a 09 09 09 7d 0a  QUIRED ");....}.
2c50: 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66  ...if ((tokenInf
2c60: 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 55 53  o.flags & CKF_US
2c70: 45 52 5f 50 49 4e 5f 49 4e 49 54 49 41 4c 49 5a  ER_PIN_INITIALIZ
2c80: 45 44 29 20 3d 3d 20 43 4b 46 5f 55 53 45 52 5f  ED) == CKF_USER_
2c90: 50 49 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29  PIN_INITIALIZED)
2ca0: 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 43   {.....printf("C
2cb0: 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 49 4e 49 54  KF_USER_PIN_INIT
2cc0: 49 41 4c 49 5a 45 44 20 22 29 3b 0a 09 09 09 7d  IALIZED ");....}
2cd0: 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e  ....if ((tokenIn
2ce0: 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 52  fo.flags & CKF_R
2cf0: 45 53 54 4f 52 45 5f 4b 45 59 5f 4e 4f 54 5f 4e  ESTORE_KEY_NOT_N
2d00: 45 45 44 45 44 29 20 3d 3d 20 43 4b 46 5f 52 45  EEDED) == CKF_RE
2d10: 53 54 4f 52 45 5f 4b 45 59 5f 4e 4f 54 5f 4e 45  STORE_KEY_NOT_NE
2d20: 45 44 45 44 29 20 7b 0a 09 09 09 09 70 72 69 6e  EDED) {.....prin
2d30: 74 66 28 22 43 4b 46 5f 52 45 53 54 4f 52 45 5f  tf("CKF_RESTORE_
2d40: 4b 45 59 5f 4e 4f 54 5f 4e 45 45 44 45 44 20 22  KEY_NOT_NEEDED "
2d50: 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28  );....}....if ((
2d60: 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20  tokenInfo.flags 
2d70: 26 20 43 4b 46 5f 43 4c 4f 43 4b 5f 4f 4e 5f 54  & CKF_CLOCK_ON_T
2d80: 4f 4b 45 4e 29 20 3d 3d 20 43 4b 46 5f 43 4c 4f  OKEN) == CKF_CLO
2d90: 43 4b 5f 4f 4e 5f 54 4f 4b 45 4e 29 20 7b 0a 09  CK_ON_TOKEN) {..
2da0: 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 43  ...printf("CKF_C
2db0: 4c 4f 43 4b 5f 4f 4e 5f 54 4f 4b 45 4e 20 22 29  LOCK_ON_TOKEN ")
2dc0: 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28 74  ;....}....if ((t
2dd0: 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26  okenInfo.flags &
2de0: 20 43 4b 46 5f 50 52 4f 54 45 43 54 45 44 5f 41   CKF_PROTECTED_A
2df0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 5f 50 41  UTHENTICATION_PA
2e00: 54 48 29 20 3d 3d 20 43 4b 46 5f 50 52 4f 54 45  TH) == CKF_PROTE
2e10: 43 54 45 44 5f 41 55 54 48 45 4e 54 49 43 41 54  CTED_AUTHENTICAT
2e20: 49 4f 4e 5f 50 41 54 48 29 20 7b 0a 09 09 09 09  ION_PATH) {.....
2e30: 70 72 69 6e 74 66 28 22 43 4b 46 5f 50 52 4f 54  printf("CKF_PROT
2e40: 45 43 54 45 44 5f 41 55 54 48 45 4e 54 49 43 41  ECTED_AUTHENTICA
2e50: 54 49 4f 4e 5f 50 41 54 48 20 22 29 3b 0a 09 09  TION_PATH ");...
2e60: 09 7d 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e  .}....if ((token
2e70: 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46  Info.flags & CKF
2e80: 5f 44 55 41 4c 5f 43 52 59 50 54 4f 5f 4f 50 45  _DUAL_CRYPTO_OPE
2e90: 52 41 54 49 4f 4e 53 29 20 3d 3d 20 43 4b 46 5f  RATIONS) == CKF_
2ea0: 44 55 41 4c 5f 43 52 59 50 54 4f 5f 4f 50 45 52  DUAL_CRYPTO_OPER
2eb0: 41 54 49 4f 4e 53 29 20 7b 0a 09 09 09 09 70 72  ATIONS) {.....pr
2ec0: 69 6e 74 66 28 22 43 4b 46 5f 44 55 41 4c 5f 43  intf("CKF_DUAL_C
2ed0: 52 59 50 54 4f 5f 4f 50 45 52 41 54 49 4f 4e 53  RYPTO_OPERATIONS
2ee0: 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20   ");....}....if 
2ef0: 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67  ((tokenInfo.flag
2f00: 73 20 26 20 43 4b 46 5f 54 4f 4b 45 4e 5f 49 4e  s & CKF_TOKEN_IN
2f10: 49 54 49 41 4c 49 5a 45 44 29 20 3d 3d 20 43 4b  ITIALIZED) == CK
2f20: 46 5f 54 4f 4b 45 4e 5f 49 4e 49 54 49 41 4c 49  F_TOKEN_INITIALI
2f30: 5a 45 44 29 20 7b 0a 09 09 09 09 70 72 69 6e 74  ZED) {.....print
2f40: 66 28 22 43 4b 46 5f 54 4f 4b 45 4e 5f 49 4e 49  f("CKF_TOKEN_INI
2f50: 54 49 41 4c 49 5a 45 44 20 22 29 3b 0a 09 09 09  TIALIZED ");....
2f60: 7d 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49  }....if ((tokenI
2f70: 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f  nfo.flags & CKF_
2f80: 53 45 43 4f 4e 44 41 52 59 5f 41 55 54 48 45 4e  SECONDARY_AUTHEN
2f90: 54 49 43 41 54 49 4f 4e 29 20 3d 3d 20 43 4b 46  TICATION) == CKF
2fa0: 5f 53 45 43 4f 4e 44 41 52 59 5f 41 55 54 48 45  _SECONDARY_AUTHE
2fb0: 4e 54 49 43 41 54 49 4f 4e 29 20 7b 0a 09 09 09  NTICATION) {....
2fc0: 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 53 45 43  .printf("CKF_SEC
2fd0: 4f 4e 44 41 52 59 5f 41 55 54 48 45 4e 54 49 43  ONDARY_AUTHENTIC
2fe0: 41 54 49 4f 4e 20 22 29 3b 0a 09 09 09 7d 0a 09  ATION ");....}..
2ff0: 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66 6f  ..if ((tokenInfo
3000: 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 55 53 45  .flags & CKF_USE
3010: 52 5f 50 49 4e 5f 43 4f 55 4e 54 5f 4c 4f 57 29  R_PIN_COUNT_LOW)
3020: 20 3d 3d 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e   == CKF_USER_PIN
3030: 5f 43 4f 55 4e 54 5f 4c 4f 57 29 20 7b 0a 09 09  _COUNT_LOW) {...
3040: 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 55 53  ..printf("CKF_US
3050: 45 52 5f 50 49 4e 5f 43 4f 55 4e 54 5f 4c 4f 57  ER_PIN_COUNT_LOW
3060: 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20   ");....}....if 
3070: 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67  ((tokenInfo.flag
3080: 73 20 26 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e  s & CKF_USER_PIN
3090: 5f 46 49 4e 41 4c 5f 54 52 59 29 20 3d 3d 20 43  _FINAL_TRY) == C
30a0: 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 46 49 4e 41  KF_USER_PIN_FINA
30b0: 4c 5f 54 52 59 29 20 7b 0a 09 09 09 09 70 72 69  L_TRY) {.....pri
30c0: 6e 74 66 28 22 43 4b 46 5f 55 53 45 52 5f 50 49  ntf("CKF_USER_PI
30d0: 4e 5f 46 49 4e 41 4c 5f 54 52 59 20 22 29 3b 0a  N_FINAL_TRY ");.
30e0: 09 09 09 7d 0a 09 09 09 69 66 20 28 28 74 6f 6b  ...}....if ((tok
30f0: 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43  enInfo.flags & C
3100: 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 4c 4f 43 4b  KF_USER_PIN_LOCK
3110: 45 44 29 20 3d 3d 20 43 4b 46 5f 55 53 45 52 5f  ED) == CKF_USER_
3120: 50 49 4e 5f 4c 4f 43 4b 45 44 29 20 7b 0a 09 09  PIN_LOCKED) {...
3130: 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 55 53  ..printf("CKF_US
3140: 45 52 5f 50 49 4e 5f 4c 4f 43 4b 45 44 20 22 29  ER_PIN_LOCKED ")
3150: 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28 74  ;....}....if ((t
3160: 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26  okenInfo.flags &
3170: 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 54 4f   CKF_USER_PIN_TO
3180: 5f 42 45 5f 43 48 41 4e 47 45 44 29 20 3d 3d 20  _BE_CHANGED) == 
3190: 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 54 4f 5f  CKF_USER_PIN_TO_
31a0: 42 45 5f 43 48 41 4e 47 45 44 29 20 7b 0a 09 09  BE_CHANGED) {...
31b0: 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 55 53  ..printf("CKF_US
31c0: 45 52 5f 50 49 4e 5f 54 4f 5f 42 45 5f 43 48 41  ER_PIN_TO_BE_CHA
31d0: 4e 47 45 44 20 22 29 3b 0a 09 09 09 7d 0a 09 09  NGED ");....}...
31e0: 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e  .if ((tokenInfo.
31f0: 66 6c 61 67 73 20 26 20 43 4b 46 5f 53 4f 5f 50  flags & CKF_SO_P
3200: 49 4e 5f 43 4f 55 4e 54 5f 4c 4f 57 29 20 3d 3d  IN_COUNT_LOW) ==
3210: 20 43 4b 46 5f 53 4f 5f 50 49 4e 5f 43 4f 55 4e   CKF_SO_PIN_COUN
3220: 54 5f 4c 4f 57 29 20 7b 0a 09 09 09 09 70 72 69  T_LOW) {.....pri
3230: 6e 74 66 28 22 43 4b 46 5f 53 4f 5f 50 49 4e 5f  ntf("CKF_SO_PIN_
3240: 43 4f 55 4e 54 5f 4c 4f 57 20 22 29 3b 0a 09 09  COUNT_LOW ");...
3250: 09 7d 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e  .}....if ((token
3260: 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46  Info.flags & CKF
3270: 5f 53 4f 5f 50 49 4e 5f 46 49 4e 41 4c 5f 54 52  _SO_PIN_FINAL_TR
3280: 59 29 20 3d 3d 20 43 4b 46 5f 53 4f 5f 50 49 4e  Y) == CKF_SO_PIN
3290: 5f 46 49 4e 41 4c 5f 54 52 59 29 20 7b 0a 09 09  _FINAL_TRY) {...
32a0: 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 53 4f  ..printf("CKF_SO
32b0: 5f 50 49 4e 5f 46 49 4e 41 4c 5f 54 52 59 20 22  _PIN_FINAL_TRY "
32c0: 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28  );....}....if ((
32d0: 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20  tokenInfo.flags 
32e0: 26 20 43 4b 46 5f 53 4f 5f 50 49 4e 5f 4c 4f 43  & CKF_SO_PIN_LOC
32f0: 4b 45 44 29 20 3d 3d 20 43 4b 46 5f 53 4f 5f 50  KED) == CKF_SO_P
3300: 49 4e 5f 4c 4f 43 4b 45 44 29 20 7b 0a 09 09 09  IN_LOCKED) {....
3310: 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 53 4f 5f  .printf("CKF_SO_
3320: 50 49 4e 5f 4c 4f 43 4b 45 44 20 22 29 3b 0a 09  PIN_LOCKED ");..
3330: 09 09 7d 0a 09 09 09 69 66 20 28 28 74 6f 6b 65  ..}....if ((toke
3340: 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b  nInfo.flags & CK
3350: 46 5f 53 4f 5f 50 49 4e 5f 54 4f 5f 42 45 5f 43  F_SO_PIN_TO_BE_C
3360: 48 41 4e 47 45 44 29 20 3d 3d 20 43 4b 46 5f 53  HANGED) == CKF_S
3370: 4f 5f 50 49 4e 5f 54 4f 5f 42 45 5f 43 48 41 4e  O_PIN_TO_BE_CHAN
3380: 47 45 44 29 20 7b 0a 09 09 09 09 70 72 69 6e 74  GED) {.....print
3390: 66 28 22 43 4b 46 5f 53 4f 5f 50 49 4e 5f 54 4f  f("CKF_SO_PIN_TO
33a0: 5f 42 45 5f 43 48 41 4e 47 45 44 20 22 29 3b 0a  _BE_CHANGED ");.
33b0: 09 09 09 7d 0a 09 09 09 70 72 69 6e 74 66 28 22  ...}....printf("
33c0: 5c 6e 22 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 63  \n");...}..}...c
33d0: 68 6b 5f 72 76 20 3d 20 43 5f 4f 70 65 6e 53 65  hk_rv = C_OpenSe
33e0: 73 73 69 6f 6e 28 73 6c 6f 74 73 5b 30 5d 2c 20  ssion(slots[0], 
33f0: 43 4b 46 5f 53 45 52 49 41 4c 5f 53 45 53 53 49  CKF_SERIAL_SESSI
3400: 4f 4e 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20  ON, NULL, NULL, 
3410: 26 68 53 65 73 73 69 6f 6e 29 3b 0a 09 69 66 20  &hSession);..if 
3420: 28 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f  (chk_rv == CKR_O
3430: 4b 29 20 7b 0a 09 09 69 66 20 28 28 74 6f 6b 65  K) {...if ((toke
3440: 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b  nInfo.flags & CK
3450: 46 5f 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 44  F_LOGIN_REQUIRED
3460: 29 20 3d 3d 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52  ) == CKF_LOGIN_R
3470: 45 51 55 49 52 45 44 29 20 7b 0a 09 09 09 66 67  EQUIRED) {....fg
3480: 65 74 73 5f 72 65 74 20 3d 20 4e 55 4c 4c 3b 0a  ets_ret = NULL;.
3490: 0a 09 09 09 77 68 69 6c 65 20 28 66 67 65 74 73  ....while (fgets
34a0: 5f 72 65 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  _ret == NULL) {.
34b0: 09 09 09 09 70 72 69 6e 74 66 28 22 2a 2a 20 45  ....printf("** E
34c0: 4e 54 45 52 20 50 49 4e 3a 20 22 29 3b 0a 09 09  NTER PIN: ");...
34d0: 09 09 66 66 6c 75 73 68 28 73 74 64 6f 75 74 29  ..fflush(stdout)
34e0: 3b 0a 0a 09 09 09 09 66 67 65 74 73 5f 72 65 74  ;......fgets_ret
34f0: 20 3d 20 66 67 65 74 73 28 28 63 68 61 72 20 2a   = fgets((char *
3500: 29 20 75 73 65 72 5f 70 69 6e 2c 20 73 69 7a 65  ) user_pin, size
3510: 6f 66 28 75 73 65 72 5f 70 69 6e 29 2c 20 73 74  of(user_pin), st
3520: 64 69 6e 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 69  din);....}.....i
3530: 66 20 28 73 74 72 6c 65 6e 28 28 63 68 61 72 20  f (strlen((char 
3540: 2a 29 20 75 73 65 72 5f 70 69 6e 29 20 3e 3d 20  *) user_pin) >= 
3550: 31 29 20 7b 0a 09 09 09 09 77 68 69 6c 65 20 28  1) {.....while (
3560: 75 73 65 72 5f 70 69 6e 5b 73 74 72 6c 65 6e 28  user_pin[strlen(
3570: 28 63 68 61 72 20 2a 29 20 75 73 65 72 5f 70 69  (char *) user_pi
3580: 6e 29 20 2d 20 31 5d 20 3c 20 27 20 27 29 20 7b  n) - 1] < ' ') {
3590: 0a 09 09 09 09 09 75 73 65 72 5f 70 69 6e 5b 73  ......user_pin[s
35a0: 74 72 6c 65 6e 28 28 63 68 61 72 20 2a 29 20 75  trlen((char *) u
35b0: 73 65 72 5f 70 69 6e 29 20 2d 20 31 5d 20 3d 20  ser_pin) - 1] = 
35c0: 27 5c 30 27 3b 0a 09 09 09 09 7d 0a 09 09 09 7d  '\0';.....}....}
35d0: 0a 0a 09 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f  .....chk_rv = C_
35e0: 4c 6f 67 69 6e 28 68 53 65 73 73 69 6f 6e 2c 20  Login(hSession, 
35f0: 43 4b 55 5f 55 53 45 52 2c 20 75 73 65 72 5f 70  CKU_USER, user_p
3600: 69 6e 2c 20 73 74 72 6c 65 6e 28 28 63 68 61 72  in, strlen((char
3610: 20 2a 29 20 75 73 65 72 5f 70 69 6e 29 29 3b 0a   *) user_pin));.
3620: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 63 68  ..} else {....ch
3630: 6b 5f 72 76 20 3d 20 43 5f 4c 6f 67 69 6e 28 68  k_rv = C_Login(h
3640: 53 65 73 73 69 6f 6e 2c 20 43 4b 55 5f 55 53 45  Session, CKU_USE
3650: 52 2c 20 4e 55 4c 4c 2c 20 30 29 3b 0a 09 09 7d  R, NULL, 0);...}
3660: 0a 09 09 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d  ...if (chk_rv ==
3670: 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 70 72   CKR_OK) {....pr
3680: 69 6e 74 66 28 22 4c 6f 67 69 6e 20 74 6f 20 64  intf("Login to d
3690: 65 76 69 63 65 20 73 75 63 63 65 65 64 2e 5c 6e  evice succeed.\n
36a0: 22 29 3b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09  ");...} else {..
36b0: 09 09 70 72 69 6e 74 66 28 22 4c 6f 67 69 6e 20  ..printf("Login 
36c0: 74 6f 20 64 65 76 69 63 65 20 66 61 69 6c 65 64  to device failed
36d0: 2e 5c 6e 22 29 3b 0a 09 09 7d 0a 0a 09 09 63 68  .\n");...}....ch
36e0: 6b 5f 72 76 20 3d 20 43 5f 47 65 74 53 65 73 73  k_rv = C_GetSess
36f0: 69 6f 6e 49 6e 66 6f 28 68 53 65 73 73 69 6f 6e  ionInfo(hSession
3700: 2c 20 26 73 65 73 73 69 6f 6e 49 6e 66 6f 29 3b  , &sessionInfo);
3710: 0a 09 09 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d  ...if (chk_rv ==
3720: 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 70 72   CKR_OK) {....pr
3730: 69 6e 74 66 28 22 53 65 73 73 69 6f 6e 20 49 6e  intf("Session In
3740: 66 6f 3a 5c 6e 22 29 3b 0a 09 09 09 70 72 69 6e  fo:\n");....prin
3750: 74 66 28 22 20 20 53 6c 6f 74 20 49 44 3a 20 25  tf("  Slot ID: %
3760: 6c 75 5c 6e 22 2c 20 28 75 6e 73 69 67 6e 65 64  lu\n", (unsigned
3770: 20 6c 6f 6e 67 29 20 73 65 73 73 69 6f 6e 49 6e   long) sessionIn
3780: 66 6f 2e 73 6c 6f 74 49 44 29 3b 0a 09 09 09 70  fo.slotID);....p
3790: 72 69 6e 74 66 28 22 20 20 44 65 76 20 45 72 72  rintf("  Dev Err
37a0: 3a 20 25 6c 75 5c 6e 22 2c 20 28 75 6e 73 69 67  : %lu\n", (unsig
37b0: 6e 65 64 20 6c 6f 6e 67 29 20 73 65 73 73 69 6f  ned long) sessio
37c0: 6e 49 6e 66 6f 2e 75 6c 44 65 76 69 63 65 45 72  nInfo.ulDeviceEr
37d0: 72 6f 72 29 3b 0a 0a 09 09 09 70 72 69 6e 74 66  ror);.....printf
37e0: 28 22 20 20 53 74 61 74 65 20 20 3a 20 22 29 3b  ("  State  : ");
37f0: 0a 09 09 09 69 66 20 28 73 65 73 73 69 6f 6e 49  ....if (sessionI
3800: 6e 66 6f 2e 73 74 61 74 65 20 3d 3d 20 43 4b 53  nfo.state == CKS
3810: 5f 52 4f 5f 50 55 42 4c 49 43 5f 53 45 53 53 49  _RO_PUBLIC_SESSI
3820: 4f 4e 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66  ON) {.....printf
3830: 28 22 43 4b 53 5f 52 4f 5f 50 55 42 4c 49 43 5f  ("CKS_RO_PUBLIC_
3840: 53 45 53 53 49 4f 4e 5c 6e 22 29 3b 0a 09 09 09  SESSION\n");....
3850: 7d 20 65 6c 73 65 20 69 66 20 28 73 65 73 73 69  } else if (sessi
3860: 6f 6e 49 6e 66 6f 2e 73 74 61 74 65 20 3d 3d 20  onInfo.state == 
3870: 43 4b 53 5f 52 4f 5f 55 53 45 52 5f 46 55 4e 43  CKS_RO_USER_FUNC
3880: 54 49 4f 4e 53 29 20 7b 0a 09 09 09 09 70 72 69  TIONS) {.....pri
3890: 6e 74 66 28 22 43 4b 53 5f 52 4f 5f 55 53 45 52  ntf("CKS_RO_USER
38a0: 5f 46 55 4e 43 54 49 4f 4e 53 5c 6e 22 29 3b 0a  _FUNCTIONS\n");.
38b0: 09 09 09 7d 20 65 6c 73 65 20 69 66 20 28 73 65  ...} else if (se
38c0: 73 73 69 6f 6e 49 6e 66 6f 2e 73 74 61 74 65 20  ssionInfo.state 
38d0: 3d 3d 20 43 4b 53 5f 52 57 5f 50 55 42 4c 49 43  == CKS_RW_PUBLIC
38e0: 5f 53 45 53 53 49 4f 4e 29 20 7b 0a 09 09 09 09  _SESSION) {.....
38f0: 70 72 69 6e 74 66 28 22 43 4b 53 5f 52 57 5f 50  printf("CKS_RW_P
3900: 55 42 4c 49 43 5f 53 45 53 53 49 4f 4e 5c 6e 22  UBLIC_SESSION\n"
3910: 29 3b 0a 09 09 09 7d 20 65 6c 73 65 20 69 66 20  );....} else if 
3920: 28 73 65 73 73 69 6f 6e 49 6e 66 6f 2e 73 74 61  (sessionInfo.sta
3930: 74 65 20 3d 3d 20 43 4b 53 5f 52 57 5f 55 53 45  te == CKS_RW_USE
3940: 52 5f 46 55 4e 43 54 49 4f 4e 53 29 20 7b 0a 09  R_FUNCTIONS) {..
3950: 09 09 09 70 72 69 6e 74 66 28 22 43 4b 53 5f 52  ...printf("CKS_R
3960: 57 5f 55 53 45 52 5f 46 55 4e 43 54 49 4f 4e 53  W_USER_FUNCTIONS
3970: 5c 6e 22 29 3b 0a 09 09 09 7d 20 65 6c 73 65 20  \n");....} else 
3980: 69 66 20 28 73 65 73 73 69 6f 6e 49 6e 66 6f 2e  if (sessionInfo.
3990: 73 74 61 74 65 20 3d 3d 20 43 4b 53 5f 52 4f 5f  state == CKS_RO_
39a0: 50 55 42 4c 49 43 5f 53 45 53 53 49 4f 4e 29 20  PUBLIC_SESSION) 
39b0: 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b  {.....printf("CK
39c0: 53 5f 52 57 5f 53 4f 5f 46 55 4e 43 54 49 4f 4e  S_RW_SO_FUNCTION
39d0: 53 5c 6e 22 29 3b 0a 09 09 09 7d 20 65 6c 73 65  S\n");....} else
39e0: 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 55   {.....printf("U
39f0: 6e 6b 6e 6f 77 6e 20 28 25 6c 75 29 22 2c 20 28  nknown (%lu)", (
3a00: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73  unsigned long) s
3a10: 65 73 73 69 6f 6e 49 6e 66 6f 2e 73 74 61 74 65  essionInfo.state
3a20: 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 70 72 69 6e  );....}.....prin
3a30: 74 66 28 22 20 20 46 6c 61 67 73 20 20 3a 20 22  tf("  Flags  : "
3a40: 29 3b 0a 09 09 09 69 66 20 28 28 73 65 73 73 69  );....if ((sessi
3a50: 6f 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43  onInfo.flags & C
3a60: 4b 46 5f 52 57 5f 53 45 53 53 49 4f 4e 29 20 3d  KF_RW_SESSION) =
3a70: 3d 20 43 4b 46 5f 52 57 5f 53 45 53 53 49 4f 4e  = CKF_RW_SESSION
3a80: 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22  ) {.....printf("
3a90: 43 4b 46 5f 52 57 5f 53 45 53 53 49 4f 4e 20 22  CKF_RW_SESSION "
3aa0: 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28  );....}....if ((
3ab0: 73 65 73 73 69 6f 6e 49 6e 66 6f 2e 66 6c 61 67  sessionInfo.flag
3ac0: 73 20 26 20 43 4b 46 5f 53 45 52 49 41 4c 5f 53  s & CKF_SERIAL_S
3ad0: 45 53 53 49 4f 4e 29 20 3d 3d 20 43 4b 46 5f 53  ESSION) == CKF_S
3ae0: 45 52 49 41 4c 5f 53 45 53 53 49 4f 4e 29 20 7b  ERIAL_SESSION) {
3af0: 0a 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46  .....printf("CKF
3b00: 5f 53 45 52 49 41 4c 5f 53 45 53 53 49 4f 4e 20  _SERIAL_SESSION 
3b10: 22 29 3b 0a 09 09 09 7d 0a 09 09 09 70 72 69 6e  ");....}....prin
3b20: 74 66 28 22 5c 6e 22 29 3b 0a 09 09 7d 20 65 6c  tf("\n");...} el
3b30: 73 65 20 7b 0a 09 09 09 70 72 69 6e 74 66 28 22  se {....printf("
3b40: 47 65 74 53 65 73 73 69 6f 6e 49 6e 66 6f 28 29  GetSessionInfo()
3b50: 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09   failed.\n");...
3b60: 7d 0a 0a 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f  }....chk_rv = C_
3b70: 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 28  FindObjectsInit(
3b80: 68 53 65 73 73 69 6f 6e 2c 20 4e 55 4c 4c 2c 20  hSession, NULL, 
3b90: 30 29 3b 0a 09 09 69 66 20 28 63 68 6b 5f 72 76  0);...if (chk_rv
3ba0: 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09   == CKR_OK) {...
3bb0: 09 77 68 69 6c 65 20 28 31 29 20 7b 0a 09 09 09  .while (1) {....
3bc0: 09 63 68 6b 5f 72 76 20 3d 20 43 5f 46 69 6e 64  .chk_rv = C_Find
3bd0: 4f 62 6a 65 63 74 73 28 68 53 65 73 73 69 6f 6e  Objects(hSession
3be0: 2c 20 26 68 4f 62 6a 65 63 74 2c 20 31 2c 20 26  , &hObject, 1, &
3bf0: 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 29 3b 0a  ulObjectCount);.
3c00: 09 09 09 09 69 66 20 28 63 68 6b 5f 72 76 20 21  ....if (chk_rv !
3c10: 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09  = CKR_OK) {.....
3c20: 09 70 72 69 6e 74 66 28 22 46 69 6e 64 4f 62 6a  .printf("FindObj
3c30: 65 63 74 73 28 29 20 66 61 69 6c 65 64 2e 5c 6e  ects() failed.\n
3c40: 22 29 3b 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a  ");......break;.
3c50: 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 75  ....}......if (u
3c60: 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 3d 20  lObjectCount == 
3c70: 30 29 20 7b 0a 09 09 09 09 09 62 72 65 61 6b 3b  0) {......break;
3c80: 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28  .....}......if (
3c90: 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 21 3d  ulObjectCount !=
3ca0: 20 31 29 20 7b 0a 09 09 09 09 09 70 72 69 6e 74   1) {......print
3cb0: 66 28 22 46 69 6e 64 4f 62 6a 65 63 74 73 28 29  f("FindObjects()
3cc0: 20 72 65 74 75 72 6e 65 64 20 61 20 77 65 69 72   returned a weir
3cd0: 64 20 6e 75 6d 62 65 72 20 6f 66 20 6f 62 6a 65  d number of obje
3ce0: 63 74 73 2e 20 20 41 73 6b 65 64 20 66 6f 72 20  cts.  Asked for 
3cf0: 31 2c 20 67 6f 74 20 25 6c 75 2e 5c 6e 22 2c 20  1, got %lu.\n", 
3d00: 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 29 3b 0a  ulObjectCount);.
3d10: 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09  .....break;.....
3d20: 7d 0a 0a 09 09 09 09 70 72 69 6e 74 66 28 22 20  }......printf(" 
3d30: 20 4f 62 6a 65 63 74 20 49 6e 66 6f 20 28 6f 62   Object Info (ob
3d40: 6a 65 63 74 20 25 6c 75 29 3a 5c 6e 22 2c 20 28  ject %lu):\n", (
3d50: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68  unsigned long) h
3d60: 4f 62 6a 65 63 74 29 3b 0a 0a 09 09 09 09 66 6f  Object);......fo
3d70: 72 20 28 63 75 72 72 5f 61 74 74 72 5f 69 64 78  r (curr_attr_idx
3d80: 20 3d 20 30 3b 20 63 75 72 72 5f 61 74 74 72 5f   = 0; curr_attr_
3d90: 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 74 65  idx < (sizeof(te
3da0: 6d 70 6c 61 74 65 29 20 2f 20 73 69 7a 65 6f 66  mplate) / sizeof
3db0: 28 74 65 6d 70 6c 61 74 65 5b 30 5d 29 29 3b 20  (template[0])); 
3dc0: 63 75 72 72 5f 61 74 74 72 5f 69 64 78 2b 2b 29  curr_attr_idx++)
3dd0: 20 7b 0a 09 09 09 09 09 63 75 72 72 5f 61 74 74   {......curr_att
3de0: 72 20 3d 20 26 74 65 6d 70 6c 61 74 65 5b 63 75  r = &template[cu
3df0: 72 72 5f 61 74 74 72 5f 69 64 78 5d 3b 0a 09 09  rr_attr_idx];...
3e00: 09 09 09 69 66 20 28 63 75 72 72 5f 61 74 74 72  ...if (curr_attr
3e10: 2d 3e 70 56 61 6c 75 65 29 20 7b 0a 09 09 09 09  ->pValue) {.....
3e20: 09 09 66 72 65 65 28 63 75 72 72 5f 61 74 74 72  ..free(curr_attr
3e30: 2d 3e 70 56 61 6c 75 65 29 3b 0a 09 09 09 09 09  ->pValue);......
3e40: 7d 0a 0a 09 09 09 09 09 63 75 72 72 5f 61 74 74  }.......curr_att
3e50: 72 2d 3e 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c  r->pValue = NULL
3e60: 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 63 68 6b  ;.....}......chk
3e70: 5f 72 76 20 3d 20 43 5f 47 65 74 41 74 74 72 69  _rv = C_GetAttri
3e80: 62 75 74 65 56 61 6c 75 65 28 68 53 65 73 73 69  buteValue(hSessi
3e90: 6f 6e 2c 20 68 4f 62 6a 65 63 74 2c 20 26 74 65  on, hObject, &te
3ea0: 6d 70 6c 61 74 65 5b 30 5d 2c 20 73 69 7a 65 6f  mplate[0], sizeo
3eb0: 66 28 74 65 6d 70 6c 61 74 65 29 20 2f 20 73 69  f(template) / si
3ec0: 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65 5b 30 5d  zeof(template[0]
3ed0: 29 29 3b 0a 09 09 09 09 69 66 20 28 63 68 6b 5f  ));.....if (chk_
3ee0: 72 76 20 3d 3d 20 43 4b 52 5f 41 54 54 52 49 42  rv == CKR_ATTRIB
3ef0: 55 54 45 5f 54 59 50 45 5f 49 4e 56 41 4c 49 44  UTE_TYPE_INVALID
3f00: 20 7c 7c 20 63 68 6b 5f 72 76 20 3d 3d 20 43 4b   || chk_rv == CK
3f10: 52 5f 41 54 54 52 49 42 55 54 45 5f 53 45 4e 53  R_ATTRIBUTE_SENS
3f20: 49 54 49 56 45 20 7c 7c 20 63 68 6b 5f 72 76 20  ITIVE || chk_rv 
3f30: 3d 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f  == CKR_BUFFER_TO
3f40: 4f 5f 53 4d 41 4c 4c 29 20 7b 0a 09 09 09 09 09  O_SMALL) {......
3f50: 63 68 6b 5f 72 76 20 3d 20 43 4b 52 5f 4f 4b 3b  chk_rv = CKR_OK;
3f60: 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28  .....}......if (
3f70: 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b  chk_rv == CKR_OK
3f80: 29 20 7b 0a 09 09 09 09 09 66 6f 72 20 28 63 75  ) {......for (cu
3f90: 72 72 5f 61 74 74 72 5f 69 64 78 20 3d 20 30 3b  rr_attr_idx = 0;
3fa0: 20 63 75 72 72 5f 61 74 74 72 5f 69 64 78 20 3c   curr_attr_idx <
3fb0: 20 28 73 69 7a 65 6f 66 28 74 65 6d 70 6c 61 74   (sizeof(templat
3fc0: 65 29 20 2f 20 73 69 7a 65 6f 66 28 74 65 6d 70  e) / sizeof(temp
3fd0: 6c 61 74 65 5b 30 5d 29 29 3b 20 63 75 72 72 5f  late[0])); curr_
3fe0: 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09  attr_idx++) {...
3ff0: 09 09 09 09 63 75 72 72 5f 61 74 74 72 20 3d 20  ....curr_attr = 
4000: 26 74 65 6d 70 6c 61 74 65 5b 63 75 72 72 5f 61  &template[curr_a
4010: 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 09 09 09  ttr_idx];.......
4020: 09 69 66 20 28 28 28 43 4b 5f 4c 4f 4e 47 29 20  .if (((CK_LONG) 
4030: 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c  curr_attr->ulVal
4040: 75 65 4c 65 6e 29 20 21 3d 20 28 28 43 4b 5f 4c  ueLen) != ((CK_L
4050: 4f 4e 47 29 20 2d 31 29 29 20 7b 0a 09 09 09 09  ONG) -1)) {.....
4060: 09 09 09 63 75 72 72 5f 61 74 74 72 2d 3e 70 56  ...curr_attr->pV
4070: 61 6c 75 65 20 3d 20 6d 61 6c 6c 6f 63 28 63 75  alue = malloc(cu
4080: 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65  rr_attr->ulValue
4090: 4c 65 6e 29 3b 0a 09 09 09 09 09 09 7d 0a 09 09  Len);.......}...
40a0: 09 09 09 7d 0a 0a 09 09 09 09 09 63 68 6b 5f 72  ...}.......chk_r
40b0: 76 20 3d 20 43 5f 47 65 74 41 74 74 72 69 62 75  v = C_GetAttribu
40c0: 74 65 56 61 6c 75 65 28 68 53 65 73 73 69 6f 6e  teValue(hSession
40d0: 2c 20 68 4f 62 6a 65 63 74 2c 20 26 74 65 6d 70  , hObject, &temp
40e0: 6c 61 74 65 5b 30 5d 2c 20 73 69 7a 65 6f 66 28  late[0], sizeof(
40f0: 74 65 6d 70 6c 61 74 65 29 20 2f 20 73 69 7a 65  template) / size
4100: 6f 66 28 74 65 6d 70 6c 61 74 65 5b 30 5d 29 29  of(template[0]))
4110: 3b 0a 09 09 09 09 09 69 66 20 28 63 68 6b 5f 72  ;......if (chk_r
4120: 76 20 3d 3d 20 43 4b 52 5f 4f 4b 20 7c 7c 20 63  v == CKR_OK || c
4130: 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 41 54 54  hk_rv == CKR_ATT
4140: 52 49 42 55 54 45 5f 53 45 4e 53 49 54 49 56 45  RIBUTE_SENSITIVE
4150: 20 7c 7c 20 63 68 6b 5f 72 76 20 3d 3d 20 43 4b   || chk_rv == CK
4160: 52 5f 41 54 54 52 49 42 55 54 45 5f 54 59 50 45  R_ATTRIBUTE_TYPE
4170: 5f 49 4e 56 41 4c 49 44 20 7c 7c 20 63 68 6b 5f  _INVALID || chk_
4180: 72 76 20 3d 3d 20 43 4b 52 5f 42 55 46 46 45 52  rv == CKR_BUFFER
4190: 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a 09 09  _TOO_SMALL) {...
41a0: 09 09 09 09 66 6f 72 20 28 63 75 72 72 5f 61 74  ....for (curr_at
41b0: 74 72 5f 69 64 78 20 3d 20 30 3b 20 63 75 72 72  tr_idx = 0; curr
41c0: 5f 61 74 74 72 5f 69 64 78 20 3c 20 28 73 69 7a  _attr_idx < (siz
41d0: 65 6f 66 28 74 65 6d 70 6c 61 74 65 29 20 2f 20  eof(template) / 
41e0: 73 69 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65 5b  sizeof(template[
41f0: 30 5d 29 29 3b 20 63 75 72 72 5f 61 74 74 72 5f  0])); curr_attr_
4200: 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09 09 09  idx++) {........
4210: 63 75 72 72 5f 61 74 74 72 20 3d 20 26 74 65 6d  curr_attr = &tem
4220: 70 6c 61 74 65 5b 63 75 72 72 5f 61 74 74 72 5f  plate[curr_attr_
4230: 69 64 78 5d 3b 0a 0a 09 09 09 09 09 09 09 69 66  idx];.........if
4240: 20 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61   (curr_attr->pVa
4250: 6c 75 65 29 20 7b 0a 09 09 09 09 09 09 09 09 73  lue) {.........s
4260: 77 69 74 63 68 20 28 63 75 72 72 5f 61 74 74 72  witch (curr_attr
4270: 2d 3e 74 79 70 65 29 20 7b 0a 09 09 09 09 09 09  ->type) {.......
4280: 09 09 09 63 61 73 65 20 43 4b 41 5f 4c 41 42 45  ...case CKA_LABE
4290: 4c 3a 0a 09 09 09 09 09 09 09 09 09 09 70 72 69  L:...........pri
42a0: 6e 74 66 28 22 20 20 20 20 5b 25 6c 75 5d 20 25  ntf("    [%lu] %
42b0: 32 30 73 3a 20 25 2e 2a 73 5c 6e 22 2c 20 68 4f  20s: %.*s\n", hO
42c0: 62 6a 65 63 74 2c 20 70 6b 63 73 31 31 5f 61 74  bject, pkcs11_at
42d0: 74 72 69 62 75 74 65 5f 74 6f 5f 6e 61 6d 65 28  tribute_to_name(
42e0: 63 75 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 29  curr_attr->type)
42f0: 2c 20 28 69 6e 74 29 20 63 75 72 72 5f 61 74 74  , (int) curr_att
4300: 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 2c 20 28  r->ulValueLen, (
4310: 63 68 61 72 20 2a 29 20 63 75 72 72 5f 61 74 74  char *) curr_att
4320: 72 2d 3e 70 56 61 6c 75 65 29 3b 0a 09 09 09 09  r->pValue);.....
4330: 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ......break;....
4340: 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 43  ......case CKA_C
4350: 4c 41 53 53 3a 0a 09 09 09 09 09 09 09 09 09 09  LASS:...........
4360: 6f 62 6a 65 63 74 43 6c 61 73 73 20 3d 20 2a 28  objectClass = *(
4370: 28 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 53  (CK_OBJECT_CLASS
4380: 20 2a 29 20 63 75 72 72 5f 61 74 74 72 2d 3e 70   *) curr_attr->p
4390: 56 61 6c 75 65 29 3b 0a 0a 09 09 09 09 09 09 09  Value);.........
43a0: 09 09 09 69 66 20 28 6f 62 6a 65 63 74 43 6c 61  ...if (objectCla
43b0: 73 73 20 3d 3d 20 43 4b 4f 5f 50 52 49 56 41 54  ss == CKO_PRIVAT
43c0: 45 5f 4b 45 59 29 20 7b 0a 09 09 09 09 09 09 09  E_KEY) {........
43d0: 09 09 09 09 2a 70 72 69 76 61 74 65 4b 65 79 4f  ....*privateKeyO
43e0: 62 6a 65 63 74 73 20 3d 20 68 4f 62 6a 65 63 74  bjects = hObject
43f0: 3b 0a 09 09 09 09 09 09 09 09 09 09 09 70 72 69  ;............pri
4400: 76 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 2b 2b  vateKeyObjects++
4410: 3b 0a 09 09 09 09 09 09 09 09 09 09 7d 0a 09 09  ;...........}...
4420: 09 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f  .......case CKA_
4430: 54 4f 4b 45 4e 3a 0a 09 09 09 09 09 09 09 09 09  TOKEN:..........
4440: 63 61 73 65 20 43 4b 41 5f 49 44 3a 0a 09 09 09  case CKA_ID:....
4450: 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 53  ......case CKA_S
4460: 45 52 49 41 4c 5f 4e 55 4d 42 45 52 3a 0a 09 09  ERIAL_NUMBER:...
4470: 09 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f  .......case CKA_
4480: 50 52 49 56 41 54 45 3a 0a 09 09 09 09 09 09 09  PRIVATE:........
4490: 09 09 63 61 73 65 20 43 4b 41 5f 43 45 52 54 49  ..case CKA_CERTI
44a0: 46 49 43 41 54 45 5f 54 59 50 45 3a 0a 09 09 09  FICATE_TYPE:....
44b0: 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 4b  ......case CKA_K
44c0: 45 59 5f 54 59 50 45 3a 0a 09 09 09 09 09 09 09  EY_TYPE:........
44d0: 09 09 63 61 73 65 20 43 4b 41 5f 53 49 47 4e 3a  ..case CKA_SIGN:
44e0: 0a 09 09 09 09 09 09 09 09 09 63 61 73 65 20 43  ..........case C
44f0: 4b 41 5f 44 45 43 52 59 50 54 3a 0a 09 09 09 09  KA_DECRYPT:.....
4500: 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52  .....case CKA_TR
4510: 55 53 54 45 44 3a 0a 09 09 09 09 09 09 09 09 09  USTED:..........
4520: 63 61 73 65 20 43 4b 41 5f 43 45 52 54 5f 4d 44  case CKA_CERT_MD
4530: 35 5f 48 41 53 48 3a 0a 09 09 09 09 09 09 09 09  5_HASH:.........
4540: 09 63 61 73 65 20 43 4b 41 5f 43 45 52 54 5f 53  .case CKA_CERT_S
4550: 48 41 31 5f 48 41 53 48 3a 0a 0a 09 09 09 09 09  HA1_HASH:.......
4560: 09 09 09 09 09 70 75 63 56 61 6c 75 65 20 3d 20  .....pucValue = 
4570: 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75  curr_attr->pValu
4580: 65 3b 0a 0a 09 09 09 09 09 09 09 09 09 09 70 72  e;............pr
4590: 69 6e 74 66 28 22 20 20 20 20 5b 25 6c 75 5d 20  intf("    [%lu] 
45a0: 25 32 30 73 3a 20 22 2c 20 68 4f 62 6a 65 63 74  %20s: ", hObject
45b0: 2c 20 70 6b 63 73 31 31 5f 61 74 74 72 69 62 75  , pkcs11_attribu
45c0: 74 65 5f 74 6f 5f 6e 61 6d 65 28 63 75 72 72 5f  te_to_name(curr_
45d0: 61 74 74 72 2d 3e 74 79 70 65 29 29 3b 0a 0a 09  attr->type));...
45e0: 09 09 09 09 09 09 09 09 09 66 6f 72 20 28 62 79  .........for (by
45f0: 74 65 5f 69 64 78 20 3d 20 30 3b 20 62 79 74 65  te_idx = 0; byte
4600: 5f 69 64 78 20 3c 20 63 75 72 72 5f 61 74 74 72  _idx < curr_attr
4610: 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 3b 20 62 79  ->ulValueLen; by
4620: 74 65 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09  te_idx++) {.....
4630: 09 09 09 09 09 09 09 70 72 69 6e 74 66 28 22 25  .......printf("%
4640: 30 32 78 20 22 2c 20 28 75 6e 73 69 67 6e 65 64  02x ", (unsigned
4650: 20 69 6e 74 29 20 70 75 63 56 61 6c 75 65 5b 62   int) pucValue[b
4660: 79 74 65 5f 69 64 78 5d 29 3b 0a 09 09 09 09 09  yte_idx]);......
4670: 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 09 09 09  .....}..........
4680: 09 09 70 72 69 6e 74 66 28 22 3b 3b 20 25 70 2f  ..printf(";; %p/
4690: 25 6c 75 5c 6e 22 2c 20 63 75 72 72 5f 61 74 74  %lu\n", curr_att
46a0: 72 2d 3e 70 56 61 6c 75 65 2c 20 63 75 72 72 5f  r->pValue, curr_
46b0: 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e  attr->ulValueLen
46c0: 29 3b 0a 0a 09 09 09 09 09 09 09 09 09 09 62 72  );............br
46d0: 65 61 6b 3b 0a 09 09 09 09 09 09 09 09 09 63 61  eak;..........ca
46e0: 73 65 20 43 4b 41 5f 53 55 42 4a 45 43 54 3a 0a  se CKA_SUBJECT:.
46f0: 09 09 09 09 09 09 09 09 09 63 61 73 65 20 43 4b  .........case CK
4700: 41 5f 49 53 53 55 45 52 3a 0a 09 09 09 09 09 09  A_ISSUER:.......
4710: 09 09 09 09 70 75 63 56 61 6c 75 65 20 3d 20 63  ....pucValue = c
4720: 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65  urr_attr->pValue
4730: 3b 0a 0a 09 09 09 09 09 09 09 09 09 09 70 72 69  ;............pri
4740: 6e 74 66 28 22 20 20 20 20 5b 25 6c 75 5d 20 25  ntf("    [%lu] %
4750: 32 30 73 3a 20 22 2c 20 68 4f 62 6a 65 63 74 2c  20s: ", hObject,
4760: 20 70 6b 63 73 31 31 5f 61 74 74 72 69 62 75 74   pkcs11_attribut
4770: 65 5f 74 6f 5f 6e 61 6d 65 28 63 75 72 72 5f 61  e_to_name(curr_a
4780: 74 74 72 2d 3e 74 79 70 65 29 29 3b 0a 0a 09 09  ttr->type));....
4790: 09 09 09 09 09 09 09 09 66 6f 72 20 28 62 79 74  ........for (byt
47a0: 65 5f 69 64 78 20 3d 20 30 3b 20 62 79 74 65 5f  e_idx = 0; byte_
47b0: 69 64 78 20 3c 20 63 75 72 72 5f 61 74 74 72 2d  idx < curr_attr-
47c0: 3e 75 6c 56 61 6c 75 65 4c 65 6e 3b 20 62 79 74  >ulValueLen; byt
47d0: 65 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09  e_idx++) {......
47e0: 09 09 09 09 09 09 70 72 69 6e 74 66 28 22 5c 5c  ......printf("\\
47f0: 78 25 30 32 78 22 2c 20 28 75 6e 73 69 67 6e 65  x%02x", (unsigne
4800: 64 20 69 6e 74 29 20 70 75 63 56 61 6c 75 65 5b  d int) pucValue[
4810: 62 79 74 65 5f 69 64 78 5d 29 3b 0a 09 09 09 09  byte_idx]);.....
4820: 09 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 09 09  ......}.........
4830: 09 09 09 70 72 69 6e 74 66 28 22 20 3b 3b 20 25  ...printf(" ;; %
4840: 70 2f 25 6c 75 5c 6e 22 2c 20 63 75 72 72 5f 61  p/%lu\n", curr_a
4850: 74 74 72 2d 3e 70 56 61 6c 75 65 2c 20 63 75 72  ttr->pValue, cur
4860: 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c  r_attr->ulValueL
4870: 65 6e 29 3b 0a 0a 09 09 09 09 09 09 09 09 09 09  en);............
4880: 62 72 65 61 6b 3b 0a 09 09 09 09 09 09 09 09 09  break;..........
4890: 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 43  case CKA_TRUST_C
48a0: 4c 49 45 4e 54 5f 41 55 54 48 3a 0a 09 09 09 09  LIENT_AUTH:.....
48b0: 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52  .....case CKA_TR
48c0: 55 53 54 5f 43 4f 44 45 5f 53 49 47 4e 49 4e 47  UST_CODE_SIGNING
48d0: 3a 0a 09 09 09 09 09 09 09 09 09 63 61 73 65 20  :..........case 
48e0: 43 4b 41 5f 54 52 55 53 54 5f 43 52 4c 5f 53 49  CKA_TRUST_CRL_SI
48f0: 47 4e 3a 0a 09 09 09 09 09 09 09 09 09 63 61 73  GN:..........cas
4900: 65 20 43 4b 41 5f 54 52 55 53 54 5f 44 41 54 41  e CKA_TRUST_DATA
4910: 5f 45 4e 43 49 50 48 45 52 4d 45 4e 54 3a 0a 09  _ENCIPHERMENT:..
4920: 09 09 09 09 09 09 09 09 63 61 73 65 20 43 4b 41  ........case CKA
4930: 5f 54 52 55 53 54 5f 44 49 47 49 54 41 4c 5f 53  _TRUST_DIGITAL_S
4940: 49 47 4e 41 54 55 52 45 3a 0a 09 09 09 09 09 09  IGNATURE:.......
4950: 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53  ...case CKA_TRUS
4960: 54 5f 45 4d 41 49 4c 5f 50 52 4f 54 45 43 54 49  T_EMAIL_PROTECTI
4970: 4f 4e 3a 0a 09 09 09 09 09 09 09 09 09 63 61 73  ON:..........cas
4980: 65 20 43 4b 41 5f 54 52 55 53 54 5f 4b 45 59 5f  e CKA_TRUST_KEY_
4990: 41 47 52 45 45 4d 45 4e 54 3a 0a 09 09 09 09 09  AGREEMENT:......
49a0: 09 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55  ....case CKA_TRU
49b0: 53 54 5f 4b 45 59 5f 43 45 52 54 5f 53 49 47 4e  ST_KEY_CERT_SIGN
49c0: 3a 0a 09 09 09 09 09 09 09 09 09 63 61 73 65 20  :..........case 
49d0: 43 4b 41 5f 54 52 55 53 54 5f 4b 45 59 5f 45 4e  CKA_TRUST_KEY_EN
49e0: 43 49 50 48 45 52 4d 45 4e 54 3a 0a 09 09 09 09  CIPHERMENT:.....
49f0: 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52  .....case CKA_TR
4a00: 55 53 54 5f 4e 4f 4e 5f 52 45 50 55 44 49 41 54  UST_NON_REPUDIAT
4a10: 49 4f 4e 3a 0a 09 09 09 09 09 09 09 09 09 63 61  ION:..........ca
4a20: 73 65 20 43 4b 41 5f 54 52 55 53 54 5f 53 45 52  se CKA_TRUST_SER
4a30: 56 45 52 5f 41 55 54 48 3a 0a 09 09 09 09 09 09  VER_AUTH:.......
4a40: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09  ....break;......
4a50: 09 09 09 09 64 65 66 61 75 6c 74 3a 0a 09 09 09  ....default:....
4a60: 09 09 09 09 09 09 09 70 72 69 6e 74 66 28 22 20  .......printf(" 
4a70: 20 20 20 5b 25 6c 75 5d 20 25 32 30 73 3a 20 25     [%lu] %20s: %
4a80: 70 2f 25 6c 75 5c 6e 22 2c 20 68 4f 62 6a 65 63  p/%lu\n", hObjec
4a90: 74 2c 20 70 6b 63 73 31 31 5f 61 74 74 72 69 62  t, pkcs11_attrib
4aa0: 75 74 65 5f 74 6f 5f 6e 61 6d 65 28 63 75 72 72  ute_to_name(curr
4ab0: 5f 61 74 74 72 2d 3e 74 79 70 65 29 2c 20 63 75  _attr->type), cu
4ac0: 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 2c  rr_attr->pValue,
4ad0: 20 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61   curr_attr->ulVa
4ae0: 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 09 09  lueLen);........
4af0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09  ....break;......
4b00: 09 09 09 7d 0a 09 09 09 09 09 09 09 7d 20 65 6c  ...}........} el
4b10: 73 65 20 7b 0a 09 09 09 09 09 09 09 09 70 72 69  se {.........pri
4b20: 6e 74 66 28 22 20 20 20 20 5b 25 6c 75 5d 20 25  ntf("    [%lu] %
4b30: 32 30 73 3a 20 28 6e 6f 74 20 66 6f 75 6e 64 29  20s: (not found)
4b40: 5c 6e 22 2c 20 68 4f 62 6a 65 63 74 2c 20 70 6b  \n", hObject, pk
4b50: 63 73 31 31 5f 61 74 74 72 69 62 75 74 65 5f 74  cs11_attribute_t
4b60: 6f 5f 6e 61 6d 65 28 63 75 72 72 5f 61 74 74 72  o_name(curr_attr
4b70: 2d 3e 74 79 70 65 29 29 3b 0a 09 09 09 09 09 09  ->type));.......
4b80: 09 7d 0a 0a 09 09 09 09 09 09 09 66 72 65 65 28  .}.........free(
4b90: 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75  curr_attr->pValu
4ba0: 65 29 3b 0a 09 09 09 09 09 09 09 63 75 72 72 5f  e);........curr_
4bb0: 61 74 74 72 2d 3e 70 56 61 6c 75 65 20 3d 20 4e  attr->pValue = N
4bc0: 55 4c 4c 3b 0a 09 09 09 09 09 09 7d 0a 09 09 09  ULL;.......}....
4bd0: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09  ..} else {......
4be0: 09 70 72 69 6e 74 66 28 22 47 65 74 41 74 74 72  .printf("GetAttr
4bf0: 69 62 75 74 65 56 61 6c 75 65 28 29 2f 32 20 66  ibuteValue()/2 f
4c00: 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09 09 09  ailed.\n");.....
4c10: 09 7d 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a  .}.....} else {.
4c20: 09 09 09 09 09 70 72 69 6e 74 66 28 22 47 65 74  .....printf("Get
4c30: 41 74 74 72 69 62 75 74 65 56 61 6c 75 65 28 68  AttributeValue(h
4c40: 4f 62 6a 65 63 74 3d 25 6c 75 29 2f 31 20 66 61  Object=%lu)/1 fa
4c50: 69 6c 65 64 20 28 72 76 20 3d 20 25 6c 75 29 2e  iled (rv = %lu).
4c60: 5c 6e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c  \n", (unsigned l
4c70: 6f 6e 67 29 20 68 4f 62 6a 65 63 74 2c 20 28 75  ong) hObject, (u
4c80: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 68  nsigned long) ch
4c90: 6b 5f 72 76 29 3b 0a 09 09 09 09 7d 0a 0a 09 09  k_rv);.....}....
4ca0: 09 7d 0a 0a 09 09 09 63 68 6b 5f 72 76 20 3d 20  .}.....chk_rv = 
4cb0: 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 69 6e  C_FindObjectsFin
4cc0: 61 6c 28 68 53 65 73 73 69 6f 6e 29 3b 0a 09 09  al(hSession);...
4cd0: 09 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43  .if (chk_rv != C
4ce0: 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 70 72 69  KR_OK) {.....pri
4cf0: 6e 74 66 28 22 46 69 6e 64 4f 62 6a 65 63 74 73  ntf("FindObjects
4d00: 46 69 6e 61 6c 28 29 20 66 61 69 6c 65 64 2e 5c  Final() failed.\
4d10: 6e 22 29 3b 0a 09 09 09 7d 0a 09 09 7d 20 65 6c  n");....}...} el
4d20: 73 65 20 7b 0a 09 09 09 70 72 69 6e 74 66 28 22  se {....printf("
4d30: 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 28  FindObjectsInit(
4d40: 29 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09  ) failed.\n");..
4d50: 09 7d 0a 0a 09 09 70 72 69 6e 74 66 28 22 2d 2d  .}....printf("--
4d60: 2d 20 4f 70 65 72 61 74 69 6f 6e 73 20 2d 2d 2d  - Operations ---
4d70: 5c 6e 22 29 3b 0a 0a 09 09 66 6f 72 20 28 63 75  \n");....for (cu
4d80: 72 72 50 72 69 76 4b 65 79 20 3d 20 70 72 69 76  rrPrivKey = priv
4d90: 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 5f 72 6f  ateKeyObjects_ro
4da0: 6f 74 3b 20 2a 63 75 72 72 50 72 69 76 4b 65 79  ot; *currPrivKey
4db0: 20 21 3d 20 43 4b 5f 49 4e 56 41 4c 49 44 5f 48   != CK_INVALID_H
4dc0: 41 4e 44 4c 45 3b 20 63 75 72 72 50 72 69 76 4b  ANDLE; currPrivK
4dd0: 65 79 2b 2b 29 20 7b 0a 09 09 09 63 68 6b 5f 72  ey++) {....chk_r
4de0: 76 20 3d 20 43 5f 53 69 67 6e 49 6e 69 74 28 68  v = C_SignInit(h
4df0: 53 65 73 73 69 6f 6e 2c 20 26 6d 65 63 68 61 6e  Session, &mechan
4e00: 69 73 6d 2c 20 2a 63 75 72 72 50 72 69 76 4b 65  ism, *currPrivKe
4e10: 79 29 3b 0a 09 09 09 69 66 20 28 63 68 6b 5f 72  y);....if (chk_r
4e20: 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09  v == CKR_OK) {..
4e30: 09 09 09 73 69 67 6e 61 74 75 72 65 5f 6c 65 6e  ...signature_len
4e40: 20 3d 20 73 69 7a 65 6f 66 28 73 69 67 6e 61 74   = sizeof(signat
4e50: 75 72 65 29 3b 0a 0a 09 09 09 09 63 68 6b 5f 72  ure);......chk_r
4e60: 76 20 3d 20 43 5f 53 69 67 6e 28 68 53 65 73 73  v = C_Sign(hSess
4e70: 69 6f 6e 2c 20 28 43 4b 5f 42 59 54 45 5f 50 54  ion, (CK_BYTE_PT
4e80: 52 29 20 22 54 65 73 74 22 2c 20 73 74 72 6c 65  R) "Test", strle
4e90: 6e 28 22 54 65 73 74 22 29 2c 20 28 43 4b 5f 42  n("Test"), (CK_B
4ea0: 59 54 45 5f 50 54 52 29 20 26 73 69 67 6e 61 74  YTE_PTR) &signat
4eb0: 75 72 65 2c 20 26 73 69 67 6e 61 74 75 72 65 5f  ure, &signature_
4ec0: 6c 65 6e 29 3b 0a 09 09 09 09 69 66 20 28 63 68  len);.....if (ch
4ed0: 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20  k_rv == CKR_OK) 
4ee0: 7b 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22 5b  {......printf("[
4ef0: 25 30 34 6c 75 2f 25 30 32 6c 78 5d 20 53 69 67  %04lu/%02lx] Sig
4f00: 6e 61 74 75 72 65 3a 20 22 2c 20 28 75 6e 73 69  nature: ", (unsi
4f10: 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 63 75 72 72  gned long) *curr
4f20: 50 72 69 76 4b 65 79 2c 20 28 75 6e 73 69 67 6e  PrivKey, (unsign
4f30: 65 64 20 6c 6f 6e 67 29 20 6d 65 63 68 61 6e 69  ed long) mechani
4f40: 73 6d 2e 6d 65 63 68 61 6e 69 73 6d 29 3b 0a 0a  sm.mechanism);..
4f50: 09 09 09 09 09 66 6f 72 20 28 62 79 74 65 5f 69  .....for (byte_i
4f60: 64 78 20 3d 20 30 3b 20 62 79 74 65 5f 69 64 78  dx = 0; byte_idx
4f70: 20 3c 20 73 69 67 6e 61 74 75 72 65 5f 6c 65 6e   < signature_len
4f80: 3b 20 62 79 74 65 5f 69 64 78 2b 2b 29 20 7b 0a  ; byte_idx++) {.
4f90: 09 09 09 09 09 09 70 72 69 6e 74 66 28 22 25 30  ......printf("%0
4fa0: 32 78 20 22 2c 20 28 75 6e 73 69 67 6e 65 64 20  2x ", (unsigned 
4fb0: 69 6e 74 29 20 73 69 67 6e 61 74 75 72 65 5b 62  int) signature[b
4fc0: 79 74 65 5f 69 64 78 5d 29 3b 0a 09 09 09 09 09  yte_idx]);......
4fd0: 7d 0a 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22  }.......printf("
4fe0: 5c 6e 22 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65  \n");.....} else
4ff0: 20 7b 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22   {......printf("
5000: 53 69 67 6e 28 29 20 66 61 69 6c 65 64 2e 5c 6e  Sign() failed.\n
5010: 22 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 20 65  ");.....}....} e
5020: 6c 73 65 20 7b 0a 09 09 09 09 70 72 69 6e 74 66  lse {.....printf
5030: 28 22 53 69 67 6e 49 6e 69 74 28 29 20 66 61 69  ("SignInit() fai
5040: 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09 09 7d 0a 09  led.\n");....}..
5050: 09 7d 0a 0a 09 09 66 6f 72 20 28 63 75 72 72 50  .}....for (currP
5060: 72 69 76 4b 65 79 20 3d 20 70 72 69 76 61 74 65  rivKey = private
5070: 4b 65 79 4f 62 6a 65 63 74 73 5f 72 6f 6f 74 3b  KeyObjects_root;
5080: 20 2a 63 75 72 72 50 72 69 76 4b 65 79 20 21 3d   *currPrivKey !=
5090: 20 43 4b 5f 49 4e 56 41 4c 49 44 5f 48 41 4e 44   CK_INVALID_HAND
50a0: 4c 45 3b 20 63 75 72 72 50 72 69 76 4b 65 79 2b  LE; currPrivKey+
50b0: 2b 29 20 7b 0a 09 09 09 63 68 6b 5f 72 76 20 3d  +) {....chk_rv =
50c0: 20 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 28 68   C_EncryptInit(h
50d0: 53 65 73 73 69 6f 6e 2c 20 26 6d 65 63 68 61 6e  Session, &mechan
50e0: 69 73 6d 2c 20 2a 63 75 72 72 50 72 69 76 4b 65  ism, *currPrivKe
50f0: 79 29 3b 0a 09 09 09 69 66 20 28 63 68 6b 5f 72  y);....if (chk_r
5100: 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09  v == CKR_OK) {..
5110: 09 09 09 65 6e 63 72 79 70 74 65 64 5f 62 75 66  ...encrypted_buf
5120: 6c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 65 6e 63  len = sizeof(enc
5130: 72 79 70 74 65 64 5f 62 75 66 29 3b 0a 0a 09 09  rypted_buf);....
5140: 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f 45 6e 63  ..chk_rv = C_Enc
5150: 72 79 70 74 28 68 53 65 73 73 69 6f 6e 2c 20 28  rypt(hSession, (
5160: 43 4b 5f 42 59 54 45 5f 50 54 52 29 20 22 54 65  CK_BYTE_PTR) "Te
5170: 73 74 22 2c 20 73 74 72 6c 65 6e 28 22 54 65 73  st", strlen("Tes
5180: 74 22 29 2c 20 65 6e 63 72 79 70 74 65 64 5f 62  t"), encrypted_b
5190: 75 66 2c 20 26 65 6e 63 72 79 70 74 65 64 5f 62  uf, &encrypted_b
51a0: 75 66 6c 65 6e 29 3b 0a 09 09 09 09 69 66 20 28  uflen);.....if (
51b0: 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b  chk_rv == CKR_OK
51c0: 29 20 7b 0a 09 09 09 09 09 70 72 69 6e 74 66 28  ) {......printf(
51d0: 22 5b 25 30 34 6c 75 2f 25 30 32 6c 78 5d 20 45  "[%04lu/%02lx] E
51e0: 6e 63 72 79 70 74 65 64 28 54 65 73 74 29 3a 20  ncrypted(Test): 
51f0: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  ", (unsigned lon
5200: 67 29 20 2a 63 75 72 72 50 72 69 76 4b 65 79 2c  g) *currPrivKey,
5210: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29   (unsigned long)
5220: 20 6d 65 63 68 61 6e 69 73 6d 2e 6d 65 63 68 61   mechanism.mecha
5230: 6e 69 73 6d 29 3b 0a 0a 09 09 09 09 09 66 6f 72  nism);.......for
5240: 20 28 62 79 74 65 5f 69 64 78 20 3d 20 30 3b 20   (byte_idx = 0; 
5250: 62 79 74 65 5f 69 64 78 20 3c 20 65 6e 63 72 79  byte_idx < encry
5260: 70 74 65 64 5f 62 75 66 6c 65 6e 3b 20 62 79 74  pted_buflen; byt
5270: 65 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09  e_idx++) {......
5280: 09 70 72 69 6e 74 66 28 22 25 30 32 78 20 22 2c  .printf("%02x ",
5290: 20 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 20   (unsigned int) 
52a0: 65 6e 63 72 79 70 74 65 64 5f 62 75 66 5b 62 79  encrypted_buf[by
52b0: 74 65 5f 69 64 78 5d 29 3b 0a 09 09 09 09 09 7d  te_idx]);......}
52c0: 0a 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22 5c  .......printf("\
52d0: 6e 22 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20  n");.....} else 
52e0: 7b 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22 45  {......printf("E
52f0: 6e 63 72 79 70 74 28 29 20 66 61 69 6c 65 64 2e  ncrypt() failed.
5300: 5c 6e 22 29 3b 0a 09 09 09 09 7d 0a 09 09 09 7d  \n");.....}....}
5310: 20 65 6c 73 65 20 7b 0a 09 09 09 09 70 72 69 6e   else {.....prin
5320: 74 66 28 22 45 6e 63 72 79 70 74 49 6e 69 74 28  tf("EncryptInit(
5330: 29 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09  ) failed.\n");..
5340: 09 09 7d 0a 09 09 7d 0a 0a 09 09 66 6f 72 20 28  ..}...}....for (
5350: 63 75 72 72 50 72 69 76 4b 65 79 20 3d 20 70 72  currPrivKey = pr
5360: 69 76 61 74 65 4b 65 79 4f 62 6a 65 63 74 73 5f  ivateKeyObjects_
5370: 72 6f 6f 74 3b 20 2a 63 75 72 72 50 72 69 76 4b  root; *currPrivK
5380: 65 79 20 21 3d 20 43 4b 5f 49 4e 56 41 4c 49 44  ey != CK_INVALID
5390: 5f 48 41 4e 44 4c 45 3b 20 63 75 72 72 50 72 69  _HANDLE; currPri
53a0: 76 4b 65 79 2b 2b 29 20 7b 0a 09 09 09 63 68 6b  vKey++) {....chk
53b0: 5f 72 76 20 3d 20 43 5f 44 65 63 72 79 70 74 49  _rv = C_DecryptI
53c0: 6e 69 74 28 68 53 65 73 73 69 6f 6e 2c 20 26 6d  nit(hSession, &m
53d0: 65 63 68 61 6e 69 73 6d 2c 20 2a 63 75 72 72 50  echanism, *currP
53e0: 72 69 76 4b 65 79 29 3b 0a 09 09 09 69 66 20 28  rivKey);....if (
53f0: 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b  chk_rv == CKR_OK
5400: 29 20 7b 0a 09 09 09 09 64 65 63 72 79 70 74 65  ) {.....decrypte
5410: 64 5f 62 75 66 6c 65 6e 20 3d 20 73 69 7a 65 6f  d_buflen = sizeo
5420: 66 28 64 65 63 72 79 70 74 65 64 5f 62 75 66 29  f(decrypted_buf)
5430: 3b 0a 0a 09 09 09 09 63 68 6b 5f 72 76 20 3d 20  ;......chk_rv = 
5440: 43 5f 44 65 63 72 79 70 74 28 68 53 65 73 73 69  C_Decrypt(hSessi
5450: 6f 6e 2c 20 28 43 4b 5f 42 59 54 45 5f 50 54 52  on, (CK_BYTE_PTR
5460: 29 20 22 5c 78 34 63 5c 78 33 36 5c 78 30 66 5c  ) "\x4c\x36\x0f\
5470: 78 38 36 5c 78 32 64 5c 78 62 37 5c 78 62 32 5c  x86\x2d\xb7\xb2\
5480: 78 34 36 5c 78 39 32 5c 78 31 31 5c 78 37 65 5c  x46\x92\x11\x7e\
5490: 78 35 66 5c 78 64 31 5c 78 65 62 5c 78 32 63 5c  x5f\xd1\xeb\x2c\
54a0: 78 62 30 5c 78 64 62 5c 78 33 34 5c 78 36 30 5c  xb0\xdb\x34\x60\
54b0: 78 62 38 5c 78 30 63 5c 78 66 38 5c 78 32 37 5c  xb8\x0c\xf8\x27\
54c0: 78 62 35 5c 78 66 62 5c 78 63 65 5c 78 64 31 5c  xb5\xfb\xce\xd1\
54d0: 78 66 34 5c 78 35 38 5c 78 61 33 5c 78 32 30 5c  xf4\x58\xa3\x20\
54e0: 78 35 32 5c 78 39 64 5c 78 39 37 5c 78 30 38 5c  x52\x9d\x97\x08\
54f0: 78 64 38 5c 78 32 62 5c 78 35 65 5c 78 62 32 5c  xd8\x2b\x5e\xb2\
5500: 78 33 37 5c 78 34 36 5c 78 37 32 5c 78 34 35 5c  x37\x46\x72\x45\
5510: 78 37 63 5c 78 36 36 5c 78 32 33 5c 78 35 33 5c  x7c\x66\x23\x53\
5520: 78 62 35 5c 78 61 35 5c 78 31 36 5c 78 36 31 5c  xb5\xa5\x16\x61\
5530: 78 39 36 5c 78 62 63 5c 78 35 63 5c 78 38 64 5c  x96\xbc\x5c\x8d\
5540: 78 38 35 5c 78 31 38 5c 78 32 34 5c 78 63 66 5c  x85\x18\x24\xcf\
5550: 78 37 34 5c 78 37 66 5c 78 63 32 5c 78 32 33 5c  x74\x7f\xc2\x23\
5560: 78 31 35 5c 78 64 36 5c 78 34 32 5c 78 37 32 5c  x15\xd6\x42\x72\
5570: 78 61 35 5c 78 32 62 5c 78 32 39 5c 78 32 39 5c  xa5\x2b\x29\x29\
5580: 78 31 64 5c 78 61 36 5c 78 65 61 5c 78 32 62 5c  x1d\xa6\xea\x2b\
5590: 78 63 62 5c 78 35 37 5c 78 35 39 5c 78 62 33 5c  xcb\x57\x59\xb3\
55a0: 78 35 66 5c 78 65 32 5c 78 66 38 5c 78 33 30 5c  x5f\xe2\xf8\x30\
55b0: 78 31 32 5c 78 32 66 5c 78 31 62 5c 78 66 61 5c  x12\x2f\x1b\xfa\
55c0: 78 62 64 5c 78 61 39 5c 78 31 39 5c 78 65 66 5c  xbd\xa9\x19\xef\
55d0: 78 35 63 5c 78 62 62 5c 78 34 38 5c 78 64 63 5c  x5c\xbb\x48\xdc\
55e0: 78 32 38 5c 78 34 32 5c 78 64 64 5c 78 39 30 5c  x28\x42\xdd\x90\
55f0: 78 62 65 5c 78 36 33 5c 78 65 62 5c 78 35 39 5c  xbe\x63\xeb\x59\
5600: 78 30 63 5c 78 61 66 5c 78 35 39 5c 78 63 62 5c  x0c\xaf\x59\xcb\
5610: 78 65 34 5c 78 36 61 5c 78 66 32 5c 78 35 36 5c  xe4\x6a\xf2\x56\
5620: 78 32 34 5c 78 34 31 5c 78 63 32 5c 78 37 37 5c  x24\x41\xc2\x77\
5630: 78 37 62 5c 78 63 39 5c 78 66 38 5c 78 30 32 5c  x7b\xc9\xf8\x02\
5640: 78 30 66 5c 78 36 37 5c 78 33 64 5c 78 32 61 5c  x0f\x67\x3d\x2a\
5650: 78 39 38 5c 78 39 31 5c 78 31 34 5c 78 61 32 5c  x98\x91\x14\xa2\
5660: 78 35 37 22 2c 20 31 32 38 2c 20 64 65 63 72 79  x57", 128, decry
5670: 70 74 65 64 5f 62 75 66 2c 20 26 64 65 63 72 79  pted_buf, &decry
5680: 70 74 65 64 5f 62 75 66 6c 65 6e 29 3b 0a 09 09  pted_buflen);...
5690: 09 09 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d 20  ..if (chk_rv == 
56a0: 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 09 70  CKR_OK) {......p
56b0: 72 69 6e 74 66 28 22 5b 25 30 34 6c 75 2f 25 30  rintf("[%04lu/%0
56c0: 32 6c 78 5d 20 44 65 63 72 79 70 74 65 64 28 49  2lx] Decrypted(I
56d0: 74 20 77 6f 72 6b 73 21 29 3a 20 22 2c 20 28 75  t works!): ", (u
56e0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 63  nsigned long) *c
56f0: 75 72 72 50 72 69 76 4b 65 79 2c 20 28 75 6e 73  urrPrivKey, (uns
5700: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6d 65 63 68  igned long) mech
5710: 61 6e 69 73 6d 2e 6d 65 63 68 61 6e 69 73 6d 29  anism.mechanism)
5720: 3b 0a 0a 09 09 09 09 09 66 6f 72 20 28 62 79 74  ;.......for (byt
5730: 65 5f 69 64 78 20 3d 20 30 3b 20 62 79 74 65 5f  e_idx = 0; byte_
5740: 69 64 78 20 3c 20 64 65 63 72 79 70 74 65 64 5f  idx < decrypted_
5750: 62 75 66 6c 65 6e 3b 20 62 79 74 65 5f 69 64 78  buflen; byte_idx
5760: 2b 2b 29 20 7b 0a 09 09 09 09 09 09 70 72 69 6e  ++) {.......prin
5770: 74 66 28 22 25 30 32 78 20 22 2c 20 28 75 6e 73  tf("%02x ", (uns
5780: 69 67 6e 65 64 20 69 6e 74 29 20 64 65 63 72 79  igned int) decry
5790: 70 74 65 64 5f 62 75 66 5b 62 79 74 65 5f 69 64  pted_buf[byte_id
57a0: 78 5d 29 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09  x]);......}.....
57b0: 09 09 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a  ..printf("\n");.
57c0: 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
57d0: 09 09 70 72 69 6e 74 66 28 22 44 65 63 72 79 70  ..printf("Decryp
57e0: 74 28 29 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b  t() failed.\n");
57f0: 0a 09 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65  .....}....} else
5800: 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 44   {.....printf("D
5810: 65 63 72 79 70 74 49 6e 69 74 28 29 20 66 61 69  ecryptInit() fai
5820: 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09 09 7d 0a 09  led.\n");....}..
5830: 09 7d 0a 0a 09 09 63 68 6b 5f 72 76 20 3d 20 43  .}....chk_rv = C
5840: 5f 43 6c 6f 73 65 53 65 73 73 69 6f 6e 28 68 53  _CloseSession(hS
5850: 65 73 73 69 6f 6e 29 3b 0a 09 09 69 66 20 28 63  ession);...if (c
5860: 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29  hk_rv != CKR_OK)
5870: 20 7b 0a 09 09 09 70 72 69 6e 74 66 28 22 43 6c   {....printf("Cl
5880: 6f 73 65 53 65 73 73 69 6f 6e 20 66 61 69 6c 65  oseSession faile
5890: 64 2e 5c 6e 22 29 3b 0a 09 09 7d 0a 09 7d 20 65  d.\n");...}..} e
58a0: 6c 73 65 20 7b 0a 09 09 70 72 69 6e 74 66 28 22  lse {...printf("
58b0: 4f 70 65 6e 53 65 73 73 69 6f 6e 20 66 61 69 6c  OpenSession fail
58c0: 65 64 2e 5c 6e 22 29 3b 0a 09 7d 0a 0a 09 43 5f  ed.\n");..}...C_
58d0: 46 69 6e 61 6c 69 7a 65 28 4e 55 4c 4c 29 3b 0a  Finalize(NULL);.
58e0: 0a 09 69 66 20 28 73 6c 6f 74 73 29 20 7b 0a 09  ..if (slots) {..
58f0: 09 66 72 65 65 28 73 6c 6f 74 73 29 3b 0a 09 7d  .free(slots);..}
5900: 0a 0a 09 69 66 20 28 70 72 69 76 61 74 65 4b 65  ...if (privateKe
5910: 79 4f 62 6a 65 63 74 73 5f 72 6f 6f 74 29 20 7b  yObjects_root) {
5920: 0a 09 09 66 72 65 65 28 70 72 69 76 61 74 65 4b  ...free(privateK
5930: 65 79 4f 62 6a 65 63 74 73 5f 72 6f 6f 74 29 3b  eyObjects_root);
5940: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 30 29 3b  ..}...return(0);
5950: 0a 7d 0a 0a 69 6e 74 20 6d 61 69 6e 28 76 6f 69  .}..int main(voi
5960: 64 29 20 7b 0a 09 69 6e 74 20 72 65 74 76 61 6c  d) {..int retval
5970: 20 3d 20 30 2c 20 63 6b 5f 72 65 74 76 61 6c 3b   = 0, ck_retval;
5980: 0a 0a 09 70 72 69 6e 74 66 28 22 54 65 73 74 69  ...printf("Testi
5990: 6e 67 20 6c 69 62 63 61 63 6b 65 79 2e 2e 2e 5c  ng libcackey...\
59a0: 6e 22 29 3b 0a 0a 09 63 6b 5f 72 65 74 76 61 6c  n");...ck_retval
59b0: 20 3d 20 6d 61 69 6e 5f 70 6b 63 73 31 31 28 29   = main_pkcs11()
59c0: 3b 0a 0a 09 69 66 20 28 63 6b 5f 72 65 74 76 61  ;...if (ck_retva
59d0: 6c 20 21 3d 20 30 29 20 7b 0a 09 09 72 65 74 76  l != 0) {...retv
59e0: 61 6c 20 3d 20 63 6b 5f 72 65 74 76 61 6c 3b 0a  al = ck_retval;.
59f0: 09 7d 0a 0a 09 70 72 69 6e 74 66 28 22 54 65 73  .}...printf("Tes
5a00: 74 69 6e 67 20 6c 69 62 63 61 63 6b 65 79 2e 2e  ting libcackey..
5a10: 2e 20 44 4f 4e 45 2e 20 53 74 61 74 75 73 20 3d  . DONE. Status =
5a20: 20 25 69 5c 6e 22 2c 20 63 6b 5f 72 65 74 76 61   %i\n", ck_retva
5a30: 6c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74  l);...return(ret
5a40: 76 61 6c 29 3b 0a 7d 0a                          val);.}.