cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

llsec.h (2824B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) 2014 Fraunhofer ITWM
      4 *
      5 * Written by:
      6 * Phoebe Buckheister <phoebe.buckheister@itwm.fraunhofer.de>
      7 */
      8
      9#ifndef MAC802154_LLSEC_H
     10#define MAC802154_LLSEC_H
     11
     12#include <linux/slab.h>
     13#include <linux/hashtable.h>
     14#include <linux/kref.h>
     15#include <linux/spinlock.h>
     16#include <net/af_ieee802154.h>
     17#include <net/ieee802154_netdev.h>
     18
     19struct mac802154_llsec_key {
     20	struct ieee802154_llsec_key key;
     21
     22	/* one tfm for each authsize (4/8/16) */
     23	struct crypto_aead *tfm[3];
     24	struct crypto_sync_skcipher *tfm0;
     25
     26	struct kref ref;
     27};
     28
     29struct mac802154_llsec_device_key {
     30	struct ieee802154_llsec_device_key devkey;
     31
     32	struct rcu_head rcu;
     33};
     34
     35struct mac802154_llsec_device {
     36	struct ieee802154_llsec_device dev;
     37
     38	struct hlist_node bucket_s;
     39	struct hlist_node bucket_hw;
     40
     41	/* protects dev.frame_counter and the elements of dev.keys */
     42	spinlock_t lock;
     43
     44	struct rcu_head rcu;
     45};
     46
     47struct mac802154_llsec_seclevel {
     48	struct ieee802154_llsec_seclevel level;
     49
     50	struct rcu_head rcu;
     51};
     52
     53struct mac802154_llsec {
     54	struct ieee802154_llsec_params params;
     55	struct ieee802154_llsec_table table;
     56
     57	DECLARE_HASHTABLE(devices_short, 6);
     58	DECLARE_HASHTABLE(devices_hw, 6);
     59
     60	/* protects params, all other fields are fine with RCU */
     61	rwlock_t lock;
     62};
     63
     64void mac802154_llsec_init(struct mac802154_llsec *sec);
     65void mac802154_llsec_destroy(struct mac802154_llsec *sec);
     66
     67int mac802154_llsec_get_params(struct mac802154_llsec *sec,
     68			       struct ieee802154_llsec_params *params);
     69int mac802154_llsec_set_params(struct mac802154_llsec *sec,
     70			       const struct ieee802154_llsec_params *params,
     71			       int changed);
     72
     73int mac802154_llsec_key_add(struct mac802154_llsec *sec,
     74			    const struct ieee802154_llsec_key_id *id,
     75			    const struct ieee802154_llsec_key *key);
     76int mac802154_llsec_key_del(struct mac802154_llsec *sec,
     77			    const struct ieee802154_llsec_key_id *key);
     78
     79int mac802154_llsec_dev_add(struct mac802154_llsec *sec,
     80			    const struct ieee802154_llsec_device *dev);
     81int mac802154_llsec_dev_del(struct mac802154_llsec *sec,
     82			    __le64 device_addr);
     83
     84int mac802154_llsec_devkey_add(struct mac802154_llsec *sec,
     85			       __le64 dev_addr,
     86			       const struct ieee802154_llsec_device_key *key);
     87int mac802154_llsec_devkey_del(struct mac802154_llsec *sec,
     88			       __le64 dev_addr,
     89			       const struct ieee802154_llsec_device_key *key);
     90
     91int mac802154_llsec_seclevel_add(struct mac802154_llsec *sec,
     92				 const struct ieee802154_llsec_seclevel *sl);
     93int mac802154_llsec_seclevel_del(struct mac802154_llsec *sec,
     94				 const struct ieee802154_llsec_seclevel *sl);
     95
     96int mac802154_llsec_encrypt(struct mac802154_llsec *sec, struct sk_buff *skb);
     97int mac802154_llsec_decrypt(struct mac802154_llsec *sec, struct sk_buff *skb);
     98
     99#endif /* MAC802154_LLSEC_H */