Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef CIPHERSTREAM_H_
00009 #define CIPHERSTREAM_H_
00010
00011 #include "ibrcommon/Exceptions.h"
00012 #include <streambuf>
00013 #include <iostream>
00014
00015 namespace ibrcommon
00016 {
00017 class CipherStream : public std::basic_streambuf<char, std::char_traits<char> >, public std::ostream
00018 {
00019 public:
00020 enum CipherMode
00021 {
00022 CIPHER_ENCRYPT = 0,
00023 CIPHER_DECRYPT = 1
00024 };
00025
00026 CipherStream(std::ostream &stream, const CipherMode mode = CIPHER_DECRYPT, const size_t buffer = 2048);
00027 virtual ~CipherStream();
00028
00035 void encrypt(std::iostream& stream);
00036
00045 void decrypt(std::iostream& stream);
00046
00047 protected:
00048 virtual void encrypt(char *buf, const size_t size) = 0;
00049 virtual void decrypt(char *buf, const size_t size) = 0;
00050 virtual void encrypt_final() {};
00051 virtual void decrypt_final() {};
00052
00053 virtual int sync();
00054 virtual std::char_traits<char>::int_type overflow(std::char_traits<char>::int_type = std::char_traits<char>::eof());
00055
00056 CipherMode _mode;
00057
00058 private:
00059 std::ostream &_stream;
00060
00061
00062 char *data_buf_;
00063
00064
00065 size_t data_size_;
00066 };
00067 }
00068
00069 #endif