Discuss this help topic in SecureBlackbox Forum
XML: Add properties to signature
To add signature properties into the signature you need to create an instance of TElXMLSignatureProperties class and add it into the ds:Object data list, then create and fill signature property content.
Sample code for adding an object with a signature property, that contains a custom "Info" element:
C#:
TElXMLSigner Signer = new TElXMLSigner();
...
Signer.GenerateSignature();
...
// add ds:Object element
TElXMLObject Obj = new TElXMLObject();
Signer.Signature.Objects.Add(Obj);
// add ds:SignatureProperties element
TElXMLSignatureProperties SigProps = new TElXMLSignatureProperties();
Obj.DataList.Add(SigProps);
// add ds:SignatureProperty element
TElXMLProperty Prop = new TElXMLProperty();
SigProps.Add(Prop);
Prop.Target = "#" + Signer.Signature.ID;
Prop.PropertyNode = XMLDocument.CreateElement("dummy");
// add Info element
TElXMLDOMElement El = XMLDocument.CreateElementNS("namespaceURI", "Info");
Prop.PropertyNode.AppendChild(El);
El.set_AttribStrings("datetime", SBXMLUtils.Unit.DateTimeToXMLString(DateTime.UtcNow));
Delphi:
var
Signer : TElXMLSigner;
Obj : TElXMLObject;
SigProps : TElXMLSignatureProperties;
Prop : TElXMLProperty;
El : TElXMLDOMElement;
...
Signer := TElXMLSigner.Create(nil);
...
Signer.GenerateSignature();
...
// add ds:Object element
Obj := TElXMLObject.Create();
Signer.Signature.Objects.Add(Obj);
// add ds:SignatureProperties element
SigProps := TElXMLSignatureProperties.Create();
Obj.DataList.Add(SigProps);
// add ds:SignatureProperty element
Prop := TElXMLProperty.Create();
SigProps.Add(Prop);
Prop.Target := '#' + Signer.Signature.ID;
Prop.PropertyNode := XMLDocument.CreateElement('dummy');
// add Info element
El := XMLDocument.CreateElementNS('namespaceURI', 'Info');
Prop.PropertyNode.AppendChild(El);
El.AttribStrings['datetime'] := SBXMLUtils.DateTimeToXMLString(UtcNow);
Generated XML:
<ds:Object>
<ds:SignatureProperties>
<ds:SignatureProperty Target="#SignatureId">
<Info datetime="2100-01-11T11:11:10.001Z" xmlns="namespaceURI"/>
</ds:SignatureProperty>
</ds:SignatureProperties>
</ds:Object>