Lines Matching refs:key

21 static void llsec_key_put(struct mac802154_llsec_key *key);
45 struct ieee802154_llsec_key_entry *key, *kn;
63 list_for_each_entry_safe(key, kn, &sec->table.keys, list) {
66 mkey = container_of(key->key, struct mac802154_llsec_key, key);
67 list_del(&key->list);
69 kfree_sensitive(key);
117 struct mac802154_llsec_key *key;
120 key = kzalloc(sizeof(*key), GFP_KERNEL);
121 if (!key)
124 kref_init(&key->ref);
125 key->key = *template;
127 BUILD_BUG_ON(ARRAY_SIZE(authsizes) != ARRAY_SIZE(key->tfm));
129 for (i = 0; i < ARRAY_SIZE(key->tfm); i++) {
130 key->tfm[i] = crypto_alloc_aead("ccm(aes)", 0,
132 if (IS_ERR(key->tfm[i]))
134 if (crypto_aead_setkey(key->tfm[i], template->key,
137 if (crypto_aead_setauthsize(key->tfm[i], authsizes[i]))
141 key->tfm0 = crypto_alloc_sync_skcipher("ctr(aes)", 0, 0);
142 if (IS_ERR(key->tfm0))
145 if (crypto_sync_skcipher_setkey(key->tfm0, template->key,
149 return key;
152 crypto_free_sync_skcipher(key->tfm0);
154 for (i = 0; i < ARRAY_SIZE(key->tfm); i++)
155 if (!IS_ERR_OR_NULL(key->tfm[i]))
156 crypto_free_aead(key->tfm[i]);
158 kfree_sensitive(key);
164 struct mac802154_llsec_key *key;
167 key = container_of(ref, struct mac802154_llsec_key, ref);
169 for (i = 0; i < ARRAY_SIZE(key->tfm); i++)
170 crypto_free_aead(key->tfm[i]);
172 crypto_free_sync_skcipher(key->tfm0);
173 kfree_sensitive(key);
177 llsec_key_get(struct mac802154_llsec_key *key)
179 kref_get(&key->ref);
180 return key;
183 static void llsec_key_put(struct mac802154_llsec_key *key)
185 kref_put(&key->ref, llsec_key_release);
214 const struct ieee802154_llsec_key *key)
219 if (!(key->frame_types & (1 << IEEE802154_FC_TYPE_MAC_CMD)) &&
220 key->cmd_frame_ids)
227 if (memcmp(pos->key->key, key->key,
231 mkey = container_of(pos->key, struct mac802154_llsec_key, key);
233 /* Don't allow multiple instances of the same AES key to have
237 if (pos->key->frame_types != key->frame_types ||
238 pos->key->cmd_frame_ids != key->cmd_frame_ids)
249 mkey = llsec_key_alloc(key);
257 new->key = &mkey->key;
274 mkey = container_of(pos->key, struct mac802154_llsec_key, key);
281 const struct ieee802154_llsec_key_id *key)
286 if (llsec_key_id_equal(&pos->id, key)) {
317 u32 key = llsec_dev_hash_short(short_addr, pan_id);
319 hash_for_each_possible_rcu(sec->devices_short, dev, bucket_s, key) {
332 u64 key = llsec_dev_hash_long(hwaddr);
334 hash_for_each_possible_rcu(sec->devices_hw, dev, bucket_hw, key) {
414 const struct ieee802154_llsec_key_id *key)
419 if (!llsec_key_id_equal(key, &devkey->key_id))
431 const struct ieee802154_llsec_device_key *key)
441 if (llsec_devkey_find(dev, &key->key_id))
448 devkey->devkey = *key;
455 const struct ieee802154_llsec_device_key *key)
465 devkey = llsec_devkey_find(dev, &key->key_id);
558 struct mac802154_llsec_key *key;
573 if (!(key_entry->key->frame_types & BIT(hdr->fc.type)))
598 key = container_of(key_entry->key, struct mac802154_llsec_key, key);
601 return llsec_key_get(key);
621 struct mac802154_llsec_key *key)
625 SYNC_SKCIPHER_REQUEST_ON_STACK(req, key->tfm0);
635 skcipher_request_set_sync_tfm(req, key->tfm0);
644 llsec_tfm_by_len(struct mac802154_llsec_key *key, int authlen)
648 for (i = 0; i < ARRAY_SIZE(key->tfm); i++)
649 if (crypto_aead_authsize(key->tfm[i]) == authlen)
650 return key->tfm[i];
658 struct mac802154_llsec_key *key)
669 req = aead_request_alloc(llsec_tfm_by_len(key, authlen), GFP_ATOMIC);
701 struct mac802154_llsec_key *key)
704 return llsec_do_encrypt_unauth(skb, sec, hdr, key);
706 return llsec_do_encrypt_auth(skb, sec, hdr, key);
713 struct mac802154_llsec_key *key;
744 key = llsec_lookup_key(sec, &hdr, &hdr.dest, NULL);
745 if (!key) {
758 llsec_key_put(key);
772 rc = llsec_do_encrypt(skb, sec, &hdr, key);
773 llsec_key_put(key);
796 u32 key = llsec_dev_hash_short(devaddr.short_addr,
800 bucket_s, key) {
806 u64 key = llsec_dev_hash_long(devaddr.extended_addr);
809 bucket_hw, key) {
840 struct mac802154_llsec_key *key, __le64 dev_addr)
846 SYNC_SKCIPHER_REQUEST_ON_STACK(req, key->tfm0);
855 skcipher_request_set_sync_tfm(req, key->tfm0);
867 struct mac802154_llsec_key *key, __le64 dev_addr)
878 req = aead_request_alloc(llsec_tfm_by_len(key, authlen), GFP_ATOMIC);
909 struct mac802154_llsec_key *key, __le64 dev_addr)
912 return llsec_do_decrypt_unauth(skb, sec, hdr, key, dev_addr);
914 return llsec_do_decrypt_auth(skb, sec, hdr, key, dev_addr);
989 struct mac802154_llsec_key *key;
1013 key = llsec_lookup_key(sec, &hdr, &hdr.source, &key_id);
1014 if (!key) {
1052 err = llsec_do_decrypt(skb, sec, &hdr, key, dev_addr);
1053 llsec_key_put(key);
1057 llsec_key_put(key);