Crypto++
8.6
Free C++ class library of cryptographic schemes
|
7 #if CRYPTOPP_MSC_VERSION
8 # pragma warning(disable: 4189 4589)
11 #ifndef CRYPTOPP_IMPORTS
23 #if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_DOXYGEN_PROCESSING)
24 void TestInstantiations_gfpcrypt()
28 DSA::Signer test5(
NullRNG(), 100);
29 DSA::Signer test2(test5);
48 int modulusSize = 2048, defaultSubgroupOrderSize;
54 defaultSubgroupOrderSize = 160;
57 defaultSubgroupOrderSize = 224;
60 defaultSubgroupOrderSize = 256;
76 pass = pass && ((pSize==1024 && qSize==160) || (pSize==2048 && qSize==224) || (pSize==2048 && qSize==256) || (pSize==3072 && qSize==256));
83 const byte *recoverableMessage,
size_t recoverableMessageLength,
85 byte *representative,
size_t representativeBitLength)
const
87 CRYPTOPP_UNUSED(rng), CRYPTOPP_UNUSED(recoverableMessage), CRYPTOPP_UNUSED(recoverableMessageLength);
88 CRYPTOPP_UNUSED(messageEmpty), CRYPTOPP_UNUSED(hashIdentifier);
92 const size_t representativeByteLength =
BitsToBytes(representativeBitLength);
96 memset(representative, 0, paddingLength);
99 if (digestSize*8 > representativeBitLength)
101 Integer h(representative, representativeByteLength);
102 h >>= representativeByteLength*8 - representativeBitLength;
103 h.Encode(representative, representativeByteLength);
108 const byte *recoverableMessage,
size_t recoverableMessageLength,
110 byte *representative,
size_t representativeBitLength)
const
112 CRYPTOPP_UNUSED(rng);CRYPTOPP_UNUSED(recoverableMessage); CRYPTOPP_UNUSED(recoverableMessageLength);
113 CRYPTOPP_UNUSED(hash); CRYPTOPP_UNUSED(hashIdentifier); CRYPTOPP_UNUSED(messageEmpty);
114 CRYPTOPP_UNUSED(representative); CRYPTOPP_UNUSED(representativeBitLength);
118 const size_t representativeByteLength =
BitsToBytes(representativeBitLength);
120 const size_t paddingLength =
SaturatingSubtract(representativeByteLength, digestSize);
122 memset(representative, 0, paddingLength);
123 hash.
TruncatedFinal(representative+paddingLength,
STDMIN(representativeByteLength, digestSize));
125 if (digestSize*8 >= representativeBitLength)
127 Integer h(representative, representativeByteLength);
128 h >>= representativeByteLength*8 - representativeBitLength + 1;
129 h.Encode(representative, representativeByteLength);
183 if (GetFieldType() == 2)
186 pass = pass &&
Jacobi(g*g-4, p)==-1;
193 if (fullValidate && pass)
199 else if (GetFieldType() == 1)
202 pass = pass &&
Jacobi(g, p) == 1;
219 int modulusSize, subgroupOrderSize;
224 if (!alg.
GetIntValue(
"SubgroupOrderSize", subgroupOrderSize))
225 subgroupOrderSize = GetDefaultSubgroupOrderSize(modulusSize);
228 pg.
Generate(GetFieldType() == 1 ? 1 : -1, rng, modulusSize, subgroupOrderSize);
239 CRYPTOPP_UNUSED(reversible);
240 element.Encode(encoded,
GetModulus().ByteCount());
245 CRYPTOPP_UNUSED(reversible);
251 CRYPTOPP_UNUSED(checkForGroupMembership);
264 if (parameters.EndReached())
267 q = ComputeGroupOrder(p) / 2;
271 parameters.MessageEnd();
283 parameters.MessageEnd();
288 return GetValueHelper<DL_GroupParameters<Element> >(
this, name, valueType, pValue)
289 CRYPTOPP_GET_FUNCTION_ENTRY(
Modulus);
294 AssignFromHelper(
this, source)
302 return ASN1::id_dsa();
308 ma.SimultaneousExponentiate(results, base, exponents, exponentsCount);
311 DL_GroupParameters_GFP::Element DL_GroupParameters_GFP::MultiplyElements(
const Element &a,
const Element &b)
const
316 DL_GroupParameters_GFP::Element DL_GroupParameters_GFP::CascadeExponentiate(
const Element &element1,
const Integer &exponent1,
const Element &element2,
const Integer &exponent2)
const
319 return ma.CascadeExponentiate(element1, exponent1, element2, exponent2);
327 unsigned int DL_GroupParameters_IntegerBased::GetDefaultSubgroupOrderSize(
unsigned int modulusSize)
const
const char * SubgroupOrder()
Integer.
Integer GetMaxExponent() const
Retrieve the maximum exponent for the group.
const Integer & SubPrime() const
Retrieve second prime.
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.
static Integer Power2(size_t e)
Exponentiates to a power of 2.
void AssignFrom(const NameValuePairs &source)
Initialize or reinitialize this key.
Classes and functions for number theoretic operations.
void DEREncode(BufferedTransformation &bt) const
Encode in DER format.
const char * Modulus()
Integer.
CRYPTOPP_DLL int Jacobi(const Integer &a, const Integer &b)
Calculate the Jacobi symbol.
void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg)
Generate a random key.
virtual Integer GetCofactor() const
Retrieves the cofactor.
const Integer & GetModulus() const
Retrieve the modulus for the group.
OID GetAlgorithmID() const
Retrieve the OID of the algorithm.
CRYPTOPP_DLL unsigned int DiscreteLogWorkFactor(unsigned int bitlength)
Estimate work factor.
bool ValidateGroup(RandomNumberGenerator &rng, unsigned int level) const
Check the group for errors.
bool ValidateGroup(RandomNumberGenerator &rng, unsigned int level) const
Check the group for errors.
Ring of congruence classes modulo n.
#define CRYPTOPP_ASSERT(exp)
Debugging and diagnostic assertion.
void DEREncode(BufferedTransformation &bt) const
Encode this object into a BufferedTransformation.
bool FastSubgroupCheckAvailable() const
Determine if subgroup membership check is fast.
CRYPTOPP_DLL RandomNumberGenerator & NullRNG()
Random Number Generator that does not produce random numbers.
Classes and functions for schemes based on Discrete Logs (DL) over GF(p)
const Integer & Generator() const
Retrieve the generator.
Class file for performing modular arithmetic.
void Generate(signed int delta, RandomNumberGenerator &rng, unsigned int pbits, unsigned qbits)
Generate a Prime and Generator.
void SimultaneousExponentiate(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const
Exponentiates a base to multiple exponents.
void SetSubgroupOrder(const Integer &q)
Set subgroup order.
Interface for random number generators.
unsigned int ByteCount() const
Determines the number of bytes required to represent the Integer.
size_t BitsToBytes(size_t bitCount)
Returns the number of 8-bit bytes or octets required for the specified number of bits.
virtual const Integer & GetModulus() const =0
Retrieve the modulus for the group.
void EncodeElement(bool reversible, const Element &element, byte *encoded) const
Encodes the element.
Utility functions for the Crypto++ library.
void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg)
Generate a random key or crypto parameters.
Integer DecodeElement(const byte *encoded, bool checkForGroupMembership) const
Decodes the element.
const T & STDMIN(const T &a, const T &b)
Replacement function for std::min.
bool IsOdd() const
Determines if the Integer is odd parity.
bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const
Get a named value.
void Initialize(const DL_GroupParameters_IntegerBased ¶ms)
Initialize a group parameters over integers.
void BERDecode(BufferedTransformation &bt)
Decode this object from a BufferedTransformation.
static const Integer & Zero()
Integer representing 0.
virtual const DL_GroupPrecomputation< Element > & GetGroupPrecomputation() const=0
Retrieves the group precomputation.
Classes and functions for working with ANS.1 objects.
ASN.1 object identifiers for algorthms and schemes.
CRYPTOPP_DLL bool GetIntValue(const char *name, int &value) const
Get a named value with type int.
Generator of prime numbers of special forms.
const char * SubgroupGenerator()
Integer, ECP::Point, or EC2N::Point.
virtual const Element & GetSubgroupGenerator() const
Retrieves the subgroup generator.
bool NotNegative() const
Determines if the Integer is non-negative.
unsigned int GetEncodedElementSize(bool reversible) const
Retrieve the encoded element's size.
unsigned int BitCount() const
Determines the number of bits required to represent the Integer.
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.
const char * SubgroupOrderSize()
int, in bits
virtual Element Exponentiate(const DL_GroupPrecomputation< Element > &group, const Integer &exponent) const =0
Exponentiates an element.
virtual Element ExponentiateElement(const Element &base, const Integer &exponent) const
Exponentiates an element.
Crypto++ library namespace.
virtual void SetModulusAndSubgroupGenerator(const Integer &p, const Integer &g)=0
Set group parameters.
bool GetValue(const char *name, T &value) const
Get a named value.
virtual bool IsIdentity(const Element &element) const=0
Determines if an element is an identity.
Library configuration file.
Combines two sets of NameValuePairs.
bool ValidateElement(unsigned int level, const Integer &element, const DL_FixedBasePrecomputation< Integer > *precomp) const
Check the element for errors.
T1 SaturatingSubtract(const T1 &a, const T2 &b)
Performs a saturating subtract clamped at 0.
Exception thrown when an invalid group element is encountered.
const Integer & Prime() const
Retrieve first prime.
CRYPTOPP_DLL bool VerifyPrime(RandomNumberGenerator &rng, const Integer &p, unsigned int level=1)
Verifies a number is probably prime.
CRYPTOPP_DLL int GetIntValueWithDefault(const char *name, int defaultValue) const
Get a named value with type int, with default.
Template implementing constructors for public key algorithm classes.
static const Integer & One()
Integer representing 1.
Interface for retrieving values given their names.
Multiple precision integer with arithmetic operations.
Multiple precision integer with arithmetic operations.