DataFlex
DataFlex
PKCS11 Import an Existing RSA Public Key onto the HSM
See more PKCS11 Examples
Demonstrates how to import an existing RSA Public Key onto a smart card or token.Note: This example requires Chilkat v9.5.0.96 or later.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoPkcs11
String sPin
Integer iUserType
Handle hoRsa
Variant vPrivKey
Handle hoPrivKey
Handle hoXml
Variant vPubKey
Handle hoPubKey
Variant vAttrs
Handle hoAttrs
UInteger iObjHandle
String sTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// Note: Chilkat's PKCS11 implementation runs on Windows, Linux, Mac OS X, and other supported operating systems.
Get Create (RefClass(cComChilkatPkcs11)) To hoPkcs11
If (Not(IsComObjectCreated(hoPkcs11))) Begin
Send CreateComObject of hoPkcs11
End
// Use the PKCS11 driver (.dll, .so, .dylib) for your particular HSM.
// (The format of the path will change with the operating system. Obviously, "C:/" is not used on non-Windows systems.
Set ComSharedLibPath Of hoPkcs11 To "C:/Program Files (x86)/Gemalto/IDGo 800 PKCS#11/IDPrimePKCS1164.dll"
// Establish a logged-on session.
Move "0000" To sPin
Move 1 To iUserType
Get ComQuickSession Of hoPkcs11 iUserType sPin To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPkcs11 To sTemp1
Showln sTemp1
Procedure_Return
End
// Generate a new 2048-bit RSA key.
Get Create (RefClass(cComChilkatRsa)) To hoRsa
If (Not(IsComObjectCreated(hoRsa))) Begin
Send CreateComObject of hoRsa
End
Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKey
If (Not(IsComObjectCreated(hoPrivKey))) Begin
Send CreateComObject of hoPrivKey
End
Get pvComObject of hoPrivKey to vPrivKey
Get ComGenKey Of hoRsa 2048 vPrivKey To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoRsa To sTemp1
Showln sTemp1
Procedure_Return
End
// Get the public key information as XML, so we can access the modulus and exponent.
Get Create (RefClass(cComChilkatXml)) To hoXml
If (Not(IsComObjectCreated(hoXml))) Begin
Send CreateComObject of hoXml
End
Get Create (RefClass(cComChilkatPublicKey)) To hoPubKey
If (Not(IsComObjectCreated(hoPubKey))) Begin
Send CreateComObject of hoPubKey
End
Get pvComObject of hoPubKey to vPubKey
Get ComToPublicKey Of hoPrivKey vPubKey To iSuccess
Get ComGetXml Of hoPubKey To sTemp1
Get ComLoadXml Of hoXml sTemp1 To iSuccess
Get Create (RefClass(cComChilkatJsonObject)) To hoAttrs
If (Not(IsComObjectCreated(hoAttrs))) Begin
Send CreateComObject of hoAttrs
End
// Specify the type of object, and the type of key.
Get ComUpdateString Of hoAttrs "class" "CKO_PUBLIC_KEY" To iSuccess
Get ComUpdateString Of hoAttrs "key_type" "CKK_RSA" To iSuccess
// Add an optional label if desired.
Get ComUpdateString Of hoAttrs "label" "RSA Public Key 1" To iSuccess
// Allow the key to be use for verify, wrapping, and encryption operations.
Get ComUpdateBool Of hoAttrs "verify" True To iSuccess
Get ComUpdateBool Of hoAttrs "wrap" True To iSuccess
Get ComUpdateBool Of hoAttrs "encrypt" True To iSuccess
// Make this a session-only public key.
// To store the public key on the token so that it persists after the PKCS11 session, set token = True.
Get ComUpdateBool Of hoAttrs "token" False To iSuccess
// Provide the RSA public key material
Get ComGetChildContent Of hoXml "Modulus" To sTemp1
Get ComUpdateString Of hoAttrs "modulus" sTemp1 To iSuccess
Get ComGetChildContent Of hoXml "Exponent" To sTemp1
Get ComUpdateString Of hoAttrs "public_exponent" sTemp1 To iSuccess
// Create the RSA public key.
// Returns the PKCS11 object handle of the created key.
Get pvComObject of hoAttrs to vAttrs
Get ComCreatePkcs11Object Of hoPkcs11 vAttrs To iObjHandle
If (iObjHandle = 0) Begin
Get ComLastErrorText Of hoPkcs11 To sTemp1
Showln sTemp1
Showln "Failed."
End
Else Begin
Showln "PKCS11 object handle = " iObjHandle
Showln "Successfully imported an RSA key.."
End
Get ComLogout Of hoPkcs11 To iSuccess
Get ComCloseSession Of hoPkcs11 To iSuccess
End_Procedure