You've already forked lidgren-network-gen3
mirror of
https://github.com/lidgren/lidgren-network-gen3.git
synced 2026-05-06 02:11:06 +09:00
More SRP work (still not working 100%)
This commit is contained in:
@@ -58,20 +58,22 @@ namespace UnitTests
|
||||
|
||||
Console.WriteLine("Message encryption OK");
|
||||
|
||||
byte[] salt = NetUtility.ToByteArray("47d980ce4c2333b6ce5b"); // s
|
||||
byte[] x;
|
||||
byte[] verifier = NetSRP.ComputePasswordVerifier("user", "password", salt, out x);
|
||||
|
||||
/*
|
||||
Console.WriteLine("x = " + NetUtility.ToHexString(x));
|
||||
Console.WriteLine("v = " + NetUtility.ToHexString(verifier));
|
||||
Console.WriteLine("");
|
||||
|
||||
byte[] a = NetUtility.ToByteArray("94f5a7f6875df8b569840a917b918c84aa002b145e24e77dabdd3941de82e6f5");
|
||||
byte[] a = NetUtility.ToByteArray("d378cc3b09d12cfca5130e22df3f2f3bcf8ecfaddeae6af7f8b3e9f8b4fc9749"); // random
|
||||
Console.WriteLine("a = " + NetUtility.ToHexString(a));
|
||||
byte[] A = NetSRP.ComputeClientChallenge(a);
|
||||
Console.WriteLine("A = " + NetUtility.ToHexString(A));
|
||||
Console.WriteLine("");
|
||||
|
||||
byte[] b = NetUtility.ToByteArray("a4ae167ba24c498a52d9a6963c285bb999246d3ce4c5e1028be5206809611358");
|
||||
byte[] b = NetUtility.ToByteArray("8394bdaebe1709124f4c1221707053440b30e270d457ece02818da63b53c2482"); // random
|
||||
Console.WriteLine("b = " + NetUtility.ToHexString(b));
|
||||
byte[] B = NetSRP.ComputeServerChallenge(b, verifier);
|
||||
Console.WriteLine("B = " + NetUtility.ToHexString(B));
|
||||
Console.WriteLine("");
|
||||
|
||||
byte[] u = NetSRP.ComputeU(A, B);
|
||||
Console.WriteLine("u = " + NetUtility.ToHexString(u));
|
||||
@@ -81,8 +83,63 @@ namespace UnitTests
|
||||
Console.WriteLine("Ss = " + NetUtility.ToHexString(serverCompareValue));
|
||||
|
||||
byte[] clientCompareValue; // Ss
|
||||
clientCompareValue = NetSRP.ComputeClientCompareValue(B, x, u, A);
|
||||
clientCompareValue = NetSRP.ComputeClientCompareValue(B, x, u, a);
|
||||
Console.WriteLine("Sc = " + NetUtility.ToHexString(clientCompareValue));
|
||||
*/
|
||||
|
||||
//
|
||||
// Pre-step:
|
||||
//
|
||||
// Server must store { Username, salt, verifier }
|
||||
//byte[] salt = NetSRP.CreateRandomSalt();
|
||||
byte[] salt = NetUtility.ToByteArray("D016E5A43F0E2A1C8FF8");
|
||||
Console.WriteLine("s = " + NetUtility.ToHexString(salt));
|
||||
byte[] serverVerifier;
|
||||
byte[] clientVerifier;
|
||||
NetSRP.ComputePasswordVerifier("user", "password", salt, out serverVerifier, out clientVerifier);
|
||||
//
|
||||
Console.WriteLine("x = " + NetUtility.ToHexString(clientVerifier));
|
||||
Console.WriteLine("v = " + NetUtility.ToHexString(serverVerifier));
|
||||
|
||||
// CLIENT:
|
||||
// Step 1: Client creates session private/public key pair
|
||||
//byte[] clientPrivateKey = NetSRP.CreateRandomKey();
|
||||
byte[] clientPrivateKey = NetUtility.ToByteArray("EFDBE24D15173DC1FBA22A8D51077AE932841CB2DBA8B09B2CFC5543983B2C7A");
|
||||
Console.WriteLine("a = " + NetUtility.ToHexString(clientPrivateKey));
|
||||
byte[] clientPublicKey = NetSRP.ComputeClientPublicKey(clientPrivateKey);
|
||||
// Step 2: Client sends username and client public key to server
|
||||
|
||||
// SERVER:
|
||||
// Step 3: Server creates session private/public key pair
|
||||
//byte[] serverPrivateKey = NetSRP.CreateRandomKey();
|
||||
byte[] serverPrivateKey = NetUtility.ToByteArray("FB1D472CD89EAF323DB0F7DE80A01CC51DD5A0D1AFC8B79F3CF5A2FC88529ADC");
|
||||
Console.WriteLine("b = " + NetUtility.ToHexString(serverPrivateKey));
|
||||
byte[] serverPublicKey = NetSRP.ComputeServerPublicKey(serverPrivateKey, serverVerifier);
|
||||
// Step 4: Server sends salt and server public key to client
|
||||
|
||||
// CLIENT:
|
||||
// Step 5: Client computes u and compare value
|
||||
byte[] u = NetSRP.ComputeU(clientPublicKey, serverPublicKey);
|
||||
Console.WriteLine("u = " + NetUtility.ToHexString(u));
|
||||
byte[] clientSessionKey = NetSRP.ComputeClientSessionKey(serverPublicKey, clientVerifier, u, clientPrivateKey); // this is where client proves it has x (and thus the password)
|
||||
Console.WriteLine("Sc = " + NetUtility.ToHexString(clientSessionKey));
|
||||
|
||||
// SERVER:
|
||||
// Step 6: Server computes u and compare value
|
||||
// byte[] u = NetSRP.ComputeU(clientPublicKey, serverPublicKey);
|
||||
byte[] serverSessionKey = NetSRP.ComputeServerSessionKey(clientPublicKey, serverVerifier, u, serverPrivateKey);
|
||||
Console.WriteLine("Ss = " + NetUtility.ToHexString(serverSessionKey));
|
||||
|
||||
if (!NetUtility.CompareElements(clientSessionKey, serverSessionKey))
|
||||
Console.WriteLine("BAD!!!!!!!");
|
||||
|
||||
// Console.WriteLine("SRP test OK");
|
||||
/*
|
||||
C ==> S C, A
|
||||
C <== S s, B
|
||||
C ==> S M[1]
|
||||
C <== S M[2]
|
||||
*/
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user