public static Calcx ( Byte salt, String userName, String password ) : NetBigInteger | ||
salt | Byte | |
userName | String | |
password | String | |
return | NetBigInteger |
/// <summary> /// Generates Session key from response /// </summary> /// <param name="response"></param> /// <response></response> private NetSRP.Verification KeyFromResponse(NetSRP.Response response) { if ((Handshake.State.AllowVerificating & this.HandshakeState) != this.HandshakeState) { return(_verification); // Double Request } // When we get the response, get their public key B if (response.B.Mod(N).IntValue == 0) { this.HandshakeState = Handshake.State.Failed; throw new NetSRP.HandShakeException("Response contains invalid data", new ArgumentException("B mod N is zero.")); } // Shared random scrambler NetBigInteger u = NetSRP.Calcu(_cache.A, response.B); if (u.IntValue == 0) { this.HandshakeState = Handshake.State.Failed; throw new NetSRP.HandShakeException("Response contains invalid data", new ArgumentException("u is zero.")); } // Private key x NetBigInteger x = NetSRP.Calcx(response.Salt, _request.Username, _cache.UserData); // Cache Response; _response = response; // Session key _cache.S = NetSRP.CalcSClient(N, g, response.B, k, x, _cache.a, u); _cache.K = NetSRP.CalcK(_cache.S); // Create the verification _verification = new NetSRP.Verification(NetSRP.CalcM(N, g, _request.Username, response.Salt, _cache.A, response.B, _cache.K)); // Set State this.HandshakeState = Handshake.State.Verificating; return(_verification); }
/// <summary> /// Host stores v (password verifier) in database. /// </summary> /// <param name="userName"></param> /// <param name="password"></param> /// <param name="salt"></param> /// <param name="N"></param> /// <param name="g"></param> /// <returns></returns> public static NetBigInteger PasswordVerifier(String userName, String password, Byte[] salt, NetBigInteger N, NetBigInteger g) { NetBigInteger x = NetSRP.Calcx(salt, userName, password); return(NetSRP.CalcV(N, g, x)); }