private void testClientCatchesBadB(Srp6GroupParameters group) { byte[] I = Encoding.UTF8.GetBytes("username"); byte[] P = Encoding.UTF8.GetBytes("password"); byte[] s = new byte[16]; random.NextBytes(s); Srp6Client client = new Srp6Client(); client.Init(group, new Sha256Digest(), random); client.GenerateClientCredentials(s, I, P); try { client.CalculateSecret(BigInteger.Zero); Fail("Client failed to detect invalid value for 'B'"); } catch (CryptoException) { // Expected } try { client.CalculateSecret(group.N); Fail("Client failed to detect invalid value for 'B'"); } catch (CryptoException) { // Expected } }
private void testMutualVerification(Srp6GroupParameters group) { byte[] I = Encoding.UTF8.GetBytes("username"); byte[] P = Encoding.UTF8.GetBytes("password"); byte[] s = new byte[16]; random.NextBytes(s); Srp6VerifierGenerator gen = new Srp6VerifierGenerator(); gen.Init(group, new Sha256Digest()); BigInteger v = gen.GenerateVerifier(s, I, P); Srp6Client client = new Srp6Client(); client.Init(group, new Sha256Digest(), random); Srp6Server server = new Srp6Server(); server.Init(group, v, new Sha256Digest(), random); BigInteger A = client.GenerateClientCredentials(s, I, P); BigInteger B = server.GenerateServerCredentials(); BigInteger clientS = client.CalculateSecret(B); BigInteger serverS = server.CalculateSecret(A); if (!clientS.Equals(serverS)) { Fail("SRP agreement failed - client/server calculated different secrets"); } }
void SetSrpStrength(SrpStrength strength) { m_strength = strength; m_srpByteLength = ((int)strength) >> 3; m_param = SrpConstants.Lookup(m_strength); m_client = new Srp6Client(m_param); }
public TlsSrpKeyExchange(int keyExchange, IList supportedSignatureAlgorithms, TlsSrpGroupVerifier groupVerifier, byte[] identity, byte[] password) : base(keyExchange, supportedSignatureAlgorithms) { this.mTlsSigner = TlsSrpKeyExchange.CreateSigner(keyExchange); this.mGroupVerifier = groupVerifier; this.mIdentity = identity; this.mPassword = password; this.mSrpClient = new Srp6Client(); }
public TlsSrpKeyExchange(int keyExchange, global::System.Collections.IList supportedSignatureAlgorithms, TlsSrpGroupVerifier groupVerifier, byte[] identity, byte[] password) : base(keyExchange, supportedSignatureAlgorithms) { mTlsSigner = CreateSigner(keyExchange); mGroupVerifier = groupVerifier; mIdentity = identity; mPassword = password; mSrpClient = new Srp6Client(); }
public static BigInteger Srp6Response(string username, byte[] password, byte[] salt, BigInteger B, out BigInteger token) { var random = new SecureRandom(new CryptoApiRandomGenerator()); var I = Encoding.UTF8.GetBytes(username); var p = FromInput(password, salt); var client = new Srp6Client(); client.Init(GroupParameters, new Sha256Digest(), random); token = client.GenerateClientCredentials(salt, I, p); client.CalculateSecret(B); return(client.CalculateClientEvidenceMessage()); }