X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=d0_blind_id.c;h=b9989cec5aff1e94866e2a7cf5d4504bc28131ce;hb=2ddf9f5d7cfbab8ee63bf1b33295ae6f82ca4680;hp=68d3c64e5cba3263e451ea7ed9498e407c48b184;hpb=c5b48e0ae988cb71bf281189df2a13415b6ffcd0;p=xonotic%2Fd0_blind_id.git diff --git a/d0_blind_id.c b/d0_blind_id.c index 68d3c64..b9989ce 100644 --- a/d0_blind_id.c +++ b/d0_blind_id.c @@ -229,9 +229,8 @@ static D0_BOOL d0_rsa_generate_key(size_t size, d0_blind_id_t *ctx) CHECK(d0_bignum_gcd(temp4, NULL, NULL, temp2, ctx->rsa_e)); if(!d0_bignum_cmp(temp4, one)) break; - if(++gcdfail == 3) + if(++gcdfail == 16) goto fail; - ++gcdfail; } UNLOCKTEMPS(); @@ -243,7 +242,7 @@ static D0_BOOL d0_rsa_generate_key(size_t size, d0_blind_id_t *ctx) if(!d0_bignum_cmp(temp1, ctx->rsa_d)) { UNLOCKTEMPS(); - if(++fail == 3) + if(++fail == 16) goto fail; continue; } @@ -261,9 +260,8 @@ static D0_BOOL d0_rsa_generate_key(size_t size, d0_blind_id_t *ctx) break; } UNLOCKTEMPS(); - if(++gcdfail == 3) + if(++gcdfail == 16) goto fail; - ++gcdfail; } // ctx->rsa_n = ctx->rsa_d*temp1 @@ -271,8 +269,8 @@ static D0_BOOL d0_rsa_generate_key(size_t size, d0_blind_id_t *ctx) // ctx->rsa_d = ctx->rsa_e^-1 mod (ctx->rsa_d-1)(temp1-1) CHECK(d0_bignum_sub(temp2, ctx->rsa_d, one)); // we can't reuse the value from above because temps were unlocked - CHECK(d0_bignum_mul(temp0, temp2, temp3)); - CHECK(d0_bignum_mod_inv(ctx->rsa_d, ctx->rsa_e, temp0)); + CHECK(d0_bignum_mul(temp1, temp2, temp3)); + CHECK(d0_bignum_mod_inv(ctx->rsa_d, ctx->rsa_e, temp1)); UNLOCKTEMPS(); return 1; fail: @@ -307,9 +305,8 @@ static D0_BOOL d0_rsa_generate_key_fastreject(size_t size, d0_fastreject_functio CHECK(d0_bignum_gcd(temp4, NULL, NULL, temp2, ctx->rsa_e)); if(!d0_bignum_cmp(temp4, one)) break; - if(++gcdfail == 3) + if(++gcdfail == 16) return 0; - ++gcdfail; } UNLOCKTEMPS(); @@ -321,7 +318,7 @@ static D0_BOOL d0_rsa_generate_key_fastreject(size_t size, d0_fastreject_functio if(!d0_bignum_cmp(temp1, ctx->rsa_d)) { UNLOCKTEMPS(); - if(++fail == 3) + if(++fail == 16) return 0; continue; } @@ -348,15 +345,14 @@ static D0_BOOL d0_rsa_generate_key_fastreject(size_t size, d0_fastreject_functio break; } UNLOCKTEMPS(); - if(++gcdfail == 3) + if(++gcdfail == 16) return 0; - ++gcdfail; } // ctx->rsa_d = ctx->rsa_e^-1 mod (ctx->rsa_d-1)(temp1-1) CHECK(d0_bignum_sub(temp2, ctx->rsa_d, one)); // we can't reuse the value from above because temps were unlocked - CHECK(d0_bignum_mul(ctx->rsa_d, temp2, temp3)); - CHECK(d0_bignum_mod_inv(ctx->rsa_d, ctx->rsa_e, temp0)); + CHECK(d0_bignum_mul(temp1, temp2, temp3)); + CHECK(d0_bignum_mod_inv(ctx->rsa_d, ctx->rsa_e, temp1)); UNLOCKTEMPS(); return 1; fail: @@ -1440,6 +1436,22 @@ fail: return 0; } +D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_verify_private_id(const d0_blind_id_t *ctx) +{ + USINGTEMPS(); // temps: temp0 = g^s + USING(schnorr_G); USING(schnorr_s); USING(schnorr_g_to_s); + + LOCKTEMPS(); + CHECK(d0_bignum_mod_pow(temp0, four, ctx->schnorr_s, ctx->schnorr_G)); + CHECK(!d0_bignum_cmp(temp0, ctx->schnorr_g_to_s)); + UNLOCKTEMPS(); + return 1; + +fail: + UNLOCKTEMPS(); + return 0; +} + d0_blind_id_t *d0_blind_id_new(void) { d0_blind_id_t *b = d0_malloc(sizeof(d0_blind_id_t));