![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Tcl) Create SOAP with one VeriFactu Digitally Signed Registration RecordSee more Verifactu ExamplesCreates a SOAP message containing a single digitally signed invoice registration record, formatted according to the specifications for Spain's Veri*Factu system.
load ./chilkat.dll set success 0 set success 1 # Create the following SOAP XML containing one Veri*Factu record to be signed... # <?xml version="1.0" encoding="UTF-8"?> # <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sum="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd" xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd" xmlns:xd="http://www.w3.org/2000/09/xmldsig#"> # <soapenv:Header/> # <soapenv:Body> # <sum:RegFactuSistemaFacturacion> # <sum:Cabecera> # <sum1:ObligadoEmision> # <sum1:NombreRazon>XYZ STORE SL</sum1:NombreRazon> # <sum1:NIF>B99999999</sum1:NIF> # </sum1:ObligadoEmision> # <sum1:RemisionRequerimiento> # <sum1:RefRequerimiento>3333333333</sum1:RefRequerimiento> # <sum1:FinRequerimiento>S</sum1:FinRequerimiento> # </sum1:RemisionRequerimiento> # </sum:Cabecera> # <sum:RegistroFactura> # <sum1:RegistroAlta Id="001-2020003408"> # <sum1:IDVersion>1.0</sum1:IDVersion> # <sum1:IDFactura> # <sum1:IDEmisorFactura>89890001K</sum1:IDEmisorFactura> # <sum1:NumSerieFactura>12345678-G66</sum1:NumSerieFactura> # <sum1:FechaExpedicionFactura>03-02-2025</sum1:FechaExpedicionFactura> # </sum1:IDFactura> # <sum1:NombreRazonEmisor>certificado uno telematicas</sum1:NombreRazonEmisor> # <sum1:Subsanacion>N</sum1:Subsanacion> # <sum1:RechazoPrevio>N</sum1:RechazoPrevio> # <sum1:TipoFactura>R3</sum1:TipoFactura> # <sum1:TipoRectificativa>I</sum1:TipoRectificativa> # <sum1:FacturasRectificadas> # <sum1:IDFacturaRectificada> # <sum1:IDEmisorFactura>89890001K</sum1:IDEmisorFactura> # <sum1:NumSerieFactura>12345600-G66</sum1:NumSerieFactura> # <sum1:FechaExpedicionFactura>01-04-2024</sum1:FechaExpedicionFactura> # </sum1:IDFacturaRectificada> # </sum1:FacturasRectificadas> # <sum1:FechaOperacion>03-02-2025</sum1:FechaOperacion> # <sum1:DescripcionOperacion>fecha entrega</sum1:DescripcionOperacion> # <sum1:Destinatarios> # <sum1:IDDestinatario> # <sum1:NombreRazon>certificado dos telematicas</sum1:NombreRazon> # <sum1:NIF>89890002E</sum1:NIF> # </sum1:IDDestinatario> # </sum1:Destinatarios> # <sum1:Desglose> # <sum1:DetalleDesglose> # <sum1:ClaveRegimen>01</sum1:ClaveRegimen> # <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion> # <sum1:TipoImpositivo>4</sum1:TipoImpositivo> # <sum1:BaseImponibleOimporteNoSujeto>10</sum1:BaseImponibleOimporteNoSujeto> # <sum1:CuotaRepercutida>0.4</sum1:CuotaRepercutida> # </sum1:DetalleDesglose> # <sum1:DetalleDesglose> # <sum1:ClaveRegimen>01</sum1:ClaveRegimen> # <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion> # <sum1:TipoImpositivo>21</sum1:TipoImpositivo> # <sum1:BaseImponibleOimporteNoSujeto>100</sum1:BaseImponibleOimporteNoSujeto> # <sum1:CuotaRepercutida>21</sum1:CuotaRepercutida> # </sum1:DetalleDesglose> # <sum1:DetalleDesglose> # <sum1:ClaveRegimen>05</sum1:ClaveRegimen> # <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion> # <sum1:TipoImpositivo>10</sum1:TipoImpositivo> # <sum1:BaseImponibleOimporteNoSujeto>100</sum1:BaseImponibleOimporteNoSujeto> # <sum1:CuotaRepercutida>10</sum1:CuotaRepercutida> # </sum1:DetalleDesglose> # </sum1:Desglose> # <sum1:CuotaTotal>41.4</sum1:CuotaTotal> # <sum1:ImporteTotal>241.4</sum1:ImporteTotal> # <sum1:Encadenamiento> # <sum1:RegistroAnterior> # <sum1:IDEmisorFactura>89890001K</sum1:IDEmisorFactura> # <sum1:NumSerieFactura>12345677-G33</sum1:NumSerieFactura> # <sum1:FechaExpedicionFactura>15-04-2024</sum1:FechaExpedicionFactura> # <sum1:Huella>C9AF4AF1EF5EBBA700350DE3EEF12C2D355C56AC56F13DB2A25E0031BD2B7ED5</sum1:Huella> # </sum1:RegistroAnterior> # </sum1:Encadenamiento> # <sum1:SistemaInformatico> # <sum1:NombreRazon>CERTIFICADO UNO TELEMATICAS</sum1:NombreRazon> # <sum1:NIF>89890001K</sum1:NIF> # <sum1:NombreSistemaInformatico>NombreSistemaInformatico</sum1:NombreSistemaInformatico> # <sum1:IdSistemaInformatico>77</sum1:IdSistemaInformatico> # <sum1:Version>1.0.03</sum1:Version> # <sum1:NumeroInstalacion>383</sum1:NumeroInstalacion> # <sum1:TipoUsoPosibleSoloVerifactu>S</sum1:TipoUsoPosibleSoloVerifactu> # <sum1:TipoUsoPosibleMultiOT>N</sum1:TipoUsoPosibleMultiOT> # <sum1:IndicadorMultiplesOT>N</sum1:IndicadorMultiplesOT> # </sum1:SistemaInformatico> # <sum1:FechaHoraHusoGenRegistro>2025-02-03T14:30:00+01:00</sum1:FechaHoraHusoGenRegistro> # <sum1:TipoHuella>01</sum1:TipoHuella> # <sum1:Huella>FF954378B64ED331A9B2366AD317D86E9DEC1716B12DD0ACCB172A6DC4C105AA</sum1:Huella> # </sum1:RegistroAlta> # </sum:RegistroFactura> # </sum:RegFactuSistemaFacturacion> # </soapenv:Body> # </soapenv:Envelope> set registroAlta_id "001-2020003408" set xml [new_CkXml] CkXml_put_Tag $xml "soapenv:Envelope" CkXml_AddAttribute $xml "xmlns:soapenv" "http://schemas.xmlsoap.org/soap/envelope/" CkXml_AddAttribute $xml "xmlns:sum" "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd" CkXml_AddAttribute $xml "xmlns:sum1" "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd" CkXml_AddAttribute $xml "xmlns:xd" "http://www.w3.org/2000/09/xmldsig#" CkXml_UpdateChildContent $xml "soapenv:Header" "" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:Cabecera|sum1:ObligadoEmision|sum1:NombreRazon" "XYZ STORE SL" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:Cabecera|sum1:ObligadoEmision|sum1:NIF" "B99999999" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:Cabecera|sum1:RemisionRequerimiento|sum1:RefRequerimiento" "3333333333" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:Cabecera|sum1:RemisionRequerimiento|sum1:FinRequerimiento" "S" # This Id is URI in the XML digital signature Reference. CkXml_UpdateAttrAt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta" 1 "Id" $registroAlta_id CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:IDVersion" "1.0" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:IDFactura|sum1:IDEmisorFactura" "89890001K" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:IDFactura|sum1:NumSerieFactura" "12345678-G66" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:IDFactura|sum1:FechaExpedicionFactura" "03-02-2025" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:NombreRazonEmisor" "certificado uno telematicas" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Subsanacion" "N" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:RechazoPrevio" "N" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:TipoFactura" "R3" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:TipoRectificativa" "I" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:FacturasRectificadas|sum1:IDFacturaRectificada|sum1:IDEmisorFactura" "89890001K" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:FacturasRectificadas|sum1:IDFacturaRectificada|sum1:NumSerieFactura" "12345600-G66" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:FacturasRectificadas|sum1:IDFacturaRectificada|sum1:FechaExpedicionFactura" "01-04-2024" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:FechaOperacion" "03-02-2025" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:DescripcionOperacion" "fecha entrega" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Destinatarios|sum1:IDDestinatario|sum1:NombreRazon" "certificado dos telematicas" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Destinatarios|sum1:IDDestinatario|sum1:NIF" "89890002E" set i 0 CkXml_put_I $xml $i CkXml_UpdateChildContentInt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:ClaveRegimen" 01 CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:CalificacionOperacion" "S1" CkXml_UpdateChildContentInt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:TipoImpositivo" 4 CkXml_UpdateChildContentInt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:BaseImponibleOimporteNoSujeto" 10 CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:CuotaRepercutida" "0.4" set i [expr $i + 1] CkXml_put_I $xml $i CkXml_UpdateChildContentInt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:ClaveRegimen" 01 CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:CalificacionOperacion" "S1" CkXml_UpdateChildContentInt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:TipoImpositivo" 21 CkXml_UpdateChildContentInt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:BaseImponibleOimporteNoSujeto" 100 CkXml_UpdateChildContentInt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:CuotaRepercutida" 21 set i [expr $i + 1] CkXml_put_I $xml $i CkXml_UpdateChildContentInt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:ClaveRegimen" 05 CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:CalificacionOperacion" "S1" CkXml_UpdateChildContentInt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:TipoImpositivo" 10 CkXml_UpdateChildContentInt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:BaseImponibleOimporteNoSujeto" 100 CkXml_UpdateChildContentInt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Desglose|sum1:DetalleDesglose[i]|sum1:CuotaRepercutida" 10 CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:CuotaTotal" "41.4" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:ImporteTotal" "241.4" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Encadenamiento|sum1:RegistroAnterior|sum1:IDEmisorFactura" "89890001K" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Encadenamiento|sum1:RegistroAnterior|sum1:NumSerieFactura" "12345677-G33" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Encadenamiento|sum1:RegistroAnterior|sum1:FechaExpedicionFactura" "15-04-2024" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Encadenamiento|sum1:RegistroAnterior|sum1:Huella" "C9AF4AF1EF5EBBA700350DE3EEF12C2D355C56AC56F13DB2A25E0031BD2B7ED5" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:SistemaInformatico|sum1:NombreRazon" "CERTIFICADO UNO TELEMATICAS" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:SistemaInformatico|sum1:NIF" "89890001K" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:SistemaInformatico|sum1:NombreSistemaInformatico" "NombreSistemaInformatico" CkXml_UpdateChildContentInt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:SistemaInformatico|sum1:IdSistemaInformatico" 77 CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:SistemaInformatico|sum1:Version" "1.0.03" CkXml_UpdateChildContentInt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:SistemaInformatico|sum1:NumeroInstalacion" 383 CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:SistemaInformatico|sum1:TipoUsoPosibleSoloVerifactu" "S" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:SistemaInformatico|sum1:TipoUsoPosibleMultiOT" "N" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:SistemaInformatico|sum1:IndicadorMultiplesOT" "N" CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:FechaHoraHusoGenRegistro" "2025-02-03T14:30:00+01:00" CkXml_UpdateChildContentInt $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:TipoHuella" 01 CkXml_UpdateChildContent $xml "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta|sum1:Huella" "FF954378B64ED331A9B2366AD317D86E9DEC1716B12DD0ACCB172A6DC4C105AA" # Generate an ID such as "xmldsig-90637596-e368-4bd0-bcf8-d9a7be617d9a" set sbSigId [new_CkStringBuilder] CkStringBuilder_Append $sbSigId "xmldsig-" CkStringBuilder_AppendUuid $sbSigId 1 # Generate an ID such as "xmldsig-90637596-e368-4bd0-bcf8-d9a7be617d9a-sigvalue" set sbSigValueId [new_CkStringBuilder] CkStringBuilder_AppendSb $sbSigValueId $sbSigId CkStringBuilder_Append $sbSigValueId "-sigvalue" # Generate an ID such as "xmldsig-90637596-e368-4bd0-bcf8-d9a7be617d9a-signedprops" set sbSignedPropsId [new_CkStringBuilder] CkStringBuilder_AppendSb $sbSignedPropsId $sbSigId CkStringBuilder_Append $sbSignedPropsId "-signedprops" # Generate an ID such as "xmldsig-90637596-e368-4bd0-bcf8-d9a7be617d9a-ref0" set sbObjectRefId [new_CkStringBuilder] CkStringBuilder_AppendSb $sbObjectRefId $sbSigId CkStringBuilder_Append $sbObjectRefId "-ref0" set gen [new_CkXmlDSigGen] CkXmlDSigGen_put_SigLocation $gen "soapenv:Envelope|soapenv:Body|sum:RegFactuSistemaFacturacion|sum:RegistroFactura|sum1:RegistroAlta" CkXmlDSigGen_put_SigLocationMod $gen 0 CkXmlDSigGen_put_SigId $gen [CkStringBuilder_getAsString $sbSigId] CkXmlDSigGen_put_SigNamespacePrefix $gen "ds" CkXmlDSigGen_put_SigNamespaceUri $gen "http://www.w3.org/2000/09/xmldsig#" CkXmlDSigGen_put_SigValueId $gen [CkStringBuilder_getAsString $sbSigValueId] CkXmlDSigGen_put_SignedInfoCanonAlg $gen "C14N" CkXmlDSigGen_put_SignedInfoDigestMethod $gen "sha256" # Create an Object to be added to the Signature. set object1 [new_CkXml] CkXml_put_Tag $object1 "xades:QualifyingProperties" CkXml_AddAttribute $object1 "xmlns:xades" "http://uri.etsi.org/01903/v1.3.2#" CkXml_AddAttribute $object1 "xmlns:xades141" "http://uri.etsi.org/01903/v1.4.1#" # "#xmldsig-90637596-e368-4bd0-bcf8-d9a7be617d9a" CkStringBuilder_Prepend $sbSigId "#" CkXml_AddAttribute $object1 "Target" [CkStringBuilder_getAsString $sbSigId] CkXml_UpdateAttrAt $object1 "xades:SignedProperties" 1 "Id" [CkStringBuilder_getAsString $sbSignedPropsId] CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningTime" "TO BE GENERATED BY CHILKAT" CkXml_UpdateAttrAt $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:CertDigest|ds:DigestMethod" 1 "Algorithm" "http://www.w3.org/2000/09/xmldsig#sha1" CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:CertDigest|ds:DigestValue" "TO BE GENERATED BY CHILKAT" CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:IssuerSerial|ds:X509IssuerName" "TO BE GENERATED BY CHILKAT" CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert|xades:IssuerSerial|ds:X509SerialNumber" "TO BE GENERATED BY CHILKAT" CkXml_UpdateAttrAt $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert[1]|xades:CertDigest|ds:DigestMethod" 1 "Algorithm" "http://www.w3.org/2000/09/xmldsig#sha1" CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert[1]|xades:CertDigest|ds:DigestValue" "TO BE GENERATED BY CHILKAT" CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert[1]|xades:IssuerSerial|ds:X509IssuerName" "TO BE GENERATED BY CHILKAT" CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert[1]|xades:IssuerSerial|ds:X509SerialNumber" "TO BE GENERATED BY CHILKAT" CkXml_UpdateAttrAt $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert[2]|xades:CertDigest|ds:DigestMethod" 1 "Algorithm" "http://www.w3.org/2000/09/xmldsig#sha1" CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert[2]|xades:CertDigest|ds:DigestValue" "TO BE GENERATED BY CHILKAT" CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert[2]|xades:IssuerSerial|ds:X509IssuerName" "TO BE GENERATED BY CHILKAT" CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SigningCertificate|xades:Cert[2]|xades:IssuerSerial|ds:X509SerialNumber" "TO BE GENERATED BY CHILKAT" CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SignaturePolicyIdentifier|xades:SignaturePolicyId|xades:SigPolicyId|xades:Identifier" "urn:oid:2.16.724.1.3.1.1.2.1.9" CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SignaturePolicyIdentifier|xades:SignaturePolicyId|xades:SigPolicyId|xades:Description" "" CkXml_UpdateAttrAt $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SignaturePolicyIdentifier|xades:SignaturePolicyId|xades:SigPolicyHash|ds:DigestMethod" 1 "Algorithm" "http://www.w3.org/2000/09/xmldsig#sha1" CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SignaturePolicyIdentifier|xades:SignaturePolicyId|xades:SigPolicyHash|ds:DigestValue" "G7roucf600+f03r/o0bAOQ6WAs0=" CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedSignatureProperties|xades:SignaturePolicyIdentifier|xades:SignaturePolicyId|xades:SigPolicyQualifiers|xades:SigPolicyQualifier|xades:SPURI" "https://sede.administracion.gob.es/politica_de_firma_anexo_1.pdf" CkStringBuilder_Prepend $sbObjectRefId "#" CkXml_UpdateAttrAt $object1 "xades:SignedProperties|xades:SignedDataObjectProperties|xades:DataObjectFormat" 1 "ObjectReference" [CkStringBuilder_getAsString $sbObjectRefId] CkXml_UpdateChildContent $object1 "xades:SignedProperties|xades:SignedDataObjectProperties|xades:DataObjectFormat|xades:MimeType" "text/xml" CkXmlDSigGen_AddObject $gen "" [CkXml_getXml $object1] "" "" # -------- Reference 1 -------- # The URI for this Reference is the registroAlta_id CkXmlDSigGen_AddSameDocRef $gen $registroAlta_id "sha256" "" "" "" # Remove the "#" CkStringBuilder_RemoveCharsAt $sbObjectRefId 0 1 CkXmlDSigGen_SetRefIdAttr $gen $registroAlta_id [CkStringBuilder_getAsString $sbObjectRefId] # -------- Reference 2 -------- CkXmlDSigGen_AddObjectRef $gen [CkStringBuilder_getAsString $sbSignedPropsId] "sha256" "C14N" "" "http://uri.etsi.org/01903#SignedProperties" # Provide a certificate + private key. (PFX password is test123) set cert [new_CkCert] set success [CkCert_LoadPfxFile $cert "qa_data/pfx/cert_test123.pfx" "test123"] if {$success == 0} then { puts [CkCert_lastErrorText $cert] delete_CkXml $xml delete_CkStringBuilder $sbSigId delete_CkStringBuilder $sbSigValueId delete_CkStringBuilder $sbSignedPropsId delete_CkStringBuilder $sbObjectRefId delete_CkXmlDSigGen $gen delete_CkXml $object1 delete_CkCert $cert exit } CkXmlDSigGen_SetX509Cert $gen $cert 1 CkXmlDSigGen_put_KeyInfoType $gen "X509Data+KeyValue" CkXmlDSigGen_put_X509Type $gen "Certificate" # Load XML to be signed... set sbXml [new_CkStringBuilder] CkXml_GetXmlSb $xml $sbXml CkXmlDSigGen_put_Behaviors $gen "IndentedSignature,Base64Cr13Entity" # Sign the XML... set success [CkXmlDSigGen_CreateXmlDSigSb $gen $sbXml] if {$success == 0} then { puts [CkXmlDSigGen_lastErrorText $gen] delete_CkXml $xml delete_CkStringBuilder $sbSigId delete_CkStringBuilder $sbSigValueId delete_CkStringBuilder $sbSignedPropsId delete_CkStringBuilder $sbObjectRefId delete_CkXmlDSigGen $gen delete_CkXml $object1 delete_CkCert $cert delete_CkStringBuilder $sbXml exit } # ----------------------------------------------- # Save the signed XML to a file. set success [CkStringBuilder_WriteFile $sbXml "c:/temp/qa_output/signedSoapXml1.xml" "utf-8" 0] puts [CkStringBuilder_getAsString $sbXml] # ---------------------------------------- # Verify the signatures we just produced... set verifier [new_CkXmlDSig] set success [CkXmlDSig_LoadSignatureSb $verifier $sbXml] if {$success == 0} then { puts [CkXmlDSig_lastErrorText $verifier] delete_CkXml $xml delete_CkStringBuilder $sbSigId delete_CkStringBuilder $sbSigValueId delete_CkStringBuilder $sbSignedPropsId delete_CkStringBuilder $sbObjectRefId delete_CkXmlDSigGen $gen delete_CkXml $object1 delete_CkCert $cert delete_CkStringBuilder $sbXml delete_CkXmlDSig $verifier exit } set numSigs [CkXmlDSig_get_NumSignatures $verifier] set verifyIdx 0 while {$verifyIdx < $numSigs} { CkXmlDSig_put_Selector $verifier $verifyIdx set verified [CkXmlDSig_VerifySignature $verifier 1] if {$verified != 1} then { puts [CkXmlDSig_lastErrorText $verifier] delete_CkXml $xml delete_CkStringBuilder $sbSigId delete_CkStringBuilder $sbSigValueId delete_CkStringBuilder $sbSignedPropsId delete_CkStringBuilder $sbObjectRefId delete_CkXmlDSigGen $gen delete_CkXml $object1 delete_CkCert $cert delete_CkStringBuilder $sbXml delete_CkXmlDSig $verifier exit } set verifyIdx [expr $verifyIdx + 1] } puts "All signatures were successfully verified." delete_CkXml $xml delete_CkStringBuilder $sbSigId delete_CkStringBuilder $sbSigValueId delete_CkStringBuilder $sbSignedPropsId delete_CkStringBuilder $sbObjectRefId delete_CkXmlDSigGen $gen delete_CkXml $object1 delete_CkCert $cert delete_CkStringBuilder $sbXml delete_CkXmlDSig $verifier |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.