1*04171cfcSAugustin Cavalier /* $OpenBSD: aes.h,v 1.4 2020/07/22 13:54:30 tobhe Exp $ */ 2*04171cfcSAugustin Cavalier /* 3*04171cfcSAugustin Cavalier * Copyright (c) 2016 Thomas Pornin <pornin@bolet.org> 4*04171cfcSAugustin Cavalier * Copyright (c) 2016 Mike Belopuhov 5*04171cfcSAugustin Cavalier * 6*04171cfcSAugustin Cavalier * Permission is hereby granted, free of charge, to any person obtaining 7*04171cfcSAugustin Cavalier * a copy of this software and associated documentation files (the 8*04171cfcSAugustin Cavalier * "Software"), to deal in the Software without restriction, including 9*04171cfcSAugustin Cavalier * without limitation the rights to use, copy, modify, merge, publish, 10*04171cfcSAugustin Cavalier * distribute, sublicense, and/or sell copies of the Software, and to 11*04171cfcSAugustin Cavalier * permit persons to whom the Software is furnished to do so, subject to 12*04171cfcSAugustin Cavalier * the following conditions: 13*04171cfcSAugustin Cavalier * 14*04171cfcSAugustin Cavalier * The above copyright notice and this permission notice shall be 15*04171cfcSAugustin Cavalier * included in all copies or substantial portions of the Software. 16*04171cfcSAugustin Cavalier * 17*04171cfcSAugustin Cavalier * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18*04171cfcSAugustin Cavalier * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19*04171cfcSAugustin Cavalier * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20*04171cfcSAugustin Cavalier * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 21*04171cfcSAugustin Cavalier * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 22*04171cfcSAugustin Cavalier * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23*04171cfcSAugustin Cavalier * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24*04171cfcSAugustin Cavalier * SOFTWARE. 25*04171cfcSAugustin Cavalier */ 26*04171cfcSAugustin Cavalier 27*04171cfcSAugustin Cavalier #ifndef _AES_H_ 28*04171cfcSAugustin Cavalier #define _AES_H_ 29*04171cfcSAugustin Cavalier 30*04171cfcSAugustin Cavalier #ifndef AES_MAXROUNDS 31*04171cfcSAugustin Cavalier #define AES_MAXROUNDS (14) 32*04171cfcSAugustin Cavalier #endif 33*04171cfcSAugustin Cavalier 34*04171cfcSAugustin Cavalier typedef struct aes_ctx { 35*04171cfcSAugustin Cavalier uint32_t sk[60]; 36*04171cfcSAugustin Cavalier uint32_t sk_exp[120]; 37*04171cfcSAugustin Cavalier 38*04171cfcSAugustin Cavalier unsigned num_rounds; 39*04171cfcSAugustin Cavalier } AES_CTX; 40*04171cfcSAugustin Cavalier 41*04171cfcSAugustin Cavalier int AES_Setkey(AES_CTX *, const uint8_t *, int); 42*04171cfcSAugustin Cavalier void AES_Encrypt(AES_CTX *, const uint8_t *, uint8_t *); 43*04171cfcSAugustin Cavalier void AES_Decrypt(AES_CTX *, const uint8_t *, uint8_t *); 44*04171cfcSAugustin Cavalier void AES_Encrypt_ECB(AES_CTX *, const uint8_t *, uint8_t *, size_t); 45*04171cfcSAugustin Cavalier void AES_Decrypt_ECB(AES_CTX *, const uint8_t *, uint8_t *, size_t); 46*04171cfcSAugustin Cavalier 47*04171cfcSAugustin Cavalier int AES_KeySetup_Encrypt(uint32_t *, const uint8_t *, int); 48*04171cfcSAugustin Cavalier int AES_KeySetup_Decrypt(uint32_t *, const uint8_t *, int); 49*04171cfcSAugustin Cavalier 50*04171cfcSAugustin Cavalier #endif /* _AES_H_ */ 51