diff options
Diffstat (limited to 'core/io/file_access_encrypted.h')
-rw-r--r-- | core/io/file_access_encrypted.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/core/io/file_access_encrypted.h b/core/io/file_access_encrypted.h new file mode 100644 index 0000000000..90796eb2e9 --- /dev/null +++ b/core/io/file_access_encrypted.h @@ -0,0 +1,63 @@ +#ifndef FILE_ACCESS_ENCRYPTED_H +#define FILE_ACCESS_ENCRYPTED_H + + +#include "os/file_access.h" + +class FileAccessEncrypted : public FileAccess { +public: + + enum Mode { + MODE_READ, + MODE_WRITE_AES256 + }; + +private: + + + Mode mode; + Vector<uint8_t> key; + bool writing; + FileAccess *file; + size_t base; + size_t length; + Vector<uint8_t> data; + size_t pos; + + +public: + + + + + Error open_and_parse(FileAccess *p_base,const Vector<uint8_t>& p_key,Mode p_mode); + Error open_and_parse_password(FileAccess *p_base,const String& p_key,Mode p_mode); + + virtual Error _open(const String& p_path, int p_mode_flags); ///< open a file + virtual void close(); ///< close a file + virtual bool is_open() const; ///< true when file is open + + virtual void seek(size_t p_position); ///< seek to a given position + virtual void seek_end(int64_t p_position=0); ///< seek from the end of file + virtual size_t get_pos() const; ///< get position in the file + virtual size_t get_len() const; ///< get size of the file + + virtual bool eof_reached() const; ///< reading passed EOF + + virtual uint8_t get_8() const; ///< get a byte + virtual int get_buffer(uint8_t *p_dst, int p_length) const; + + virtual Error get_error() const; ///< get last error + + virtual void store_8(uint8_t p_dest); ///< store a byte + virtual void store_buffer(const uint8_t *p_src,int p_length); ///< store an array of bytes + + virtual bool file_exists(const String& p_name); ///< return true if a file exists + + virtual uint64_t _get_modified_time(const String& p_file); + + FileAccessEncrypted(); + ~FileAccessEncrypted(); +}; + +#endif // FILE_ACCESS_ENCRYPTED_H |