Path: blob/main/sys/net80211/ieee80211_crypto_gcm.h
39475 views
/*-1* SPDX-License-Identifier: BSD-2-Clause2*3* Copyright (c) 2012, Jouni Malinen <[email protected]>4* All rights reserved.5*6* Galois/Counter Mode (GCM) and GMAC with AES7*8* Redistribution and use in source and binary forms, with or without9* modification, are permitted provided that the following conditions10* are met:11* 1. Redistributions of source code must retain the above copyright12* notice, this list of conditions and the following disclaimer.13* 2. Redistributions in binary form must reproduce the above copyright14* notice, this list of conditions and the following disclaimer in the15* documentation and/or other materials provided with the distribution.16*17* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR18* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES19* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.20* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,21* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT22* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,23* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY24* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT25* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF26* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.27*/28#ifndef __IEEE80211_CRYPTO_GCM_H__29#define __IEEE80211_CRYPTO_GCM_H__3031#if defined(__KERNEL__) || defined(_KERNEL)3233#include <crypto/rijndael/rijndael.h>3435#define AES_BLOCK_LEN 163637/*38* buffer is 2x the AES_BLOCK_LEN, but the AAD contents may be variable39* and are padded.40*/41#define GCM_AAD_LEN (AES_BLOCK_LEN * 2)4243/* GCMP is always 128 bit / 16 byte MIC */44#define GCMP_MIC_LEN 164546void ieee80211_crypto_aes_gcm_ae(rijndael_ctx *aes, const uint8_t *iv,47size_t iv_len, const uint8_t *plain, size_t plain_len,48const uint8_t *aad, size_t aad_len, uint8_t *crypt, uint8_t *tag);4950int ieee80211_crypto_aes_gcm_ad(rijndael_ctx *aes, const uint8_t *iv,51size_t iv_len, const uint8_t *crypt, size_t crypt_len,52const uint8_t *aad, size_t aad_len, const uint8_t *tag,53uint8_t *plain);5455#endif /* __KERNEL__ */5657#endif /* __IEEE80211_CRYPTO_GCM_H__ */585960