Sample code for 30+ languages & platforms
Lua Requires Chilkat v9.5.0.96+

PKCS11 Find Private Key by Label

See more PKCS11 Examples

Demonstrates how to find a private key based on a user-specified label.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

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

local pkcs11 = chilkat.Pkcs11.new()

-- Use the PKCS11 driver (.dll, .so, .dylib) for your particular HSM.
-- For example:
pkcs11.shared_lib_path = "C:/Program Files (x86)/Gemalto/IDGo 800 PKCS#11/IDPrimePKCS11.dll"

-- Use your HSM's PIN.
local pin = "0000"

-- Normal user = 1
local userType = 1

-- Establish a logged-on user session with the HSM.
local success = pkcs11:quick_session(userType, pin)
if not success then
    print(pkcs11.last_error_text)
    return
end

-- Provide a template to find a PKCS11 object.
local jsonTemplate = chilkat.JsonObject.new()

-- Find an RSA private key with the label "MySshKey".
-- Here's an example of how the key was originally imported:
-- PKCS11 Import SSH Key
jsonTemplate:update_string("class", "private_key")
jsonTemplate:update_string("key_type", "rsa")
jsonTemplate:update_string("label", "MySshKey")

local privKeyHandle = pkcs11:find_object(jsonTemplate)
if privKeyHandle == 0 then
    print(pkcs11.last_error_text)
    return
end

-- The private key handle is only valid during the PKCS11 session.
-- If you wish to use the private key in another PKCS11 session,
-- you'll first need to find it.  See:
print("private key handle: " .. privKeyHandle)

-- Do whatever you wish with the private key handle...
-- ...
-- ...

pkcs11:logout()
pkcs11:close_session()