Lua
Lua
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 Lua Downloads
local chilkat = require("chilkat")
local cert = chilkat.Cert.new()
-- 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.
local success = cert:load_by_common_name("My Cert")
if not success then
print(cert.last_error_text)
return
end
print("Cert has private key: " .. tostring(cert:has_private_key()))
-- Load the MIME to be decrypted.
-- We encrypted using this example: S/MIME Encrypt using Certificate in Apple Keychain
local mime = chilkat.Mime.new()
success = mime:load_mime_file("./encrypted.mime")
if not success then
print(mime.last_error_text)
return
end
print(mime:get_mime())
print("----")
-- 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.
success = mime:decrypt_using_cert(cert)
if not success then
print(mime.last_error_text)
return
end
-- -------------------------------------
-- 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
print(mime:get_mime())
-- Here's the decrypted MIME
-- Subject: test
-- SomeHeader: 123
-- Content-Type: text/plain
--
-- This is the body.