xref: /isa-l_crypto/include/aes_cbc.h (revision 21f671bb7b7fa58d61ea5668e679bc3fea54e32b)
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