Lines Matching +full:exact +full:- +full:len

1 // SPDX-License-Identifier: GPL-2.0-or-later
45 return try_module_get(alg->cra_module) ? crypto_alg_get(alg) : NULL;
51 struct module *module = alg->cra_module;
62 int best = -2;
65 int exact, fuzzy;
70 if ((q->cra_flags ^ type) & mask)
73 exact = !strcmp(q->cra_driver_name, name);
74 fuzzy = !strcmp(q->cra_name, name);
75 if (!exact && !(fuzzy && q->cra_priority > best))
81 best = q->cra_priority;
86 if (exact)
98 if (!IS_ERR_OR_NULL(larval->adult))
99 crypto_mod_put(larval->adult);
109 return ERR_PTR(-ENOMEM);
113 larval->mask = mask;
114 larval->alg.cra_flags = CRYPTO_ALG_LARVAL | type;
115 larval->alg.cra_priority = -1;
116 larval->alg.cra_destroy = crypto_larval_destroy;
118 strscpy(larval->alg.cra_name, name, CRYPTO_MAX_ALG_NAME);
119 init_completion(&larval->completion);
135 refcount_set(&larval->alg.cra_refcnt, 2);
140 alg = &larval->alg;
141 list_add(&alg->cra_list, &crypto_alg_list);
145 if (alg != &larval->alg) {
159 unlinked = list_empty(&larval->alg.cra_list);
161 list_del_init(&larval->alg.cra_list);
167 complete_all(&larval->completion);
168 crypto_alg_put(&larval->alg);
175 err = crypto_probing_notify(CRYPTO_MSG_ALG_REGISTER, larval->adult);
185 if (larval->test_started)
189 if (larval->test_started) {
194 larval->test_started = true;
213 &larval->completion, 60 * HZ);
215 alg = larval->adult;
217 alg = ERR_PTR(-EINTR);
221 alg = ERR_PTR(-ETIMEDOUT);
222 } else if (!alg || PTR_ERR(alg) == -EEXIST) {
223 int err = alg ? -EEXIST : -EAGAIN;
228 * using driver_name. Do a re-lookup but do not retry in
232 alg = &larval->alg;
233 alg = crypto_alg_lookup(alg->cra_name, type, mask) ?:
238 !(alg->cra_flags & CRYPTO_ALG_TESTED))
239 alg = ERR_PTR(-EAGAIN);
240 else if (alg->cra_flags & CRYPTO_ALG_FIPS_INTERNAL)
241 alg = ERR_PTR(-EAGAIN);
243 alg = ERR_PTR(-EAGAIN);
244 crypto_mod_put(&larval->alg);
271 ((type ^ alg->cra_flags) & mask)) {
274 alg = ERR_PTR(-ENOENT);
281 alg = ERR_PTR(-ELIBBAD);
295 return ERR_PTR(-ENOENT);
302 request_module("crypto-%s", name);
306 request_module("crypto-%s-all", name);
318 alg = ERR_PTR(-ENOENT);
363 alg = ERR_PTR(-ENOENT);
372 const struct crypto_type *type = tfm->__crt_alg->cra_type;
374 if (type && tfm->exit)
375 tfm->exit(tfm);
380 const struct crypto_type *type_obj = alg->cra_type;
381 unsigned int len;
383 len = alg->cra_alignmask & ~(crypto_tfm_ctx_alignment() - 1);
385 return len + type_obj->ctxsize(alg, type, mask);
387 switch (alg->cra_flags & CRYPTO_ALG_TYPE_MASK) {
392 len += crypto_cipher_ctxsize(alg);
396 return len;
402 alg->cra_flags |= CRYPTO_ALG_DYING;
412 int err = -ENOMEM;
419 tfm->__crt_alg = alg;
420 refcount_set(&tfm->refcnt, 1);
422 if (!tfm->exit && alg->cra_init && (err = alg->cra_init(tfm)))
429 if (err == -EAGAIN)
447 * crypto_alloc_base - Locate algorithm and allocate transform
462 * The returned transform is of a non-determinate type. Most people
490 if (err != -EAGAIN)
493 err = -EINTR;
511 tfmsize = frontend->tfmsize;
512 total = tfmsize + sizeof(*tfm) + frontend->extsize(alg);
516 return ERR_PTR(-ENOMEM);
519 tfm->__crt_alg = alg;
520 tfm->node = node;
521 refcount_set(&tfm->refcnt, 1);
538 tfm = (struct crypto_tfm *)(mem + frontend->tfmsize);
539 tfm->fb = tfm;
541 err = frontend->init_tfm(tfm);
545 if (!tfm->exit && alg->cra_init && (err = alg->cra_init(tfm)))
553 if (err == -EAGAIN)
565 struct crypto_alg *alg = otfm->__crt_alg;
569 mem = ERR_PTR(-ESTALE);
573 mem = crypto_alloc_tfmmem(alg, frontend, otfm->node, GFP_ATOMIC);
579 tfm = (struct crypto_tfm *)(mem + frontend->tfmsize);
580 tfm->crt_flags = otfm->crt_flags;
581 tfm->fb = tfm;
593 type &= frontend->maskclear;
594 mask &= frontend->maskclear;
595 type |= frontend->type;
596 mask |= frontend->maskset;
604 * crypto_alloc_tfm_node - Locate algorithm and allocate transform
619 * The returned transform is of a non-determinate type. Most people
650 if (err != -EAGAIN)
653 err = -EINTR;
663 * crypto_destroy_tfm - Free crypto transform
677 if (!refcount_dec_and_test(&tfm->refcnt))
679 alg = tfm->__crt_alg;
681 if (!tfm->exit && alg->cra_exit)
682 alg->cra_exit(tfm);
707 if (err == -EINPROGRESS)
710 wait->err = err;
711 complete(&wait->completion);
717 if (alg->cra_type && alg->cra_type->destroy)
718 alg->cra_type->destroy(alg);
719 if (alg->cra_destroy)
720 alg->cra_destroy(alg);
727 struct crypto_tfm *tfm = req->tfm;
732 req->tfm = tfm->fb;
736 nreq->flags &= ~CRYPTO_TFM_REQ_ON_STACK;