![]() |
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
(PureBasic) Create PEM-encoded PKCS#7 Detached SignatureSee more Digital Signatures ExamplesDemonstrates how to create a PKCS7 PEM-encoded object containing a detached signature.
IncludeFile "CkCert.pb" IncludeFile "CkStringBuilder.pb" IncludeFile "CkCrypt2.pb" Procedure ChilkatExample() ; This example requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. cert.i = CkCert::ckCreate() If cert.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; Load the cert and private key. success.i = CkCert::ckLoadPfxFile(cert,"qa_data/pfx/myCertAndKey.p12","password") If success <> 1 Debug CkCert::ckLastErrorText(cert) CkCert::ckDispose(cert) ProcedureReturn EndIf crypt.i = CkCrypt2::ckCreate() If crypt.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkCrypt2::ckSetSigningCert(crypt,cert) If success <> 1 Debug CkCrypt2::ckLastErrorText(crypt) CkCert::ckDispose(cert) CkCrypt2::ckDispose(crypt) ProcedureReturn EndIf ; Use SHA-256 CkCrypt2::setCkHashAlgorithm(crypt, "sha256") ; Hash the utf-8 byte representation of the string CkCrypt2::setCkCharset(crypt, "utf-8") ; Return the result in base64 CkCrypt2::setCkEncodingMode(crypt, "base64Mime") ; Sign some text to create a detached signature (i.e. a signature that does not include the signed data) textToSign.s = "This is the text to be hashed and signed." sigBase64.s = CkCrypt2::ckSignStringENC(crypt,textToSign) If CkCrypt2::ckLastMethodSuccess(crypt) <> 1 Debug CkCrypt2::ckLastErrorText(crypt) CkCert::ckDispose(cert) CkCrypt2::ckDispose(crypt) ProcedureReturn EndIf Debug sigBase64 ; The result: ; MIIWbgYJKoZIhvcNAQcCoIIWXzCCFlsCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGg ; ghMXMIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQx ; ... ; ... ; If we want it in PEM format with just LF line-endings: sb.i = CkStringBuilder::ckCreate() If sb.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; Just LF line endings, not CRLF. crlf.i = 0 CkStringBuilder::ckAppendLine(sb,"-----BEGIN PKCS7-----",crlf) CkStringBuilder::ckAppend(sb,sigBase64) CkStringBuilder::ckAppendLine(sb,"-----END PKCS7-----",crlf) CkStringBuilder::ckToLF(sb) ; Save to a file. CkStringBuilder::ckWriteFile(sb,"c:/temp/qa_output/sig.pem","utf-8",0) ; Examine.. Debug CkStringBuilder::ckGetAsString(sb) ; Result is: ; -----BEGIN PKCS7----- ; MIIWbgYJKoZIhvcNAQcCoIIWXzCCFlsCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGg ; ghMXMIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQx ; DjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUG ; A1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMw ; MDkyMjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3Rh ; bGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBS ; b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTuf ; ClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlN ; AJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45Rnij ; MCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9 ; ... ; ... ; -----END PKCS7----- CkCert::ckDispose(cert) CkCrypt2::ckDispose(crypt) CkStringBuilder::ckDispose(sb) ProcedureReturn EndProcedure |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.