DataFlex
DataFlex
CoSign PKCS7/CMS Signed Data
See more Digital Signatures Examples
Demonstrates how to add a 2nd signature to a CMS SignedData. This is to add an additional signature, SignerInfo and certificate(s) to an existing CMS signed data.In this example, we cosign an existing pdf.p7s
Note: The CoSign method is added in Chilkat v9.5.0.89.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoCrypt
Variant vCert
Handle hoCert
Variant vBd
Handle hoBd
Variant vBd
2 Handle hoBd2
String sTemp1
Move False To iSuccess
// This example assumes 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
Get Create (RefClass(cComChilkatCert)) To hoCert
If (Not(IsComObjectCreated(hoCert))) Begin
Send CreateComObject of hoCert
End
// If loading from a smart card, set the smartcard PIN.
Set ComSmartCardPin Of hoCert To "0000"
// Load a certificate in some way, such as from a smart card.
// Chilkat provides other methods to load from a .pfx, .pem, or from the Windows certificate stores..
Get ComLoadFromSmartcard Of hoCert "" 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
If (iSuccess = False) Begin
Get ComLastErrorText Of hoCrypt To sTemp1
Showln sTemp1
Procedure_Return
End
// Load the file to be co-signed.
// NOTE: This is to cosign a PDF file contained within a CMS (PKCS7) message.
// (In other words, the PDF is contained within the CMS SignedData, rather than the other way around
// where a CMS signature is contained within a PDF. Use Chilkat's PDF class to sign a PDF, which is
// to embed a CMS signature within the PDF.)
Get Create (RefClass(cComChilkatBinData)) To hoBd
If (Not(IsComObjectCreated(hoBd))) Begin
Send CreateComObject of hoBd
End
Get ComLoadFile Of hoBd "qa_data/p7s/cosign/sample.pdf.p7s" To iSuccess
If (iSuccess = False) Begin
Showln "Failed to load pdf.p7s input file."
Procedure_Return
End
// bd2 will contain the co-signed result.
Get Create (RefClass(cComChilkatBinData)) To hoBd2
If (Not(IsComObjectCreated(hoBd2))) Begin
Send CreateComObject of hoBd2
End
Get pvComObject of hoBd to vBd
Get pvComObject of hoCert to vCert
Get pvComObject of hoBd2 to vBd2
Get ComCoSign Of hoCrypt vBd vCert vBd2 To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoCrypt To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComWriteFile Of hoBd "qa_output/cosigned.pdf.p7s" To iSuccess
If (iSuccess = False) Begin
Showln "Failed to save pdf.p7s output file."
Procedure_Return
End
Showln "Success!"
End_Procedure