Sample code for 30+ languages & platforms
Delphi DLL

Example: Crypt2.GetSignedAttributes method

Demonstrates how to call the GetSignedAttributes method.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, BinData, StringBuilder, JsonObject, Crypt2;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
crypt: HCkCrypt2;
bdPkcs7: HCkBinData;
json: HCkJsonObject;
sbJson: HCkStringBuilder;
i: Integer;
tryNext: Boolean;

begin
success := False;

crypt := CkCrypt2_Create();

bdPkcs7 := CkBinData_Create();
success := CkBinData_LoadFile(bdPkcs7,'qa_data/cades/CAdES-T/Signature-C-T-1.p7m');
if (success = False) then
  begin
    Memo1.Lines.Add(CkBinData__lastErrorText(bdPkcs7));
    Exit;
  end;

json := CkJsonObject_Create();
CkJsonObject_putEmitCompact(json,False);

sbJson := CkStringBuilder_Create();
i := 0;
tryNext := True;
while tryNext do
  begin
    if (CkCrypt2_GetSignedAttributes(crypt,i,bdPkcs7,sbJson) = True) then
      begin
        CkJsonObject_LoadSb(json,sbJson);
        Memo1.Lines.Add(IntToStr(i) + ': ');
        Memo1.Lines.Add(CkJsonObject__emit(json));
      end
    else
      begin
        tryNext := False;
      end;

    i := i + 1;
  end;

// Sample output:

// 0: 
// {
//   "signedAttributes": [
//     {
//       "oid": "1.2.840.113549.1.9.3",
//       "name": "Content Type"
//     },
//     {
//       "oid": "1.2.840.113549.1.9.5",
//       "name": "Signing Time"
//     },
//     {
//       "oid": "1.2.840.113549.1.9.4",
//       "name": "Message Digest"
//     },
//     {
//       "oid": "1.2.840.113549.1.9.16.2.47",
//       "name": "Signing Certificate V2"
//     }
//   ]
// }

CkCrypt2_Dispose(crypt);
CkBinData_Dispose(bdPkcs7);
CkJsonObject_Dispose(json);
CkStringBuilder_Dispose(sbJson);

end;