Sample code for 30+ languages & platforms
AutoIt

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 AutoIt Downloads

AutoIt
Local $bSuccess = False

; 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.

$oPkcs11 = ObjCreate("Chilkat.Pkcs11")

; 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.
$oPkcs11.SharedLibPath = "C:/Program Files (x86)/Gemalto/IDGo 800 PKCS#11/IDPrimePKCS1164.dll"

; Establish a logged-on session.
Local $sPin = "0000"
Local $iUserType = 1
$bSuccess = $oPkcs11.QuickSession($iUserType,$sPin)
If ($bSuccess = False) Then
    ConsoleWrite($oPkcs11.LastErrorText & @CRLF)
    Exit
EndIf

; Generate a new 2048-bit RSA key.
$oRsa = ObjCreate("Chilkat.Rsa")
$oPrivKey = ObjCreate("Chilkat.PrivateKey")
$bSuccess = $oRsa.GenKey(2048,$oPrivKey)
If ($bSuccess = False) Then
    ConsoleWrite($oRsa.LastErrorText & @CRLF)
    Exit
EndIf

; Get the public key information as XML, so we can access the modulus and exponent.
$oXml = ObjCreate("Chilkat.Xml")
$oPubKey = ObjCreate("Chilkat.PublicKey")
$oPrivKey.ToPublicKey($oPubKey)
$oXml.LoadXml($oPubKey.GetXml())

$oAttrs = ObjCreate("Chilkat.JsonObject")
; Specify the type of object, and the type of key.
$oAttrs.UpdateString("class","CKO_PUBLIC_KEY")
$oAttrs.UpdateString("key_type","CKK_RSA")
; Add an optional label if desired.
$oAttrs.UpdateString("label","RSA Public Key 1")
; Allow the key to be use for verify, wrapping, and encryption operations.
$oAttrs.UpdateBool("verify",True)
$oAttrs.UpdateBool("wrap",True)
$oAttrs.UpdateBool("encrypt",True)

; 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.
$oAttrs.UpdateBool("token",False)

; Provide the RSA public key material
$oAttrs.UpdateString("modulus",$oXml.GetChildContent("Modulus"))
$oAttrs.UpdateString("public_exponent",$oXml.GetChildContent("Exponent"))

; Create the RSA public key.
; Returns the PKCS11 object handle of the created key.
Local $iObjHandle = $oPkcs11.CreatePkcs11Object($oAttrs)
If ($iObjHandle = 0) Then
    ConsoleWrite($oPkcs11.LastErrorText & @CRLF)
    ConsoleWrite("Failed." & @CRLF)
Else
    ConsoleWrite("PKCS11 object handle = " & $iObjHandle & @CRLF)
    ConsoleWrite("Successfully imported an RSA key.." & @CRLF)
EndIf

$oPkcs11.Logout()
$oPkcs11.CloseSession()