static void schnorr_selftest(void) { BIGNUM *x; struct modp_group *grp; u_int i; char *hh; grp = jpake_default_group(); if ((x = BN_new()) == NULL) fatal("%s: BN_new", __func__); SCHNORR_DEBUG_BN((grp->p, "%s: grp->p = ", __func__)); SCHNORR_DEBUG_BN((grp->q, "%s: grp->q = ", __func__)); SCHNORR_DEBUG_BN((grp->g, "%s: grp->g = ", __func__)); /* [1, 20) */ for (i = 1; i < 20; i++) { printf("x = %u\n", i); fflush(stdout); if (BN_set_word(x, i) != 1) fatal("%s: set x word", __func__); schnorr_selftest_one(grp->p, grp->q, grp->g, x); } /* 100 x random [0, p) */ for (i = 0; i < 100; i++) { if (BN_rand_range(x, grp->p) != 1) fatal("%s: BN_rand_range", __func__); hh = BN_bn2hex(x); printf("x = (random) 0x%s\n", hh); free(hh); fflush(stdout); schnorr_selftest_one(grp->p, grp->q, grp->g, x); } /* [q-20, q) */ if (BN_set_word(x, 20) != 1) fatal("%s: BN_set_word (x = 20)", __func__); if (BN_sub(x, grp->q, x) != 1) fatal("%s: BN_sub (q - x)", __func__); for (i = 0; i < 19; i++) { hh = BN_bn2hex(x); printf("x = (q - %d) 0x%s\n", 20 - i, hh); free(hh); fflush(stdout); schnorr_selftest_one(grp->p, grp->q, grp->g, x); if (BN_add(x, x, BN_value_one()) != 1) fatal("%s: BN_add (x + 1)", __func__); } BN_free(x); }
struct jpake_ctx * jpake_new(void) { struct jpake_ctx *ret; ret = xcalloc(1, sizeof(*ret)); ret->grp = jpake_default_group(); ret->s = ret->k = NULL; ret->x1 = ret->x2 = ret->x3 = ret->x4 = NULL; ret->g_x1 = ret->g_x2 = ret->g_x3 = ret->g_x4 = NULL; ret->a = ret->b = NULL; ret->client_id = ret->server_id = NULL; ret->h_k_cid_sessid = ret->h_k_sid_sessid = NULL; debug3("%s: alloc %p", __func__, ret); return ret; }