Sample code for 30+ languages & platforms
C

Example: Mime.GetDecryptCertInfo method

Demonstrates the GetDecryptCertInfo method.

Chilkat C Downloads

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

void ChilkatSample(void)
    {
    BOOL success;
    HCkMime mime;
    HCkJsonObject json;
    const char *serial;
    const char *issuerCN;
    int i;
    int count;

    success = FALSE;

    mime = CkMime_Create();

    //  Load MIME that is has Content-Type like this:
    //  Content-Type: application/pkcs7-mime; smime-type="enveloped-data"; name="smime.p7m"; smime-type="enveloped-data"
    success = CkMime_LoadMimeFile(mime,"qa_data/mime/enveloped_data.eml");
    if (success == FALSE) {
        printf("%s\n",CkMime_lastErrorText(mime));
        CkMime_Dispose(mime);
        return;
    }

    //  Get information about the certificate that would be needed to decrypt.
    //  An enveloped-data can potentially be decrypted by multiple certificates if it was encrypted in a way that allows it,
    //  but in most cases, only a single certificate with associated private key (that of the message recipient) is possible.
    json = CkJsonObject_Create();
    success = CkMime_GetDecryptCertInfo(mime,json);
    if (success == FALSE) {
        printf("%s\n",CkMime_lastErrorText(mime));
        CkMime_Dispose(mime);
        CkJsonObject_Dispose(json);
        return;
    }

    CkJsonObject_putEmitCompact(json,FALSE);
    printf("%s\n",CkJsonObject_emit(json));

    //  Sample output:

    //  {
    //    "recipientInfo": [
    //      {
    //        "serial": "****",
    //        "issuerCN": "****"
    //      }
    //    ]
    //  }

    //  Get each certificate's information like this:

    i = 0;
    count = CkJsonObject_SizeOfArray(json,"recipientInfo");
    while (i < count) {
        CkJsonObject_putI(json,i);
        serial = CkJsonObject_stringOf(json,"recipientInfo[i].serial");
        issuerCN = CkJsonObject_stringOf(json,"recipientInfo[i].issuerCN");
        i = i + 1;
    }



    CkMime_Dispose(mime);
    CkJsonObject_Dispose(json);

    }