Search code examples
c++cryptographyrsacrypto++

CryptoPP generates invalid keys RSA


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


Solution

  • 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);