read_mpbin(&a, secret, secretlen);
- mpz_powm(&b, &st->g, &a, &st->p);
+ mpz_powm_sec(&b, &st->g, &a, &st->p);
r=write_mpstring(&b);
}
static dh_makeshared_fn dh_makeshared;
-static void dh_makeshared(void *sst, uint8_t *secret, int32_t secretlen,
- cstring_t rempublic, uint8_t *sharedsecret,
- int32_t buflen)
+static bool_t dh_makeshared(void *sst, uint8_t *secret, int32_t secretlen,
+ cstring_t rempublic, uint8_t *sharedsecret,
+ int32_t buflen)
{
struct dh *st=sst;
MP_INT a, b, c;
read_mpbin(&a, secret, secretlen);
mpz_set_str(&b, rempublic, 16);
- mpz_powm(&c, &b, &a, &st->p);
+ mpz_powm_sec(&c, &b, &a, &st->p);
write_mpbin(&c,sharedsecret,buflen);
mpz_clear(&a);
mpz_clear(&b);
mpz_clear(&c);
+
+ return True;
}
static list_t *dh_apply(closure_t *self, struct cloc loc, dict_t *context,
cfgfatal(loc,"diffie-hellman","generator must be less than modulus\n");
}
- st->ops.len=sz;
+ st->ops.secret_len=sz;
- st->ops.ceil_len=(mpz_sizeinbase(&st->p,2)+7)/8;
+ st->ops.shared_len=(mpz_sizeinbase(&st->p,2)+7)/8;
/* According to the docs, mpz_sizeinbase(,256) is allowed to return
* an answer which is 1 too large. But mpz_sizeinbase(,2) isn't. */