xref: /isa-l_crypto/include/aes_cbc_internal.h (revision e4a84933e1bf6f71c1dc3b1cc2ab577691c784d9)
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