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

Pascal (Lazarus/Delphi)
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.