14 #if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_DOXYGEN_PROCESSING) && !defined(CRYPTOPP_IS_DLL) 18 void RSA_TestInstantiations()
45 #ifndef CRYPTOPP_IMPORTS 51 return ASN1::rsaEncryption();
73 return a_exp_b_mod_c(x, m_e, m_n);
78 CRYPTOPP_UNUSED(rng), CRYPTOPP_UNUSED(level);
90 return GetValueHelper(
this, name, valueType, pValue).Assignable()
91 CRYPTOPP_GET_FUNCTION_ENTRY(
Modulus)
98 AssignFromHelper(
this, source)
99 CRYPTOPP_SET_FUNCTION_ENTRY(
Modulus)
116 int modulusSize = 2048;
120 if (modulusSize < 16)
121 throw InvalidArgument(
"InvertibleRSAFunction: specified modulus size is too small");
126 if (m_e < 3 || m_e.IsEven())
127 throw InvalidArgument(
"InvertibleRSAFunction: invalid public exponent");
138 m_dp = m_d % (m_p-1);
139 m_dq = m_d % (m_q-1);
147 SignaturePairwiseConsistencyTest_FIPS_140_Only(signer, verifier);
151 EncryptionPairwiseConsistencyTest_FIPS_140_Only(encryptor, decryptor);
162 if (n.
IsEven() || e.IsEven() | d.IsEven())
163 throw InvalidArgument(
"InvertibleRSAFunction: input is not a valid RSA private key");
192 m_dp = m_d % (m_p-1);
193 m_dq = m_d % (m_q-1);
198 throw InvalidArgument(
"InvertibleRSAFunction: input is not a valid RSA private key");
208 BERDecodeUnsigned<word32>(privateKey, version, INTEGER, 0, 0);
209 m_n.BERDecode(privateKey);
210 m_e.BERDecode(privateKey);
217 privateKey.MessageEnd();
223 DEREncodeUnsigned<word32>(privateKey, 0);
224 m_n.DEREncode(privateKey);
225 m_e.DEREncode(privateKey);
232 privateKey.MessageEnd();
273 pass = pass && m_p * m_q == m_n;
275 pass = pass && m_e*m_d %
LCM(m_p-1, m_q-1) == 1;
277 pass = pass && m_dp == m_d%(m_p-1) && m_dq == m_d%(m_q-1);
279 pass = pass && m_u * m_q % m_p == 1;
292 return GetValueHelper<RSAFunction>(
this, name, valueType, pValue).Assignable()
293 CRYPTOPP_GET_FUNCTION_ENTRY(
Prime1)
294 CRYPTOPP_GET_FUNCTION_ENTRY(
Prime2)
304 AssignFromHelper<RSAFunction>(
this, source)
305 CRYPTOPP_SET_FUNCTION_ENTRY(
Prime1)
306 CRYPTOPP_SET_FUNCTION_ENTRY(
Prime2)
319 return t % 16 == 12 ? t : m_n - t;
Base class for all exceptions thrown by the library.
const char * MultiplicativeInverseOfPrime2ModPrime1()
Integer.
An invalid argument was detected.
Classes for working with NameValuePairs.
const Integer & Square(const Integer &a) const
Square an element in the ring.
const char * Prime2()
Integer.
T GetValueWithDefault(const char *name, T defaultValue) const
Get a named value.
void DEREncode(BufferedTransformation &bt) const
Encode in DER format.
void BERDecodePrivateKey(BufferedTransformation &bt, bool parametersPresent, size_t size)
decode privateKey part of privateKeyInfo, without the OCTET STRING header
void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg)
Generate a random key or crypto parameters.
bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const
Get a named value.
const Integer & MultiplicativeInverse(const Integer &a) const
Calculate the multiplicative inverse of an element in the ring.
Some other error occurred not belonging to other categories.
ASN.1 object identifiers for algorthms and schemes.
Ring of congruence classes modulo n.
Interface for random number generators.
void Randomize(RandomNumberGenerator &rng, size_t bitCount)
Set this Integer to random integer.
Integer InverseMod(const Integer &n) const
Calculate multiplicative inverse.
bool Validate(RandomNumberGenerator &rng, unsigned int level) const
Check this object for errors.
void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs ¶ms=g_nullNameValuePairs)
Generate a random number.
bool IsPositive() const
Determines if the Integer is positive.
static const Integer & One()
Integer representing 1.
void BERDecodePublicKey(BufferedTransformation &bt, bool parametersPresent, size_t size)
decode subjectPublicKey part of subjectPublicKeyInfo, without the BIT STRING header ...
const char * PrivateExponent()
Integer.
Integer ApplyFunction(const Integer &x) const
Applies the trapdoor.
bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const
Get a named value.
const char * Prime1()
Integer.
void DoQuickSanityCheck() const
Perform a quick sanity check.
Integer GCD(const Integer &a, const Integer &b)
Calculate the greatest common divisor.
bool FIPS_140_2_ComplianceEnabled()
Determines whether the library provides FIPS validated cryptography.
Classes for PKCS padding schemes.
void Initialize(RandomNumberGenerator &rng, unsigned int modulusBits, const Integer &e=17)
Create a RSA private key.
const Integer & Multiply(const Integer &a, const Integer &b) const
Multiplies elements in the ring.
AlgorithmParameters MakeParameters(const char *name, const T &value, bool throwIfNotUsed=true)
Create an object that implements NameValuePairs.
const char * PublicExponent()
Integer.
bool IsZero() const
Determines if the Integer is 0.
bool VerifyPrime(RandomNumberGenerator &rng, const Integer &p, unsigned int level=1)
Verifies a number is probably prime.
void AssignFrom(const NameValuePairs &source)
Assign values to this object.
const char * ModPrime1PrivateExponent()
Integer.
Classes for SHA3 message digests.
Application callback to signal suitability of a cabdidate prime.
Multiple precision integer with arithmetic operations.
virtual Element Exponentiate(const Element &a, const Integer &e) const
Raises a base to an exponent in the group.
const char * ModPrime2PrivateExponent()
Integer.
Integer LCM(const Integer &a, const Integer &b)
Calculate the least common multiple.
void AssignFrom(const NameValuePairs &source)
Assign values to this object.
Integer CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const
Calculates the inverse of an element.
bool IsEven() const
Determines if the Integer is even parity.
RandomNumberGenerator & NullRNG()
Random Number Generator that does not produce random numbers.
const T & STDMIN(const T &a, const T &b)
Replacement function for std::min.
#define CRYPTOPP_ASSERT(exp)
Debugging and diagnostic assertion.
Classes and functions for working with ANS.1 objects.
Classes for SHA-1 and SHA-2 family of message digests.
const char * PointerToPrimeSelector()
const PrimeSelector *
Classes and functions for number theoretic operations.
Integer ModularRoot(const Integer &a, const Integer &dp, const Integer &dq, const Integer &p, const Integer &q, const Integer &u)
Extract a modular root.
const char * KeySize()
int, in bits
Classes for the RSA cryptosystem.
bool Validate(RandomNumberGenerator &rng, unsigned int level) const
Check this object for errors.
Classes and functions for the FIPS 140-2 validated library.
Integer CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const
Calculates the inverse of an element.
bool RelativelyPrime(const Integer &a, const Integer &b)
Determine relative primality.
An object that implements NameValuePairs.
const char * Modulus()
Integer.
RSA encryption algorithm.
Integer ApplyFunction(const Integer &x) const
Applies the trapdoor.
void BERDecode(const byte *input, size_t inputLen)
Decode from BER format.
Class file for performing modular arithmetic.
Crypto++ library namespace.
const char * ModulusSize()
int, in bits
bool GetIntValue(const char *name, int &value) const
Get a named value with type int.
void DEREncodePublicKey(BufferedTransformation &bt) const
encode subjectPublicKey part of subjectPublicKeyInfo, without the BIT STRING header ...
Classes for probablistic signature schemes.
void DEREncodePrivateKey(BufferedTransformation &bt) const
encode privateKey part of privateKeyInfo, without the OCTET STRING header
RSA trapdoor function using the public key.
bool IsOdd() const
Determines if the Integer is odd parity.
Interface for retrieving values given their names.
Template implementing constructors for public key algorithm classes.