Sample code for 30+ languages & platforms
PureBasic

Duplicate openssl smime -decrypt -in some_file.dat.enc -binary -inform DER -inkey private.key -out some_file.dat

See more OpenSSL Examples

Demonstrates how to decrypt binary DER that was encrypted using the following openssl command:
openssl smime -encrypt -binary -aes-256-cbc -in some_file.dat -out some_file.dat.enc -outform DER cert.crt

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkBinData.pb"
IncludeFile "CkCert.pb"
IncludeFile "CkPrivateKey.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.

    ; Duplicates the following openssl command:
    ; openssl smime -decrypt -in hello.txt.enc -binary -inform DER -inkey private.key -out hello.txt

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

    success = CkCert::ckLoadFromFile(cert,"qa_data/openssl/EE.cer")
    If success = 0
        Debug CkCert::ckLastErrorText(cert)
        CkCert::ckDispose(cert)
        ProcedureReturn
    EndIf

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

    success = CkBinData::ckLoadFile(bd,"qa_data/openssl/EE.key")
    ; Assuming success..

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

    success = CkPrivateKey::ckLoadAnyFormat(privKey,bd,"")
    If success = 0
        Debug CkPrivateKey::ckLastErrorText(privKey)
        CkCert::ckDispose(cert)
        CkBinData::ckDispose(bd)
        CkPrivateKey::ckDispose(privKey)
        ProcedureReturn
    EndIf

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

    success = CkCrypt2::ckSetDecryptCert2(crypt,cert,privKey)
    If success = 0
        Debug CkCrypt2::ckLastErrorText(crypt)
        CkCert::ckDispose(cert)
        CkBinData::ckDispose(bd)
        CkPrivateKey::ckDispose(privKey)
        CkCrypt2::ckDispose(crypt)
        ProcedureReturn
    EndIf

    CkCrypt2::setCkCryptAlgorithm(crypt, "PKI")
    success = CkCrypt2::ckCkDecryptFile(crypt,"qa_data/openssl/hello.txt.enc","qa_output/hello.txt")
    If success = 0
        Debug CkCrypt2::ckLastErrorText(crypt)
        CkCert::ckDispose(cert)
        CkBinData::ckDispose(bd)
        CkPrivateKey::ckDispose(privKey)
        CkCrypt2::ckDispose(crypt)
        ProcedureReturn
    EndIf

    Debug "Success."


    CkCert::ckDispose(cert)
    CkBinData::ckDispose(bd)
    CkPrivateKey::ckDispose(privKey)
    CkCrypt2::ckDispose(crypt)


    ProcedureReturn
EndProcedure