Crypto++
5.6.4
Free C++ class library of cryptographic schemes
|
13 #if !defined(NDEBUG) && !defined(CRYPTOPP_DOXYGEN_PROCESSING) && !defined(CRYPTOPP_IS_DLL)
16 void RSA_TestInstantiations()
39 #ifndef CRYPTOPP_IMPORTS
45 return ASN1::rsaEncryption();
67 return a_exp_b_mod_c(x, m_e, m_n);
72 CRYPTOPP_UNUSED(rng), CRYPTOPP_UNUSED(level);
82 return GetValueHelper(
this, name, valueType, pValue).Assignable()
83 CRYPTOPP_GET_FUNCTION_ENTRY(Modulus)
84 CRYPTOPP_GET_FUNCTION_ENTRY(PublicExponent)
90 AssignFromHelper(
this, source)
91 CRYPTOPP_SET_FUNCTION_ENTRY(Modulus)
92 CRYPTOPP_SET_FUNCTION_ENTRY(PublicExponent)
102 bool IsAcceptable(
const Integer &candidate)
const {
return RelativelyPrime(m_e, candidate-
Integer::One());}
108 int modulusSize = 2048;
111 assert(modulusSize >= 16);
112 if (modulusSize < 16)
113 throw InvalidArgument(
"InvertibleRSAFunction: specified modulus size is too small");
117 assert(m_e >= 3); assert(!m_e.IsEven());
118 if (m_e < 3 || m_e.IsEven())
119 throw InvalidArgument(
"InvertibleRSAFunction: invalid public exponent");
123 (Name::PointerToPrimeSelector(), selector.GetSelectorPointer());
124 m_p.GenerateRandom(rng, primeParam);
125 m_q.GenerateRandom(rng, primeParam);
130 m_dp = m_d % (m_p-1);
131 m_dq = m_d % (m_q-1);
139 SignaturePairwiseConsistencyTest_FIPS_140_Only(signer, verifier);
143 EncryptionPairwiseConsistencyTest_FIPS_140_Only(encryptor, decryptor);
154 if (n.
IsEven() || e.IsEven() | d.IsEven())
155 throw InvalidArgument(
"InvertibleRSAFunction: input is not a valid RSA private key");
184 m_dp = m_d % (m_p-1);
185 m_dq = m_d % (m_q-1);
190 throw InvalidArgument(
"InvertibleRSAFunction: input is not a valid RSA private key");
200 BERDecodeUnsigned<word32>(privateKey, version, INTEGER, 0, 0);
201 m_n.BERDecode(privateKey);
202 m_e.BERDecode(privateKey);
209 privateKey.MessageEnd();
215 DEREncodeUnsigned<word32>(privateKey, 0);
216 m_n.DEREncode(privateKey);
217 m_e.DEREncode(privateKey);
224 privateKey.MessageEnd();
240 Integer y = ModularRoot(re, m_dq, m_dp, m_q, m_p, m_u);
258 pass = pass && m_p * m_q == m_n;
259 pass = pass && m_e*m_d % LCM(m_p-1, m_q-1) == 1;
260 pass = pass && m_dp == m_d%(m_p-1) && m_dq == m_d%(m_q-1);
261 pass = pass && m_u * m_q % m_p == 1;
270 return GetValueHelper<RSAFunction>(
this, name, valueType, pValue).Assignable()
271 CRYPTOPP_GET_FUNCTION_ENTRY(Prime1)
272 CRYPTOPP_GET_FUNCTION_ENTRY(Prime2)
273 CRYPTOPP_GET_FUNCTION_ENTRY(PrivateExponent)
274 CRYPTOPP_GET_FUNCTION_ENTRY(ModPrime1PrivateExponent)
275 CRYPTOPP_GET_FUNCTION_ENTRY(ModPrime2PrivateExponent)
276 CRYPTOPP_GET_FUNCTION_ENTRY(MultiplicativeInverseOfPrime2ModPrime1)
282 AssignFromHelper<RSAFunction>(
this, source)
283 CRYPTOPP_SET_FUNCTION_ENTRY(Prime1)
284 CRYPTOPP_SET_FUNCTION_ENTRY(Prime2)
285 CRYPTOPP_SET_FUNCTION_ENTRY(PrivateExponent)
286 CRYPTOPP_SET_FUNCTION_ENTRY(ModPrime1PrivateExponent)
287 CRYPTOPP_SET_FUNCTION_ENTRY(ModPrime2PrivateExponent)
288 CRYPTOPP_SET_FUNCTION_ENTRY(MultiplicativeInverseOfPrime2ModPrime1)
297 return t % 16 == 12 ? t : m_n - t;
An object that implements NameValuePairs.
void BERDecodePrivateKey(BufferedTransformation &bt, bool parametersPresent, size_t size)
decode privateKey part of privateKeyInfo, without the OCTET STRING header
void BERDecodePublicKey(BufferedTransformation &bt, bool parametersPresent, size_t size)
decode subjectPublicKey part of subjectPublicKeyInfo, without the BIT STRING header
Integer InverseMod(const Integer &n) const
calculate multiplicative inverse of *this mod n
T GetValueWithDefault(const char *name, T defaultValue) const
Get a named value.
AlgorithmParameters MakeParameters(const char *name, const T &value, bool throwIfNotUsed=true)
Create an object that implements NameValuePairs.
const Integer & MultiplicativeInverse(const Integer &a) const
Calculate the multiplicative inverse of an element in the ring.
Classes and functions for number theoretic operations.
void DEREncode(BufferedTransformation &bt) const
Encode in DER format.
static const Integer & One()
Integer representing 1.
Ring of congruence classes modulo n.
bool IsEven() const
Determines if the Integer is even parity.
Classes for probablistic signature schemes.
bool IsZero() const
Determines if the Integer is 0.
Class file for performing modular arithmetic.
const Integer & Multiply(const Integer &a, const Integer &b) const
Multiplies elements in the ring.
bool FIPS_140_2_ComplianceEnabled()
Determines whether the library provides FIPS validated cryptography.
bool Validate(RandomNumberGenerator &rng, unsigned int level) const
Check this object for errors.
Integer ApplyFunction(const Integer &x) const
Applies the trapdoor.
void DoQuickSanityCheck() const
Perform a quick sanity check.
void AssignFrom(const NameValuePairs &source)
Assign values to this object.
const Integer & Square(const Integer &a) const
Square an element in the ring.
Interface for random number generators.
Integer CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const
Calculates the inverse of an element.
void AssignFrom(const NameValuePairs &source)
Assign values to this object.
Classes and functions for the FIPS 140-2 validated library.
void DEREncodePublicKey(BufferedTransformation &bt) const
encode subjectPublicKey part of subjectPublicKeyInfo, without the BIT STRING header
Base class for all exceptions thrown by the library.
Classes for SHA-1 and SHA-2 family of message digests.
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.
Classes for the RSA cryptosystem.
Integer CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const
Calculates the inverse of an element.
bool IsOdd() const
Determines if the Integer is odd parity.
void Initialize(RandomNumberGenerator &rng, unsigned int modulusBits, const Integer &e=17)
Create a RSA private key.
Application callback to signal suitability of a cabdidate prime.
bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const
Get a named value.
bool VerifyPrime(RandomNumberGenerator &rng, const Integer &p, unsigned int level=1)
Verifies a prime number.
Classes and functions for working with ANS.1 objects.
ASN.1 object identifiers for algorthms and schemes.
RSA trapdoor function using the public key.
void Randomize(RandomNumberGenerator &rng, size_t bitCount)
Set this Integer to random integer.
void DEREncodePrivateKey(BufferedTransformation &bt) const
encode privateKey part of privateKeyInfo, without the OCTET STRING header
void BERDecode(const byte *input, size_t inputLen)
Decode from BER format.
bool IsPositive() const
Determines if the Integer is positive.
An invalid argument was detected.
Crypto++ library namespace.
bool Validate(RandomNumberGenerator &rng, unsigned int level) const
Check this object for errors.
bool GetIntValue(const char *name, int &value) const
Get a named value with type int.
bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const
Get a named value.
void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg)
Integer ApplyFunction(const Integer &x) const
Applies the trapdoor.
virtual Element Exponentiate(const Element &a, const Integer &e) const
Raises a base to an exponent in the group.
Template implementing constructors for public key algorithm classes.
@ OTHER_ERROR
Some other error occurred not belonging to other categories.
RSA encryption algorithm.
Interface for retrieving values given their names.
Classes for working with NameValuePairs.
Multiple precision integer with arithmetic operations.