Hex Artifact Content

Artifact b0e4dd691b5225f1cca61b48e8346ffc88294acf:


0000: 23 69 66 64 65 66 20 5f 5f 63 70 6c 75 73 70 6c  #ifdef __cpluspl
0010: 75 73 0a 65 78 74 65 72 6e 20 22 43 22 20 7b 0a  us.extern "C" {.
0020: 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65  #endif..#include
0030: 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 23 69 6e 63   <unistd.h>.#inc
0040: 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a  lude <stdlib.h>.
0050: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 79 70 6b 63  .#include "mypkc
0060: 73 31 31 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  s11.h".#include 
0070: 22 63 61 63 6b 65 79 2d 63 68 72 6f 6d 65 2e 68  "cackey-chrome.h
0080: 22 0a 0a 73 74 72 75 63 74 20 63 61 63 6b 65 79  "..struct cackey
0090: 5f 63 68 72 6f 6d 65 5f 69 64 20 7b 0a 09 75 6e  _chrome_id {..un
00a0: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 69 64 3b  signed char *id;
00b0: 0a 09 73 69 7a 65 5f 74 20 69 64 4c 65 6e 3b 0a  ..size_t idLen;.
00c0: 7d 3b 0a 0a 73 74 61 74 69 63 20 43 4b 5f 46 55  };..static CK_FU
00d0: 4e 43 54 49 4f 4e 5f 4c 49 53 54 5f 50 54 52 20  NCTION_LIST_PTR 
00e0: 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f 6e 4c 69  moduleFunctionLi
00f0: 73 74 20 3d 20 4e 55 4c 4c 3b 0a 0a 73 74 61 74  st = NULL;..stat
0100: 69 63 20 43 4b 5f 52 56 20 63 61 63 6b 65 79 5f  ic CK_RV cackey_
0110: 63 68 72 6f 6d 65 5f 69 6e 69 74 28 76 6f 69 64  chrome_init(void
0120: 29 20 7b 0a 09 43 4b 5f 43 5f 49 4e 49 54 49 41  ) {..CK_C_INITIA
0130: 4c 49 5a 45 5f 41 52 47 53 20 69 6e 69 74 61 72  LIZE_ARGS initar
0140: 67 73 3b 0a 09 43 4b 5f 52 56 20 63 68 6b 5f 72  gs;..CK_RV chk_r
0150: 76 3b 0a 0a 09 69 66 20 28 6d 6f 64 75 6c 65 46  v;...if (moduleF
0160: 75 6e 63 74 69 6f 6e 4c 69 73 74 20 21 3d 20 4e  unctionList != N
0170: 55 4c 4c 29 20 7b 0a 09 09 72 65 74 75 72 6e 28  ULL) {...return(
0180: 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 63 68  CKR_OK);..}...ch
0190: 6b 5f 72 76 20 3d 20 43 5f 47 65 74 46 75 6e 63  k_rv = C_GetFunc
01a0: 74 69 6f 6e 4c 69 73 74 28 26 6d 6f 64 75 6c 65  tionList(&module
01b0: 46 75 6e 63 74 69 6f 6e 4c 69 73 74 29 3b 0a 09  FunctionList);..
01c0: 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b  if (chk_rv != CK
01d0: 52 5f 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e  R_OK) {...return
01e0: 28 63 68 6b 5f 72 76 29 3b 0a 09 7d 0a 0a 09 69  (chk_rv);..}...i
01f0: 6e 69 74 61 72 67 73 2e 43 72 65 61 74 65 4d 75  nitargs.CreateMu
0200: 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 69 6e 69  tex = NULL;..ini
0210: 74 61 72 67 73 2e 44 65 73 74 72 6f 79 4d 75 74  targs.DestroyMut
0220: 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 69 6e 69 74  ex = NULL;..init
0230: 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 20 3d  args.LockMutex =
0240: 20 4e 55 4c 4c 3b 0a 09 69 6e 69 74 61 72 67 73   NULL;..initargs
0250: 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 20 3d 20 4e  .UnlockMutex = N
0260: 55 4c 4c 3b 0a 09 69 6e 69 74 61 72 67 73 2e 66  ULL;..initargs.f
0270: 6c 61 67 73 20 3d 20 43 4b 46 5f 4f 53 5f 4c 4f  lags = CKF_OS_LO
0280: 43 4b 49 4e 47 5f 4f 4b 3b 0a 09 69 6e 69 74 61  CKING_OK;..inita
0290: 72 67 73 2e 70 52 65 73 65 72 76 65 64 20 3d 20  rgs.pReserved = 
02a0: 4e 55 4c 4c 3b 0a 0a 09 63 68 6b 5f 72 76 20 3d  NULL;...chk_rv =
02b0: 20 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f 6e 4c   moduleFunctionL
02c0: 69 73 74 2d 3e 43 5f 49 6e 69 74 69 61 6c 69 7a  ist->C_Initializ
02d0: 65 28 26 69 6e 69 74 61 72 67 73 29 3b 0a 09 69  e(&initargs);..i
02e0: 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52  f (chk_rv != CKR
02f0: 5f 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e 28  _OK) {...return(
0300: 63 68 6b 5f 72 76 29 3b 0a 09 7d 0a 0a 09 72 65  chk_rv);..}...re
0310: 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a  turn(CKR_OK);.}.
0320: 0a 69 6e 74 20 63 61 63 6b 65 79 5f 63 68 72 6f  .int cackey_chro
0330: 6d 65 5f 6c 69 73 74 43 65 72 74 69 66 69 63 61  me_listCertifica
0340: 74 65 73 28 73 74 72 75 63 74 20 63 61 63 6b 65  tes(struct cacke
0350: 79 5f 63 65 72 74 69 66 69 63 61 74 65 20 2a 2a  y_certificate **
0360: 63 65 72 74 69 66 69 63 61 74 65 73 29 20 7b 0a  certificates) {.
0370: 09 43 4b 5f 52 56 20 63 68 6b 5f 72 76 3b 0a 09  .CK_RV chk_rv;..
0380: 43 4b 5f 55 4c 4f 4e 47 20 6e 75 6d 53 6c 6f 74  CK_ULONG numSlot
0390: 73 2c 20 63 75 72 72 53 6c 6f 74 3b 0a 09 43 4b  s, currSlot;..CK
03a0: 5f 53 4c 4f 54 5f 49 44 5f 50 54 52 20 73 6c 6f  _SLOT_ID_PTR slo
03b0: 74 73 3b 0a 09 43 4b 5f 53 4c 4f 54 5f 49 4e 46  ts;..CK_SLOT_INF
03c0: 4f 20 73 6c 6f 74 49 6e 66 6f 3b 0a 09 43 4b 5f  O slotInfo;..CK_
03d0: 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68  SESSION_HANDLE h
03e0: 53 65 73 73 69 6f 6e 3b 0a 09 43 4b 5f 4f 42 4a  Session;..CK_OBJ
03f0: 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65  ECT_HANDLE hObje
0400: 63 74 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 75 6c  ct;..CK_ULONG ul
0410: 4f 62 6a 65 63 74 43 6f 75 6e 74 3b 0a 09 43 4b  ObjectCount;..CK
0420: 5f 41 54 54 52 49 42 55 54 45 20 73 65 61 72 63  _ATTRIBUTE searc
0430: 68 54 65 6d 70 6c 61 74 65 50 72 69 76 61 74 65  hTemplatePrivate
0440: 4b 65 79 73 5b 5d 20 3d 20 7b 0a 09 09 7b 43 4b  Keys[] = {...{CK
0450: 41 5f 43 4c 41 53 53 2c 20 4e 55 4c 4c 2c 20 73  A_CLASS, NULL, s
0460: 69 7a 65 6f 66 28 43 4b 5f 4f 42 4a 45 43 54 5f  izeof(CK_OBJECT_
0470: 43 4c 41 53 53 29 7d 0a 09 7d 3b 0a 09 43 4b 5f  CLASS)}..};..CK_
0480: 41 54 54 52 49 42 55 54 45 20 73 65 61 72 63 68  ATTRIBUTE search
0490: 54 65 6d 70 6c 61 74 65 43 65 72 74 69 66 69 63  TemplateCertific
04a0: 61 74 65 73 5b 5d 20 3d 20 7b 0a 09 09 7b 43 4b  ates[] = {...{CK
04b0: 41 5f 43 4c 41 53 53 2c 20 4e 55 4c 4c 2c 20 73  A_CLASS, NULL, s
04c0: 69 7a 65 6f 66 28 43 4b 5f 4f 42 4a 45 43 54 5f  izeof(CK_OBJECT_
04d0: 43 4c 41 53 53 29 7d 2c 0a 09 09 7b 43 4b 41 5f  CLASS)},...{CKA_
04e0: 49 44 2c 20 4e 55 4c 4c 2c 20 30 7d 0a 09 7d 3b  ID, NULL, 0}..};
04f0: 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 20 61  ..CK_ATTRIBUTE a
0500: 74 74 72 54 65 6d 70 6c 61 74 65 5b 5d 20 3d 20  ttrTemplate[] = 
0510: 7b 0a 09 09 7b 43 4b 41 5f 49 44 2c 20 4e 55 4c  {...{CKA_ID, NUL
0520: 4c 2c 20 30 7d 0a 09 7d 2c 20 2a 63 75 72 72 41  L, 0}..}, *currA
0530: 74 74 72 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 63  ttr;..CK_ULONG c
0540: 75 72 72 41 74 74 72 49 6e 64 65 78 3b 0a 09 43  urrAttrIndex;..C
0550: 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 53 20 6f  K_OBJECT_CLASS o
0560: 62 6a 65 63 74 43 6c 61 73 73 50 72 69 76 61 74  bjectClassPrivat
0570: 65 4b 65 79 20 3d 20 43 4b 4f 5f 50 52 49 56 41  eKey = CKO_PRIVA
0580: 54 45 5f 4b 45 59 3b 0a 0a 09 63 68 6b 5f 72 76  TE_KEY;...chk_rv
0590: 20 3d 20 63 61 63 6b 65 79 5f 63 68 72 6f 6d 65   = cackey_chrome
05a0: 5f 69 6e 69 74 28 29 3b 0a 09 69 66 20 28 63 68  _init();..if (ch
05b0: 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20  k_rv != CKR_OK) 
05c0: 7b 0a 09 09 72 65 74 75 72 6e 28 30 29 3b 0a 09  {...return(0);..
05d0: 7d 0a 0a 09 63 68 6b 5f 72 76 20 3d 20 6d 6f 64  }...chk_rv = mod
05e0: 75 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d  uleFunctionList-
05f0: 3e 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 28 46  >C_GetSlotList(F
0600: 41 4c 53 45 2c 20 4e 55 4c 4c 2c 20 26 6e 75 6d  ALSE, NULL, &num
0610: 53 6c 6f 74 73 29 3b 0a 09 69 66 20 28 63 68 6b  Slots);..if (chk
0620: 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b  _rv != CKR_OK) {
0630: 0a 09 09 72 65 74 75 72 6e 28 30 29 3b 0a 09 7d  ...return(0);..}
0640: 0a 0a 09 73 6c 6f 74 73 20 3d 20 6d 61 6c 6c 6f  ...slots = mallo
0650: 63 28 73 69 7a 65 6f 66 28 2a 73 6c 6f 74 73 29  c(sizeof(*slots)
0660: 20 2a 20 6e 75 6d 53 6c 6f 74 73 29 3b 0a 0a 09   * numSlots);...
0670: 63 68 6b 5f 72 76 20 3d 20 6d 6f 64 75 6c 65 46  chk_rv = moduleF
0680: 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47  unctionList->C_G
0690: 65 74 53 6c 6f 74 4c 69 73 74 28 46 41 4c 53 45  etSlotList(FALSE
06a0: 2c 20 73 6c 6f 74 73 2c 20 26 6e 75 6d 53 6c 6f  , slots, &numSlo
06b0: 74 73 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 76  ts);..if (chk_rv
06c0: 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09   != CKR_OK) {...
06d0: 72 65 74 75 72 6e 28 30 29 3b 0a 09 7d 0a 0a 09  return(0);..}...
06e0: 73 65 61 72 63 68 54 65 6d 70 6c 61 74 65 50 72  searchTemplatePr
06f0: 69 76 61 74 65 4b 65 79 73 5b 30 5d 2e 70 56 61  ivateKeys[0].pVa
0700: 6c 75 65 20 3d 20 26 6f 62 6a 65 63 74 43 6c 61  lue = &objectCla
0710: 73 73 50 72 69 76 61 74 65 4b 65 79 3b 0a 0a 09  ssPrivateKey;...
0720: 66 6f 72 20 28 63 75 72 72 53 6c 6f 74 20 3d 20  for (currSlot = 
0730: 30 3b 20 63 75 72 72 53 6c 6f 74 20 3c 20 6e 75  0; currSlot < nu
0740: 6d 53 6c 6f 74 73 3b 20 63 75 72 72 53 6c 6f 74  mSlots; currSlot
0750: 2b 2b 29 20 7b 0a 09 09 63 68 6b 5f 72 76 20 3d  ++) {...chk_rv =
0760: 20 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f 6e 4c   moduleFunctionL
0770: 69 73 74 2d 3e 43 5f 47 65 74 53 6c 6f 74 49 6e  ist->C_GetSlotIn
0780: 66 6f 28 73 6c 6f 74 73 5b 63 75 72 72 53 6c 6f  fo(slots[currSlo
0790: 74 5d 2c 20 26 73 6c 6f 74 49 6e 66 6f 29 3b 0a  t], &slotInfo);.
07a0: 09 09 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20  ..if (chk_rv != 
07b0: 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 63 6f 6e  CKR_OK) {....con
07c0: 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 69 66  tinue;...}....if
07d0: 20 28 28 73 6c 6f 74 49 6e 66 6f 2e 66 6c 61 67   ((slotInfo.flag
07e0: 73 20 26 20 43 4b 46 5f 54 4f 4b 45 4e 5f 50 52  s & CKF_TOKEN_PR
07f0: 45 53 45 4e 54 29 20 21 3d 20 43 4b 46 5f 54 4f  ESENT) != CKF_TO
0800: 4b 45 4e 5f 50 52 45 53 45 4e 54 29 20 7b 0a 09  KEN_PRESENT) {..
0810: 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a  ..continue;...}.
0820: 0a 09 09 63 68 6b 5f 72 76 20 3d 20 6d 6f 64 75  ...chk_rv = modu
0830: 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e  leFunctionList->
0840: 43 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 28 73 6c  C_OpenSession(sl
0850: 6f 74 73 5b 63 75 72 72 53 6c 6f 74 5d 2c 20 43  ots[currSlot], C
0860: 4b 46 5f 53 45 52 49 41 4c 5f 53 45 53 53 49 4f  KF_SERIAL_SESSIO
0870: 4e 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 26  N, NULL, NULL, &
0880: 68 53 65 73 73 69 6f 6e 29 3b 0a 09 09 69 66 20  hSession);...if 
0890: 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f  (chk_rv != CKR_O
08a0: 4b 29 20 7b 0a 09 09 09 63 6f 6e 74 69 6e 75 65  K) {....continue
08b0: 3b 0a 09 09 7d 0a 0a 09 09 63 68 6b 5f 72 76 20  ;...}....chk_rv 
08c0: 3d 20 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f 6e  = moduleFunction
08d0: 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65  List->C_FindObje
08e0: 63 74 73 49 6e 69 74 28 68 53 65 73 73 69 6f 6e  ctsInit(hSession
08f0: 2c 20 73 65 61 72 63 68 54 65 6d 70 6c 61 74 65  , searchTemplate
0900: 50 72 69 76 61 74 65 4b 65 79 73 2c 20 73 69 7a  PrivateKeys, siz
0910: 65 6f 66 28 73 65 61 72 63 68 54 65 6d 70 6c 61  eof(searchTempla
0920: 74 65 50 72 69 76 61 74 65 4b 65 79 73 29 20 2f  tePrivateKeys) /
0930: 20 73 69 7a 65 6f 66 28 73 65 61 72 63 68 54 65   sizeof(searchTe
0940: 6d 70 6c 61 74 65 50 72 69 76 61 74 65 4b 65 79  mplatePrivateKey
0950: 73 5b 30 5d 29 29 3b 20 0a 09 09 69 66 20 28 63  s[0])); ...if (c
0960: 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29  hk_rv != CKR_OK)
0970: 20 7b 0a 09 09 09 6d 6f 64 75 6c 65 46 75 6e 63   {....moduleFunc
0980: 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 6c 6f 73  tionList->C_Clos
0990: 65 53 65 73 73 69 6f 6e 28 68 53 65 73 73 69 6f  eSession(hSessio
09a0: 6e 29 3b 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 65  n);.....continue
09b0: 3b 0a 09 09 7d 0a 0a 09 09 77 68 69 6c 65 20 28  ;...}....while (
09c0: 31 29 20 7b 0a 09 09 09 63 68 6b 5f 72 76 20 3d  1) {....chk_rv =
09d0: 20 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f 6e 4c   moduleFunctionL
09e0: 69 73 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63  ist->C_FindObjec
09f0: 74 73 28 68 53 65 73 73 69 6f 6e 2c 20 26 68 4f  ts(hSession, &hO
0a00: 62 6a 65 63 74 2c 20 31 2c 20 26 75 6c 4f 62 6a  bject, 1, &ulObj
0a10: 65 63 74 43 6f 75 6e 74 29 3b 0a 09 09 09 69 66  ectCount);....if
0a20: 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f   (chk_rv != CKR_
0a30: 4f 4b 29 20 7b 0a 09 09 09 09 62 72 65 61 6b 3b  OK) {.....break;
0a40: 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 75 6c  ....}.....if (ul
0a50: 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 3d 20 30  ObjectCount == 0
0a60: 29 20 7b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  ) {.....break;..
0a70: 09 09 7d 0a 0a 09 09 09 69 66 20 28 75 6c 4f 62  ..}.....if (ulOb
0a80: 6a 65 63 74 43 6f 75 6e 74 20 21 3d 20 31 29 20  jectCount != 1) 
0a90: 7b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  {.....break;....
0aa0: 7d 0a 0a 09 09 09 66 6f 72 20 28 63 75 72 72 41  }.....for (currA
0ab0: 74 74 72 49 6e 64 65 78 20 3d 20 30 3b 20 63 75  ttrIndex = 0; cu
0ac0: 72 72 41 74 74 72 49 6e 64 65 78 20 3c 20 28 73  rrAttrIndex < (s
0ad0: 69 7a 65 6f 66 28 61 74 74 72 54 65 6d 70 6c 61  izeof(attrTempla
0ae0: 74 65 29 20 2f 20 73 69 7a 65 6f 66 28 61 74 74  te) / sizeof(att
0af0: 72 54 65 6d 70 6c 61 74 65 5b 30 5d 29 29 3b 20  rTemplate[0])); 
0b00: 63 75 72 72 41 74 74 72 49 6e 64 65 78 2b 2b 29  currAttrIndex++)
0b10: 20 7b 0a 09 09 09 09 63 75 72 72 41 74 74 72 20   {.....currAttr 
0b20: 3d 20 26 61 74 74 72 54 65 6d 70 6c 61 74 65 5b  = &attrTemplate[
0b30: 63 75 72 72 41 74 74 72 49 6e 64 65 78 5d 3b 0a  currAttrIndex];.
0b40: 0a 09 09 09 09 63 75 72 72 41 74 74 72 2d 3e 70  .....currAttr->p
0b50: 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09  Value = NULL;...
0b60: 09 09 63 75 72 72 41 74 74 72 2d 3e 75 6c 56 61  ..currAttr->ulVa
0b70: 6c 75 65 4c 65 6e 20 3d 20 30 3b 0a 09 09 09 7d  lueLen = 0;....}
0b80: 0a 0a 09 09 09 63 68 6b 5f 72 76 20 3d 20 43 5f  .....chk_rv = C_
0b90: 47 65 74 41 74 74 72 69 62 75 74 65 56 61 6c 75  GetAttributeValu
0ba0: 65 28 68 53 65 73 73 69 6f 6e 2c 20 68 4f 62 6a  e(hSession, hObj
0bb0: 65 63 74 2c 20 61 74 74 72 54 65 6d 70 6c 61 74  ect, attrTemplat
0bc0: 65 2c 20 73 69 7a 65 6f 66 28 61 74 74 72 54 65  e, sizeof(attrTe
0bd0: 6d 70 6c 61 74 65 29 20 2f 20 73 69 7a 65 6f 66  mplate) / sizeof
0be0: 28 61 74 74 72 54 65 6d 70 6c 61 74 65 5b 30 5d  (attrTemplate[0]
0bf0: 29 29 3b 0a 09 09 09 69 66 20 28 63 68 6b 5f 72  ));....if (chk_r
0c00: 76 20 3d 3d 20 43 4b 52 5f 41 54 54 52 49 42 55  v == CKR_ATTRIBU
0c10: 54 45 5f 54 59 50 45 5f 49 4e 56 41 4c 49 44 20  TE_TYPE_INVALID 
0c20: 7c 7c 20 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52  || chk_rv == CKR
0c30: 5f 41 54 54 52 49 42 55 54 45 5f 53 45 4e 53 49  _ATTRIBUTE_SENSI
0c40: 54 49 56 45 20 7c 7c 20 63 68 6b 5f 72 76 20 3d  TIVE || chk_rv =
0c50: 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f  = CKR_BUFFER_TOO
0c60: 5f 53 4d 41 4c 4c 29 20 7b 0a 09 09 09 09 63 68  _SMALL) {.....ch
0c70: 6b 5f 72 76 20 3d 20 43 4b 52 5f 4f 4b 3b 0a 09  k_rv = CKR_OK;..
0c80: 09 09 7d 0a 0a 09 09 09 69 66 20 28 63 68 6b 5f  ..}.....if (chk_
0c90: 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a  rv != CKR_OK) {.
0ca0: 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09  ....continue;...
0cb0: 09 7d 0a 0a 09 09 09 66 6f 72 20 28 63 75 72 72  .}.....for (curr
0cc0: 41 74 74 72 49 6e 64 65 78 20 3d 20 30 3b 20 63  AttrIndex = 0; c
0cd0: 75 72 72 41 74 74 72 49 6e 64 65 78 20 3c 20 28  urrAttrIndex < (
0ce0: 73 69 7a 65 6f 66 28 61 74 74 72 54 65 6d 70 6c  sizeof(attrTempl
0cf0: 61 74 65 29 20 2f 20 73 69 7a 65 6f 66 28 61 74  ate) / sizeof(at
0d00: 74 72 54 65 6d 70 6c 61 74 65 5b 30 5d 29 29 3b  trTemplate[0]));
0d10: 20 63 75 72 72 41 74 74 72 49 6e 64 65 78 2b 2b   currAttrIndex++
0d20: 29 20 7b 0a 09 09 09 09 63 75 72 72 41 74 74 72  ) {.....currAttr
0d30: 20 3d 20 26 61 74 74 72 54 65 6d 70 6c 61 74 65   = &attrTemplate
0d40: 5b 63 75 72 72 41 74 74 72 49 6e 64 65 78 5d 3b  [currAttrIndex];
0d50: 0a 0a 09 09 09 09 69 66 20 28 63 75 72 72 41 74  ......if (currAt
0d60: 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 6e 20 3d  tr->ulValueLen =
0d70: 3d 20 30 29 20 7b 0a 09 09 09 09 09 63 6f 6e 74  = 0) {......cont
0d80: 69 6e 75 65 3b 0a 09 09 09 09 7d 0a 0a 09 09 09  inue;.....}.....
0d90: 09 69 66 20 28 28 28 43 4b 5f 4c 4f 4e 47 29 20  .if (((CK_LONG) 
0da0: 63 75 72 72 41 74 74 72 2d 3e 75 6c 56 61 6c 75  currAttr->ulValu
0db0: 65 4c 65 6e 29 20 3d 3d 20 28 28 43 4b 5f 4c 4f  eLen) == ((CK_LO
0dc0: 4e 47 29 20 2d 31 29 29 20 7b 0a 09 09 09 09 09  NG) -1)) {......
0dd0: 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 09 7d 0a  continue;.....}.
0de0: 0a 09 09 09 09 63 75 72 72 41 74 74 72 2d 3e 70  .....currAttr->p
0df0: 56 61 6c 75 65 20 3d 20 6d 61 6c 6c 6f 63 28 63  Value = malloc(c
0e00: 75 72 72 41 74 74 72 2d 3e 75 6c 56 61 6c 75 65  urrAttr->ulValue
0e10: 4c 65 6e 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 63  Len);....}.....c
0e20: 68 6b 5f 72 76 20 3d 20 43 5f 47 65 74 41 74 74  hk_rv = C_GetAtt
0e30: 72 69 62 75 74 65 56 61 6c 75 65 28 68 53 65 73  ributeValue(hSes
0e40: 73 69 6f 6e 2c 20 68 4f 62 6a 65 63 74 2c 20 61  sion, hObject, a
0e50: 74 74 72 54 65 6d 70 6c 61 74 65 2c 20 73 69 7a  ttrTemplate, siz
0e60: 65 6f 66 28 61 74 74 72 54 65 6d 70 6c 61 74 65  eof(attrTemplate
0e70: 29 20 2f 20 73 69 7a 65 6f 66 28 61 74 74 72 54  ) / sizeof(attrT
0e80: 65 6d 70 6c 61 74 65 5b 30 5d 29 29 3b 0a 09 09  emplate[0]));...
0e90: 09 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43  .if (chk_rv != C
0ea0: 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 63 6f 6e  KR_OK) {.....con
0eb0: 74 69 6e 75 65 3b 0a 09 09 09 7d 0a 0a 09 09 7d  tinue;....}....}
0ec0: 0a 0a 09 09 6d 6f 64 75 6c 65 46 75 6e 63 74 69  ....moduleFuncti
0ed0: 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 4f 62  onList->C_FindOb
0ee0: 6a 65 63 74 73 46 69 6e 61 6c 28 68 53 65 73 73  jectsFinal(hSess
0ef0: 69 6f 6e 29 3b 0a 0a 09 09 6d 6f 64 75 6c 65 46  ion);....moduleF
0f00: 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43  unctionList->C_C
0f10: 6c 6f 73 65 53 65 73 73 69 6f 6e 28 68 53 65 73  loseSession(hSes
0f20: 73 69 6f 6e 29 3b 0a 09 7d 0a 0a 09 72 65 74 75  sion);..}...retu
0f30: 72 6e 28 30 29 3b 0a 7d 0a 0a 23 69 66 64 65 66  rn(0);.}..#ifdef
0f40: 20 5f 5f 63 70 6c 75 73 70 6c 75 73 0a 7d 0a 23   __cplusplus.}.#
0f50: 65 6e 64 69 66 0a                                endif.