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

📄 selgamal.h

📁 伯克利做的SFTP安全文件传输协议
💻 H
字号:
// selgamal.h// Scott McPeak's re-implementation of ElGamal using crypto++ Integers// copyright SafeTP Development Group, Inc., 2000  Terms of use are as specified in license.txt#ifndef __SELGAMAL_H#define __SELGAMAL_H#include "trans.h"               // Trans#include "integer.h"             // Integerclass RandomNumberGenerator;     // cryptlib.h// hardcoded parameters ([0] is p, [1] is g, in ascii decimal)extern char const * const ElGamal_512bit_parameters[2];extern char const * const ElGamal_1024bit_parameters[2];extern char const * const ElGamal_1536bit_parameters[2];extern char const * const ElGamal_2048bit_parameters[2];// raw encrypt and decrypt functionsvoid ElGamal_encrypt(  Integer &a, Integer &b,               // output ciphertext  Integer const &p, Integer const &g,   // parameters  Integer const &y,                     // public key  Integer const &message,               // message < p  RandomNumberGenerator &rng);          // for choosing kvoid ElGamal_decrypt(  Integer &message,                     // output plaintext  Integer const &p, Integer const &g,   // parameters  Integer const &x,                     // private key  Integer const &a, Integer const &b);  // ciphertextvoid ElGamal_keygen(  Integer &x, Integer &y,               // output keys  Integer const &p, Integer const &g,   // parameters  RandomNumberGenerator &rng);          // for choosing x// storage and retrieval of cryptosystem parametersclass ElGamalParameters {protected:  Integer p, g;                  // system parameterspublic:  ElGamalParameters(ElGamalParameters const &obj);  ElGamalParameters(Integer const &p, Integer const &g);  ElGamalParameters(char const * const *params);     // format of parameters above  ~ElGamalParameters();  // encode and decode  void encode(DataBlock &stream) const;  ElGamalParameters(DataBlock &stream);  // selectors  Integer const &getP() const { return p; }  Integer const &getG() const { return g; }};// public key storage and retrievalclass ElGamalPublicKey : public ElGamalParameters {protected:  Integer y;                     // public keypublic:  ElGamalPublicKey(ElGamalPublicKey const &obj);  ElGamalPublicKey(Integer const &p, Integer const &g, Integer const &y);  ElGamalPublicKey(ElGamalParameters const &params, Integer const &y);  ~ElGamalPublicKey();  // encode / decode  void encode(DataBlock &stream) const;  ElGamalPublicKey(DataBlock &stream);  // selectors  Integer const &getY() const { return y; }};// transformation interface for encryptionclass ElGamalEncryptor : public Trans, public ElGamalPublicKey {  RandomNumberGenerator &rng;    // source of randomnessprivate:  void selfCheck();public:  ElGamalEncryptor(Integer const &p, Integer const &g, Integer const &y,                   RandomNumberGenerator &rng);  ElGamalEncryptor(ElGamalPublicKey const &key, RandomNumberGenerator &rng);  virtual ~ElGamalEncryptor();  // decode (encode is same as ElGamalPublicKey)  ElGamalEncryptor(DataBlock &stream, RandomNumberGenerator &rng);  // Trans interface  virtual int minInputSize() const;  virtual int maxInputSize() const;  virtual int minOutputSize(int inputSize) const;  virtual int maxOutputSize(int inputSize) const;  virtual void trans(DataBlock &data);};// private key storage and retrievalclass ElGamalPrivateKey : public ElGamalPublicKey {protected:  Integer x;              // private keypublic:  ElGamalPrivateKey(ElGamalPrivateKey const &obj);  ElGamalPrivateKey(Integer const &p, Integer const &g,                    Integer const &y, Integer const &x);  ElGamalPrivateKey(ElGamalPublicKey const &pubkey,                    Integer const &x);  ElGamalPrivateKey(ElGamalParameters const &params,                    RandomNumberGenerator &rng);    // make up a new key pair  ~ElGamalPrivateKey();  // encode / decode  void encode(DataBlock &stream) const;  ElGamalPrivateKey(DataBlock &stream);  // selectors  Integer const &getX() const;};// decryption as transformationclass ElGamalDecryptor : public Trans, public ElGamalPrivateKey {public:  ElGamalDecryptor(Integer const &p, Integer const &g,                   Integer const &y, Integer const &x);  ElGamalDecryptor(ElGamalPrivateKey const &privkey);  ~ElGamalDecryptor();  // decode  ElGamalDecryptor(DataBlock &stream);  // Trans interface  virtual int minInputSize() const;  virtual int maxInputSize() const;  virtual int minOutputSize(int inputSize) const;  virtual int maxOutputSize(int inputSize) const;  virtual void trans(DataBlock &data);};#endif // __SELGAMAL_H

⌨️ 快捷键说明

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