CryptoPP generates invalid keys RSA

Viewed 236

I'm trying to encrypt some text with RSA in c++,

when encrypting I'm generating n, e, d but when trying to decrypt, the private key initializer says the keys are invalid...

So I built a code that generates the keys and then tries to initialize a private key object right after that and it says the keys are still invalid:

int main()
{
    
    CryptoPP::InvertibleRSAFunction params;
    CryptoPP::AutoSeededRandomPool prng;
    params.GenerateRandomWithKeySize(prng, 2048);
    params.SetPublicExponent(65537);

    const CryptoPP::Integer& n = params.GetModulus();
    const CryptoPP::Integer& p = params.GetPrime1();
    const CryptoPP::Integer& q = params.GetPrime2();
    const CryptoPP::Integer& d = params.GetPrivateExponent();
    const CryptoPP::Integer& e = params.GetPublicExponent();

    CryptoPP::RSA::PrivateKey privk;
    privk.Initialize(n, e, d);
}

The program crashes to: InvertibleRSAFunction: input is not a valid RSA private key

1 Answers

You problem is that you modified the exponent after the key was already generated.

params.GenerateRandomWithKeySize(prng, 2048);
params.SetPublicExponent(65537);

Actually the key was generated in the first line with e = 17. Try to change the line order.

params.SetPublicExponent(65537);
params.GenerateRandomWithKeySize(prng, 2048);
Related