aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/include/aesni/box_aes.h
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2015-06-17 20:07:32 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2015-06-17 20:07:32 +0300
commit522a5b906d7620bcebddb5a8f476b022c140ab27 (patch)
tree8b02e4f5b5948da91e4117c6892d850eeeac8445 /include/aesni/box_aes.h
parentrefactoring (diff)
downloadaes-tools-522a5b906d7620bcebddb5a8f476b022c140ab27.tar.gz
aes-tools-522a5b906d7620bcebddb5a8f476b022c140ab27.zip
factoring out AES-specific stuff
Diffstat (limited to 'include/aesni/box_aes.h')
-rw-r--r--include/aesni/box_aes.h155
1 files changed, 155 insertions, 0 deletions
diff --git a/include/aesni/box_aes.h b/include/aesni/box_aes.h
new file mode 100644
index 0000000..391f13e
--- /dev/null
+++ b/include/aesni/box_aes.h
@@ -0,0 +1,155 @@
+/**
+ * \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.
+ */
+
+#pragma once
+
+#include "aes.h"
+#include "box_aes.h"
+#include "box_data.h"
+#include "data.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+static __inline AesNI_StatusCode aesni_box_derive_params_aes128(
+ const AesNI_BoxAlgorithmParams* algorithm_params,
+ AesNI_BoxEncryptionParams* encrypt_params,
+ AesNI_BoxDecryptionParams* decrypt_params,
+ AesNI_ErrorDetails* err_details)
+{
+ aesni_aes128_expand_key_(
+ algorithm_params->aes128_key,
+ &encrypt_params->aes128_encryption_keys);
+ aesni_aes128_derive_decryption_keys_(
+ &encrypt_params->aes128_encryption_keys,
+ &decrypt_params->aes128_decryption_keys);
+ return AESNI_SUCCESS;
+}
+
+static __inline AesNI_StatusCode aesni_box_derive_params_aes192(
+ const AesNI_BoxAlgorithmParams* algorithm_params,
+ AesNI_BoxEncryptionParams* encrypt_params,
+ AesNI_BoxDecryptionParams* decrypt_params,
+ AesNI_ErrorDetails* err_details)
+{
+ aesni_aes192_expand_key_(
+ algorithm_params->aes192_key.lo,
+ algorithm_params->aes192_key.hi,
+ &encrypt_params->aes192_encryption_keys);
+ aesni_aes192_derive_decryption_keys_(
+ &encrypt_params->aes192_encryption_keys,
+ &decrypt_params->aes192_decryption_keys);
+ return AESNI_SUCCESS;
+}
+
+static __inline AesNI_StatusCode aesni_box_derive_params_aes256(
+ const AesNI_BoxAlgorithmParams* algorithm_params,
+ AesNI_BoxEncryptionParams* encrypt_params,
+ AesNI_BoxDecryptionParams* decrypt_params,
+ AesNI_ErrorDetails* err_details)
+{
+ aesni_aes256_expand_key_(
+ algorithm_params->aes256_key.lo,
+ algorithm_params->aes256_key.hi,
+ &encrypt_params->aes256_encryption_keys);
+ aesni_aes256_derive_decryption_keys_(
+ &encrypt_params->aes256_encryption_keys,
+ &decrypt_params->aes256_decryption_keys);
+ return AESNI_SUCCESS;
+}
+
+static __inline AesNI_StatusCode aesni_box_xor_block_aes(
+ AesNI_BoxBlock* dest,
+ const AesNI_BoxBlock* src,
+ AesNI_ErrorDetails* err_details)
+{
+ dest->aes_block = aesni_xor_block128(dest->aes_block, src->aes_block);
+ return AESNI_SUCCESS;
+}
+
+static __inline AesNI_StatusCode aesni_box_encrypt_aes128(
+ const AesNI_BoxBlock* input,
+ const AesNI_BoxEncryptionParams* params,
+ AesNI_BoxBlock* output,
+ AesNI_ErrorDetails* err_details)
+{
+ output->aes_block = aesni_aes128_encrypt_block_(
+ input->aes_block,
+ &params->aes128_encryption_keys);
+ return AESNI_SUCCESS;
+}
+
+static __inline AesNI_StatusCode aesni_box_decrypt_aes128(
+ const AesNI_BoxBlock* input,
+ const AesNI_BoxDecryptionParams* params,
+ AesNI_BoxBlock* output,
+ AesNI_ErrorDetails* err_details)
+{
+ output->aes_block = aesni_aes128_decrypt_block_(
+ input->aes_block,
+ &params->aes128_decryption_keys);
+ return AESNI_SUCCESS;
+}
+
+static __inline AesNI_StatusCode aesni_box_encrypt_aes192(
+ const AesNI_BoxBlock* input,
+ const AesNI_BoxEncryptionParams* params,
+ AesNI_BoxBlock* output,
+ AesNI_ErrorDetails* err_details)
+{
+ output->aes_block = aesni_aes192_encrypt_block_(
+ input->aes_block,
+ &params->aes192_encryption_keys);
+ return AESNI_SUCCESS;
+}
+
+static __inline AesNI_StatusCode aesni_box_decrypt_aes192(
+ const AesNI_BoxBlock* input,
+ const AesNI_BoxDecryptionParams* params,
+ AesNI_BoxBlock* output,
+ AesNI_ErrorDetails* err_details)
+{
+ output->aes_block = aesni_aes192_decrypt_block_(
+ input->aes_block,
+ &params->aes192_decryption_keys);
+ return AESNI_SUCCESS;
+}
+
+static __inline AesNI_StatusCode aesni_box_encrypt_aes256(
+ const AesNI_BoxBlock* input,
+ const AesNI_BoxEncryptionParams* params,
+ AesNI_BoxBlock* output,
+ AesNI_ErrorDetails* err_details)
+{
+ output->aes_block = aesni_aes256_encrypt_block_(
+ input->aes_block,
+ &params->aes256_encryption_keys);
+ return AESNI_SUCCESS;
+}
+
+static __inline AesNI_StatusCode aesni_box_decrypt_aes256(
+ const AesNI_BoxBlock* input,
+ const AesNI_BoxDecryptionParams* params,
+ AesNI_BoxBlock* output,
+ AesNI_ErrorDetails* err_details)
+{
+ output->aes_block = aesni_aes256_decrypt_block_(
+ input->aes_block,
+ &params->aes256_decryption_keys);
+ return AESNI_SUCCESS;
+}
+
+extern AesNI_BoxAlgorithmInterface aesni_box_aes128_iface;
+extern AesNI_BoxAlgorithmInterface aesni_box_aes192_iface;
+extern AesNI_BoxAlgorithmInterface aesni_box_aes256_iface;
+
+#ifdef __cplusplus
+}
+#endif