Hex Artifact Content

Artifact dcf2fb997e2ed8399ed8f2e64d11ef4017c79c13:


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 73 74  de <stdio.h>..st
0080: 61 74 69 63 20 63 68 61 72 20 2a 70 6b 63 73 31  atic char *pkcs1
0090: 31 5f 61 74 74 72 69 62 75 74 65 5f 74 6f 5f 6e  1_attribute_to_n
00a0: 61 6d 65 28 43 4b 5f 41 54 54 52 49 42 55 54 45  ame(CK_ATTRIBUTE
00b0: 5f 54 59 50 45 20 61 74 74 72 69 62 29 20 7b 0a  _TYPE attrib) {.
00c0: 09 73 74 61 74 69 63 20 63 68 61 72 20 72 65 74  .static char ret
00d0: 62 75 66 5b 31 30 32 34 5d 3b 0a 0a 09 73 77 69  buf[1024];...swi
00e0: 74 63 68 20 28 61 74 74 72 69 62 29 20 7b 0a 09  tch (attrib) {..
00f0: 09 63 61 73 65 20 30 78 30 30 30 30 30 30 30 30  .case 0x00000000
0100: 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 43 4c  : return "CKA_CL
0110: 41 53 53 22 3b 0a 09 09 63 61 73 65 20 30 78 30  ASS";...case 0x0
0120: 30 30 30 30 30 30 31 3a 20 72 65 74 75 72 6e 20  0000001: return 
0130: 22 43 4b 41 5f 54 4f 4b 45 4e 22 3b 0a 09 09 63  "CKA_TOKEN";...c
0140: 61 73 65 20 30 78 30 30 30 30 30 30 30 32 3a 20  ase 0x00000002: 
0150: 72 65 74 75 72 6e 20 22 43 4b 41 5f 50 52 49 56  return "CKA_PRIV
0160: 41 54 45 22 3b 0a 09 09 63 61 73 65 20 30 78 30  ATE";...case 0x0
0170: 30 30 30 30 30 30 33 3a 20 72 65 74 75 72 6e 20  0000003: return 
0180: 22 43 4b 41 5f 4c 41 42 45 4c 22 3b 0a 09 09 63  "CKA_LABEL";...c
0190: 61 73 65 20 30 78 30 30 30 30 30 30 31 30 3a 20  ase 0x00000010: 
01a0: 72 65 74 75 72 6e 20 22 43 4b 41 5f 41 50 50 4c  return "CKA_APPL
01b0: 49 43 41 54 49 4f 4e 22 3b 0a 09 09 63 61 73 65  ICATION";...case
01c0: 20 30 78 30 30 30 30 30 30 31 31 3a 20 72 65 74   0x00000011: ret
01d0: 75 72 6e 20 22 43 4b 41 5f 56 41 4c 55 45 22 3b  urn "CKA_VALUE";
01e0: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 30  ...case 0x000000
01f0: 31 32 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f  12: return "CKA_
0200: 4f 42 4a 45 43 54 5f 49 44 22 3b 0a 09 09 63 61  OBJECT_ID";...ca
0210: 73 65 20 30 78 30 30 30 30 30 30 38 30 3a 20 72  se 0x00000080: r
0220: 65 74 75 72 6e 20 22 43 4b 41 5f 43 45 52 54 49  eturn "CKA_CERTI
0230: 46 49 43 41 54 45 5f 54 59 50 45 22 3b 0a 09 09  FICATE_TYPE";...
0240: 63 61 73 65 20 30 78 30 30 30 30 30 30 38 31 3a  case 0x00000081:
0250: 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 49 53 53   return "CKA_ISS
0260: 55 45 52 22 3b 0a 09 09 63 61 73 65 20 30 78 30  UER";...case 0x0
0270: 30 30 30 30 30 38 32 3a 20 72 65 74 75 72 6e 20  0000082: return 
0280: 22 43 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42  "CKA_SERIAL_NUMB
0290: 45 52 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30  ER";...case 0x00
02a0: 30 30 30 30 38 33 3a 20 72 65 74 75 72 6e 20 22  000083: return "
02b0: 43 4b 41 5f 41 43 5f 49 53 53 55 45 52 22 3b 0a  CKA_AC_ISSUER";.
02c0: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 30 38  ..case 0x0000008
02d0: 34 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 4f  4: return "CKA_O
02e0: 57 4e 45 52 22 3b 0a 09 09 63 61 73 65 20 30 78  WNER";...case 0x
02f0: 30 30 30 30 30 30 38 35 3a 20 72 65 74 75 72 6e  00000085: return
0300: 20 22 43 4b 41 5f 41 54 54 52 5f 54 59 50 45 53   "CKA_ATTR_TYPES
0310: 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30  ";...case 0x0000
0320: 30 30 38 36 3a 20 72 65 74 75 72 6e 20 22 43 4b  0086: return "CK
0330: 41 5f 54 52 55 53 54 45 44 22 3b 0a 09 09 63 61  A_TRUSTED";...ca
0340: 73 65 20 30 78 30 30 30 30 30 31 30 30 3a 20 72  se 0x00000100: r
0350: 65 74 75 72 6e 20 22 43 4b 41 5f 4b 45 59 5f 54  eturn "CKA_KEY_T
0360: 59 50 45 22 3b 0a 09 09 63 61 73 65 20 30 78 30  YPE";...case 0x0
0370: 30 30 30 30 31 30 31 3a 20 72 65 74 75 72 6e 20  0000101: return 
0380: 22 43 4b 41 5f 53 55 42 4a 45 43 54 22 3b 0a 09  "CKA_SUBJECT";..
0390: 09 63 61 73 65 20 30 78 30 30 30 30 30 31 30 32  .case 0x00000102
03a0: 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 49 44  : return "CKA_ID
03b0: 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30  ";...case 0x0000
03c0: 30 31 30 33 3a 20 72 65 74 75 72 6e 20 22 43 4b  0103: return "CK
03d0: 41 5f 53 45 4e 53 49 54 49 56 45 22 3b 0a 09 09  A_SENSITIVE";...
03e0: 63 61 73 65 20 30 78 30 30 30 30 30 31 30 34 3a  case 0x00000104:
03f0: 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 45 4e 43   return "CKA_ENC
0400: 52 59 50 54 22 3b 0a 09 09 63 61 73 65 20 30 78  RYPT";...case 0x
0410: 30 30 30 30 30 31 30 35 3a 20 72 65 74 75 72 6e  00000105: return
0420: 20 22 43 4b 41 5f 44 45 43 52 59 50 54 22 3b 0a   "CKA_DECRYPT";.
0430: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31 30  ..case 0x0000010
0440: 36 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 57  6: return "CKA_W
0450: 52 41 50 22 3b 0a 09 09 63 61 73 65 20 30 78 30  RAP";...case 0x0
0460: 30 30 30 30 31 30 37 3a 20 72 65 74 75 72 6e 20  0000107: return 
0470: 22 43 4b 41 5f 55 4e 57 52 41 50 22 3b 0a 09 09  "CKA_UNWRAP";...
0480: 63 61 73 65 20 30 78 30 30 30 30 30 31 30 38 3a  case 0x00000108:
0490: 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 53 49 47   return "CKA_SIG
04a0: 4e 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30  N";...case 0x000
04b0: 30 30 31 30 39 3a 20 72 65 74 75 72 6e 20 22 43  00109: return "C
04c0: 4b 41 5f 53 49 47 4e 5f 52 45 43 4f 56 45 52 22  KA_SIGN_RECOVER"
04d0: 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30  ;...case 0x00000
04e0: 31 30 41 3a 20 72 65 74 75 72 6e 20 22 43 4b 41  10A: return "CKA
04f0: 5f 56 45 52 49 46 59 22 3b 0a 09 09 63 61 73 65  _VERIFY";...case
0500: 20 30 78 30 30 30 30 30 31 30 42 3a 20 72 65 74   0x0000010B: ret
0510: 75 72 6e 20 22 43 4b 41 5f 56 45 52 49 46 59 5f  urn "CKA_VERIFY_
0520: 52 45 43 4f 56 45 52 22 3b 0a 09 09 63 61 73 65  RECOVER";...case
0530: 20 30 78 30 30 30 30 30 31 30 43 3a 20 72 65 74   0x0000010C: ret
0540: 75 72 6e 20 22 43 4b 41 5f 44 45 52 49 56 45 22  urn "CKA_DERIVE"
0550: 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30  ;...case 0x00000
0560: 31 31 30 3a 20 72 65 74 75 72 6e 20 22 43 4b 41  110: return "CKA
0570: 5f 53 54 41 52 54 5f 44 41 54 45 22 3b 0a 09 09  _START_DATE";...
0580: 63 61 73 65 20 30 78 30 30 30 30 30 31 31 31 3a  case 0x00000111:
0590: 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 45 4e 44   return "CKA_END
05a0: 5f 44 41 54 45 22 3b 0a 09 09 63 61 73 65 20 30  _DATE";...case 0
05b0: 78 30 30 30 30 30 31 32 30 3a 20 72 65 74 75 72  x00000120: retur
05c0: 6e 20 22 43 4b 41 5f 4d 4f 44 55 4c 55 53 22 3b  n "CKA_MODULUS";
05d0: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31  ...case 0x000001
05e0: 32 31 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f  21: return "CKA_
05f0: 4d 4f 44 55 4c 55 53 5f 42 49 54 53 22 3b 0a 09  MODULUS_BITS";..
0600: 09 63 61 73 65 20 30 78 30 30 30 30 30 31 32 32  .case 0x00000122
0610: 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 50 55  : return "CKA_PU
0620: 42 4c 49 43 5f 45 58 50 4f 4e 45 4e 54 22 3b 0a  BLIC_EXPONENT";.
0630: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31 32  ..case 0x0000012
0640: 33 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 50  3: return "CKA_P
0650: 52 49 56 41 54 45 5f 45 58 50 4f 4e 45 4e 54 22  RIVATE_EXPONENT"
0660: 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30  ;...case 0x00000
0670: 31 32 34 3a 20 72 65 74 75 72 6e 20 22 43 4b 41  124: return "CKA
0680: 5f 50 52 49 4d 45 5f 31 22 3b 0a 09 09 63 61 73  _PRIME_1";...cas
0690: 65 20 30 78 30 30 30 30 30 31 32 35 3a 20 72 65  e 0x00000125: re
06a0: 74 75 72 6e 20 22 43 4b 41 5f 50 52 49 4d 45 5f  turn "CKA_PRIME_
06b0: 32 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30  2";...case 0x000
06c0: 30 30 31 32 36 3a 20 72 65 74 75 72 6e 20 22 43  00126: return "C
06d0: 4b 41 5f 45 58 50 4f 4e 45 4e 54 5f 31 22 3b 0a  KA_EXPONENT_1";.
06e0: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31 32  ..case 0x0000012
06f0: 37 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 45  7: return "CKA_E
0700: 58 50 4f 4e 45 4e 54 5f 32 22 3b 0a 09 09 63 61  XPONENT_2";...ca
0710: 73 65 20 30 78 30 30 30 30 30 31 32 38 3a 20 72  se 0x00000128: r
0720: 65 74 75 72 6e 20 22 43 4b 41 5f 43 4f 45 46 46  eturn "CKA_COEFF
0730: 49 43 49 45 4e 54 22 3b 0a 09 09 63 61 73 65 20  ICIENT";...case 
0740: 30 78 30 30 30 30 30 31 33 30 3a 20 72 65 74 75  0x00000130: retu
0750: 72 6e 20 22 43 4b 41 5f 50 52 49 4d 45 22 3b 0a  rn "CKA_PRIME";.
0760: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31 33  ..case 0x0000013
0770: 31 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 53  1: return "CKA_S
0780: 55 42 50 52 49 4d 45 22 3b 0a 09 09 63 61 73 65  UBPRIME";...case
0790: 20 30 78 30 30 30 30 30 31 33 32 3a 20 72 65 74   0x00000132: ret
07a0: 75 72 6e 20 22 43 4b 41 5f 42 41 53 45 22 3b 0a  urn "CKA_BASE";.
07b0: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31 33  ..case 0x0000013
07c0: 33 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 50  3: return "CKA_P
07d0: 52 49 4d 45 5f 42 49 54 53 22 3b 0a 09 09 63 61  RIME_BITS";...ca
07e0: 73 65 20 30 78 30 30 30 30 30 31 33 34 3a 20 72  se 0x00000134: r
07f0: 65 74 75 72 6e 20 22 43 4b 41 5f 53 55 42 5f 50  eturn "CKA_SUB_P
0800: 52 49 4d 45 5f 42 49 54 53 22 3b 0a 09 09 63 61  RIME_BITS";...ca
0810: 73 65 20 30 78 30 30 30 30 30 31 36 30 3a 20 72  se 0x00000160: r
0820: 65 74 75 72 6e 20 22 43 4b 41 5f 56 41 4c 55 45  eturn "CKA_VALUE
0830: 5f 42 49 54 53 22 3b 0a 09 09 63 61 73 65 20 30  _BITS";...case 0
0840: 78 30 30 30 30 30 31 36 31 3a 20 72 65 74 75 72  x00000161: retur
0850: 6e 20 22 43 4b 41 5f 56 41 4c 55 45 5f 4c 45 4e  n "CKA_VALUE_LEN
0860: 22 3b 0a 09 09 63 61 73 65 20 30 78 30 30 30 30  ";...case 0x0000
0870: 30 31 36 32 3a 20 72 65 74 75 72 6e 20 22 43 4b  0162: return "CK
0880: 41 5f 45 58 54 52 41 43 54 41 42 4c 45 22 3b 0a  A_EXTRACTABLE";.
0890: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 31 36  ..case 0x0000016
08a0: 33 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 4c  3: return "CKA_L
08b0: 4f 43 41 4c 22 3b 0a 09 09 63 61 73 65 20 30 78  OCAL";...case 0x
08c0: 30 30 30 30 30 31 36 34 3a 20 72 65 74 75 72 6e  00000164: return
08d0: 20 22 43 4b 41 5f 4e 45 56 45 52 5f 45 58 54 52   "CKA_NEVER_EXTR
08e0: 41 43 54 41 42 4c 45 22 3b 0a 09 09 63 61 73 65  ACTABLE";...case
08f0: 20 30 78 30 30 30 30 30 31 36 35 3a 20 72 65 74   0x00000165: ret
0900: 75 72 6e 20 22 43 4b 41 5f 41 4c 57 41 59 53 5f  urn "CKA_ALWAYS_
0910: 53 45 4e 53 49 54 49 56 45 22 3b 0a 09 09 63 61  SENSITIVE";...ca
0920: 73 65 20 30 78 30 30 30 30 30 31 36 36 3a 20 72  se 0x00000166: r
0930: 65 74 75 72 6e 20 22 43 4b 41 5f 4b 45 59 5f 47  eturn "CKA_KEY_G
0940: 45 4e 5f 4d 45 43 48 41 4e 49 53 4d 22 3b 0a 09  EN_MECHANISM";..
0950: 09 63 61 73 65 20 30 78 30 30 30 30 30 31 37 30  .case 0x00000170
0960: 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 4d 4f  : return "CKA_MO
0970: 44 49 46 49 41 42 4c 45 22 3b 0a 09 09 63 61 73  DIFIABLE";...cas
0980: 65 20 30 78 30 30 30 30 30 31 38 30 3a 20 72 65  e 0x00000180: re
0990: 74 75 72 6e 20 22 43 4b 41 5f 45 43 5f 50 41 52  turn "CKA_EC_PAR
09a0: 41 4d 53 22 3b 0a 09 09 63 61 73 65 20 30 78 30  AMS";...case 0x0
09b0: 30 30 30 30 31 38 31 3a 20 72 65 74 75 72 6e 20  0000181: return 
09c0: 22 43 4b 41 5f 45 43 5f 50 4f 49 4e 54 22 3b 0a  "CKA_EC_POINT";.
09d0: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 32 30  ..case 0x0000020
09e0: 30 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 53  0: return "CKA_S
09f0: 45 43 4f 4e 44 41 52 59 5f 41 55 54 48 22 3b 0a  ECONDARY_AUTH";.
0a00: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 32 30  ..case 0x0000020
0a10: 31 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 41  1: return "CKA_A
0a20: 55 54 48 5f 50 49 4e 5f 46 4c 41 47 53 22 3b 0a  UTH_PIN_FLAGS";.
0a30: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 33 30  ..case 0x0000030
0a40: 30 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 48  0: return "CKA_H
0a50: 57 5f 46 45 41 54 55 52 45 5f 54 59 50 45 22 3b  W_FEATURE_TYPE";
0a60: 0a 09 09 63 61 73 65 20 30 78 30 30 30 30 30 33  ...case 0x000003
0a70: 30 31 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f  01: return "CKA_
0a80: 52 45 53 45 54 5f 4f 4e 5f 49 4e 49 54 22 3b 0a  RESET_ON_INIT";.
0a90: 09 09 63 61 73 65 20 30 78 30 30 30 30 30 33 30  ..case 0x0000030
0aa0: 32 3a 20 72 65 74 75 72 6e 20 22 43 4b 41 5f 48  2: return "CKA_H
0ab0: 41 53 5f 52 45 53 45 54 22 3b 0a 09 7d 0a 0a 09  AS_RESET";..}...
0ac0: 73 6e 70 72 69 6e 74 66 28 72 65 74 62 75 66 2c  snprintf(retbuf,
0ad0: 20 73 69 7a 65 6f 66 28 72 65 74 62 75 66 29 2c   sizeof(retbuf),
0ae0: 20 22 30 78 25 30 38 6c 78 22 2c 20 28 75 6e 73   "0x%08lx", (uns
0af0: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 61 74 74 72  igned long) attr
0b00: 69 62 29 3b 0a 09 72 65 74 62 75 66 5b 73 69 7a  ib);..retbuf[siz
0b10: 65 6f 66 28 72 65 74 62 75 66 29 20 2d 20 31 5d  eof(retbuf) - 1]
0b20: 20 3d 20 27 5c 30 27 3b 0a 0a 09 72 65 74 75 72   = '\0';...retur
0b30: 6e 28 72 65 74 62 75 66 29 3b 0a 7d 0a 0a 69 6e  n(retbuf);.}..in
0b40: 74 20 6d 61 69 6e 5f 70 6b 63 73 31 31 28 76 6f  t main_pkcs11(vo
0b50: 69 64 29 20 7b 0a 09 43 4b 5f 43 5f 49 4e 49 54  id) {..CK_C_INIT
0b60: 49 41 4c 49 5a 45 5f 41 52 47 53 20 69 6e 69 74  IALIZE_ARGS init
0b70: 61 72 67 73 3b 0a 09 43 4b 5f 49 4e 46 4f 20 63  args;..CK_INFO c
0b80: 6c 69 65 6e 74 69 6e 66 6f 3b 0a 09 43 4b 5f 55  lientinfo;..CK_U
0b90: 4c 4f 4e 47 20 6e 75 6d 53 6c 6f 74 73 2c 20 63  LONG numSlots, c
0ba0: 75 72 72 53 6c 6f 74 3b 0a 09 43 4b 5f 53 4c 4f  urrSlot;..CK_SLO
0bb0: 54 5f 49 44 5f 50 54 52 20 73 6c 6f 74 73 3b 0a  T_ID_PTR slots;.
0bc0: 09 43 4b 5f 53 4c 4f 54 5f 49 4e 46 4f 20 73 6c  .CK_SLOT_INFO sl
0bd0: 6f 74 49 6e 66 6f 3b 0a 09 43 4b 5f 54 4f 4b 45  otInfo;..CK_TOKE
0be0: 4e 5f 49 4e 46 4f 20 74 6f 6b 65 6e 49 6e 66 6f  N_INFO tokenInfo
0bf0: 3b 0a 09 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41  ;..CK_SESSION_HA
0c00: 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 3b 0a 09  NDLE hSession;..
0c10: 43 4b 5f 53 45 53 53 49 4f 4e 5f 49 4e 46 4f 20  CK_SESSION_INFO 
0c20: 73 65 73 73 69 6f 6e 49 6e 66 6f 3b 0a 09 43 4b  sessionInfo;..CK
0c30: 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68  _OBJECT_HANDLE h
0c40: 4f 62 6a 65 63 74 2c 20 2a 70 72 69 76 61 74 65  Object, *private
0c50: 4b 65 79 4f 62 6a 65 63 74 73 5f 72 6f 6f 74 2c  KeyObjects_root,
0c60: 20 2a 70 72 69 76 61 74 65 4b 65 79 4f 62 6a 65   *privateKeyObje
0c70: 63 74 73 2c 20 2a 63 75 72 72 50 72 69 76 4b 65  cts, *currPrivKe
0c80: 79 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 75 6c 4f  y;..CK_ULONG ulO
0c90: 62 6a 65 63 74 43 6f 75 6e 74 3b 0a 09 43 4b 5f  bjectCount;..CK_
0ca0: 41 54 54 52 49 42 55 54 45 20 74 65 6d 70 6c 61  ATTRIBUTE templa
0cb0: 74 65 5b 5d 20 3d 20 7b 0a 09 20 20 20 20 20 20  te[] = {..      
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0cd0: 20 20 20 20 20 7b 43 4b 41 5f 43 4c 41 53 53 2c       {CKA_CLASS,
0ce0: 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 20 20   NULL, 0},..    
0cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d00: 20 20 20 20 20 20 20 7b 43 4b 41 5f 54 4f 4b 45         {CKA_TOKE
0d10: 4e 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20  N, NULL, 0},..  
0d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d30: 20 20 20 20 20 20 20 20 20 7b 43 4b 41 5f 4c 41           {CKA_LA
0d40: 42 45 4c 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09  BEL, NULL, 0},..
0d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d60: 20 20 20 20 20 20 20 20 20 20 20 7b 43 4b 41 5f             {CKA_
0d70: 50 52 49 56 41 54 45 2c 20 4e 55 4c 4c 2c 20 30  PRIVATE, NULL, 0
0d80: 7d 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  },..            
0d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0da0: 43 4b 41 5f 49 44 2c 20 4e 55 4c 4c 2c 20 30 7d  CKA_ID, NULL, 0}
0db0: 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
0dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 43                {C
0dd0: 4b 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52  KA_SERIAL_NUMBER
0de0: 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 20  , NULL, 0},..   
0df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e00: 20 20 20 20 20 20 20 20 7b 43 4b 41 5f 53 55 42          {CKA_SUB
0e10: 4a 45 43 54 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a  JECT, NULL, 0},.
0e20: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0e30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 43 4b 41              {CKA
0e40: 5f 49 53 53 55 45 52 2c 20 4e 55 4c 4c 2c 20 30  _ISSUER, NULL, 0
0e50: 7d 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  },..            
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0e70: 43 4b 41 5f 50 52 49 56 41 54 45 2c 20 4e 55 4c  CKA_PRIVATE, NUL
0e80: 4c 2c 20 30 7d 2c 0a 09 20 20 20 20 20 20 20 20  L, 0},..        
0e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ea0: 20 20 20 7b 43 4b 41 5f 43 45 52 54 49 46 49 43     {CKA_CERTIFIC
0eb0: 41 54 45 5f 54 59 50 45 2c 20 4e 55 4c 4c 2c 20  ATE_TYPE, NULL, 
0ec0: 30 7d 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  0},..           
0ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ee0: 7b 43 4b 41 5f 4b 45 59 5f 54 59 50 45 2c 20 4e  {CKA_KEY_TYPE, N
0ef0: 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 20 20 20 20  ULL, 0},..      
0f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f10: 20 20 20 20 20 7b 43 4b 41 5f 53 49 47 4e 2c 20       {CKA_SIGN, 
0f20: 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 20 20 20 20 20  NULL, 0},..     
0f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f40: 20 20 20 20 20 20 7b 43 4b 41 5f 56 41 4c 55 45        {CKA_VALUE
0f50: 2c 20 4e 55 4c 4c 2c 20 30 7d 0a 09 20 20 20 20  , NULL, 0}..    
0f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f70: 20 20 20 20 20 20 7d 2c 20 2a 63 75 72 72 5f 61        }, *curr_a
0f80: 74 74 72 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 63  ttr;..CK_ULONG c
0f90: 75 72 72 5f 61 74 74 72 5f 69 64 78 3b 0a 09 43  urr_attr_idx;..C
0fa0: 4b 5f 55 4c 4f 4e 47 20 62 79 74 65 5f 69 64 78  K_ULONG byte_idx
0fb0: 3b 0a 09 43 4b 5f 55 54 46 38 43 48 41 52 20 75  ;..CK_UTF8CHAR u
0fc0: 73 65 72 5f 70 69 6e 5b 31 30 32 34 5d 2c 20 2a  ser_pin[1024], *
0fd0: 70 75 63 56 61 6c 75 65 3b 0a 09 43 4b 5f 4f 42  pucValue;..CK_OB
0fe0: 4a 45 43 54 5f 43 4c 41 53 53 20 6f 62 6a 65 63  JECT_CLASS objec
0ff0: 74 43 6c 61 73 73 3b 0a 09 43 4b 5f 42 59 54 45  tClass;..CK_BYTE
1000: 20 73 69 67 6e 61 74 75 72 65 5b 31 30 32 34 5d   signature[1024]
1010: 2c 20 65 6e 63 72 79 70 74 65 64 5f 62 75 66 5b  , encrypted_buf[
1020: 31 36 33 38 34 5d 2c 20 64 65 63 72 79 70 74 65  16384], decrypte
1030: 64 5f 62 75 66 5b 31 36 33 38 34 5d 3b 0a 09 43  d_buf[16384];..C
1040: 4b 5f 55 4c 4f 4e 47 20 73 69 67 6e 61 74 75 72  K_ULONG signatur
1050: 65 5f 6c 65 6e 2c 20 65 6e 63 72 79 70 74 65 64  e_len, encrypted
1060: 5f 62 75 66 6c 65 6e 2c 20 64 65 63 72 79 70 74  _buflen, decrypt
1070: 65 64 5f 62 75 66 6c 65 6e 3b 0a 09 43 4b 5f 4d  ed_buflen;..CK_M
1080: 45 43 48 41 4e 49 53 4d 20 6d 65 63 68 61 6e 69  ECHANISM mechani
1090: 73 6d 20 3d 20 7b 43 4b 4d 5f 52 53 41 5f 50 4b  sm = {CKM_RSA_PK
10a0: 43 53 2c 20 4e 55 4c 4c 2c 20 30 7d 3b 0a 09 43  CS, NULL, 0};..C
10b0: 4b 5f 52 56 20 63 68 6b 5f 72 76 3b 0a 09 69 6e  K_RV chk_rv;..in
10c0: 74 20 69 3b 0a 0a 09 70 72 69 76 61 74 65 4b 65  t i;...privateKe
10d0: 79 4f 62 6a 65 63 74 73 20 3d 20 6d 61 6c 6c 6f  yObjects = mallo
10e0: 63 28 73 69 7a 65 6f 66 28 2a 70 72 69 76 61 74  c(sizeof(*privat
10f0: 65 4b 65 79 4f 62 6a 65 63 74 73 29 20 2a 20 31  eKeyObjects) * 1
1100: 30 32 34 29 3b 0a 09 70 72 69 76 61 74 65 4b 65  024);..privateKe
1110: 79 4f 62 6a 65 63 74 73 5f 72 6f 6f 74 20 3d 20  yObjects_root = 
1120: 70 72 69 76 61 74 65 4b 65 79 4f 62 6a 65 63 74  privateKeyObject
1130: 73 3b 0a 09 66 6f 72 20 28 69 20 3d 20 30 3b 20  s;..for (i = 0; 
1140: 69 20 3c 20 31 30 32 34 3b 20 69 2b 2b 29 20 7b  i < 1024; i++) {
1150: 0a 09 09 70 72 69 76 61 74 65 4b 65 79 4f 62 6a  ...privateKeyObj
1160: 65 63 74 73 5b 69 5d 20 3d 20 43 4b 5f 49 4e 56  ects[i] = CK_INV
1170: 41 4c 49 44 5f 48 41 4e 44 4c 45 3b 0a 09 7d 0a  ALID_HANDLE;..}.
1180: 0a 09 69 6e 69 74 61 72 67 73 2e 43 72 65 61 74  ..initargs.Creat
1190: 65 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09  eMutex = NULL;..
11a0: 69 6e 69 74 61 72 67 73 2e 44 65 73 74 72 6f 79  initargs.Destroy
11b0: 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 69  Mutex = NULL;..i
11c0: 6e 69 74 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65  nitargs.LockMute
11d0: 78 20 3d 20 4e 55 4c 4c 3b 0a 09 69 6e 69 74 61  x = NULL;..inita
11e0: 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 20  rgs.UnlockMutex 
11f0: 3d 20 4e 55 4c 4c 3b 0a 09 69 6e 69 74 61 72 67  = NULL;..initarg
1200: 73 2e 66 6c 61 67 73 20 3d 20 43 4b 46 5f 4f 53  s.flags = CKF_OS
1210: 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 3b 0a 09 69 6e  _LOCKING_OK;..in
1220: 69 74 61 72 67 73 2e 70 52 65 73 65 72 76 65 64  itargs.pReserved
1230: 20 3d 20 4e 55 4c 4c 3b 0a 09 69 6e 69 74 61 72   = NULL;..initar
1240: 67 73 2e 4c 69 62 72 61 72 79 50 61 72 61 6d 65  gs.LibraryParame
1250: 74 65 72 73 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 63  ters = NULL;...c
1260: 68 6b 5f 72 76 20 3d 20 43 5f 49 6e 69 74 69 61  hk_rv = C_Initia
1270: 6c 69 7a 65 28 26 69 6e 69 74 61 72 67 73 29 3b  lize(&initargs);
1280: 0a 09 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20  ..if (chk_rv != 
1290: 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 69 6e 69 74  CKR_OK) {...init
12a0: 61 72 67 73 2e 43 72 65 61 74 65 4d 75 74 65 78  args.CreateMutex
12b0: 20 3d 20 4e 55 4c 4c 3b 0a 09 09 69 6e 69 74 61   = NULL;...inita
12c0: 72 67 73 2e 44 65 73 74 72 6f 79 4d 75 74 65 78  rgs.DestroyMutex
12d0: 20 3d 20 4e 55 4c 4c 3b 0a 09 09 69 6e 69 74 61   = NULL;...inita
12e0: 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 20 3d 20  rgs.LockMutex = 
12f0: 4e 55 4c 4c 3b 0a 09 09 69 6e 69 74 61 72 67 73  NULL;...initargs
1300: 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 20 3d 20 4e  .UnlockMutex = N
1310: 55 4c 4c 3b 0a 09 09 69 6e 69 74 61 72 67 73 2e  ULL;...initargs.
1320: 66 6c 61 67 73 20 3d 20 30 3b 0a 09 09 69 6e 69  flags = 0;...ini
1330: 74 61 72 67 73 2e 70 52 65 73 65 72 76 65 64 20  targs.pReserved 
1340: 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 63 68 6b 5f 72  = NULL;....chk_r
1350: 76 20 3d 20 43 5f 49 6e 69 74 69 61 6c 69 7a 65  v = C_Initialize
1360: 28 26 69 6e 69 74 61 72 67 73 29 3b 0a 09 09 69  (&initargs);...i
1370: 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52  f (chk_rv != CKR
1380: 5f 4f 4b 29 20 7b 0a 09 09 09 70 72 69 6e 74 66  _OK) {....printf
1390: 28 22 43 5f 49 6e 69 74 69 61 6c 69 7a 65 28 29  ("C_Initialize()
13a0: 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 09   failed.");.....
13b0: 72 65 74 75 72 6e 28 31 29 3b 0a 09 09 7d 0a 09  return(1);...}..
13c0: 7d 0a 0a 09 63 68 6b 5f 72 76 20 3d 20 43 5f 47  }...chk_rv = C_G
13d0: 65 74 49 6e 66 6f 28 26 63 6c 69 65 6e 74 69 6e  etInfo(&clientin
13e0: 66 6f 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 76  fo);..if (chk_rv
13f0: 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09   != CKR_OK) {...
1400: 72 65 74 75 72 6e 28 31 29 3b 0a 09 7d 0a 0a 09  return(1);..}...
1410: 70 72 69 6e 74 66 28 22 50 4b 43 53 23 31 31 20  printf("PKCS#11 
1420: 43 6c 69 65 6e 74 20 56 65 72 73 69 6f 6e 3a 20  Client Version: 
1430: 25 69 2e 25 69 2c 20 4c 69 62 72 61 72 79 20 56  %i.%i, Library V
1440: 65 72 73 69 6f 6e 20 25 69 2e 25 69 5c 6e 22 2c  ersion %i.%i\n",
1450: 20 63 6c 69 65 6e 74 69 6e 66 6f 2e 63 72 79 70   clientinfo.cryp
1460: 74 6f 6b 69 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f  tokiVersion.majo
1470: 72 2c 20 63 6c 69 65 6e 74 69 6e 66 6f 2e 63 72  r, clientinfo.cr
1480: 79 70 74 6f 6b 69 56 65 72 73 69 6f 6e 2e 6d 69  yptokiVersion.mi
1490: 6e 6f 72 2c 20 63 6c 69 65 6e 74 69 6e 66 6f 2e  nor, clientinfo.
14a0: 6c 69 62 72 61 72 79 56 65 72 73 69 6f 6e 2e 6d  libraryVersion.m
14b0: 61 6a 6f 72 2c 20 63 6c 69 65 6e 74 69 6e 66 6f  ajor, clientinfo
14c0: 2e 6c 69 62 72 61 72 79 56 65 72 73 69 6f 6e 2e  .libraryVersion.
14d0: 6d 69 6e 6f 72 29 3b 0a 09 70 72 69 6e 74 66 28  minor);..printf(
14e0: 22 50 4b 43 53 23 31 31 20 4d 61 6e 75 66 49 44  "PKCS#11 ManufID
14f0: 3a 20 25 2e 2a 73 2c 20 4c 69 62 72 61 72 79 44  : %.*s, LibraryD
1500: 65 73 63 3a 20 25 2e 2a 73 5c 6e 22 2c 20 33 32  esc: %.*s\n", 32
1510: 2c 20 63 6c 69 65 6e 74 69 6e 66 6f 2e 6d 61 6e  , clientinfo.man
1520: 75 66 61 63 74 75 72 65 72 49 44 2c 20 33 32 2c  ufacturerID, 32,
1530: 20 63 6c 69 65 6e 74 69 6e 66 6f 2e 6c 69 62 72   clientinfo.libr
1540: 61 72 79 44 65 73 63 72 69 70 74 69 6f 6e 29 3b  aryDescription);
1550: 0a 0a 09 63 68 6b 5f 72 76 20 3d 20 43 5f 47 65  ...chk_rv = C_Ge
1560: 74 53 6c 6f 74 4c 69 73 74 28 46 41 4c 53 45 2c  tSlotList(FALSE,
1570: 20 4e 55 4c 4c 2c 20 26 6e 75 6d 53 6c 6f 74 73   NULL, &numSlots
1580: 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 76 20 21  );..if (chk_rv !
1590: 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 72 65  = CKR_OK) {...re
15a0: 74 75 72 6e 28 31 29 3b 0a 09 7d 0a 0a 09 70 72  turn(1);..}...pr
15b0: 69 6e 74 66 28 22 4e 75 6d 62 65 72 20 6f 66 20  intf("Number of 
15c0: 53 6c 6f 74 73 3a 20 25 6c 75 5c 6e 22 2c 20 6e  Slots: %lu\n", n
15d0: 75 6d 53 6c 6f 74 73 29 3b 0a 0a 09 73 6c 6f 74  umSlots);...slot
15e0: 73 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f  s = malloc(sizeo
15f0: 66 28 2a 73 6c 6f 74 73 29 20 2a 20 6e 75 6d 53  f(*slots) * numS
1600: 6c 6f 74 73 29 3b 0a 0a 09 63 68 6b 5f 72 76 20  lots);...chk_rv 
1610: 3d 20 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 28  = C_GetSlotList(
1620: 46 41 4c 53 45 2c 20 73 6c 6f 74 73 2c 20 26 6e  FALSE, slots, &n
1630: 75 6d 53 6c 6f 74 73 29 3b 0a 09 69 66 20 28 63  umSlots);..if (c
1640: 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29  hk_rv != CKR_OK)
1650: 20 7b 0a 09 09 72 65 74 75 72 6e 28 31 29 3b 0a   {...return(1);.
1660: 09 7d 0a 0a 09 66 6f 72 20 28 63 75 72 72 53 6c  .}...for (currSl
1670: 6f 74 20 3d 20 30 3b 20 63 75 72 72 53 6c 6f 74  ot = 0; currSlot
1680: 20 3c 20 6e 75 6d 53 6c 6f 74 73 3b 20 63 75 72   < numSlots; cur
1690: 72 53 6c 6f 74 2b 2b 29 20 7b 0a 09 09 70 72 69  rSlot++) {...pri
16a0: 6e 74 66 28 22 20 20 53 6c 6f 74 20 25 6c 75 3a  ntf("  Slot %lu:
16b0: 5c 6e 22 2c 20 63 75 72 72 53 6c 6f 74 29 3b 0a  \n", currSlot);.
16c0: 0a 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f 47 65  ...chk_rv = C_Ge
16d0: 74 53 6c 6f 74 49 6e 66 6f 28 73 6c 6f 74 73 5b  tSlotInfo(slots[
16e0: 63 75 72 72 53 6c 6f 74 5d 2c 20 26 73 6c 6f 74  currSlot], &slot
16f0: 49 6e 66 6f 29 3b 0a 09 09 69 66 20 28 63 68 6b  Info);...if (chk
1700: 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b  _rv != CKR_OK) {
1710: 0a 09 09 09 72 65 74 75 72 6e 28 31 29 3b 0a 09  ....return(1);..
1720: 09 7d 0a 0a 09 09 70 72 69 6e 74 66 28 22 20 20  .}....printf("  
1730: 20 20 44 65 73 63 20 20 20 3a 20 25 2e 2a 73 5c    Desc   : %.*s\
1740: 6e 22 2c 20 33 32 2c 20 73 6c 6f 74 49 6e 66 6f  n", 32, slotInfo
1750: 2e 73 6c 6f 74 44 65 73 63 72 69 70 74 69 6f 6e  .slotDescription
1760: 29 3b 0a 09 09 70 72 69 6e 74 66 28 22 20 20 20  );...printf("   
1770: 20 4d 61 6e 75 66 49 44 3a 20 25 2e 2a 73 5c 6e   ManufID: %.*s\n
1780: 22 2c 20 33 32 2c 20 73 6c 6f 74 49 6e 66 6f 2e  ", 32, slotInfo.
1790: 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 3b  manufacturerID);
17a0: 0a 09 09 70 72 69 6e 74 66 28 22 20 20 20 20 48  ...printf("    H
17b0: 57 56 65 72 73 20 3a 20 25 69 2e 25 69 5c 6e 22  WVers : %i.%i\n"
17c0: 2c 20 73 6c 6f 74 49 6e 66 6f 2e 68 61 72 64 77  , slotInfo.hardw
17d0: 61 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72  areVersion.major
17e0: 2c 20 73 6c 6f 74 49 6e 66 6f 2e 68 61 72 64 77  , slotInfo.hardw
17f0: 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72  areVersion.minor
1800: 29 3b 0a 09 09 70 72 69 6e 74 66 28 22 20 20 20  );...printf("   
1810: 20 46 57 56 65 72 73 20 3a 20 25 69 2e 25 69 5c   FWVers : %i.%i\
1820: 6e 22 2c 20 73 6c 6f 74 49 6e 66 6f 2e 66 69 72  n", slotInfo.fir
1830: 6d 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a  mwareVersion.maj
1840: 6f 72 2c 20 73 6c 6f 74 49 6e 66 6f 2e 66 69 72  or, slotInfo.fir
1850: 6d 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e  mwareVersion.min
1860: 6f 72 29 3b 0a 09 09 70 72 69 6e 74 66 28 22 20  or);...printf(" 
1870: 20 20 20 46 6c 61 67 73 20 20 3a 20 22 29 3b 0a     Flags  : ");.
1880: 09 09 69 66 20 28 28 73 6c 6f 74 49 6e 66 6f 2e  ..if ((slotInfo.
1890: 66 6c 61 67 73 20 26 20 43 4b 46 5f 54 4f 4b 45  flags & CKF_TOKE
18a0: 4e 5f 50 52 45 53 45 4e 54 29 20 3d 3d 20 43 4b  N_PRESENT) == CK
18b0: 46 5f 54 4f 4b 45 4e 5f 50 52 45 53 45 4e 54 29  F_TOKEN_PRESENT)
18c0: 20 7b 0a 09 09 09 70 72 69 6e 74 66 28 22 43 4b   {....printf("CK
18d0: 46 5f 54 4f 4b 45 4e 5f 50 52 45 53 45 4e 54 20  F_TOKEN_PRESENT 
18e0: 22 29 3b 0a 09 09 7d 0a 09 09 69 66 20 28 28 73  ");...}...if ((s
18f0: 6c 6f 74 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20  lotInfo.flags & 
1900: 43 4b 46 5f 52 45 4d 4f 56 41 42 4c 45 5f 44 45  CKF_REMOVABLE_DE
1910: 56 49 43 45 29 20 3d 3d 20 43 4b 46 5f 52 45 4d  VICE) == CKF_REM
1920: 4f 56 41 42 4c 45 5f 44 45 56 49 43 45 29 20 7b  OVABLE_DEVICE) {
1930: 0a 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f  ....printf("CKF_
1940: 52 45 4d 4f 56 41 42 4c 45 5f 44 45 56 49 43 45  REMOVABLE_DEVICE
1950: 20 22 29 3b 0a 09 09 7d 0a 09 09 69 66 20 28 28   ");...}...if ((
1960: 73 6c 6f 74 49 6e 66 6f 2e 66 6c 61 67 73 20 26  slotInfo.flags &
1970: 20 43 4b 46 5f 48 57 5f 53 4c 4f 54 29 20 3d 3d   CKF_HW_SLOT) ==
1980: 20 43 4b 46 5f 48 57 5f 53 4c 4f 54 29 20 7b 0a   CKF_HW_SLOT) {.
1990: 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 48  ...printf("CKF_H
19a0: 57 5f 53 4c 4f 54 20 22 29 3b 0a 09 09 7d 0a 09  W_SLOT ");...}..
19b0: 09 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 0a  .printf("\n");..
19c0: 09 09 69 66 20 28 28 73 6c 6f 74 49 6e 66 6f 2e  ..if ((slotInfo.
19d0: 66 6c 61 67 73 20 26 20 43 4b 46 5f 54 4f 4b 45  flags & CKF_TOKE
19e0: 4e 5f 50 52 45 53 45 4e 54 29 20 3d 3d 20 43 4b  N_PRESENT) == CK
19f0: 46 5f 54 4f 4b 45 4e 5f 50 52 45 53 45 4e 54 29  F_TOKEN_PRESENT)
1a00: 20 7b 0a 09 09 09 70 72 69 6e 74 66 28 22 20 20   {....printf("  
1a10: 20 20 54 6f 6b 65 6e 3a 5c 6e 22 29 3b 0a 0a 09    Token:\n");...
1a20: 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f 47 65 74  ..chk_rv = C_Get
1a30: 54 6f 6b 65 6e 49 6e 66 6f 28 73 6c 6f 74 73 5b  TokenInfo(slots[
1a40: 63 75 72 72 53 6c 6f 74 5d 2c 20 26 74 6f 6b 65  currSlot], &toke
1a50: 6e 49 6e 66 6f 29 3b 0a 09 09 09 69 66 20 28 63  nInfo);....if (c
1a60: 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29  hk_rv != CKR_OK)
1a70: 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 28 31 29   {.....return(1)
1a80: 3b 0a 09 09 09 7d 0a 0a 09 09 09 70 72 69 6e 74  ;....}.....print
1a90: 66 28 22 20 20 20 20 20 20 4c 61 62 65 6c 20 20  f("      Label  
1aa0: 3a 20 25 2e 2a 73 5c 6e 22 2c 20 33 32 2c 20 74  : %.*s\n", 32, t
1ab0: 6f 6b 65 6e 49 6e 66 6f 2e 6c 61 62 65 6c 29 3b  okenInfo.label);
1ac0: 0a 09 09 09 70 72 69 6e 74 66 28 22 20 20 20 20  ....printf("    
1ad0: 20 20 4d 61 6e 75 66 49 44 3a 20 25 2e 2a 73 5c    ManufID: %.*s\
1ae0: 6e 22 2c 20 33 32 2c 20 74 6f 6b 65 6e 49 6e 66  n", 32, tokenInf
1af0: 6f 2e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44  o.manufacturerID
1b00: 29 3b 0a 09 09 09 70 72 69 6e 74 66 28 22 20 20  );....printf("  
1b10: 20 20 20 20 4d 6f 64 65 6c 20 20 3a 20 25 2e 2a      Model  : %.*
1b20: 73 5c 6e 22 2c 20 31 36 2c 20 74 6f 6b 65 6e 49  s\n", 16, tokenI
1b30: 6e 66 6f 2e 6d 6f 64 65 6c 29 3b 0a 09 09 09 70  nfo.model);....p
1b40: 72 69 6e 74 66 28 22 20 20 20 20 20 20 53 65 72  rintf("      Ser
1b50: 4e 6f 20 20 3a 20 25 2e 2a 73 5c 6e 22 2c 20 31  No  : %.*s\n", 1
1b60: 36 2c 20 74 6f 6b 65 6e 49 6e 66 6f 2e 73 65 72  6, tokenInfo.ser
1b70: 69 61 6c 4e 75 6d 62 65 72 29 3b 0a 09 09 09 70  ialNumber);....p
1b80: 72 69 6e 74 66 28 22 20 20 20 20 20 20 48 57 56  rintf("      HWV
1b90: 65 72 73 20 3a 20 25 69 2e 25 69 5c 6e 22 2c 20  ers : %i.%i\n", 
1ba0: 74 6f 6b 65 6e 49 6e 66 6f 2e 68 61 72 64 77 61  tokenInfo.hardwa
1bb0: 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 2c  reVersion.major,
1bc0: 20 74 6f 6b 65 6e 49 6e 66 6f 2e 68 61 72 64 77   tokenInfo.hardw
1bd0: 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72  areVersion.minor
1be0: 29 3b 0a 09 09 09 70 72 69 6e 74 66 28 22 20 20  );....printf("  
1bf0: 20 20 20 20 46 57 56 65 72 73 20 3a 20 25 69 2e      FWVers : %i.
1c00: 25 69 5c 6e 22 2c 20 74 6f 6b 65 6e 49 6e 66 6f  %i\n", tokenInfo
1c10: 2e 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f 6e  .firmwareVersion
1c20: 2e 6d 61 6a 6f 72 2c 20 74 6f 6b 65 6e 49 6e 66  .major, tokenInf
1c30: 6f 2e 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f  o.firmwareVersio
1c40: 6e 2e 6d 69 6e 6f 72 29 3b 0a 09 09 09 70 72 69  n.minor);....pri
1c50: 6e 74 66 28 22 20 20 20 20 20 20 46 6c 61 67 73  ntf("      Flags
1c60: 20 20 3a 20 22 29 3b 0a 09 09 09 69 66 20 28 28    : ");....if ((
1c70: 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20  tokenInfo.flags 
1c80: 26 20 43 4b 46 5f 52 4e 47 29 20 3d 3d 20 43 4b  & CKF_RNG) == CK
1c90: 46 5f 52 4e 47 29 20 7b 0a 09 09 09 09 70 72 69  F_RNG) {.....pri
1ca0: 6e 74 66 28 22 43 4b 46 5f 52 4e 47 20 22 29 3b  ntf("CKF_RNG ");
1cb0: 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28 74 6f  ....}....if ((to
1cc0: 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20  kenInfo.flags & 
1cd0: 43 4b 46 5f 57 52 49 54 45 5f 50 52 4f 54 45 43  CKF_WRITE_PROTEC
1ce0: 54 45 44 29 20 3d 3d 20 43 4b 46 5f 57 52 49 54  TED) == CKF_WRIT
1cf0: 45 5f 50 52 4f 54 45 43 54 45 44 29 20 7b 0a 09  E_PROTECTED) {..
1d00: 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 57  ...printf("CKF_W
1d10: 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 20 22  RITE_PROTECTED "
1d20: 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28  );....}....if ((
1d30: 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20  tokenInfo.flags 
1d40: 26 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52 45 51 55  & CKF_LOGIN_REQU
1d50: 49 52 45 44 29 20 3d 3d 20 43 4b 46 5f 4c 4f 47  IRED) == CKF_LOG
1d60: 49 4e 5f 52 45 51 55 49 52 45 44 29 20 7b 0a 09  IN_REQUIRED) {..
1d70: 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 4c  ...printf("CKF_L
1d80: 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 20 22 29  OGIN_REQUIRED ")
1d90: 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28 74  ;....}....if ((t
1da0: 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26  okenInfo.flags &
1db0: 20 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 49 4e   CKF_USER_PIN_IN
1dc0: 49 54 49 41 4c 49 5a 45 44 29 20 3d 3d 20 43 4b  ITIALIZED) == CK
1dd0: 46 5f 55 53 45 52 5f 50 49 4e 5f 49 4e 49 54 49  F_USER_PIN_INITI
1de0: 41 4c 49 5a 45 44 29 20 7b 0a 09 09 09 09 70 72  ALIZED) {.....pr
1df0: 69 6e 74 66 28 22 43 4b 46 5f 55 53 45 52 5f 50  intf("CKF_USER_P
1e00: 49 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 44 20 22  IN_INITIALIZED "
1e10: 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28  );....}....if ((
1e20: 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20  tokenInfo.flags 
1e30: 26 20 43 4b 46 5f 52 45 53 54 4f 52 45 5f 4b 45  & CKF_RESTORE_KE
1e40: 59 5f 4e 4f 54 5f 4e 45 45 44 45 44 29 20 3d 3d  Y_NOT_NEEDED) ==
1e50: 20 43 4b 46 5f 52 45 53 54 4f 52 45 5f 4b 45 59   CKF_RESTORE_KEY
1e60: 5f 4e 4f 54 5f 4e 45 45 44 45 44 29 20 7b 0a 09  _NOT_NEEDED) {..
1e70: 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 52  ...printf("CKF_R
1e80: 45 53 54 4f 52 45 5f 4b 45 59 5f 4e 4f 54 5f 4e  ESTORE_KEY_NOT_N
1e90: 45 45 44 45 44 20 22 29 3b 0a 09 09 09 7d 0a 09  EEDED ");....}..
1ea0: 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66 6f  ..if ((tokenInfo
1eb0: 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 43 4c 4f  .flags & CKF_CLO
1ec0: 43 4b 5f 4f 4e 5f 54 4f 4b 45 4e 29 20 3d 3d 20  CK_ON_TOKEN) == 
1ed0: 43 4b 46 5f 43 4c 4f 43 4b 5f 4f 4e 5f 54 4f 4b  CKF_CLOCK_ON_TOK
1ee0: 45 4e 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66  EN) {.....printf
1ef0: 28 22 43 4b 46 5f 43 4c 4f 43 4b 5f 4f 4e 5f 54  ("CKF_CLOCK_ON_T
1f00: 4f 4b 45 4e 20 22 29 3b 0a 09 09 09 7d 0a 09 09  OKEN ");....}...
1f10: 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e  .if ((tokenInfo.
1f20: 66 6c 61 67 73 20 26 20 43 4b 46 5f 50 52 4f 54  flags & CKF_PROT
1f30: 45 43 54 45 44 5f 41 55 54 48 45 4e 54 49 43 41  ECTED_AUTHENTICA
1f40: 54 49 4f 4e 5f 50 41 54 48 29 20 3d 3d 20 43 4b  TION_PATH) == CK
1f50: 46 5f 50 52 4f 54 45 43 54 45 44 5f 41 55 54 48  F_PROTECTED_AUTH
1f60: 45 4e 54 49 43 41 54 49 4f 4e 5f 50 41 54 48 29  ENTICATION_PATH)
1f70: 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 43   {.....printf("C
1f80: 4b 46 5f 50 52 4f 54 45 43 54 45 44 5f 41 55 54  KF_PROTECTED_AUT
1f90: 48 45 4e 54 49 43 41 54 49 4f 4e 5f 50 41 54 48  HENTICATION_PATH
1fa0: 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20   ");....}....if 
1fb0: 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67  ((tokenInfo.flag
1fc0: 73 20 26 20 43 4b 46 5f 44 55 41 4c 5f 43 52 59  s & CKF_DUAL_CRY
1fd0: 50 54 4f 5f 4f 50 45 52 41 54 49 4f 4e 53 29 20  PTO_OPERATIONS) 
1fe0: 3d 3d 20 43 4b 46 5f 44 55 41 4c 5f 43 52 59 50  == CKF_DUAL_CRYP
1ff0: 54 4f 5f 4f 50 45 52 41 54 49 4f 4e 53 29 20 7b  TO_OPERATIONS) {
2000: 0a 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46  .....printf("CKF
2010: 5f 44 55 41 4c 5f 43 52 59 50 54 4f 5f 4f 50 45  _DUAL_CRYPTO_OPE
2020: 52 41 54 49 4f 4e 53 20 22 29 3b 0a 09 09 09 7d  RATIONS ");....}
2030: 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e  ....if ((tokenIn
2040: 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 54  fo.flags & CKF_T
2050: 4f 4b 45 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 44  OKEN_INITIALIZED
2060: 29 20 3d 3d 20 43 4b 46 5f 54 4f 4b 45 4e 5f 49  ) == CKF_TOKEN_I
2070: 4e 49 54 49 41 4c 49 5a 45 44 29 20 7b 0a 09 09  NITIALIZED) {...
2080: 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 54 4f  ..printf("CKF_TO
2090: 4b 45 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 44 20  KEN_INITIALIZED 
20a0: 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28  ");....}....if (
20b0: 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73  (tokenInfo.flags
20c0: 20 26 20 43 4b 46 5f 53 45 43 4f 4e 44 41 52 59   & CKF_SECONDARY
20d0: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 29  _AUTHENTICATION)
20e0: 20 3d 3d 20 43 4b 46 5f 53 45 43 4f 4e 44 41 52   == CKF_SECONDAR
20f0: 59 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  Y_AUTHENTICATION
2100: 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22  ) {.....printf("
2110: 43 4b 46 5f 53 45 43 4f 4e 44 41 52 59 5f 41 55  CKF_SECONDARY_AU
2120: 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 22 29 3b  THENTICATION ");
2130: 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 28 74 6f  ....}....if ((to
2140: 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20  kenInfo.flags & 
2150: 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 43 4f 55  CKF_USER_PIN_COU
2160: 4e 54 5f 4c 4f 57 29 20 3d 3d 20 43 4b 46 5f 55  NT_LOW) == CKF_U
2170: 53 45 52 5f 50 49 4e 5f 43 4f 55 4e 54 5f 4c 4f  SER_PIN_COUNT_LO
2180: 57 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28  W) {.....printf(
2190: 22 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 43 4f  "CKF_USER_PIN_CO
21a0: 55 4e 54 5f 4c 4f 57 20 22 29 3b 0a 09 09 09 7d  UNT_LOW ");....}
21b0: 0a 09 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e  ....if ((tokenIn
21c0: 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 55  fo.flags & CKF_U
21d0: 53 45 52 5f 50 49 4e 5f 46 49 4e 41 4c 5f 54 52  SER_PIN_FINAL_TR
21e0: 59 29 20 3d 3d 20 43 4b 46 5f 55 53 45 52 5f 50  Y) == CKF_USER_P
21f0: 49 4e 5f 46 49 4e 41 4c 5f 54 52 59 29 20 7b 0a  IN_FINAL_TRY) {.
2200: 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f  ....printf("CKF_
2210: 55 53 45 52 5f 50 49 4e 5f 46 49 4e 41 4c 5f 54  USER_PIN_FINAL_T
2220: 52 59 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69  RY ");....}....i
2230: 66 20 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c  f ((tokenInfo.fl
2240: 61 67 73 20 26 20 43 4b 46 5f 55 53 45 52 5f 50  ags & CKF_USER_P
2250: 49 4e 5f 4c 4f 43 4b 45 44 29 20 3d 3d 20 43 4b  IN_LOCKED) == CK
2260: 46 5f 55 53 45 52 5f 50 49 4e 5f 4c 4f 43 4b 45  F_USER_PIN_LOCKE
2270: 44 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28  D) {.....printf(
2280: 22 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 4c 4f  "CKF_USER_PIN_LO
2290: 43 4b 45 44 20 22 29 3b 0a 09 09 09 7d 0a 09 09  CKED ");....}...
22a0: 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e  .if ((tokenInfo.
22b0: 66 6c 61 67 73 20 26 20 43 4b 46 5f 55 53 45 52  flags & CKF_USER
22c0: 5f 50 49 4e 5f 54 4f 5f 42 45 5f 43 48 41 4e 47  _PIN_TO_BE_CHANG
22d0: 45 44 29 20 3d 3d 20 43 4b 46 5f 55 53 45 52 5f  ED) == CKF_USER_
22e0: 50 49 4e 5f 54 4f 5f 42 45 5f 43 48 41 4e 47 45  PIN_TO_BE_CHANGE
22f0: 44 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28  D) {.....printf(
2300: 22 43 4b 46 5f 55 53 45 52 5f 50 49 4e 5f 54 4f  "CKF_USER_PIN_TO
2310: 5f 42 45 5f 43 48 41 4e 47 45 44 20 22 29 3b 0a  _BE_CHANGED ");.
2320: 09 09 09 7d 0a 09 09 09 69 66 20 28 28 74 6f 6b  ...}....if ((tok
2330: 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43  enInfo.flags & C
2340: 4b 46 5f 53 4f 5f 50 49 4e 5f 43 4f 55 4e 54 5f  KF_SO_PIN_COUNT_
2350: 4c 4f 57 29 20 3d 3d 20 43 4b 46 5f 53 4f 5f 50  LOW) == CKF_SO_P
2360: 49 4e 5f 43 4f 55 4e 54 5f 4c 4f 57 29 20 7b 0a  IN_COUNT_LOW) {.
2370: 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f  ....printf("CKF_
2380: 53 4f 5f 50 49 4e 5f 43 4f 55 4e 54 5f 4c 4f 57  SO_PIN_COUNT_LOW
2390: 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20   ");....}....if 
23a0: 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67  ((tokenInfo.flag
23b0: 73 20 26 20 43 4b 46 5f 53 4f 5f 50 49 4e 5f 46  s & CKF_SO_PIN_F
23c0: 49 4e 41 4c 5f 54 52 59 29 20 3d 3d 20 43 4b 46  INAL_TRY) == CKF
23d0: 5f 53 4f 5f 50 49 4e 5f 46 49 4e 41 4c 5f 54 52  _SO_PIN_FINAL_TR
23e0: 59 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28  Y) {.....printf(
23f0: 22 43 4b 46 5f 53 4f 5f 50 49 4e 5f 46 49 4e 41  "CKF_SO_PIN_FINA
2400: 4c 5f 54 52 59 20 22 29 3b 0a 09 09 09 7d 0a 09  L_TRY ");....}..
2410: 09 09 69 66 20 28 28 74 6f 6b 65 6e 49 6e 66 6f  ..if ((tokenInfo
2420: 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 53 4f 5f  .flags & CKF_SO_
2430: 50 49 4e 5f 4c 4f 43 4b 45 44 29 20 3d 3d 20 43  PIN_LOCKED) == C
2440: 4b 46 5f 53 4f 5f 50 49 4e 5f 4c 4f 43 4b 45 44  KF_SO_PIN_LOCKED
2450: 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22  ) {.....printf("
2460: 43 4b 46 5f 53 4f 5f 50 49 4e 5f 4c 4f 43 4b 45  CKF_SO_PIN_LOCKE
2470: 44 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 69 66  D ");....}....if
2480: 20 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61   ((tokenInfo.fla
2490: 67 73 20 26 20 43 4b 46 5f 53 4f 5f 50 49 4e 5f  gs & CKF_SO_PIN_
24a0: 54 4f 5f 42 45 5f 43 48 41 4e 47 45 44 29 20 3d  TO_BE_CHANGED) =
24b0: 3d 20 43 4b 46 5f 53 4f 5f 50 49 4e 5f 54 4f 5f  = CKF_SO_PIN_TO_
24c0: 42 45 5f 43 48 41 4e 47 45 44 29 20 7b 0a 09 09  BE_CHANGED) {...
24d0: 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 53 4f  ..printf("CKF_SO
24e0: 5f 50 49 4e 5f 54 4f 5f 42 45 5f 43 48 41 4e 47  _PIN_TO_BE_CHANG
24f0: 45 44 20 22 29 3b 0a 09 09 09 7d 0a 09 09 09 70  ED ");....}....p
2500: 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 09 09 7d  rintf("\n");...}
2510: 0a 09 7d 0a 0a 09 63 68 6b 5f 72 76 20 3d 20 43  ..}...chk_rv = C
2520: 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 28 73 6c 6f  _OpenSession(slo
2530: 74 73 5b 30 5d 2c 20 43 4b 46 5f 53 45 52 49 41  ts[0], CKF_SERIA
2540: 4c 5f 53 45 53 53 49 4f 4e 2c 20 4e 55 4c 4c 2c  L_SESSION, NULL,
2550: 20 4e 55 4c 4c 2c 20 26 68 53 65 73 73 69 6f 6e   NULL, &hSession
2560: 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 76 20 3d  );..if (chk_rv =
2570: 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 69 66  = CKR_OK) {...if
2580: 20 28 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61   ((tokenInfo.fla
2590: 67 73 20 26 20 43 4b 46 5f 4c 4f 47 49 4e 5f 52  gs & CKF_LOGIN_R
25a0: 45 51 55 49 52 45 44 29 20 3d 3d 20 43 4b 46 5f  EQUIRED) == CKF_
25b0: 4c 4f 47 49 4e 5f 52 45 51 55 49 52 45 44 29 20  LOGIN_REQUIRED) 
25c0: 7b 0a 09 09 09 70 72 69 6e 74 66 28 22 2a 2a 20  {....printf("** 
25d0: 45 4e 54 45 52 20 50 49 4e 3a 20 22 29 3b 0a 09  ENTER PIN: ");..
25e0: 09 09 66 66 6c 75 73 68 28 73 74 64 6f 75 74 29  ..fflush(stdout)
25f0: 3b 0a 0a 09 09 09 66 67 65 74 73 28 28 63 68 61  ;.....fgets((cha
2600: 72 20 2a 29 20 75 73 65 72 5f 70 69 6e 2c 20 73  r *) user_pin, s
2610: 69 7a 65 6f 66 28 75 73 65 72 5f 70 69 6e 29 2c  izeof(user_pin),
2620: 20 73 74 64 69 6e 29 3b 0a 09 09 09 77 68 69 6c   stdin);....whil
2630: 65 20 28 75 73 65 72 5f 70 69 6e 5b 73 74 72 6c  e (user_pin[strl
2640: 65 6e 28 28 63 68 61 72 20 2a 29 20 75 73 65 72  en((char *) user
2650: 5f 70 69 6e 29 20 2d 20 31 5d 20 3c 20 27 20 27  _pin) - 1] < ' '
2660: 29 20 7b 0a 09 09 09 09 75 73 65 72 5f 70 69 6e  ) {.....user_pin
2670: 5b 73 74 72 6c 65 6e 28 28 63 68 61 72 20 2a 29  [strlen((char *)
2680: 20 75 73 65 72 5f 70 69 6e 29 20 2d 20 31 5d 20   user_pin) - 1] 
2690: 3d 20 27 5c 30 27 3b 0a 09 09 09 7d 0a 0a 09 09  = '\0';....}....
26a0: 09 63 68 6b 5f 72 76 20 3d 20 43 5f 4c 6f 67 69  .chk_rv = C_Logi
26b0: 6e 28 68 53 65 73 73 69 6f 6e 2c 20 43 4b 55 5f  n(hSession, CKU_
26c0: 55 53 45 52 2c 20 75 73 65 72 5f 70 69 6e 2c 20  USER, user_pin, 
26d0: 73 74 72 6c 65 6e 28 28 63 68 61 72 20 2a 29 20  strlen((char *) 
26e0: 75 73 65 72 5f 70 69 6e 29 29 3b 0a 09 09 7d 20  user_pin));...} 
26f0: 65 6c 73 65 20 7b 0a 09 09 09 63 68 6b 5f 72 76  else {....chk_rv
2700: 20 3d 20 43 5f 4c 6f 67 69 6e 28 68 53 65 73 73   = C_Login(hSess
2710: 69 6f 6e 2c 20 43 4b 55 5f 55 53 45 52 2c 20 4e  ion, CKU_USER, N
2720: 55 4c 4c 2c 20 30 29 3b 0a 09 09 7d 0a 09 09 69  ULL, 0);...}...i
2730: 66 20 28 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52  f (chk_rv == CKR
2740: 5f 4f 4b 29 20 7b 0a 09 09 09 70 72 69 6e 74 66  _OK) {....printf
2750: 28 22 4c 6f 67 69 6e 20 74 6f 20 64 65 76 69 63  ("Login to devic
2760: 65 20 73 75 63 63 65 65 64 2e 5c 6e 22 29 3b 0a  e succeed.\n");.
2770: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 70 72  ..} else {....pr
2780: 69 6e 74 66 28 22 4c 6f 67 69 6e 20 74 6f 20 64  intf("Login to d
2790: 65 76 69 63 65 20 66 61 69 6c 65 64 2e 5c 6e 22  evice failed.\n"
27a0: 29 3b 0a 09 09 7d 0a 0a 09 09 63 68 6b 5f 72 76  );...}....chk_rv
27b0: 20 3d 20 43 5f 47 65 74 53 65 73 73 69 6f 6e 49   = C_GetSessionI
27c0: 6e 66 6f 28 68 53 65 73 73 69 6f 6e 2c 20 26 73  nfo(hSession, &s
27d0: 65 73 73 69 6f 6e 49 6e 66 6f 29 3b 0a 09 09 69  essionInfo);...i
27e0: 66 20 28 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52  f (chk_rv == CKR
27f0: 5f 4f 4b 29 20 7b 0a 09 09 09 70 72 69 6e 74 66  _OK) {....printf
2800: 28 22 53 65 73 73 69 6f 6e 20 49 6e 66 6f 3a 5c  ("Session Info:\
2810: 6e 22 29 3b 0a 09 09 09 70 72 69 6e 74 66 28 22  n");....printf("
2820: 20 20 53 6c 6f 74 20 49 44 3a 20 25 6c 75 5c 6e    Slot ID: %lu\n
2830: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  ", (unsigned lon
2840: 67 29 20 73 65 73 73 69 6f 6e 49 6e 66 6f 2e 73  g) sessionInfo.s
2850: 6c 6f 74 49 44 29 3b 0a 09 09 09 70 72 69 6e 74  lotID);....print
2860: 66 28 22 20 20 44 65 76 20 45 72 72 3a 20 25 6c  f("  Dev Err: %l
2870: 75 5c 6e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20  u\n", (unsigned 
2880: 6c 6f 6e 67 29 20 73 65 73 73 69 6f 6e 49 6e 66  long) sessionInf
2890: 6f 2e 75 6c 44 65 76 69 63 65 45 72 72 6f 72 29  o.ulDeviceError)
28a0: 3b 0a 0a 09 09 09 70 72 69 6e 74 66 28 22 20 20  ;.....printf("  
28b0: 53 74 61 74 65 20 20 3a 20 22 29 3b 0a 09 09 09  State  : ");....
28c0: 69 66 20 28 73 65 73 73 69 6f 6e 49 6e 66 6f 2e  if (sessionInfo.
28d0: 73 74 61 74 65 20 3d 3d 20 43 4b 53 5f 52 4f 5f  state == CKS_RO_
28e0: 50 55 42 4c 49 43 5f 53 45 53 53 49 4f 4e 29 20  PUBLIC_SESSION) 
28f0: 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b  {.....printf("CK
2900: 53 5f 52 4f 5f 50 55 42 4c 49 43 5f 53 45 53 53  S_RO_PUBLIC_SESS
2910: 49 4f 4e 5c 6e 22 29 3b 0a 09 09 09 7d 20 65 6c  ION\n");....} el
2920: 73 65 20 69 66 20 28 73 65 73 73 69 6f 6e 49 6e  se if (sessionIn
2930: 66 6f 2e 73 74 61 74 65 20 3d 3d 20 43 4b 53 5f  fo.state == CKS_
2940: 52 4f 5f 55 53 45 52 5f 46 55 4e 43 54 49 4f 4e  RO_USER_FUNCTION
2950: 53 29 20 7b 0a 09 09 09 09 70 72 69 6e 74 66 28  S) {.....printf(
2960: 22 43 4b 53 5f 52 4f 5f 55 53 45 52 5f 46 55 4e  "CKS_RO_USER_FUN
2970: 43 54 49 4f 4e 53 5c 6e 22 29 3b 0a 09 09 09 7d  CTIONS\n");....}
2980: 20 65 6c 73 65 20 69 66 20 28 73 65 73 73 69 6f   else if (sessio
2990: 6e 49 6e 66 6f 2e 73 74 61 74 65 20 3d 3d 20 43  nInfo.state == C
29a0: 4b 53 5f 52 57 5f 50 55 42 4c 49 43 5f 53 45 53  KS_RW_PUBLIC_SES
29b0: 53 49 4f 4e 29 20 7b 0a 09 09 09 09 70 72 69 6e  SION) {.....prin
29c0: 74 66 28 22 43 4b 53 5f 52 57 5f 50 55 42 4c 49  tf("CKS_RW_PUBLI
29d0: 43 5f 53 45 53 53 49 4f 4e 5c 6e 22 29 3b 0a 09  C_SESSION\n");..
29e0: 09 09 7d 20 65 6c 73 65 20 69 66 20 28 73 65 73  ..} else if (ses
29f0: 73 69 6f 6e 49 6e 66 6f 2e 73 74 61 74 65 20 3d  sionInfo.state =
2a00: 3d 20 43 4b 53 5f 52 57 5f 55 53 45 52 5f 46 55  = CKS_RW_USER_FU
2a10: 4e 43 54 49 4f 4e 53 29 20 7b 0a 09 09 09 09 70  NCTIONS) {.....p
2a20: 72 69 6e 74 66 28 22 43 4b 53 5f 52 57 5f 55 53  rintf("CKS_RW_US
2a30: 45 52 5f 46 55 4e 43 54 49 4f 4e 53 5c 6e 22 29  ER_FUNCTIONS\n")
2a40: 3b 0a 09 09 09 7d 20 65 6c 73 65 20 69 66 20 28  ;....} else if (
2a50: 73 65 73 73 69 6f 6e 49 6e 66 6f 2e 73 74 61 74  sessionInfo.stat
2a60: 65 20 3d 3d 20 43 4b 53 5f 52 4f 5f 50 55 42 4c  e == CKS_RO_PUBL
2a70: 49 43 5f 53 45 53 53 49 4f 4e 29 20 7b 0a 09 09  IC_SESSION) {...
2a80: 09 09 70 72 69 6e 74 66 28 22 43 4b 53 5f 52 57  ..printf("CKS_RW
2a90: 5f 53 4f 5f 46 55 4e 43 54 49 4f 4e 53 5c 6e 22  _SO_FUNCTIONS\n"
2aa0: 29 3b 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  );....} else {..
2ab0: 09 09 09 70 72 69 6e 74 66 28 22 55 6e 6b 6e 6f  ...printf("Unkno
2ac0: 77 6e 20 28 25 6c 75 29 22 2c 20 28 75 6e 73 69  wn (%lu)", (unsi
2ad0: 67 6e 65 64 20 6c 6f 6e 67 29 20 73 65 73 73 69  gned long) sessi
2ae0: 6f 6e 49 6e 66 6f 2e 73 74 61 74 65 29 3b 0a 09  onInfo.state);..
2af0: 09 09 7d 0a 0a 09 09 09 70 72 69 6e 74 66 28 22  ..}.....printf("
2b00: 20 20 46 6c 61 67 73 20 20 3a 20 22 29 3b 0a 09    Flags  : ");..
2b10: 09 09 69 66 20 28 28 73 65 73 73 69 6f 6e 49 6e  ..if ((sessionIn
2b20: 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b 46 5f 52  fo.flags & CKF_R
2b30: 57 5f 53 45 53 53 49 4f 4e 29 20 3d 3d 20 43 4b  W_SESSION) == CK
2b40: 46 5f 52 57 5f 53 45 53 53 49 4f 4e 29 20 7b 0a  F_RW_SESSION) {.
2b50: 09 09 09 09 70 72 69 6e 74 66 28 22 43 4b 46 5f  ....printf("CKF_
2b60: 52 57 5f 53 45 53 53 49 4f 4e 20 22 29 3b 0a 09  RW_SESSION ");..
2b70: 09 09 7d 0a 09 09 09 69 66 20 28 28 73 65 73 73  ..}....if ((sess
2b80: 69 6f 6e 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20  ionInfo.flags & 
2b90: 43 4b 46 5f 53 45 52 49 41 4c 5f 53 45 53 53 49  CKF_SERIAL_SESSI
2ba0: 4f 4e 29 20 3d 3d 20 43 4b 46 5f 53 45 52 49 41  ON) == CKF_SERIA
2bb0: 4c 5f 53 45 53 53 49 4f 4e 29 20 7b 0a 09 09 09  L_SESSION) {....
2bc0: 09 70 72 69 6e 74 66 28 22 43 4b 46 5f 53 45 52  .printf("CKF_SER
2bd0: 49 41 4c 5f 53 45 53 53 49 4f 4e 20 22 29 3b 0a  IAL_SESSION ");.
2be0: 09 09 09 7d 0a 09 09 09 70 72 69 6e 74 66 28 22  ...}....printf("
2bf0: 5c 6e 22 29 3b 0a 09 09 7d 20 65 6c 73 65 20 7b  \n");...} else {
2c00: 0a 09 09 09 70 72 69 6e 74 66 28 22 47 65 74 53  ....printf("GetS
2c10: 65 73 73 69 6f 6e 49 6e 66 6f 28 29 20 66 61 69  essionInfo() fai
2c20: 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09 7d 0a 0a 09  led.\n");...}...
2c30: 09 63 68 6b 5f 72 76 20 3d 20 43 5f 46 69 6e 64  .chk_rv = C_Find
2c40: 4f 62 6a 65 63 74 73 49 6e 69 74 28 68 53 65 73  ObjectsInit(hSes
2c50: 73 69 6f 6e 2c 20 4e 55 4c 4c 2c 20 30 29 3b 0a  sion, NULL, 0);.
2c60: 09 09 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d 20  ..if (chk_rv == 
2c70: 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 77 68 69  CKR_OK) {....whi
2c80: 6c 65 20 28 31 29 20 7b 0a 09 09 09 09 63 68 6b  le (1) {.....chk
2c90: 5f 72 76 20 3d 20 43 5f 46 69 6e 64 4f 62 6a 65  _rv = C_FindObje
2ca0: 63 74 73 28 68 53 65 73 73 69 6f 6e 2c 20 26 68  cts(hSession, &h
2cb0: 4f 62 6a 65 63 74 2c 20 31 2c 20 26 75 6c 4f 62  Object, 1, &ulOb
2cc0: 6a 65 63 74 43 6f 75 6e 74 29 3b 0a 09 09 09 09  jectCount);.....
2cd0: 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b  if (chk_rv != CK
2ce0: 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 09 70 72 69  R_OK) {......pri
2cf0: 6e 74 66 28 22 46 69 6e 64 4f 62 6a 65 63 74 73  ntf("FindObjects
2d00: 28 29 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a  () failed.\n");.
2d10: 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09  .....break;.....
2d20: 7d 0a 0a 09 09 09 09 69 66 20 28 75 6c 4f 62 6a  }......if (ulObj
2d30: 65 63 74 43 6f 75 6e 74 20 3d 3d 20 30 29 20 7b  ectCount == 0) {
2d40: 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ......break;....
2d50: 09 7d 0a 0a 09 09 09 09 69 66 20 28 75 6c 4f 62  .}......if (ulOb
2d60: 6a 65 63 74 43 6f 75 6e 74 20 21 3d 20 31 29 20  jectCount != 1) 
2d70: 7b 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22 46  {......printf("F
2d80: 69 6e 64 4f 62 6a 65 63 74 73 28 29 20 72 65 74  indObjects() ret
2d90: 75 72 6e 65 64 20 61 20 77 65 69 72 64 20 6e 75  urned a weird nu
2da0: 6d 62 65 72 20 6f 66 20 6f 62 6a 65 63 74 73 2e  mber of objects.
2db0: 20 20 41 73 6b 65 64 20 66 6f 72 20 31 2c 20 67    Asked for 1, g
2dc0: 6f 74 20 25 6c 75 2e 5c 6e 22 2c 20 75 6c 4f 62  ot %lu.\n", ulOb
2dd0: 6a 65 63 74 43 6f 75 6e 74 29 3b 0a 09 09 09 09  jectCount);.....
2de0: 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09  .break;.....}...
2df0: 09 09 09 70 72 69 6e 74 66 28 22 20 20 4f 62 6a  ...printf("  Obj
2e00: 65 63 74 20 49 6e 66 6f 20 28 6f 62 6a 65 63 74  ect Info (object
2e10: 20 25 6c 75 29 3a 5c 6e 22 2c 20 28 75 6e 73 69   %lu):\n", (unsi
2e20: 67 6e 65 64 20 6c 6f 6e 67 29 20 68 4f 62 6a 65  gned long) hObje
2e30: 63 74 29 3b 0a 0a 09 09 09 09 66 6f 72 20 28 63  ct);......for (c
2e40: 75 72 72 5f 61 74 74 72 5f 69 64 78 20 3d 20 30  urr_attr_idx = 0
2e50: 3b 20 63 75 72 72 5f 61 74 74 72 5f 69 64 78 20  ; curr_attr_idx 
2e60: 3c 20 28 73 69 7a 65 6f 66 28 74 65 6d 70 6c 61  < (sizeof(templa
2e70: 74 65 29 20 2f 20 73 69 7a 65 6f 66 28 74 65 6d  te) / sizeof(tem
2e80: 70 6c 61 74 65 5b 30 5d 29 29 3b 20 63 75 72 72  plate[0])); curr
2e90: 5f 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a 09  _attr_idx++) {..
2ea0: 09 09 09 09 63 75 72 72 5f 61 74 74 72 20 3d 20  ....curr_attr = 
2eb0: 26 74 65 6d 70 6c 61 74 65 5b 63 75 72 72 5f 61  &template[curr_a
2ec0: 74 74 72 5f 69 64 78 5d 3b 0a 09 09 09 09 09 69  ttr_idx];......i
2ed0: 66 20 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56  f (curr_attr->pV
2ee0: 61 6c 75 65 29 20 7b 0a 09 09 09 09 09 09 66 72  alue) {.......fr
2ef0: 65 65 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56  ee(curr_attr->pV
2f00: 61 6c 75 65 29 3b 0a 09 09 09 09 09 7d 0a 0a 09  alue);......}...
2f10: 09 09 09 09 63 75 72 72 5f 61 74 74 72 2d 3e 70  ....curr_attr->p
2f20: 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09  Value = NULL;...
2f30: 09 09 7d 0a 0a 09 09 09 09 63 68 6b 5f 72 76 20  ..}......chk_rv 
2f40: 3d 20 43 5f 47 65 74 41 74 74 72 69 62 75 74 65  = C_GetAttribute
2f50: 56 61 6c 75 65 28 68 53 65 73 73 69 6f 6e 2c 20  Value(hSession, 
2f60: 68 4f 62 6a 65 63 74 2c 20 26 74 65 6d 70 6c 61  hObject, &templa
2f70: 74 65 5b 30 5d 2c 20 73 69 7a 65 6f 66 28 74 65  te[0], sizeof(te
2f80: 6d 70 6c 61 74 65 29 20 2f 20 73 69 7a 65 6f 66  mplate) / sizeof
2f90: 28 74 65 6d 70 6c 61 74 65 5b 30 5d 29 29 3b 0a  (template[0]));.
2fa0: 09 09 09 09 69 66 20 28 63 68 6b 5f 72 76 20 3d  ....if (chk_rv =
2fb0: 3d 20 43 4b 52 5f 41 54 54 52 49 42 55 54 45 5f  = CKR_ATTRIBUTE_
2fc0: 54 59 50 45 5f 49 4e 56 41 4c 49 44 20 7c 7c 20  TYPE_INVALID || 
2fd0: 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 41 54  chk_rv == CKR_AT
2fe0: 54 52 49 42 55 54 45 5f 53 45 4e 53 49 54 49 56  TRIBUTE_SENSITIV
2ff0: 45 20 7c 7c 20 63 68 6b 5f 72 76 20 3d 3d 20 43  E || chk_rv == C
3000: 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d  KR_BUFFER_TOO_SM
3010: 41 4c 4c 29 20 7b 0a 09 09 09 09 09 63 68 6b 5f  ALL) {......chk_
3020: 72 76 20 3d 20 43 4b 52 5f 4f 4b 3b 0a 09 09 09  rv = CKR_OK;....
3030: 09 7d 0a 0a 09 09 09 09 69 66 20 28 63 68 6b 5f  .}......if (chk_
3040: 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a  rv == CKR_OK) {.
3050: 09 09 09 09 09 66 6f 72 20 28 63 75 72 72 5f 61  .....for (curr_a
3060: 74 74 72 5f 69 64 78 20 3d 20 30 3b 20 63 75 72  ttr_idx = 0; cur
3070: 72 5f 61 74 74 72 5f 69 64 78 20 3c 20 28 73 69  r_attr_idx < (si
3080: 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65 29 20 2f  zeof(template) /
3090: 20 73 69 7a 65 6f 66 28 74 65 6d 70 6c 61 74 65   sizeof(template
30a0: 5b 30 5d 29 29 3b 20 63 75 72 72 5f 61 74 74 72  [0])); curr_attr
30b0: 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09 09  _idx++) {.......
30c0: 63 75 72 72 5f 61 74 74 72 20 3d 20 26 74 65 6d  curr_attr = &tem
30d0: 70 6c 61 74 65 5b 63 75 72 72 5f 61 74 74 72 5f  plate[curr_attr_
30e0: 69 64 78 5d 3b 0a 0a 09 09 09 09 09 09 69 66 20  idx];........if 
30f0: 28 28 28 43 4b 5f 4c 4f 4e 47 29 20 63 75 72 72  (((CK_LONG) curr
3100: 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65  _attr->ulValueLe
3110: 6e 29 20 21 3d 20 28 28 43 4b 5f 4c 4f 4e 47 29  n) != ((CK_LONG)
3120: 20 2d 31 29 29 20 7b 0a 09 09 09 09 09 09 09 63   -1)) {........c
3130: 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65  urr_attr->pValue
3140: 20 3d 20 6d 61 6c 6c 6f 63 28 63 75 72 72 5f 61   = malloc(curr_a
3150: 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 29  ttr->ulValueLen)
3160: 3b 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d  ;.......}......}
3170: 0a 0a 09 09 09 09 09 63 68 6b 5f 72 76 20 3d 20  .......chk_rv = 
3180: 43 5f 47 65 74 41 74 74 72 69 62 75 74 65 56 61  C_GetAttributeVa
3190: 6c 75 65 28 68 53 65 73 73 69 6f 6e 2c 20 68 4f  lue(hSession, hO
31a0: 62 6a 65 63 74 2c 20 26 74 65 6d 70 6c 61 74 65  bject, &template
31b0: 5b 30 5d 2c 20 73 69 7a 65 6f 66 28 74 65 6d 70  [0], sizeof(temp
31c0: 6c 61 74 65 29 20 2f 20 73 69 7a 65 6f 66 28 74  late) / sizeof(t
31d0: 65 6d 70 6c 61 74 65 5b 30 5d 29 29 3b 0a 09 09  emplate[0]));...
31e0: 09 09 09 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d  ...if (chk_rv ==
31f0: 20 43 4b 52 5f 4f 4b 20 7c 7c 20 63 68 6b 5f 72   CKR_OK || chk_r
3200: 76 20 3d 3d 20 43 4b 52 5f 41 54 54 52 49 42 55  v == CKR_ATTRIBU
3210: 54 45 5f 53 45 4e 53 49 54 49 56 45 20 7c 7c 20  TE_SENSITIVE || 
3220: 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 41 54  chk_rv == CKR_AT
3230: 54 52 49 42 55 54 45 5f 54 59 50 45 5f 49 4e 56  TRIBUTE_TYPE_INV
3240: 41 4c 49 44 20 7c 7c 20 63 68 6b 5f 72 76 20 3d  ALID || chk_rv =
3250: 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f  = CKR_BUFFER_TOO
3260: 5f 53 4d 41 4c 4c 29 20 7b 0a 09 09 09 09 09 09  _SMALL) {.......
3270: 66 6f 72 20 28 63 75 72 72 5f 61 74 74 72 5f 69  for (curr_attr_i
3280: 64 78 20 3d 20 30 3b 20 63 75 72 72 5f 61 74 74  dx = 0; curr_att
3290: 72 5f 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28  r_idx < (sizeof(
32a0: 74 65 6d 70 6c 61 74 65 29 20 2f 20 73 69 7a 65  template) / size
32b0: 6f 66 28 74 65 6d 70 6c 61 74 65 5b 30 5d 29 29  of(template[0]))
32c0: 3b 20 63 75 72 72 5f 61 74 74 72 5f 69 64 78 2b  ; curr_attr_idx+
32d0: 2b 29 20 7b 0a 09 09 09 09 09 09 09 63 75 72 72  +) {........curr
32e0: 5f 61 74 74 72 20 3d 20 26 74 65 6d 70 6c 61 74  _attr = &templat
32f0: 65 5b 63 75 72 72 5f 61 74 74 72 5f 69 64 78 5d  e[curr_attr_idx]
3300: 3b 0a 0a 09 09 09 09 09 09 09 69 66 20 28 63 75  ;.........if (cu
3310: 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 29  rr_attr->pValue)
3320: 20 7b 0a 09 09 09 09 09 09 09 09 73 77 69 74 63   {.........switc
3330: 68 20 28 63 75 72 72 5f 61 74 74 72 2d 3e 74 79  h (curr_attr->ty
3340: 70 65 29 20 7b 0a 09 09 09 09 09 09 09 09 09 63  pe) {..........c
3350: 61 73 65 20 43 4b 41 5f 4c 41 42 45 4c 3a 0a 09  ase CKA_LABEL:..
3360: 09 09 09 09 09 09 09 09 09 70 72 69 6e 74 66 28  .........printf(
3370: 22 20 20 20 20 5b 25 6c 75 5d 20 25 32 30 73 3a  "    [%lu] %20s:
3380: 20 25 2e 2a 73 5c 6e 22 2c 20 68 4f 62 6a 65 63   %.*s\n", hObjec
3390: 74 2c 20 70 6b 63 73 31 31 5f 61 74 74 72 69 62  t, pkcs11_attrib
33a0: 75 74 65 5f 74 6f 5f 6e 61 6d 65 28 63 75 72 72  ute_to_name(curr
33b0: 5f 61 74 74 72 2d 3e 74 79 70 65 29 2c 20 28 69  _attr->type), (i
33c0: 6e 74 29 20 63 75 72 72 5f 61 74 74 72 2d 3e 75  nt) curr_attr->u
33d0: 6c 56 61 6c 75 65 4c 65 6e 2c 20 28 63 68 61 72  lValueLen, (char
33e0: 20 2a 29 20 63 75 72 72 5f 61 74 74 72 2d 3e 70   *) curr_attr->p
33f0: 56 61 6c 75 65 29 3b 0a 09 09 09 09 09 09 09 09  Value);.........
3400: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 09 09  ..break;........
3410: 09 09 63 61 73 65 20 43 4b 41 5f 43 4c 41 53 53  ..case CKA_CLASS
3420: 3a 0a 09 09 09 09 09 09 09 09 09 09 6f 62 6a 65  :...........obje
3430: 63 74 43 6c 61 73 73 20 3d 20 2a 28 28 43 4b 5f  ctClass = *((CK_
3440: 4f 42 4a 45 43 54 5f 43 4c 41 53 53 20 2a 29 20  OBJECT_CLASS *) 
3450: 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75  curr_attr->pValu
3460: 65 29 3b 0a 0a 09 09 09 09 09 09 09 09 09 09 69  e);............i
3470: 66 20 28 6f 62 6a 65 63 74 43 6c 61 73 73 20 3d  f (objectClass =
3480: 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45  = CKO_PRIVATE_KE
3490: 59 29 20 7b 0a 09 09 09 09 09 09 09 09 09 09 09  Y) {............
34a0: 2a 70 72 69 76 61 74 65 4b 65 79 4f 62 6a 65 63  *privateKeyObjec
34b0: 74 73 20 3d 20 68 4f 62 6a 65 63 74 3b 0a 09 09  ts = hObject;...
34c0: 09 09 09 09 09 09 09 09 09 70 72 69 76 61 74 65  .........private
34d0: 4b 65 79 4f 62 6a 65 63 74 73 2b 2b 3b 0a 09 09  KeyObjects++;...
34e0: 09 09 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09  ........}.......
34f0: 09 09 09 63 61 73 65 20 43 4b 41 5f 54 4f 4b 45  ...case CKA_TOKE
3500: 4e 3a 0a 09 09 09 09 09 09 09 09 09 63 61 73 65  N:..........case
3510: 20 43 4b 41 5f 49 44 3a 0a 09 09 09 09 09 09 09   CKA_ID:........
3520: 09 09 63 61 73 65 20 43 4b 41 5f 53 45 52 49 41  ..case CKA_SERIA
3530: 4c 5f 4e 55 4d 42 45 52 3a 0a 09 09 09 09 09 09  L_NUMBER:.......
3540: 09 09 09 63 61 73 65 20 43 4b 41 5f 50 52 49 56  ...case CKA_PRIV
3550: 41 54 45 3a 0a 09 09 09 09 09 09 09 09 09 63 61  ATE:..........ca
3560: 73 65 20 43 4b 41 5f 43 45 52 54 49 46 49 43 41  se CKA_CERTIFICA
3570: 54 45 5f 54 59 50 45 3a 0a 09 09 09 09 09 09 09  TE_TYPE:........
3580: 09 09 63 61 73 65 20 43 4b 41 5f 4b 45 59 5f 54  ..case CKA_KEY_T
3590: 59 50 45 3a 0a 09 09 09 09 09 09 09 09 09 63 61  YPE:..........ca
35a0: 73 65 20 43 4b 41 5f 53 49 47 4e 3a 0a 09 09 09  se CKA_SIGN:....
35b0: 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 44  ......case CKA_D
35c0: 45 43 52 59 50 54 3a 0a 09 09 09 09 09 09 09 09  ECRYPT:.........
35d0: 09 09 70 75 63 56 61 6c 75 65 20 3d 20 63 75 72  ..pucValue = cur
35e0: 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 3b 0a  r_attr->pValue;.
35f0: 0a 09 09 09 09 09 09 09 09 09 09 70 72 69 6e 74  ...........print
3600: 66 28 22 20 20 20 20 5b 25 6c 75 5d 20 25 32 30  f("    [%lu] %20
3610: 73 3a 20 22 2c 20 68 4f 62 6a 65 63 74 2c 20 70  s: ", hObject, p
3620: 6b 63 73 31 31 5f 61 74 74 72 69 62 75 74 65 5f  kcs11_attribute_
3630: 74 6f 5f 6e 61 6d 65 28 63 75 72 72 5f 61 74 74  to_name(curr_att
3640: 72 2d 3e 74 79 70 65 29 29 3b 0a 0a 09 09 09 09  r->type));......
3650: 09 09 09 09 09 09 66 6f 72 20 28 62 79 74 65 5f  ......for (byte_
3660: 69 64 78 20 3d 20 30 3b 20 62 79 74 65 5f 69 64  idx = 0; byte_id
3670: 78 20 3c 20 63 75 72 72 5f 61 74 74 72 2d 3e 75  x < curr_attr->u
3680: 6c 56 61 6c 75 65 4c 65 6e 3b 20 62 79 74 65 5f  lValueLen; byte_
3690: 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09 09 09  idx++) {........
36a0: 09 09 09 09 70 72 69 6e 74 66 28 22 25 30 32 78  ....printf("%02x
36b0: 20 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 69 6e   ", (unsigned in
36c0: 74 29 20 70 75 63 56 61 6c 75 65 5b 62 79 74 65  t) pucValue[byte
36d0: 5f 69 64 78 5d 29 3b 0a 09 09 09 09 09 09 09 09  _idx]);.........
36e0: 09 09 7d 0a 0a 09 09 09 09 09 09 09 09 09 09 70  ..}............p
36f0: 72 69 6e 74 66 28 22 3b 3b 20 25 70 2f 25 6c 75  rintf(";; %p/%lu
3700: 5c 6e 22 2c 20 63 75 72 72 5f 61 74 74 72 2d 3e  \n", curr_attr->
3710: 70 56 61 6c 75 65 2c 20 63 75 72 72 5f 61 74 74  pValue, curr_att
3720: 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a  r->ulValueLen);.
3730: 0a 09 09 09 09 09 09 09 09 09 09 62 72 65 61 6b  ...........break
3740: 3b 0a 09 09 09 09 09 09 09 09 09 63 61 73 65 20  ;..........case 
3750: 43 4b 41 5f 53 55 42 4a 45 43 54 3a 0a 09 09 09  CKA_SUBJECT:....
3760: 09 09 09 09 09 09 63 61 73 65 20 43 4b 41 5f 49  ......case CKA_I
3770: 53 53 55 45 52 3a 0a 09 09 09 09 09 09 09 09 09  SSUER:..........
3780: 09 70 75 63 56 61 6c 75 65 20 3d 20 63 75 72 72  .pucValue = curr
3790: 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 3b 0a 0a  _attr->pValue;..
37a0: 09 09 09 09 09 09 09 09 09 09 70 72 69 6e 74 66  ..........printf
37b0: 28 22 20 20 20 20 5b 25 6c 75 5d 20 25 32 30 73  ("    [%lu] %20s
37c0: 3a 20 22 2c 20 68 4f 62 6a 65 63 74 2c 20 70 6b  : ", hObject, pk
37d0: 63 73 31 31 5f 61 74 74 72 69 62 75 74 65 5f 74  cs11_attribute_t
37e0: 6f 5f 6e 61 6d 65 28 63 75 72 72 5f 61 74 74 72  o_name(curr_attr
37f0: 2d 3e 74 79 70 65 29 29 3b 0a 0a 09 09 09 09 09  ->type));.......
3800: 09 09 09 09 09 66 6f 72 20 28 62 79 74 65 5f 69  .....for (byte_i
3810: 64 78 20 3d 20 30 3b 20 62 79 74 65 5f 69 64 78  dx = 0; byte_idx
3820: 20 3c 20 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c   < curr_attr->ul
3830: 56 61 6c 75 65 4c 65 6e 3b 20 62 79 74 65 5f 69  ValueLen; byte_i
3840: 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09 09 09 09  dx++) {.........
3850: 09 09 09 70 72 69 6e 74 66 28 22 5c 5c 78 25 30  ...printf("\\x%0
3860: 32 78 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 69  2x", (unsigned i
3870: 6e 74 29 20 70 75 63 56 61 6c 75 65 5b 62 79 74  nt) pucValue[byt
3880: 65 5f 69 64 78 5d 29 3b 0a 09 09 09 09 09 09 09  e_idx]);........
3890: 09 09 09 7d 0a 0a 09 09 09 09 09 09 09 09 09 09  ...}............
38a0: 70 72 69 6e 74 66 28 22 20 3b 3b 20 25 70 2f 25  printf(" ;; %p/%
38b0: 6c 75 5c 6e 22 2c 20 63 75 72 72 5f 61 74 74 72  lu\n", curr_attr
38c0: 2d 3e 70 56 61 6c 75 65 2c 20 63 75 72 72 5f 61  ->pValue, curr_a
38d0: 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 29  ttr->ulValueLen)
38e0: 3b 0a 0a 09 09 09 09 09 09 09 09 09 09 62 72 65  ;............bre
38f0: 61 6b 3b 0a 09 09 09 09 09 09 09 09 09 64 65 66  ak;..........def
3900: 61 75 6c 74 3a 0a 09 09 09 09 09 09 09 09 09 09  ault:...........
3910: 70 72 69 6e 74 66 28 22 20 20 20 20 5b 25 6c 75  printf("    [%lu
3920: 5d 20 25 32 30 73 3a 20 25 70 2f 25 6c 75 5c 6e  ] %20s: %p/%lu\n
3930: 22 2c 20 68 4f 62 6a 65 63 74 2c 20 70 6b 63 73  ", hObject, pkcs
3940: 31 31 5f 61 74 74 72 69 62 75 74 65 5f 74 6f 5f  11_attribute_to_
3950: 6e 61 6d 65 28 63 75 72 72 5f 61 74 74 72 2d 3e  name(curr_attr->
3960: 74 79 70 65 29 2c 20 63 75 72 72 5f 61 74 74 72  type), curr_attr
3970: 2d 3e 70 56 61 6c 75 65 2c 20 63 75 72 72 5f 61  ->pValue, curr_a
3980: 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 29  ttr->ulValueLen)
3990: 3b 0a 0a 09 09 09 09 09 09 09 09 09 09 62 72 65  ;............bre
39a0: 61 6b 3b 0a 09 09 09 09 09 09 09 09 7d 0a 09 09  ak;.........}...
39b0: 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09  .....} else {...
39c0: 09 09 09 09 09 09 70 72 69 6e 74 66 28 22 20 20  ......printf("  
39d0: 20 20 5b 25 6c 75 5d 20 25 32 30 73 3a 20 28 6e    [%lu] %20s: (n
39e0: 6f 74 20 66 6f 75 6e 64 29 5c 6e 22 2c 20 68 4f  ot found)\n", hO
39f0: 62 6a 65 63 74 2c 20 70 6b 63 73 31 31 5f 61 74  bject, pkcs11_at
3a00: 74 72 69 62 75 74 65 5f 74 6f 5f 6e 61 6d 65 28  tribute_to_name(
3a10: 63 75 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 29  curr_attr->type)
3a20: 29 3b 0a 09 09 09 09 09 09 09 7d 0a 0a 09 09 09  );........}.....
3a30: 09 09 09 09 66 72 65 65 28 63 75 72 72 5f 61 74  ....free(curr_at
3a40: 74 72 2d 3e 70 56 61 6c 75 65 29 3b 0a 09 09 09  tr->pValue);....
3a50: 09 09 09 09 63 75 72 72 5f 61 74 74 72 2d 3e 70  ....curr_attr->p
3a60: 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09  Value = NULL;...
3a70: 09 09 09 09 7d 0a 09 09 09 09 09 7d 20 65 6c 73  ....}......} els
3a80: 65 20 7b 0a 09 09 09 09 09 09 70 72 69 6e 74 66  e {.......printf
3a90: 28 22 47 65 74 41 74 74 72 69 62 75 74 65 56 61  ("GetAttributeVa
3aa0: 6c 75 65 28 29 2f 32 20 66 61 69 6c 65 64 2e 5c  lue()/2 failed.\
3ab0: 6e 22 29 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09  n");......}.....
3ac0: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 70 72  } else {......pr
3ad0: 69 6e 74 66 28 22 47 65 74 41 74 74 72 69 62 75  intf("GetAttribu
3ae0: 74 65 56 61 6c 75 65 28 68 4f 62 6a 65 63 74 3d  teValue(hObject=
3af0: 25 6c 75 29 2f 31 20 66 61 69 6c 65 64 20 28 72  %lu)/1 failed (r
3b00: 76 20 3d 20 25 6c 75 29 2e 5c 6e 22 2c 20 28 75  v = %lu).\n", (u
3b10: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 68 4f  nsigned long) hO
3b20: 62 6a 65 63 74 2c 20 28 75 6e 73 69 67 6e 65 64  bject, (unsigned
3b30: 20 6c 6f 6e 67 29 20 63 68 6b 5f 72 76 29 3b 0a   long) chk_rv);.
3b40: 09 09 09 09 7d 0a 0a 09 09 09 7d 0a 0a 09 09 09  ....}.....}.....
3b50: 63 68 6b 5f 72 76 20 3d 20 43 5f 46 69 6e 64 4f  chk_rv = C_FindO
3b60: 62 6a 65 63 74 73 46 69 6e 61 6c 28 68 53 65 73  bjectsFinal(hSes
3b70: 73 69 6f 6e 29 3b 0a 09 09 09 69 66 20 28 63 68  sion);....if (ch
3b80: 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20  k_rv != CKR_OK) 
3b90: 7b 0a 09 09 09 09 70 72 69 6e 74 66 28 22 46 69  {.....printf("Fi
3ba0: 6e 64 4f 62 6a 65 63 74 73 46 69 6e 61 6c 28 29  ndObjectsFinal()
3bb0: 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09   failed.\n");...
3bc0: 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09  .}...} else {...
3bd0: 09 70 72 69 6e 74 66 28 22 46 69 6e 64 4f 62 6a  .printf("FindObj
3be0: 65 63 74 73 49 6e 69 74 28 29 20 66 61 69 6c 65  ectsInit() faile
3bf0: 64 2e 5c 6e 22 29 3b 0a 09 09 7d 0a 0a 09 09 70  d.\n");...}....p
3c00: 72 69 6e 74 66 28 22 2d 2d 2d 20 4f 70 65 72 61  rintf("--- Opera
3c10: 74 69 6f 6e 73 20 2d 2d 2d 5c 6e 22 29 3b 0a 0a  tions ---\n");..
3c20: 09 09 66 6f 72 20 28 63 75 72 72 50 72 69 76 4b  ..for (currPrivK
3c30: 65 79 20 3d 20 70 72 69 76 61 74 65 4b 65 79 4f  ey = privateKeyO
3c40: 62 6a 65 63 74 73 5f 72 6f 6f 74 3b 20 2a 63 75  bjects_root; *cu
3c50: 72 72 50 72 69 76 4b 65 79 20 21 3d 20 43 4b 5f  rrPrivKey != CK_
3c60: 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 3b 20  INVALID_HANDLE; 
3c70: 63 75 72 72 50 72 69 76 4b 65 79 2b 2b 29 20 7b  currPrivKey++) {
3c80: 0a 09 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f 53  ....chk_rv = C_S
3c90: 69 67 6e 49 6e 69 74 28 68 53 65 73 73 69 6f 6e  ignInit(hSession
3ca0: 2c 20 26 6d 65 63 68 61 6e 69 73 6d 2c 20 2a 63  , &mechanism, *c
3cb0: 75 72 72 50 72 69 76 4b 65 79 29 3b 0a 09 09 09  urrPrivKey);....
3cc0: 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d 20 43 4b  if (chk_rv == CK
3cd0: 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 73 69 67 6e  R_OK) {.....sign
3ce0: 61 74 75 72 65 5f 6c 65 6e 20 3d 20 73 69 7a 65  ature_len = size
3cf0: 6f 66 28 73 69 67 6e 61 74 75 72 65 29 3b 0a 0a  of(signature);..
3d00: 09 09 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f 53  ....chk_rv = C_S
3d10: 69 67 6e 28 68 53 65 73 73 69 6f 6e 2c 20 28 43  ign(hSession, (C
3d20: 4b 5f 42 59 54 45 5f 50 54 52 29 20 22 54 65 73  K_BYTE_PTR) "Tes
3d30: 74 22 2c 20 73 74 72 6c 65 6e 28 22 54 65 73 74  t", strlen("Test
3d40: 22 29 2c 20 28 43 4b 5f 42 59 54 45 5f 50 54 52  "), (CK_BYTE_PTR
3d50: 29 20 26 73 69 67 6e 61 74 75 72 65 2c 20 26 73  ) &signature, &s
3d60: 69 67 6e 61 74 75 72 65 5f 6c 65 6e 29 3b 0a 09  ignature_len);..
3d70: 09 09 09 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d  ...if (chk_rv ==
3d80: 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 09   CKR_OK) {......
3d90: 70 72 69 6e 74 66 28 22 5b 25 30 34 6c 75 2f 25  printf("[%04lu/%
3da0: 30 32 6c 78 5d 20 53 69 67 6e 61 74 75 72 65 3a  02lx] Signature:
3db0: 20 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f   ", (unsigned lo
3dc0: 6e 67 29 20 2a 63 75 72 72 50 72 69 76 4b 65 79  ng) *currPrivKey
3dd0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67  , (unsigned long
3de0: 29 20 6d 65 63 68 61 6e 69 73 6d 2e 6d 65 63 68  ) mechanism.mech
3df0: 61 6e 69 73 6d 29 3b 0a 0a 09 09 09 09 09 66 6f  anism);.......fo
3e00: 72 20 28 62 79 74 65 5f 69 64 78 20 3d 20 30 3b  r (byte_idx = 0;
3e10: 20 62 79 74 65 5f 69 64 78 20 3c 20 73 69 67 6e   byte_idx < sign
3e20: 61 74 75 72 65 5f 6c 65 6e 3b 20 62 79 74 65 5f  ature_len; byte_
3e30: 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09 09 70  idx++) {.......p
3e40: 72 69 6e 74 66 28 22 25 30 32 78 20 22 2c 20 28  rintf("%02x ", (
3e50: 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 73 69  unsigned int) si
3e60: 67 6e 61 74 75 72 65 5b 62 79 74 65 5f 69 64 78  gnature[byte_idx
3e70: 5d 29 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09  ]);......}......
3e80: 09 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 09  .printf("\n");..
3e90: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
3ea0: 09 70 72 69 6e 74 66 28 22 53 69 67 6e 28 29 20  .printf("Sign() 
3eb0: 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09 09  failed.\n");....
3ec0: 09 7d 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  .}....} else {..
3ed0: 09 09 09 70 72 69 6e 74 66 28 22 53 69 67 6e 49  ...printf("SignI
3ee0: 6e 69 74 28 29 20 66 61 69 6c 65 64 2e 5c 6e 22  nit() failed.\n"
3ef0: 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 66  );....}...}....f
3f00: 6f 72 20 28 63 75 72 72 50 72 69 76 4b 65 79 20  or (currPrivKey 
3f10: 3d 20 70 72 69 76 61 74 65 4b 65 79 4f 62 6a 65  = privateKeyObje
3f20: 63 74 73 5f 72 6f 6f 74 3b 20 2a 63 75 72 72 50  cts_root; *currP
3f30: 72 69 76 4b 65 79 20 21 3d 20 43 4b 5f 49 4e 56  rivKey != CK_INV
3f40: 41 4c 49 44 5f 48 41 4e 44 4c 45 3b 20 63 75 72  ALID_HANDLE; cur
3f50: 72 50 72 69 76 4b 65 79 2b 2b 29 20 7b 0a 09 09  rPrivKey++) {...
3f60: 09 63 68 6b 5f 72 76 20 3d 20 43 5f 45 6e 63 72  .chk_rv = C_Encr
3f70: 79 70 74 49 6e 69 74 28 68 53 65 73 73 69 6f 6e  yptInit(hSession
3f80: 2c 20 26 6d 65 63 68 61 6e 69 73 6d 2c 20 2a 63  , &mechanism, *c
3f90: 75 72 72 50 72 69 76 4b 65 79 29 3b 0a 09 09 09  urrPrivKey);....
3fa0: 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d 20 43 4b  if (chk_rv == CK
3fb0: 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 65 6e 63 72  R_OK) {.....encr
3fc0: 79 70 74 65 64 5f 62 75 66 6c 65 6e 20 3d 20 73  ypted_buflen = s
3fd0: 69 7a 65 6f 66 28 65 6e 63 72 79 70 74 65 64 5f  izeof(encrypted_
3fe0: 62 75 66 29 3b 0a 0a 09 09 09 09 63 68 6b 5f 72  buf);......chk_r
3ff0: 76 20 3d 20 43 5f 45 6e 63 72 79 70 74 28 68 53  v = C_Encrypt(hS
4000: 65 73 73 69 6f 6e 2c 20 28 43 4b 5f 42 59 54 45  ession, (CK_BYTE
4010: 5f 50 54 52 29 20 22 54 65 73 74 22 2c 20 73 74  _PTR) "Test", st
4020: 72 6c 65 6e 28 22 54 65 73 74 22 29 2c 20 65 6e  rlen("Test"), en
4030: 63 72 79 70 74 65 64 5f 62 75 66 2c 20 26 65 6e  crypted_buf, &en
4040: 63 72 79 70 74 65 64 5f 62 75 66 6c 65 6e 29 3b  crypted_buflen);
4050: 0a 09 09 09 09 69 66 20 28 63 68 6b 5f 72 76 20  .....if (chk_rv 
4060: 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09  == CKR_OK) {....
4070: 09 09 70 72 69 6e 74 66 28 22 5b 25 30 34 6c 75  ..printf("[%04lu
4080: 2f 25 30 32 6c 78 5d 20 45 6e 63 72 79 70 74 65  /%02lx] Encrypte
4090: 64 28 54 65 73 74 29 3a 20 22 2c 20 28 75 6e 73  d(Test): ", (uns
40a0: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 63 75 72  igned long) *cur
40b0: 72 50 72 69 76 4b 65 79 2c 20 28 75 6e 73 69 67  rPrivKey, (unsig
40c0: 6e 65 64 20 6c 6f 6e 67 29 20 6d 65 63 68 61 6e  ned long) mechan
40d0: 69 73 6d 2e 6d 65 63 68 61 6e 69 73 6d 29 3b 0a  ism.mechanism);.
40e0: 0a 09 09 09 09 09 66 6f 72 20 28 62 79 74 65 5f  ......for (byte_
40f0: 69 64 78 20 3d 20 30 3b 20 62 79 74 65 5f 69 64  idx = 0; byte_id
4100: 78 20 3c 20 65 6e 63 72 79 70 74 65 64 5f 62 75  x < encrypted_bu
4110: 66 6c 65 6e 3b 20 62 79 74 65 5f 69 64 78 2b 2b  flen; byte_idx++
4120: 29 20 7b 0a 09 09 09 09 09 09 70 72 69 6e 74 66  ) {.......printf
4130: 28 22 25 30 32 78 20 22 2c 20 28 75 6e 73 69 67  ("%02x ", (unsig
4140: 6e 65 64 20 69 6e 74 29 20 65 6e 63 72 79 70 74  ned int) encrypt
4150: 65 64 5f 62 75 66 5b 62 79 74 65 5f 69 64 78 5d  ed_buf[byte_idx]
4160: 29 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 09  );......}.......
4170: 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 09 09  printf("\n");...
4180: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09  ..} else {......
4190: 70 72 69 6e 74 66 28 22 45 6e 63 72 79 70 74 28  printf("Encrypt(
41a0: 29 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b 0a 09  ) failed.\n");..
41b0: 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65 20 7b  ...}....} else {
41c0: 0a 09 09 09 09 70 72 69 6e 74 66 28 22 45 6e 63  .....printf("Enc
41d0: 72 79 70 74 49 6e 69 74 28 29 20 66 61 69 6c 65  ryptInit() faile
41e0: 64 2e 5c 6e 22 29 3b 0a 09 09 09 7d 0a 09 09 7d  d.\n");....}...}
41f0: 0a 0a 09 09 66 6f 72 20 28 63 75 72 72 50 72 69  ....for (currPri
4200: 76 4b 65 79 20 3d 20 70 72 69 76 61 74 65 4b 65  vKey = privateKe
4210: 79 4f 62 6a 65 63 74 73 5f 72 6f 6f 74 3b 20 2a  yObjects_root; *
4220: 63 75 72 72 50 72 69 76 4b 65 79 20 21 3d 20 43  currPrivKey != C
4230: 4b 5f 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45  K_INVALID_HANDLE
4240: 3b 20 63 75 72 72 50 72 69 76 4b 65 79 2b 2b 29  ; currPrivKey++)
4250: 20 7b 0a 09 09 09 63 68 6b 5f 72 76 20 3d 20 43   {....chk_rv = C
4260: 5f 44 65 63 72 79 70 74 49 6e 69 74 28 68 53 65  _DecryptInit(hSe
4270: 73 73 69 6f 6e 2c 20 26 6d 65 63 68 61 6e 69 73  ssion, &mechanis
4280: 6d 2c 20 2a 63 75 72 72 50 72 69 76 4b 65 79 29  m, *currPrivKey)
4290: 3b 0a 09 09 09 69 66 20 28 63 68 6b 5f 72 76 20  ;....if (chk_rv 
42a0: 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09  == CKR_OK) {....
42b0: 09 64 65 63 72 79 70 74 65 64 5f 62 75 66 6c 65  .decrypted_bufle
42c0: 6e 20 3d 20 73 69 7a 65 6f 66 28 64 65 63 72 79  n = sizeof(decry
42d0: 70 74 65 64 5f 62 75 66 29 3b 0a 0a 09 09 09 09  pted_buf);......
42e0: 63 68 6b 5f 72 76 20 3d 20 43 5f 44 65 63 72 79  chk_rv = C_Decry
42f0: 70 74 28 68 53 65 73 73 69 6f 6e 2c 20 28 43 4b  pt(hSession, (CK
4300: 5f 42 59 54 45 5f 50 54 52 29 20 22 5c 78 34 63  _BYTE_PTR) "\x4c
4310: 5c 78 33 36 5c 78 30 66 5c 78 38 36 5c 78 32 64  \x36\x0f\x86\x2d
4320: 5c 78 62 37 5c 78 62 32 5c 78 34 36 5c 78 39 32  \xb7\xb2\x46\x92
4330: 5c 78 31 31 5c 78 37 65 5c 78 35 66 5c 78 64 31  \x11\x7e\x5f\xd1
4340: 5c 78 65 62 5c 78 32 63 5c 78 62 30 5c 78 64 62  \xeb\x2c\xb0\xdb
4350: 5c 78 33 34 5c 78 36 30 5c 78 62 38 5c 78 30 63  \x34\x60\xb8\x0c
4360: 5c 78 66 38 5c 78 32 37 5c 78 62 35 5c 78 66 62  \xf8\x27\xb5\xfb
4370: 5c 78 63 65 5c 78 64 31 5c 78 66 34 5c 78 35 38  \xce\xd1\xf4\x58
4380: 5c 78 61 33 5c 78 32 30 5c 78 35 32 5c 78 39 64  \xa3\x20\x52\x9d
4390: 5c 78 39 37 5c 78 30 38 5c 78 64 38 5c 78 32 62  \x97\x08\xd8\x2b
43a0: 5c 78 35 65 5c 78 62 32 5c 78 33 37 5c 78 34 36  \x5e\xb2\x37\x46
43b0: 5c 78 37 32 5c 78 34 35 5c 78 37 63 5c 78 36 36  \x72\x45\x7c\x66
43c0: 5c 78 32 33 5c 78 35 33 5c 78 62 35 5c 78 61 35  \x23\x53\xb5\xa5
43d0: 5c 78 31 36 5c 78 36 31 5c 78 39 36 5c 78 62 63  \x16\x61\x96\xbc
43e0: 5c 78 35 63 5c 78 38 64 5c 78 38 35 5c 78 31 38  \x5c\x8d\x85\x18
43f0: 5c 78 32 34 5c 78 63 66 5c 78 37 34 5c 78 37 66  \x24\xcf\x74\x7f
4400: 5c 78 63 32 5c 78 32 33 5c 78 31 35 5c 78 64 36  \xc2\x23\x15\xd6
4410: 5c 78 34 32 5c 78 37 32 5c 78 61 35 5c 78 32 62  \x42\x72\xa5\x2b
4420: 5c 78 32 39 5c 78 32 39 5c 78 31 64 5c 78 61 36  \x29\x29\x1d\xa6
4430: 5c 78 65 61 5c 78 32 62 5c 78 63 62 5c 78 35 37  \xea\x2b\xcb\x57
4440: 5c 78 35 39 5c 78 62 33 5c 78 35 66 5c 78 65 32  \x59\xb3\x5f\xe2
4450: 5c 78 66 38 5c 78 33 30 5c 78 31 32 5c 78 32 66  \xf8\x30\x12\x2f
4460: 5c 78 31 62 5c 78 66 61 5c 78 62 64 5c 78 61 39  \x1b\xfa\xbd\xa9
4470: 5c 78 31 39 5c 78 65 66 5c 78 35 63 5c 78 62 62  \x19\xef\x5c\xbb
4480: 5c 78 34 38 5c 78 64 63 5c 78 32 38 5c 78 34 32  \x48\xdc\x28\x42
4490: 5c 78 64 64 5c 78 39 30 5c 78 62 65 5c 78 36 33  \xdd\x90\xbe\x63
44a0: 5c 78 65 62 5c 78 35 39 5c 78 30 63 5c 78 61 66  \xeb\x59\x0c\xaf
44b0: 5c 78 35 39 5c 78 63 62 5c 78 65 34 5c 78 36 61  \x59\xcb\xe4\x6a
44c0: 5c 78 66 32 5c 78 35 36 5c 78 32 34 5c 78 34 31  \xf2\x56\x24\x41
44d0: 5c 78 63 32 5c 78 37 37 5c 78 37 62 5c 78 63 39  \xc2\x77\x7b\xc9
44e0: 5c 78 66 38 5c 78 30 32 5c 78 30 66 5c 78 36 37  \xf8\x02\x0f\x67
44f0: 5c 78 33 64 5c 78 32 61 5c 78 39 38 5c 78 39 31  \x3d\x2a\x98\x91
4500: 5c 78 31 34 5c 78 61 32 5c 78 35 37 22 2c 20 31  \x14\xa2\x57", 1
4510: 32 38 2c 20 64 65 63 72 79 70 74 65 64 5f 62 75  28, decrypted_bu
4520: 66 2c 20 26 64 65 63 72 79 70 74 65 64 5f 62 75  f, &decrypted_bu
4530: 66 6c 65 6e 29 3b 0a 09 09 09 09 69 66 20 28 63  flen);.....if (c
4540: 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 4f 4b 29  hk_rv == CKR_OK)
4550: 20 7b 0a 09 09 09 09 09 70 72 69 6e 74 66 28 22   {......printf("
4560: 5b 25 30 34 6c 75 2f 25 30 32 6c 78 5d 20 44 65  [%04lu/%02lx] De
4570: 63 72 79 70 74 65 64 28 49 74 20 77 6f 72 6b 73  crypted(It works
4580: 21 29 3a 20 22 2c 20 28 75 6e 73 69 67 6e 65 64  !): ", (unsigned
4590: 20 6c 6f 6e 67 29 20 2a 63 75 72 72 50 72 69 76   long) *currPriv
45a0: 4b 65 79 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c  Key, (unsigned l
45b0: 6f 6e 67 29 20 6d 65 63 68 61 6e 69 73 6d 2e 6d  ong) mechanism.m
45c0: 65 63 68 61 6e 69 73 6d 29 3b 0a 0a 09 09 09 09  echanism);......
45d0: 09 66 6f 72 20 28 62 79 74 65 5f 69 64 78 20 3d  .for (byte_idx =
45e0: 20 30 3b 20 62 79 74 65 5f 69 64 78 20 3c 20 64   0; byte_idx < d
45f0: 65 63 72 79 70 74 65 64 5f 62 75 66 6c 65 6e 3b  ecrypted_buflen;
4600: 20 62 79 74 65 5f 69 64 78 2b 2b 29 20 7b 0a 09   byte_idx++) {..
4610: 09 09 09 09 09 70 72 69 6e 74 66 28 22 25 30 32  .....printf("%02
4620: 78 20 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 69  x ", (unsigned i
4630: 6e 74 29 20 64 65 63 72 79 70 74 65 64 5f 62 75  nt) decrypted_bu
4640: 66 5b 62 79 74 65 5f 69 64 78 5d 29 3b 0a 09 09  f[byte_idx]);...
4650: 09 09 09 7d 0a 0a 09 09 09 09 09 70 72 69 6e 74  ...}.......print
4660: 66 28 22 5c 6e 22 29 3b 0a 09 09 09 09 7d 20 65  f("\n");.....} e
4670: 6c 73 65 20 7b 0a 09 09 09 09 09 70 72 69 6e 74  lse {......print
4680: 66 28 22 44 65 63 72 79 70 74 28 29 20 66 61 69  f("Decrypt() fai
4690: 6c 65 64 2e 5c 6e 22 29 3b 0a 09 09 09 09 7d 0a  led.\n");.....}.
46a0: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
46b0: 70 72 69 6e 74 66 28 22 44 65 63 72 79 70 74 49  printf("DecryptI
46c0: 6e 69 74 28 29 20 66 61 69 6c 65 64 2e 5c 6e 22  nit() failed.\n"
46d0: 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 63  );....}...}....c
46e0: 68 6b 5f 72 76 20 3d 20 43 5f 43 6c 6f 73 65 53  hk_rv = C_CloseS
46f0: 65 73 73 69 6f 6e 28 68 53 65 73 73 69 6f 6e 29  ession(hSession)
4700: 3b 0a 09 09 69 66 20 28 63 68 6b 5f 72 76 20 21  ;...if (chk_rv !
4710: 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 70  = CKR_OK) {....p
4720: 72 69 6e 74 66 28 22 43 6c 6f 73 65 53 65 73 73  rintf("CloseSess
4730: 69 6f 6e 20 66 61 69 6c 65 64 2e 5c 6e 22 29 3b  ion failed.\n");
4740: 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  ...}..} else {..
4750: 09 70 72 69 6e 74 66 28 22 4f 70 65 6e 53 65 73  .printf("OpenSes
4760: 73 69 6f 6e 20 66 61 69 6c 65 64 2e 5c 6e 22 29  sion failed.\n")
4770: 3b 0a 09 7d 0a 0a 09 43 5f 46 69 6e 61 6c 69 7a  ;..}...C_Finaliz
4780: 65 28 4e 55 4c 4c 29 3b 0a 0a 09 69 66 20 28 73  e(NULL);...if (s
4790: 6c 6f 74 73 29 20 7b 0a 09 09 66 72 65 65 28 73  lots) {...free(s
47a0: 6c 6f 74 73 29 3b 0a 09 7d 0a 0a 09 69 66 20 28  lots);..}...if (
47b0: 70 72 69 76 61 74 65 4b 65 79 4f 62 6a 65 63 74  privateKeyObject
47c0: 73 5f 72 6f 6f 74 29 20 7b 0a 09 09 66 72 65 65  s_root) {...free
47d0: 28 70 72 69 76 61 74 65 4b 65 79 4f 62 6a 65 63  (privateKeyObjec
47e0: 74 73 5f 72 6f 6f 74 29 3b 0a 09 7d 0a 0a 09 72  ts_root);..}...r
47f0: 65 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 69 6e 74  eturn(0);.}..int
4800: 20 6d 61 69 6e 28 76 6f 69 64 29 20 7b 0a 09 69   main(void) {..i
4810: 6e 74 20 72 65 74 76 61 6c 20 3d 20 30 2c 20 63  nt retval = 0, c
4820: 6b 5f 72 65 74 76 61 6c 3b 0a 0a 09 70 72 69 6e  k_retval;...prin
4830: 74 66 28 22 54 65 73 74 69 6e 67 20 6c 69 62 63  tf("Testing libc
4840: 61 63 6b 65 79 2e 2e 2e 5c 6e 22 29 3b 0a 0a 09  ackey...\n");...
4850: 63 6b 5f 72 65 74 76 61 6c 20 3d 20 6d 61 69 6e  ck_retval = main
4860: 5f 70 6b 63 73 31 31 28 29 3b 0a 0a 09 69 66 20  _pkcs11();...if 
4870: 28 63 6b 5f 72 65 74 76 61 6c 20 21 3d 20 30 29  (ck_retval != 0)
4880: 20 7b 0a 09 09 72 65 74 76 61 6c 20 3d 20 63 6b   {...retval = ck
4890: 5f 72 65 74 76 61 6c 3b 0a 09 7d 0a 0a 09 70 72  _retval;..}...pr
48a0: 69 6e 74 66 28 22 54 65 73 74 69 6e 67 20 6c 69  intf("Testing li
48b0: 62 63 61 63 6b 65 79 2e 2e 2e 20 44 4f 4e 45 2e  bcackey... DONE.
48c0: 20 53 74 61 74 75 73 20 3d 20 25 69 5c 6e 22 2c   Status = %i\n",
48d0: 20 63 6b 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 72   ck_retval);...r
48e0: 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d  eturn(retval);.}
48f0: 0a                                               .