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

Rust

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

let cert = chilkat::Cert::new();
if cert.load_pfx_file("qa_data/pfx/cert_test123.pfx", "test123").is_err() {
    println!("{}", cert.last_error_text());
    return;
}

let xml = chilkat::Xml::new();
xml.set_tag("SignaturePubKeyOrderData");
let _ = xml.add_attribute("xmlns", "http://www.ebics.org/S001");
let _ = xml.add_attribute("xmlns:ds", "http://www.w3.org/2000/09/xmldsig#");
let _ = xml.add_attribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
let _ = xml.add_attribute("xsi:schemaLocation", "http://www.ebics.org/S002");
xml.update_child_content("SignaturePubKeyInfo|ds:X509Data|X509IssuerSerial|ds:X509IssuerName", &cert.issuer_dn());
xml.update_child_content("SignaturePubKeyInfo|ds:X509Data|X509IssuerSerial|ds:X509SerialNumber", &cert.serial_number());
xml.update_child_content("SignaturePubKeyInfo|ds:X509Data|ds:X509Certificate", &cert.get_encoded().unwrap_or_default());

let pubkey = chilkat::PublicKey::new();
let _ = cert.get_public_key(&pubkey);

let xml_pub_key = chilkat::Xml::new();
let _ = xml_pub_key.load_xml(&pubkey.get_xml().unwrap_or_default());

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

xml.update_child_content("SignaturePubKeyInfo|PubKeyValue|ds:RSAPublicKey|ds:Modulus", &xml_pub_key.get_child_content("Modulus").unwrap_or_default());
xml.update_child_content("SignaturePubKeyInfo|PubKeyValue|ds:RSAPublicKey|ds:Exponent", &xml_pub_key.get_child_content("Exponent").unwrap_or_default());
xml.update_child_content("SignaturePubKeyInfo|SignatureVersion", "A005");
xml.update_child_content("PartnerID", "");
xml.update_child_content("UserID", "");

println!("{}", xml.get_xml().unwrap_or_default());