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

📄 pubkey.h

📁 lots Elliptic curve cryptography codes. Use Visual c++ to compile
💻 H
📖 第 1 页 / 共 5 页
字号:
public:	void InputRecoverableMessage(PK_MessageAccumulator &messageAccumulator, const byte *recoverableMessage, size_t recoverableMessageLength) const;	size_t SignAndRestart(RandomNumberGenerator &rng, PK_MessageAccumulator &messageAccumulator, byte *signature, bool restart=true) const;};//! _class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TF_VerifierBase : public TF_SignatureSchemeBase<PK_Verifier, TF_Base<TrapdoorFunction, PK_SignatureMessageEncodingMethod> >{public:	void InputSignature(PK_MessageAccumulator &messageAccumulator, const byte *signature, size_t signatureLength) const;	bool VerifyAndRestart(PK_MessageAccumulator &messageAccumulator) const;	DecodingResult RecoverAndRestart(byte *recoveredMessage, PK_MessageAccumulator &recoveryAccumulator) const;};// ********************************************************//! _template <class T1, class T2, class T3>struct TF_CryptoSchemeOptions{	typedef T1 AlgorithmInfo;	typedef T2 Keys;	typedef typename Keys::PrivateKey PrivateKey;	typedef typename Keys::PublicKey PublicKey;	typedef T3 MessageEncodingMethod;};//! _template <class T1, class T2, class T3, class T4>struct TF_SignatureSchemeOptions : public TF_CryptoSchemeOptions<T1, T2, T3>{	typedef T4 HashFunction;};//! _template <class BASE, class SCHEME_OPTIONS, class KEY_CLASS>class CRYPTOPP_NO_VTABLE TF_ObjectImplBase : public AlgorithmImpl<BASE, typename SCHEME_OPTIONS::AlgorithmInfo>{public:	typedef SCHEME_OPTIONS SchemeOptions;	typedef KEY_CLASS KeyClass;	PublicKey & AccessPublicKey() {return AccessKey();}	const PublicKey & GetPublicKey() const {return GetKey();}	PrivateKey & AccessPrivateKey() {return AccessKey();}	const PrivateKey & GetPrivateKey() const {return GetKey();}	virtual const KeyClass & GetKey() const =0;	virtual KeyClass & AccessKey() =0;	const KeyClass & GetTrapdoorFunction() const {return GetKey();}	PK_MessageAccumulator * NewSignatureAccumulator(RandomNumberGenerator &rng) const	{		return new PK_MessageAccumulatorImpl<CPP_TYPENAME SCHEME_OPTIONS::HashFunction>;	}	PK_MessageAccumulator * NewVerificationAccumulator() const	{		return new PK_MessageAccumulatorImpl<CPP_TYPENAME SCHEME_OPTIONS::HashFunction>;	}protected:	const typename BASE::MessageEncodingInterface & GetMessageEncodingInterface() const 		{return Singleton<CPP_TYPENAME SCHEME_OPTIONS::MessageEncodingMethod>().Ref();}	const TrapdoorFunctionBounds & GetTrapdoorFunctionBounds() const 		{return GetKey();}	const typename BASE::TrapdoorFunctionInterface & GetTrapdoorFunctionInterface() const 		{return GetKey();}	// for signature scheme	HashIdentifier GetHashIdentifier() const	{        typedef CPP_TYPENAME SchemeOptions::MessageEncodingMethod::HashIdentifierLookup::template HashIdentifierLookup2<CPP_TYPENAME SchemeOptions::HashFunction> L;        return L::Lookup();	}	size_t GetDigestSize() const	{		typedef CPP_TYPENAME SchemeOptions::HashFunction H;		return H::DIGESTSIZE;	}};//! _template <class BASE, class SCHEME_OPTIONS, class KEY>class TF_ObjectImplExtRef : public TF_ObjectImplBase<BASE, SCHEME_OPTIONS, KEY>{public:	TF_ObjectImplExtRef(const KEY *pKey = NULL) : m_pKey(pKey) {}	void SetKeyPtr(const KEY *pKey) {m_pKey = pKey;}	const KEY & GetKey() const {return *m_pKey;}	KEY & AccessKey() {throw NotImplemented("TF_ObjectImplExtRef: cannot modify refererenced key");}private:	const KEY * m_pKey;};//! _template <class BASE, class SCHEME_OPTIONS, class KEY_CLASS>class CRYPTOPP_NO_VTABLE TF_ObjectImpl : public TF_ObjectImplBase<BASE, SCHEME_OPTIONS, KEY_CLASS>{public:	typedef KEY_CLASS KeyClass;	const KeyClass & GetKey() const {return m_trapdoorFunction;}	KeyClass & AccessKey() {return m_trapdoorFunction;}private:	KeyClass m_trapdoorFunction;};//! _template <class SCHEME_OPTIONS>class TF_DecryptorImpl : public TF_ObjectImpl<TF_DecryptorBase, SCHEME_OPTIONS, typename SCHEME_OPTIONS::PrivateKey>{};//! _template <class SCHEME_OPTIONS>class TF_EncryptorImpl : public TF_ObjectImpl<TF_EncryptorBase, SCHEME_OPTIONS, typename SCHEME_OPTIONS::PublicKey>{};//! _template <class SCHEME_OPTIONS>class TF_SignerImpl : public TF_ObjectImpl<TF_SignerBase, SCHEME_OPTIONS, typename SCHEME_OPTIONS::PrivateKey>{};//! _template <class SCHEME_OPTIONS>class TF_VerifierImpl : public TF_ObjectImpl<TF_VerifierBase, SCHEME_OPTIONS, typename SCHEME_OPTIONS::PublicKey>{};// ********************************************************//! _class CRYPTOPP_NO_VTABLE MaskGeneratingFunction{public:	virtual ~MaskGeneratingFunction() {}	virtual void GenerateAndMask(HashTransformation &hash, byte *output, size_t outputLength, const byte *input, size_t inputLength, bool mask = true) const =0;};CRYPTOPP_DLL void CRYPTOPP_API P1363_MGF1KDF2_Common(HashTransformation &hash, byte *output, size_t outputLength, const byte *input, size_t inputLength, const byte *derivationParams, size_t derivationParamsLength, bool mask, unsigned int counterStart);//! _class P1363_MGF1 : public MaskGeneratingFunction{public:	static const char * CRYPTOPP_API StaticAlgorithmName() {return "MGF1";}	void GenerateAndMask(HashTransformation &hash, byte *output, size_t outputLength, const byte *input, size_t inputLength, bool mask = true) const	{		P1363_MGF1KDF2_Common(hash, output, outputLength, input, inputLength, NULL, 0, mask, 0);	}};// ********************************************************//! _template <class H>class P1363_KDF2{public:	static void CRYPTOPP_API DeriveKey(byte *output, size_t outputLength, const byte *input, size_t inputLength, const byte *derivationParams, size_t derivationParamsLength)	{		H h;		P1363_MGF1KDF2_Common(h, output, outputLength, input, inputLength, derivationParams, derivationParamsLength, false, 1);	}};// ********************************************************//! to be thrown by DecodeElement and AgreeWithStaticPrivateKeyclass DL_BadElement : public InvalidDataFormat{public:	DL_BadElement() : InvalidDataFormat("CryptoPP: invalid group element") {}};//! interface for DL group parameterstemplate <class T>class CRYPTOPP_NO_VTABLE DL_GroupParameters : public CryptoParameters{	typedef DL_GroupParameters<T> ThisClass;	public:	typedef T Element;	DL_GroupParameters() : m_validationLevel(0) {}	// CryptoMaterial	bool Validate(RandomNumberGenerator &rng, unsigned int level) const	{		if (!GetBasePrecomputation().IsInitialized())			return false;		if (m_validationLevel > level)			return true;		bool pass = ValidateGroup(rng, level);		pass = pass && ValidateElement(level, GetSubgroupGenerator(), &GetBasePrecomputation());		m_validationLevel = pass ? level+1 : 0;		return pass;	}	bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const	{		return GetValueHelper(this, name, valueType, pValue)			CRYPTOPP_GET_FUNCTION_ENTRY(SubgroupOrder)			CRYPTOPP_GET_FUNCTION_ENTRY(SubgroupGenerator)			;	}	bool SupportsPrecomputation() const {return true;}	void Precompute(unsigned int precomputationStorage=16)	{		AccessBasePrecomputation().Precompute(GetGroupPrecomputation(), GetSubgroupOrder().BitCount(), precomputationStorage);	}	void LoadPrecomputation(BufferedTransformation &storedPrecomputation)	{		AccessBasePrecomputation().Load(GetGroupPrecomputation(), storedPrecomputation);		m_validationLevel = 0;	}	void SavePrecomputation(BufferedTransformation &storedPrecomputation) const	{		GetBasePrecomputation().Save(GetGroupPrecomputation(), storedPrecomputation);	}	// non-inherited	virtual const Element & GetSubgroupGenerator() const {return GetBasePrecomputation().GetBase(GetGroupPrecomputation());}	virtual void SetSubgroupGenerator(const Element &base) {AccessBasePrecomputation().SetBase(GetGroupPrecomputation(), base);}	virtual Element ExponentiateBase(const Integer &exponent) const	{		return GetBasePrecomputation().Exponentiate(GetGroupPrecomputation(), exponent);	}	virtual Element ExponentiateElement(const Element &base, const Integer &exponent) const	{		Element result;		SimultaneousExponentiate(&result, base, &exponent, 1);		return result;	}	virtual const DL_GroupPrecomputation<Element> & GetGroupPrecomputation() const =0;	virtual const DL_FixedBasePrecomputation<Element> & GetBasePrecomputation() const =0;	virtual DL_FixedBasePrecomputation<Element> & AccessBasePrecomputation() =0;	virtual const Integer & GetSubgroupOrder() const =0;	// order of subgroup generated by base element	virtual Integer GetMaxExponent() const =0;	virtual Integer GetGroupOrder() const {return GetSubgroupOrder()*GetCofactor();}	// one of these two needs to be overriden	virtual Integer GetCofactor() const {return GetGroupOrder()/GetSubgroupOrder();}	virtual unsigned int GetEncodedElementSize(bool reversible) const =0;	virtual void EncodeElement(bool reversible, const Element &element, byte *encoded) const =0;	virtual Element DecodeElement(const byte *encoded, bool checkForGroupMembership) const =0;	virtual Integer ConvertElementToInteger(const Element &element) const =0;	virtual bool ValidateGroup(RandomNumberGenerator &rng, unsigned int level) const =0;	virtual bool ValidateElement(unsigned int level, const Element &element, const DL_FixedBasePrecomputation<Element> *precomp) const =0;	virtual bool FastSubgroupCheckAvailable() const =0;	virtual bool IsIdentity(const Element &element) const =0;	virtual void SimultaneousExponentiate(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const =0;protected:	void ParametersChanged() {m_validationLevel = 0;}private:	mutable unsigned int m_validationLevel;};//! _template <class GROUP_PRECOMP, class BASE_PRECOMP = DL_FixedBasePrecomputationImpl<CPP_TYPENAME GROUP_PRECOMP::Element>, class BASE = DL_GroupParameters<CPP_TYPENAME GROUP_PRECOMP::Element> >class DL_GroupParametersImpl : public BASE{public:	typedef GROUP_PRECOMP GroupPrecomputation;	typedef typename GROUP_PRECOMP::Element Element;	typedef BASE_PRECOMP BasePrecomputation;		const DL_GroupPrecomputation<Element> & GetGroupPrecomputation() const {return m_groupPrecomputation;}	const DL_FixedBasePrecomputation<Element> & GetBasePrecomputation() const {return m_gpc;}	DL_FixedBasePrecomputation<Element> & AccessBasePrecomputation() {return m_gpc;}protected:	GROUP_PRECOMP m_groupPrecomputation;	BASE_PRECOMP m_gpc;};//! _template <class T>class CRYPTOPP_NO_VTABLE DL_Key{public:	virtual const DL_GroupParameters<T> & GetAbstractGroupParameters() const =0;	virtual DL_GroupParameters<T> & AccessAbstractGroupParameters() =0;};//! interface for DL public keystemplate <class T>class CRYPTOPP_NO_VTABLE DL_PublicKey : public DL_Key<T>{	typedef DL_PublicKey<T> ThisClass;public:	typedef T Element;	bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const	{		return GetValueHelper(this, name, valueType, pValue, &this->GetAbstractGroupParameters())				CRYPTOPP_GET_FUNCTION_ENTRY(PublicElement);	}	void AssignFrom(const NameValuePairs &source);		// non-inherited	virtual const Element & GetPublicElement() const {return GetPublicPrecomputation().GetBase(this->GetAbstractGroupParameters().GetGroupPrecomputation());}	virtual void SetPublicElement(const Element &y) {AccessPublicPrecomputation().SetBase(this->GetAbstractGroupParameters().GetGroupPrecomputation(), y);}	virtual Element ExponentiatePublicElement(const Integer &exponent) const	{		const DL_GroupParameters<T> &params = this->GetAbstractGroupParameters();		return GetPublicPrecomputation().Exponentiate(params.GetGroupPrecomputation(), exponent);	}	virtual Element CascadeExponentiateBaseAndPublicElement(const Integer &baseExp, const Integer &publicExp) const	{		const DL_GroupParameters<T> &params = this->GetAbstractGroupParameters();		return params.GetBasePrecomputation().CascadeExponentiate(params.GetGroupPrecomputation(), baseExp, GetPublicPrecomputation(), publicExp);	}	virtual const DL_FixedBasePrecomputation<T> & GetPublicPrecomputation() const =0;	virtual DL_FixedBasePrecomputation<T> & AccessPublicPrecomputation() =0;};

⌨️ 快捷键说明

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