예제 #1
0
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);
}
예제 #2
0
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);
}
예제 #3
0
	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);
	}
예제 #4
0
	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);
	}