aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2015-06-25 01:18:24 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2015-06-25 01:18:24 +0300
commitf752dfe56b67f2729df0c54c83612ba36f8133bc (patch)
tree9d392157a1d9ae0d112260c5dedc7ec535d38291
parentcxx: implement more stuff (diff)
downloadaes-tools-f752dfe56b67f2729df0c54c83612ba36f8133bc.tar.gz
aes-tools-f752dfe56b67f2729df0c54c83612ba36f8133bc.zip
remove specialized buffer encryption functions
-rw-r--r--README.md2
-rw-r--r--include/aesni/all.h1
-rw-r--r--include/aesni/buffer.h40
-rw-r--r--src/buffer.c120
-rw-r--r--utils/file/CMakeLists.txt27
-rw-r--r--utils/file/README.md (renamed from utils/file/cxx/README.md)0
-rw-r--r--utils/file/aes128ecb_decrypt_file.cpp104
-rw-r--r--utils/file/aes128ecb_encrypt_file.cpp103
-rw-r--r--utils/file/aes_common.hpp (renamed from utils/file/cxx/aes_common.hpp)0
-rw-r--r--utils/file/aes_decrypt_bmp.cpp (renamed from utils/file/cxx/aes_decrypt_bmp.cpp)0
-rw-r--r--utils/file/aes_decrypt_file.cpp (renamed from utils/file/cxx/aes_decrypt_file.cpp)0
-rw-r--r--utils/file/aes_encrypt_bmp.cpp (renamed from utils/file/cxx/aes_encrypt_bmp.cpp)0
-rw-r--r--utils/file/aes_encrypt_file.cpp (renamed from utils/file/cxx/aes_encrypt_file.cpp)0
-rw-r--r--utils/file/bmp/butterfly.bmp (renamed from utils/file/cxx/bmp/butterfly.bmp)bin503370 -> 503370 bytes
-rw-r--r--utils/file/bmp/cipherfly_cbc.bmp (renamed from utils/file/cxx/bmp/cipherfly_cbc.bmp)bin503382 -> 503382 bytes
-rw-r--r--utils/file/bmp/cipherfly_ecb.bmp (renamed from utils/file/cxx/bmp/cipherfly_ecb.bmp)bin503382 -> 503382 bytes
-rw-r--r--utils/file/cxx/CMakeLists.txt21
17 files changed, 20 insertions, 398 deletions
diff --git a/README.md b/README.md
index 6b198ce..b8acb60 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@ Remember that in order to link to the static Boost libraries, you also have to p
A couple of useful utilities built on top of the library are included.
Namely,
-* [the file encryption utilities](utils/file/cxx#file-encryption-utilities),
+* [the file encryption utilities](utils/file#file-encryption-utilities),
* and [the block encryption utilities](utils/block/cxx#block-encryption-utilities) (used mainly for testing).
## Running on older CPUs
diff --git a/include/aesni/all.h b/include/aesni/all.h
index 144a695..bbea6f9 100644
--- a/include/aesni/all.h
+++ b/include/aesni/all.h
@@ -20,7 +20,6 @@
#include "box.h"
#include "box_aes.h"
#include "box_data.h"
-#include "buffer.h"
#include "data.h"
#include "error.h"
#include "mode.h"
diff --git a/include/aesni/buffer.h b/include/aesni/buffer.h
deleted file mode 100644
index 3e74078..0000000
--- a/include/aesni/buffer.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * \file
- * \author Egor Tensin <Egor.Tensin@gmail.com>
- * \date 2015
- * \copyright This file is licensed under the terms of the MIT License.
- * See LICENSE.txt for details.
- *
- * \brief Declares variable-length buffer encryption/decryption functions.
- */
-
-#pragma once
-
-#include "aes.h"
-#include "error.h"
-
-#include <stdlib.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-AesNI_StatusCode aesni_encrypt_buffer_ecb128(
- const void* src,
- size_t src_size,
- void* dest,
- size_t* dest_size,
- AesNI_Aes128_RoundKeys* encryption_keys,
- AesNI_ErrorDetails* err_details);
-AesNI_StatusCode aesni_decrypt_buffer_ecb128(
- const void* src,
- size_t src_size,
- void* dest,
- size_t* dest_size,
- AesNI_Aes128_RoundKeys* decryption_keys,
- AesNI_ErrorDetails* err_details);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/src/buffer.c b/src/buffer.c
deleted file mode 100644
index 593a5b8..0000000
--- a/src/buffer.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * \file
- * \author Egor Tensin <Egor.Tensin@gmail.com>
- * \date 2015
- * \copyright This file is licensed under the terms of the MIT License.
- * See LICENSE.txt for details.
- */
-
-#include <aesni/all.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-static unsigned char FULL_BLOCK_PADDING[16] = { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 };
-
-AesNI_StatusCode aesni_encrypt_buffer_ecb128(
- const void* src,
- size_t src_size,
- void* dest,
- size_t* dest_size,
- AesNI_Aes128_RoundKeys* encryption_keys,
- AesNI_ErrorDetails* err_details)
-{
- if (dest_size == NULL)
- return aesni_error_null_argument(err_details, "dest_size");
-
- const size_t rem_size = src_size % 16;
- const size_t padding_size = 16 - rem_size;
- *dest_size = src_size + padding_size;
-
- if (dest == NULL)
- return AESNI_SUCCESS;
- if (src == NULL)
- return aesni_error_null_argument(err_details, "src");
- if (encryption_keys == NULL)
- return aesni_error_null_argument(err_details, "encryption_keys");
-
- const size_t src_len = src_size / 16;
-
- for (size_t i = 0; i < src_len; ++i, (char*) src += 16, (char*) dest += 16)
- {
- AesNI_Block128 plaintext = aesni_load_block128(src);
- AesNI_Block128 ciphertext = aesni_aes128_encrypt_block_ecb(plaintext, encryption_keys);
- aesni_store_block128(dest, ciphertext);
- }
-
- unsigned char padding[16];
-
- if (rem_size == 0)
- {
- memcpy(padding, FULL_BLOCK_PADDING, 16);
- }
- else
- {
- memcpy(padding, src, rem_size);
- memset(padding + rem_size, padding_size, padding_size);
- }
-
- AesNI_Block128 plaintext = aesni_load_block128(padding);
- AesNI_Block128 ciphertext = aesni_aes128_encrypt_block_ecb(plaintext, encryption_keys);
- aesni_store_block128(dest, ciphertext);
-
- return AESNI_SUCCESS;
-}
-
-static unsigned char get_pkcs7_padding_size(const unsigned char* padding)
-{
- if (padding[15] < 0x01 || padding[15] > 0x10)
- return 0;
-
- for (int i = 16 - padding[15]; i < 15; ++i)
- if (padding[i] != padding[15])
- return 0;
-
- return padding[15];
-}
-
-AesNI_StatusCode aesni_decrypt_buffer_ecb128(
- const void* src,
- size_t src_size,
- void* dest,
- size_t* dest_size,
- AesNI_Aes128_RoundKeys* decryption_keys,
- AesNI_ErrorDetails* err_details)
-{
- if (dest_size == NULL)
- return aesni_error_null_argument(err_details, "dest_size");
-
- *dest_size = src_size;
-
- if (dest == NULL)
- return 0;
- if (src == NULL)
- return aesni_error_null_argument(err_details, "src");
- if (decryption_keys == NULL)
- return aesni_error_null_argument(err_details, "decryption_keys");
-
- const size_t src_len = src_size / 16;
-
- for (size_t i = 0; i < src_len - 1; ++i, (char*) src += 16, (char*) dest += 16)
- {
- AesNI_Block128 ciphertext = aesni_load_block128(src);
- AesNI_Block128 plaintext = aesni_aes128_decrypt_block_ecb(ciphertext, decryption_keys);
- aesni_store_block128(dest, plaintext);
- }
-
- AesNI_Block128 ciphertext = aesni_load_block128(src);
- AesNI_Block128 plaintext = aesni_aes128_decrypt_block_ecb(ciphertext, decryption_keys);
- unsigned char padding[16];
- aesni_store_block128(padding, plaintext);
-
- unsigned char padding_size = get_pkcs7_padding_size(padding);
-
- if (padding_size == 0)
- return aesni_error_invalid_pkcs7_padding(err_details);
-
- memcpy(dest, padding, 16 - padding_size);
- *dest_size -= padding_size;
- return AESNI_SUCCESS;
-}
diff --git a/utils/file/CMakeLists.txt b/utils/file/CMakeLists.txt
index ad949f7..75895a0 100644
--- a/utils/file/CMakeLists.txt
+++ b/utils/file/CMakeLists.txt
@@ -1,10 +1,21 @@
-macro(util prefix)
- add_executable(util_${prefix} ${prefix}.cpp)
- target_link_libraries(util_${prefix} libaesnixx libaesni)
- set_target_properties(util_${prefix} PROPERTIES OUTPUT_NAME ${prefix})
-endmacro()
+find_package(Boost REQUIRED COMPONENTS program_options)
-util(aes128ecb_encrypt_file)
-util(aes128ecb_decrypt_file)
+add_executable(util_aes_encrypt_file aes_encrypt_file.cpp aes_common.hpp)
+target_include_directories(util_aes_encrypt_file PRIVATE ${Boost_INCLUDE_DIRS})
+target_link_libraries(util_aes_encrypt_file libaesni libaesnixx ${Boost_LIBRARIES})
+set_target_properties(util_aes_encrypt_file PROPERTIES OUTPUT_NAME aes_encrypt_file)
-add_subdirectory(cxx)
+add_executable(util_aes_decrypt_file aes_decrypt_file.cpp aes_common.hpp)
+target_include_directories(util_aes_decrypt_file PRIVATE ${Boost_INCLUDE_DIRS})
+target_link_libraries(util_aes_decrypt_file libaesni libaesnixx ${Boost_LIBRARIES})
+set_target_properties(util_aes_decrypt_file PROPERTIES OUTPUT_NAME aes_decrypt_file)
+
+add_executable(util_aes_encrypt_bmp aes_encrypt_bmp.cpp aes_common.hpp)
+target_include_directories(util_aes_encrypt_bmp PRIVATE ${Boost_INCLUDE_DIRS})
+target_link_libraries(util_aes_encrypt_bmp libaesni libaesnixx ${Boost_LIBRARIES})
+set_target_properties(util_aes_encrypt_bmp PROPERTIES OUTPUT_NAME aes_encrypt_bmp)
+
+add_executable(util_aes_decrypt_bmp aes_decrypt_bmp.cpp aes_common.hpp)
+target_include_directories(util_aes_decrypt_bmp PRIVATE ${Boost_INCLUDE_DIRS})
+target_link_libraries(util_aes_decrypt_bmp libaesni libaesnixx ${Boost_LIBRARIES})
+set_target_properties(util_aes_decrypt_bmp PROPERTIES OUTPUT_NAME aes_decrypt_bmp)
diff --git a/utils/file/cxx/README.md b/utils/file/README.md
index bf79cb2..bf79cb2 100644
--- a/utils/file/cxx/README.md
+++ b/utils/file/README.md
diff --git a/utils/file/aes128ecb_decrypt_file.cpp b/utils/file/aes128ecb_decrypt_file.cpp
deleted file mode 100644
index 9b8b15c..0000000
--- a/utils/file/aes128ecb_decrypt_file.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * \file
- * \author Egor Tensin <Egor.Tensin@gmail.com>
- * \date 2015
- * \copyright This file is licensed under the terms of the MIT License.
- * See LICENSE.txt for details.
- */
-
-#include <aesni/all.h>
-#include <aesnixx/all.hpp>
-
-#include <cstdlib>
-
-#include <exception>
-#include <iostream>
-#include <fstream>
-#include <string>
-#include <vector>
-
-namespace
-{
- void exit_with_usage()
- {
- std::cout << "Usage: aes128ecb_decrypt_file.exe KEY SRC DEST\n";
- std::exit(EXIT_FAILURE);
- }
-
- 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();
- }
-}
-
-int main(int argc, char** argv)
-{
- if (argc != 4)
- exit_with_usage();
-
- try
- {
- aesni::aes::Key128 key;
- aesni::aes::from_string(key, argv[1]);
-
- aesni::aes::RoundKeys128 encryption_keys, decryption_keys;
-
- const std::string src_path(argv[2]);
- const std::string dest_path(argv[3]);
-
- const auto src_size = static_cast<std::size_t>(get_file_size(src_path));
-
- std::ifstream src_ifs;
- src_ifs.exceptions(std::ifstream::badbit | std::ifstream::failbit);
- src_ifs.open(src_path, std::ifstream::binary);
-
- std::vector<char> src_buf;
- src_buf.reserve(src_size);
- src_buf.assign(std::istreambuf_iterator<char>(src_ifs),
- std::istreambuf_iterator<char>());
-
- aesni_aes128_expand_key(&key, &encryption_keys);
- aesni_aes128_derive_decryption_keys(&encryption_keys, &decryption_keys);
-
- std::size_t dest_size;
-
- aesni_decrypt_buffer_ecb128(
- src_buf.data(),
- src_size,
- NULL,
- &dest_size,
- &decryption_keys,
- aesni::ErrorDetailsThrowsInDestructor());
-
- std::vector<char> dest_buf;
- dest_buf.reserve(dest_size);
-
- aesni_decrypt_buffer_ecb128(
- src_buf.data(),
- src_size,
- dest_buf.data(),
- &dest_size,
- &decryption_keys,
- aesni::ErrorDetailsThrowsInDestructor());
-
- std::ofstream dest_ofs;
- dest_ofs.exceptions(std::ofstream::badbit | std::ofstream::failbit);
- dest_ofs.open(dest_path, std::ofstream::binary);
- dest_ofs.write(dest_buf.data(), dest_size);
- }
- catch (const aesni::Error& e)
- {
- std::cerr << e;
- return 1;
- }
- catch (const std::exception& e)
- {
- std::cerr << e.what() << "\n";
- return 1;
- }
-
- return 0;
-}
diff --git a/utils/file/aes128ecb_encrypt_file.cpp b/utils/file/aes128ecb_encrypt_file.cpp
deleted file mode 100644
index a43c4d9..0000000
--- a/utils/file/aes128ecb_encrypt_file.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * \file
- * \author Egor Tensin <Egor.Tensin@gmail.com>
- * \date 2015
- * \copyright This file is licensed under the terms of the MIT License.
- * See LICENSE.txt for details.
- */
-
-#include <aesni/all.h>
-#include <aesnixx/all.hpp>
-
-#include <cstdlib>
-
-#include <exception>
-#include <iostream>
-#include <fstream>
-#include <string>
-#include <vector>
-
-namespace
-{
- void exit_with_usage()
- {
- std::cout << "Usage: aes128ecb_encrypt_file.exe KEY SRC DEST\n";
- std::exit(EXIT_FAILURE);
- }
-
- 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();
- }
-}
-
-int main(int argc, char** argv)
-{
- if (argc != 4)
- exit_with_usage();
-
- try
- {
- aesni::aes::Key128 key;
- aesni::aes::from_string(key, argv[1]);
-
- AesNI_Aes128_RoundKeys encryption_keys;
-
- const std::string src_path(argv[2]);
- const std::string dest_path(argv[3]);
-
- const auto src_size = static_cast<std::size_t>(get_file_size(src_path));
-
- std::ifstream src_ifs;
- src_ifs.exceptions(std::ifstream::badbit | std::ifstream::failbit);
- src_ifs.open(src_path, std::ifstream::binary);
-
- std::vector<char> src_buf;
- src_buf.reserve(src_size);
- src_buf.assign(std::istreambuf_iterator<char>(src_ifs),
- std::istreambuf_iterator<char>());
-
- aesni_aes128_expand_key(&key, &encryption_keys);
-
- std::size_t dest_size;
-
- aesni_encrypt_buffer_ecb128(
- src_buf.data(),
- src_size,
- NULL,
- &dest_size,
- &encryption_keys,
- aesni::ErrorDetailsThrowsInDestructor());
-
- std::vector<char> dest_buf;
- dest_buf.reserve(dest_size);
-
- aesni_encrypt_buffer_ecb128(
- src_buf.data(),
- src_size,
- dest_buf.data(),
- &dest_size,
- &encryption_keys,
- aesni::ErrorDetailsThrowsInDestructor());
-
- std::ofstream dest_ofs;
- dest_ofs.exceptions(std::ofstream::badbit | std::ofstream::failbit);
- dest_ofs.open(dest_path, std::ofstream::binary);
- dest_ofs.write(dest_buf.data(), dest_size);
- }
- catch (const aesni::Error& e)
- {
- std::cerr << e;
- return 1;
- }
- catch (const std::exception& e)
- {
- std::cerr << e.what() << "\n";
- return 1;
- }
-
- return 0;
-}
diff --git a/utils/file/cxx/aes_common.hpp b/utils/file/aes_common.hpp
index 28e16df..28e16df 100644
--- a/utils/file/cxx/aes_common.hpp
+++ b/utils/file/aes_common.hpp
diff --git a/utils/file/cxx/aes_decrypt_bmp.cpp b/utils/file/aes_decrypt_bmp.cpp
index 85dffe5..85dffe5 100644
--- a/utils/file/cxx/aes_decrypt_bmp.cpp
+++ b/utils/file/aes_decrypt_bmp.cpp
diff --git a/utils/file/cxx/aes_decrypt_file.cpp b/utils/file/aes_decrypt_file.cpp
index e2da979..e2da979 100644
--- a/utils/file/cxx/aes_decrypt_file.cpp
+++ b/utils/file/aes_decrypt_file.cpp
diff --git a/utils/file/cxx/aes_encrypt_bmp.cpp b/utils/file/aes_encrypt_bmp.cpp
index cf55b0b..cf55b0b 100644
--- a/utils/file/cxx/aes_encrypt_bmp.cpp
+++ b/utils/file/aes_encrypt_bmp.cpp
diff --git a/utils/file/cxx/aes_encrypt_file.cpp b/utils/file/aes_encrypt_file.cpp
index ff6753f..ff6753f 100644
--- a/utils/file/cxx/aes_encrypt_file.cpp
+++ b/utils/file/aes_encrypt_file.cpp
diff --git a/utils/file/cxx/bmp/butterfly.bmp b/utils/file/bmp/butterfly.bmp
index 105a55a..105a55a 100644
--- a/utils/file/cxx/bmp/butterfly.bmp
+++ b/utils/file/bmp/butterfly.bmp
Binary files differ
diff --git a/utils/file/cxx/bmp/cipherfly_cbc.bmp b/utils/file/bmp/cipherfly_cbc.bmp
index 664b557..664b557 100644
--- a/utils/file/cxx/bmp/cipherfly_cbc.bmp
+++ b/utils/file/bmp/cipherfly_cbc.bmp
Binary files differ
diff --git a/utils/file/cxx/bmp/cipherfly_ecb.bmp b/utils/file/bmp/cipherfly_ecb.bmp
index 78de9a8..78de9a8 100644
--- a/utils/file/cxx/bmp/cipherfly_ecb.bmp
+++ b/utils/file/bmp/cipherfly_ecb.bmp
Binary files differ
diff --git a/utils/file/cxx/CMakeLists.txt b/utils/file/cxx/CMakeLists.txt
deleted file mode 100644
index 75895a0..0000000
--- a/utils/file/cxx/CMakeLists.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-find_package(Boost REQUIRED COMPONENTS program_options)
-
-add_executable(util_aes_encrypt_file aes_encrypt_file.cpp aes_common.hpp)
-target_include_directories(util_aes_encrypt_file PRIVATE ${Boost_INCLUDE_DIRS})
-target_link_libraries(util_aes_encrypt_file libaesni libaesnixx ${Boost_LIBRARIES})
-set_target_properties(util_aes_encrypt_file PROPERTIES OUTPUT_NAME aes_encrypt_file)
-
-add_executable(util_aes_decrypt_file aes_decrypt_file.cpp aes_common.hpp)
-target_include_directories(util_aes_decrypt_file PRIVATE ${Boost_INCLUDE_DIRS})
-target_link_libraries(util_aes_decrypt_file libaesni libaesnixx ${Boost_LIBRARIES})
-set_target_properties(util_aes_decrypt_file PROPERTIES OUTPUT_NAME aes_decrypt_file)
-
-add_executable(util_aes_encrypt_bmp aes_encrypt_bmp.cpp aes_common.hpp)
-target_include_directories(util_aes_encrypt_bmp PRIVATE ${Boost_INCLUDE_DIRS})
-target_link_libraries(util_aes_encrypt_bmp libaesni libaesnixx ${Boost_LIBRARIES})
-set_target_properties(util_aes_encrypt_bmp PROPERTIES OUTPUT_NAME aes_encrypt_bmp)
-
-add_executable(util_aes_decrypt_bmp aes_decrypt_bmp.cpp aes_common.hpp)
-target_include_directories(util_aes_decrypt_bmp PRIVATE ${Boost_INCLUDE_DIRS})
-target_link_libraries(util_aes_decrypt_bmp libaesni libaesnixx ${Boost_LIBRARIES})
-set_target_properties(util_aes_decrypt_bmp PROPERTIES OUTPUT_NAME aes_decrypt_bmp)