Sample code for 30+ languages & platforms
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

C
#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);

    }