00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef DDTCIPHER_H
00014 #define DDTCIPHER_H
00015
00016
00017 #ifdef HAVE_CONFIG_H
00018 #include "config.h"
00019 #endif
00020
00021 extern "C"
00022 {
00023 #include <stddef.h>
00024 #include <gcrypt.h>
00025 }
00026
00027 #include "Logger.h"
00028
00029 class DdtCipher
00030 {
00031 public:
00032 enum CipherAlgos
00033 {
00034 ALGO_NONE = GCRY_CIPHER_NONE,
00035 ALGO_IDEA = GCRY_CIPHER_IDEA,
00036 ALGO_3DES = GCRY_CIPHER_3DES,
00037 ALGO_CAST5 = GCRY_CIPHER_CAST5,
00038 ALGO_BLOWFISH = GCRY_CIPHER_BLOWFISH,
00039 ALGO_ROT13 = 666
00040 };
00041
00042 enum CipherModes
00043 {
00044 MODE_NONE = GCRY_CIPHER_MODE_NONE,
00045 MODE_ECB = GCRY_CIPHER_MODE_ECB,
00046 MODE_CFB = GCRY_CIPHER_MODE_CFB,
00047 MODE_CBC = GCRY_CIPHER_MODE_CBC,
00048 MODE_STREAM = GCRY_CIPHER_MODE_STREAM
00049 };
00050
00051 DdtCipher(CipherAlgos algo, CipherModes mode);
00052 ~DdtCipher();
00053
00054 void setKey(unsigned char *key, int size);
00055 void setIV(unsigned char *iv, int size);
00056 void decrypt(unsigned char* inputBuf, int inputLength, unsigned char* outputBuf, int outputLength);
00057 void encrypt(unsigned char* inputBuf, int inputLength, unsigned char* outputBuf, int outputLength);
00058
00059
00060 private:
00061 gcry_cipher_hd_t cipherHandle;
00062 CipherAlgos algo;
00063 CipherModes mode;
00064
00065 void strRot13(unsigned char* inputBuf, int inputLength, unsigned char* outputBuf, int outputLength);
00066
00067 };
00068
00069
00070 #endif