AutoIt
AutoIt
Generate ECDSA Key and Get Details as XML
See more ECC Examples
Demonstrates how to generate an ECDSA key and gets the parts as XML.Chilkat AutoIt Downloads
Local $bSuccess = False
; This requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
$oEcc = ObjCreate("Chilkat.Ecc")
; Generate a random ECC private key on the secp256k1 curve.
; Chilkat also supports other curves, such as secp384r1, secp521r1, and secp256r1.
; 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")
$oPrivKey = ObjCreate("Chilkat.PrivateKey")
$bSuccess = $oEcc.GenKey("secp256k1",$oFortuna,$oPrivKey)
If ($bSuccess = False) Then
ConsoleWrite($oEcc.LastErrorText & @CRLF)
Exit
EndIf
; An EC private key has this ASN.1
; ECPrivateKey ::= SEQUENCE {
; version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1),
; privateKey OCTET STRING,
; parameters [0] ECParameters {{ NamedCurve }} OPTIONAL,
; publicKey [1] BIT STRING OPTIONAL (This is the ANSI X9.63 public key format.)
$oAsn = ObjCreate("Chilkat.Asn")
$bSuccess = $oAsn.LoadEncoded($oPrivKey.GetPkcs1ENC("base64"),"base64")
If ($bSuccess <> True) Then
ConsoleWrite($oAsn.LastErrorText & @CRLF)
Exit
EndIf
$oXml = ObjCreate("Chilkat.Xml")
$oXml.LoadXml($oAsn.AsnToXml())
ConsoleWrite($oXml.GetXml() & @CRLF)
; The XML looks like this:
; <?xml version="1.0" encoding="utf-8" ?>
; <sequence>
; <int>01</int>
; <octets>JgJvBG+3wletkJab8iXAkpz0O8/AgWZSpkYVcB7SpnU=</octets>
; <contextSpecific tag="0" constructed="1">
; <oid>1.3.132.0.10</oid>
; </contextSpecific>
; </sequence>
; The 32-byte private key is in the octets..
; Get it as hex.
$oCrypt = ObjCreate("Chilkat.Crypt2")
Local $sPrivKeyHex = $oCrypt.ReEncode($oXml.GetChildContent("octets"),"base64","hex")
ConsoleWrite("EC private key as hex = " & $sPrivKeyHex & @CRLF)