X-Git-Url: https://www.bearssl.org/gitweb//home/git/?p=BearSSL;a=blobdiff_plain;f=src%2Fec%2Fec_prime_i15.c;h=bf1d00271a6aee68804e01dc2a747f9e88936f43;hp=04bdd5da977d31935384817d3ae420d48d3d76d7;hb=44c79c1add4cd4a217b1dd77c8421c1d3a08dcef;hpb=28e4e120b84dacdf53963639f1a8a6fec2793662;ds=sidebyside diff --git a/src/ec/ec_prime_i15.c b/src/ec/ec_prime_i15.c index 04bdd5d..bf1d002 100644 --- a/src/ec/ec_prime_i15.c +++ b/src/ec/ec_prime_i15.c @@ -733,6 +733,19 @@ api_mul(unsigned char *G, size_t Glen, return r; } +static size_t +api_mulgen(unsigned char *R, + const unsigned char *x, size_t xlen, int curve) +{ + const unsigned char *G; + size_t Glen; + + G = api_generator(curve, &Glen); + memcpy(R, G, Glen); + api_mul(R, Glen, x, xlen, curve); + return Glen; +} + static uint32_t api_muladd(unsigned char *A, const unsigned char *B, size_t len, const unsigned char *x, size_t xlen, @@ -750,6 +763,11 @@ api_muladd(unsigned char *A, const unsigned char *B, size_t len, cc = id_to_curve(curve); r = point_decode(&P, A, len, cc); + if (B == NULL) { + size_t Glen; + + B = api_generator(curve, &Glen); + } r &= point_decode(&Q, B, len, cc); point_mul(&P, x, xlen, cc); point_mul(&Q, y, ylen, cc); @@ -788,5 +806,6 @@ const br_ec_impl br_ec_prime_i15 = { &api_generator, &api_order, &api_mul, + &api_mulgen, &api_muladd };