#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/random.h>
#include <linux/skbuff.h>
#include <linux/netdevice.h>
#include <linux/if_ether.h>
#include <linux/if_arp.h>
#include <linux/string.h>
#include <linux/wireless.h>
#include "rtllib.h"
#include <linux/crypto.h>
#include <crypto/aead.h>
#include <linux/scatterlist.h>
#define AES_BLOCK_LEN …
#define CCMP_HDR_LEN …
#define CCMP_MIC_LEN …
#define CCMP_TK_LEN …
#define CCMP_PN_LEN …
struct rtllib_ccmp_data { … };
static void *rtllib_ccmp_init(int key_idx)
{ … }
static void rtllib_ccmp_deinit(void *priv)
{ … }
static int ccmp_init_iv_and_aad(struct ieee80211_hdr *hdr,
u8 *pn, u8 *iv, u8 *aad)
{ … }
static int rtllib_ccmp_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
{ … }
static int rtllib_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
{ … }
static int rtllib_ccmp_set_key(void *key, int len, u8 *seq, void *priv)
{ … }
static int rtllib_ccmp_get_key(void *key, int len, u8 *seq, void *priv)
{ … }
static void rtllib_ccmp_print_stats(struct seq_file *m, void *priv)
{ … }
static const struct lib80211_crypto_ops rtllib_crypt_ccmp = …;
static int __init rtllib_crypto_ccmp_init(void)
{ … }
static void __exit rtllib_crypto_ccmp_exit(void)
{ … }
module_init(rtllib_crypto_ccmp_init);
module_exit(rtllib_crypto_ccmp_exit);
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;