C
C
RSA Signature/Verify with .key and .cer
See more RSA Examples
Demonstrates how to use a .key file (private key) and digital certificate (.cer, public key) to create and verify an RSA signature.Chilkat C Downloads
#include <C_CkPrivateKey.h>
#include <C_CkRsa.h>
#include <C_CkCert.h>
#include <C_CkPublicKey.h>
void ChilkatSample(void)
{
BOOL success;
HCkPrivateKey privKey;
HCkRsa rsa;
const char *strData;
const char *hexSig;
HCkCert cert;
HCkPublicKey pubKey;
HCkRsa rsa2;
success = FALSE;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
privKey = CkPrivateKey_Create();
// Load the private key from an RSA .key file:
success = CkPrivateKey_LoadPemFile(privKey,"privateKey.key");
if (success == FALSE) {
printf("%s\n",CkPrivateKey_lastErrorText(privKey));
CkPrivateKey_Dispose(privKey);
return;
}
rsa = CkRsa_Create();
// Import the private key into the RSA component:
success = CkRsa_UsePrivateKey(rsa,privKey);
if (success == FALSE) {
printf("%s\n",CkRsa_lastErrorText(rsa));
CkPrivateKey_Dispose(privKey);
CkRsa_Dispose(rsa);
return;
}
// Create the signature as a hex string:
CkRsa_putEncodingMode(rsa,"hex");
strData = "This is the string to be signed.";
// Sign the string using the sha256 hash algorithm.
// Other valid choices are "md2", "sha1", "sha384",
// "sha512", and "md5".
hexSig = CkRsa_signStringENC(rsa,strData,"sha256");
printf("%s\n",hexSig);
// Load a digital certificate from a .cer file:
cert = CkCert_Create();
success = CkCert_LoadFromFile(cert,"myCert.cer");
if (success == FALSE) {
printf("%s\n",CkCert_lastErrorText(cert));
CkPrivateKey_Dispose(privKey);
CkRsa_Dispose(rsa);
CkCert_Dispose(cert);
return;
}
pubKey = CkPublicKey_Create();
CkCert_GetPublicKey(cert,pubKey);
// Now verify using a new instance of the RSA object:
rsa2 = CkRsa_Create();
// Import the public key into the RSA object:
success = CkRsa_UsePublicKey(rsa2,pubKey);
if (success == FALSE) {
printf("%s\n",CkRsa_lastErrorText(rsa2));
CkPrivateKey_Dispose(privKey);
CkRsa_Dispose(rsa);
CkCert_Dispose(cert);
CkPublicKey_Dispose(pubKey);
CkRsa_Dispose(rsa2);
return;
}
// The signature is a hex string, so make sure the EncodingMode is correct:
CkRsa_putEncodingMode(rsa2,"hex");
// Verify the signature:
success = CkRsa_VerifyStringENC(rsa2,strData,"sha256",hexSig);
if (success == FALSE) {
printf("%s\n",CkRsa_lastErrorText(rsa2));
CkPrivateKey_Dispose(privKey);
CkRsa_Dispose(rsa);
CkCert_Dispose(cert);
CkPublicKey_Dispose(pubKey);
CkRsa_Dispose(rsa2);
return;
}
printf("Success.\n");
CkPrivateKey_Dispose(privKey);
CkRsa_Dispose(rsa);
CkCert_Dispose(cert);
CkPublicKey_Dispose(pubKey);
CkRsa_Dispose(rsa2);
}