C
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 C Downloads
#include <C_CkPrivateKey.h>
#include <C_CkStringBuilder.h>
#include <C_CkRsa.h>
#include <C_CkBinData.h>
void ChilkatSample(void)
{
BOOL success;
HCkPrivateKey privKey;
HCkStringBuilder sbPem;
HCkRsa rsa;
HCkBinData bd;
const char *strOriginal;
success = FALSE;
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
privKey = CkPrivateKey_Create();
sbPem = CkStringBuilder_Create();
CkStringBuilder_AppendLine(sbPem,"-----BEGIN RSA PRIVATE KEY-----",TRUE);
CkStringBuilder_AppendLine(sbPem,"MIIC .... j5A==",TRUE);
CkStringBuilder_AppendLine(sbPem,"-----END RSA PRIVATE KEY-----",TRUE);
success = CkPrivateKey_LoadPem(privKey,CkStringBuilder_getAsString(sbPem));
if (success == FALSE) {
printf("%s\n",CkPrivateKey_lastErrorText(privKey));
CkPrivateKey_Dispose(privKey);
CkStringBuilder_Dispose(sbPem);
return;
}
rsa = CkRsa_Create();
success = CkRsa_UsePrivateKey(rsa,privKey);
if (success == FALSE) {
printf("%s\n",CkRsa_lastErrorText(rsa));
CkPrivateKey_Dispose(privKey);
CkStringBuilder_Dispose(sbPem);
CkRsa_Dispose(rsa);
return;
}
bd = CkBinData_Create();
CkBinData_AppendString(bd,"12345678","utf-8");
success = CkRsa_SignRawBd(rsa,bd);
if (success == FALSE) {
printf("%s\n",CkRsa_lastErrorText(rsa));
CkPrivateKey_Dispose(privKey);
CkStringBuilder_Dispose(sbPem);
CkRsa_Dispose(rsa);
CkBinData_Dispose(bd);
return;
}
// Get the base64 RSA signature.
printf("%s\n",CkBinData_getEncoded(bd,"base64"));
success = CkRsa_VerifyRawBd(rsa,bd);
if (success == FALSE) {
printf("%s\n",CkRsa_lastErrorText(rsa));
CkPrivateKey_Dispose(privKey);
CkStringBuilder_Dispose(sbPem);
CkRsa_Dispose(rsa);
CkBinData_Dispose(bd);
return;
}
strOriginal = CkBinData_getString(bd,"utf-8");
printf("%s\n",strOriginal);
CkPrivateKey_Dispose(privKey);
CkStringBuilder_Dispose(sbPem);
CkRsa_Dispose(rsa);
CkBinData_Dispose(bd);
}