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
