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: 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 #include <string
0060: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 .h>.#include <st
0070: 64 69 6f 2e 68 3e 0a 0a 23 69 6e 63 6c 75 64 65 dio.h>..#include
0080: 20 22 6d 79 70 6b 63 73 31 31 2e 68 22 0a 23 69 "mypkcs11.h".#i
0090: 6e 63 6c 75 64 65 20 22 63 61 63 6b 65 79 2d 63 nclude "cackey-c
00a0: 68 72 6f 6d 65 2e 68 22 0a 0a 73 74 72 75 63 74 hrome.h"..struct
00b0: 20 63 61 63 6b 65 79 5f 63 68 72 6f 6d 65 5f 69 cackey_chrome_i
00c0: 64 20 7b 0a 09 76 6f 69 64 20 2a 69 64 3b 0a 09 d {..void *id;..
00d0: 73 69 7a 65 5f 74 20 69 64 4c 65 6e 3b 0a 09 69 size_t idLen;..i
00e0: 6e 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 3b 0a nt initialized;.
00f0: 7d 3b 0a 0a 73 74 61 74 69 63 20 43 4b 5f 46 55 };..static CK_FU
0100: 4e 43 54 49 4f 4e 5f 4c 49 53 54 5f 50 54 52 20 NCTION_LIST_PTR
0110: 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 moduleFunctionLi
0120: 73 74 20 3d 20 4e 55 4c 4c 3b 0a 0a 73 74 61 74 st = NULL;..stat
0130: 69 63 20 43 4b 5f 52 56 20 63 61 63 6b 65 79 5f ic CK_RV cackey_
0140: 63 68 72 6f 6d 65 5f 69 6e 69 74 28 76 6f 69 64 chrome_init(void
0150: 29 20 7b 0a 09 43 4b 5f 43 5f 49 4e 49 54 49 41 ) {..CK_C_INITIA
0160: 4c 49 5a 45 5f 41 52 47 53 20 69 6e 69 74 61 72 LIZE_ARGS initar
0170: 67 73 3b 0a 09 43 4b 5f 52 56 20 63 68 6b 5f 72 gs;..CK_RV chk_r
0180: 76 3b 0a 0a 09 69 66 20 28 6d 6f 64 75 6c 65 46 v;...if (moduleF
0190: 75 6e 63 74 69 6f 6e 4c 69 73 74 20 21 3d 20 4e unctionList != N
01a0: 55 4c 4c 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 ULL) {...return(
01b0: 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 63 68 CKR_OK);..}...ch
01c0: 6b 5f 72 76 20 3d 20 43 5f 47 65 74 46 75 6e 63 k_rv = C_GetFunc
01d0: 74 69 6f 6e 4c 69 73 74 28 26 6d 6f 64 75 6c 65 tionList(&module
01e0: 46 75 6e 63 74 69 6f 6e 4c 69 73 74 29 3b 0a 09 FunctionList);..
01f0: 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b if (chk_rv != CK
0200: 52 5f 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e R_OK) {...return
0210: 28 63 68 6b 5f 72 76 29 3b 0a 09 7d 0a 0a 09 69 (chk_rv);..}...i
0220: 6e 69 74 61 72 67 73 2e 43 72 65 61 74 65 4d 75 nitargs.CreateMu
0230: 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 69 6e 69 tex = NULL;..ini
0240: 74 61 72 67 73 2e 44 65 73 74 72 6f 79 4d 75 74 targs.DestroyMut
0250: 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 69 6e 69 74 ex = NULL;..init
0260: 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 20 3d args.LockMutex =
0270: 20 4e 55 4c 4c 3b 0a 09 69 6e 69 74 61 72 67 73 NULL;..initargs
0280: 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 20 3d 20 4e .UnlockMutex = N
0290: 55 4c 4c 3b 0a 09 69 6e 69 74 61 72 67 73 2e 66 ULL;..initargs.f
02a0: 6c 61 67 73 20 3d 20 43 4b 46 5f 4f 53 5f 4c 4f lags = CKF_OS_LO
02b0: 43 4b 49 4e 47 5f 4f 4b 3b 0a 09 69 6e 69 74 61 CKING_OK;..inita
02c0: 72 67 73 2e 70 52 65 73 65 72 76 65 64 20 3d 20 rgs.pReserved =
02d0: 4e 55 4c 4c 3b 0a 0a 09 63 68 6b 5f 72 76 20 3d NULL;...chk_rv =
02e0: 20 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f 6e 4c moduleFunctionL
02f0: 69 73 74 2d 3e 43 5f 49 6e 69 74 69 61 6c 69 7a ist->C_Initializ
0300: 65 28 26 69 6e 69 74 61 72 67 73 29 3b 0a 09 69 e(&initargs);..i
0310: 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 f (chk_rv != CKR
0320: 5f 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 _OK) {...return(
0330: 63 68 6b 5f 72 76 29 3b 0a 09 7d 0a 0a 09 72 65 chk_rv);..}...re
0340: 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a turn(CKR_OK);.}.
0350: 0a 76 6f 69 64 20 63 61 63 6b 65 79 5f 63 68 72 .void cackey_chr
0360: 6f 6d 65 5f 74 65 72 6d 69 6e 61 74 65 28 76 6f ome_terminate(vo
0370: 69 64 29 20 7b 0a 09 69 66 20 28 21 6d 6f 64 75 id) {..if (!modu
0380: 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 29 20 leFunctionList)
0390: 7b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a {...return;..}..
03a0: 09 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f 6e 4c .moduleFunctionL
03b0: 69 73 74 2d 3e 43 5f 46 69 6e 61 6c 69 7a 65 28 ist->C_Finalize(
03c0: 4e 55 4c 4c 29 3b 0a 0a 09 66 72 65 65 28 6d 6f NULL);...free(mo
03d0: 64 75 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 duleFunctionList
03e0: 29 3b 0a 0a 09 6d 6f 64 75 6c 65 46 75 6e 63 74 );...moduleFunct
03f0: 69 6f 6e 4c 69 73 74 20 3d 20 4e 55 4c 4c 3b 0a ionList = NULL;.
0400: 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 73 74 61 ..return;.}..sta
0410: 74 69 63 20 43 4b 5f 52 56 20 63 61 63 6b 65 79 tic CK_RV cackey
0420: 5f 63 68 72 6f 6d 65 5f 47 65 74 41 74 74 72 69 _chrome_GetAttri
0430: 62 75 74 65 73 46 72 6f 6d 54 65 6d 70 6c 61 74 butesFromTemplat
0440: 65 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e e(CK_SESSION_HAN
0450: 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b DLE hSession, CK
0460: 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 _OBJECT_HANDLE h
0470: 4f 62 6a 65 63 74 2c 20 43 4b 5f 41 54 54 52 49 Object, CK_ATTRI
0480: 42 55 54 45 20 2a 61 74 74 72 54 65 6d 70 6c 61 BUTE *attrTempla
0490: 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 61 74 74 te, CK_ULONG att
04a0: 72 54 65 6d 70 6c 61 74 65 43 6f 75 6e 74 29 20 rTemplateCount)
04b0: 7b 0a 09 43 4b 5f 52 56 20 63 68 6b 5f 72 76 3b {..CK_RV chk_rv;
04c0: 0a 20 09 43 4b 5f 41 54 54 52 49 42 55 54 45 20 . .CK_ATTRIBUTE
04d0: 2a 63 75 72 72 41 74 74 72 3b 0a 09 43 4b 5f 55 *currAttr;..CK_U
04e0: 4c 4f 4e 47 20 63 75 72 72 41 74 74 72 49 6e 64 LONG currAttrInd
04f0: 65 78 3b 0a 0a 09 66 6f 72 20 28 63 75 72 72 41 ex;...for (currA
0500: 74 74 72 49 6e 64 65 78 20 3d 20 30 3b 20 63 75 ttrIndex = 0; cu
0510: 72 72 41 74 74 72 49 6e 64 65 78 20 3c 20 61 74 rrAttrIndex < at
0520: 74 72 54 65 6d 70 6c 61 74 65 43 6f 75 6e 74 3b trTemplateCount;
0530: 20 63 75 72 72 41 74 74 72 49 6e 64 65 78 2b 2b currAttrIndex++
0540: 29 20 7b 0a 09 09 63 75 72 72 41 74 74 72 20 3d ) {...currAttr =
0550: 20 26 61 74 74 72 54 65 6d 70 6c 61 74 65 5b 63 &attrTemplate[c
0560: 75 72 72 41 74 74 72 49 6e 64 65 78 5d 3b 0a 0a urrAttrIndex];..
0570: 09 09 63 75 72 72 41 74 74 72 2d 3e 70 56 61 6c ..currAttr->pVal
0580: 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 75 72 ue = NULL;...cur
0590: 72 41 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 rAttr->ulValueLe
05a0: 6e 20 3d 20 30 3b 0a 09 7d 0a 0a 09 63 68 6b 5f n = 0;..}...chk_
05b0: 72 76 20 3d 20 6d 6f 64 75 6c 65 46 75 6e 63 74 rv = moduleFunct
05c0: 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 41 74 ionList->C_GetAt
05d0: 74 72 69 62 75 74 65 56 61 6c 75 65 28 68 53 65 tributeValue(hSe
05e0: 73 73 69 6f 6e 2c 20 68 4f 62 6a 65 63 74 2c 20 ssion, hObject,
05f0: 61 74 74 72 54 65 6d 70 6c 61 74 65 2c 20 61 74 attrTemplate, at
0600: 74 72 54 65 6d 70 6c 61 74 65 43 6f 75 6e 74 29 trTemplateCount)
0610: 3b 0a 09 69 66 20 28 63 68 6b 5f 72 76 20 3d 3d ;..if (chk_rv ==
0620: 20 43 4b 52 5f 41 54 54 52 49 42 55 54 45 5f 54 CKR_ATTRIBUTE_T
0630: 59 50 45 5f 49 4e 56 41 4c 49 44 20 7c 7c 20 63 YPE_INVALID || c
0640: 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f 41 54 54 hk_rv == CKR_ATT
0650: 52 49 42 55 54 45 5f 53 45 4e 53 49 54 49 56 45 RIBUTE_SENSITIVE
0660: 20 7c 7c 20 63 68 6b 5f 72 76 20 3d 3d 20 43 4b || chk_rv == CK
0670: 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 R_BUFFER_TOO_SMA
0680: 4c 4c 29 20 7b 0a 09 09 63 68 6b 5f 72 76 20 3d LL) {...chk_rv =
0690: 20 43 4b 52 5f 4f 4b 3b 0a 09 7d 0a 0a 09 69 66 CKR_OK;..}...if
06a0: 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f (chk_rv != CKR_
06b0: 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 63 OK) {...return(c
06c0: 68 6b 5f 72 76 29 3b 0a 09 7d 0a 0a 09 66 6f 72 hk_rv);..}...for
06d0: 20 28 63 75 72 72 41 74 74 72 49 6e 64 65 78 20 (currAttrIndex
06e0: 3d 20 30 3b 20 63 75 72 72 41 74 74 72 49 6e 64 = 0; currAttrInd
06f0: 65 78 20 3c 20 61 74 74 72 54 65 6d 70 6c 61 74 ex < attrTemplat
0700: 65 43 6f 75 6e 74 3b 20 63 75 72 72 41 74 74 72 eCount; currAttr
0710: 49 6e 64 65 78 2b 2b 29 20 7b 0a 09 09 63 75 72 Index++) {...cur
0720: 72 41 74 74 72 20 3d 20 26 61 74 74 72 54 65 6d rAttr = &attrTem
0730: 70 6c 61 74 65 5b 63 75 72 72 41 74 74 72 49 6e plate[currAttrIn
0740: 64 65 78 5d 3b 0a 0a 09 09 69 66 20 28 63 75 72 dex];....if (cur
0750: 72 41 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 rAttr->ulValueLe
0760: 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 09 63 6f 6e n == 0) {....con
0770: 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 69 66 tinue;...}....if
0780: 20 28 28 28 43 4b 5f 4c 4f 4e 47 29 20 63 75 72 (((CK_LONG) cur
0790: 72 41 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c 65 rAttr->ulValueLe
07a0: 6e 29 20 3d 3d 20 28 28 43 4b 5f 4c 4f 4e 47 29 n) == ((CK_LONG)
07b0: 20 2d 31 29 29 20 7b 0a 09 09 09 63 6f 6e 74 69 -1)) {....conti
07c0: 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 63 75 72 72 nue;...}....curr
07d0: 41 74 74 72 2d 3e 70 56 61 6c 75 65 20 3d 20 6d Attr->pValue = m
07e0: 61 6c 6c 6f 63 28 63 75 72 72 41 74 74 72 2d 3e alloc(currAttr->
07f0: 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 09 7d 0a ulValueLen);..}.
0800: 0a 09 63 68 6b 5f 72 76 20 3d 20 6d 6f 64 75 6c ..chk_rv = modul
0810: 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 eFunctionList->C
0820: 5f 47 65 74 41 74 74 72 69 62 75 74 65 56 61 6c _GetAttributeVal
0830: 75 65 28 68 53 65 73 73 69 6f 6e 2c 20 68 4f 62 ue(hSession, hOb
0840: 6a 65 63 74 2c 20 61 74 74 72 54 65 6d 70 6c 61 ject, attrTempla
0850: 74 65 2c 20 61 74 74 72 54 65 6d 70 6c 61 74 65 te, attrTemplate
0860: 43 6f 75 6e 74 29 3b 0a 09 69 66 20 28 63 68 6b Count);..if (chk
0870: 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b _rv != CKR_OK) {
0880: 0a 09 09 66 72 65 65 28 63 75 72 72 41 74 74 72 ...free(currAttr
0890: 2d 3e 70 56 61 6c 75 65 29 3b 0a 0a 09 09 72 65 ->pValue);....re
08a0: 74 75 72 6e 28 63 68 6b 5f 72 76 29 3b 0a 09 7d turn(chk_rv);..}
08b0: 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b ...return(CKR_OK
08c0: 29 3b 0a 7d 0a 0a 69 6e 74 20 63 61 63 6b 65 79 );.}..int cackey
08d0: 5f 63 68 72 6f 6d 65 5f 6c 69 73 74 43 65 72 74 _chrome_listCert
08e0: 69 66 69 63 61 74 65 73 28 73 74 72 75 63 74 20 ificates(struct
08f0: 63 61 63 6b 65 79 5f 63 65 72 74 69 66 69 63 61 cackey_certifica
0900: 74 65 20 2a 2a 63 65 72 74 69 66 69 63 61 74 65 te **certificate
0910: 73 29 20 7b 0a 09 43 4b 5f 52 56 20 63 68 6b 5f s) {..CK_RV chk_
0920: 72 76 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 6e 75 rv;..CK_ULONG nu
0930: 6d 53 6c 6f 74 73 2c 20 63 75 72 72 53 6c 6f 74 mSlots, currSlot
0940: 3b 0a 09 43 4b 5f 53 4c 4f 54 5f 49 44 5f 50 54 ;..CK_SLOT_ID_PT
0950: 52 20 73 6c 6f 74 73 3b 0a 09 43 4b 5f 53 4c 4f R slots;..CK_SLO
0960: 54 5f 49 4e 46 4f 20 73 6c 6f 74 49 6e 66 6f 3b T_INFO slotInfo;
0970: 0a 09 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e ..CK_SESSION_HAN
0980: 44 4c 45 20 68 53 65 73 73 69 6f 6e 3b 0a 09 43 DLE hSession;..C
0990: 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 K_OBJECT_HANDLE
09a0: 68 4f 62 6a 65 63 74 3b 0a 09 43 4b 5f 55 4c 4f hObject;..CK_ULO
09b0: 4e 47 20 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 NG ulObjectCount
09c0: 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 20 ;..CK_ATTRIBUTE
09d0: 73 65 61 72 63 68 54 65 6d 70 6c 61 74 65 50 72 searchTemplatePr
09e0: 69 76 61 74 65 4b 65 79 73 5b 5d 20 3d 20 7b 0a ivateKeys[] = {.
09f0: 09 09 7b 43 4b 41 5f 43 4c 41 53 53 2c 20 4e 55 ..{CKA_CLASS, NU
0a00: 4c 4c 2c 20 73 69 7a 65 6f 66 28 43 4b 5f 4f 42 LL, sizeof(CK_OB
0a10: 4a 45 43 54 5f 43 4c 41 53 53 29 7d 0a 09 7d 3b JECT_CLASS)}..};
0a20: 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 20 73 ..CK_ATTRIBUTE s
0a30: 65 61 72 63 68 54 65 6d 70 6c 61 74 65 43 65 72 earchTemplateCer
0a40: 74 69 66 69 63 61 74 65 73 5b 5d 20 3d 20 7b 0a tificates[] = {.
0a50: 09 09 7b 43 4b 41 5f 43 4c 41 53 53 2c 20 4e 55 ..{CKA_CLASS, NU
0a60: 4c 4c 2c 20 73 69 7a 65 6f 66 28 43 4b 5f 4f 42 LL, sizeof(CK_OB
0a70: 4a 45 43 54 5f 43 4c 41 53 53 29 7d 2c 0a 09 09 JECT_CLASS)},...
0a80: 7b 43 4b 41 5f 49 44 2c 20 4e 55 4c 4c 2c 20 30 {CKA_ID, NULL, 0
0a90: 7d 0a 09 7d 3b 0a 09 43 4b 5f 41 54 54 52 49 42 }..};..CK_ATTRIB
0aa0: 55 54 45 20 61 74 74 72 54 65 6d 70 6c 61 74 65 UTE attrTemplate
0ab0: 50 72 69 76 61 74 65 4b 65 79 5b 5d 20 3d 20 7b PrivateKey[] = {
0ac0: 0a 09 09 7b 43 4b 41 5f 49 44 2c 20 4e 55 4c 4c ...{CKA_ID, NULL
0ad0: 2c 20 30 7d 0a 09 7d 3b 0a 09 43 4b 5f 41 54 54 , 0}..};..CK_ATT
0ae0: 52 49 42 55 54 45 20 61 74 74 72 54 65 6d 70 6c RIBUTE attrTempl
0af0: 61 74 65 43 65 72 74 69 66 69 63 61 74 65 5b 5d ateCertificate[]
0b00: 20 3d 20 7b 0a 09 09 7b 43 4b 41 5f 56 41 4c 55 = {...{CKA_VALU
0b10: 45 2c 20 4e 55 4c 4c 2c 20 30 7d 0a 09 7d 3b 0a E, NULL, 0}..};.
0b20: 09 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 53 .CK_OBJECT_CLASS
0b30: 20 6f 62 6a 65 63 74 43 6c 61 73 73 50 72 69 76 objectClassPriv
0b40: 61 74 65 4b 65 79 20 3d 20 43 4b 4f 5f 50 52 49 ateKey = CKO_PRI
0b50: 56 41 54 45 5f 4b 45 59 3b 0a 09 43 4b 5f 4f 42 VATE_KEY;..CK_OB
0b60: 4a 45 43 54 5f 43 4c 41 53 53 20 6f 62 6a 65 63 JECT_CLASS objec
0b70: 74 43 6c 61 73 73 43 65 72 74 69 66 69 63 61 74 tClassCertificat
0b80: 65 20 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 e = CKO_CERTIFIC
0b90: 41 54 45 3b 0a 09 73 74 72 75 63 74 20 63 61 63 ATE;..struct cac
0ba0: 6b 65 79 5f 63 68 72 6f 6d 65 5f 69 64 20 2a 69 key_chrome_id *i
0bb0: 64 73 3b 0a 09 69 6e 74 20 69 64 73 43 6f 75 6e ds;..int idsCoun
0bc0: 74 2c 20 63 75 72 72 49 64 3b 0a 09 69 6e 74 20 t, currId;..int
0bd0: 66 6f 75 6e 64 43 65 72 74 69 66 69 63 61 74 65 foundCertificate
0be0: 73 2c 20 63 65 72 74 69 66 69 63 61 74 65 73 43 s, certificatesC
0bf0: 6f 75 6e 74 3b 0a 0a 09 2a 63 65 72 74 69 66 69 ount;...*certifi
0c00: 63 61 74 65 73 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 cates = NULL;...
0c10: 63 68 6b 5f 72 76 20 3d 20 63 61 63 6b 65 79 5f chk_rv = cackey_
0c20: 63 68 72 6f 6d 65 5f 69 6e 69 74 28 29 3b 0a 09 chrome_init();..
0c30: 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b if (chk_rv != CK
0c40: 52 5f 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e R_OK) {...return
0c50: 28 30 29 3b 0a 09 7d 0a 0a 09 63 68 6b 5f 72 76 (0);..}...chk_rv
0c60: 20 3d 20 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f = moduleFunctio
0c70: 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 53 6c 6f 74 nList->C_GetSlot
0c80: 4c 69 73 74 28 46 41 4c 53 45 2c 20 4e 55 4c 4c List(FALSE, NULL
0c90: 2c 20 26 6e 75 6d 53 6c 6f 74 73 29 3b 0a 09 69 , &numSlots);..i
0ca0: 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 f (chk_rv != CKR
0cb0: 5f 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 _OK) {...return(
0cc0: 30 29 3b 0a 09 7d 0a 0a 09 73 6c 6f 74 73 20 3d 0);..}...slots =
0cd0: 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a malloc(sizeof(*
0ce0: 73 6c 6f 74 73 29 20 2a 20 6e 75 6d 53 6c 6f 74 slots) * numSlot
0cf0: 73 29 3b 0a 0a 09 63 68 6b 5f 72 76 20 3d 20 6d s);...chk_rv = m
0d00: 6f 64 75 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 73 oduleFunctionLis
0d10: 74 2d 3e 43 5f 47 65 74 53 6c 6f 74 4c 69 73 74 t->C_GetSlotList
0d20: 28 46 41 4c 53 45 2c 20 73 6c 6f 74 73 2c 20 26 (FALSE, slots, &
0d30: 6e 75 6d 53 6c 6f 74 73 29 3b 0a 09 69 66 20 28 numSlots);..if (
0d40: 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b chk_rv != CKR_OK
0d50: 29 20 7b 0a 09 09 66 72 65 65 28 73 6c 6f 74 73 ) {...free(slots
0d60: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 30 29 3b );....return(0);
0d70: 0a 09 7d 0a 0a 09 73 65 61 72 63 68 54 65 6d 70 ..}...searchTemp
0d80: 6c 61 74 65 50 72 69 76 61 74 65 4b 65 79 73 5b latePrivateKeys[
0d90: 30 5d 2e 70 56 61 6c 75 65 20 3d 20 26 6f 62 6a 0].pValue = &obj
0da0: 65 63 74 43 6c 61 73 73 50 72 69 76 61 74 65 4b ectClassPrivateK
0db0: 65 79 3b 0a 09 73 65 61 72 63 68 54 65 6d 70 6c ey;..searchTempl
0dc0: 61 74 65 43 65 72 74 69 66 69 63 61 74 65 73 5b ateCertificates[
0dd0: 30 5d 2e 70 56 61 6c 75 65 20 3d 20 26 6f 62 6a 0].pValue = &obj
0de0: 65 63 74 43 6c 61 73 73 43 65 72 74 69 66 69 63 ectClassCertific
0df0: 61 74 65 3b 0a 0a 09 66 6f 75 6e 64 43 65 72 74 ate;...foundCert
0e00: 69 66 69 63 61 74 65 73 20 3d 20 30 3b 0a 09 63 ificates = 0;..c
0e10: 65 72 74 69 66 69 63 61 74 65 73 43 6f 75 6e 74 ertificatesCount
0e20: 20 3d 20 31 30 3b 0a 09 2a 63 65 72 74 69 66 69 = 10;..*certifi
0e30: 63 61 74 65 73 20 3d 20 6d 61 6c 6c 6f 63 28 73 cates = malloc(s
0e40: 69 7a 65 6f 66 28 2a 2a 63 65 72 74 69 66 69 63 izeof(**certific
0e50: 61 74 65 73 29 20 2a 20 63 65 72 74 69 66 69 63 ates) * certific
0e60: 61 74 65 73 43 6f 75 6e 74 29 3b 0a 0a 09 69 64 atesCount);...id
0e70: 73 43 6f 75 6e 74 20 3d 20 31 30 3b 0a 09 69 64 sCount = 10;..id
0e80: 73 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f s = malloc(sizeo
0e90: 66 28 2a 69 64 73 29 20 2a 20 69 64 73 43 6f 75 f(*ids) * idsCou
0ea0: 6e 74 29 3b 0a 0a 09 66 6f 72 20 28 63 75 72 72 nt);...for (curr
0eb0: 49 64 20 3d 20 30 3b 20 63 75 72 72 49 64 20 3c Id = 0; currId <
0ec0: 20 69 64 73 43 6f 75 6e 74 3b 20 63 75 72 72 49 idsCount; currI
0ed0: 64 2b 2b 29 20 7b 0a 09 09 69 64 73 5b 63 75 72 d++) {...ids[cur
0ee0: 72 49 64 5d 2e 69 6e 69 74 69 61 6c 69 7a 65 64 rId].initialized
0ef0: 20 3d 20 30 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 = 0;..}...for (
0f00: 63 75 72 72 53 6c 6f 74 20 3d 20 30 3b 20 63 75 currSlot = 0; cu
0f10: 72 72 53 6c 6f 74 20 3c 20 6e 75 6d 53 6c 6f 74 rrSlot < numSlot
0f20: 73 3b 20 63 75 72 72 53 6c 6f 74 2b 2b 29 20 7b s; currSlot++) {
0f30: 0a 09 09 63 68 6b 5f 72 76 20 3d 20 6d 6f 64 75 ...chk_rv = modu
0f40: 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e leFunctionList->
0f50: 43 5f 47 65 74 53 6c 6f 74 49 6e 66 6f 28 73 6c C_GetSlotInfo(sl
0f60: 6f 74 73 5b 63 75 72 72 53 6c 6f 74 5d 2c 20 26 ots[currSlot], &
0f70: 73 6c 6f 74 49 6e 66 6f 29 3b 0a 09 09 69 66 20 slotInfo);...if
0f80: 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f (chk_rv != CKR_O
0f90: 4b 29 20 7b 0a 09 09 09 63 6f 6e 74 69 6e 75 65 K) {....continue
0fa0: 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 28 73 6c ;...}....if ((sl
0fb0: 6f 74 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 otInfo.flags & C
0fc0: 4b 46 5f 54 4f 4b 45 4e 5f 50 52 45 53 45 4e 54 KF_TOKEN_PRESENT
0fd0: 29 20 21 3d 20 43 4b 46 5f 54 4f 4b 45 4e 5f 50 ) != CKF_TOKEN_P
0fe0: 52 45 53 45 4e 54 29 20 7b 0a 09 09 09 63 6f 6e RESENT) {....con
0ff0: 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 63 68 tinue;...}....ch
1000: 6b 5f 72 76 20 3d 20 6d 6f 64 75 6c 65 46 75 6e k_rv = moduleFun
1010: 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 4f 70 65 ctionList->C_Ope
1020: 6e 53 65 73 73 69 6f 6e 28 73 6c 6f 74 73 5b 63 nSession(slots[c
1030: 75 72 72 53 6c 6f 74 5d 2c 20 43 4b 46 5f 53 45 urrSlot], CKF_SE
1040: 52 49 41 4c 5f 53 45 53 53 49 4f 4e 2c 20 4e 55 RIAL_SESSION, NU
1050: 4c 4c 2c 20 4e 55 4c 4c 2c 20 26 68 53 65 73 73 LL, NULL, &hSess
1060: 69 6f 6e 29 3b 0a 09 09 69 66 20 28 63 68 6b 5f ion);...if (chk_
1070: 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a rv != CKR_OK) {.
1080: 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d ...continue;...}
1090: 0a 0a 09 09 63 68 6b 5f 72 76 20 3d 20 6d 6f 64 ....chk_rv = mod
10a0: 75 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d uleFunctionList-
10b0: 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e >C_FindObjectsIn
10c0: 69 74 28 68 53 65 73 73 69 6f 6e 2c 20 73 65 61 it(hSession, sea
10d0: 72 63 68 54 65 6d 70 6c 61 74 65 50 72 69 76 61 rchTemplatePriva
10e0: 74 65 4b 65 79 73 2c 20 73 69 7a 65 6f 66 28 73 teKeys, sizeof(s
10f0: 65 61 72 63 68 54 65 6d 70 6c 61 74 65 50 72 69 earchTemplatePri
1100: 76 61 74 65 4b 65 79 73 29 20 2f 20 73 69 7a 65 vateKeys) / size
1110: 6f 66 28 73 65 61 72 63 68 54 65 6d 70 6c 61 74 of(searchTemplat
1120: 65 50 72 69 76 61 74 65 4b 65 79 73 5b 30 5d 29 ePrivateKeys[0])
1130: 29 3b 20 0a 09 09 69 66 20 28 63 68 6b 5f 72 76 ); ...if (chk_rv
1140: 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 != CKR_OK) {...
1150: 09 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f 6e 4c .moduleFunctionL
1160: 69 73 74 2d 3e 43 5f 43 6c 6f 73 65 53 65 73 73 ist->C_CloseSess
1170: 69 6f 6e 28 68 53 65 73 73 69 6f 6e 29 3b 0a 0a ion(hSession);..
1180: 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d ...continue;...}
1190: 0a 0a 09 09 66 6f 72 20 28 63 75 72 72 49 64 20 ....for (currId
11a0: 3d 20 30 3b 20 63 75 72 72 49 64 20 3c 20 69 64 = 0; currId < id
11b0: 73 43 6f 75 6e 74 3b 20 63 75 72 72 49 64 2b 2b sCount; currId++
11c0: 29 20 7b 0a 09 09 09 69 66 20 28 21 69 64 73 5b ) {....if (!ids[
11d0: 63 75 72 72 49 64 5d 2e 69 6e 69 74 69 61 6c 69 currId].initiali
11e0: 7a 65 64 29 20 7b 0a 09 09 09 09 63 6f 6e 74 69 zed) {.....conti
11f0: 6e 75 65 3b 0a 09 09 09 7d 0a 0a 09 09 09 66 72 nue;....}.....fr
1200: 65 65 28 69 64 73 5b 63 75 72 72 49 64 5d 2e 69 ee(ids[currId].i
1210: 64 29 3b 0a 0a 09 09 09 69 64 73 5b 63 75 72 72 d);.....ids[curr
1220: 49 64 5d 2e 69 6e 69 74 69 61 6c 69 7a 65 64 20 Id].initialized
1230: 3d 20 30 3b 0a 09 09 7d 0a 0a 09 09 63 75 72 72 = 0;...}....curr
1240: 49 64 20 3d 20 30 3b 0a 0a 09 09 77 68 69 6c 65 Id = 0;....while
1250: 20 28 31 29 20 7b 0a 09 09 09 63 68 6b 5f 72 76 (1) {....chk_rv
1260: 20 3d 20 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f = moduleFunctio
1270: 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a nList->C_FindObj
1280: 65 63 74 73 28 68 53 65 73 73 69 6f 6e 2c 20 26 ects(hSession, &
1290: 68 4f 62 6a 65 63 74 2c 20 31 2c 20 26 75 6c 4f hObject, 1, &ulO
12a0: 62 6a 65 63 74 43 6f 75 6e 74 29 3b 0a 09 09 09 bjectCount);....
12b0: 69 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b if (chk_rv != CK
12c0: 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 62 72 65 61 R_OK) {.....brea
12d0: 6b 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 k;....}.....if (
12e0: 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 3d ulObjectCount ==
12f0: 20 30 29 20 7b 0a 09 09 09 09 62 72 65 61 6b 3b 0) {.....break;
1300: 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 75 6c ....}.....if (ul
1310: 4f 62 6a 65 63 74 43 6f 75 6e 74 20 21 3d 20 31 ObjectCount != 1
1320: 29 20 7b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 ) {.....break;..
1330: 09 09 7d 0a 0a 09 09 09 63 68 6b 5f 72 76 20 3d ..}.....chk_rv =
1340: 20 63 61 63 6b 65 79 5f 63 68 72 6f 6d 65 5f 47 cackey_chrome_G
1350: 65 74 41 74 74 72 69 62 75 74 65 73 46 72 6f 6d etAttributesFrom
1360: 54 65 6d 70 6c 61 74 65 28 68 53 65 73 73 69 6f Template(hSessio
1370: 6e 2c 20 68 4f 62 6a 65 63 74 2c 20 61 74 74 72 n, hObject, attr
1380: 54 65 6d 70 6c 61 74 65 50 72 69 76 61 74 65 4b TemplatePrivateK
1390: 65 79 2c 20 73 69 7a 65 6f 66 28 61 74 74 72 54 ey, sizeof(attrT
13a0: 65 6d 70 6c 61 74 65 50 72 69 76 61 74 65 4b 65 emplatePrivateKe
13b0: 79 29 20 2f 20 73 69 7a 65 6f 66 28 61 74 74 72 y) / sizeof(attr
13c0: 54 65 6d 70 6c 61 74 65 50 72 69 76 61 74 65 4b TemplatePrivateK
13d0: 65 79 5b 30 5d 29 29 3b 0a 09 09 09 69 66 20 28 ey[0]));....if (
13e0: 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b chk_rv != CKR_OK
13f0: 29 20 7b 0a 09 09 09 09 63 6f 6e 74 69 6e 75 65 ) {.....continue
1400: 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 63 ;....}.....if (c
1410: 75 72 72 49 64 20 3e 3d 20 69 64 73 43 6f 75 6e urrId >= idsCoun
1420: 74 29 20 7b 0a 09 09 09 09 69 64 73 43 6f 75 6e t) {.....idsCoun
1430: 74 20 2a 3d 20 32 3b 0a 0a 09 09 09 09 69 64 73 t *= 2;......ids
1440: 20 3d 20 72 65 61 6c 6c 6f 63 28 69 64 73 2c 20 = realloc(ids,
1450: 73 69 7a 65 6f 66 28 2a 69 64 73 29 20 2a 20 69 sizeof(*ids) * i
1460: 64 73 43 6f 75 6e 74 29 3b 0a 09 09 09 7d 0a 0a dsCount);....}..
1470: 09 09 09 69 64 73 5b 63 75 72 72 49 64 5d 2e 69 ...ids[currId].i
1480: 64 4c 65 6e 20 3d 20 61 74 74 72 54 65 6d 70 6c dLen = attrTempl
1490: 61 74 65 50 72 69 76 61 74 65 4b 65 79 5b 30 5d atePrivateKey[0]
14a0: 2e 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a 09 09 09 .ulValueLen;....
14b0: 69 64 73 5b 63 75 72 72 49 64 5d 2e 69 64 20 3d ids[currId].id =
14c0: 20 61 74 74 72 54 65 6d 70 6c 61 74 65 50 72 69 attrTemplatePri
14d0: 76 61 74 65 4b 65 79 5b 30 5d 2e 70 56 61 6c 75 vateKey[0].pValu
14e0: 65 3b 0a 09 09 09 69 64 73 5b 63 75 72 72 49 64 e;....ids[currId
14f0: 5d 2e 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d 20 ].initialized =
1500: 31 3b 0a 09 09 09 63 75 72 72 49 64 2b 2b 3b 0a 1;....currId++;.
1510: 09 09 7d 0a 0a 09 09 6d 6f 64 75 6c 65 46 75 6e ..}....moduleFun
1520: 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e ctionList->C_Fin
1530: 64 4f 62 6a 65 63 74 73 46 69 6e 61 6c 28 68 53 dObjectsFinal(hS
1540: 65 73 73 69 6f 6e 29 3b 0a 0a 09 09 66 6f 72 20 ession);....for
1550: 28 63 75 72 72 49 64 20 3d 20 30 3b 20 63 75 72 (currId = 0; cur
1560: 72 49 64 20 3c 20 69 64 73 43 6f 75 6e 74 3b 20 rId < idsCount;
1570: 63 75 72 72 49 64 2b 2b 29 20 7b 0a 09 09 09 69 currId++) {....i
1580: 66 20 28 21 69 64 73 5b 63 75 72 72 49 64 5d 2e f (!ids[currId].
1590: 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 initialized) {..
15a0: 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 ...continue;....
15b0: 7d 0a 0a 09 09 09 73 65 61 72 63 68 54 65 6d 70 }.....searchTemp
15c0: 6c 61 74 65 43 65 72 74 69 66 69 63 61 74 65 73 lateCertificates
15d0: 5b 31 5d 2e 70 56 61 6c 75 65 20 3d 20 69 64 73 [1].pValue = ids
15e0: 5b 63 75 72 72 49 64 5d 2e 69 64 3b 0a 09 09 09 [currId].id;....
15f0: 73 65 61 72 63 68 54 65 6d 70 6c 61 74 65 43 65 searchTemplateCe
1600: 72 74 69 66 69 63 61 74 65 73 5b 31 5d 2e 75 6c rtificates[1].ul
1610: 56 61 6c 75 65 4c 65 6e 20 3d 20 69 64 73 5b 63 ValueLen = ids[c
1620: 75 72 72 49 64 5d 2e 69 64 4c 65 6e 3b 0a 0a 09 urrId].idLen;...
1630: 09 09 63 68 6b 5f 72 76 20 3d 20 6d 6f 64 75 6c ..chk_rv = modul
1640: 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 eFunctionList->C
1650: 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 _FindObjectsInit
1660: 28 68 53 65 73 73 69 6f 6e 2c 20 73 65 61 72 63 (hSession, searc
1670: 68 54 65 6d 70 6c 61 74 65 43 65 72 74 69 66 69 hTemplateCertifi
1680: 63 61 74 65 73 2c 20 73 69 7a 65 6f 66 28 73 65 cates, sizeof(se
1690: 61 72 63 68 54 65 6d 70 6c 61 74 65 43 65 72 74 archTemplateCert
16a0: 69 66 69 63 61 74 65 73 29 20 2f 20 73 69 7a 65 ificates) / size
16b0: 6f 66 28 73 65 61 72 63 68 54 65 6d 70 6c 61 74 of(searchTemplat
16c0: 65 43 65 72 74 69 66 69 63 61 74 65 73 5b 30 5d eCertificates[0]
16d0: 29 29 3b 20 0a 09 09 09 69 66 20 28 63 68 6b 5f )); ....if (chk_
16e0: 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a rv != CKR_OK) {.
16f0: 09 09 09 09 66 72 65 65 28 69 64 73 5b 63 75 72 ....free(ids[cur
1700: 72 49 64 5d 2e 69 64 29 3b 0a 0a 09 09 09 09 69 rId].id);......i
1710: 64 73 5b 63 75 72 72 49 64 5d 2e 69 6e 69 74 69 ds[currId].initi
1720: 61 6c 69 7a 65 64 20 3d 20 30 3b 0a 0a 09 09 09 alized = 0;.....
1730: 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 7d 0a .continue;....}.
1740: 0a 09 09 09 77 68 69 6c 65 20 28 31 29 20 7b 0a ....while (1) {.
1750: 09 09 09 09 63 68 6b 5f 72 76 20 3d 20 6d 6f 64 ....chk_rv = mod
1760: 75 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d uleFunctionList-
1770: 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 28 68 >C_FindObjects(h
1780: 53 65 73 73 69 6f 6e 2c 20 26 68 4f 62 6a 65 63 Session, &hObjec
1790: 74 2c 20 31 2c 20 26 75 6c 4f 62 6a 65 63 74 43 t, 1, &ulObjectC
17a0: 6f 75 6e 74 29 3b 0a 09 09 09 09 69 66 20 28 63 ount);.....if (c
17b0: 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 hk_rv != CKR_OK)
17c0: 20 7b 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 {......break;..
17d0: 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 75 6c ...}......if (ul
17e0: 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 3d 20 30 ObjectCount == 0
17f0: 29 20 7b 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a ) {......break;.
1800: 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 75 ....}......if (u
1810: 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 21 3d 20 lObjectCount !=
1820: 31 29 20 7b 0a 09 09 09 09 09 62 72 65 61 6b 3b 1) {......break;
1830: 0a 09 09 09 09 7d 0a 0a 09 09 09 09 63 68 6b 5f .....}......chk_
1840: 72 76 20 3d 20 63 61 63 6b 65 79 5f 63 68 72 6f rv = cackey_chro
1850: 6d 65 5f 47 65 74 41 74 74 72 69 62 75 74 65 73 me_GetAttributes
1860: 46 72 6f 6d 54 65 6d 70 6c 61 74 65 28 68 53 65 FromTemplate(hSe
1870: 73 73 69 6f 6e 2c 20 68 4f 62 6a 65 63 74 2c 20 ssion, hObject,
1880: 61 74 74 72 54 65 6d 70 6c 61 74 65 43 65 72 74 attrTemplateCert
1890: 69 66 69 63 61 74 65 2c 20 73 69 7a 65 6f 66 28 ificate, sizeof(
18a0: 61 74 74 72 54 65 6d 70 6c 61 74 65 43 65 72 74 attrTemplateCert
18b0: 69 66 69 63 61 74 65 29 20 2f 20 73 69 7a 65 6f ificate) / sizeo
18c0: 66 28 61 74 74 72 54 65 6d 70 6c 61 74 65 43 65 f(attrTemplateCe
18d0: 72 74 69 66 69 63 61 74 65 5b 30 5d 29 29 3b 0a rtificate[0]));.
18e0: 09 09 09 09 69 66 20 28 63 68 6b 5f 72 76 20 21 ....if (chk_rv !
18f0: 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 = CKR_OK) {.....
1900: 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 09 7d .continue;.....}
1910: 0a 0a 09 09 09 09 69 66 20 28 66 6f 75 6e 64 43 ......if (foundC
1920: 65 72 74 69 66 69 63 61 74 65 73 20 3e 3d 20 63 ertificates >= c
1930: 65 72 74 69 66 69 63 61 74 65 73 43 6f 75 6e 74 ertificatesCount
1940: 29 20 7b 0a 09 09 09 09 09 63 65 72 74 69 66 69 ) {......certifi
1950: 63 61 74 65 73 43 6f 75 6e 74 20 2a 3d 20 32 3b catesCount *= 2;
1960: 0a 09 09 09 09 09 2a 63 65 72 74 69 66 69 63 61 ......*certifica
1970: 74 65 73 20 3d 20 72 65 61 6c 6c 6f 63 28 2a 63 tes = realloc(*c
1980: 65 72 74 69 66 69 63 61 74 65 73 2c 20 73 69 7a ertificates, siz
1990: 65 6f 66 28 2a 2a 63 65 72 74 69 66 69 63 61 74 eof(**certificat
19a0: 65 73 29 20 2a 20 63 65 72 74 69 66 69 63 61 74 es) * certificat
19b0: 65 73 43 6f 75 6e 74 29 3b 0a 09 09 09 09 7d 0a esCount);.....}.
19c0: 0a 09 09 09 09 28 2a 63 65 72 74 69 66 69 63 61 .....(*certifica
19d0: 74 65 73 29 5b 66 6f 75 6e 64 43 65 72 74 69 66 tes)[foundCertif
19e0: 69 63 61 74 65 73 5d 2e 63 65 72 74 69 66 69 63 icates].certific
19f0: 61 74 65 20 3d 20 6d 61 6c 6c 6f 63 28 61 74 74 ate = malloc(att
1a00: 72 54 65 6d 70 6c 61 74 65 43 65 72 74 69 66 69 rTemplateCertifi
1a10: 63 61 74 65 5b 30 5d 2e 75 6c 56 61 6c 75 65 4c cate[0].ulValueL
1a20: 65 6e 29 3b 0a 09 09 09 09 6d 65 6d 63 70 79 28 en);.....memcpy(
1a30: 28 2a 63 65 72 74 69 66 69 63 61 74 65 73 29 5b (*certificates)[
1a40: 66 6f 75 6e 64 43 65 72 74 69 66 69 63 61 74 65 foundCertificate
1a50: 73 5d 2e 63 65 72 74 69 66 69 63 61 74 65 2c 20 s].certificate,
1a60: 61 74 74 72 54 65 6d 70 6c 61 74 65 43 65 72 74 attrTemplateCert
1a70: 69 66 69 63 61 74 65 5b 30 5d 2e 70 56 61 6c 75 ificate[0].pValu
1a80: 65 2c 20 61 74 74 72 54 65 6d 70 6c 61 74 65 43 e, attrTemplateC
1a90: 65 72 74 69 66 69 63 61 74 65 5b 30 5d 2e 75 6c ertificate[0].ul
1aa0: 56 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 09 09 28 ValueLen);.....(
1ab0: 2a 63 65 72 74 69 66 69 63 61 74 65 73 29 5b 66 *certificates)[f
1ac0: 6f 75 6e 64 43 65 72 74 69 66 69 63 61 74 65 73 oundCertificates
1ad0: 5d 2e 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 ].certificate_le
1ae0: 6e 20 3d 20 61 74 74 72 54 65 6d 70 6c 61 74 65 n = attrTemplate
1af0: 43 65 72 74 69 66 69 63 61 74 65 5b 30 5d 2e 75 Certificate[0].u
1b00: 6c 56 61 6c 75 65 4c 65 6e 3b 0a 0a 09 09 09 09 lValueLen;......
1b10: 66 72 65 65 28 61 74 74 72 54 65 6d 70 6c 61 74 free(attrTemplat
1b20: 65 43 65 72 74 69 66 69 63 61 74 65 5b 30 5d 2e eCertificate[0].
1b30: 70 56 61 6c 75 65 29 3b 0a 0a 09 09 09 09 66 6f pValue);......fo
1b40: 75 6e 64 43 65 72 74 69 66 69 63 61 74 65 73 2b undCertificates+
1b50: 2b 3b 0a 09 09 09 7d 0a 0a 09 09 09 6d 6f 64 75 +;....}.....modu
1b60: 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e leFunctionList->
1b70: 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 69 6e C_FindObjectsFin
1b80: 61 6c 28 68 53 65 73 73 69 6f 6e 29 3b 0a 0a 09 al(hSession);...
1b90: 09 09 66 72 65 65 28 69 64 73 5b 63 75 72 72 49 ..free(ids[currI
1ba0: 64 5d 2e 69 64 29 3b 0a 0a 09 09 09 69 64 73 5b d].id);.....ids[
1bb0: 63 75 72 72 49 64 5d 2e 69 6e 69 74 69 61 6c 69 currId].initiali
1bc0: 7a 65 64 20 3d 20 30 3b 0a 09 09 7d 0a 0a 09 09 zed = 0;...}....
1bd0: 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 moduleFunctionLi
1be0: 73 74 2d 3e 43 5f 43 6c 6f 73 65 53 65 73 73 69 st->C_CloseSessi
1bf0: 6f 6e 28 68 53 65 73 73 69 6f 6e 29 3b 0a 09 7d on(hSession);..}
1c00: 0a 0a 09 66 6f 72 20 28 63 75 72 72 49 64 20 3d ...for (currId =
1c10: 20 30 3b 20 63 75 72 72 49 64 20 3c 20 69 64 73 0; currId < ids
1c20: 43 6f 75 6e 74 3b 20 63 75 72 72 49 64 2b 2b 29 Count; currId++)
1c30: 20 7b 0a 09 09 69 66 20 28 21 69 64 73 5b 63 75 {...if (!ids[cu
1c40: 72 72 49 64 5d 2e 69 6e 69 74 69 61 6c 69 7a 65 rrId].initialize
1c50: 64 29 20 7b 0a 09 09 09 63 6f 6e 74 69 6e 75 65 d) {....continue
1c60: 3b 0a 09 09 7d 0a 0a 09 09 66 72 65 65 28 69 64 ;...}....free(id
1c70: 73 5b 63 75 72 72 49 64 5d 2e 69 64 29 3b 0a 0a s[currId].id);..
1c80: 09 09 69 64 73 5b 63 75 72 72 49 64 5d 2e 69 6e ..ids[currId].in
1c90: 69 74 69 61 6c 69 7a 65 64 20 3d 20 30 3b 0a 09 itialized = 0;..
1ca0: 7d 0a 0a 09 66 72 65 65 28 69 64 73 29 3b 0a 0a }...free(ids);..
1cb0: 09 66 72 65 65 28 73 6c 6f 74 73 29 3b 0a 0a 09 .free(slots);...
1cc0: 72 65 74 75 72 6e 28 66 6f 75 6e 64 43 65 72 74 return(foundCert
1cd0: 69 66 69 63 61 74 65 73 29 3b 0a 7d 0a 0a 76 6f ificates);.}..vo
1ce0: 69 64 20 63 61 63 6b 65 79 5f 63 68 72 6f 6d 65 id cackey_chrome
1cf0: 5f 66 72 65 65 43 65 72 74 69 66 69 63 61 74 65 _freeCertificate
1d00: 73 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f s(struct cackey_
1d10: 63 65 72 74 69 66 69 63 61 74 65 20 2a 63 65 72 certificate *cer
1d20: 74 69 66 69 63 61 74 65 73 2c 20 69 6e 74 20 63 tificates, int c
1d30: 65 72 74 69 66 69 63 61 74 65 73 43 6f 75 6e 74 ertificatesCount
1d40: 29 20 7b 0a 09 69 6e 74 20 69 64 78 3b 0a 0a 09 ) {..int idx;...
1d50: 69 66 20 28 63 65 72 74 69 66 69 63 61 74 65 73 if (certificates
1d60: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 72 65 == NULL) {...re
1d70: 74 75 72 6e 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 turn;..}...for (
1d80: 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 63 idx = 0; idx < c
1d90: 65 72 74 69 66 69 63 61 74 65 73 43 6f 75 6e 74 ertificatesCount
1da0: 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 ; idx++) {...if
1db0: 28 63 65 72 74 69 66 69 63 61 74 65 73 5b 69 64 (certificates[id
1dc0: 78 5d 2e 63 65 72 74 69 66 69 63 61 74 65 29 20 x].certificate)
1dd0: 7b 0a 09 09 09 66 72 65 65 28 63 65 72 74 69 66 {....free(certif
1de0: 69 63 61 74 65 73 5b 69 64 78 5d 2e 63 65 72 74 icates[idx].cert
1df0: 69 66 69 63 61 74 65 29 3b 0a 09 09 7d 0a 09 7d ificate);...}..}
1e00: 0a 0a 09 66 72 65 65 28 63 65 72 74 69 66 69 63 ...free(certific
1e10: 61 74 65 73 29 3b 0a 0a 09 72 65 74 75 72 6e 3b ates);...return;
1e20: 0a 7d 0a 0a 63 61 63 6b 65 79 5f 63 68 72 6f 6d .}..cackey_chrom
1e30: 65 5f 72 65 74 75 72 6e 54 79 70 65 20 63 61 63 e_returnType cac
1e40: 6b 65 79 5f 63 68 72 6f 6d 65 5f 73 69 67 6e 4d key_chrome_signM
1e50: 65 73 73 61 67 65 28 73 74 72 75 63 74 20 63 61 essage(struct ca
1e60: 63 6b 65 79 5f 63 65 72 74 69 66 69 63 61 74 65 ckey_certificate
1e70: 20 2a 63 65 72 74 69 66 69 63 61 74 65 2c 20 76 *certificate, v
1e80: 6f 69 64 20 2a 64 61 74 61 2c 20 75 6e 73 69 67 oid *data, unsig
1e90: 6e 65 64 20 6c 6f 6e 67 20 64 61 74 61 4c 65 6e ned long dataLen
1ea0: 67 74 68 2c 20 76 6f 69 64 20 2a 64 65 73 74 69 gth, void *desti
1eb0: 6e 61 74 69 6f 6e 2c 20 75 6e 73 69 67 6e 65 64 nation, unsigned
1ec0: 20 6c 6f 6e 67 20 2a 64 65 73 74 69 6e 61 74 69 long *destinati
1ed0: 6f 6e 4c 65 6e 67 74 68 2c 20 63 68 61 72 20 2a onLength, char *
1ee0: 2a 70 69 6e 50 72 6f 6d 70 74 2c 20 63 6f 6e 73 *pinPrompt, cons
1ef0: 74 20 63 68 61 72 20 2a 70 69 6e 29 20 7b 0a 09 t char *pin) {..
1f00: 43 4b 5f 52 56 20 63 68 6b 5f 72 76 3b 0a 09 43 CK_RV chk_rv;..C
1f10: 4b 5f 55 4c 4f 4e 47 20 6e 75 6d 53 6c 6f 74 73 K_ULONG numSlots
1f20: 2c 20 63 75 72 72 53 6c 6f 74 3b 0a 09 43 4b 5f , currSlot;..CK_
1f30: 53 4c 4f 54 5f 49 44 5f 50 54 52 20 73 6c 6f 74 SLOT_ID_PTR slot
1f40: 73 3b 0a 09 43 4b 5f 53 4c 4f 54 5f 49 4e 46 4f s;..CK_SLOT_INFO
1f50: 20 73 6c 6f 74 49 6e 66 6f 3b 0a 09 43 4b 5f 53 slotInfo;..CK_S
1f60: 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 ESSION_HANDLE hS
1f70: 65 73 73 69 6f 6e 3b 0a 09 43 4b 5f 4f 42 4a 45 ession;..CK_OBJE
1f80: 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 CT_HANDLE hObjec
1f90: 74 2c 20 68 4b 65 79 3b 0a 09 43 4b 5f 55 4c 4f t, hKey;..CK_ULO
1fa0: 4e 47 20 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 NG ulObjectCount
1fb0: 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45 20 ;..CK_ATTRIBUTE
1fc0: 73 65 61 72 63 68 54 65 6d 70 6c 61 74 65 43 65 searchTemplateCe
1fd0: 72 74 69 66 69 63 61 74 65 73 5b 5d 20 3d 20 7b rtificates[] = {
1fe0: 0a 09 09 7b 43 4b 41 5f 43 4c 41 53 53 2c 20 4e ...{CKA_CLASS, N
1ff0: 55 4c 4c 2c 20 73 69 7a 65 6f 66 28 43 4b 5f 4f ULL, sizeof(CK_O
2000: 42 4a 45 43 54 5f 43 4c 41 53 53 29 7d 2c 0a 09 BJECT_CLASS)},..
2010: 09 7b 43 4b 41 5f 56 41 4c 55 45 2c 20 4e 55 4c .{CKA_VALUE, NUL
2020: 4c 2c 20 30 7d 0a 09 7d 3b 0a 09 43 4b 5f 41 54 L, 0}..};..CK_AT
2030: 54 52 49 42 55 54 45 20 73 65 61 72 63 68 54 65 TRIBUTE searchTe
2040: 6d 70 6c 61 74 65 50 72 69 76 61 74 65 4b 65 79 mplatePrivateKey
2050: 73 5b 5d 20 3d 20 7b 0a 09 09 7b 43 4b 41 5f 43 s[] = {...{CKA_C
2060: 4c 41 53 53 2c 20 4e 55 4c 4c 2c 20 73 69 7a 65 LASS, NULL, size
2070: 6f 66 28 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 of(CK_OBJECT_CLA
2080: 53 53 29 7d 2c 0a 09 09 7b 43 4b 41 5f 49 44 2c SS)},...{CKA_ID,
2090: 20 4e 55 4c 4c 2c 20 30 7d 0a 09 7d 3b 0a 09 43 NULL, 0}..};..C
20a0: 4b 5f 41 54 54 52 49 42 55 54 45 20 61 74 74 72 K_ATTRIBUTE attr
20b0: 54 65 6d 70 6c 61 74 65 43 65 72 74 69 66 69 63 TemplateCertific
20c0: 61 74 65 5b 5d 20 3d 20 7b 0a 09 09 7b 43 4b 41 ate[] = {...{CKA
20d0: 5f 49 44 2c 20 4e 55 4c 4c 2c 20 30 7d 2c 0a 09 _ID, NULL, 0},..
20e0: 09 7b 43 4b 41 5f 4c 41 42 45 4c 2c 20 4e 55 4c .{CKA_LABEL, NUL
20f0: 4c 2c 20 30 7d 0a 09 7d 3b 0a 09 43 4b 5f 4d 45 L, 0}..};..CK_ME
2100: 43 48 41 4e 49 53 4d 20 73 69 67 6e 4d 65 63 68 CHANISM signMech
2110: 61 6e 69 73 6d 20 3d 20 7b 43 4b 4d 5f 52 53 41 anism = {CKM_RSA
2120: 5f 50 4b 43 53 2c 20 4e 55 4c 4c 2c 20 30 7d 3b _PKCS, NULL, 0};
2130: 20 0a 09 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 ..CK_OBJECT_CLA
2140: 53 53 20 6f 62 6a 65 63 74 43 6c 61 73 73 50 72 SS objectClassPr
2150: 69 76 61 74 65 4b 65 79 20 3d 20 43 4b 4f 5f 50 ivateKey = CKO_P
2160: 52 49 56 41 54 45 5f 4b 45 59 3b 0a 09 43 4b 5f RIVATE_KEY;..CK_
2170: 4f 42 4a 45 43 54 5f 43 4c 41 53 53 20 6f 62 6a OBJECT_CLASS obj
2180: 65 63 74 43 6c 61 73 73 43 65 72 74 69 66 69 63 ectClassCertific
2190: 61 74 65 20 3d 20 43 4b 4f 5f 43 45 52 54 49 46 ate = CKO_CERTIF
21a0: 49 43 41 54 45 3b 0a 09 43 4b 5f 54 4f 4b 45 4e ICATE;..CK_TOKEN
21b0: 5f 49 4e 46 4f 20 74 6f 6b 65 6e 49 6e 66 6f 3b _INFO tokenInfo;
21c0: 0a 09 43 4b 5f 55 4c 4f 4e 47 20 74 6d 70 44 65 ..CK_ULONG tmpDe
21d0: 73 74 69 6e 61 74 69 6f 6e 4c 65 6e 67 74 68 3b stinationLength;
21e0: 0a 09 63 68 61 72 20 2a 63 65 72 74 69 66 69 63 ..char *certific
21f0: 61 74 65 4c 61 62 65 6c 3b 0a 09 69 6e 74 20 66 ateLabel;..int f
2200: 6f 75 6e 64 50 72 69 76 61 74 65 4b 65 79 4f 62 oundPrivateKeyOb
2210: 6a 65 63 74 3b 0a 09 63 61 63 6b 65 79 5f 63 68 ject;..cackey_ch
2220: 72 6f 6d 65 5f 72 65 74 75 72 6e 54 79 70 65 20 rome_returnType
2230: 72 65 74 76 61 6c 3b 0a 0a 09 2a 70 69 6e 50 72 retval;...*pinPr
2240: 6f 6d 70 74 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 72 ompt = NULL;...r
2250: 65 74 76 61 6c 20 3d 20 43 41 43 4b 45 59 5f 43 etval = CACKEY_C
2260: 48 52 4f 4d 45 5f 45 52 52 4f 52 3b 0a 0a 09 63 HROME_ERROR;...c
2270: 68 6b 5f 72 76 20 3d 20 63 61 63 6b 65 79 5f 63 hk_rv = cackey_c
2280: 68 72 6f 6d 65 5f 69 6e 69 74 28 29 3b 0a 09 69 hrome_init();..i
2290: 66 20 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 f (chk_rv != CKR
22a0: 5f 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 _OK) {...return(
22b0: 72 65 74 76 61 6c 29 3b 0a 09 7d 0a 0a 09 63 68 retval);..}...ch
22c0: 6b 5f 72 76 20 3d 20 6d 6f 64 75 6c 65 46 75 6e k_rv = moduleFun
22d0: 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 ctionList->C_Get
22e0: 53 6c 6f 74 4c 69 73 74 28 46 41 4c 53 45 2c 20 SlotList(FALSE,
22f0: 4e 55 4c 4c 2c 20 26 6e 75 6d 53 6c 6f 74 73 29 NULL, &numSlots)
2300: 3b 0a 09 69 66 20 28 63 68 6b 5f 72 76 20 21 3d ;..if (chk_rv !=
2310: 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 72 65 74 CKR_OK) {...ret
2320: 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 09 7d 0a urn(retval);..}.
2330: 0a 09 73 6c 6f 74 73 20 3d 20 6d 61 6c 6c 6f 63 ..slots = malloc
2340: 28 73 69 7a 65 6f 66 28 2a 73 6c 6f 74 73 29 20 (sizeof(*slots)
2350: 2a 20 6e 75 6d 53 6c 6f 74 73 29 3b 0a 0a 09 63 * numSlots);...c
2360: 68 6b 5f 72 76 20 3d 20 6d 6f 64 75 6c 65 46 75 hk_rv = moduleFu
2370: 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge
2380: 74 53 6c 6f 74 4c 69 73 74 28 46 41 4c 53 45 2c tSlotList(FALSE,
2390: 20 73 6c 6f 74 73 2c 20 26 6e 75 6d 53 6c 6f 74 slots, &numSlot
23a0: 73 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 76 20 s);..if (chk_rv
23b0: 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 66 != CKR_OK) {...f
23c0: 72 65 65 28 73 6c 6f 74 73 29 3b 0a 0a 09 09 72 ree(slots);....r
23d0: 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 09 eturn(retval);..
23e0: 7d 0a 0a 09 73 65 61 72 63 68 54 65 6d 70 6c 61 }...searchTempla
23f0: 74 65 43 65 72 74 69 66 69 63 61 74 65 73 5b 30 teCertificates[0
2400: 5d 2e 70 56 61 6c 75 65 20 3d 20 26 6f 62 6a 65 ].pValue = &obje
2410: 63 74 43 6c 61 73 73 43 65 72 74 69 66 69 63 61 ctClassCertifica
2420: 74 65 3b 0a 09 73 65 61 72 63 68 54 65 6d 70 6c te;..searchTempl
2430: 61 74 65 50 72 69 76 61 74 65 4b 65 79 73 5b 30 atePrivateKeys[0
2440: 5d 2e 70 56 61 6c 75 65 20 3d 20 26 6f 62 6a 65 ].pValue = &obje
2450: 63 74 43 6c 61 73 73 50 72 69 76 61 74 65 4b 65 ctClassPrivateKe
2460: 79 3b 0a 0a 09 73 65 61 72 63 68 54 65 6d 70 6c y;...searchTempl
2470: 61 74 65 43 65 72 74 69 66 69 63 61 74 65 73 5b ateCertificates[
2480: 31 5d 2e 70 56 61 6c 75 65 20 3d 20 63 65 72 74 1].pValue = cert
2490: 69 66 69 63 61 74 65 2d 3e 63 65 72 74 69 66 69 ificate->certifi
24a0: 63 61 74 65 3b 0a 09 73 65 61 72 63 68 54 65 6d cate;..searchTem
24b0: 70 6c 61 74 65 43 65 72 74 69 66 69 63 61 74 65 plateCertificate
24c0: 73 5b 31 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 20 s[1].ulValueLen
24d0: 3d 20 63 65 72 74 69 66 69 63 61 74 65 2d 3e 63 = certificate->c
24e0: 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 3b 0a ertificate_len;.
24f0: 0a 09 66 6f 75 6e 64 50 72 69 76 61 74 65 4b 65 ..foundPrivateKe
2500: 79 4f 62 6a 65 63 74 20 3d 20 30 3b 0a 0a 09 63 yObject = 0;...c
2510: 65 72 74 69 66 69 63 61 74 65 4c 61 62 65 6c 20 ertificateLabel
2520: 3d 20 4e 55 4c 4c 3b 0a 0a 09 66 6f 72 20 28 63 = NULL;...for (c
2530: 75 72 72 53 6c 6f 74 20 3d 20 30 3b 20 63 75 72 urrSlot = 0; cur
2540: 72 53 6c 6f 74 20 3c 20 6e 75 6d 53 6c 6f 74 73 rSlot < numSlots
2550: 3b 20 63 75 72 72 53 6c 6f 74 2b 2b 29 20 7b 0a ; currSlot++) {.
2560: 09 09 63 68 6b 5f 72 76 20 3d 20 6d 6f 64 75 6c ..chk_rv = modul
2570: 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 eFunctionList->C
2580: 5f 47 65 74 53 6c 6f 74 49 6e 66 6f 28 73 6c 6f _GetSlotInfo(slo
2590: 74 73 5b 63 75 72 72 53 6c 6f 74 5d 2c 20 26 73 ts[currSlot], &s
25a0: 6c 6f 74 49 6e 66 6f 29 3b 0a 09 09 69 66 20 28 lotInfo);...if (
25b0: 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b chk_rv != CKR_OK
25c0: 29 20 7b 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b ) {....continue;
25d0: 0a 09 09 7d 0a 0a 09 09 69 66 20 28 28 73 6c 6f ...}....if ((slo
25e0: 74 49 6e 66 6f 2e 66 6c 61 67 73 20 26 20 43 4b tInfo.flags & CK
25f0: 46 5f 54 4f 4b 45 4e 5f 50 52 45 53 45 4e 54 29 F_TOKEN_PRESENT)
2600: 20 21 3d 20 43 4b 46 5f 54 4f 4b 45 4e 5f 50 52 != CKF_TOKEN_PR
2610: 45 53 45 4e 54 29 20 7b 0a 09 09 09 63 6f 6e 74 ESENT) {....cont
2620: 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 63 68 6b inue;...}....chk
2630: 5f 72 76 20 3d 20 6d 6f 64 75 6c 65 46 75 6e 63 _rv = moduleFunc
2640: 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 4f 70 65 6e tionList->C_Open
2650: 53 65 73 73 69 6f 6e 28 73 6c 6f 74 73 5b 63 75 Session(slots[cu
2660: 72 72 53 6c 6f 74 5d 2c 20 43 4b 46 5f 53 45 52 rrSlot], CKF_SER
2670: 49 41 4c 5f 53 45 53 53 49 4f 4e 2c 20 4e 55 4c IAL_SESSION, NUL
2680: 4c 2c 20 4e 55 4c 4c 2c 20 26 68 53 65 73 73 69 L, NULL, &hSessi
2690: 6f 6e 29 3b 0a 09 09 69 66 20 28 63 68 6b 5f 72 on);...if (chk_r
26a0: 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 v != CKR_OK) {..
26b0: 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a ..continue;...}.
26c0: 0a 09 09 63 68 6b 5f 72 76 20 3d 20 6d 6f 64 75 ...chk_rv = modu
26d0: 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e leFunctionList->
26e0: 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 C_FindObjectsIni
26f0: 74 28 68 53 65 73 73 69 6f 6e 2c 20 73 65 61 72 t(hSession, sear
2700: 63 68 54 65 6d 70 6c 61 74 65 43 65 72 74 69 66 chTemplateCertif
2710: 69 63 61 74 65 73 2c 20 73 69 7a 65 6f 66 28 73 icates, sizeof(s
2720: 65 61 72 63 68 54 65 6d 70 6c 61 74 65 43 65 72 earchTemplateCer
2730: 74 69 66 69 63 61 74 65 73 29 20 2f 20 73 69 7a tificates) / siz
2740: 65 6f 66 28 73 65 61 72 63 68 54 65 6d 70 6c 61 eof(searchTempla
2750: 74 65 43 65 72 74 69 66 69 63 61 74 65 73 5b 30 teCertificates[0
2760: 5d 29 29 3b 20 0a 09 09 69 66 20 28 63 68 6b 5f ])); ...if (chk_
2770: 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a rv != CKR_OK) {.
2780: 09 09 09 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f ...moduleFunctio
2790: 6e 4c 69 73 74 2d 3e 43 5f 43 6c 6f 73 65 53 65 nList->C_CloseSe
27a0: 73 73 69 6f 6e 28 68 53 65 73 73 69 6f 6e 29 3b ssion(hSession);
27b0: 0a 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 .....continue;..
27c0: 09 7d 0a 0a 09 09 77 68 69 6c 65 20 28 31 29 20 .}....while (1)
27d0: 7b 0a 09 09 09 63 68 6b 5f 72 76 20 3d 20 6d 6f {....chk_rv = mo
27e0: 64 75 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 duleFunctionList
27f0: 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 28 ->C_FindObjects(
2800: 68 53 65 73 73 69 6f 6e 2c 20 26 68 4f 62 6a 65 hSession, &hObje
2810: 63 74 2c 20 31 2c 20 26 75 6c 4f 62 6a 65 63 74 ct, 1, &ulObject
2820: 43 6f 75 6e 74 29 3b 0a 09 09 09 69 66 20 28 63 Count);....if (c
2830: 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 hk_rv != CKR_OK)
2840: 20 7b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 {.....break;...
2850: 09 7d 0a 0a 09 09 09 69 66 20 28 75 6c 4f 62 6a .}.....if (ulObj
2860: 65 63 74 43 6f 75 6e 74 20 3d 3d 20 30 29 20 7b ectCount == 0) {
2870: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 7d .....break;....}
2880: 0a 0a 09 09 09 69 66 20 28 75 6c 4f 62 6a 65 63 .....if (ulObjec
2890: 74 43 6f 75 6e 74 20 21 3d 20 31 29 20 7b 0a 09 tCount != 1) {..
28a0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 7d 0a 0a ...break;....}..
28b0: 09 09 09 63 68 6b 5f 72 76 20 3d 20 63 61 63 6b ...chk_rv = cack
28c0: 65 79 5f 63 68 72 6f 6d 65 5f 47 65 74 41 74 74 ey_chrome_GetAtt
28d0: 72 69 62 75 74 65 73 46 72 6f 6d 54 65 6d 70 6c ributesFromTempl
28e0: 61 74 65 28 68 53 65 73 73 69 6f 6e 2c 20 68 4f ate(hSession, hO
28f0: 62 6a 65 63 74 2c 20 61 74 74 72 54 65 6d 70 6c bject, attrTempl
2900: 61 74 65 43 65 72 74 69 66 69 63 61 74 65 2c 20 ateCertificate,
2910: 73 69 7a 65 6f 66 28 61 74 74 72 54 65 6d 70 6c sizeof(attrTempl
2920: 61 74 65 43 65 72 74 69 66 69 63 61 74 65 29 20 ateCertificate)
2930: 2f 20 73 69 7a 65 6f 66 28 61 74 74 72 54 65 6d / sizeof(attrTem
2940: 70 6c 61 74 65 43 65 72 74 69 66 69 63 61 74 65 plateCertificate
2950: 5b 30 5d 29 29 3b 0a 09 09 09 69 66 20 28 63 68 [0]));....if (ch
2960: 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 k_rv != CKR_OK)
2970: 7b 0a 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a {.....continue;.
2980: 09 09 09 7d 0a 0a 09 09 09 73 65 61 72 63 68 54 ...}.....searchT
2990: 65 6d 70 6c 61 74 65 50 72 69 76 61 74 65 4b 65 emplatePrivateKe
29a0: 79 73 5b 31 5d 2e 70 56 61 6c 75 65 20 3d 20 61 ys[1].pValue = a
29b0: 74 74 72 54 65 6d 70 6c 61 74 65 43 65 72 74 69 ttrTemplateCerti
29c0: 66 69 63 61 74 65 5b 30 5d 2e 70 56 61 6c 75 65 ficate[0].pValue
29d0: 3b 0a 09 09 09 73 65 61 72 63 68 54 65 6d 70 6c ;....searchTempl
29e0: 61 74 65 50 72 69 76 61 74 65 4b 65 79 73 5b 31 atePrivateKeys[1
29f0: 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 61 ].ulValueLen = a
2a00: 74 74 72 54 65 6d 70 6c 61 74 65 43 65 72 74 69 ttrTemplateCerti
2a10: 66 69 63 61 74 65 5b 30 5d 2e 75 6c 56 61 6c 75 ficate[0].ulValu
2a20: 65 4c 65 6e 3b 0a 0a 09 09 09 69 66 20 28 61 74 eLen;.....if (at
2a30: 74 72 54 65 6d 70 6c 61 74 65 43 65 72 74 69 66 trTemplateCertif
2a40: 69 63 61 74 65 5b 31 5d 2e 75 6c 56 61 6c 75 65 icate[1].ulValue
2a50: 4c 65 6e 20 3e 20 30 20 26 26 20 61 74 74 72 54 Len > 0 && attrT
2a60: 65 6d 70 6c 61 74 65 43 65 72 74 69 66 69 63 61 emplateCertifica
2a70: 74 65 5b 31 5d 2e 70 56 61 6c 75 65 20 21 3d 20 te[1].pValue !=
2a80: 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 63 65 72 74 NULL) {.....cert
2a90: 69 66 69 63 61 74 65 4c 61 62 65 6c 20 3d 20 6d ificateLabel = m
2aa0: 61 6c 6c 6f 63 28 61 74 74 72 54 65 6d 70 6c 61 alloc(attrTempla
2ab0: 74 65 43 65 72 74 69 66 69 63 61 74 65 5b 31 5d teCertificate[1]
2ac0: 2e 75 6c 56 61 6c 75 65 4c 65 6e 20 2b 20 31 29 .ulValueLen + 1)
2ad0: 3b 0a 09 09 09 09 6d 65 6d 63 70 79 28 63 65 72 ;.....memcpy(cer
2ae0: 74 69 66 69 63 61 74 65 4c 61 62 65 6c 2c 20 61 tificateLabel, a
2af0: 74 74 72 54 65 6d 70 6c 61 74 65 43 65 72 74 69 ttrTemplateCerti
2b00: 66 69 63 61 74 65 5b 31 5d 2e 70 56 61 6c 75 65 ficate[1].pValue
2b10: 2c 20 61 74 74 72 54 65 6d 70 6c 61 74 65 43 65 , attrTemplateCe
2b20: 72 74 69 66 69 63 61 74 65 5b 31 5d 2e 75 6c 56 rtificate[1].ulV
2b30: 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 09 09 63 65 alueLen);.....ce
2b40: 72 74 69 66 69 63 61 74 65 4c 61 62 65 6c 5b 61 rtificateLabel[a
2b50: 74 74 72 54 65 6d 70 6c 61 74 65 43 65 72 74 69 ttrTemplateCerti
2b60: 66 69 63 61 74 65 5b 31 5d 2e 75 6c 56 61 6c 75 ficate[1].ulValu
2b70: 65 4c 65 6e 5d 20 3d 20 27 5c 30 27 3b 0a 09 09 eLen] = '\0';...
2b80: 09 7d 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 .}.....break;...
2b90: 7d 0a 0a 09 09 6d 6f 64 75 6c 65 46 75 6e 63 74 }....moduleFunct
2ba0: 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 4f ionList->C_FindO
2bb0: 62 6a 65 63 74 73 46 69 6e 61 6c 28 68 53 65 73 bjectsFinal(hSes
2bc0: 73 69 6f 6e 29 3b 0a 0a 09 09 69 66 20 28 73 65 sion);....if (se
2bd0: 61 72 63 68 54 65 6d 70 6c 61 74 65 50 72 69 76 archTemplatePriv
2be0: 61 74 65 4b 65 79 73 5b 31 5d 2e 70 56 61 6c 75 ateKeys[1].pValu
2bf0: 65 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 e != NULL) {....
2c00: 63 68 6b 5f 72 76 20 3d 20 6d 6f 64 75 6c 65 46 chk_rv = moduleF
2c10: 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 unctionList->C_F
2c20: 69 6e 64 4f 62 6a 65 63 74 73 49 6e 69 74 28 68 indObjectsInit(h
2c30: 53 65 73 73 69 6f 6e 2c 20 73 65 61 72 63 68 54 Session, searchT
2c40: 65 6d 70 6c 61 74 65 43 65 72 74 69 66 69 63 61 emplateCertifica
2c50: 74 65 73 2c 20 73 69 7a 65 6f 66 28 73 65 61 72 tes, sizeof(sear
2c60: 63 68 54 65 6d 70 6c 61 74 65 43 65 72 74 69 66 chTemplateCertif
2c70: 69 63 61 74 65 73 29 20 2f 20 73 69 7a 65 6f 66 icates) / sizeof
2c80: 28 73 65 61 72 63 68 54 65 6d 70 6c 61 74 65 43 (searchTemplateC
2c90: 65 72 74 69 66 69 63 61 74 65 73 5b 30 5d 29 29 ertificates[0]))
2ca0: 3b 20 0a 09 09 09 69 66 20 28 63 68 6b 5f 72 76 ; ....if (chk_rv
2cb0: 20 3d 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 == CKR_OK) {...
2cc0: 09 09 77 68 69 6c 65 20 28 31 29 20 7b 0a 09 09 ..while (1) {...
2cd0: 09 09 09 63 68 6b 5f 72 76 20 3d 20 6d 6f 64 75 ...chk_rv = modu
2ce0: 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e leFunctionList->
2cf0: 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 28 68 53 C_FindObjects(hS
2d00: 65 73 73 69 6f 6e 2c 20 26 68 4f 62 6a 65 63 74 ession, &hObject
2d10: 2c 20 31 2c 20 26 75 6c 4f 62 6a 65 63 74 43 6f , 1, &ulObjectCo
2d20: 75 6e 74 29 3b 0a 09 09 09 09 09 69 66 20 28 63 unt);......if (c
2d30: 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 hk_rv != CKR_OK)
2d40: 20 7b 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a {.......break;.
2d50: 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 69 66 20 .....}.......if
2d60: 28 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d (ulObjectCount =
2d70: 3d 20 30 29 20 7b 0a 09 09 09 09 09 09 62 72 65 = 0) {.......bre
2d80: 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 ak;......}......
2d90: 09 69 66 20 28 75 6c 4f 62 6a 65 63 74 43 6f 75 .if (ulObjectCou
2da0: 6e 74 20 21 3d 20 31 29 20 7b 0a 09 09 09 09 09 nt != 1) {......
2db0: 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a .break;......}..
2dc0: 09 09 09 09 09 68 4b 65 79 20 3d 20 68 4f 62 6a .....hKey = hObj
2dd0: 65 63 74 3b 0a 0a 09 09 09 09 09 66 6f 75 6e 64 ect;.......found
2de0: 50 72 69 76 61 74 65 4b 65 79 4f 62 6a 65 63 74 PrivateKeyObject
2df0: 20 3d 20 31 3b 0a 0a 09 09 09 09 09 62 72 65 61 = 1;.......brea
2e00: 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 6d 6f k;.....}......mo
2e10: 64 75 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 duleFunctionList
2e20: 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 ->C_FindObjectsF
2e30: 69 6e 61 6c 28 68 53 65 73 73 69 6f 6e 29 3b 0a inal(hSession);.
2e40: 09 09 09 7d 0a 0a 09 09 09 66 72 65 65 28 73 65 ...}.....free(se
2e50: 61 72 63 68 54 65 6d 70 6c 61 74 65 50 72 69 76 archTemplatePriv
2e60: 61 74 65 4b 65 79 73 5b 31 5d 2e 70 56 61 6c 75 ateKeys[1].pValu
2e70: 65 29 3b 0a 0a 09 09 7d 0a 0a 09 09 69 66 20 28 e);....}....if (
2e80: 66 6f 75 6e 64 50 72 69 76 61 74 65 4b 65 79 4f foundPrivateKeyO
2e90: 62 6a 65 63 74 29 20 7b 0a 09 09 09 63 68 6b 5f bject) {....chk_
2ea0: 72 76 20 3d 20 6d 6f 64 75 6c 65 46 75 6e 63 74 rv = moduleFunct
2eb0: 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 49 ionList->C_SignI
2ec0: 6e 69 74 28 68 53 65 73 73 69 6f 6e 2c 20 26 73 nit(hSession, &s
2ed0: 69 67 6e 4d 65 63 68 61 6e 69 73 6d 2c 20 68 4b ignMechanism, hK
2ee0: 65 79 29 3b 0a 09 09 09 69 66 20 28 63 68 6b 5f ey);....if (chk_
2ef0: 72 76 20 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a rv != CKR_OK) {.
2f00: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 7d 0a ....break;....}.
2f10: 0a 09 09 09 74 6d 70 44 65 73 74 69 6e 61 74 69 ....tmpDestinati
2f20: 6f 6e 4c 65 6e 67 74 68 20 3d 20 2a 64 65 73 74 onLength = *dest
2f30: 69 6e 61 74 69 6f 6e 4c 65 6e 67 74 68 3b 0a 09 inationLength;..
2f40: 09 09 63 68 6b 5f 72 76 20 3d 20 6d 6f 64 75 6c ..chk_rv = modul
2f50: 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 eFunctionList->C
2f60: 5f 53 69 67 6e 28 68 53 65 73 73 69 6f 6e 2c 20 _Sign(hSession,
2f70: 64 61 74 61 2c 20 64 61 74 61 4c 65 6e 67 74 68 data, dataLength
2f80: 2c 20 64 65 73 74 69 6e 61 74 69 6f 6e 2c 20 26 , destination, &
2f90: 74 6d 70 44 65 73 74 69 6e 61 74 69 6f 6e 4c 65 tmpDestinationLe
2fa0: 6e 67 74 68 29 3b 0a 09 09 09 73 77 69 74 63 68 ngth);....switch
2fb0: 20 28 63 68 6b 5f 72 76 29 20 7b 0a 09 09 09 09 (chk_rv) {.....
2fc0: 63 61 73 65 20 43 4b 52 5f 4f 4b 3a 0a 09 09 09 case CKR_OK:....
2fd0: 09 09 2a 64 65 73 74 69 6e 61 74 69 6f 6e 4c 65 ..*destinationLe
2fe0: 6e 67 74 68 20 3d 20 74 6d 70 44 65 73 74 69 6e ngth = tmpDestin
2ff0: 61 74 69 6f 6e 4c 65 6e 67 74 68 3b 0a 09 09 09 ationLength;....
3000: 09 09 72 65 74 76 61 6c 20 3d 20 43 41 43 4b 45 ..retval = CACKE
3010: 59 5f 43 48 52 4f 4d 45 5f 4f 4b 3b 0a 09 09 09 Y_CHROME_OK;....
3020: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 63 61 73 ..break;.....cas
3030: 65 20 43 4b 52 5f 55 53 45 52 5f 4e 4f 54 5f 4c e CKR_USER_NOT_L
3040: 4f 47 47 45 44 5f 49 4e 3a 0a 09 09 09 09 09 63 OGGED_IN:......c
3050: 68 6b 5f 72 76 20 3d 20 6d 6f 64 75 6c 65 46 75 hk_rv = moduleFu
3060: 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 nctionList->C_Ge
3070: 74 54 6f 6b 65 6e 49 6e 66 6f 28 73 6c 6f 74 73 tTokenInfo(slots
3080: 5b 63 75 72 72 53 6c 6f 74 5d 2c 20 26 74 6f 6b [currSlot], &tok
3090: 65 6e 49 6e 66 6f 29 3b 0a 09 09 09 09 09 69 66 enInfo);......if
30a0: 20 28 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 5f (chk_rv == CKR_
30b0: 4f 4b 29 20 7b 0a 09 09 09 09 09 09 69 66 20 28 OK) {.......if (
30c0: 28 74 6f 6b 65 6e 49 6e 66 6f 2e 66 6c 61 67 73 (tokenInfo.flags
30d0: 20 26 20 43 4b 46 5f 50 52 4f 54 45 43 54 45 44 & CKF_PROTECTED
30e0: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 5f _AUTHENTICATION_
30f0: 50 41 54 48 29 20 3d 3d 20 43 4b 46 5f 50 52 4f PATH) == CKF_PRO
3100: 54 45 43 54 45 44 5f 41 55 54 48 45 4e 54 49 43 TECTED_AUTHENTIC
3110: 41 54 49 4f 4e 5f 50 41 54 48 29 20 7b 0a 09 09 ATION_PATH) {...
3120: 09 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 41 .....retval = CA
3130: 43 4b 45 59 5f 43 48 52 4f 4d 45 5f 4e 45 45 44 CKEY_CHROME_NEED
3140: 50 52 4f 54 45 43 54 45 44 4c 4f 47 49 4e 3b 0a PROTECTEDLOGIN;.
3150: 09 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 ......} else {..
3160: 09 09 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 ......retval = C
3170: 41 43 4b 45 59 5f 43 48 52 4f 4d 45 5f 4e 45 45 ACKEY_CHROME_NEE
3180: 44 4c 4f 47 49 4e 3b 0a 0a 09 09 09 09 09 09 09 DLOGIN;.........
3190: 2a 70 69 6e 50 72 6f 6d 70 74 20 3d 20 6d 61 6c *pinPrompt = mal
31a0: 6c 6f 63 28 31 30 32 34 29 3b 0a 09 09 09 09 09 loc(1024);......
31b0: 09 09 69 66 20 28 63 65 72 74 69 66 69 63 61 74 ..if (certificat
31c0: 65 4c 61 62 65 6c 29 20 7b 0a 09 09 09 09 09 09 eLabel) {.......
31d0: 09 09 73 6e 70 72 69 6e 74 66 28 2a 70 69 6e 50 ..snprintf(*pinP
31e0: 72 6f 6d 70 74 2c 20 31 30 32 34 2c 20 22 50 6c rompt, 1024, "Pl
31f0: 65 61 73 65 20 65 6e 74 65 72 20 74 68 65 20 50 ease enter the P
3200: 49 4e 20 66 6f 72 20 25 73 3a 25 73 22 2c 20 74 IN for %s:%s", t
3210: 6f 6b 65 6e 49 6e 66 6f 2e 6c 61 62 65 6c 2c 20 okenInfo.label,
3220: 63 65 72 74 69 66 69 63 61 74 65 4c 61 62 65 6c certificateLabel
3230: 29 3b 0a 09 09 09 09 09 09 09 7d 20 65 6c 73 65 );........} else
3240: 20 7b 0a 09 09 09 09 09 09 09 09 73 6e 70 72 69 {.........snpri
3250: 6e 74 66 28 2a 70 69 6e 50 72 6f 6d 70 74 2c 20 ntf(*pinPrompt,
3260: 31 30 32 34 2c 20 22 50 6c 65 61 73 65 20 65 6e 1024, "Please en
3270: 74 65 72 20 74 68 65 20 50 49 4e 20 66 6f 72 20 ter the PIN for
3280: 25 73 22 2c 20 74 6f 6b 65 6e 49 6e 66 6f 2e 6c %s", tokenInfo.l
3290: 61 62 65 6c 29 3b 0a 09 09 09 09 09 09 09 7d 0a abel);........}.
32a0: 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 20 65 ......}......} e
32b0: 6c 73 65 20 7b 0a 09 09 09 09 09 09 72 65 74 76 lse {.......retv
32c0: 61 6c 20 3d 20 43 41 43 4b 45 59 5f 43 48 52 4f al = CACKEY_CHRO
32d0: 4d 45 5f 4e 45 45 44 4c 4f 47 49 4e 3b 0a 0a 09 ME_NEEDLOGIN;...
32e0: 09 09 09 09 09 2a 70 69 6e 50 72 6f 6d 70 74 20 .....*pinPrompt
32f0: 3d 20 73 74 72 64 75 70 28 22 50 6c 65 61 73 65 = strdup("Please
3300: 20 65 6e 74 65 72 20 79 6f 75 72 20 53 6d 61 72 enter your Smar
3310: 74 63 61 72 64 20 50 49 4e 22 29 3b 0a 09 09 09 tcard PIN");....
3320: 09 09 7d 0a 0a 09 09 09 09 09 69 66 20 28 72 65 ..}.......if (re
3330: 74 76 61 6c 20 3d 3d 20 43 41 43 4b 45 59 5f 43 tval == CACKEY_C
3340: 48 52 4f 4d 45 5f 4e 45 45 44 50 52 4f 54 45 43 HROME_NEEDPROTEC
3350: 54 45 44 4c 4f 47 49 4e 29 20 7b 0a 09 09 09 09 TEDLOGIN) {.....
3360: 09 09 72 65 74 76 61 6c 20 3d 20 43 41 43 4b 45 ..retval = CACKE
3370: 59 5f 43 48 52 4f 4d 45 5f 45 52 52 4f 52 3b 0a Y_CHROME_ERROR;.
3380: 0a 09 09 09 09 09 09 63 68 6b 5f 72 76 20 3d 20 .......chk_rv =
3390: 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 moduleFunctionLi
33a0: 73 74 2d 3e 43 5f 4c 6f 67 69 6e 28 68 53 65 73 st->C_Login(hSes
33b0: 73 69 6f 6e 2c 20 43 4b 55 5f 55 53 45 52 2c 20 sion, CKU_USER,
33c0: 4e 55 4c 4c 2c 20 30 29 3b 0a 09 09 09 09 09 7d NULL, 0);......}
33d0: 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 69 66 else {.......if
33e0: 20 28 70 69 6e 29 20 7b 0a 09 09 09 09 09 09 09 (pin) {........
33f0: 72 65 74 76 61 6c 20 3d 20 43 41 43 4b 45 59 5f retval = CACKEY_
3400: 43 48 52 4f 4d 45 5f 45 52 52 4f 52 3b 0a 0a 09 CHROME_ERROR;...
3410: 09 09 09 09 09 09 66 72 65 65 28 2a 70 69 6e 50 ......free(*pinP
3420: 72 6f 6d 70 74 29 3b 0a 09 09 09 09 09 09 09 2a rompt);........*
3430: 70 69 6e 50 72 6f 6d 70 74 20 3d 20 4e 55 4c 4c pinPrompt = NULL
3440: 3b 0a 0a 09 09 09 09 09 09 09 63 68 6b 5f 72 76 ;.........chk_rv
3450: 20 3d 20 6d 6f 64 75 6c 65 46 75 6e 63 74 69 6f = moduleFunctio
3460: 6e 4c 69 73 74 2d 3e 43 5f 4c 6f 67 69 6e 28 68 nList->C_Login(h
3470: 53 65 73 73 69 6f 6e 2c 20 43 4b 55 5f 55 53 45 Session, CKU_USE
3480: 52 2c 20 28 43 4b 5f 55 54 46 38 43 48 41 52 5f R, (CK_UTF8CHAR_
3490: 50 54 52 29 20 70 69 6e 2c 20 73 74 72 6c 65 6e PTR) pin, strlen
34a0: 28 70 69 6e 29 29 3b 0a 09 09 09 09 09 09 7d 20 (pin));.......}
34b0: 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 09 63 68 else {........ch
34c0: 6b 5f 72 76 20 3d 20 43 4b 52 5f 47 45 4e 45 52 k_rv = CKR_GENER
34d0: 41 4c 5f 45 52 52 4f 52 3b 0a 09 09 09 09 09 09 AL_ERROR;.......
34e0: 7d 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 69 }......}.......i
34f0: 66 20 28 63 68 6b 5f 72 76 20 3d 3d 20 43 4b 52 f (chk_rv == CKR
3500: 5f 4f 4b 20 26 26 20 72 65 74 76 61 6c 20 3d 3d _OK && retval ==
3510: 20 43 41 43 4b 45 59 5f 43 48 52 4f 4d 45 5f 45 CACKEY_CHROME_E
3520: 52 52 4f 52 29 20 7b 0a 09 09 09 09 09 09 63 68 RROR) {.......ch
3530: 6b 5f 72 76 20 3d 20 6d 6f 64 75 6c 65 46 75 6e k_rv = moduleFun
3540: 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 ctionList->C_Sig
3550: 6e 49 6e 69 74 28 68 53 65 73 73 69 6f 6e 2c 20 nInit(hSession,
3560: 26 73 69 67 6e 4d 65 63 68 61 6e 69 73 6d 2c 20 &signMechanism,
3570: 68 4b 65 79 29 3b 0a 09 09 09 09 09 09 69 66 20 hKey);.......if
3580: 28 63 68 6b 5f 72 76 20 21 3d 20 43 4b 52 5f 4f (chk_rv != CKR_O
3590: 4b 29 20 7b 0a 09 09 09 09 09 09 09 62 72 65 61 K) {........brea
35a0: 6b 3b 0a 09 09 09 09 09 09 7d 0a 0a 09 09 09 09 k;.......}......
35b0: 09 09 74 6d 70 44 65 73 74 69 6e 61 74 69 6f 6e ..tmpDestination
35c0: 4c 65 6e 67 74 68 20 3d 20 2a 64 65 73 74 69 6e Length = *destin
35d0: 61 74 69 6f 6e 4c 65 6e 67 74 68 3b 0a 09 09 09 ationLength;....
35e0: 09 09 09 63 68 6b 5f 72 76 20 3d 20 6d 6f 64 75 ...chk_rv = modu
35f0: 6c 65 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e leFunctionList->
3600: 43 5f 53 69 67 6e 28 68 53 65 73 73 69 6f 6e 2c C_Sign(hSession,
3610: 20 64 61 74 61 2c 20 64 61 74 61 4c 65 6e 67 74 data, dataLengt
3620: 68 2c 20 64 65 73 74 69 6e 61 74 69 6f 6e 2c 20 h, destination,
3630: 26 74 6d 70 44 65 73 74 69 6e 61 74 69 6f 6e 4c &tmpDestinationL
3640: 65 6e 67 74 68 29 3b 0a 09 09 09 09 09 09 73 77 ength);.......sw
3650: 69 74 63 68 20 28 63 68 6b 5f 72 76 29 20 7b 0a itch (chk_rv) {.
3660: 09 09 09 09 09 09 09 63 61 73 65 20 43 4b 52 5f .......case CKR_
3670: 4f 4b 3a 0a 09 09 09 09 09 09 09 09 2a 64 65 73 OK:.........*des
3680: 74 69 6e 61 74 69 6f 6e 4c 65 6e 67 74 68 20 3d tinationLength =
3690: 20 74 6d 70 44 65 73 74 69 6e 61 74 69 6f 6e 4c tmpDestinationL
36a0: 65 6e 67 74 68 3b 0a 09 09 09 09 09 09 09 09 72 ength;.........r
36b0: 65 74 76 61 6c 20 3d 20 43 41 43 4b 45 59 5f 43 etval = CACKEY_C
36c0: 48 52 4f 4d 45 5f 4f 4b 3b 0a 09 09 09 09 09 09 HROME_OK;.......
36d0: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 09 09 ..break;........
36e0: 63 61 73 65 20 43 4b 52 5f 55 53 45 52 5f 4e 4f case CKR_USER_NO
36f0: 54 5f 4c 4f 47 47 45 44 5f 49 4e 3a 0a 09 09 09 T_LOGGED_IN:....
3700: 09 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 41 .....retval = CA
3710: 43 4b 45 59 5f 43 48 52 4f 4d 45 5f 4e 45 45 44 CKEY_CHROME_NEED
3720: 4c 4f 47 49 4e 3b 0a 09 09 09 09 09 09 09 09 62 LOGIN;.........b
3730: 72 65 61 6b 3b 0a 09 09 09 09 09 09 09 64 65 66 reak;........def
3740: 61 75 6c 74 3a 0a 09 09 09 09 09 09 09 09 72 65 ault:.........re
3750: 74 76 61 6c 20 3d 20 43 41 43 4b 45 59 5f 43 48 tval = CACKEY_CH
3760: 52 4f 4d 45 5f 45 52 52 4f 52 3b 0a 09 09 09 09 ROME_ERROR;.....
3770: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 ....break;......
3780: 09 7d 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 .}......}.......
3790: 62 72 65 61 6b 3b 0a 09 09 09 09 64 65 66 61 75 break;.....defau
37a0: 6c 74 3a 0a 09 09 09 09 09 72 65 74 76 61 6c 20 lt:......retval
37b0: 3d 20 43 41 43 4b 45 59 5f 43 48 52 4f 4d 45 5f = CACKEY_CHROME_
37c0: 45 52 52 4f 52 3b 0a 09 09 09 09 09 62 72 65 61 ERROR;......brea
37d0: 6b 3b 0a 09 09 09 7d 0a 0a 09 09 09 62 72 65 61 k;....}.....brea
37e0: 6b 3b 0a 09 09 7d 0a 0a 09 09 6d 6f 64 75 6c 65 k;...}....module
37f0: 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f FunctionList->C_
3800: 43 6c 6f 73 65 53 65 73 73 69 6f 6e 28 68 53 65 CloseSession(hSe
3810: 73 73 69 6f 6e 29 3b 0a 09 7d 0a 0a 09 66 72 65 ssion);..}...fre
3820: 65 28 73 6c 6f 74 73 29 3b 0a 0a 09 69 66 20 28 e(slots);...if (
3830: 63 65 72 74 69 66 69 63 61 74 65 4c 61 62 65 6c certificateLabel
3840: 29 20 7b 0a 09 09 66 72 65 65 28 63 65 72 74 69 ) {...free(certi
3850: 66 69 63 61 74 65 4c 61 62 65 6c 29 3b 0a 09 7d ficateLabel);..}
3860: 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c ...return(retval
3870: 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 5f 5f 63 );.}..#ifdef __c
3880: 70 6c 75 73 70 6c 75 73 0a 7d 0a 23 65 6e 64 69 plusplus.}.#endi
3890: 66 0a f.