Sample code for 30+ languages & platforms
Tcl 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 Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

#  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>

set cert [new_CkCert]

set success [CkCert_LoadPfxFile $cert "qa_data/pfx/cert_test123.pfx" "test123"]
if {$success == 0} then {
    puts [CkCert_lastErrorText $cert]
    delete_CkCert $cert
    exit
}

set xml [new_CkXml]

CkXml_put_Tag $xml "SignaturePubKeyOrderData"
CkXml_AddAttribute $xml "xmlns" "http://www.ebics.org/S001"
CkXml_AddAttribute $xml "xmlns:ds" "http://www.w3.org/2000/09/xmldsig#"
CkXml_AddAttribute $xml "xmlns:xsi" "http://www.w3.org/2001/XMLSchema-instance"
CkXml_AddAttribute $xml "xsi:schemaLocation" "http://www.ebics.org/S002"
CkXml_UpdateChildContent $xml "SignaturePubKeyInfo|ds:X509Data|X509IssuerSerial|ds:X509IssuerName" [CkCert_issuerDN $cert]
CkXml_UpdateChildContent $xml "SignaturePubKeyInfo|ds:X509Data|X509IssuerSerial|ds:X509SerialNumber" [CkCert_serialNumber $cert]
CkXml_UpdateChildContent $xml "SignaturePubKeyInfo|ds:X509Data|ds:X509Certificate" [CkCert_getEncoded $cert]

set pubkey [new_CkPublicKey]

CkCert_GetPublicKey $cert $pubkey

set xmlPubKey [new_CkXml]

CkXml_LoadXml $xmlPubKey [CkPublicKey_getXml $pubkey]

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

CkXml_UpdateChildContent $xml "SignaturePubKeyInfo|PubKeyValue|ds:RSAPublicKey|ds:Modulus" [CkXml_getChildContent $xmlPubKey "Modulus"]
CkXml_UpdateChildContent $xml "SignaturePubKeyInfo|PubKeyValue|ds:RSAPublicKey|ds:Exponent" [CkXml_getChildContent $xmlPubKey "Exponent"]
CkXml_UpdateChildContent $xml "SignaturePubKeyInfo|SignatureVersion" "A005"
CkXml_UpdateChildContent $xml "PartnerID" ""
CkXml_UpdateChildContent $xml "UserID" ""

puts [CkXml_getXml $xml]

delete_CkCert $cert
delete_CkXml $xml
delete_CkPublicKey $pubkey
delete_CkXml $xmlPubKey