PowerBuilder
PowerBuilder
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 PowerBuilder Downloads
integer li_rc
integer li_Success
oleobject loo_Ecc
oleobject loo_Fortuna
string ls_Entropy
oleobject loo_PrivKey
oleobject loo_Asn
oleobject loo_Xml
oleobject loo_Crypt
string ls_PrivKeyHex
li_Success = 0
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
loo_Ecc = create oleobject
li_rc = loo_Ecc.ConnectToNewObject("Chilkat.Ecc")
if li_rc < 0 then
destroy loo_Ecc
MessageBox("Error","Connecting to COM object failed")
return
end if
// 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.
loo_Fortuna = create oleobject
li_rc = loo_Fortuna.ConnectToNewObject("Chilkat.Prng")
ls_Entropy = loo_Fortuna.GetEntropy(32,"base64")
li_Success = loo_Fortuna.AddEntropy(ls_Entropy,"base64")
loo_PrivKey = create oleobject
li_rc = loo_PrivKey.ConnectToNewObject("Chilkat.PrivateKey")
li_Success = loo_Ecc.GenKey("secp256k1",loo_Fortuna,loo_PrivKey)
if li_Success = 0 then
Write-Debug loo_Ecc.LastErrorText
destroy loo_Ecc
destroy loo_Fortuna
destroy loo_PrivKey
return
end if
// 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.)
loo_Asn = create oleobject
li_rc = loo_Asn.ConnectToNewObject("Chilkat.Asn")
li_Success = loo_Asn.LoadEncoded(loo_PrivKey.GetPkcs1ENC("base64"),"base64")
if li_Success <> 1 then
Write-Debug loo_Asn.LastErrorText
destroy loo_Ecc
destroy loo_Fortuna
destroy loo_PrivKey
destroy loo_Asn
return
end if
loo_Xml = create oleobject
li_rc = loo_Xml.ConnectToNewObject("Chilkat.Xml")
loo_Xml.LoadXml(loo_Asn.AsnToXml())
Write-Debug loo_Xml.GetXml()
// 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.
loo_Crypt = create oleobject
li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2")
ls_PrivKeyHex = loo_Crypt.ReEncode(loo_Xml.GetChildContent("octets"),"base64","hex")
Write-Debug "EC private key as hex = " + ls_PrivKeyHex
destroy loo_Ecc
destroy loo_Fortuna
destroy loo_PrivKey
destroy loo_Asn
destroy loo_Xml
destroy loo_Crypt