19b0cbfb3SPablo de Lara /********************************************************************** 29b0cbfb3SPablo de Lara Copyright(c) 2024 Intel Corporation All rights reserved. 39b0cbfb3SPablo de Lara 49b0cbfb3SPablo de Lara Redistribution and use in source and binary forms, with or without 59b0cbfb3SPablo de Lara modification, are permitted provided that the following conditions 69b0cbfb3SPablo de Lara are met: 79b0cbfb3SPablo de Lara * Redistributions of source code must retain the above copyright 89b0cbfb3SPablo de Lara notice, this list of conditions and the following disclaimer. 99b0cbfb3SPablo de Lara * Redistributions in binary form must reproduce the above copyright 109b0cbfb3SPablo de Lara notice, this list of conditions and the following disclaimer in 119b0cbfb3SPablo de Lara the documentation and/or other materials provided with the 129b0cbfb3SPablo de Lara distribution. 139b0cbfb3SPablo de Lara * Neither the name of Intel Corporation nor the names of its 149b0cbfb3SPablo de Lara contributors may be used to endorse or promote products derived 159b0cbfb3SPablo de Lara from this software without specific prior written permission. 169b0cbfb3SPablo de Lara 179b0cbfb3SPablo de Lara THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 189b0cbfb3SPablo de Lara "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 199b0cbfb3SPablo de Lara LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 209b0cbfb3SPablo de Lara A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 219b0cbfb3SPablo de Lara OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 229b0cbfb3SPablo de Lara SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 239b0cbfb3SPablo de Lara LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 249b0cbfb3SPablo de Lara DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 259b0cbfb3SPablo de Lara THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 269b0cbfb3SPablo de Lara (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 279b0cbfb3SPablo de Lara OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 289b0cbfb3SPablo de Lara **********************************************************************/ 299b0cbfb3SPablo de Lara 309b0cbfb3SPablo de Lara /** 319b0cbfb3SPablo de Lara * @file aes_cbc_internal.h 329b0cbfb3SPablo de Lara * @brief AES CBC encryption/decryption internal function prototypes. 339b0cbfb3SPablo de Lara * 349b0cbfb3SPablo de Lara */ 359b0cbfb3SPablo de Lara #ifndef _AES_CBC_INTERNAL_H 369b0cbfb3SPablo de Lara #define _AES_CBC_INTERNAL_H 379b0cbfb3SPablo de Lara 389b0cbfb3SPablo de Lara #include <stdint.h> 399b0cbfb3SPablo de Lara 409b0cbfb3SPablo de Lara #ifdef __cplusplus 419b0cbfb3SPablo de Lara extern "C" { 429b0cbfb3SPablo de Lara 439b0cbfb3SPablo de Lara #endif 449b0cbfb3SPablo de Lara 459b0cbfb3SPablo de Lara /** @brief CBC-AES 128 bit key Decryption 469b0cbfb3SPablo de Lara * 479b0cbfb3SPablo de Lara * @requires SSE4.1 and AESNI 489b0cbfb3SPablo de Lara * 499b0cbfb3SPablo de Lara * arg 1: in: pointer to input (cipher text) 509b0cbfb3SPablo de Lara * arg 2: IV: pointer to IV, Must be 16 bytes aligned to a 16 byte boundary 519b0cbfb3SPablo de Lara * arg 3: keys: pointer to keys, Must be on a 16 byte boundary and length of key size * key rounds 529b0cbfb3SPablo de Lara * arg 4: OUT: pointer to output (plain text ... in-place allowed) 539b0cbfb3SPablo de Lara * arg 5: len_bytes: length in bytes (multiple of 16) 549b0cbfb3SPablo de Lara */ 559b0cbfb3SPablo de Lara void 569b0cbfb3SPablo de Lara _aes_cbc_dec_128(void *in, //!< Input cipher text 579b0cbfb3SPablo de Lara uint8_t *IV, //!< Must be 16 bytes aligned to a 16 byte boundary 589b0cbfb3SPablo de Lara uint8_t *keys, //!< Must be on a 16 byte boundary and length of key size * key 59*e4a84933SMarcel Cornu //!< rounds or dec_keys of isal_cbc_key_data 609b0cbfb3SPablo de Lara void *out, //!< Output plain text 619b0cbfb3SPablo de Lara uint64_t len_bytes //!< Must be a multiple of 16 bytes 629b0cbfb3SPablo de Lara ); 639b0cbfb3SPablo de Lara 649b0cbfb3SPablo de Lara /** @brief CBC-AES 192 bit key Decryption 659b0cbfb3SPablo de Lara * 669b0cbfb3SPablo de Lara * @requires SSE4.1 and AESNI 679b0cbfb3SPablo de Lara * 689b0cbfb3SPablo de Lara */ 699b0cbfb3SPablo de Lara void 709b0cbfb3SPablo de Lara _aes_cbc_dec_192(void *in, //!< Input cipher text 719b0cbfb3SPablo de Lara uint8_t *IV, //!< Must be 16 bytes aligned to a 16 byte boundary 729b0cbfb3SPablo de Lara uint8_t *keys, //!< Must be on a 16 byte boundary and length of key size * key 73*e4a84933SMarcel Cornu //!< rounds or dec_keys of isal_cbc_key_data 749b0cbfb3SPablo de Lara void *out, //!< Output plain text 759b0cbfb3SPablo de Lara uint64_t len_bytes //!< Must be a multiple of 16 bytes 769b0cbfb3SPablo de Lara ); 779b0cbfb3SPablo de Lara 789b0cbfb3SPablo de Lara /** @brief CBC-AES 256 bit key Decryption 799b0cbfb3SPablo de Lara * 809b0cbfb3SPablo de Lara * @requires SSE4.1 and AESNI 819b0cbfb3SPablo de Lara * 829b0cbfb3SPablo de Lara */ 839b0cbfb3SPablo de Lara void 849b0cbfb3SPablo de Lara _aes_cbc_dec_256(void *in, //!< Input cipher text 859b0cbfb3SPablo de Lara uint8_t *IV, //!< Must be 16 bytes aligned to a 16 byte boundary 869b0cbfb3SPablo de Lara uint8_t *keys, //!< Must be on a 16 byte boundary and length of key size * key 87*e4a84933SMarcel Cornu //!< rounds or dec_keys of isal_cbc_key_data 889b0cbfb3SPablo de Lara void *out, //!< Output plain text 899b0cbfb3SPablo de Lara uint64_t len_bytes //!< Must be a multiple of 16 bytes 909b0cbfb3SPablo de Lara ); 919b0cbfb3SPablo de Lara 929b0cbfb3SPablo de Lara /** @brief CBC-AES 128 bit key Encryption 939b0cbfb3SPablo de Lara * 949b0cbfb3SPablo de Lara * @requires SSE4.1 and AESNI 959b0cbfb3SPablo de Lara * 969b0cbfb3SPablo de Lara * arg 1: in: pointer to input (plain text) 979b0cbfb3SPablo de Lara * arg 2: IV: pointer to IV, Must be 16 bytes aligned to a 16 byte boundary 989b0cbfb3SPablo de Lara * arg 3: keys: pointer to keys, Must be on a 16 byte boundary and length of key size * key rounds 999b0cbfb3SPablo de Lara * arg 4: OUT: pointer to output (cipher text ... in-place allowed) 1009b0cbfb3SPablo de Lara * arg 5: len_bytes: length in bytes (multiple of 16) 1019b0cbfb3SPablo de Lara */ 1029b0cbfb3SPablo de Lara int 1039b0cbfb3SPablo de Lara _aes_cbc_enc_128(void *in, //!< Input plain text 1049b0cbfb3SPablo de Lara uint8_t *IV, //!< Must be 16 bytes aligned to a 16 byte boundary 1059b0cbfb3SPablo de Lara uint8_t *keys, //!< Must be on a 16 byte boundary and length of key size * key 106*e4a84933SMarcel Cornu //!< rounds or enc_keys of isal_cbc_key_data 1079b0cbfb3SPablo de Lara void *out, //!< Output cipher text 1089b0cbfb3SPablo de Lara uint64_t len_bytes //!< Must be a multiple of 16 bytes 1099b0cbfb3SPablo de Lara ); 1109b0cbfb3SPablo de Lara /** @brief CBC-AES 192 bit key Encryption 1119b0cbfb3SPablo de Lara * 1129b0cbfb3SPablo de Lara * @requires SSE4.1 and AESNI 1139b0cbfb3SPablo de Lara * 1149b0cbfb3SPablo de Lara */ 1159b0cbfb3SPablo de Lara int 1169b0cbfb3SPablo de Lara _aes_cbc_enc_192(void *in, //!< Input plain text 1179b0cbfb3SPablo de Lara uint8_t *IV, //!< Must be 16 bytes aligned to a 16 byte boundary 1189b0cbfb3SPablo de Lara uint8_t *keys, //!< Must be on a 16 byte boundary and length of key size * key 119*e4a84933SMarcel Cornu //!< rounds or enc_keys of isal_cbc_key_data 1209b0cbfb3SPablo de Lara void *out, //!< Output cipher text 1219b0cbfb3SPablo de Lara uint64_t len_bytes //!< Must be a multiple of 16 bytes 1229b0cbfb3SPablo de Lara ); 1239b0cbfb3SPablo de Lara 1249b0cbfb3SPablo de Lara /** @brief CBC-AES 256 bit key Encryption 1259b0cbfb3SPablo de Lara * 1269b0cbfb3SPablo de Lara * @requires SSE4.1 and AESNI 1279b0cbfb3SPablo de Lara * 1289b0cbfb3SPablo de Lara */ 1299b0cbfb3SPablo de Lara int 1309b0cbfb3SPablo de Lara _aes_cbc_enc_256(void *in, //!< Input plain text 1319b0cbfb3SPablo de Lara uint8_t *IV, //!< Must be 16 bytes aligned to a 16 byte boundary 1329b0cbfb3SPablo de Lara uint8_t *keys, //!< Must be on a 16 byte boundary and length of key size * key 133*e4a84933SMarcel Cornu //!< rounds or enc_keys of isal_cbc_key_data 1349b0cbfb3SPablo de Lara void *out, //!< Output cipher text 1359b0cbfb3SPablo de Lara uint64_t len_bytes //!< Must be a multiple of 16 bytes 1369b0cbfb3SPablo de Lara ); 1379b0cbfb3SPablo de Lara 1389b0cbfb3SPablo de Lara #ifdef __cplusplus 1399b0cbfb3SPablo de Lara } 1409b0cbfb3SPablo de Lara #endif //__cplusplus 1419b0cbfb3SPablo de Lara #endif // ifndef _AES_CBC_INTERNAL_H 142