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
00017 class
DefaultEncryptor : public
ProxyFilter
00018 {
00019
public:
00020
DefaultEncryptor(
const char *passphrase,
BufferedTransformation *attachment = NULL);
00021
DefaultEncryptor(
const byte *passphrase,
unsigned int passphraseLength,
BufferedTransformation *attachment = NULL);
00022
00023
protected:
00024
void FirstPut(
const byte *);
00025
void LastPut(
const byte *inString,
unsigned int length);
00026
00027
private:
00028
SecByteBlock m_passphrase;
00029
CBC_Mode<Default_BlockCipher>::Encryption m_cipher;
00030 };
00031
00032
00033 class DefaultDecryptor :
public ProxyFilter
00034 {
00035
public:
00036
DefaultDecryptor(
const char *passphrase,
BufferedTransformation *attachment = NULL,
bool throwException=
true);
00037
DefaultDecryptor(
const byte *passphrase,
unsigned int 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,
unsigned int 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
00066 class DefaultEncryptorWithMAC :
public ProxyFilter
00067 {
00068
public:
00069
DefaultEncryptorWithMAC(
const char *passphrase,
BufferedTransformation *attachment = NULL);
00070
DefaultEncryptorWithMAC(
const byte *passphrase,
unsigned int passphraseLength,
BufferedTransformation *attachment = NULL);
00071
00072
protected:
00073
void FirstPut(
const byte *inString) {}
00074
void LastPut(
const byte *inString,
unsigned int length);
00075
00076
private:
00077 member_ptr<DefaultMAC> m_mac;
00078 };
00079
00080
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,
unsigned int 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,
unsigned int 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