eprecomp.h

来自「lots Elliptic curve cryptography codes. 」· C头文件 代码 · 共 76 行

H
76
字号
#ifndef CRYPTOPP_EPRECOMP_H#define CRYPTOPP_EPRECOMP_H#include "integer.h"#include "algebra.h"#include <vector>NAMESPACE_BEGIN(CryptoPP)template <class T>class DL_GroupPrecomputation{public:	typedef T Element;	virtual bool NeedConversions() const {return false;}	virtual Element ConvertIn(const Element &v) const {return v;}	virtual Element ConvertOut(const Element &v) const {return v;}	virtual const AbstractGroup<Element> & GetGroup() const =0;	virtual Element BERDecodeElement(BufferedTransformation &bt) const =0;	virtual void DEREncodeElement(BufferedTransformation &bt, const Element &P) const =0;};template <class T>class DL_FixedBasePrecomputation{public:	typedef T Element;	virtual bool IsInitialized() const =0;	virtual void SetBase(const DL_GroupPrecomputation<Element> &group, const Element &base) =0;	virtual const Element & GetBase(const DL_GroupPrecomputation<Element> &group) const =0;	virtual void Precompute(const DL_GroupPrecomputation<Element> &group, unsigned int maxExpBits, unsigned int storage) =0;	virtual void Load(const DL_GroupPrecomputation<Element> &group, BufferedTransformation &storedPrecomputation) =0;	virtual void Save(const DL_GroupPrecomputation<Element> &group, BufferedTransformation &storedPrecomputation) const =0;	virtual Element Exponentiate(const DL_GroupPrecomputation<Element> &group, const Integer &exponent) const =0;	virtual Element CascadeExponentiate(const DL_GroupPrecomputation<Element> &group, const Integer &exponent, const DL_FixedBasePrecomputation<Element> &pc2, const Integer &exponent2) const =0;};template <class T>class DL_FixedBasePrecomputationImpl : public DL_FixedBasePrecomputation<T>{public:	typedef T Element;	DL_FixedBasePrecomputationImpl() : m_windowSize(0) {}	// DL_FixedBasePrecomputation	bool IsInitialized() const		{return !m_bases.empty();}	void SetBase(const DL_GroupPrecomputation<Element> &group, const Element &base);	const Element & GetBase(const DL_GroupPrecomputation<Element> &group) const		{return group.NeedConversions() ? m_base : m_bases[0];}	void Precompute(const DL_GroupPrecomputation<Element> &group, unsigned int maxExpBits, unsigned int storage);	void Load(const DL_GroupPrecomputation<Element> &group, BufferedTransformation &storedPrecomputation);	void Save(const DL_GroupPrecomputation<Element> &group, BufferedTransformation &storedPrecomputation) const;	Element Exponentiate(const DL_GroupPrecomputation<Element> &group, const Integer &exponent) const;	Element CascadeExponentiate(const DL_GroupPrecomputation<Element> &group, const Integer &exponent, const DL_FixedBasePrecomputation<Element> &pc2, const Integer &exponent2) const;private:	void PrepareCascade(const DL_GroupPrecomputation<Element> &group, std::vector<BaseAndExponent<Element> > &eb, const Integer &exponent) const;	Element m_base;	unsigned int m_windowSize;	Integer m_exponentBase;			// what base to represent the exponent in	std::vector<Element> m_bases;	// precalculated bases};NAMESPACE_END#ifdef CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES#include "eprecomp.cpp"#endif#endif

⌨️ 快捷键说明

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