summaryrefslogtreecommitdiffstats
path: root/crypto/ec/ecp_smpl.c
diff options
context:
space:
mode:
authorBodo Möller <bodo@openssl.org>2001-03-08 20:55:16 +0000
committerBodo Möller <bodo@openssl.org>2001-03-08 20:55:16 +0000
commit156e85578d180313c27e51d0bf186aa8650c49e1 (patch)
tree53fce31e7b1912e3e7df1d96e2a954a20c16e84f /crypto/ec/ecp_smpl.c
parentb28ec124204a59a866af72f807ef96487f0862e1 (diff)
Implement EC_GFp_mont_method.
Diffstat (limited to 'crypto/ec/ecp_smpl.c')
-rw-r--r--crypto/ec/ecp_smpl.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/crypto/ec/ecp_smpl.c b/crypto/ec/ecp_smpl.c
index a857560bf7..204dafab2a 100644
--- a/crypto/ec/ecp_smpl.c
+++ b/crypto/ec/ecp_smpl.c
@@ -630,12 +630,29 @@ int ec_GFp_simple_set_compressed_coordinates_GFp(const EC_GROUP *group, EC_POINT
}
else
{
- if (!BN_mod_mul(tmp2, &group->a, x, &group->field, ctx)) goto err;
+ if (group->meth->field_decode)
+ {
+ if (!group->meth->field_decode(group, tmp2, &group->a, ctx)) goto err;
+ if (!BN_mod_mul(tmp2, tmp2, x, &group->field, ctx)) goto err;
+ }
+ else
+ {
+ if (!BN_mod_mul(tmp2, &group->a, x, &group->field, ctx)) goto err;
+ }
+
if (!BN_mod_add_quick(tmp1, tmp1, tmp2, &group->field)) goto err;
}
/* tmp1 := tmp1 + b */
- if (!BN_mod_add_quick(tmp1, tmp1, &group->b, &group->field)) goto err;
+ if (group->meth->field_decode)
+ {
+ if (!group->meth->field_decode(group, tmp2, &group->b, ctx)) goto err;
+ if (!BN_mod_add_quick(tmp1, tmp1, tmp2, &group->field)) goto err;
+ }
+ else
+ {
+ if (!BN_mod_add_quick(tmp1, tmp1, &group->b, &group->field)) goto err;
+ }
if (!BN_mod_sqrt(y, tmp1, &group->field, ctx))
{