Sample code for 30+ languages & platforms
C++

RSA Sign Binary Data and Verify (Recover the Original Data)

See more RSA Examples

Demonstrates how to RSA sign binary data and then verify/recover the original data.

Note: This example uses methods introduced in Chilkat v9.5.0.77.

Chilkat C++ Downloads

C++
#include <CkPrivateKey.h>
#include <CkRsa.h>
#include <CkBinData.h>
#include <CkPublicKey.h>

void ChilkatSample(void)
    {
    bool success = false;

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // Load an RSA private key for signing.
    CkPrivateKey privKey;
    success = privKey.LoadEncryptedPemFile("qa_data/pem/rsa_passwd.pem","passwd");
    if (success == false) {
        std::cout << privKey.lastErrorText() << "\r\n";
        return;
    }

    CkRsa rsa;
    rsa.UsePrivateKey(privKey);

    // We have some binary data (in hex) to sign
    const char *originalData = "0102030405060708090A";
    CkBinData bd;
    bd.AppendEncoded(originalData,"hex");

    // If successful, the contents of bd are replaced with the RSA signature.
    success = rsa.SignRawBd(bd);
    if (success == false) {
        std::cout << rsa.lastErrorText() << "\r\n";
        return;
    }

    // Show the RSA signature in base64
    std::cout << bd.getEncoded("base64") << "\r\n";

    // ------------------------------------------
    // Get the public key from the private key
    CkPublicKey pubKey;
    privKey.ToPublicKey(pubKey);

    // Verify the signature and extract the original data.
    CkRsa rsa2;
    rsa2.UsePublicKey(pubKey);

    bool bVerified = rsa2.VerifyRawBd(bd);
    std::cout << "signature verified: " << bVerified << "\r\n";

    // Show the original data:
    std::cout << "original data: " << bd.getEncoded("hex") << "\r\n";
    }