PureBasic
PureBasic
Create PEM-encoded PKCS#7 Detached Signature
See more Digital Signatures Examples
Demonstrates how to create a PKCS7 PEM-encoded object containing a detached signature.Chilkat PureBasic Downloads
IncludeFile "CkCert.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkCrypt2.pb"
Procedure ChilkatExample()
success.i = 0
; 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 = 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