Sample code for 30+ languages & platforms
PureBasic

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