Exemple #1
0
        protected override void InitializeSecurity()
        {
            Dictionary <string, string> message;
            var dhg = new DiffieHellmanGenerator();

            // Stage 1: Send key request
            Send(new Dictionary <string, string>
            {
                { "request", "keys" }
            });

            // Stage 2: Process response
            message = WaitForKey("p");
            if (message == null)
            {
                MessageOutput.Log("Invalid response from server; expected p");
                return;
            }

            //int p = Convert.ToInt32(message["p"]);
            //int g = Convert.ToInt32(message["g"]);
            //var publicKeys = new DiffieHellmanPublicKeystore(p, g);
            var publicKeys = new DiffieHellmanPublicKeystore(message);
            var secretA    = dhg.GenerateSecret();
            var transportA = dhg.GenerateTransport(secretA, publicKeys);

            // Stage 3: Send a, await b
            Send(new Dictionary <string, string>
            {
                { "a", transportA.ToString() }
            });
            message = WaitForKey("b");
            if (message == null)
            {
                MessageOutput.Log("Invalid response from server; expected b");
                return;
            }

            // Stage 4: Calculate shared secret
            var transportB = BigInteger.Parse(message["b"]);

            SharedSecret = dhg.GenerateSharedSecret(secretA, transportB, publicKeys);

            // Stage 5: Send encryption type
            Send(new Dictionary <string, string>
            {
                { "encryption", encryption }
            });
            SetEncryption(encryption);

            MessageOutput.Log("Connection summary:\n " +
                              $"\tp: {publicKeys.P}\n" +
                              $"\tg: {publicKeys.G}\n" +
                              $"\tsecret: {secretA}\n" +
                              $"\ttransport: {transportA}\n" +
                              $"\treceived transport: {transportB}\n" +
                              $"\tshared secret: {SharedSecret}\n" +
                              $"\tencryption: {encryption}");
        }
Exemple #2
0
        public void Should_Generate_Transport_1()
        {
            // Arrange
            var dhg        = new DiffieHellmanGenerator();
            var publicKeys = new DiffieHellmanPublicKeystore(23, 5);
            var secret     = 4;
            int expected   = 4;

            // Act
            var transport = dhg.GenerateTransport(secret, publicKeys);

            // Assert
            Assert.True(transport == expected, $"Expected: {expected}; Actual: {transport}");
        }
Exemple #3
0
        public void Should_Generate_Shared_Secret()
        {
            // Arrange
            var dhg        = new DiffieHellmanGenerator();
            var publicKeys = new DiffieHellmanPublicKeystore(23, 5);
            int secret     = 4;
            int transport  = 10;
            int expected   = 18;

            // Act
            var sharedSecret = dhg.GenerateSharedSecret(secret, transport, publicKeys);

            // Assert
            Assert.True(sharedSecret == expected, $"Expected: {expected}; Actual: {sharedSecret}");
        }
Exemple #4
0
        public void Should_Exchange_Keys_2()
        {
            // Arrange
            var dhg        = new DiffieHellmanGenerator();
            var publicKeys = new DiffieHellmanPublicKeystore(23, 5);
            int secretA    = 5;
            int secretB    = 3;
            var transportA = dhg.GenerateTransport(secretA, publicKeys);
            var transportB = dhg.GenerateTransport(secretB, publicKeys);

            // Act
            var sharedSecretA = dhg.GenerateSharedSecret(secretA, transportB, publicKeys);
            var sharedSecretB = dhg.GenerateSharedSecret(secretB, transportA, publicKeys);

            // Assert
            Assert.True(sharedSecretA == sharedSecretB,
                        $"Shared secret numbers are not equal: a = {sharedSecretA}, b = {sharedSecretB}");
        }
Exemple #5
0
        public void Should_Exchange_Keys_1()
        {
            // Arrange
            var dhg        = new DiffieHellmanGenerator();
            var publicKeys = new DiffieHellmanPublicKeystore(23, 5);
            var secretA    = dhg.GenerateSecret();
            var secretB    = dhg.GenerateSecret();
            var transportA = dhg.GenerateTransport(secretA, publicKeys);
            var transportB = dhg.GenerateTransport(secretB, publicKeys);

            // Act
            var sharedSecretA = dhg.GenerateSharedSecret(secretA, transportB, publicKeys);
            var sharedSecretB = dhg.GenerateSharedSecret(secretB, transportA, publicKeys);

            // Assert
            Assert.True(sharedSecretA > 0 && sharedSecretB > 0,
                        "Shared secret numbers are lesser than 0, possible math exception");
            Assert.True(sharedSecretA == sharedSecretB,
                        $"Shared secret numbers are not equal: a = {sharedSecretA}, b = {sharedSecretB}");
        }