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

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

    }