C
C
Example: Mime.GetDecryptCertInfo method
Demonstrates theGetDecryptCertInfo method.
Chilkat C Downloads
#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);
}