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

📄 esign.h

📁 lots Elliptic curve cryptography codes. Use Visual c++ to compile
💻 H
字号:
#ifndef CRYPTOPP_ESIGN_H#define CRYPTOPP_ESIGN_H/** \file	This file contains classes that implement the	ESIGN signature schemes as defined in IEEE P1363a.*/#include "pubkey.h"#include "integer.h"#include "asn.h"NAMESPACE_BEGIN(CryptoPP)//! _class ESIGNFunction : public TrapdoorFunction, public ASN1CryptoMaterial<PublicKey>{	typedef ESIGNFunction ThisClass;public:	void Initialize(const Integer &n, const Integer &e)		{m_n = n; m_e = e;}	// PublicKey	void BERDecode(BufferedTransformation &bt);	void DEREncode(BufferedTransformation &bt) const;	// CryptoMaterial	bool Validate(RandomNumberGenerator &rng, unsigned int level) const;	bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const;	void AssignFrom(const NameValuePairs &source);	// TrapdoorFunction	Integer ApplyFunction(const Integer &x) const;	Integer PreimageBound() const {return m_n;}	Integer ImageBound() const {return Integer::Power2(GetK());}	// non-derived	const Integer & GetModulus() const {return m_n;}	const Integer & GetPublicExponent() const {return m_e;}	void SetModulus(const Integer &n) {m_n = n;}	void SetPublicExponent(const Integer &e) {m_e = e;}protected:	unsigned int GetK() const {return m_n.BitCount()/3-1;}	Integer m_n, m_e;};//! _class InvertibleESIGNFunction : public ESIGNFunction, public RandomizedTrapdoorFunctionInverse, public PrivateKey{	typedef InvertibleESIGNFunction ThisClass;public:	void Initialize(const Integer &n, const Integer &e, const Integer &p, const Integer &q)		{m_n = n; m_e = e; m_p = p; m_q = q;}	// generate a random private key	void Initialize(RandomNumberGenerator &rng, unsigned int modulusBits)		{GenerateRandomWithKeySize(rng, modulusBits);}	void BERDecode(BufferedTransformation &bt);	void DEREncode(BufferedTransformation &bt) const;	Integer CalculateRandomizedInverse(RandomNumberGenerator &rng, const Integer &x) const;	// GeneratibleCryptoMaterial	bool Validate(RandomNumberGenerator &rng, unsigned int level) const;	bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const;	void AssignFrom(const NameValuePairs &source);	/*! parameters: (ModulusSize) */	void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg);	const Integer& GetPrime1() const {return m_p;}	const Integer& GetPrime2() const {return m_q;}	void SetPrime1(const Integer &p) {m_p = p;}	void SetPrime2(const Integer &q) {m_q = q;}protected:	Integer m_p, m_q;};//! _template <class T>class EMSA5Pad : public PK_DeterministicSignatureMessageEncodingMethod{public:	static const char *StaticAlgorithmName() {return "EMSA5";}		void ComputeMessageRepresentative(RandomNumberGenerator &rng, 		const byte *recoverableMessage, size_t recoverableMessageLength,		HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty,		byte *representative, size_t representativeBitLength) const	{		SecByteBlock digest(hash.DigestSize());		hash.Final(digest);		size_t representativeByteLength = BitsToBytes(representativeBitLength);		T mgf;		mgf.GenerateAndMask(hash, representative, representativeByteLength, digest, digest.size(), false);		if (representativeBitLength % 8 != 0)			representative[0] = (byte)Crop(representative[0], representativeBitLength % 8);	}};//! EMSA5, for use with ESIGNstruct P1363_EMSA5 : public SignatureStandard{	typedef EMSA5Pad<P1363_MGF1> SignatureMessageEncodingMethod;};struct ESIGN_Keys{	static std::string StaticAlgorithmName() {return "ESIGN";}	typedef ESIGNFunction PublicKey;	typedef InvertibleESIGNFunction PrivateKey;};//! ESIGN, as defined in IEEE P1363atemplate <class H, class STANDARD = P1363_EMSA5>struct ESIGN : public TF_SS<STANDARD, H, ESIGN_Keys>{};NAMESPACE_END#endif

⌨️ 快捷键说明

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