Lines Matching refs:key

26 static void llsec_key_put(struct mac802154_llsec_key *key);
50 struct ieee802154_llsec_key_entry *key, *kn; in mac802154_llsec_destroy() local
68 list_for_each_entry_safe(key, kn, &sec->table.keys, list) { in mac802154_llsec_destroy()
71 mkey = container_of(key->key, struct mac802154_llsec_key, key); in mac802154_llsec_destroy()
72 list_del(&key->list); in mac802154_llsec_destroy()
74 kfree(key); in mac802154_llsec_destroy()
122 struct mac802154_llsec_key *key; in llsec_key_alloc() local
125 key = kzalloc(sizeof(*key), GFP_KERNEL); in llsec_key_alloc()
126 if (!key) in llsec_key_alloc()
129 kref_init(&key->ref); in llsec_key_alloc()
130 key->key = *template; in llsec_key_alloc()
132 BUILD_BUG_ON(ARRAY_SIZE(authsizes) != ARRAY_SIZE(key->tfm)); in llsec_key_alloc()
134 for (i = 0; i < ARRAY_SIZE(key->tfm); i++) { in llsec_key_alloc()
135 key->tfm[i] = crypto_alloc_aead("ccm(aes)", 0, in llsec_key_alloc()
137 if (IS_ERR(key->tfm[i])) in llsec_key_alloc()
139 if (crypto_aead_setkey(key->tfm[i], template->key, in llsec_key_alloc()
142 if (crypto_aead_setauthsize(key->tfm[i], authsizes[i])) in llsec_key_alloc()
146 key->tfm0 = crypto_alloc_blkcipher("ctr(aes)", 0, CRYPTO_ALG_ASYNC); in llsec_key_alloc()
147 if (IS_ERR(key->tfm0)) in llsec_key_alloc()
150 if (crypto_blkcipher_setkey(key->tfm0, template->key, in llsec_key_alloc()
154 return key; in llsec_key_alloc()
157 crypto_free_blkcipher(key->tfm0); in llsec_key_alloc()
159 for (i = 0; i < ARRAY_SIZE(key->tfm); i++) in llsec_key_alloc()
160 if (key->tfm[i]) in llsec_key_alloc()
161 crypto_free_aead(key->tfm[i]); in llsec_key_alloc()
163 kfree(key); in llsec_key_alloc()
169 struct mac802154_llsec_key *key; in llsec_key_release() local
172 key = container_of(ref, struct mac802154_llsec_key, ref); in llsec_key_release()
174 for (i = 0; i < ARRAY_SIZE(key->tfm); i++) in llsec_key_release()
175 crypto_free_aead(key->tfm[i]); in llsec_key_release()
177 crypto_free_blkcipher(key->tfm0); in llsec_key_release()
178 kfree(key); in llsec_key_release()
182 llsec_key_get(struct mac802154_llsec_key *key) in llsec_key_get() argument
184 kref_get(&key->ref); in llsec_key_get()
185 return key; in llsec_key_get()
188 static void llsec_key_put(struct mac802154_llsec_key *key) in llsec_key_put() argument
190 kref_put(&key->ref, llsec_key_release); in llsec_key_put()
219 const struct ieee802154_llsec_key *key) in mac802154_llsec_key_add() argument
224 if (!(key->frame_types & (1 << IEEE802154_FC_TYPE_MAC_CMD)) && in mac802154_llsec_key_add()
225 key->cmd_frame_ids) in mac802154_llsec_key_add()
232 if (memcmp(pos->key->key, key->key, in mac802154_llsec_key_add()
236 mkey = container_of(pos->key, struct mac802154_llsec_key, key); in mac802154_llsec_key_add()
242 if (pos->key->frame_types != key->frame_types || in mac802154_llsec_key_add()
243 pos->key->cmd_frame_ids != key->cmd_frame_ids) in mac802154_llsec_key_add()
254 mkey = llsec_key_alloc(key); in mac802154_llsec_key_add()
262 new->key = &mkey->key; in mac802154_llsec_key_add()
274 const struct ieee802154_llsec_key_id *key) in mac802154_llsec_key_del() argument
281 mkey = container_of(pos->key, struct mac802154_llsec_key, key); in mac802154_llsec_key_del()
283 if (llsec_key_id_equal(&pos->id, key)) { in mac802154_llsec_key_del()
314 u32 key = llsec_dev_hash_short(short_addr, pan_id); in llsec_dev_find_short() local
316 hash_for_each_possible_rcu(sec->devices_short, dev, bucket_s, key) { in llsec_dev_find_short()
329 u64 key = llsec_dev_hash_long(hwaddr); in llsec_dev_find_long() local
331 hash_for_each_possible_rcu(sec->devices_hw, dev, bucket_hw, key) { in llsec_dev_find_long()
410 const struct ieee802154_llsec_key_id *key) in llsec_devkey_find() argument
415 if (!llsec_key_id_equal(key, &devkey->key_id)) in llsec_devkey_find()
427 const struct ieee802154_llsec_device_key *key) in mac802154_llsec_devkey_add() argument
437 if (llsec_devkey_find(dev, &key->key_id)) in mac802154_llsec_devkey_add()
444 devkey->devkey = *key; in mac802154_llsec_devkey_add()
451 const struct ieee802154_llsec_device_key *key) in mac802154_llsec_devkey_del() argument
461 devkey = llsec_devkey_find(dev, &key->key_id); in mac802154_llsec_devkey_del()
554 struct mac802154_llsec_key *key; in llsec_lookup_key() local
569 if (!(key_entry->key->frame_types & BIT(hdr->fc.type))) in llsec_lookup_key()
594 key = container_of(key_entry->key, struct mac802154_llsec_key, key); in llsec_lookup_key()
597 return llsec_key_get(key); in llsec_lookup_key()
617 struct mac802154_llsec_key *key) in llsec_do_encrypt_unauth() argument
622 .tfm = key->tfm0, in llsec_do_encrypt_unauth()
633 llsec_tfm_by_len(struct mac802154_llsec_key *key, int authlen) in llsec_tfm_by_len() argument
637 for (i = 0; i < ARRAY_SIZE(key->tfm); i++) in llsec_tfm_by_len()
638 if (crypto_aead_authsize(key->tfm[i]) == authlen) in llsec_tfm_by_len()
639 return key->tfm[i]; in llsec_tfm_by_len()
647 struct mac802154_llsec_key *key) in llsec_do_encrypt_auth() argument
658 req = aead_request_alloc(llsec_tfm_by_len(key, authlen), GFP_ATOMIC); in llsec_do_encrypt_auth()
697 struct mac802154_llsec_key *key) in llsec_do_encrypt() argument
700 return llsec_do_encrypt_unauth(skb, sec, hdr, key); in llsec_do_encrypt()
702 return llsec_do_encrypt_auth(skb, sec, hdr, key); in llsec_do_encrypt()
709 struct mac802154_llsec_key *key; in mac802154_llsec_encrypt() local
736 key = llsec_lookup_key(sec, &hdr, &hdr.dest, NULL); in mac802154_llsec_encrypt()
737 if (!key) { in mac802154_llsec_encrypt()
750 llsec_key_put(key); in mac802154_llsec_encrypt()
764 rc = llsec_do_encrypt(skb, sec, &hdr, key); in mac802154_llsec_encrypt()
765 llsec_key_put(key); in mac802154_llsec_encrypt()
788 u32 key = llsec_dev_hash_short(devaddr.short_addr, in llsec_lookup_dev() local
792 bucket_s, key) { in llsec_lookup_dev()
798 u64 key = llsec_dev_hash_long(devaddr.extended_addr); in llsec_lookup_dev() local
801 bucket_hw, key) { in llsec_lookup_dev()
832 struct mac802154_llsec_key *key, __le64 dev_addr) in llsec_do_decrypt_unauth() argument
839 .tfm = key->tfm0, in llsec_do_decrypt_unauth()
856 struct mac802154_llsec_key *key, __le64 dev_addr) in llsec_do_decrypt_auth() argument
867 req = aead_request_alloc(llsec_tfm_by_len(key, authlen), GFP_ATOMIC); in llsec_do_decrypt_auth()
904 struct mac802154_llsec_key *key, __le64 dev_addr) in llsec_do_decrypt() argument
907 return llsec_do_decrypt_unauth(skb, sec, hdr, key, dev_addr); in llsec_do_decrypt()
909 return llsec_do_decrypt_auth(skb, sec, hdr, key, dev_addr); in llsec_do_decrypt()
984 struct mac802154_llsec_key *key; in mac802154_llsec_decrypt() local
1008 key = llsec_lookup_key(sec, &hdr, &hdr.source, &key_id); in mac802154_llsec_decrypt()
1009 if (!key) { in mac802154_llsec_decrypt()
1047 err = llsec_do_decrypt(skb, sec, &hdr, key, dev_addr); in mac802154_llsec_decrypt()
1048 llsec_key_put(key); in mac802154_llsec_decrypt()
1052 llsec_key_put(key); in mac802154_llsec_decrypt()