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

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // 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>

  final cert = CkCert();
  try {
    cert.loadPfxFile('qa_data/pfx/cert_test123.pfx', 'test123');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final xml = CkXml();
  xml.tag = '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());

  final pubkey = CkPublicKey();
  cert.getPublicKey(pubkey);

  final xmlPubKey = CkXml();
  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', '');

  print(xml.getXml());
}