Crypto++

- 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