1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
Load nsscapi.dll
C_Initialize NULL
C_GetSlotList false NULL slotCount
NewArray slotList CK_ULONG slotCount
C_GetSlotList false slotList slotCount
#change the following to the appropriate slot id
set slotID 1
#set slotID slotList[0]
C_GetSlotInfo slotID slotInfo
C_GetTokenInfo slotID tokenInfo
C_OpenSession slotID CKF_SERIAL_SESSION session
#
#uncomment the following line and include the correct password
#C_Login session CKU_USER 0000 4
#
# build the search template
#
NewTemplate search CKA_CLASS
SetTemplate search 0 CKO_CERTIFICATE
NewArray certID CK_ULONG 10
C_FindObjectsInit session search 1
C_FindObjects session certID sizeA(certID) count
C_FindObjectsFinal session
#
# now read the cert out
#
#NewTemplate derCert CKA_VALUE
#NewTemplate certName CKA_LABEL,CKA_VALUE
#C_GetAttributeValue session certID[0] certName sizeA(certName)
#BuildTemplate certName
#C_GetAttributeValue session certID[0] certName sizeA(certName)
#print certName[0]
Set countm1 count
Decrement countm1 1
LoopRun pLabel1 i 0 countm1 1
Set i 1
run pLabel1
NewTemplate id CKA_CLASS,CKA_ID
C_GetAttributeValue session certID[i] id sizeA(id)
BuildTemplate id
C_GetAttributeValue session certID[i] id sizeA(id)
SetTemplate id 0 CKO_PRIVATE_KEY
NewArray keyID CK_ULONG 10
C_FindObjectsInit session id sizeA(id)
C_FindObjects session keyID sizeA(keyID) count
C_FindObjectsFinal session
NewMechanism rsaParams CKM_RSA_PKCS
NewArray sign data 256
NewArray sdata data 36
C_SignInit session rsaParams keyID[0]
print sdata
C_Sign session sdata sizeof(sdata) sign sizeof(sign)
save signature sign
save hash sdata
NewTemplate privValue CKA_MODULUS,CKA_PUBLIC_EXPONENT
C_GetAttributeValue session keyID[0] privValue sizeA(privValue)
BuildTemplate privValue
C_GetAttributeValue session keyID[0] privValue sizeA(privValue)
print privValue[0]
print privValue[1]
# save the public key
SetTemplate id 0 CKO_PUBLIC_KEY
NewArray pubkeyID CK_ULONG 10
C_FindObjectsInit session id sizeA(id)
C_FindObjects session pubkeyID sizeA(pubkeyID) count
C_FindObjectsFinal session
NewTemplate pubkeyValue CKA_MODULUS,CKA_PUBLIC_EXPONENT
C_GetAttributeValue session pubkeyID[0] pubkeyValue sizeA(pubkeyValue)
BuildTemplate pubkeyValue
C_GetAttributeValue session pubkeyID[0] pubkeyValue sizeA(pubkeyValue)
print pubkeyValue[0]
print pubkeyValue[1]
C_Finalize null
unload
#
# Now do the same for using softoken
#
load softokn3.dll
NewInitArg init CKF_OS_LOCKING_OK configdir=./db
C_Initialize init
C_GetSlotList false NULL slotCount
NewArray slotList CK_ULONG slotCount
C_GetSlotList false slotList slotCount
#change the following to the appropriate slot id
set slotID slotList[1]
#set slotID slotList[0]
C_GetSlotInfo slotID slotInfo
C_GetTokenInfo slotID tokenInfo
C_OpenSession slotID CKF_SERIAL_SESSION session
NewTemplate search CKA_CLASS
SetTemplate search 0 CKO_CERTIFICATE
NewArray certID CK_ULONG 10
C_FindObjectsInit session search 1
C_FindObjects session certID sizeA(certID) count
C_FindObjectsFinal session
#
# now read the cert out
#
#NewTemplate derCert CKA_VALUE
#NewTemplate certName CKA_LABEL,CKA_VALUE
#C_GetAttributeValue session certID[0] certName sizeA(certName)
#BuildTemplate certName
#C_GetAttributeValue session certID[0] certName sizeA(certName)
#print certName[0]
#Set countm1 count
#Decrement countm1 1
#LoopRun pLabel1 i 0 countm1 1
Set i 0
run pLabel1
NewTemplate id CKA_CLASS,CKA_ID
C_GetAttributeValue session certID[i] id sizeA(id)
BuildTemplate id
C_GetAttributeValue session certID[i] id sizeA(id)
SetTemplate id 0 CKO_PRIVATE_KEY
NewArray keyID CK_ULONG 10
C_FindObjectsInit session id sizeA(id)
C_FindObjects session keyID sizeA(keyID) count
C_FindObjectsFinal session
NewMechanism rsaParams CKM_RSA_PKCS
NewArray sign data 256
NewArray sdata data 36
C_SignInit session rsaParams keyID[0]
C_Sign session sdata sizeof(sdata) sign sizeof(sign)
save signature2 sign
save hash2 sdata
SetTemplate id 0 CKO_PUBLIC_KEY
NewArray pubkeyID CK_ULONG 10
C_FindObjectsInit session id sizeA(id)
C_FindObjects session pubkeyID sizeA(pubkeyID) count
C_FindObjectsFinal session
#
# OK now we use raw unwrap and see what we have...
#
NewMechanism rawRsaParams CKM_RSA_X_509
NewArray vdata data 256
C_VerifyRecoverInit session rawRsaParams pubkeyID[0]
C_VerifyRecover session sign sizeof(sign) vdata sizeof(vdata)
save verify2 vdata
restore signature sign
C_VerifyRecoverInit session rawRsaParams pubkeyID[0]
C_VerifyRecover session sign sizeof(sign) vdata sizeof(vdata)
save verify vdata
NewTemplate pubkeyValue CKA_MODULUS,CKA_PUBLIC_EXPONENT
C_GetAttributeValue session pubkeyID[0] pubkeyValue sizeA(pubkeyValue)
BuildTemplate pubkeyValue
C_GetAttributeValue session pubkeyID[0] pubkeyValue sizeA(pubkeyValue)
print pubkeyValue[0]
print pubkeyValue[1]
C_Finalize null
unload
|