• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

default.h

00001 #ifndef CRYPTOPP_DEFAULT_H
00002 #define CRYPTOPP_DEFAULT_H
00003 
00004 #include "sha.h"
00005 #include "hmac.h"
00006 #include "des.h"
00007 #include "filters.h"
00008 #include "modes.h"
00009 
00010 NAMESPACE_BEGIN(CryptoPP)
00011 
00012 typedef DES_EDE2 Default_BlockCipher;
00013 typedef SHA DefaultHashModule;
00014 typedef HMAC<DefaultHashModule> DefaultMAC;
00015 
00016 //! Password-Based Encryptor using DES-EDE2
00017 class DefaultEncryptor : public ProxyFilter
00018 {
00019 public:
00020     DefaultEncryptor(const char *passphrase, BufferedTransformation *attachment = NULL);
00021     DefaultEncryptor(const byte *passphrase, size_t passphraseLength, BufferedTransformation *attachment = NULL);
00022 
00023 protected:
00024     void FirstPut(const byte *);
00025     void LastPut(const byte *inString, size_t length);
00026 
00027 private:
00028     SecByteBlock m_passphrase;
00029     CBC_Mode<Default_BlockCipher>::Encryption m_cipher;
00030 };
00031 
00032 //! Password-Based Decryptor using DES-EDE2
00033 class DefaultDecryptor : public ProxyFilter
00034 {
00035 public:
00036     DefaultDecryptor(const char *passphrase, BufferedTransformation *attachment = NULL, bool throwException=true);
00037     DefaultDecryptor(const byte *passphrase, size_t passphraseLength, BufferedTransformation *attachment = NULL, bool throwException=true);
00038 
00039     class Err : public Exception
00040     {
00041     public:
00042         Err(const std::string &s) 
00043             : Exception(DATA_INTEGRITY_CHECK_FAILED, s) {}
00044     };
00045     class KeyBadErr : public Err {public: KeyBadErr() : Err("DefaultDecryptor: cannot decrypt message with this passphrase") {}};
00046 
00047     enum State {WAITING_FOR_KEYCHECK, KEY_GOOD, KEY_BAD};
00048     State CurrentState() const {return m_state;}
00049 
00050 protected:
00051     void FirstPut(const byte *inString);
00052     void LastPut(const byte *inString, size_t length);
00053 
00054     State m_state;
00055 
00056 private:
00057     void CheckKey(const byte *salt, const byte *keyCheck);
00058 
00059     SecByteBlock m_passphrase;
00060     CBC_Mode<Default_BlockCipher>::Decryption m_cipher;
00061     member_ptr<FilterWithBufferedInput> m_decryptor;
00062     bool m_throwException;
00063 };
00064 
00065 //! Password-Based Encryptor using DES-EDE2 and HMAC/SHA-1
00066 class DefaultEncryptorWithMAC : public ProxyFilter
00067 {
00068 public:
00069     DefaultEncryptorWithMAC(const char *passphrase, BufferedTransformation *attachment = NULL);
00070     DefaultEncryptorWithMAC(const byte *passphrase, size_t passphraseLength, BufferedTransformation *attachment = NULL);
00071 
00072 protected:
00073     void FirstPut(const byte *inString) {}
00074     void LastPut(const byte *inString, size_t length);
00075 
00076 private:
00077     member_ptr<DefaultMAC> m_mac;
00078 };
00079 
00080 //! Password-Based Decryptor using DES-EDE2 and HMAC/SHA-1
00081 class DefaultDecryptorWithMAC : public ProxyFilter
00082 {
00083 public:
00084     class MACBadErr : public DefaultDecryptor::Err {public: MACBadErr() : DefaultDecryptor::Err("DefaultDecryptorWithMAC: MAC check failed") {}};
00085 
00086     DefaultDecryptorWithMAC(const char *passphrase, BufferedTransformation *attachment = NULL, bool throwException=true);
00087     DefaultDecryptorWithMAC(const byte *passphrase, size_t passphraseLength, BufferedTransformation *attachment = NULL, bool throwException=true);
00088 
00089     DefaultDecryptor::State CurrentState() const;
00090     bool CheckLastMAC() const;
00091 
00092 protected:
00093     void FirstPut(const byte *inString) {}
00094     void LastPut(const byte *inString, size_t length);
00095 
00096 private:
00097     member_ptr<DefaultMAC> m_mac;
00098     HashVerifier *m_hashVerifier;
00099     bool m_throwException;
00100 };
00101 
00102 NAMESPACE_END
00103 
00104 #endif

Generated on Tue Jun 30 2015 19:07:04 for Crypto++ by  doxygen 1.7.1