Sample code for 30+ languages & platforms
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

DataFlex
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