C
C
IMAP Login Secure
Demonstrates how to use the LoginSecure method introduced in Chilkat v9.5.0.71.Chilkat C Downloads
#include <C_CkImap.h>
#include <C_CkJsonObject.h>
#include <C_CkCrypt2.h>
#include <C_CkSecureString.h>
void ChilkatSample(void)
{
BOOL success;
HCkImap imap;
HCkJsonObject json;
HCkCrypt2 crypt;
HCkSecureString ssLogin;
HCkSecureString ssPassword;
success = FALSE;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
imap = CkImap_Create();
// Connect to an IMAP server..
CkImap_putSsl(imap,TRUE);
CkImap_putPort(imap,993);
success = CkImap_Connect(imap,"imap.mail.me.com");
if (success != TRUE) {
printf("%s\n",CkImap_lastErrorText(imap));
CkImap_Dispose(imap);
return;
}
// Imagine we've previously saved our encrypted login and password within a JSON config file
// that contains this:
// {
// "imap_login": "fLkxsfnVaIWLiL/R32jo6g==",
// "imap_password": "/NbaFBoCftBLFf8WBU9Xtw=="
// }
json = CkJsonObject_Create();
CkJsonObject_LoadFile(json,"qa_data/passwords/imap.json");
crypt = CkCrypt2_Create();
// These are the encryption settings we previously used to encrypt the credentials within the JSON config file.
CkCrypt2_putCryptAlgorithm(crypt,"aes");
CkCrypt2_putCipherMode(crypt,"cbc");
CkCrypt2_putKeyLength(crypt,128);
CkCrypt2_SetEncodedKey(crypt,"000102030405060708090A0B0C0D0E0F","hex");
CkCrypt2_SetEncodedIV(crypt,"000102030405060708090A0B0C0D0E0F","hex");
CkCrypt2_putEncodingMode(crypt,"base64");
ssLogin = CkSecureString_Create();
ssPassword = CkSecureString_Create();
// Decrypt to the secure string. (the strings will still held in memory encrypted, but are now encrypted using
// a randomly generated session key.)
CkCrypt2_DecryptSecureENC(crypt,CkJsonObject_stringOf(json,"imap_login"),ssLogin);
CkCrypt2_DecryptSecureENC(crypt,CkJsonObject_stringOf(json,"imap_password"),ssPassword);
// Pass the credentials to the LoginSecure method:
success = CkImap_LoginSecure(imap,ssLogin,ssPassword);
if (success != TRUE) {
printf("%s\n",CkImap_lastErrorText(imap));
CkImap_Dispose(imap);
CkJsonObject_Dispose(json);
CkCrypt2_Dispose(crypt);
CkSecureString_Dispose(ssLogin);
CkSecureString_Dispose(ssPassword);
return;
}
// ...
CkImap_Disconnect(imap);
CkImap_Dispose(imap);
CkJsonObject_Dispose(json);
CkCrypt2_Dispose(crypt);
CkSecureString_Dispose(ssLogin);
CkSecureString_Dispose(ssPassword);
}