diff options
author | Egor Tensin <Egor.Tensin@gmail.com> | 2015-06-17 20:07:32 +0300 |
---|---|---|
committer | Egor Tensin <Egor.Tensin@gmail.com> | 2015-06-17 20:07:32 +0300 |
commit | 522a5b906d7620bcebddb5a8f476b022c140ab27 (patch) | |
tree | 8b02e4f5b5948da91e4117c6892d850eeeac8445 /include/aesni/box_aes.h | |
parent | refactoring (diff) | |
download | aes-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.h | 155 |
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, + ¶ms->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, + ¶ms->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, + ¶ms->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, + ¶ms->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, + ¶ms->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, + ¶ms->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 |