Lines Matching refs:ec

66 static int __sm2_set_pub_key(struct mpi_ec_ctx *ec,
69 static int sm2_ec_ctx_init(struct mpi_ec_ctx *ec)
89 ec->Q = mpi_point_new(0);
90 if (!ec->Q)
94 ec->G = mpi_point_new(0);
95 if (!ec->G) {
96 mpi_point_release(ec->Q);
100 mpi_set(ec->G->x, x);
101 mpi_set(ec->G->y, y);
102 mpi_set_ui(ec->G->z, 1);
105 ec->n = mpi_scanval(ecp->n);
106 if (!ec->n) {
107 mpi_point_release(ec->Q);
108 mpi_point_release(ec->G);
112 ec->h = ecp->h;
113 ec->name = ecp->desc;
114 mpi_ec_init(ec, ecp->model, ecp->dialect, 0, p, a, b);
129 static void sm2_ec_ctx_deinit(struct mpi_ec_ctx *ec)
131 mpi_ec_deinit(ec);
133 memset(ec, 0, sizeof(*ec));
250 MPI_POINT point, struct mpi_ec_ctx *ec,
259 ret = mpi_ec_get_affine(x, y, point, ec) ? -EINVAL :
271 struct mpi_ec_ctx *ec;
277 ec = kmalloc(sizeof(*ec), GFP_KERNEL);
278 if (!ec)
281 err = sm2_ec_ctx_init(ec);
285 err = __sm2_set_pub_key(ec, key, keylen);
293 pbytes = MPI_NBYTES(ec->p);
309 err = sm2_z_digest_update(desc, ec->a, pbytes) ?:
310 sm2_z_digest_update(desc, ec->b, pbytes) ?:
311 sm2_z_digest_update_point(desc, ec->G, ec, pbytes) ?:
312 sm2_z_digest_update_point(desc, ec->Q, ec, pbytes);
319 sm2_ec_ctx_deinit(ec);
321 kfree(ec);
326 static int _sm2_verify(struct mpi_ec_ctx *ec, MPI hash, MPI sig_r, MPI sig_s)
340 if (mpi_cmp_ui(sig_r, 1) < 0 || mpi_cmp(sig_r, ec->n) > 0 ||
341 mpi_cmp_ui(sig_s, 1) < 0 || mpi_cmp(sig_s, ec->n) > 0) {
346 mpi_addm(t, sig_r, sig_s, ec->n);
352 mpi_ec_mul_point(&sG, sig_s, ec->G, ec);
353 mpi_ec_mul_point(&tP, t, ec->Q, ec);
354 mpi_ec_add_points(&sG, &sG, &tP, ec);
355 if (mpi_ec_get_affine(x1, y1, &sG, ec))
359 mpi_addm(t, hash, x1, ec->n);
381 struct mpi_ec_ctx *ec = akcipher_tfm_ctx(tfm);
387 if (unlikely(!ec->Q))
410 ret = _sm2_verify(ec, hash, sig.sig_r, sig.sig_s);
423 struct mpi_ec_ctx *ec = akcipher_tfm_ctx(tfm);
425 return __sm2_set_pub_key(ec, key, keylen);
429 static int __sm2_set_pub_key(struct mpi_ec_ctx *ec,
441 rc = sm2_ecc_os2ec(ec->Q, a);
455 struct mpi_ec_ctx *ec = akcipher_tfm_ctx(tfm);
457 return sm2_ec_ctx_init(ec);
462 struct mpi_ec_ctx *ec = akcipher_tfm_ctx(tfm);
464 sm2_ec_ctx_deinit(ec);