⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ec2n.h

📁 各种加密算法的集合
💻 H
字号:
#ifndef CRYPTOPP_EC2N_H 
#define CRYPTOPP_EC2N_H 
 
#include "gf2n.h" 
#include "eprecomp.h" 
#include "smartptr.h" 
 
NAMESPACE_BEGIN(CryptoPP) 
 
struct EC2NPoint 
{ 
	EC2NPoint() : identity(true) {} 
	EC2NPoint(const PolynomialMod2 &x, const PolynomialMod2 &y) 
		: identity(false), x(x), y(y) {} 
 
	bool operator==(const EC2NPoint &t) const 
		{return (identity && t.identity) || (!identity && !t.identity && x==t.x && y==t.y);} 
	bool operator< (const EC2NPoint &t) const 
		{return identity ? !t.identity : (t.identity && (x<t.x || (x<=t.x && y<t.y)));} 
 
	bool identity; 
	PolynomialMod2 x, y; 
}; 
 
class EC2N : public AbstractGroup<EC2NPoint> 
{ 
public: 
	typedef GF2N Field; 
	typedef Field::Element FieldElement; 
 
	typedef EC2NPoint Point; 
 
	EC2N(const Field &field, const Field::Element &a, const Field::Element &b) 
		: field(field), a(a), b(b) {} 
 
	bool Equal(const Point &P, const Point &Q) const; 
	Point Zero() const {return Point();} 
	Point Inverse(const Point &P) const; 
	Point Add(const Point &P, const Point &Q) const; 
	Point Double(const Point &P) const; 
 
	Point Multiply(const Integer &k, const Point &P) const 
		{return IntMultiply(P, k);} 
	Point CascadeMultiply(const Integer &k1, const Point &P, const Integer &k2, const Point &Q) const 
		{return CascadeIntMultiply(P, k1, Q, k2);} 
 
	bool ValidateParameters(RandomNumberGenerator &rng) const; 
	bool VerifyPoint(const Point &P) const; 
 
	unsigned int EncodedPointSize() const 
		{return 1+2*field.MaxElementByteLength();} 
	Point DecodePoint(const byte *encodedPoint) const; 
	void EncodePoint(byte *encodedPoint, const Point &P) const; 
 
	Integer FieldSize() const {return Integer::Power2(field.MaxElementBitLength());} 
	const Field & GetField() const {return field;} 
	const FieldElement & GetA() const {return a;} 
	const FieldElement & GetB() const {return b;} 
 
private: 
	Field field; 
	FieldElement a, b; 
}; 
 
template <class T> class EcPrecomputation; 
 
class EcPrecomputation<EC2N> 
{ 
public: 
	EcPrecomputation(); 
	EcPrecomputation(const EcPrecomputation<EC2N> &ecp); 
	EcPrecomputation(const EC2N &ecIn, const EC2N::Point &base, unsigned int maxExpBits, unsigned int storage); 
	~EcPrecomputation(); 
 
	void Precompute(const EC2N::Point &base, unsigned int maxExpBits, unsigned int storage); 
	void Load(BufferedTransformation &storedPrecomputation); 
	void Save(BufferedTransformation &storedPrecomputation) const; 
 
	EC2N::Point Multiply(const Integer &exponent) const; 
	EC2N::Point CascadeMultiply(const Integer &exponent, const EcPrecomputation<EC2N> &pc2, const Integer &exponent2) const; 
 
private: 
	member_ptr<EC2N> ec; 
	member_ptr< ExponentiationPrecomputation<EC2N> > ep; 
}; 
 
NAMESPACE_END 
 
#endif 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -