Sample code for 30+ languages & platforms
C

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 C Downloads

C
#include <C_CkCert.h>
#include <C_CkXml.h>
#include <C_CkPublicKey.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkCert cert;
    HCkXml xml;
    HCkPublicKey pubkey;
    HCkXml xmlPubKey;

    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 = CkCert_Create();
    success = CkCert_LoadPfxFile(cert,"qa_data/pfx/cert_test123.pfx","test123");
    if (success == FALSE) {
        printf("%s\n",CkCert_lastErrorText(cert));
        CkCert_Dispose(cert);
        return;
    }

    xml = CkXml_Create();
    CkXml_putTag(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));

    pubkey = CkPublicKey_Create();
    CkCert_GetPublicKey(cert,pubkey);

    xmlPubKey = CkXml_Create();
    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","");

    printf("%s\n",CkXml_getXml(xml));


    CkCert_Dispose(cert);
    CkXml_Dispose(xml);
    CkPublicKey_Dispose(pubkey);
    CkXml_Dispose(xmlPubKey);

    }