📄 selgamal.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 ¶ms, 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 ¶ms, 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 + -