PureBasic
PureBasic
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 PureBasic Downloads
IncludeFile "CkMime.pb"
IncludeFile "CkCert.pb"
Procedure ChilkatExample()
success.i = 0
cert.i = CkCert::ckCreate()
If cert.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; 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.
success = CkCert::ckLoadByCommonName(cert,"My Cert")
If success = 0
Debug CkCert::ckLastErrorText(cert)
CkCert::ckDispose(cert)
ProcedureReturn
EndIf
Debug "Cert has private key: " + Str(CkCert::ckHasPrivateKey(cert))
; Load the MIME to be decrypted.
; We encrypted using this example: S/MIME Encrypt using Certificate in Apple Keychain
mime.i = CkMime::ckCreate()
If mime.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkMime::ckLoadMimeFile(mime,"./encrypted.mime")
If success = 0
Debug CkMime::ckLastErrorText(mime)
CkCert::ckDispose(cert)
CkMime::ckDispose(mime)
ProcedureReturn
EndIf
Debug CkMime::ckGetMime(mime)
Debug "----"
; 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 = CkMime::ckDecryptUsingCert(mime,cert)
If success = 0
Debug CkMime::ckLastErrorText(mime)
CkCert::ckDispose(cert)
CkMime::ckDispose(mime)
ProcedureReturn
EndIf
; -------------------------------------
; 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
Debug CkMime::ckGetMime(mime)
; Here's the decrypted MIME
; Subject: test
; SomeHeader: 123
; Content-Type: text/plain
;
; This is the body.
CkCert::ckDispose(cert)
CkMime::ckDispose(mime)
ProcedureReturn
EndProcedure