Hex Artifact Content

Artifact 47338c5b52163b42aeda01424c5519774a7d3a63:


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