Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) Sign Mexico PedimentoAdd a signature to a Mexico pedimento file.
Use ChilkatAx-win32.pkg Procedure Test Boolean iSuccess Boolean iBCRLF Handle hoSb String sMd5_base64 Variant vPrivKey Handle hoPrivKey Handle hoXml Handle hoAsn Handle hoRsa Variant vBdSig Handle hoBdSig Handle hoCert String sSerialHex Handle hoSbSerial Integer iNumReplaced String sTemp1 // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // This is the contents before signing: // 500|1|3621|4199800|400|| // 601|3621|4199800|400|IN|1||EKU9003173C9|EKU9003173C9FRNN09|1|| // 507|4199800|IM|2006-7888"> // 507|4199800|MS|2"> // 800|4199800|1"> // 801|M3621037.222|1|5|011| // This is the contents after signing // 500|1|3621|4199800|400|| // 601|3621|4199800|400|IN|1||EKU9003173C9|EKU9003173C9FRNN09|1|| // 507|4199800|IM|2006-7888"> // 507|4199800|MS|2"> // 800|4199800|1|fhP2Ker54D2+3+UZch23F0E72 .... 9qNSPIuAqpj524qLZbbA==|30001000000500003416| // 801|M3621037.222|1|5|011| // First create the text to be signed. Move True To iBCRLF Get Create (RefClass(cComChilkatStringBuilder)) To hoSb If (Not(IsComObjectCreated(hoSb))) Begin Send CreateComObject of hoSb End // Use CRLF line endings. Get ComAppendLine Of hoSb "500|1|3621|4199800|400||" iBCRLF To iSuccess Get ComAppendLine Of hoSb "601|3621|4199800|400|IN|1||EKU9003173C9|EKU9003173C9FRNN09|1||" iBCRLF To iSuccess Get ComAppendLine Of hoSb "507|4199800|IM|2006-7888">" iBCRLF To iSuccess Get ComAppendLine Of hoSb "507|4199800|MS|2">" iBCRLF To iSuccess // Generate the MD5 hash of what we have so far.. Get ComGetHash Of hoSb "md5" "base64" "utf-8" To sMd5_base64 Showln "MD5 hash = " sMd5_base64 // Complete the original file. // After signing, we'll update the BASE64_SIGNATURE and CERT_SERIAL Get ComAppendLine Of hoSb "800|4199800|1|BASE64_SIGNATURE|CERT_SERIAL|" iBCRLF To iSuccess Get ComAppendLine Of hoSb "801|M3621037.222|1|5|011|" iBCRLF To iSuccess // We're going to sign the MD5 hash using the private key. Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKey If (Not(IsComObjectCreated(hoPrivKey))) Begin Send CreateComObject of hoPrivKey End Get ComLoadAnyFormatFile Of hoPrivKey "qa_data/certs/mexico_test/Certificados_de_Prueba/Certificados_Pruebas/Personas Morales/EKU9003173C9_20230517223532/CSD_EKU9003173C9_20230517223903/CSD_Sucursal_1_EKU9003173C9_20230517_223850.key" "12345678a" To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoPrivKey To sTemp1 Showln sTemp1 Procedure_Return End // Generate the ASN.1 to be signed. // <sequence> // <sequence> // <oid>1.2.840.113549.2.5</oid> // <null/> // </sequence> // <octets>SwxHfaJhG+N3pPqay6UzVA==</octets> // </sequence> Get Create (RefClass(cComChilkatXml)) To hoXml If (Not(IsComObjectCreated(hoXml))) Begin Send CreateComObject of hoXml End Set ComTag Of hoXml To "sequence" Send ComUpdateChildContent To hoXml "sequence|oid" "1.2.840.113549.2.5" Send ComUpdateChildContent To hoXml "sequence|null" "" Send ComUpdateChildContent To hoXml "octets" sMd5_base64 Get Create (RefClass(cComChilkatAsn)) To hoAsn If (Not(IsComObjectCreated(hoAsn))) Begin Send CreateComObject of hoAsn End Get ComGetXml Of hoXml To sTemp1 Get ComLoadAsnXml Of hoAsn sTemp1 To iSuccess Get ComGetEncodedDer Of hoAsn "base64" To sTemp1 Showln "ASN.1 = " sTemp1 // Sign with the private key. Get Create (RefClass(cComChilkatRsa)) To hoRsa If (Not(IsComObjectCreated(hoRsa))) Begin Send CreateComObject of hoRsa End Get pvComObject of hoPrivKey to vPrivKey Get ComImportPrivateKeyObj Of hoRsa vPrivKey To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoRsa To sTemp1 Showln sTemp1 Procedure_Return End // Create the opaque signature. Get Create (RefClass(cComChilkatBinData)) To hoBdSig If (Not(IsComObjectCreated(hoBdSig))) Begin Send CreateComObject of hoBdSig End Get ComGetEncodedDer Of hoAsn "base64" To sTemp1 Get ComAppendEncoded Of hoBdSig sTemp1 "base64" To iSuccess Get pvComObject of hoBdSig to vBdSig Get ComOpenSslSignBd Of hoRsa vBdSig To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoRsa To sTemp1 Showln sTemp1 Procedure_Return End // bd now contains the opaque signature, which embeds the ASN.1, which contains the MD5 hash. // We're going to add this line: // 800|4199800|1|BASE64_SIGNATURE|CERT_SERIAL_NUM| Get Create (RefClass(cComChilkatCert)) To hoCert If (Not(IsComObjectCreated(hoCert))) Begin Send CreateComObject of hoCert End Get ComLoadFromFile Of hoCert "qa_data/certs/mexico_test/Certificados_de_Prueba/Certificados_Pruebas/Personas Morales/EKU9003173C9_20230517223532/CSD_EKU9003173C9_20230517223903/CSD_Sucursal_1_EKU9003173C9_20230517_223850.cer" To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoCert To sTemp1 Showln sTemp1 Procedure_Return End Get ComSerialNumber Of hoCert To sSerialHex // The serial in hex form looks like this: 3330303031303030303030353030303033343136 // Decode to us-ascii. Get Create (RefClass(cComChilkatStringBuilder)) To hoSbSerial If (Not(IsComObjectCreated(hoSbSerial))) Begin Send CreateComObject of hoSbSerial End Get ComDecodeAndAppend Of hoSbSerial sSerialHex "hex" "us-ascii" To iSuccess Get ComGetAsString Of hoSbSerial To sTemp1 Showln "serial number in us-ascii: " sTemp1 Get ComGetAsString Of hoSbSerial To sTemp1 Get ComReplace Of hoSb "CERT_SERIAL" sTemp1 To iNumReplaced Get ComGetEncoded Of hoBdSig "base64" To sTemp1 Get ComReplace Of hoSb "BASE64_SIGNATURE" sTemp1 To iNumReplaced Showln "------------------------------------" Showln "Result:" Get ComGetAsString Of hoSb To sTemp1 Showln sTemp1 End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.