aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/include/aes/box_data.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/aes/box_data.h')
-rw-r--r--include/aes/box_data.h156
1 files changed, 156 insertions, 0 deletions
diff --git a/include/aes/box_data.h b/include/aes/box_data.h
new file mode 100644
index 0000000..888c7c0
--- /dev/null
+++ b/include/aes/box_data.h
@@ -0,0 +1,156 @@
+/**
+ * \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 "error.h"
+#include "mode.h"
+
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+typedef union
+{
+ AesNI_AES128_Key aes128_key;
+ AesNI_AES192_Key aes192_key;
+ AesNI_AES256_Key aes256_key;
+}
+AesNI_BoxKey;
+
+typedef union
+{
+ AesNI_AES128_RoundKeys aes128_encryption_keys;
+ AesNI_AES192_RoundKeys aes192_encryption_keys;
+ AesNI_AES256_RoundKeys aes256_encryption_keys;
+}
+AesNI_BoxEncryptionRoundKeys;
+
+typedef union
+{
+ AesNI_AES128_RoundKeys aes128_decryption_keys;
+ AesNI_AES192_RoundKeys aes192_decryption_keys;
+ AesNI_AES256_RoundKeys aes256_decryption_keys;
+}
+AesNI_BoxDecryptionRoundKeys;
+
+typedef union
+{
+ AesNI_AES128_KeyString aes128;
+ AesNI_AES192_KeyString aes192;
+ AesNI_AES256_KeyString aes256;
+}
+AesNI_BoxKeyString;
+
+typedef union
+{
+ AesNI_AES_Block aes_block;
+}
+AesNI_BoxBlock;
+
+typedef union
+{
+ AesNI_AES_BlockString aes;
+}
+AesNI_BoxBlockString;
+
+typedef AesNI_StatusCode (*AesNI_BoxCalculateRoundKeys)(
+ const AesNI_BoxKey* params,
+ AesNI_BoxEncryptionRoundKeys*,
+ AesNI_BoxDecryptionRoundKeys*,
+ AesNI_ErrorDetails* err_details);
+
+typedef AesNI_StatusCode (*AesNI_BoxParseBlock)(
+ AesNI_BoxBlock* dest,
+ const char* src,
+ AesNI_ErrorDetails* err_details);
+
+typedef AesNI_StatusCode (*AesNI_BoxParseKey)(
+ AesNI_BoxKey* dest,
+ const char* src,
+ AesNI_ErrorDetails* err_details);
+
+typedef AesNI_StatusCode (*AesNI_BoxFormatBlock)(
+ AesNI_BoxBlockString* dest,
+ const AesNI_BoxBlock* src,
+ AesNI_ErrorDetails* err_details);
+
+typedef AesNI_StatusCode (*AesNI_BoxFormatKey)(
+ AesNI_BoxKeyString* dest,
+ const AesNI_BoxKey* src,
+ AesNI_ErrorDetails* err_details);
+
+typedef AesNI_StatusCode (*AesNI_BoxEncryptBlock)(
+ const AesNI_BoxBlock* plaintext,
+ const AesNI_BoxEncryptionRoundKeys* params,
+ AesNI_BoxBlock* ciphertext,
+ AesNI_ErrorDetails* err_details);
+
+typedef AesNI_StatusCode (*AesNI_BoxDecryptBlock)(
+ const AesNI_BoxBlock* ciphertext,
+ const AesNI_BoxDecryptionRoundKeys* params,
+ AesNI_BoxBlock* plaintext,
+ AesNI_ErrorDetails* err_details);
+
+typedef AesNI_StatusCode (*AesNI_BoxXorBlock)(
+ AesNI_BoxBlock*,
+ const AesNI_BoxBlock*,
+ AesNI_ErrorDetails*);
+
+typedef AesNI_StatusCode (*AesNI_BoxIncBlock)(
+ AesNI_BoxBlock*,
+ AesNI_ErrorDetails*);
+
+typedef AesNI_StatusCode (*AesNI_BoxGetBlockSize)(
+ size_t*,
+ AesNI_ErrorDetails*);
+
+typedef AesNI_StatusCode (*AesNI_BoxStoreBlock)(
+ void*,
+ const AesNI_BoxBlock*,
+ AesNI_ErrorDetails*);
+
+typedef AesNI_StatusCode (*AesNI_BoxLoadBlock)(
+ AesNI_BoxBlock*,
+ const void*,
+ AesNI_ErrorDetails*);
+
+typedef struct
+{
+ AesNI_BoxCalculateRoundKeys calc_round_keys;
+ AesNI_BoxParseBlock parse_block;
+ AesNI_BoxParseKey parse_key;
+ AesNI_BoxFormatBlock format_block;
+ AesNI_BoxFormatKey format_key;
+ AesNI_BoxEncryptBlock encrypt_block;
+ AesNI_BoxDecryptBlock decrypt_block;
+ AesNI_BoxXorBlock xor_block;
+ AesNI_BoxIncBlock inc_block;
+ AesNI_BoxGetBlockSize get_block_size;
+ AesNI_BoxStoreBlock store_block;
+ AesNI_BoxLoadBlock load_block;
+}
+AesNI_BoxAlgorithmInterface;
+
+typedef struct
+{
+ const AesNI_BoxAlgorithmInterface* algorithm;
+ AesNI_BoxEncryptionRoundKeys encryption_keys;
+ AesNI_BoxDecryptionRoundKeys decryption_keys;
+ AesNI_Mode mode;
+ AesNI_BoxBlock iv;
+}
+AesNI_Box;
+
+#ifdef __cplusplus
+}
+#endif