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

Create EBICS SignaturePubKeyOrderData XML

See more EBICS Examples

Demonstrates how to create the EBICS SignaturePubKeyOrderData XML. (EBICS is the Electronic Banking Internet Communication Standard)

Chilkat Go Downloads

Go
    success := false

    //  This example assumes the Chilkat API to have been previously unlocked.
    //  See Global Unlock Sample for sample code.

    //  The goal of this example is to create the XML shown below from the certificate to be used for signing.

    //  <?xml version="1.0" encoding="UTF-8"?>
    //  <SignaturePubKeyOrderData xmlns="http://www.ebics.org/S001" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ebics.org/S002">
    //    <SignaturePubKeyInfo>
    //      <ds:X509Data>
    //        <X509IssuerSerial>
    //          <ds:X509IssuerName>C=FR, O=Example, OU=1234, CN=Example eID User, OrganizationID=SI:FR-1234</ds:X509IssuerName>
    //          <ds:X509SerialNumber>73FFFFB881F1629982F787DF161EFFFF</ds:X509SerialNumber>
    //        </X509IssuerSerial>
    //        <ds:X509Certificate>
    //          MIIJT...kE=
    //        </ds:X509Certificate>
    //      </ds:X509Data>
    //      <PubKeyValue>
    //        <ds:RSAPublicKey>
    //         <ds:Modulus>wedQ...22Kw==</ds:Modulus>
    //          <ds:Exponent>AQAB</ds:Exponent>
    //        </ds:RSAPublicKey>
    //      </PubKeyValue>
    //      <SignatureVersion>A005</SignatureVersion>
    //    </SignaturePubKeyInfo>
    //    <PartnerID/>
    //    <UserID/>
    //  </SignaturePubKeyOrderData>

    cert := chilkat.NewCert()
    success = cert.LoadPfxFile("qa_data/pfx/cert_test123.pfx","test123")
    if success == false {
        fmt.Println(cert.LastErrorText())
        cert.DisposeCert()
        return
    }

    xml := chilkat.NewXml()
    xml.SetTag("SignaturePubKeyOrderData")
    xml.AddAttribute("xmlns","http://www.ebics.org/S001")
    xml.AddAttribute("xmlns:ds","http://www.w3.org/2000/09/xmldsig#")
    xml.AddAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance")
    xml.AddAttribute("xsi:schemaLocation","http://www.ebics.org/S002")
    xml.UpdateChildContent("SignaturePubKeyInfo|ds:X509Data|X509IssuerSerial|ds:X509IssuerName",cert.IssuerDN())
    xml.UpdateChildContent("SignaturePubKeyInfo|ds:X509Data|X509IssuerSerial|ds:X509SerialNumber",cert.SerialNumber())
    xml.UpdateChildContent("SignaturePubKeyInfo|ds:X509Data|ds:X509Certificate",*cert.GetEncoded())

    pubkey := chilkat.NewPublicKey()
    cert.GetPublicKey(pubkey)

    xmlPubKey := chilkat.NewXml()
    xmlPubKey.LoadXml(*pubkey.GetXml())

    //  The public key XML will look like this:
    //  
    //  <RSAPublicKey>
    //    <Modulus>...</Modulus>
    //    <Exponent>...</Exponent>
    //  </RSAPublicKey>

    xml.UpdateChildContent("SignaturePubKeyInfo|PubKeyValue|ds:RSAPublicKey|ds:Modulus",*xmlPubKey.GetChildContent("Modulus"))
    xml.UpdateChildContent("SignaturePubKeyInfo|PubKeyValue|ds:RSAPublicKey|ds:Exponent",*xmlPubKey.GetChildContent("Exponent"))
    xml.UpdateChildContent("SignaturePubKeyInfo|SignatureVersion","A005")
    xml.UpdateChildContent("PartnerID","")
    xml.UpdateChildContent("UserID","")

    fmt.Println(*xml.GetXml())

    cert.DisposeCert()
    xml.DisposeXml()
    pubkey.DisposePublicKey()
    xmlPubKey.DisposeXml()