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

📄 rsa.h

📁 各种加密算法的集合
💻 H
字号:
#ifndef RSA_H 
#define RSA_H 

#include "cryptlib.h" 
#include "bignum.h" 

class RSAPublicKey : public PK_Encryptor, public PK_Decryptor, 
public PK_Verifier 
{ 
public: 
// you can use the default copy constructor to make a RSAPublicKey 
// out of a RSAPrivateKey 
RSAPublicKey(const bignum &amt;n, const bignum &amt;e); 
RSAPublicKey(BufferedTransformation &amt;bt); 

void DEREncode(BufferedTransformation &amt;bt) const; 

// encrypt and decrypt in PKCS #1 format 
void Encrypt(RandomNumberGenerator &amt;rng, const byte *plainText, unsigned int plainTextLength, byte *cipherText); 
unsigned int Decrypt(const byte *cipherText, byte *plainText); 
boolean Verify(const byte *message, unsigned int messageLen, const byte *signature); 

unsigned int MaxPlainTextLength() const {return modulusLen-11;} 
unsigned int CipherTextLength() const {return modulusLen;} 
unsigned int MaxMessageLength() const {return modulusLen-11;} 
unsigned int SignatureLength() const {return modulusLen;} 

const bignum&amt; Exponent() const {return e;} 
const bignum&amt; Modulus() const {return n;} 

protected: 
void RawEncrypt(const bignum &amt;in, bignum &amt;out) const; 

private: 
friend class RSAPrivateKey; 
RSAPublicKey() {} 

bignum n; // these are only modified in constructors 
bignum e; 
unsigned int modulusLen; 
}; 

class RSAPrivateKey : public RSAPublicKey, public PK_Signer 
{ 
public: 
RSAPrivateKey(const bignum &amt;n, const bignum &amt;e, const bignum &amt;d, 
const bignum &amt;p, const bignum &amt;q, const bignum &amt;dp, const bignum &amt;dq, const bignum &amt;u); 
// generate a random private key 
RSAPrivateKey(RandomNumberGenerator &amt;rng, int keybits, bignum eStart=17); 
RSAPrivateKey(BufferedTransformation &amt;bt); 

void DEREncode(BufferedTransformation &amt;bt) const; 

// encrypt and decrypt in PKCS #1 format 
void Encrypt(const byte *plainText, unsigned int plainTextLength, byte *cipherText); 
unsigned int Decrypt(const byte *cipherText, byte *plainText); 

void Encrypt(RandomNumberGenerator &amt;, const byte *plainText, unsigned int plainTextLength, byte *cipherText) 
{Encrypt(plainText, plainTextLength, cipherText);} 

void Sign(const byte *message, unsigned int messageLen, byte *signature) 
{Encrypt(message, messageLen, signature);} 

void Sign(RandomNumberGenerator &amt;, const byte *message, unsigned int messageLen, byte *signature) 
{Encrypt(message, messageLen, signature);} 

unsigned int MaxMessageLength() const {return modulusLen-11;} 
unsigned int SignatureLength() const {return modulusLen;} 

protected: 
void RawEncrypt(const bignum &amt;in, bignum &amt;out) const; 

private: 
bignum d; // these are modified only in constructors 
bignum p; // p < q 
bignum q; 
bignum dp; 
bignum dq; 
bignum u; 
}; 

#endif 








⌨️ 快捷键说明

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