Chilkat HOME Android™ Classic ASP C C++ C# Mono C# .NET Core C# C# UWP/WinRT DataFlex Delphi ActiveX Delphi DLL Visual FoxPro Java Lianja MFC Objective-C Perl PHP ActiveX PHP Extension PowerBuilder PowerShell PureBasic CkPython Chilkat2-Python Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ Visual Basic 6.0 VB.NET VB.NET UWP/WinRT VBScript Xojo Plugin Node.js Excel Go
(Excel) XML-DSig Add EncapsulatedTimestamp when SigningSee more XML Digital Signatures ExamplesDemonstrates how to add an EncapsulatedTimestamp at the time of creating an XML signature. Note: This example requires Chilkat v9.5.0.90 or greater.
' This example requires the Chilkat API to have been previously unlocked. ' See Global Unlock Sample for sample code. success = True ' Create the folllowing XML to be signed... ' Use this online tool to generate code from sample XML: ' Generate Code to Create XML ' <p:FatturaElettronica xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" versione="FPR12" xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd"> ' <FatturaElettronicaHeader> ' <DatiTrasmissione> ' <IdTrasmittente> ' <IdPaese>IT</IdPaese> ' <IdCodice>01234567890</IdCodice> ' </IdTrasmittente> ' <ProgressivoInvio>00001</ProgressivoInvio> ' <FormatoTrasmissione>FPR12</FormatoTrasmissione> ' <CodiceDestinatario>0000000</CodiceDestinatario> ' <PECDestinatario>betagamma@pec.it</PECDestinatario> ' </DatiTrasmissione> ' <CedentePrestatore> ' <DatiAnagrafici> ' <IdFiscaleIVA> ' <IdPaese>IT</IdPaese> ' <IdCodice>01234567890</IdCodice> ' </IdFiscaleIVA> ' <Anagrafica> ' <Denominazione>ALPHA SRL</Denominazione> ' </Anagrafica> ' <RegimeFiscale>RF19</RegimeFiscale> ' </DatiAnagrafici> ' <Sede> ' <Indirizzo>VIALE ROMA 543</Indirizzo> ' <CAP>07100</CAP> ' <Comune>SASSARI</Comune> ' <Provincia>SS</Provincia> ' <Nazione>IT</Nazione> ' </Sede> ' </CedentePrestatore> ' <CessionarioCommittente> ' <DatiAnagrafici> ' <CodiceFiscale>09876543210</CodiceFiscale> ' <Anagrafica> ' <Denominazione>AMMINISTRAZIONE BETA</Denominazione> ' </Anagrafica> ' </DatiAnagrafici> ' <Sede> ' <Indirizzo>VIA TORINO 38-B</Indirizzo> ' <CAP>00145</CAP> ' ' <Comune>ROMA</Comune> ' <Provincia>RM</Provincia> ' <Nazione>IT</Nazione> ' </Sede> ' <StabileOrganizzazione> ' <Indirizzo>VIA CASELLE</Indirizzo> ' <NumeroCivico>4/D</NumeroCivico> ' <CAP>25027</CAP> ' <Comune>QUINZANO D'OGLIO</Comune> ' <Provincia>BS</Provincia> ' <Nazione>IT</Nazione> ' </StabileOrganizzazione> ' <RappresentanteFiscale> ' <IdFiscaleIVA> ' <IdPaese>DE</IdPaese> ' <IdCodice>DE12345</IdCodice> ' </IdFiscaleIVA> ' <Denominazione>RFCC - DENOMINAZIONE</Denominazione> ' </RappresentanteFiscale> ' </CessionarioCommittente> ' </FatturaElettronicaHeader> ' <FatturaElettronicaBody> ' <DatiGenerali> ' <DatiGeneraliDocumento> ' <TipoDocumento>TD01</TipoDocumento> ' <Divisa>EUR</Divisa> ' <Data>2022-03-03</Data> ' <Numero>123</Numero> ' <Causale>LA FATTURA FA RIFERIMENTO AD UNA OPERAZIONE AAAA</Causale> ' <Causale>SEGUE DESCRIZIONE CAUSALE NEL CASO IN CUI NON SIANO STATI SUFFICIENTI 200 CARATTERI AAAAAAAAAAA BBBBBBBBBBBBBBBBB</Causale> ' </DatiGeneraliDocumento> ' <DatiOrdineAcquisto> ' <RiferimentoNumeroLinea>1</RiferimentoNumeroLinea> ' <IdDocumento>66685</IdDocumento> ' <NumItem>1</NumItem> ' <CodiceCUP>123abc</CodiceCUP> ' <CodiceCIG>456def</CodiceCIG> ' </DatiOrdineAcquisto> ' <DatiContratto> ' <RiferimentoNumeroLinea>1</RiferimentoNumeroLinea> ' <IdDocumento>123</IdDocumento> ' <Data>2022-01-01</Data> ' <NumItem>5</NumItem> ' <CodiceCUP>123abc</CodiceCUP> ' <CodiceCIG>456def</CodiceCIG> ' </DatiContratto> ' <DatiConvenzione> ' <RiferimentoNumeroLinea>1</RiferimentoNumeroLinea> ' <IdDocumento>456</IdDocumento> ' <NumItem>5</NumItem> ' <CodiceCUP>123abc</CodiceCUP> ' <CodiceCIG>456def</CodiceCIG> ' </DatiConvenzione> ' <DatiRicezione> ' <RiferimentoNumeroLinea>1</RiferimentoNumeroLinea> ' <IdDocumento>789</IdDocumento> ' <NumItem>5</NumItem> ' <CodiceCUP>123abc</CodiceCUP> ' <CodiceCIG>456def</CodiceCIG> ' </DatiRicezione> ' <DatiTrasporto> ' <DatiAnagraficiVettore> ' <IdFiscaleIVA> ' <IdPaese>IT</IdPaese> ' <IdCodice>24681012141</IdCodice> ' </IdFiscaleIVA> ' <Anagrafica> ' <Denominazione>Trasporto spa</Denominazione> ' </Anagrafica> ' </DatiAnagraficiVettore> ' <DataOraConsegna>2022-03-01T14:26:39</DataOraConsegna> ' </DatiTrasporto> ' </DatiGenerali> ' <DatiBeniServizi> ' <DettaglioLinee> ' <NumeroLinea>1</NumeroLinea> ' <Descrizione>DESCRIZIONE DELLA FORNITURA</Descrizione> ' <Quantita>5.005</Quantita> ' <PrezzoUnitario>1.00</PrezzoUnitario> ' <PrezzoTotale>5.00</PrezzoTotale> ' <AliquotaIVA>22.00</AliquotaIVA> ' </DettaglioLinee> ' <DatiRiepilogo> ' <AliquotaIVA>22.00</AliquotaIVA> ' <ImponibileImporto>5.00</ImponibileImporto> ' <Imposta>1.10</Imposta> ' <EsigibilitaIVA>I</EsigibilitaIVA> ' </DatiRiepilogo> ' </DatiBeniServizi> ' <DatiPagamento> ' <CondizioniPagamento>TP01</CondizioniPagamento> ' <DettaglioPagamento> ' <ModalitaPagamento>MP01</ModalitaPagamento> ' <DataScadenzaPagamento>2017-02-18</DataScadenzaPagamento> ' <ImportoPagamento>6.10</ImportoPagamento> ' </DettaglioPagamento> ' </DatiPagamento> ' </FatturaElettronicaBody> ' </p:FatturaElettronica> Dim xmlToSign As Chilkat.Xml Set xmlToSign = Chilkat.NewXml xmlToSign.Tag = "p:FatturaElettronica" Dim success As Boolean success = xmlToSign.AddAttribute("xmlns:ds","http://www.w3.org/2000/09/xmldsig#") success = xmlToSign.AddAttribute("xmlns:p","http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2") success = xmlToSign.AddAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance") success = xmlToSign.AddAttribute("versione","FPR12") success = xmlToSign.AddAttribute("xsi:schemaLocation","http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd") xmlToSign.UpdateChildContent "FatturaElettronicaHeader|DatiTrasmissione|IdTrasmittente|IdPaese","IT" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|DatiTrasmissione|IdTrasmittente|IdCodice","01234567890" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|DatiTrasmissione|ProgressivoInvio","00001" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|DatiTrasmissione|FormatoTrasmissione","FPR12" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|DatiTrasmissione|CodiceDestinatario","0000000" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|DatiTrasmissione|PECDestinatario","betagamma@pec.it" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CedentePrestatore|DatiAnagrafici|IdFiscaleIVA|IdPaese","IT" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CedentePrestatore|DatiAnagrafici|IdFiscaleIVA|IdCodice","01234567890" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CedentePrestatore|DatiAnagrafici|Anagrafica|Denominazione","ALPHA SRL" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CedentePrestatore|DatiAnagrafici|RegimeFiscale","RF19" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CedentePrestatore|Sede|Indirizzo","VIALE ROMA 543" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CedentePrestatore|Sede|CAP","07100" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CedentePrestatore|Sede|Comune","SASSARI" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CedentePrestatore|Sede|Provincia","SS" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CedentePrestatore|Sede|Nazione","IT" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|DatiAnagrafici|CodiceFiscale","09876543210" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|DatiAnagrafici|Anagrafica|Denominazione","AMMINISTRAZIONE BETA" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|Sede|Indirizzo","VIA TORINO 38-B" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|Sede|CAP","00145" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|Sede|Comune","ROMA" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|Sede|Provincia","RM" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|Sede|Nazione","IT" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|StabileOrganizzazione|Indirizzo","VIA CASELLE" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|StabileOrganizzazione|NumeroCivico","4/D" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|StabileOrganizzazione|CAP","25027" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|StabileOrganizzazione|Comune","QUINZANO D'OGLIO" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|StabileOrganizzazione|Provincia","BS" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|StabileOrganizzazione|Nazione","IT" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|RappresentanteFiscale|IdFiscaleIVA|IdPaese","DE" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|RappresentanteFiscale|IdFiscaleIVA|IdCodice","DE12345" xmlToSign.UpdateChildContent "FatturaElettronicaHeader|CessionarioCommittente|RappresentanteFiscale|Denominazione","RFCC - DENOMINAZIONE" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiGeneraliDocumento|TipoDocumento","TD01" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiGeneraliDocumento|Divisa","EUR" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiGeneraliDocumento|Data","2022-03-03" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiGeneraliDocumento|Numero","123" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiGeneraliDocumento|Causale","LA FATTURA FA RIFERIMENTO AD UNA OPERAZIONE AAAA" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiGeneraliDocumento|Causale[1]","SEGUE DESCRIZIONE CAUSALE NEL CASO IN CUI NON SIANO STATI SUFFICIENTI 200 CARATTERI AAAAAAAAAAA BBBBBBBBBBBBBBBBB" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiOrdineAcquisto|RiferimentoNumeroLinea","1" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiOrdineAcquisto|IdDocumento","66685" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiOrdineAcquisto|NumItem","1" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiOrdineAcquisto|CodiceCUP","123abc" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiOrdineAcquisto|CodiceCIG","456def" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiContratto|RiferimentoNumeroLinea","1" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiContratto|IdDocumento","123" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiContratto|Data","2022-01-01" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiContratto|NumItem","5" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiContratto|CodiceCUP","123abc" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiContratto|CodiceCIG","456def" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiConvenzione|RiferimentoNumeroLinea","1" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiConvenzione|IdDocumento","456" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiConvenzione|NumItem","5" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiConvenzione|CodiceCUP","123abc" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiConvenzione|CodiceCIG","456def" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiRicezione|RiferimentoNumeroLinea","1" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiRicezione|IdDocumento","789" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiRicezione|NumItem","5" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiRicezione|CodiceCUP","123abc" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiRicezione|CodiceCIG","456def" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiTrasporto|DatiAnagraficiVettore|IdFiscaleIVA|IdPaese","IT" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiTrasporto|DatiAnagraficiVettore|IdFiscaleIVA|IdCodice","24681012141" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiTrasporto|DatiAnagraficiVettore|Anagrafica|Denominazione","Trasporto spa" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiGenerali|DatiTrasporto|DataOraConsegna","2022-03-01T14:26:39" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiBeniServizi|DettaglioLinee|NumeroLinea","1" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiBeniServizi|DettaglioLinee|Descrizione","DESCRIZIONE DELLA FORNITURA" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiBeniServizi|DettaglioLinee|Quantita","5.005" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiBeniServizi|DettaglioLinee|PrezzoUnitario","1.00" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiBeniServizi|DettaglioLinee|PrezzoTotale","5.00" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiBeniServizi|DettaglioLinee|AliquotaIVA","22.00" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiBeniServizi|DatiRiepilogo|AliquotaIVA","22.00" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiBeniServizi|DatiRiepilogo|ImponibileImporto","5.00" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiBeniServizi|DatiRiepilogo|Imposta","1.10" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiBeniServizi|DatiRiepilogo|EsigibilitaIVA","I" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiPagamento|CondizioniPagamento","TP01" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiPagamento|DettaglioPagamento|ModalitaPagamento","MP01" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiPagamento|DettaglioPagamento|DataScadenzaPagamento","2017-02-18" xmlToSign.UpdateChildContent "FatturaElettronicaBody|DatiPagamento|DettaglioPagamento|ImportoPagamento","6.10" Dim gen As Chilkat.XmlDSigGen Set gen = Chilkat.NewXmlDSigGen gen.SigLocation = "p:FatturaElettronica" gen.SigLocationMod = 0 gen.SigId = "signature-5580-7534-6530-8286" success = gen.AddSignatureNamespace("xadesv1410","http://uri.etsi.org/01903/v1.4.1") success = gen.AddSignatureNamespace("xades","http://uri.etsi.org/01903/v1.3.2#") ' xmlRoot tag = p:FatturaElettronica ' has xmlns:ds! gen.SigValueId = "signature-value-5957-3819-1360-0727" gen.SignedInfoCanonAlg = "EXCL_C14N" gen.SignedInfoDigestMethod = "sha256" ' Set the KeyInfoId before adding references.. gen.KeyInfoId = "key-info-7422-1087-7530-8569" ' Create the following signed properties object to be added to the signature: ' Use this online tool to generate code from sample XML: ' Generate Code to Create XML ' <xades:QualifyingProperties Target="#signature-5580-7534-6530-8286"> ' <xades:SignedProperties Id="signed-properties-1545-8800-2160-3000"> ' <xades:SignedSignatureProperties> ' <xades:SigningTime>TO BE GENERATED BY CHILKAT</xades:SigningTime> ' <xades:SigningCertificate> ' <xades:Cert> ' <xades:CertDigest> ' <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> ' <ds:DigestValue>TO BE GENERATED BY CHILKAT</ds:DigestValue> ' ' </xades:CertDigest> ' <xades:IssuerSerial> ' <ds:X509IssuerName>TO BE GENERATED BY CHILKAT</ds:X509IssuerName> ' <ds:X509SerialNumber>TO BE GENERATED BY CHILKAT</ds:X509SerialNumber> ' </xades:IssuerSerial> ' </xades:Cert> ' </xades:SigningCertificate> ' </xades:SignedSignatureProperties> ' </xades:SignedProperties> ' <xades:UnsignedProperties> ' <xades:UnsignedSignatureProperties> ' <xades:SignatureTimeStamp Id="signature-timestamp-5561-8212-3316-5191"> ' <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> ' <xades:EncapsulatedTimeStamp Encoding="http://uri.etsi.org/01903/v1.2.2#DER">TO BE GENERATED BY CHILKAT</xades:EncapsulatedTimeStamp> ' </xades:SignatureTimeStamp> ' </xades:UnsignedSignatureProperties> ' </xades:UnsignedProperties> ' </xades:QualifyingProperties> ' Note: Chilkat will automatically fill in the values marked as "TO BE GENERATED BY CHILKAT" at the time of signing. ' The EncapsulatedTimestamp will be automatically generated. Dim object1 As Chilkat.Xml Set object1 = Chilkat.NewXml object1.Tag = "xades:QualifyingProperties" success = object1.AddAttribute("Target","#signature-5580-7534-6530-8286") success = object1.UpdateAttrAt("xades:SignedProperties",True,"Id","signed-properties-1545-8800-2160-3000") object1.UpdateChildContent "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningTime","TO BE GENERATED BY CHILKAT" success = object1.UpdateAttrAt("xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:CertDigest|ds:DigestMethod",True,"Algorithm","http://www.w3.org/2001/04/xmlenc#sha256") object1.UpdateChildContent "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:CertDigest|ds:DigestValue","TO BE GENERATED BY CHILKAT" object1.UpdateChildContent "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:IssuerSerial|ds:X509IssuerName","TO BE GENERATED BY CHILKAT" object1.UpdateChildContent "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:IssuerSerial|ds:X509SerialNumber","TO BE GENERATED BY CHILKAT" success = object1.UpdateAttrAt("xades:UnsignedProperties|xades:UnsignedSignatureProperties|xades:SignatureTimeStamp",True,"Id","signature-timestamp-5561-8212-3316-5191") success = object1.UpdateAttrAt("xades:UnsignedProperties|xades:UnsignedSignatureProperties|xades:SignatureTimeStamp|ds:CanonicalizationMethod",True,"Algorithm","http://www.w3.org/2001/10/xml-exc-c14n#") success = object1.UpdateAttrAt("xades:UnsignedProperties|xades:UnsignedSignatureProperties|xades:SignatureTimeStamp|xades:EncapsulatedTimeStamp",True,"Encoding","http://uri.etsi.org/01903/v1.2.2#DER") object1.UpdateChildContent "xades:UnsignedProperties|xades:UnsignedSignatureProperties|xades:SignatureTimeStamp|xades:EncapsulatedTimeStamp","TO BE GENERATED BY CHILKAT" success = gen.AddObject("signature-object-8923-2359-1722-2161",object1.GetXml(),"","") ' -------- Reference 1 -------- ' <ds:Transforms> ' <ds:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2"> ' <dsig-xpath:XPath xmlns:dsig-xpath="http://www.w3.org/2002/06/xmldsig-filter2" Filter="subtract">/descendant::ds:Signature</dsig-xpath:XPath> ' </ds:Transform> ' <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> ' </ds:Transforms> Dim xml1 As Chilkat.Xml Set xml1 = Chilkat.NewXml xml1.Tag = "ds:Transforms" success = xml1.UpdateAttrAt("ds:Transform",True,"Algorithm","http://www.w3.org/2002/06/xmldsig-filter2") success = xml1.UpdateAttrAt("ds:Transform|dsig-xpath:XPath",True,"xmlns:dsig-xpath","http://www.w3.org/2002/06/xmldsig-filter2") success = xml1.UpdateAttrAt("ds:Transform|dsig-xpath:XPath",True,"Filter","subtract") xml1.UpdateChildContent "ds:Transform|dsig-xpath:XPath","/descendant::ds:Signature" success = xml1.UpdateAttrAt("ds:Transform[1]",True,"Algorithm","http://www.w3.org/2001/10/xml-exc-c14n#") success = gen.AddSameDocRef2("","sha256",xml1,"") ' -------- Reference 2 -------- ' <ds:Transforms> ' <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> ' </ds:Transforms> Dim xml2 As Chilkat.Xml Set xml2 = Chilkat.NewXml xml2.Tag = "ds:Transforms" success = xml2.UpdateAttrAt("ds:Transform",True,"Algorithm","http://www.w3.org/2001/10/xml-exc-c14n#") success = gen.AddObjectRef2("signed-properties-1545-8800-2160-3000","sha256",xml2,"http://uri.etsi.org/01903#SignedProperties") ' Provide a certificate + private key. (PFX password is test123) Dim cert As Chilkat.Cert Set cert = Chilkat.NewCert success = cert.LoadPfxFile("qa_data/pfx/cert_test123.pfx","test123") If (success <> True) Then Debug.Print cert.LastErrorText Exit Sub End If success = gen.SetX509Cert(cert,True) gen.KeyInfoType = "X509Data+KeyValue" gen.X509Type = "Certificate" ' Load XML to be signed... Dim sbXml As Chilkat.StringBuilder Set sbXml = Chilkat.NewStringBuilder success = xmlToSign.GetXmlSb(sbXml) gen.Behaviors = "IndentedSignature,OmitAlreadyDefinedSigNamespace" ' ------------------------------------------------------------------------------------------- ' To have the EncapsulatedTimeStamp automatically added, we only need to do 2 things. ' 1) Add the <xades:EncapsulatedTimeStamp Encoding="http://uri.etsi.org/01903/v1.2.2#DER">TO BE GENERATED BY CHILKAT</xades:EncapsulatedTimeStamp> ' to the unsigned properties. ' 2) Specify the TSA URL (Timestamping Authority URL). ' Here we specify the TSA URL: ' ------------------------------------------------------------------------------------------- Dim jsonTsa As Chilkat.JsonObject Set jsonTsa = Chilkat.NewJsonObject success = jsonTsa.UpdateString("timestampToken.tsaUrl","http://timestamp.digicert.com") success = jsonTsa.UpdateBool("timestampToken.requestTsaCert",True) success = gen.SetTsa(jsonTsa) ' Sign the XML... success = gen.CreateXmlDSigSb(sbXml) If (success <> True) Then Debug.Print gen.LastErrorText Exit Sub End If ' Save the signed XML to a file. success = sbXml.WriteFile("qa_output/signedXml.xml","utf-8",False) ' ---------------------------------------- ' Verify the signatures we just produced... Dim verifier As Chilkat.XmlDSig Set verifier = Chilkat.NewXmlDSig success = verifier.LoadSignatureSb(sbXml) If (success <> True) Then Debug.Print verifier.LastErrorText Exit Sub End If ' Add "VerifyEncapsulatedTimeStamp" to the UncommonOptions to also verify any EncapsulatedTimeStamps verifier.UncommonOptions = "VerifyEncapsulatedTimeStamp" numSigs = verifier.NumSignatures verifyIdx = 0 Do While verifyIdx < numSigs verifier.Selector = verifyIdx verified = verifier.VerifySignature(True) If (verified <> True) Then Debug.Print verifier.LastErrorText Exit Sub End If verifyIdx = verifyIdx + 1 Loop Debug.Print "All signatures were successfully verified." |
© 2000-2022 Chilkat Software, Inc. All Rights Reserved.