BigInt BnetSRP3::getServerSecret(BigInt& A, BigInt& v) { BigInt B = getServerSessionPublicKey(v); BigInt u = getScrambler(B); return ((A * v.powm(u, N)) % N).powm(b, N); }
BigInt BnetSRP3::getClientSecret(BigInt& B) const { BigInt x = getClientPrivateKey(); BigInt u = getScrambler(B); return (N + B - g.powm(x, N)).powm((x*u) + a, N); }
void BnetSRP3::getServerSecret( mpz_ptr result, mpz_t& A, mpz_t& v ) { mpz_t B_, u; getServerSessionPublicKey(B_, v); getScrambler(u, B_); mpz_init(result); mpz_powm(result, v, u, N); mpz_mul(result, result, A); mpz_mod(result, result, N); mpz_powm(result, result, b, N); mpz_clear(B_); mpz_clear(u); }
void BnetSRP3::getClientSecret( mpz_ptr result, mpz_t& B_ ) { mpz_t x, u; getClientPrivateKey(x); getScrambler(u, B_); mpz_t temp; mpz_init(temp); mpz_powm(temp, g, x, N); mpz_init(result); mpz_add(result, N, B_); mpz_sub(result, result, temp); mpz_clear(temp); mpz_init(temp); mpz_mul(temp, x, u); mpz_add(temp, temp, a); mpz_powm(result, result, temp, N); mpz_clear(temp); mpz_clear(x); mpz_clear(u); }