You've already forked lidgren-network-gen3
mirror of
https://github.com/lidgren/lidgren-network-gen3.git
synced 2026-05-16 15:16:33 +09:00
SendToAll added to NetServer
This commit is contained in:
@@ -43,11 +43,21 @@ namespace Lidgren.Network
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get random bits
|
||||
/// Create 16 bytes of random salt
|
||||
/// </summary>
|
||||
public static byte[] CreateRandomKey(int bits)
|
||||
public static byte[] CreateRandomSalt()
|
||||
{
|
||||
byte[] retval = new byte[bits / 8];
|
||||
byte[] retval = new byte[16];
|
||||
NetRandom.Instance.NextBytes(retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create 32 bytes of random ephemeral value
|
||||
/// </summary>
|
||||
public static byte[] CreateRandomEphemeral()
|
||||
{
|
||||
byte[] retval = new byte[32];
|
||||
NetRandom.Instance.NextBytes(retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Lidgren.Network
|
||||
{
|
||||
@@ -13,6 +14,38 @@ namespace Lidgren.Network
|
||||
config.AcceptIncomingConnections = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Send a message to all connections
|
||||
/// </summary>
|
||||
/// <param name="msg">The message to send</param>
|
||||
/// <param name="method">How to deliver the message</param>
|
||||
public void SendToAll(NetOutgoingMessage msg, NetDeliveryMethod method)
|
||||
{
|
||||
SendMessage(msg, this.Connections, method, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Send a message to all connections except one
|
||||
/// </summary>
|
||||
/// <param name="msg">The message to send</param>
|
||||
/// <param name="method">How to deliver the message</param>
|
||||
|
||||
|
||||
public void SendToAll(NetOutgoingMessage msg, NetConnection except, NetDeliveryMethod method)
|
||||
{
|
||||
var all = this.Connections;
|
||||
if (all.Count <= 0)
|
||||
return;
|
||||
|
||||
List<NetConnection> recipients = new List<NetConnection>(all.Count - 1);
|
||||
foreach (var conn in all)
|
||||
if (conn != except)
|
||||
recipients.Add(conn);
|
||||
|
||||
if (recipients.Count > 0)
|
||||
SendMessage(msg, recipients, method, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a string that represents this object
|
||||
/// </summary>
|
||||
|
||||
@@ -56,39 +56,42 @@ namespace UnitTests
|
||||
if (im.ReadString() != "kokos")
|
||||
throw new NetException("fail");
|
||||
|
||||
byte[] salt = NetSRP.CreateRandomKey(16);
|
||||
byte[] x = NetSRP.ComputePrivateKey("user", "password", salt);
|
||||
|
||||
byte[] v = NetSRP.ComputeServerVerifier(x);
|
||||
//Console.WriteLine("v = " + NetUtility.ToHexString(v));
|
||||
|
||||
byte[] a = NetSRP.CreateRandomKey(32); // NetUtility.ToByteArray("393ed364924a71ba7258633cc4854d655ca4ec4e8ba833eceaad2511e80db2b5");
|
||||
byte[] A = NetSRP.ComputeClientEphemeral(a);
|
||||
//Console.WriteLine("A = " + NetUtility.ToHexString(A));
|
||||
|
||||
byte[] b = NetSRP.CreateRandomKey(32); // NetUtility.ToByteArray("cc4d87a90db91067d52e2778b802ca6f7d362490c4be294b21b4a57c71cf55a9");
|
||||
byte[] B = NetSRP.ComputeServerEphemeral(b, v);
|
||||
//Console.WriteLine("B = " + NetUtility.ToHexString(B));
|
||||
|
||||
byte[] u = NetSRP.ComputeU(A, B);
|
||||
//Console.WriteLine("u = " + NetUtility.ToHexString(u));
|
||||
|
||||
byte[] Ss = NetSRP.ComputeServerSessionValue(A, v, u, b);
|
||||
//Console.WriteLine("Ss = " + NetUtility.ToHexString(Ss));
|
||||
|
||||
byte[] Sc = NetSRP.ComputeClientSessionValue(B, x, u, a);
|
||||
//Console.WriteLine("Sc = " + NetUtility.ToHexString(Sc));
|
||||
|
||||
if (Ss.Length != Sc.Length)
|
||||
throw new NetException("SRP non matching lengths!");
|
||||
|
||||
for (int j = 0; j < Ss.Length; j++)
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
if (Ss[j] != Sc[j])
|
||||
throw new NetException("SRP non matching session values!");
|
||||
}
|
||||
byte[] salt = NetSRP.CreateRandomSalt();
|
||||
byte[] x = NetSRP.ComputePrivateKey("user", "password", salt);
|
||||
|
||||
var test = NetSRP.CreateEncryption(Ss);
|
||||
byte[] v = NetSRP.ComputeServerVerifier(x);
|
||||
//Console.WriteLine("v = " + NetUtility.ToHexString(v));
|
||||
|
||||
byte[] a = NetSRP.CreateRandomEphemeral(); // NetUtility.ToByteArray("393ed364924a71ba7258633cc4854d655ca4ec4e8ba833eceaad2511e80db2b5");
|
||||
byte[] A = NetSRP.ComputeClientEphemeral(a);
|
||||
//Console.WriteLine("A = " + NetUtility.ToHexString(A));
|
||||
|
||||
byte[] b = NetSRP.CreateRandomEphemeral(); // NetUtility.ToByteArray("cc4d87a90db91067d52e2778b802ca6f7d362490c4be294b21b4a57c71cf55a9");
|
||||
byte[] B = NetSRP.ComputeServerEphemeral(b, v);
|
||||
//Console.WriteLine("B = " + NetUtility.ToHexString(B));
|
||||
|
||||
byte[] u = NetSRP.ComputeU(A, B);
|
||||
//Console.WriteLine("u = " + NetUtility.ToHexString(u));
|
||||
|
||||
byte[] Ss = NetSRP.ComputeServerSessionValue(A, v, u, b);
|
||||
//Console.WriteLine("Ss = " + NetUtility.ToHexString(Ss));
|
||||
|
||||
byte[] Sc = NetSRP.ComputeClientSessionValue(B, x, u, a);
|
||||
//Console.WriteLine("Sc = " + NetUtility.ToHexString(Sc));
|
||||
|
||||
if (Ss.Length != Sc.Length)
|
||||
throw new NetException("SRP non matching lengths!");
|
||||
|
||||
for (int j = 0; j < Ss.Length; j++)
|
||||
{
|
||||
if (Ss[j] != Sc[j])
|
||||
throw new NetException("SRP non matching session values!");
|
||||
}
|
||||
|
||||
var test = NetSRP.CreateEncryption(Ss);
|
||||
}
|
||||
|
||||
Console.WriteLine("Message encryption OK");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user