Tcl
Tcl
S/MIME Decrypt using Certificate and Private Key in Apple Keychain
See more Apple Keychain Examples
Decrypts S/MIME using a certificate with private key found in the Apple Keychain.Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
set cert [new_CkCert]
# Load the certificate to be used for decryption by the Subject Common Name
# On MacOS and iOS, Chilkat will search the Keychain(s) for the matching certificate.
# Note: The private key must be present to decrypt.
set success [CkCert_LoadByCommonName $cert "My Cert"]
if {$success == 0} then {
puts [CkCert_lastErrorText $cert]
delete_CkCert $cert
exit
}
puts "Cert has private key: [CkCert_HasPrivateKey $cert]"
# Load the MIME to be decrypted.
# We encrypted using this example: S/MIME Encrypt using Certificate in Apple Keychain
set mime [new_CkMime]
set success [CkMime_LoadMimeFile $mime "./encrypted.mime"]
if {$success == 0} then {
puts [CkMime_lastErrorText $mime]
delete_CkCert $cert
delete_CkMime $mime
exit
}
puts [CkMime_getMime $mime]
puts "----"
# Here's the encrypted MIME:
# Subject: test
# SomeHeader: 123
# Content-Type: application/x-pkcs7-mime; name="smime.p7m"; smime-type="enveloped-data"
# Content-Disposition: attachment; filename="smime.p7m"
# Content-Transfer-Encoding: base64
#
# MIICSwYJKoZIhvcNAQcDoIICPDCCAjgCAQAxggGzMIIBrwIBADCBljCBgTELMAkGA1UEBhMCSVQx
# EDAOBgNVBAgMB0JlcmdhbW8xGTAXBgNVBAcMEFBvbnRlIFNhbiBQaWV0cm8xFzAVBgNVBAoMDkFj
# dGFsaXMgUy5wLkEuMSwwKgYDVQQDDCNBY3RhbGlzIENsaWVudCBBdXRoZW50aWNhdGlvbiBDQSBH
# MwIQPCWvkSv8oQ7xRmEHJ6TzEDANBgkqhkiG9w0BAQEFAASCAQB3VZvHRE5EWxug7Sckpcz1ucDZ
# YiTKiqmyPt75MhzNRQLtKFx/jWwlemUwnPMzeu6yutCkZ74Bdn7MBsfDqV3bUz43wAu+fRBteGvF
# mTc00MfY8L7o8dkpj4AqAOCj4hKQzbSE99GvSzyXcPE2Gm5NrOPtKxqfFqbBRTCb4fBZP84LaL+x
# rnYfrM4qXTppixyN8iFYCd4maEbMu/GA5o+j0BkDDnx42pILDoAGV/ERyx55Y3Nc2Mhm/cITBMNn
# g7uS9KPrlYizNaqVu09Hi9jg4gdZaRiTjUqg05tSOk/YqIQxTgfscwSPY92/ewpI6e1EHtLt8Q33
# gWCbERptSntUMHwGCSqGSIb3DQEHATAdBglghkgBZQMEAQIEENm1AxeXlEMx7p6McjHIj5CAUEQj
# 0GuJ5LnTqiqIjOiwmwNidl1N1TRluxX5vAQvwBuYE6bQK4+i04yn2Av3cucW4kvxgP2Nmni+XgQt
# aPPKlasaVceEeZ15IYjw77/m3YYn
# -------------------------------------
# Decrypt the MIME.
set success [CkMime_DecryptUsingCert $mime $cert]
if {$success == 0} then {
puts [CkMime_lastErrorText $mime]
delete_CkCert $cert
delete_CkMime $mime
exit
}
# -------------------------------------
# Note: A password dialog may be shown, possibly twice, when accessing the private key.
# See the following blog post explaining how to suppress the dialog:
# Suppress Password Dialog when Accessing Private Key in Apple Keychain
# Show the unencrypted MIME
puts [CkMime_getMime $mime]
# Here's the decrypted MIME
# Subject: test
# SomeHeader: 123
# Content-Type: text/plain
#
# This is the body.
delete_CkCert $cert
delete_CkMime $mime