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

Lua
local chilkat = require("chilkat")

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

local cert = chilkat.Cert.new()
local success = cert:load_pfx_file("qa_data/pfx/cert_test123.pfx", "test123")
if not success then
    print(cert.last_error_text)
    return
end

local xml = chilkat.Xml.new()
xml.tag = "SignaturePubKeyOrderData"
xml:add_attribute("xmlns", "http://www.ebics.org/S001")
xml:add_attribute("xmlns:ds", "http://www.w3.org/2000/09/xmldsig#")
xml:add_attribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
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())

local pubkey = chilkat.PublicKey.new()
cert:get_public_key(pubkey)

local xmlPubKey = chilkat.Xml.new()
xmlPubKey:load_xml(pubkey:get_xml())

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

xml:update_child_content("SignaturePubKeyInfo|PubKeyValue|ds:RSAPublicKey|ds:Modulus", xmlPubKey:get_child_content("Modulus"))
xml:update_child_content("SignaturePubKeyInfo|PubKeyValue|ds:RSAPublicKey|ds:Exponent", xmlPubKey:get_child_content("Exponent"))
xml:update_child_content("SignaturePubKeyInfo|SignatureVersion", "A005")
xml:update_child_content("PartnerID", "")
xml:update_child_content("UserID", "")

print(xml:get_xml())