DataFlex
DataFlex
Create XAdES using Smart Card or USB Token
See more XAdES Examples
Demonstrates how to create an XAdES signed XML document using a certificate located on a smartcard or USB token.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoXmlToSign
Handle hoGen
Handle hoObject1
Variant vCert
Handle hoCert
Variant vSbXml
Handle hoSbXml
Handle hoVerifier
Boolean iVerified
String sTemp1
Move False To iSuccess
// Load the XML to be signed.
Get Create (RefClass(cComChilkatXml)) To hoXmlToSign
If (Not(IsComObjectCreated(hoXmlToSign))) Begin
Send CreateComObject of hoXmlToSign
End
Get ComLoadXmlFile Of hoXmlToSign "qa_data/fattura_electronica/docToSign.xml" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoXmlToSign To sTemp1
Showln sTemp1
Procedure_Return
End
Get Create (RefClass(cComChilkatXmlDSigGen)) To hoGen
If (Not(IsComObjectCreated(hoGen))) Begin
Send CreateComObject of hoGen
End
Set ComSigLocation Of hoGen To "p:FatturaElettronica"
Set ComSigId Of hoGen To "xmldsig-6f4b994a-7191-4bb1-ab3c-17549515b504"
Set ComSigNamespacePrefix Of hoGen To "ds"
Set ComSigNamespaceUri Of hoGen To "http://www.w3.org/2000/09/xmldsig#"
Set ComSigValueId Of hoGen To "xmldsig-6f4b994a-7191-4bb1-ab3c-17549515b504-sigvalue"
Set ComSignedInfoCanonAlg Of hoGen To "C14N"
Set ComSignedInfoDigestMethod Of hoGen To "sha256"
// Create an Object to be added to the Signature.
// Note: Chilkat will automatically populate the strings indicated by "TO BE GENERATED BY CHILKAT" with actual/correct values
// when the XML is signed.
Get Create (RefClass(cComChilkatXml)) To hoObject1
If (Not(IsComObjectCreated(hoObject1))) Begin
Send CreateComObject of hoObject1
End
Set ComTag Of hoObject1 To "xades:QualifyingProperties"
Get ComAddAttribute Of hoObject1 "xmlns:xades" "http://uri.etsi.org/01903/v1.3.2#" To iSuccess
Get ComAddAttribute Of hoObject1 "xmlns:xades141" "http://uri.etsi.org/01903/v1.4.1#" To iSuccess
Get ComAddAttribute Of hoObject1 "Target" "#xmldsig-6f4b994a-7191-4bb1-ab3c-17549515b504" To iSuccess
Get ComUpdateAttrAt Of hoObject1 "xades:SignedProperties" True "Id" "xmldsig-6f4b994a-7191-4bb1-ab3c-17549515b504-signedprops" To iSuccess
Send ComUpdateChildContent To hoObject1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningTime" "TO BE GENERATED BY CHILKAT"
Get ComUpdateAttrAt Of hoObject1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificateV2|xades:Cert|xades:CertDigest|ds:DigestMethod" True "Algorithm" "http://www.w3.org/2001/04/xmlenc#sha256" To iSuccess
Send ComUpdateChildContent To hoObject1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificateV2|xades:Cert|xades:CertDigest|ds:DigestValue" "TO BE GENERATED BY CHILKAT"
Send ComUpdateChildContent To hoObject1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificateV2|xades:Cert|xades:IssuerSerialV2" "TO BE GENERATED BY CHILKAT"
Get ComGetXml Of hoObject1 To sTemp1
Get ComAddObject Of hoGen "" sTemp1 "" "" To iSuccess
// -------- Reference 1 --------
Set ComKeyInfoId Of hoGen To "xmldsig-6f4b994a-7191-4bb1-ab3c-17549515b504-keyinfo"
Get ComAddSameDocRef Of hoGen "xmldsig-6f4b994a-7191-4bb1-ab3c-17549515b504-keyinfo" "sha256" "" "" "" To iSuccess
// -------- Reference 2 --------
Get ComAddSameDocRef Of hoGen "" "sha256" "" "" "" To iSuccess
Get ComSetRefIdAttr Of hoGen "" "xmldsig-6f4b994a-7191-4bb1-ab3c-17549515b504-ref0" To iSuccess
// -------- Reference 3 --------
Get ComAddObjectRef Of hoGen "xmldsig-6f4b994a-7191-4bb1-ab3c-17549515b504-signedprops" "sha256" "" "" "http://uri.etsi.org/01903#SignedProperties" To iSuccess
// ----------------------------------------------------------------
// Load a certificate that has been pre-installed on the Windows system
// This includes certificates on smartcards and USB tokens
Get Create (RefClass(cComChilkatCert)) To hoCert
If (Not(IsComObjectCreated(hoCert))) Begin
Send CreateComObject of hoCert
End
// You may provide the PIN here..
Set ComSmartCardPin Of hoCert To "000000"
// Load the certificate on the smartcard currently in the reader (or on the USB token).
// Pass an empty string to allow Chilkat to automatically choose the CSP (Cryptographi Service Provider).
// See Load Certificate on Smartcard for information about explicitly selecting a particular CSP.
Get ComLoadFromSmartcard Of hoCert "" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoCert To sTemp1
Showln sTemp1
Procedure_Return
End
Get pvComObject of hoCert to vCert
Get ComSetX509Cert Of hoGen vCert True To iSuccess
Set ComKeyInfoType Of hoGen To "X509Data"
Set ComX509Type Of hoGen To "Certificate"
// Load XML to be signed...
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbXml
If (Not(IsComObjectCreated(hoSbXml))) Begin
Send CreateComObject of hoSbXml
End
Get pvComObject of hoSbXml to vSbXml
Get ComGetXmlSb Of hoXmlToSign vSbXml To iSuccess
Set ComBehaviors Of hoGen To "IndentedSignature,ForceAddEnvelopedSignatureTransform"
// Sign the XML...
Get pvComObject of hoSbXml to vSbXml
Get ComCreateXmlDSigSb Of hoGen vSbXml To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoGen To sTemp1
Showln sTemp1
Procedure_Return
End
// Save the signed XMl to a file.
Get ComWriteFile Of hoSbXml "qa_output/signedXml.xml" "utf-8" False To iSuccess
Get ComGetAsString Of hoSbXml To sTemp1
Showln sTemp1
// ----------------------------------------
// Verify the signature we just produced...
Get Create (RefClass(cComChilkatXmlDSig)) To hoVerifier
If (Not(IsComObjectCreated(hoVerifier))) Begin
Send CreateComObject of hoVerifier
End
Get pvComObject of hoSbXml to vSbXml
Get ComLoadSignatureSb Of hoVerifier vSbXml To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoVerifier To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComVerifySignature Of hoVerifier True To iVerified
If (iVerified <> True) Begin
Get ComLastErrorText Of hoVerifier To sTemp1
Showln sTemp1
Procedure_Return
End
Showln "This signature was successfully verified."
End_Procedure