Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
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 Pascal (Lazarus/Delphi) Downloads
program ChilkatDemo;
// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
SysUtils,
CkDllLoader,
Chilkat.PublicKey,
Chilkat.Xml,
Chilkat.Cert;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
cert: TCert;
xml: TXml;
pubkey: TPublicKey;
xmlPubKey: TXml;
begin
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 := TCert.Create;
success := cert.LoadPfxFile('qa_data/pfx/cert_test123.pfx','test123');
if (success = False) then
begin
WriteLn(cert.LastErrorText);
Exit;
end;
xml := TXml.Create;
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());
pubkey := TPublicKey.Create;
cert.GetPublicKey(pubkey);
xmlPubKey := TXml.Create;
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','');
WriteLn(xml.GetXml());
cert.Free;
xml.Free;
pubkey.Free;
xmlPubKey.Free;
end;
// ---------------------------------------------------------------------------
begin
try
RunDemo;
except
on E: Exception do
WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
end;
WriteLn;
{$IFDEF MSWINDOWS}
WriteLn('Press Enter to exit...');
ReadLn;
{$ENDIF}
end.