Lines Matching refs:key
27 static void llsec_key_put(struct mac802154_llsec_key *key);
51 struct ieee802154_llsec_key_entry *key, *kn; in mac802154_llsec_destroy() local
69 list_for_each_entry_safe(key, kn, &sec->table.keys, list) { in mac802154_llsec_destroy()
72 mkey = container_of(key->key, struct mac802154_llsec_key, key); in mac802154_llsec_destroy()
73 list_del(&key->list); in mac802154_llsec_destroy()
75 kzfree(key); in mac802154_llsec_destroy()
123 struct mac802154_llsec_key *key; in llsec_key_alloc() local
126 key = kzalloc(sizeof(*key), GFP_KERNEL); in llsec_key_alloc()
127 if (!key) in llsec_key_alloc()
130 kref_init(&key->ref); in llsec_key_alloc()
131 key->key = *template; in llsec_key_alloc()
133 BUILD_BUG_ON(ARRAY_SIZE(authsizes) != ARRAY_SIZE(key->tfm)); in llsec_key_alloc()
135 for (i = 0; i < ARRAY_SIZE(key->tfm); i++) { in llsec_key_alloc()
136 key->tfm[i] = crypto_alloc_aead("ccm(aes)", 0, in llsec_key_alloc()
138 if (IS_ERR(key->tfm[i])) in llsec_key_alloc()
140 if (crypto_aead_setkey(key->tfm[i], template->key, in llsec_key_alloc()
143 if (crypto_aead_setauthsize(key->tfm[i], authsizes[i])) in llsec_key_alloc()
147 key->tfm0 = crypto_alloc_blkcipher("ctr(aes)", 0, CRYPTO_ALG_ASYNC); in llsec_key_alloc()
148 if (IS_ERR(key->tfm0)) in llsec_key_alloc()
151 if (crypto_blkcipher_setkey(key->tfm0, template->key, in llsec_key_alloc()
155 return key; in llsec_key_alloc()
158 crypto_free_blkcipher(key->tfm0); in llsec_key_alloc()
160 for (i = 0; i < ARRAY_SIZE(key->tfm); i++) in llsec_key_alloc()
161 if (key->tfm[i]) in llsec_key_alloc()
162 crypto_free_aead(key->tfm[i]); in llsec_key_alloc()
164 kzfree(key); in llsec_key_alloc()
170 struct mac802154_llsec_key *key; in llsec_key_release() local
173 key = container_of(ref, struct mac802154_llsec_key, ref); in llsec_key_release()
175 for (i = 0; i < ARRAY_SIZE(key->tfm); i++) in llsec_key_release()
176 crypto_free_aead(key->tfm[i]); in llsec_key_release()
178 crypto_free_blkcipher(key->tfm0); in llsec_key_release()
179 kzfree(key); in llsec_key_release()
183 llsec_key_get(struct mac802154_llsec_key *key) in llsec_key_get() argument
185 kref_get(&key->ref); in llsec_key_get()
186 return key; in llsec_key_get()
189 static void llsec_key_put(struct mac802154_llsec_key *key) in llsec_key_put() argument
191 kref_put(&key->ref, llsec_key_release); in llsec_key_put()
220 const struct ieee802154_llsec_key *key) in mac802154_llsec_key_add() argument
225 if (!(key->frame_types & (1 << IEEE802154_FC_TYPE_MAC_CMD)) && in mac802154_llsec_key_add()
226 key->cmd_frame_ids) in mac802154_llsec_key_add()
233 if (memcmp(pos->key->key, key->key, in mac802154_llsec_key_add()
237 mkey = container_of(pos->key, struct mac802154_llsec_key, key); in mac802154_llsec_key_add()
243 if (pos->key->frame_types != key->frame_types || in mac802154_llsec_key_add()
244 pos->key->cmd_frame_ids != key->cmd_frame_ids) in mac802154_llsec_key_add()
255 mkey = llsec_key_alloc(key); in mac802154_llsec_key_add()
263 new->key = &mkey->key; in mac802154_llsec_key_add()
275 const struct ieee802154_llsec_key_id *key) in mac802154_llsec_key_del() argument
282 mkey = container_of(pos->key, struct mac802154_llsec_key, key); in mac802154_llsec_key_del()
284 if (llsec_key_id_equal(&pos->id, key)) { in mac802154_llsec_key_del()
315 u32 key = llsec_dev_hash_short(short_addr, pan_id); in llsec_dev_find_short() local
317 hash_for_each_possible_rcu(sec->devices_short, dev, bucket_s, key) { in llsec_dev_find_short()
330 u64 key = llsec_dev_hash_long(hwaddr); in llsec_dev_find_long() local
332 hash_for_each_possible_rcu(sec->devices_hw, dev, bucket_hw, key) { in llsec_dev_find_long()
412 const struct ieee802154_llsec_key_id *key) in llsec_devkey_find() argument
417 if (!llsec_key_id_equal(key, &devkey->key_id)) in llsec_devkey_find()
429 const struct ieee802154_llsec_device_key *key) in mac802154_llsec_devkey_add() argument
439 if (llsec_devkey_find(dev, &key->key_id)) in mac802154_llsec_devkey_add()
446 devkey->devkey = *key; in mac802154_llsec_devkey_add()
453 const struct ieee802154_llsec_device_key *key) in mac802154_llsec_devkey_del() argument
463 devkey = llsec_devkey_find(dev, &key->key_id); in mac802154_llsec_devkey_del()
556 struct mac802154_llsec_key *key; in llsec_lookup_key() local
571 if (!(key_entry->key->frame_types & BIT(hdr->fc.type))) in llsec_lookup_key()
596 key = container_of(key_entry->key, struct mac802154_llsec_key, key); in llsec_lookup_key()
599 return llsec_key_get(key); in llsec_lookup_key()
619 struct mac802154_llsec_key *key) in llsec_do_encrypt_unauth() argument
624 .tfm = key->tfm0, in llsec_do_encrypt_unauth()
635 llsec_tfm_by_len(struct mac802154_llsec_key *key, int authlen) in llsec_tfm_by_len() argument
639 for (i = 0; i < ARRAY_SIZE(key->tfm); i++) in llsec_tfm_by_len()
640 if (crypto_aead_authsize(key->tfm[i]) == authlen) in llsec_tfm_by_len()
641 return key->tfm[i]; in llsec_tfm_by_len()
649 struct mac802154_llsec_key *key) in llsec_do_encrypt_auth() argument
660 req = aead_request_alloc(llsec_tfm_by_len(key, authlen), GFP_ATOMIC); in llsec_do_encrypt_auth()
692 struct mac802154_llsec_key *key) in llsec_do_encrypt() argument
695 return llsec_do_encrypt_unauth(skb, sec, hdr, key); in llsec_do_encrypt()
697 return llsec_do_encrypt_auth(skb, sec, hdr, key); in llsec_do_encrypt()
704 struct mac802154_llsec_key *key; in mac802154_llsec_encrypt() local
731 key = llsec_lookup_key(sec, &hdr, &hdr.dest, NULL); in mac802154_llsec_encrypt()
732 if (!key) { in mac802154_llsec_encrypt()
745 llsec_key_put(key); in mac802154_llsec_encrypt()
759 rc = llsec_do_encrypt(skb, sec, &hdr, key); in mac802154_llsec_encrypt()
760 llsec_key_put(key); in mac802154_llsec_encrypt()
783 u32 key = llsec_dev_hash_short(devaddr.short_addr, in llsec_lookup_dev() local
787 bucket_s, key) { in llsec_lookup_dev()
793 u64 key = llsec_dev_hash_long(devaddr.extended_addr); in llsec_lookup_dev() local
796 bucket_hw, key) { in llsec_lookup_dev()
827 struct mac802154_llsec_key *key, __le64 dev_addr) in llsec_do_decrypt_unauth() argument
834 .tfm = key->tfm0, in llsec_do_decrypt_unauth()
851 struct mac802154_llsec_key *key, __le64 dev_addr) in llsec_do_decrypt_auth() argument
862 req = aead_request_alloc(llsec_tfm_by_len(key, authlen), GFP_ATOMIC); in llsec_do_decrypt_auth()
893 struct mac802154_llsec_key *key, __le64 dev_addr) in llsec_do_decrypt() argument
896 return llsec_do_decrypt_unauth(skb, sec, hdr, key, dev_addr); in llsec_do_decrypt()
898 return llsec_do_decrypt_auth(skb, sec, hdr, key, dev_addr); in llsec_do_decrypt()
973 struct mac802154_llsec_key *key; in mac802154_llsec_decrypt() local
997 key = llsec_lookup_key(sec, &hdr, &hdr.source, &key_id); in mac802154_llsec_decrypt()
998 if (!key) { in mac802154_llsec_decrypt()
1036 err = llsec_do_decrypt(skb, sec, &hdr, key, dev_addr); in mac802154_llsec_decrypt()
1037 llsec_key_put(key); in mac802154_llsec_decrypt()
1041 llsec_key_put(key); in mac802154_llsec_decrypt()