1*d2912cb1SThomas 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