Sample code for 30+ languages & platforms
C

S/MIME Encrypt using Certificate in Apple Keychain

See more Apple Keychain Examples

Encrypts MIME to creates S/MIME using a certificate found in the Apple Keychain.

Chilkat C Downloads

C
#include <C_CkCert.h>
#include <C_CkMime.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkCert cert;
    HCkMime mime;

    success = FALSE;

    cert = CkCert_Create();

    // Load the certificate by the Subject Common Name
    // On MacOS and iOS, Chilkat will search the Keychain(s) for the matching certificate.
    success = CkCert_LoadByCommonName(cert,"My Cert");
    if (success == FALSE) {
        printf("%s\n",CkCert_lastErrorText(cert));
        CkCert_Dispose(cert);
        return;
    }

    // Note: The private key is not needed for encryption.
    // Only the certificate is needed.

    // Create a simple MIME message to encrypt.
    mime = CkMime_Create();
    CkMime_AddHeaderField(mime,"Subject","test");
    CkMime_AddHeaderField(mime,"SomeHeader","123");
    CkMime_AddHeaderField(mime,"Content-Type","text/plain");
    CkMime_SetBody(mime,"This is the body.");

    printf("%s\n",CkMime_getMime(mime));
    printf("----\n");

    // Here's the MIME to be encrypted:

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

    // -------------------------------------
    // Encrypt the MIME.
    success = CkMime_Encrypt(mime,cert);
    if (success == FALSE) {
        printf("%s\n",CkMime_lastErrorText(mime));
        CkCert_Dispose(cert);
        CkMime_Dispose(mime);
        return;
    }

    // Show the encrypted MIME (S/MIME)
    printf("%s\n",CkMime_getMime(mime));

    // Save the encrypted MIME to a file.
    CkMime_SaveMime(mime,"./encrypted.mime");

    // Here's the S/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


    CkCert_Dispose(cert);
    CkMime_Dispose(mime);

    }