X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=dh.c;h=261209aafedcfaa7077143e43fa27b268a507d10;hb=503cd8a1792a51fea0cb1d474e646cb6978633ff;hp=4300a912378b764a85e8fc3581d869008cbcc065;hpb=c215a4bc817daf7b5631236c3c7b6a509479b034;p=secnet.git diff --git a/dh.c b/dh.c index 4300a91..261209a 100644 --- a/dh.c +++ b/dh.c @@ -52,7 +52,7 @@ static string_t dh_makepublic(void *sst, uint8_t *secret, int32_t secretlen) 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); @@ -61,6 +61,18 @@ static string_t dh_makepublic(void *sst, uint8_t *secret, int32_t secretlen) return r; } +static void write_mpbin_anomalous(MP_INT *a, uint8_t *buffer, + int32_t buflen) + /* If the BN is smaller than buflen, pads it *at the wrong end* */ +{ + char *hb = write_mpstring(a); + int32_t len; + hex_decode(buffer, buflen, &len, hb, True); + if (lenp); + mpz_powm_sec(&c, &b, &a, &st->p); - write_mpbin(&c,sharedsecret,buflen); + write_mpbin_anomalous(&c,sharedsecret,buflen); mpz_clear(&a); mpz_clear(&b);