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

📄 dsa.h

📁 各种加密算法的集合
💻 H
字号:
#ifndef CRYPTOPP_DSA_H 
#define CRYPTOPP_DSA_H 
 
#include "pubkey.h" 
#include "modexppc.h" 
#include "sha.h" 
 
NAMESPACE_BEGIN(CryptoPP) 
 
const int MIN_DSA_PRIME_LENGTH = 512; 
const int MAX_DSA_PRIME_LENGTH = 1024; 
 
// both seedLength and primeLength are in bits, but seedLength should 
// be a multiple of 8 
bool GenerateDSAPrimes(byte *seed, unsigned int seedLength, int &counter, 
						  Integer &p, unsigned int primeLength, Integer &q); 
 
class DSABase : virtual public PK_Precomputation, virtual public DigestSignatureSystem 
{ 
public: 
	void Precompute(unsigned int precomputationStorage=16); 
	void LoadPrecomputation(BufferedTransformation &storedPrecomputation); 
	void SavePrecomputation(BufferedTransformation &storedPrecomputation) const; 
	unsigned int MaxDigestLength() const {return UINT_MAX;} 
	unsigned int DigestSignatureLength() const {return 2*q.ByteCount();} 
protected: 
	DSABase() {} 
	DSABase(const Integer &p, const Integer &q, const Integer &g, const Integer &y); 
	Integer EncodeDigest(const byte *digest, unsigned int digestLen) const; 
	Integer p, q, g, y; 
	ModExpPrecomputation gpc, ypc; 
}; 
 
class SHA; 
 
class DSAPrivateKey : public DSABase, public SignerTemplate<DigestSigner, SHA>, public PK_WithPrecomputation<PK_Signer> 
{ 
public: 
	DSAPrivateKey(const Integer &p, const Integer &q, const Integer &g, const Integer &y, const Integer &x); 
 
	// generate a random private key 
	DSAPrivateKey(RandomNumberGenerator &rng, unsigned int keybits); 
 
	// generate a random private key, given p, q, and g 
	DSAPrivateKey(RandomNumberGenerator &rng, const Integer &p, const Integer &q, const Integer &g); 
 
	// load a previously generated key 
	DSAPrivateKey(BufferedTransformation &storedKey); 
 
	void DEREncode(BufferedTransformation &bt) const; 
 
	void SignDigest(RandomNumberGenerator &rng, const byte *digest, unsigned int digestLen, byte *signature) const; 
 
	// exposed for validation testing 
	void RawSign(const Integer &k, const Integer &h, Integer &r, Integer &s) const; 
 
protected: 
	Integer x; 
}; 
 
class DSAPublicKey : public DSABase, public VerifierTemplate<DigestVerifier, SHA>, public PK_WithPrecomputation<PK_Verifier> 
{ 
public: 
	DSAPublicKey(const Integer &p, const Integer &q, const Integer &g, const Integer &y); 
 
	// create a matching public key from a private key 
	DSAPublicKey(const DSAPrivateKey &priv); 
 
	// load a previously generated key 
	DSAPublicKey(BufferedTransformation &storedKey); 
 
	void DEREncode(BufferedTransformation &bt) const; 
 
	bool VerifyDigest(const byte *digest, unsigned int digestLen, const byte *signature) const; 
 
	// exposed for validation testing 
	bool RawVerify(const Integer &h, const Integer &r, const Integer &s) const; 
}; 
 
NAMESPACE_END 
 
#endif 

⌨️ 快捷键说明

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