Sample code for 30+ languages & platforms
Visual FoxPro

Decrypt MIME using RSAES-OAEP with SHA256 and AES-128 content encryption

See more MIME Examples

Demonstrates how to decrypt MIME what was encrypted with RSAES-OAEP with SHA256 and AES-128 content encryption.

In actuality, we don't really need to know in advance the various algorithms used to encrypt the MIME. When decrypting, the information about the algorithms required are embedded in the PCKS7 message itself, and this tells a decryptor what it should use.

Note: This example requires Chilkat v9.5.0.67 or greater.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loSb
LOCAL lnBCrlf
LOCAL loMime
LOCAL loCert
LOCAL loPrivKey
LOCAL loMime2

lnSuccess = 0

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

* We begin with this encrypted MIME:

* Content-Type: application/x-pkcs7-mime; name="smime.p7m"; smime-type="enveloped-data"
* someHeader1: Some value 1
* someHeader2: Some value 2
* Content-Disposition: attachment; filename="smime.p7m"
* Content-Transfer-Encoding: base64
* 
* MIIDvAYJKoZIhvcNAQcDoIIDrTCCA6kCAQAxggGgMIIBnAIBADB1MGgxCzAJBgNVBAYTAlVTMQsw
* CQYDVQQIDAJJTDEQMA4GA1UEBwwHV2hlYXRvbjEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ
* dHkgTHRkMRcwFQYDVQQDDA5DaGlsa2F0V2lkZ2V0cwIJAMRwugDmvniwMBwGCSqGSIb3DQEBBzAP
* oA0wCwYJYIZIAWUDBAIBBIIBAFaUL1ga1bOrdqYKcMm+FHUacBvzfBxk0fnPA0AMBdN8BvTWT3CN
* YuqBhjOGyq0FpYD9pVZybUuFMCVsVyIW2O62HnsOK58YaPEUUcdH2sI+yjqX9UAn0P0nVDSsVdeK
* W8x9kMfZg+3UP+y1q+lu7VRJO3f2C9oLQpTkc4VW4n7UOcUI0waykLCjCTL8lFDb7/J3GeuMKyhH
* 5riNz50kpbzqn7m2Ks9yA+QmcTdXclclGFr2vwEUFzSdT2pxh/vaUrogCxkYWbQ2eV7vZg6O4kV0
* aqHBqySkPTAzHKiHH8K8GVdlTuJ8350CpICa4T8w7/Ht5I7dyOPPKy4C+rVtrvcwggH+BgkqhkiG
* 9w0BBwEwHQYJYIZIAWUDBAECBBDTC2WNBN+z2I47/4Feu9YqgIIB0MZvl3nC/q/Wzil6HtfQTr12
* Q5moHY+ORzAa1P9XvX2ZUFhW530mV395mQw/A4o4ekmX9eRPEZquYzZPLT8hNeZIuNdhpcSQUmad
* rKnKkR0wKJ3jJ3LhOIohVBQSYs8kVDZKq6lJBIznlsurFelZoNEhyRschhteDZx5rb7fCe8c2+/O
* DHxaqaHCAzm/Bd7kcg6FFfuTZy3tu0PgP5IsXN4OFA3kkvwjAs4XsVS8jdIcmDNBkYieE8WmJOIm
* Mz7mh/CHWLgWfGKa0Dkb9RcbFgLwYNT3GzuXFw9XPbKkEZjEAtJajWbN6P0WQl96YYd9qZxUpGxZ
* zjTHEYzViUdUXolfpLufttrRXyxN1RFWhNFMFbv66xYqklMSgpdM/Mbk+EuvX6eXayDPvDBpfYMw
* NoRAzv1Ony2c0ez9rBemJICicxAzpuvHbRxdjYs63Dnv+TYgpBK12AxWWpPIjXvw0WQKgTC3Tg8s
* EnuGhpENqso/clJBEBSn4+2WhYtYbdI5sVme67lvqQl1Xxy3r18SWaQbyDOwgYi1E+54lMDOxMy0
* y0FPHk5pP45DnXWj+XORPp5LhuZr5mf62YOXSSUwR5P0cXy4Rc+pN5lhRQPCf5z2

loSb = CreateObject('Chilkat.StringBuilder')
lnBCrlf = 1
loSb.AppendLine('Content-Type: application/x-pkcs7-mime; name="smime.p7m"; smime-type="enveloped-data"',lnBCrlf)
loSb.AppendLine("someHeader1: Some value 1",lnBCrlf)
loSb.AppendLine("someHeader2: Some value 2",lnBCrlf)
loSb.AppendLine('Content-Disposition: attachment; filename="smime.p7m"',lnBCrlf)
loSb.AppendLine("Content-Transfer-Encoding: base64",lnBCrlf)
loSb.AppendLine("",lnBCrlf)
loSb.AppendLine("MIIDvAYJKoZIhvcNAQcDoIIDrTCCA6kCAQAxggGgMIIBnAIBADB1MGgxCzAJBgNVBAYTAlVTMQsw",lnBCrlf)
loSb.AppendLine("CQYDVQQIDAJJTDEQMA4GA1UEBwwHV2hlYXRvbjEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ",lnBCrlf)
loSb.AppendLine("dHkgTHRkMRcwFQYDVQQDDA5DaGlsa2F0V2lkZ2V0cwIJAMRwugDmvniwMBwGCSqGSIb3DQEBBzAP",lnBCrlf)
loSb.AppendLine("oA0wCwYJYIZIAWUDBAIBBIIBAFaUL1ga1bOrdqYKcMm+FHUacBvzfBxk0fnPA0AMBdN8BvTWT3CN",lnBCrlf)
loSb.AppendLine("YuqBhjOGyq0FpYD9pVZybUuFMCVsVyIW2O62HnsOK58YaPEUUcdH2sI+yjqX9UAn0P0nVDSsVdeK",lnBCrlf)
loSb.AppendLine("W8x9kMfZg+3UP+y1q+lu7VRJO3f2C9oLQpTkc4VW4n7UOcUI0waykLCjCTL8lFDb7/J3GeuMKyhH",lnBCrlf)
loSb.AppendLine("5riNz50kpbzqn7m2Ks9yA+QmcTdXclclGFr2vwEUFzSdT2pxh/vaUrogCxkYWbQ2eV7vZg6O4kV0",lnBCrlf)
loSb.AppendLine("aqHBqySkPTAzHKiHH8K8GVdlTuJ8350CpICa4T8w7/Ht5I7dyOPPKy4C+rVtrvcwggH+BgkqhkiG",lnBCrlf)
loSb.AppendLine("9w0BBwEwHQYJYIZIAWUDBAECBBDTC2WNBN+z2I47/4Feu9YqgIIB0MZvl3nC/q/Wzil6HtfQTr12",lnBCrlf)
loSb.AppendLine("Q5moHY+ORzAa1P9XvX2ZUFhW530mV395mQw/A4o4ekmX9eRPEZquYzZPLT8hNeZIuNdhpcSQUmad",lnBCrlf)
loSb.AppendLine("rKnKkR0wKJ3jJ3LhOIohVBQSYs8kVDZKq6lJBIznlsurFelZoNEhyRschhteDZx5rb7fCe8c2+/O",lnBCrlf)
loSb.AppendLine("DHxaqaHCAzm/Bd7kcg6FFfuTZy3tu0PgP5IsXN4OFA3kkvwjAs4XsVS8jdIcmDNBkYieE8WmJOIm",lnBCrlf)
loSb.AppendLine("Mz7mh/CHWLgWfGKa0Dkb9RcbFgLwYNT3GzuXFw9XPbKkEZjEAtJajWbN6P0WQl96YYd9qZxUpGxZ",lnBCrlf)
loSb.AppendLine("zjTHEYzViUdUXolfpLufttrRXyxN1RFWhNFMFbv66xYqklMSgpdM/Mbk+EuvX6eXayDPvDBpfYMw",lnBCrlf)
loSb.AppendLine("NoRAzv1Ony2c0ez9rBemJICicxAzpuvHbRxdjYs63Dnv+TYgpBK12AxWWpPIjXvw0WQKgTC3Tg8s",lnBCrlf)
loSb.AppendLine("EnuGhpENqso/clJBEBSn4+2WhYtYbdI5sVme67lvqQl1Xxy3r18SWaQbyDOwgYi1E+54lMDOxMy0",lnBCrlf)
loSb.AppendLine("y0FPHk5pP45DnXWj+XORPp5LhuZr5mf62YOXSSUwR5P0cXy4Rc+pN5lhRQPCf5z2",lnBCrlf)

* Load the encrypted MIME into the MIME object.
loMime = CreateObject('Chilkat.Mime')
loMime.LoadMimeSb(loSb)

* Provide the required cert + private key from a PFX (.pfx/.p12) file.
lnSuccess = loMime.AddPfxSourceFile("qa_data/rsaes-oaep/cert_plus_privatekey.pfx","PFX_PASSWORD")
IF (lnSuccess <> 1) THEN
    ? loMime.LastErrorText
    RELEASE loSb
    RELEASE loMime
    CANCEL
ENDIF

* Decrypt.
lnSuccess = loMime.Decrypt()
IF (lnSuccess <> 1) THEN
    ? loMime.LastErrorText
    RELEASE loSb
    RELEASE loMime
    CANCEL
ENDIF

* Examine the decrypted MIME.
? loMime.GetMime()
? "Decrypt test 1 succeeded."

* -----------------------------------------------------------
* Now let's decrypt another way..
* We have the same cert and private key in PEM files..

loCert = CreateObject('Chilkat.Cert')
lnSuccess = loCert.LoadFromFile("qa_data/rsaes-oaep/cert.pem")

loPrivKey = CreateObject('Chilkat.PrivateKey')
lnSuccess = loPrivKey.LoadPemFile("qa_data/rsaes-oaep/privatekey.pem")

* Decrypt using the cert + private key
loMime2 = CreateObject('Chilkat.Mime')
loMime2.LoadMimeSb(loSb)

lnSuccess = loMime2.Decrypt2(loCert,loPrivKey)
IF (lnSuccess <> 1) THEN
    ? loMime2.LastErrorText
    RELEASE loSb
    RELEASE loMime
    RELEASE loCert
    RELEASE loPrivKey
    RELEASE loMime2
    CANCEL
ENDIF

* Examine the decrypted MIME.
? loMime2.GetMime()
? "Decrypt test 2 succeeded."

RELEASE loSb
RELEASE loMime
RELEASE loCert
RELEASE loPrivKey
RELEASE loMime2