PureBasic
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
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