Sample code for 30+ languages & platforms
AutoIt Requires Chilkat v11.0.0+

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

AutoIt
Local $bSuccess = False

;  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.
$oFortuna = ObjCreate("Chilkat.Prng")
Local $sEntropy = $oFortuna.GetEntropy(32,"base64")
$bSuccess = $oFortuna.AddEntropy($sEntropy,"base64")

$oEcc = ObjCreate("Chilkat.Ecc")

;  Generate a random ECC private key on the secp256r1 curve.
;  Chilkat also supports other curves, such as secp384r1, secp521r1, and secp256k1.

$oPrivKey = ObjCreate("Chilkat.PrivateKey")
$bSuccess = $oEcc.GenKey("secp256r1",$oFortuna,$oPrivKey)
If ($bSuccess = False) Then
    ConsoleWrite($oEcc.LastErrorText & @CRLF)
    Exit
EndIf

;  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.)
$bSuccess = $oPrivKey.SavePkcs8EncryptedPemFile("pemPassword","qa_output/eccPrivKey.pem")
If ($bSuccess <> True) Then
    ConsoleWrite($oPrivKey.LastErrorText & @CRLF)
EndIf

;  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.)
$oPubKey = ObjCreate("Chilkat.PublicKey")
$oPrivKey.ToPublicKey($oPubKey)

;  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
$bSuccess = $oPubKey.SavePemFile($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-----
;  

ConsoleWrite("finished." & @CRLF)