Sample code for 30+ languages & platforms
Dart

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

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  final cert = 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.
  try {
    cert.loadByCommonName('My Cert');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print('Cert has private key: ${cert.hasPrivateKey()}');

  // Load the MIME to be decrypted.
  // We encrypted using this example:  S/MIME Encrypt using Certificate in Apple Keychain
  final mime = CkMime();
  try {
    mime.loadMimeFile('./encrypted.mime');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print(mime.getMime());
  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.
  try {
    mime.decryptUsingCert(cert);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // -------------------------------------
  // 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.getMime());

  // Here's the decrypted MIME

  // Subject: test
  // SomeHeader: 123
  // Content-Type: text/plain
  // 
  // This is the body.
}