Lua Requires Chilkat v11.0.0+
Lua
Generate an ECC Key (Public and Private)
See more ECC Examples
Demonstrates how to generate an ECC key and save both public and private parts.Chilkat Lua Downloads
local chilkat = require("chilkat")
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
-- Create a Fortuna PRNG and seed it with system entropy.
-- This will be our source of random data for generating the ECC private key.
local fortuna = chilkat.Prng.new()
local entropy = fortuna:get_entropy(32, "base64")
local success = fortuna:add_entropy(entropy, "base64")
local ecc = chilkat.Ecc.new()
-- Generate a random ECC private key on the secp256r1 curve.
-- Chilkat also supports other curves, such as secp384r1, secp521r1, and secp256k1.
local privKey = chilkat.PrivateKey.new()
success = ecc:gen_key("secp256r1", fortuna, privKey)
if not success then
print(ecc.last_error_text)
return
end
-- Save the private key to PKCS8 encrypted PEM
-- (The private key can be saved in a variety of different formats. See the online reference documentation.)
success = privKey:save_pkcs8_encrypted_pem_file("pemPassword", "qa_output/eccPrivKey.pem")
if not success then
print(privKey.last_error_text)
end
-- The private key PEM looks like this:
-- -----BEGIN ENCRYPTED PRIVATE KEY-----
-- MIHFMEAGCSqGSIb3DQEFDTAzMBsGCSqGSIb3DQEFDDAOBAhUmn+1/lwCIwICCAAw
-- FAYIKoZIhvcNAwcECPlyNXAXZO+oBIGAIvxvTENXJWbrCwSjh0QNxLecBotUpfI5
-- auOonLmwVMyt1ahMmNyVo/D+pnKQSE41Fg8fApM0DCDKZUOVCCcK1qirIsMPQkGp
-- klPJbvrQRVYgzBtU31uNB5y2wqhrIeepal1HXBvbkUK0nfJMbcdz/XAEIQu2HhTD
-- t6LMScPQld4=
-- -----END ENCRYPTED PRIVATE KEY-----
-- Now get the public key part from the private key.
-- (A public key is actually a subset of the private key.)
local pubKey = chilkat.PublicKey.new()
privKey:to_public_key(pubKey)
-- Save the public key to a PEM file.
-- (The public key can be saved in a variety of different formats. See the online reference documentation.)
-- For ECC keys, the 1st argument (bPreferPkcs1) is ignored and unused.
local bPreferPkcs1 = false
success = pubKey:save_pem_file(bPreferPkcs1, "qa_output/eccPubKey.pem")
-- The public key PEM looks like this:
-- -----BEGIN PUBLIC KEY-----
-- MIIBSzCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0BAQIhAP////8AAAABAAAA
-- AAAAAAAAAAAA////////////////MFsEIP////8AAAABAAAAAAAAAAAAAAAA////
-- ///////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMVAMSd
-- NgiG5wSTamZ44ROdJreBn36QBEEEaxfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5
-- RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9QIhAP////8AAAAA
-- //////////+85vqtpxeehPO5ysL8YyVRAgEBA0IABGdOH8uM6SfX3mdV+TR0mWp2
-- gfVRPlxWxwhOiowuNByBxmQz7ZR4CJY1XcN2zkUo5pzW73ZhGwgd2XTOvqPqG40=
-- -----END PUBLIC KEY-----
--
print("finished.")