Lines Matching refs:alg
32 static int crypto_check_alg(struct crypto_alg *alg)
34 crypto_check_module_sig(alg->cra_module);
36 if (!alg->cra_name[0] || !alg->cra_driver_name[0])
39 if (alg->cra_alignmask & (alg->cra_alignmask + 1))
43 if (alg->cra_alignmask > MAX_ALGAPI_ALIGNMASK)
46 if (alg->cra_blocksize > MAX_ALGAPI_BLOCKSIZE)
49 /* Lower maximums for specific alg types. */
50 if (!alg->cra_type && (alg->cra_flags & CRYPTO_ALG_TYPE_MASK) ==
52 if (alg->cra_alignmask > MAX_CIPHER_ALIGNMASK)
55 if (alg->cra_blocksize > MAX_CIPHER_BLOCKSIZE)
59 if (alg->cra_priority < 0)
62 refcount_set(&alg->cra_refcnt, 1);
69 inst->alg.cra_type->free(inst);
82 static void crypto_destroy_instance(struct crypto_alg *alg)
84 struct crypto_instance *inst = container_of(alg,
86 alg);
101 static struct list_head *crypto_more_spawns(struct crypto_alg *alg,
122 return &n->inst->alg.cra_users;
130 if (crypto_is_dead(&inst->alg))
133 inst->alg.cra_flags |= CRYPTO_ALG_DEAD;
138 list_move(&inst->alg.cra_list, list);
140 inst->alg.cra_destroy = crypto_destroy_instance;
142 BUG_ON(!list_empty(&inst->alg.cra_users));
146 * Given an algorithm alg, remove all algorithms that depend on it
149 * depends on alg.
151 void crypto_remove_spawns(struct crypto_alg *alg, struct list_head *list,
154 u32 new_type = (nalg ?: alg)->cra_flags;
161 spawns = &alg->cra_users;
163 if ((spawn->alg->cra_flags ^ new_type) & spawn->mask)
170 * Perform a depth-first walk starting from alg through
172 * from alg to the current spawn.
184 spawn->dead = !spawn->registered || &inst->alg != nalg;
189 BUG_ON(&inst->alg == alg);
191 if (&inst->alg == nalg)
194 spawns = &inst->alg.cra_users;
214 } while ((spawns = crypto_more_spawns(alg, &stack, &top,
224 list_move(&spawn->list, &spawn->alg->cra_users);
231 static struct crypto_larval *__crypto_register_alg(struct crypto_alg *alg)
237 if (crypto_is_dead(alg))
240 INIT_LIST_HEAD(&alg->cra_users);
243 alg->cra_flags &= ~CRYPTO_ALG_TESTED;
248 if (q == alg)
255 if (!strcmp(alg->cra_driver_name, q->cra_driver_name))
260 if (!strcmp(q->cra_driver_name, alg->cra_name) ||
261 !strcmp(q->cra_driver_name, alg->cra_driver_name) ||
262 !strcmp(q->cra_name, alg->cra_driver_name))
266 larval = crypto_larval_alloc(alg->cra_name,
267 alg->cra_flags | CRYPTO_ALG_TESTED, 0);
272 larval->adult = crypto_mod_get(alg);
276 refcount_set(&larval->alg.cra_refcnt, 1);
277 memcpy(larval->alg.cra_driver_name, alg->cra_driver_name,
279 larval->alg.cra_priority = alg->cra_priority;
281 list_add(&alg->cra_list, &crypto_alg_list);
282 list_add(&larval->alg.cra_list, &crypto_alg_list);
284 crypto_stats_init(alg);
299 struct crypto_alg *alg;
315 pr_err("alg: Unexpected test result for %s: %d\n", name, err);
320 alg = test->adult;
321 if (err || list_empty(&alg->cra_list))
324 alg->cra_flags |= CRYPTO_ALG_TESTED;
332 if (strcmp(alg->cra_name, q->cra_name))
335 if (q->cra_priority > alg->cra_priority) {
342 if (q == alg)
356 if (strcmp(alg->cra_name, q->cra_name) &&
357 strcmp(alg->cra_driver_name, q->cra_name))
362 if ((q->cra_flags ^ alg->cra_flags) & larval->mask)
365 if (best && crypto_mod_get(alg))
366 larval->adult = alg;
373 if (strcmp(alg->cra_name, q->cra_name))
376 if (strcmp(alg->cra_driver_name, q->cra_driver_name) &&
377 q->cra_priority > alg->cra_priority)
380 crypto_remove_spawns(q, &list, alg);
395 struct crypto_alg *alg;
398 list_for_each_entry_safe(alg, n, list, cra_list) {
399 list_del_init(&alg->cra_list);
400 crypto_alg_put(alg);
413 crypto_alg_tested(larval->alg.cra_driver_name, 0);
422 crypto_larval_kill(&larval->alg);
425 int crypto_register_alg(struct crypto_alg *alg)
430 alg->cra_flags &= ~CRYPTO_ALG_DEAD;
431 err = crypto_check_alg(alg);
436 larval = __crypto_register_alg(alg);
447 static int crypto_remove_alg(struct crypto_alg *alg, struct list_head *list)
449 if (unlikely(list_empty(&alg->cra_list)))
452 alg->cra_flags |= CRYPTO_ALG_DEAD;
454 list_del_init(&alg->cra_list);
455 crypto_remove_spawns(alg, list, NULL);
460 void crypto_unregister_alg(struct crypto_alg *alg)
466 ret = crypto_remove_alg(alg, &list);
469 if (WARN(ret, "Algorithm %s is not registered", alg->cra_driver_name))
472 if (WARN_ON(refcount_read(&alg->cra_refcnt) != 1))
475 if (alg->cra_destroy)
476 alg->cra_destroy(alg);
565 int err = crypto_remove_alg(&inst->alg, &users);
573 BUG_ON(refcount_read(&inst->alg.cra_refcnt) != 1);
622 err = crypto_check_alg(&inst->alg);
626 inst->alg.cra_module = tmpl->module;
627 inst->alg.cra_flags |= CRYPTO_ALG_INSTANCE;
642 crypto_mod_put(spawn->alg);
647 larval = __crypto_register_alg(&inst->alg);
675 crypto_remove_spawns(&inst->alg, &list, NULL);
687 struct crypto_alg *alg;
697 alg = crypto_find_alg(name, spawn->frontend, type, mask);
698 if (IS_ERR(alg))
699 return PTR_ERR(alg);
702 if (!crypto_is_moribund(alg)) {
703 list_add(&spawn->list, &alg->cra_users);
704 spawn->alg = alg;
708 inst->alg.cra_flags |=
709 (alg->cra_flags & CRYPTO_ALG_INHERITED_FLAGS);
714 crypto_mod_put(alg);
721 if (!spawn->alg) /* not yet initialized? */
730 crypto_mod_put(spawn->alg);
736 struct crypto_alg *alg = ERR_PTR(-EAGAIN);
742 alg = spawn->alg;
743 if (!crypto_mod_get(alg)) {
744 target = crypto_alg_get(alg);
746 alg = ERR_PTR(-EAGAIN);
756 return alg;
762 struct crypto_alg *alg;
765 alg = crypto_spawn_alg(spawn);
766 if (IS_ERR(alg))
767 return ERR_CAST(alg);
770 if (unlikely((alg->cra_flags ^ type) & mask))
773 tfm = __crypto_alloc_tfm(alg, type, mask);
780 crypto_mod_put(alg);
787 struct crypto_alg *alg;
790 alg = crypto_spawn_alg(spawn);
791 if (IS_ERR(alg))
792 return ERR_CAST(alg);
794 tfm = crypto_create_tfm(alg, spawn->frontend);
801 crypto_mod_put(alg);
905 struct crypto_alg *alg)
907 if (snprintf(inst->alg.cra_name, CRYPTO_MAX_ALG_NAME, "%s(%s)", name,
908 alg->cra_name) >= CRYPTO_MAX_ALG_NAME)
911 if (snprintf(inst->alg.cra_driver_name, CRYPTO_MAX_ALG_NAME, "%s(%s)",
912 name, alg->cra_driver_name) >= CRYPTO_MAX_ALG_NAME)
1062 unsigned int crypto_alg_extsize(struct crypto_alg *alg)
1064 return alg->cra_ctxsize +
1065 (alg->cra_alignmask & ~(crypto_tfm_ctx_alignment() - 1));
1073 struct crypto_alg *alg = crypto_find_alg(name, frontend, type, mask);
1075 if (!IS_ERR(alg)) {
1076 crypto_mod_put(alg);
1085 void crypto_stats_init(struct crypto_alg *alg)
1087 memset(&alg->stats, 0, sizeof(alg->stats));
1091 void crypto_stats_get(struct crypto_alg *alg)
1093 crypto_alg_get(alg);
1097 void crypto_stats_aead_encrypt(unsigned int cryptlen, struct crypto_alg *alg,
1101 atomic64_inc(&alg->stats.aead.err_cnt);
1103 atomic64_inc(&alg->stats.aead.encrypt_cnt);
1104 atomic64_add(cryptlen, &alg->stats.aead.encrypt_tlen);
1106 crypto_alg_put(alg);
1110 void crypto_stats_aead_decrypt(unsigned int cryptlen, struct crypto_alg *alg,
1114 atomic64_inc(&alg->stats.aead.err_cnt);
1116 atomic64_inc(&alg->stats.aead.decrypt_cnt);
1117 atomic64_add(cryptlen, &alg->stats.aead.decrypt_tlen);
1119 crypto_alg_put(alg);
1124 struct crypto_alg *alg)
1127 atomic64_inc(&alg->stats.akcipher.err_cnt);
1129 atomic64_inc(&alg->stats.akcipher.encrypt_cnt);
1130 atomic64_add(src_len, &alg->stats.akcipher.encrypt_tlen);
1132 crypto_alg_put(alg);
1137 struct crypto_alg *alg)
1140 atomic64_inc(&alg->stats.akcipher.err_cnt);
1142 atomic64_inc(&alg->stats.akcipher.decrypt_cnt);
1143 atomic64_add(src_len, &alg->stats.akcipher.decrypt_tlen);
1145 crypto_alg_put(alg);
1149 void crypto_stats_akcipher_sign(int ret, struct crypto_alg *alg)
1152 atomic64_inc(&alg->stats.akcipher.err_cnt);
1154 atomic64_inc(&alg->stats.akcipher.sign_cnt);
1155 crypto_alg_put(alg);
1159 void crypto_stats_akcipher_verify(int ret, struct crypto_alg *alg)
1162 atomic64_inc(&alg->stats.akcipher.err_cnt);
1164 atomic64_inc(&alg->stats.akcipher.verify_cnt);
1165 crypto_alg_put(alg);
1169 void crypto_stats_compress(unsigned int slen, int ret, struct crypto_alg *alg)
1172 atomic64_inc(&alg->stats.compress.err_cnt);
1174 atomic64_inc(&alg->stats.compress.compress_cnt);
1175 atomic64_add(slen, &alg->stats.compress.compress_tlen);
1177 crypto_alg_put(alg);
1181 void crypto_stats_decompress(unsigned int slen, int ret, struct crypto_alg *alg)
1184 atomic64_inc(&alg->stats.compress.err_cnt);
1186 atomic64_inc(&alg->stats.compress.decompress_cnt);
1187 atomic64_add(slen, &alg->stats.compress.decompress_tlen);
1189 crypto_alg_put(alg);
1194 struct crypto_alg *alg)
1197 atomic64_inc(&alg->stats.hash.err_cnt);
1199 atomic64_add(nbytes, &alg->stats.hash.hash_tlen);
1200 crypto_alg_put(alg);
1205 struct crypto_alg *alg)
1208 atomic64_inc(&alg->stats.hash.err_cnt);
1210 atomic64_inc(&alg->stats.hash.hash_cnt);
1211 atomic64_add(nbytes, &alg->stats.hash.hash_tlen);
1213 crypto_alg_put(alg);
1217 void crypto_stats_kpp_set_secret(struct crypto_alg *alg, int ret)
1220 atomic64_inc(&alg->stats.kpp.err_cnt);
1222 atomic64_inc(&alg->stats.kpp.setsecret_cnt);
1223 crypto_alg_put(alg);
1227 void crypto_stats_kpp_generate_public_key(struct crypto_alg *alg, int ret)
1230 atomic64_inc(&alg->stats.kpp.err_cnt);
1232 atomic64_inc(&alg->stats.kpp.generate_public_key_cnt);
1233 crypto_alg_put(alg);
1237 void crypto_stats_kpp_compute_shared_secret(struct crypto_alg *alg, int ret)
1240 atomic64_inc(&alg->stats.kpp.err_cnt);
1242 atomic64_inc(&alg->stats.kpp.compute_shared_secret_cnt);
1243 crypto_alg_put(alg);
1247 void crypto_stats_rng_seed(struct crypto_alg *alg, int ret)
1250 atomic64_inc(&alg->stats.rng.err_cnt);
1252 atomic64_inc(&alg->stats.rng.seed_cnt);
1253 crypto_alg_put(alg);
1257 void crypto_stats_rng_generate(struct crypto_alg *alg, unsigned int dlen,
1261 atomic64_inc(&alg->stats.rng.err_cnt);
1263 atomic64_inc(&alg->stats.rng.generate_cnt);
1264 atomic64_add(dlen, &alg->stats.rng.generate_tlen);
1266 crypto_alg_put(alg);
1271 struct crypto_alg *alg)
1274 atomic64_inc(&alg->stats.cipher.err_cnt);
1276 atomic64_inc(&alg->stats.cipher.encrypt_cnt);
1277 atomic64_add(cryptlen, &alg->stats.cipher.encrypt_tlen);
1279 crypto_alg_put(alg);
1284 struct crypto_alg *alg)
1287 atomic64_inc(&alg->stats.cipher.err_cnt);
1289 atomic64_inc(&alg->stats.cipher.decrypt_cnt);
1290 atomic64_add(cryptlen, &alg->stats.cipher.decrypt_tlen);
1292 crypto_alg_put(alg);