PowerBuilder Requires Chilkat v11.0.0+
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