}
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;
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,
typedef string_t dh_makepublic_fn(void *st, uint8_t *secret,
int32_t secretlen);
/* Fills buffer (up to buflen) with shared secret */
-typedef void dh_makeshared_fn(void *st, uint8_t *secret,
- int32_t secretlen, cstring_t rempublic,
- uint8_t *sharedsecret, int32_t buflen);
+typedef bool_t dh_makeshared_fn(void *st, uint8_t *secret,
+ int32_t secretlen, cstring_t rempublic,
+ uint8_t *sharedsecret, int32_t buflen);
struct dh_if {
void *st;
int32_t len; /* Approximate size of modulus in bytes */
}
/* Generate the shared key */
- st->dh->makeshared(st->dh->st,st->dhsecret,st->dh->len,pk,
- st->sharedsecret,st->sharedsecretlen);
+ if (!st->dh->makeshared(st->dh->st,st->dhsecret,st->dh->len,pk,
+ st->sharedsecret,st->sharedsecretlen))
+ return False;
/* Set up the transform */
struct transform_if *generator=st->chosen_transform;