00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00027
00028 #ifndef SCRAMBLER_HPP
00029 #define SCRAMBLER_HPP
00030
00031 #include "../my_config.h"
00032 #include <string>
00033 #include "infinint.hpp"
00034 #include "generic_file.hpp"
00035 #include "erreurs.hpp"
00036 #include "infinint.hpp"
00037
00038 namespace libdar
00039 {
00040
00043
00044 class scrambler : public generic_file
00045 {
00046 public:
00047 scrambler(user_interaction & dialog, const std::string & pass, generic_file & hidden_side);
00048 ~scrambler() { if(buffer != NULL) delete [] buffer; };
00049
00050 bool skip(const infinint & pos) { if(ref == NULL) throw SRC_BUG; return ref->skip(pos); };
00051 bool skip_to_eof() { if(ref==NULL) throw SRC_BUG; return ref->skip_to_eof(); };
00052 bool skip_relative(S_I x) { if(ref == NULL) throw SRC_BUG; return ref->skip_relative(x); };
00053 infinint get_position() { if(ref == NULL) throw SRC_BUG; return ref->get_position(); };
00054
00055 protected:
00056 S_I inherited_read(char *a, size_t size);
00057 S_I inherited_write(char *a, size_t size);
00058
00059 private:
00060 std::string key;
00061 U_32 len;
00062 generic_file *ref;
00063 unsigned char *buffer;
00064 size_t buf_size;
00065 };
00066
00067 }
00068
00069 #endif