Sample code for 30+ languages & platforms
Tcl

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 Tcl Downloads

Tcl

load ./chilkat.dll

set success 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

set sb [new_CkStringBuilder]

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

# Load the encrypted MIME into the MIME object.
set mime [new_CkMime]

CkMime_LoadMimeSb $mime $sb

# Provide the required cert + private key from a PFX (.pfx/.p12) file.
set success [CkMime_AddPfxSourceFile $mime "qa_data/rsaes-oaep/cert_plus_privatekey.pfx" "PFX_PASSWORD"]
if {$success != 1} then {
    puts [CkMime_lastErrorText $mime]
    delete_CkStringBuilder $sb
    delete_CkMime $mime
    exit
}

# Decrypt.
set success [CkMime_Decrypt $mime]
if {$success != 1} then {
    puts [CkMime_lastErrorText $mime]
    delete_CkStringBuilder $sb
    delete_CkMime $mime
    exit
}

# Examine the decrypted MIME.
puts [CkMime_getMime $mime]
puts "Decrypt test 1 succeeded."

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

set cert [new_CkCert]

set success [CkCert_LoadFromFile $cert "qa_data/rsaes-oaep/cert.pem"]

set privKey [new_CkPrivateKey]

set success [CkPrivateKey_LoadPemFile $privKey "qa_data/rsaes-oaep/privatekey.pem"]

# Decrypt using the cert + private key
set mime2 [new_CkMime]

CkMime_LoadMimeSb $mime2 $sb

set success [CkMime_Decrypt2 $mime2 $cert $privKey]
if {$success != 1} then {
    puts [CkMime_lastErrorText $mime2]
    delete_CkStringBuilder $sb
    delete_CkMime $mime
    delete_CkCert $cert
    delete_CkPrivateKey $privKey
    delete_CkMime $mime2
    exit
}

# Examine the decrypted MIME.
puts [CkMime_getMime $mime2]
puts "Decrypt test 2 succeeded."

delete_CkStringBuilder $sb
delete_CkMime $mime
delete_CkCert $cert
delete_CkPrivateKey $privKey
delete_CkMime $mime2