Lines Matching refs:key

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