Home | History | Annotate | Download | only in jpake

Lines Matching refs:ctx

28     BN_CTX *ctx;
74 static void JPAKE_CTX_init(JPAKE_CTX *ctx, const char *name,
79 ctx->p.name = OPENSSL_strdup(name);
80 ctx->p.peer_name = OPENSSL_strdup(peer_name);
81 ctx->p.p = BN_dup(p);
82 ctx->p.g = BN_dup(g);
83 ctx->p.q = BN_dup(q);
84 ctx->secret = BN_dup(secret);
86 ctx->p.gxc = BN_new();
87 ctx->p.gxd = BN_new();
89 ctx->xa = BN_new();
90 ctx->xb = BN_new();
91 ctx->key = BN_new();
92 ctx->ctx = BN_CTX_new();
95 static void JPAKE_CTX_release(JPAKE_CTX *ctx)
97 BN_CTX_free(ctx->ctx);
98 BN_clear_free(ctx->key);
99 BN_clear_free(ctx->xb);
100 BN_clear_free(ctx->xa);
102 BN_free(ctx->p.gxd);
103 BN_free(ctx->p.gxc);
105 BN_clear_free(ctx->secret);
106 BN_free(ctx->p.q);
107 BN_free(ctx->p.g);
108 BN_free(ctx->p.p);
109 OPENSSL_free(ctx->p.peer_name);
110 OPENSSL_free(ctx->p.name);
112 memset(ctx, '\0', sizeof *ctx);
119 JPAKE_CTX *ctx = OPENSSL_malloc(sizeof *ctx);
121 JPAKE_CTX_init(ctx, name, peer_name, p, g, q, secret);
123 return ctx;
126 void JPAKE_CTX_free(JPAKE_CTX *ctx)
128 JPAKE_CTX_release(ctx);
129 OPENSSL_free(ctx);
187 const BIGNUM *zkpg, JPAKE_CTX *ctx)
197 BN_rand_range(r, ctx->p.q);
199 BN_mod_exp(p->zkpx.gr, zkpg, r, ctx->p.p, ctx->ctx);
202 zkp_hash(h, zkpg, p, ctx->p.name);
205 BN_mod_mul(t, x, h, ctx->p.q, ctx->ctx);
206 BN_mod_sub(p->zkpx.b, r, t, ctx->p.q, ctx->ctx);
215 JPAKE_CTX *ctx)
223 zkp_hash(h, zkpg, p, ctx->p.peer_name);
226 BN_mod_exp(t1, zkpg, p->zkpx.b, ctx->p.p, ctx->ctx);
228 BN_mod_exp(t2, p->gx, h, ctx->p.p, ctx->ctx);
230 BN_mod_mul(t3, t1, t2, ctx->p.p, ctx->ctx);
248 const BIGNUM *g, JPAKE_CTX *ctx)
250 BN_mod_exp(p->gx, g, x, ctx->p.p, ctx->ctx);
251 generate_zkp(p, x, g, ctx);
255 static void genrand(JPAKE_CTX *ctx)
260 BN_rand_range(ctx->xa, ctx->p.q);
264 BN_copy(qm1, ctx->p.q);
268 BN_rand_range(ctx->xb, qm1);
270 BN_add_word(ctx->xb, 1);
276 int JPAKE_STEP1_generate(JPAKE_STEP1 *send, JPAKE_CTX *ctx)
278 genrand(ctx);
279 generate_step_part(&send->p1, ctx->xa, ctx->p.g, ctx);
280 generate_step_part(&send->p2, ctx->xb, ctx->p.g, ctx);
286 static int is_legal(const BIGNUM *gx, const JPAKE_CTX *ctx)
291 if(BN_is_negative(gx) || BN_is_zero(gx) || BN_cmp(gx, ctx->p.p) >= 0)
295 BN_mod_exp(t, gx, ctx->p.q, ctx->p.p, ctx->ctx);
302 int JPAKE_STEP1_process(JPAKE_CTX *ctx, const JPAKE_STEP1 *received)
304 if(!is_legal(received->p1.gx, ctx))
310 if(!is_legal(received->p2.gx, ctx))
317 if(!verify_zkp(&received->p1, ctx->p.g, ctx))
324 if(!verify_zkp(&received->p2, ctx->p.g, ctx))
338 BN_copy(ctx->p.gxc, received->p1.gx);
339 BN_copy(ctx->p.gxd, received->p2.gx);
345 int JPAKE_STEP2_generate(JPAKE_STEP2 *send, JPAKE_CTX *ctx)
354 BN_mod_exp(t1, ctx->p.g, ctx->xa, ctx->p.p, ctx->ctx);
356 BN_mod_mul(t2, t1, ctx->p.gxc, ctx->p.p, ctx->ctx);
358 BN_mod_mul(t1, t2, ctx->p.gxd, ctx->p.p, ctx->ctx);
360 BN_mod_mul(t2, ctx->xb, ctx->secret, ctx->p.q, ctx->ctx);
371 generate_step_part(send, t2, t1, ctx);
381 static int compute_key(JPAKE_CTX *ctx, const BIGNUM *gx)
396 BN_mod_exp(t1, ctx->p.gxd, ctx->xb, ctx->p.p, ctx->ctx);
398 BN_sub(t2, ctx->p.q, ctx->secret);
400 BN_mod_exp(t3, t1, t2, ctx->p.p, ctx->ctx);
402 BN_mod_mul(t1, gx, t3, ctx->p.p, ctx->ctx);
404 BN_mod_exp(ctx->key, t1, ctx->xb, ctx->p.p, ctx->ctx);
414 int JPAKE_STEP2_process(JPAKE_CTX *ctx, const JPAKE_STEP2 *received)
424 BN_mod_add(t1, ctx->xa, ctx->xb, ctx->p.q, ctx->ctx);
426 BN_mod_exp(t2, ctx->p.g, t1, ctx->p.p, ctx->ctx);
428 BN_mod_mul(t1, ctx->p.gxc, t2, ctx->p.p, ctx->ctx);
430 if(verify_zkp(received, t1, ctx))
435 compute_key(ctx, received->gx);
456 int JPAKE_STEP3A_generate(JPAKE_STEP3A *send, JPAKE_CTX *ctx)
458 quickhashbn(send->hhk, ctx->key);
464 int JPAKE_STEP3A_process(JPAKE_CTX *ctx, const JPAKE_STEP3A *received)
468 quickhashbn(hhk, ctx->key);
484 int JPAKE_STEP3B_generate(JPAKE_STEP3B *send, JPAKE_CTX *ctx)
486 quickhashbn(send->hk, ctx->key);
491 int JPAKE_STEP3B_process(JPAKE_CTX *ctx, const JPAKE_STEP3B *received)
495 quickhashbn(hk, ctx->key);
507 const BIGNUM *JPAKE_get_shared_key(JPAKE_CTX *ctx)
509 return ctx->key;