00001
00002
00003
00004
00005
00006
00007
#ifndef __WVTRIPLEDES_H
00008
#define __WVTRIPLEDES_H
00009
00010
#include "wvencoder.h"
00011
#include "wvencoderstream.h"
00012
#include "wvcrypto.h"
00013
00014
#include <openssl/des.h>
00015
00016
00017
00018
00019
00020
00021
00022 class WvTripleDESEncoder :
public WvCryptoEncoder
00023 {
00024
public:
00025 enum Mode {
00026
ECBEncrypt,
00027
ECBDecrypt,
00028
CFBEncrypt,
00029
CFBDecrypt,
00030
CBCEncrypt,
00031
CBCDecrypt
00032 };
00033
00034
00035
00036
00037
00038
00039
00040
WvTripleDESEncoder(Mode mode,
const void *key1,
const void *key2,
00041
const void *key3);
00042
00043
00044
00045
00046
00047
00048
00049
00050 virtual void setkey(
const void *key)
00051 {
00052 setkey(key, (
unsigned char*)key+DES_KEY_SZ,
00053 (
unsigned char *)key+(DES_KEY_SZ*2));
00054
return;
00055 }
00056
virtual void setkey(
const void *_key1,
const void *_key2,
00057
const void *_key3);
00058
00059
00060
00061
00062
00063
00064
virtual void setiv(
const void *iv);
00065
00066
protected:
00067
virtual bool _encode(
WvBuf &in,
WvBuf &out,
bool flush);
00068
virtual bool _reset();
00069
00070
00071
private:
00072 Mode mode;
00073 des_cblock key;
00074 des_key_schedule deskey1;
00075 des_key_schedule deskey2;
00076 des_key_schedule deskey3;
00077 des_cblock ivec;
00078
int ivecoff;
00079 };
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091 class WvTripleDESStream :
public WvEncoderStream
00092 {
00093
public:
00094
WvTripleDESStream(
WvStream *_cloned,
const void *_key1,
00095
const void *_key2,
const void *_key3,
00096 WvTripleDESEncoder::Mode readmode = WvTripleDESEncoder::CFBDecrypt,
00097 WvTripleDESEncoder::Mode writemode = WvTripleDESEncoder::CFBEncrypt);
00098 virtual ~WvTripleDESStream() { }
00099 };
00100
00101
#endif // __WVTRIPLEDES_H