xref: /openbmc/linux/net/mac80211/aes_ccm.h (revision d2912cb1)
1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2f0706e82SJiri Benc /*
3f0706e82SJiri Benc  * Copyright 2003-2004, Instant802 Networks, Inc.
4f0706e82SJiri Benc  * Copyright 2006, Devicescape Software, Inc.
5f0706e82SJiri Benc  */
6f0706e82SJiri Benc 
7f0706e82SJiri Benc #ifndef AES_CCM_H
8f0706e82SJiri Benc #define AES_CCM_H
9f0706e82SJiri Benc 
104133da73SXiang Gao #include "aead_api.h"
11f0706e82SJiri Benc 
12f4a067f9SArd Biesheuvel #define CCM_AAD_LEN	32
13f4a067f9SArd Biesheuvel 
144133da73SXiang Gao static inline struct crypto_aead *
ieee80211_aes_key_setup_encrypt(const u8 key[],size_t key_len,size_t mic_len)154133da73SXiang Gao ieee80211_aes_key_setup_encrypt(const u8 key[], size_t key_len, size_t mic_len)
164133da73SXiang Gao {
174133da73SXiang Gao 	return aead_key_setup_encrypt("ccm(aes)", key, key_len, mic_len);
184133da73SXiang Gao }
194133da73SXiang Gao 
204133da73SXiang Gao static inline int
ieee80211_aes_ccm_encrypt(struct crypto_aead * tfm,u8 * b_0,u8 * aad,u8 * data,size_t data_len,u8 * mic)214133da73SXiang Gao ieee80211_aes_ccm_encrypt(struct crypto_aead *tfm,
224133da73SXiang Gao 			  u8 *b_0, u8 *aad, u8 *data,
234133da73SXiang Gao 			  size_t data_len, u8 *mic)
244133da73SXiang Gao {
254133da73SXiang Gao 	return aead_encrypt(tfm, b_0, aad + 2,
264133da73SXiang Gao 			    be16_to_cpup((__be16 *)aad),
274133da73SXiang Gao 			    data, data_len, mic);
284133da73SXiang Gao }
294133da73SXiang Gao 
304133da73SXiang Gao static inline int
ieee80211_aes_ccm_decrypt(struct crypto_aead * tfm,u8 * b_0,u8 * aad,u8 * data,size_t data_len,u8 * mic)314133da73SXiang Gao ieee80211_aes_ccm_decrypt(struct crypto_aead *tfm,
324133da73SXiang Gao 			  u8 *b_0, u8 *aad, u8 *data,
334133da73SXiang Gao 			  size_t data_len, u8 *mic)
344133da73SXiang Gao {
354133da73SXiang Gao 	return aead_decrypt(tfm, b_0, aad + 2,
364133da73SXiang Gao 			    be16_to_cpup((__be16 *)aad),
374133da73SXiang Gao 			    data, data_len, mic);
384133da73SXiang Gao }
394133da73SXiang Gao 
ieee80211_aes_key_free(struct crypto_aead * tfm)404133da73SXiang Gao static inline void ieee80211_aes_key_free(struct crypto_aead *tfm)
414133da73SXiang Gao {
424133da73SXiang Gao 	return aead_key_free(tfm);
434133da73SXiang Gao }
44f0706e82SJiri Benc 
45f0706e82SJiri Benc #endif /* AES_CCM_H */
46