DataFlex
DataFlex
CMS Sign Hash
Demonstrates how to use the SignHashENC method to sign a pre-computed hash. This method creates a CMS signature (PKCS7 detached signature).This example requires Chilkat v9.5.0.90 or later.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoCrypt
String sBase64Hash
Variant vCert
Handle hoCert
String sBase64CmsSig
String sTemp1
Boolean bTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatCrypt2)) To hoCrypt
If (Not(IsComObjectCreated(hoCrypt))) Begin
Send CreateComObject of hoCrypt
End
// Create the hash to be signed...
Set ComHashAlgorithm Of hoCrypt To "sha256"
Set ComEncodingMode Of hoCrypt To "base64"
Set ComCharset Of hoCrypt To "utf-8"
// Create the SHA256 hash of a string using the utf-8 byte representation.
// Return the hash as base64.
Get ComHashStringENC Of hoCrypt "This is the string to be hashed" To sBase64Hash
// Load a certificate for signing.
Get Create (RefClass(cComChilkatCert)) To hoCert
If (Not(IsComObjectCreated(hoCert))) Begin
Send CreateComObject of hoCert
End
Get ComLoadPfxFile Of hoCert "qa_data/pfx/cert_test123.pfx" "test123" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoCert To sTemp1
Showln sTemp1
Procedure_Return
End
Get pvComObject of hoCert to vCert
Get ComSetSigningCert Of hoCrypt vCert To iSuccess
// Sign the hash to create a base64 CMS signature (which does not contain the original data).
// We can get the signature in a single line of base64 by specifying "base64", or
// we can get multi-line base64 by specifying "base64_mime".
Set ComEncodingMode Of hoCrypt To "base64_mime"
Get ComSignHashENC Of hoCrypt sBase64Hash "sha256" "base64" To sBase64CmsSig
Get ComLastMethodSuccess Of hoCrypt To bTemp1
If (bTemp1 = False) Begin
Get ComLastErrorText Of hoCrypt To sTemp1
Showln sTemp1
Procedure_Return
End
// Note: In the above call to SignHashENC, the encoding of the returned CMS signature is specified by the EncodingMode property.
// However, the encoding of the passed-in hash is indicated by the 3rd argument.
Showln "CMS Signature: " sBase64CmsSig
End_Procedure