#pragma once #if !defined(ARCADIA_BUILD) #include #endif #if USE_SSL #include #include namespace DB { /// Encrypts data and writes the encrypted data to the underlying write buffer. class WriteBufferFromEncryptedFile : public WriteBufferFromFileBase { public: /// `old_file_size` should be set to non-zero if we're going to append an existing file. WriteBufferFromEncryptedFile( size_t buffer_size_, std::unique_ptr out_, const String & key_, const FileEncryption::InitVector & init_vector_, size_t old_file_size = 0); ~WriteBufferFromEncryptedFile() override; void sync() override; void finalize() override { finish(); } std::string getFileName() const override { return out->getFileName(); } private: void nextImpl() override; void finish(); void finishImpl(); bool finished = false; std::unique_ptr out; FileEncryption::InitVector iv; bool flush_iv = false; FileEncryption::Encryptor encryptor; }; } #endif