Sample code for 30+ languages & platforms
Xbase++ Requires Chilkat v11.0.0+

Duplicate OpensSSL Command that Decrypts Binary DER

See more OpenSSL Examples

This example duplicates the following:
openssl smime -decrypt -in INPUT_FILE -inform der -binary -out OUTPUT_FILE -recip PEM_CERT_AND_KEY -passin pass:PRIVKEY_PASSWORD

Note: Although "smime" is the OpenSSL command, we're not really dealing with S/MIME. The arguments "-inform der -binary" indicate that the input is simply the binary DER (i.e. the PKCS7 binary encrypted object). The output can be any type of file (whatever was encrypted).

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oCrypt
LOCAL oPem
LOCAL oPrivkey
LOCAL oCert

nSuccess := 0

//  This example requires the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

oCrypt := CreateObject("Chilkat.Crypt2")

oCrypt:CryptAlgorithm := "pki"

oPem := CreateObject("Chilkat.Pem")
nSuccess := oPem:LoadPemFile("qa_data/pem/myPem.pem", "password")
IF (nSuccess == 0)
    ? oPem:LastErrorText
    oCrypt:destroy()
    oPem:destroy()
    RETURN
ENDIF

oPrivkey := CreateObject("Chilkat.PrivateKey")
nSuccess := oPem:PrivateKeyAt(0, oPrivkey)
IF (nSuccess == 0)
    ? oPem:LastErrorText
    oCrypt:destroy()
    oPem:destroy()
    oPrivkey:destroy()
    RETURN
ENDIF

oCert := CreateObject("Chilkat.Cert")
nSuccess := oPem:CertAt(0, oCert)
IF (nSuccess == 0)
    ? oPem:LastErrorText
    oCrypt:destroy()
    oPem:destroy()
    oPrivkey:destroy()
    oCert:destroy()
    RETURN
ENDIF

nSuccess := oCrypt:SetDecryptCert2(oCert, oPrivkey)
IF (nSuccess == 0)
    ? oCrypt:LastErrorText
    oCrypt:destroy()
    oPem:destroy()
    oPrivkey:destroy()
    oCert:destroy()
    RETURN
ENDIF

nSuccess := oCrypt:CkDecryptFile("qa_data/infile.enc", "qa_output/outfile.dat")
IF (nSuccess == 0)
    ? oCrypt:LastErrorText
    oCrypt:destroy()
    oPem:destroy()
    oPrivkey:destroy()
    oCert:destroy()
    RETURN
ENDIF

? "Success."

oCrypt:destroy()
oPem:destroy()
oPrivkey:destroy()
oCert:destroy()