Unicode C
Unicode C
RSA Sign using Base64 Private Key
See more RSA Examples
Signs a string using a non-encrypted RSA private key in base64 encoding. Returns the RSA signature as a base64 string.Chilkat Unicode C Downloads
#include <C_CkPrivateKeyW.h>
#include <C_CkStringBuilderW.h>
#include <C_CkRsaW.h>
#include <C_CkBinDataW.h>
void ChilkatSample(void)
{
BOOL success;
HCkPrivateKeyW privKey;
HCkStringBuilderW sbPem;
HCkRsaW rsa;
HCkBinDataW bd;
const wchar_t *strOriginal;
success = FALSE;
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
privKey = CkPrivateKeyW_Create();
sbPem = CkStringBuilderW_Create();
CkStringBuilderW_AppendLine(sbPem,L"-----BEGIN RSA PRIVATE KEY-----",TRUE);
CkStringBuilderW_AppendLine(sbPem,L"MIIC .... j5A==",TRUE);
CkStringBuilderW_AppendLine(sbPem,L"-----END RSA PRIVATE KEY-----",TRUE);
success = CkPrivateKeyW_LoadPem(privKey,CkStringBuilderW_getAsString(sbPem));
if (success == FALSE) {
wprintf(L"%s\n",CkPrivateKeyW_lastErrorText(privKey));
CkPrivateKeyW_Dispose(privKey);
CkStringBuilderW_Dispose(sbPem);
return;
}
rsa = CkRsaW_Create();
success = CkRsaW_UsePrivateKey(rsa,privKey);
if (success == FALSE) {
wprintf(L"%s\n",CkRsaW_lastErrorText(rsa));
CkPrivateKeyW_Dispose(privKey);
CkStringBuilderW_Dispose(sbPem);
CkRsaW_Dispose(rsa);
return;
}
bd = CkBinDataW_Create();
CkBinDataW_AppendString(bd,L"12345678",L"utf-8");
success = CkRsaW_SignRawBd(rsa,bd);
if (success == FALSE) {
wprintf(L"%s\n",CkRsaW_lastErrorText(rsa));
CkPrivateKeyW_Dispose(privKey);
CkStringBuilderW_Dispose(sbPem);
CkRsaW_Dispose(rsa);
CkBinDataW_Dispose(bd);
return;
}
// Get the base64 RSA signature.
wprintf(L"%s\n",CkBinDataW_getEncoded(bd,L"base64"));
success = CkRsaW_VerifyRawBd(rsa,bd);
if (success == FALSE) {
wprintf(L"%s\n",CkRsaW_lastErrorText(rsa));
CkPrivateKeyW_Dispose(privKey);
CkStringBuilderW_Dispose(sbPem);
CkRsaW_Dispose(rsa);
CkBinDataW_Dispose(bd);
return;
}
strOriginal = CkBinDataW_getString(bd,L"utf-8");
wprintf(L"%s\n",strOriginal);
CkPrivateKeyW_Dispose(privKey);
CkStringBuilderW_Dispose(sbPem);
CkRsaW_Dispose(rsa);
CkBinDataW_Dispose(bd);
}