From 7100d6af6d22ade0914fa5f8275401e37ca9610f Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Mon, 17 Oct 2016 08:05:40 +0300 Subject: utils: code dedupe --- utils/decrypt_bmp.cpp | 46 +++++----------------------------------------- utils/decrypt_file.cpp | 43 +++---------------------------------------- utils/encrypt_bmp.cpp | 46 +++++----------------------------------------- utils/encrypt_file.cpp | 43 +++---------------------------------------- utils/helpers/file.hpp | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 64 insertions(+), 162 deletions(-) create mode 100644 utils/helpers/file.hpp diff --git a/utils/decrypt_bmp.cpp b/utils/decrypt_bmp.cpp index 9032dc2..4842fbd 100644 --- a/utils/decrypt_bmp.cpp +++ b/utils/decrypt_bmp.cpp @@ -4,65 +4,29 @@ // Distributed under the MIT License. #include "file_cmd_parser.hpp" +#include "helpers/file.hpp" #include +#include + #include -#include #include #include -#include #include -#include #include #include -#include - namespace { - std::ifstream::pos_type get_file_size(const std::string& path) - { - std::ifstream ifs; - ifs.exceptions(std::ifstream::badbit | std::ifstream::failbit); - ifs.open(path, std::ifstream::binary | std::ifstream::ate); - return ifs.tellg(); - } - - std::vector read_file(const std::string& path) - { - const auto size = static_cast(get_file_size(path)); - - std::ifstream ifs; - ifs.exceptions(std::ifstream::badbit | std::ifstream::failbit); - ifs.open(path, std::ifstream::binary); - - std::vector ciphertext_buf; - ciphertext_buf.reserve(size); - ciphertext_buf.assign( - std::istreambuf_iterator(ifs), - std::istreambuf_iterator()); - return ciphertext_buf; - } - - void write_file( - const std::string& path, - const std::vector& src) - { - std::ofstream ofs; - ofs.exceptions(std::ofstream::badbit | std::ofstream::failbit); - ofs.open(path, std::ofstream::binary); - ofs.write(reinterpret_cast(src.data()), src.size()); - } - void decrypt_bmp( aes::Box& box, const std::string& ciphertext_path, const std::string& plaintext_path) { - const auto ciphertext_buf = read_file(ciphertext_path); + const auto ciphertext_buf = file::read_file(ciphertext_path); const auto bmp_header = reinterpret_cast(ciphertext_buf.data()); @@ -77,7 +41,7 @@ namespace std::memcpy(plaintext_buf.data(), bmp_header, header_size); std::memcpy(plaintext_buf.data() + header_size, pixels.data(), pixels.size()); - write_file(plaintext_path, plaintext_buf); + file::write_file(plaintext_path, plaintext_buf); } void decrypt_bmp(const Settings& settings) diff --git a/utils/decrypt_file.cpp b/utils/decrypt_file.cpp index 2697338..3bbbb06 100644 --- a/utils/decrypt_file.cpp +++ b/utils/decrypt_file.cpp @@ -4,65 +4,28 @@ // Distributed under the MIT License. #include "file_cmd_parser.hpp" +#include "helpers/file.hpp" #include #include -#include - #include -#include #include -#include #include #include namespace { - std::ifstream::pos_type get_file_size(const std::string& path) - { - std::ifstream ifs; - ifs.exceptions(std::ifstream::badbit | std::ifstream::failbit); - ifs.open(path, std::ifstream::binary | std::ifstream::ate); - return ifs.tellg(); - } - - std::vector read_file(const std::string& path) - { - const auto size = static_cast(get_file_size(path)); - - std::ifstream ifs; - ifs.exceptions(std::ifstream::badbit | std::ifstream::failbit); - ifs.open(path, std::ifstream::binary); - - std::vector src_buf; - src_buf.reserve(size); - src_buf.assign( - std::istreambuf_iterator(ifs), - std::istreambuf_iterator()); - return src_buf; - } - - void write_file( - const std::string& path, - const std::vector& src) - { - std::ofstream ofs; - ofs.exceptions(std::ofstream::badbit | std::ofstream::failbit); - ofs.open(path, std::ofstream::binary); - ofs.write(reinterpret_cast(src.data()), src.size()); - } - void decrypt_file( aes::Box& box, const std::string& ciphertext_path, const std::string& plaintext_path) { - const auto ciphertext_buf = read_file(ciphertext_path); + const auto ciphertext_buf = file::read_file(ciphertext_path); const auto plaintext_buf = box.decrypt_buffer( ciphertext_buf.data(), ciphertext_buf.size()); - write_file(plaintext_path, plaintext_buf); + file::write_file(plaintext_path, plaintext_buf); } void decrypt_file(const Settings& settings) diff --git a/utils/encrypt_bmp.cpp b/utils/encrypt_bmp.cpp index 7fdf7f0..c0fd688 100644 --- a/utils/encrypt_bmp.cpp +++ b/utils/encrypt_bmp.cpp @@ -4,65 +4,29 @@ // Distributed under the MIT License. #include "file_cmd_parser.hpp" +#include "helpers/file.hpp" #include +#include + #include -#include #include #include -#include #include -#include #include #include -#include - namespace { - std::ifstream::pos_type get_file_size(const std::string& path) - { - std::ifstream ifs; - ifs.exceptions(std::ifstream::badbit | std::ifstream::failbit); - ifs.open(path, std::ifstream::binary | std::ifstream::ate); - return ifs.tellg(); - } - - std::vector read_file(const std::string& path) - { - const auto size = static_cast(get_file_size(path)); - - std::ifstream ifs; - ifs.exceptions(std::ifstream::badbit | std::ifstream::failbit); - ifs.open(path, std::ifstream::binary); - - std::vector plaintext_buf; - plaintext_buf.reserve(size); - plaintext_buf.assign( - std::istreambuf_iterator(ifs), - std::istreambuf_iterator()); - return plaintext_buf; - } - - void write_file( - const std::string& path, - const std::vector& src) - { - std::ofstream ofs; - ofs.exceptions(std::ofstream::badbit | std::ofstream::failbit); - ofs.open(path, std::ofstream::binary); - ofs.write(reinterpret_cast(src.data()), src.size()); - } - void encrypt_bmp( aes::Box& box, const std::string& plaintext_path, const std::string& ciphertext_path) { - const auto plaintext_buf = read_file(plaintext_path); + const auto plaintext_buf = file::read_file(plaintext_path); const auto bmp_header = reinterpret_cast(plaintext_buf.data()); @@ -77,7 +41,7 @@ namespace std::memcpy(ciphertext_buf.data(), bmp_header, header_size); std::memcpy(ciphertext_buf.data() + header_size, cipherpixels.data(), cipherpixels.size()); - write_file(ciphertext_path, ciphertext_buf); + file::write_file(ciphertext_path, ciphertext_buf); } void encrypt_bmp(const Settings& settings) diff --git a/utils/encrypt_file.cpp b/utils/encrypt_file.cpp index 8741f54..721b735 100644 --- a/utils/encrypt_file.cpp +++ b/utils/encrypt_file.cpp @@ -4,65 +4,28 @@ // Distributed under the MIT License. #include "file_cmd_parser.hpp" +#include "helpers/file.hpp" #include #include -#include - #include -#include #include -#include #include #include namespace { - std::ifstream::pos_type get_file_size(const std::string& path) - { - std::ifstream ifs; - ifs.exceptions(std::ifstream::badbit | std::ifstream::failbit); - ifs.open(path, std::ifstream::binary | std::ifstream::ate); - return ifs.tellg(); - } - - std::vector read_file(const std::string& path) - { - const auto size = static_cast(get_file_size(path)); - - std::ifstream ifs; - ifs.exceptions(std::ifstream::badbit | std::ifstream::failbit); - ifs.open(path, std::ifstream::binary); - - std::vector plaintext_buf; - plaintext_buf.reserve(size); - plaintext_buf.assign( - std::istreambuf_iterator(ifs), - std::istreambuf_iterator()); - return plaintext_buf; - } - - void write_file( - const std::string& path, - const std::vector& src) - { - std::ofstream ofs; - ofs.exceptions(std::ofstream::badbit | std::ofstream::failbit); - ofs.open(path, std::ofstream::binary); - ofs.write(reinterpret_cast(src.data()), src.size()); - } - void encrypt_file( aes::Box& box, const std::string& plaintext_path, const std::string& ciphertext_path) { - const auto plaintext_buf = read_file(plaintext_path); + const auto plaintext_buf = file::read_file(plaintext_path); const auto ciphertext_buf = box.encrypt_buffer( plaintext_buf.data(), plaintext_buf.size()); - write_file(ciphertext_path, ciphertext_buf); + file::write_file(ciphertext_path, ciphertext_buf); } void encrypt_file(const Settings& settings) diff --git a/utils/helpers/file.hpp b/utils/helpers/file.hpp new file mode 100644 index 0000000..a327c35 --- /dev/null +++ b/utils/helpers/file.hpp @@ -0,0 +1,48 @@ +// Copyright (c) 2016 Egor Tensin +// This file is part of the "AES tools" project. +// For details, see https://github.com/egor-tensin/aes-tools. +// Distributed under the MIT License. + +#include + +#include +#include +#include +#include + +namespace file +{ + inline std::size_t get_file_size(const std::string& path) + { + std::ifstream ifs; + ifs.exceptions(std::ifstream::badbit | std::ifstream::failbit); + ifs.open(path, std::ifstream::binary | std::ifstream::ate); + return ifs.tellg(); + } + + inline std::vector read_file(const std::string& path) + { + const auto size = get_file_size(path); + + std::ifstream ifs; + ifs.exceptions(std::ifstream::badbit | std::ifstream::failbit); + ifs.open(path, std::ifstream::binary); + + std::vector src_buf; + src_buf.reserve(size); + src_buf.assign( + std::istreambuf_iterator(ifs), + std::istreambuf_iterator()); + return src_buf; + } + + inline void write_file( + const std::string& path, + const std::vector& src) + { + std::ofstream ofs; + ofs.exceptions(std::ofstream::badbit | std::ofstream::failbit); + ofs.open(path, std::ofstream::binary); + ofs.write(reinterpret_cast(src.data()), src.size()); + } +} -- cgit v1.2.3