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