Crypto++
8.3
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);
167 CRYPTOPP_ASSERT(GetFieldType() == 1 ? g.IsPositive() : g.NotNegative());
168 pass = pass && GetFieldType() == 1 ? g.IsPositive() : g.NotNegative();
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);
267 q = ComputeGroupOrder(p) / 2;
270 g.BERDecode(parameters);
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();
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.
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.
void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg)
Generate a random key.
void SimultaneousExponentiate(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const
Exponentiates a base to multiple exponents in the ring.
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.
static const Integer &CRYPTOPP_API One()
Integer representing 1.
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.
void MessageEnd()
Signals the end of messages to the object.
#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.
Classes and functions for schemes based on Discrete Logs (DL) over GF(p)
const Integer & Generator() const
Retrieve the generator.
CRYPTOPP_DLL bool CRYPTOPP_API VerifyPrime(RandomNumberGenerator &rng, const Integer &p, unsigned int level=1)
Verifies a number is probably prime.
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.
static Integer CRYPTOPP_API Power2(size_t e)
Exponentiates to a power of 2.
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.
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.
void MessageEnd()
Signals the end of messages to the object.
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.
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.
CRYPTOPP_DLL int CRYPTOPP_API Jacobi(const Integer &a, const Integer &b)
Calculate the Jacobi symbol.
CRYPTOPP_DLL unsigned int CRYPTOPP_API DiscreteLogWorkFactor(unsigned int bitlength)
Estimate work factor.
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.
static const Integer &CRYPTOPP_API Zero()
Integer representing 0.
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.
CRYPTOPP_DLL RandomNumberGenerator &CRYPTOPP_API NullRNG()
Random Number Generator that does not produce random numbers.
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 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.
Interface for retrieving values given their names.
bool EndReached() const
Determine end of stream.
Multiple precision integer with arithmetic operations.
Multiple precision integer with arithmetic operations.