aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/buffer.c
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 /src/buffer.c
parentcxx: implement more stuff (diff)
downloadaes-tools-f752dfe56b67f2729df0c54c83612ba36f8133bc.tar.gz
aes-tools-f752dfe56b67f2729df0c54c83612ba36f8133bc.zip
remove specialized buffer encryption functions
Diffstat (limited to '')
-rw-r--r--src/buffer.c120
1 files changed, 0 insertions, 120 deletions
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;
-}