Sample code for 30+ languages & platforms
PureBasic Requires Chilkat v10.1.2+

Create PKCS7 Signed File (.p7m)

See more Encryption Examples

Demonstrates how to sign a file to create a .p7m that contains both the file contents and the signature.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkCertStore.pb"
IncludeFile "CkCert.pb"
IncludeFile "CkJsonObject.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.

    crypt.i = CkCrypt2::ckCreate()
    If crypt.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    certStore.i = CkCertStore::ckCreate()
    If certStore.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ;  Load a PFX file into a certificate store object.
    success = CkCertStore::ckLoadPfxFile(certStore,"myPfx.pfx","pfxPassword")
    If success <> 1
        Debug CkCertStore::ckLastErrorText(certStore)
        CkCrypt2::ckDispose(crypt)
        CkCertStore::ckDispose(certStore)
        ProcedureReturn
    EndIf

    ;  Get the certificate by subject common name.
    ;  This should be the cert within the PFX that also
    ;  has a private key (also stored within the PFX).
    jsonCN.i = CkJsonObject::ckCreate()
    If jsonCN.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckUpdateString(jsonCN,"CN","myCert")
    cert.i = CkCert::ckCreate()
    If cert.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkCertStore::ckFindCert(certStore,jsonCN,cert)
    If success = 0
        Debug CkCertStore::ckLastErrorText(certStore)
        CkCrypt2::ckDispose(crypt)
        CkCertStore::ckDispose(certStore)
        CkJsonObject::ckDispose(jsonCN)
        CkCert::ckDispose(cert)
        ProcedureReturn
    EndIf

    ;  Tell the crypt object to use the certificate for signing:
    success = CkCrypt2::ckSetSigningCert(crypt,cert)

    ;  Sign a file, producing a .p7m as output.
    ;  The input file is unchanged, the test.p7m contains the 
    ;  contents of the input file and the signature.
    inFile.s = "test.txt"
    outFile.s = "testp7m"
    success = CkCrypt2::ckCreateP7M(crypt,inFile,outFile)
    If success <> 1
        Debug CkCrypt2::ckLastErrorText(crypt)
        CkCrypt2::ckDispose(crypt)
        CkCertStore::ckDispose(certStore)
        CkJsonObject::ckDispose(jsonCN)
        CkCert::ckDispose(cert)
        ProcedureReturn
    EndIf

    Debug "Success!"


    CkCrypt2::ckDispose(crypt)
    CkCertStore::ckDispose(certStore)
    CkJsonObject::ckDispose(jsonCN)
    CkCert::ckDispose(cert)


    ProcedureReturn
EndProcedure