17dcee0f8SGreg Tucker /********************************************************************** 27dcee0f8SGreg Tucker Copyright(c) 2011-2016 Intel Corporation All rights reserved. 37dcee0f8SGreg Tucker 47dcee0f8SGreg Tucker Redistribution and use in source and binary forms, with or without 57dcee0f8SGreg Tucker modification, are permitted provided that the following conditions 67dcee0f8SGreg Tucker are met: 77dcee0f8SGreg Tucker * Redistributions of source code must retain the above copyright 87dcee0f8SGreg Tucker notice, this list of conditions and the following disclaimer. 97dcee0f8SGreg Tucker * Redistributions in binary form must reproduce the above copyright 107dcee0f8SGreg Tucker notice, this list of conditions and the following disclaimer in 117dcee0f8SGreg Tucker the documentation and/or other materials provided with the 127dcee0f8SGreg Tucker distribution. 137dcee0f8SGreg Tucker * Neither the name of Intel Corporation nor the names of its 147dcee0f8SGreg Tucker contributors may be used to endorse or promote products derived 157dcee0f8SGreg Tucker from this software without specific prior written permission. 167dcee0f8SGreg Tucker 177dcee0f8SGreg Tucker THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 187dcee0f8SGreg Tucker "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 197dcee0f8SGreg Tucker LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 207dcee0f8SGreg Tucker A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 217dcee0f8SGreg Tucker OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 227dcee0f8SGreg Tucker SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 237dcee0f8SGreg Tucker LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 247dcee0f8SGreg Tucker DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 257dcee0f8SGreg Tucker THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 267dcee0f8SGreg Tucker (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 277dcee0f8SGreg Tucker OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 287dcee0f8SGreg Tucker **********************************************************************/ 297dcee0f8SGreg Tucker 307dcee0f8SGreg Tucker /** 317dcee0f8SGreg Tucker * @file aes_cbc.h 327dcee0f8SGreg Tucker * @brief AES CBC encryption/decryption function prototypes. 337dcee0f8SGreg Tucker * 347dcee0f8SGreg Tucker */ 357dcee0f8SGreg Tucker #ifndef _AES_CBC_h 367dcee0f8SGreg Tucker #define _AES_CBC_h 377dcee0f8SGreg Tucker 387dcee0f8SGreg Tucker #include <stdint.h> 397dcee0f8SGreg Tucker 409b0cbfb3SPablo de Lara #include "types.h" 419b0cbfb3SPablo de Lara 427dcee0f8SGreg Tucker #ifdef __cplusplus 437dcee0f8SGreg Tucker extern "C" { 447dcee0f8SGreg Tucker 457dcee0f8SGreg Tucker #endif 467dcee0f8SGreg Tucker 47e4a84933SMarcel Cornu /* 48e4a84933SMarcel Cornu * Define enums from API v2.24, so applications that were using this version 49e4a84933SMarcel Cornu * will still be compiled successfully. 50e4a84933SMarcel Cornu * This list does not need to be extended for new definitions. 51e4a84933SMarcel Cornu */ 52e4a84933SMarcel Cornu #ifndef NO_COMPAT_ISAL_CRYPTO_API_2_24 53e4a84933SMarcel Cornu /***** Previous hash constants and typedefs *****/ 54e4a84933SMarcel Cornu #define CBC_128_BITS ISAL_CBC_128_BITS 55e4a84933SMarcel Cornu #define CBC_192_BITS ISAL_CBC_192_BITS 56e4a84933SMarcel Cornu #define CBC_256_BITS ISAL_CBC_256_BITS 577dcee0f8SGreg Tucker 58e4a84933SMarcel Cornu #define CBC_ROUND_KEY_LEN ISAL_CBC_ROUND_KEY_LEN 59e4a84933SMarcel Cornu #define CBC_128_KEY_ROUNDS ISAL_CBC_128_KEY_ROUNDS 60e4a84933SMarcel Cornu #define CBC_192_KEY_ROUNDS ISAL_CBC_192_KEY_ROUNDS 61e4a84933SMarcel Cornu #define CBC_256_KEY_ROUNDS ISAL_CBC_256_KEY_ROUNDS 62e4a84933SMarcel Cornu #define CBC_MAX_KEYS_SIZE ISAL_CBC_MAX_KEYS_SIZE 63e4a84933SMarcel Cornu 64e4a84933SMarcel Cornu #define CBC_IV_DATA_LEN ISAL_CBC_IV_DATA_LEN 65e4a84933SMarcel Cornu 66e4a84933SMarcel Cornu #define cbc_key_data isal_cbc_key_data 67e4a84933SMarcel Cornu #define cbc_key_size isal_cbc_key_size 68e4a84933SMarcel Cornu #endif /* !NO_COMPAT_ISAL_CRYPTO_API_2_24 */ 69e4a84933SMarcel Cornu 70e4a84933SMarcel Cornu typedef enum isal_cbc_key_size { 71e4a84933SMarcel Cornu ISAL_CBC_128_BITS = 16, 72e4a84933SMarcel Cornu ISAL_CBC_192_BITS = 24, 73e4a84933SMarcel Cornu ISAL_CBC_256_BITS = 32 74e4a84933SMarcel Cornu } isal_cbc_key_size; 75e4a84933SMarcel Cornu #define ISAL_CBC_ROUND_KEY_LEN (16) 76e4a84933SMarcel Cornu #define ISAL_CBC_128_KEY_ROUNDS (10 + 1) /*expanded key holds 10 key rounds plus original key*/ 77e4a84933SMarcel Cornu #define ISAL_CBC_192_KEY_ROUNDS (12 + 1) /*expanded key holds 12 key rounds plus original key*/ 78e4a84933SMarcel Cornu #define ISAL_CBC_256_KEY_ROUNDS (14 + 1) /*expanded key holds 14 key rounds plus original key*/ 79e4a84933SMarcel Cornu #define ISAL_CBC_MAX_KEYS_SIZE (ISAL_CBC_ROUND_KEY_LEN * ISAL_CBC_256_KEY_ROUNDS) 80e4a84933SMarcel Cornu 81e4a84933SMarcel Cornu #define ISAL_CBC_IV_DATA_LEN (16) 827dcee0f8SGreg Tucker 837dcee0f8SGreg Tucker /** @brief holds intermediate key data used in encryption/decryption 847dcee0f8SGreg Tucker * 857dcee0f8SGreg Tucker */ 86e4a84933SMarcel Cornu struct isal_cbc_key_data { // must be 16 byte aligned 87e4a84933SMarcel Cornu uint8_t enc_keys[ISAL_CBC_MAX_KEYS_SIZE]; 88e4a84933SMarcel Cornu uint8_t dec_keys[ISAL_CBC_MAX_KEYS_SIZE]; 897dcee0f8SGreg Tucker }; 907dcee0f8SGreg Tucker 917dcee0f8SGreg Tucker /** @brief CBC-AES key pre-computation done once for a key 927dcee0f8SGreg Tucker * 93e28f3412SPablo de Lara * @deprecated Please use isal_aes_keyexp_128(), isal_aes_keyexp_192() or isal_aes_keyexp_256() 94e28f3412SPablo de Lara * instead. 957dcee0f8SGreg Tucker * @requires SSE4.1 and AESNI 967dcee0f8SGreg Tucker * 977dcee0f8SGreg Tucker * arg 1: in: pointer to key 987dcee0f8SGreg Tucker * arg 2: OUT: pointer to a key expanded data 997dcee0f8SGreg Tucker */ 100*21f671bbSMarcel Cornu ISAL_DEPRECATED("Please use isal_aes_keyexp_128/192/256() instead") 1011de5344dSMarcel Cornu int 102e4a84933SMarcel Cornu aes_cbc_precomp(uint8_t *key, int key_size, struct isal_cbc_key_data *keys_blk); 1037dcee0f8SGreg Tucker 1047dcee0f8SGreg Tucker /** @brief CBC-AES 128 bit key Decryption 1057dcee0f8SGreg Tucker * 1069b0cbfb3SPablo de Lara * @deprecated Please use isal_aes_cbc_dec_128() instead. 1077dcee0f8SGreg Tucker * @requires SSE4.1 and AESNI 1087dcee0f8SGreg Tucker * 1097dcee0f8SGreg Tucker * arg 1: in: pointer to input (cipher text) 1107dcee0f8SGreg Tucker * arg 2: IV: pointer to IV, Must be 16 bytes aligned to a 16 byte boundary 1117dcee0f8SGreg Tucker * arg 3: keys: pointer to keys, Must be on a 16 byte boundary and length of key size * key rounds 1127dcee0f8SGreg Tucker * arg 4: OUT: pointer to output (plain text ... in-place allowed) 1137dcee0f8SGreg Tucker * arg 5: len_bytes: length in bytes (multiple of 16) 1147dcee0f8SGreg Tucker */ 1159b0cbfb3SPablo de Lara ISAL_DEPRECATED("Please use isal_aes_cbc_dec_128() instead") 1161de5344dSMarcel Cornu void 1171de5344dSMarcel Cornu aes_cbc_dec_128(void *in, //!< Input cipher text 1187dcee0f8SGreg Tucker uint8_t *IV, //!< Must be 16 bytes aligned to a 16 byte boundary 1191de5344dSMarcel Cornu uint8_t *keys, //!< Must be on a 16 byte boundary and length of key size * key 120e4a84933SMarcel Cornu //!< rounds or dec_keys of isal_cbc_key_data 121a92afe19SGreg Tucker void *out, //!< Output plain text 122a92afe19SGreg Tucker uint64_t len_bytes //!< Must be a multiple of 16 bytes 123a92afe19SGreg Tucker ); 1247dcee0f8SGreg Tucker 1257dcee0f8SGreg Tucker /** @brief CBC-AES 192 bit key Decryption 1267dcee0f8SGreg Tucker * 1279b0cbfb3SPablo de Lara * @deprecated Please use isal_aes_cbc_dec_192() instead. 1287dcee0f8SGreg Tucker * @requires SSE4.1 and AESNI 1297dcee0f8SGreg Tucker * 1307dcee0f8SGreg Tucker */ 1319b0cbfb3SPablo de Lara ISAL_DEPRECATED("Please use isal_aes_cbc_dec_192() instead") 1321de5344dSMarcel Cornu void 1331de5344dSMarcel Cornu aes_cbc_dec_192(void *in, //!< Input cipher text 1347dcee0f8SGreg Tucker uint8_t *IV, //!< Must be 16 bytes aligned to a 16 byte boundary 1351de5344dSMarcel Cornu uint8_t *keys, //!< Must be on a 16 byte boundary and length of key size * key 136e4a84933SMarcel Cornu //!< rounds or dec_keys of isal_cbc_key_data 137a92afe19SGreg Tucker void *out, //!< Output plain text 138a92afe19SGreg Tucker uint64_t len_bytes //!< Must be a multiple of 16 bytes 139a92afe19SGreg Tucker ); 1407dcee0f8SGreg Tucker 1417dcee0f8SGreg Tucker /** @brief CBC-AES 256 bit key Decryption 1427dcee0f8SGreg Tucker * 1439b0cbfb3SPablo de Lara * @deprecated Please use isal_aes_cbc_dec_256() instead. 1447dcee0f8SGreg Tucker * @requires SSE4.1 and AESNI 1457dcee0f8SGreg Tucker * 1467dcee0f8SGreg Tucker */ 1479b0cbfb3SPablo de Lara ISAL_DEPRECATED("Please use isal_aes_cbc_dec_256() instead") 1481de5344dSMarcel Cornu void 1491de5344dSMarcel Cornu aes_cbc_dec_256(void *in, //!< Input cipher text 1507dcee0f8SGreg Tucker uint8_t *IV, //!< Must be 16 bytes aligned to a 16 byte boundary 1511de5344dSMarcel Cornu uint8_t *keys, //!< Must be on a 16 byte boundary and length of key size * key 152e4a84933SMarcel Cornu //!< rounds or dec_keys of isal_cbc_key_data 153a92afe19SGreg Tucker void *out, //!< Output plain text 154a92afe19SGreg Tucker uint64_t len_bytes //!< Must be a multiple of 16 bytes 155a92afe19SGreg Tucker ); 1567dcee0f8SGreg Tucker 1577dcee0f8SGreg Tucker /** @brief CBC-AES 128 bit key Encryption 1587dcee0f8SGreg Tucker * 1599b0cbfb3SPablo de Lara * @deprecated Please use isal_aes_cbc_enc_128() instead. 1607dcee0f8SGreg Tucker * @requires SSE4.1 and AESNI 1617dcee0f8SGreg Tucker * 1627dcee0f8SGreg Tucker * arg 1: in: pointer to input (plain text) 1637dcee0f8SGreg Tucker * arg 2: IV: pointer to IV, Must be 16 bytes aligned to a 16 byte boundary 1647dcee0f8SGreg Tucker * arg 3: keys: pointer to keys, Must be on a 16 byte boundary and length of key size * key rounds 1657dcee0f8SGreg Tucker * arg 4: OUT: pointer to output (cipher text ... in-place allowed) 1667dcee0f8SGreg Tucker * arg 5: len_bytes: length in bytes (multiple of 16) 1677dcee0f8SGreg Tucker */ 1689b0cbfb3SPablo de Lara ISAL_DEPRECATED("Please use isal_aes_cbc_enc_128() instead") 1691de5344dSMarcel Cornu int 1701de5344dSMarcel Cornu aes_cbc_enc_128(void *in, //!< Input plain text 1717dcee0f8SGreg Tucker uint8_t *IV, //!< Must be 16 bytes aligned to a 16 byte boundary 1721de5344dSMarcel Cornu uint8_t *keys, //!< Must be on a 16 byte boundary and length of key size * key 173e4a84933SMarcel Cornu //!< rounds or enc_keys of isal_cbc_key_data 174a92afe19SGreg Tucker void *out, //!< Output cipher text 175a92afe19SGreg Tucker uint64_t len_bytes //!< Must be a multiple of 16 bytes 176a92afe19SGreg Tucker ); 1777dcee0f8SGreg Tucker /** @brief CBC-AES 192 bit key Encryption 1787dcee0f8SGreg Tucker * 1799b0cbfb3SPablo de Lara * @deprecated Please use isal_aes_cbc_enc_192() instead. 1807dcee0f8SGreg Tucker * @requires SSE4.1 and AESNI 1817dcee0f8SGreg Tucker * 1827dcee0f8SGreg Tucker */ 1839b0cbfb3SPablo de Lara ISAL_DEPRECATED("Please use isal_aes_cbc_enc_192() instead") 1841de5344dSMarcel Cornu int 1851de5344dSMarcel Cornu aes_cbc_enc_192(void *in, //!< Input plain text 1867dcee0f8SGreg Tucker uint8_t *IV, //!< Must be 16 bytes aligned to a 16 byte boundary 1871de5344dSMarcel Cornu uint8_t *keys, //!< Must be on a 16 byte boundary and length of key size * key 188e4a84933SMarcel Cornu //!< rounds or enc_keys of isal_cbc_key_data 189a92afe19SGreg Tucker void *out, //!< Output cipher text 190a92afe19SGreg Tucker uint64_t len_bytes //!< Must be a multiple of 16 bytes 191a92afe19SGreg Tucker ); 1927dcee0f8SGreg Tucker 1937dcee0f8SGreg Tucker /** @brief CBC-AES 256 bit key Encryption 1947dcee0f8SGreg Tucker * 1959b0cbfb3SPablo de Lara * @deprecated Please use isal_aes_cbc_enc_256() instead. 1967dcee0f8SGreg Tucker * @requires SSE4.1 and AESNI 1977dcee0f8SGreg Tucker * 1987dcee0f8SGreg Tucker */ 1999b0cbfb3SPablo de Lara ISAL_DEPRECATED("Please use isal_aes_cbc_enc_256() instead") 2001de5344dSMarcel Cornu int 2011de5344dSMarcel Cornu aes_cbc_enc_256(void *in, //!< Input plain text 2027dcee0f8SGreg Tucker uint8_t *IV, //!< Must be 16 bytes aligned to a 16 byte boundary 2031de5344dSMarcel Cornu uint8_t *keys, //!< Must be on a 16 byte boundary and length of key size * key 204e4a84933SMarcel Cornu //!< rounds or enc_keys of isal_cbc_key_data 205a92afe19SGreg Tucker void *out, //!< Output cipher text 206a92afe19SGreg Tucker uint64_t len_bytes //!< Must be a multiple of 16 bytes 207a92afe19SGreg Tucker ); 2087dcee0f8SGreg Tucker 209f4d9a1fbSPablo de Lara /** @brief CBC-AES 128 bit key Decryption 210f4d9a1fbSPablo de Lara * 211f4d9a1fbSPablo de Lara * @requires AES extensions and SSE4.1 for x86 or ASIMD for ARM 212f4d9a1fbSPablo de Lara * 213f4d9a1fbSPablo de Lara * @return Operation status 214f4d9a1fbSPablo de Lara * @retval 0 on success 215f4d9a1fbSPablo de Lara * @retval Non-zero \a ISAL_CRYPTO_ERR on failure 216f4d9a1fbSPablo de Lara */ 2171de5344dSMarcel Cornu int 2189b0cbfb3SPablo de Lara isal_aes_cbc_dec_128(const void *in, //!< Input ciphertext 2199b0cbfb3SPablo de Lara const void *iv, //!< Initialization vector. Must be 16 bytes aligned. 2209b0cbfb3SPablo de Lara const void *keys, //!< Expanded decryption keys. Must be on a 16 byte boundary. 221f4d9a1fbSPablo de Lara void *out, //!< Output plaintext 222f4d9a1fbSPablo de Lara const uint64_t len_bytes //!< Input length. Must be a multiple of 16 bytes 223f4d9a1fbSPablo de Lara ); 224f4d9a1fbSPablo de Lara 225f4d9a1fbSPablo de Lara /** @brief CBC-AES 192 bit key Decryption 226f4d9a1fbSPablo de Lara * 227f4d9a1fbSPablo de Lara * @requires AES extensions and SSE4.1 for x86 or ASIMD for ARM 228f4d9a1fbSPablo de Lara * @return Operation status 229f4d9a1fbSPablo de Lara * @retval 0 on success 230f4d9a1fbSPablo de Lara * @retval Non-zero \a ISAL_CRYPTO_ERR on failure 231f4d9a1fbSPablo de Lara */ 2321de5344dSMarcel Cornu int 2339b0cbfb3SPablo de Lara isal_aes_cbc_dec_192(const void *in, //!< Input ciphertext 2349b0cbfb3SPablo de Lara const void *iv, //!< Initialization vector. Must be 16 bytes aligned. 2359b0cbfb3SPablo de Lara const void *keys, //!< Expanded decryption keys. Must be on a 16 byte boundary. 236f4d9a1fbSPablo de Lara void *out, //!< Output plaintext 237f4d9a1fbSPablo de Lara const uint64_t len_bytes //!< Input length. Must be a multiple of 16 bytes 238f4d9a1fbSPablo de Lara ); 239f4d9a1fbSPablo de Lara 240f4d9a1fbSPablo de Lara /** @brief CBC-AES 256 bit key Decryption 241f4d9a1fbSPablo de Lara * 242f4d9a1fbSPablo de Lara * @requires AES extensions and SSE4.1 for x86 or ASIMD for ARM 243f4d9a1fbSPablo de Lara * @return Operation status 244f4d9a1fbSPablo de Lara * @retval 0 on success 245f4d9a1fbSPablo de Lara * @retval Non-zero \a ISAL_CRYPTO_ERR on failure 246f4d9a1fbSPablo de Lara */ 2471de5344dSMarcel Cornu int 2489b0cbfb3SPablo de Lara isal_aes_cbc_dec_256(const void *in, //!< Input ciphertext 2499b0cbfb3SPablo de Lara const void *iv, //!< Initialization vector. Must be 16 bytes aligned. 2509b0cbfb3SPablo de Lara const void *keys, //!< Expanded decryption keys. Must be on a 16 byte boundary. 251f4d9a1fbSPablo de Lara void *out, //!< Output plaintext 252f4d9a1fbSPablo de Lara const uint64_t len_bytes //!< Input length. Must be a multiple of 16 bytes 253f4d9a1fbSPablo de Lara ); 254f4d9a1fbSPablo de Lara 255f4d9a1fbSPablo de Lara /** @brief CBC-AES 128 bit key Encryption 256f4d9a1fbSPablo de Lara * 257f4d9a1fbSPablo de Lara * @requires AES extensions and SSE4.1 for x86 or ASIMD for ARM 258f4d9a1fbSPablo de Lara * 259f4d9a1fbSPablo de Lara * @return Operation status 260f4d9a1fbSPablo de Lara * @retval 0 on success 261f4d9a1fbSPablo de Lara * @retval Non-zero \a ISAL_CRYPTO_ERR on failure 262f4d9a1fbSPablo de Lara */ 2631de5344dSMarcel Cornu int 2649b0cbfb3SPablo de Lara isal_aes_cbc_enc_128(const void *in, //!< Input plaintext 2659b0cbfb3SPablo de Lara const void *iv, //!< Initialization vector. Must be 16 bytes aligned. 2669b0cbfb3SPablo de Lara const void *keys, //!< Expanded decryption keys. Must be on a 16 byte boundary. 267f4d9a1fbSPablo de Lara void *out, //!< Output ciphertext 268f4d9a1fbSPablo de Lara const uint64_t len_bytes //!< Input length. Must be a multiple of 16 bytes 269f4d9a1fbSPablo de Lara ); 270f4d9a1fbSPablo de Lara /** @brief CBC-AES 192 bit key Encryption 271f4d9a1fbSPablo de Lara * 272f4d9a1fbSPablo de Lara * @requires AES extensions and SSE4.1 for x86 or ASIMD for ARM 273f4d9a1fbSPablo de Lara * @return Operation status 274f4d9a1fbSPablo de Lara * @retval 0 on success 275f4d9a1fbSPablo de Lara * @retval Non-zero \a ISAL_CRYPTO_ERR on failure 276f4d9a1fbSPablo de Lara */ 2771de5344dSMarcel Cornu int 2789b0cbfb3SPablo de Lara isal_aes_cbc_enc_192(const void *in, //!< Input plaintext 2799b0cbfb3SPablo de Lara const void *iv, //!< Initialization vector. Must be 16 bytes aligned. 2809b0cbfb3SPablo de Lara const void *keys, //!< Expanded decryption keys. Must be on a 16 byte boundary. 281f4d9a1fbSPablo de Lara void *out, //!< Output ciphertext 282f4d9a1fbSPablo de Lara const uint64_t len_bytes //!< Input length. Must be a multiple of 16 bytes 283f4d9a1fbSPablo de Lara ); 284f4d9a1fbSPablo de Lara 285f4d9a1fbSPablo de Lara /** @brief CBC-AES 256 bit key Encryption 286f4d9a1fbSPablo de Lara * 287f4d9a1fbSPablo de Lara * @requires AES extensions and SSE4.1 for x86 or ASIMD for ARM 288f4d9a1fbSPablo de Lara * @return Operation status 289f4d9a1fbSPablo de Lara * @retval 0 on success 290f4d9a1fbSPablo de Lara * @retval Non-zero \a ISAL_CRYPTO_ERR on failure 291f4d9a1fbSPablo de Lara */ 2921de5344dSMarcel Cornu int 2939b0cbfb3SPablo de Lara isal_aes_cbc_enc_256(const void *in, //!< Input plaintext 2949b0cbfb3SPablo de Lara const void *iv, //!< Initialization vector. Must be 16 bytes aligned. 2959b0cbfb3SPablo de Lara const void *keys, //!< Expanded decryption keys. Must be on a 16 byte boundary. 296f4d9a1fbSPablo de Lara void *out, //!< Output ciphertext 297f4d9a1fbSPablo de Lara const uint64_t len_bytes //!< Input length. Must be a multiple of 16 bytes 298f4d9a1fbSPablo de Lara ); 299f4d9a1fbSPablo de Lara 3007dcee0f8SGreg Tucker #ifdef __cplusplus 3017dcee0f8SGreg Tucker } 3027dcee0f8SGreg Tucker #endif //__cplusplus 3037dcee0f8SGreg Tucker #endif // ifndef _AES_CBC_h 304