示例#1
0
        public void TestNoiseXx()
        {
            var rootKey  = PublicKeyAuth.GenerateKeyPair();
            var Verifier = DiscoHelper.CreatePublicKeyVerifier(rootKey.PublicKey);

            var clienPair  = Asymmetric.GenerateKeyPair();
            var serverPair = Asymmetric.GenerateKeyPair();

            // init
            var clientConfig = new Config
            {
                KeyPair              = clienPair,
                HandshakePattern     = NoiseHandshakeType.NoiseXX,
                PublicKeyVerifier    = Verifier,
                StaticPublicKeyProof = DiscoHelper.CreateStaticPublicKeyProof(rootKey.PrivateKey, clienPair.PublicKey)
            };

            var serverConfig = new Config
            {
                KeyPair              = serverPair,
                HandshakePattern     = NoiseHandshakeType.NoiseXX,
                PublicKeyVerifier    = Verifier,
                StaticPublicKeyProof = DiscoHelper.CreateStaticPublicKeyProof(rootKey.PrivateKey, serverPair.PublicKey)
            };

            this.RunTwoWayTest(clientConfig, serverConfig, 1802);
        }
示例#2
0
        /// <summary>
        /// Generate a disco key pair (X25519 key pair)
        /// and save it to a file in hexadecimal form.
        /// </summary>
        /// <param name="fileName">Filepath to save key</param>
        /// <returns>Disco key pair</returns>
        public static KeyPair GenerateAndSaveDiscoKeyPair(string fileName)
        {
            var keyPair = Asymmetric.GenerateKeyPair();

            File.WriteAllText(fileName, keyPair.ExportPublicKey() + keyPair.ExportPrivateKey());

            return(keyPair);
        }
示例#3
0
        public void BasicCanDecryptTest()
        {
            const string PLAINTEXT  = "This is a test of the SmartEncryption system...";
            var          senderKeys = Asymmetric.GenerateKeyPair();
            var          recipKeys  = Asymmetric.GenerateKeyPair();

            var cipher = Asymmetric.Encrypt(Encoding.UTF8.GetBytes(PLAINTEXT), senderKeys.PrivateKey,
                                            recipKeys.PublicKey);
            var plain = Asymmetric.Decrypt(cipher, recipKeys.PrivateKey, senderKeys.PublicKey);

            Assert.AreEqual(PLAINTEXT, Encoding.UTF8.GetString(plain));
        }
示例#4
0
        public void TestNoiseN()
        {
            // init
            var clientConfig = new Config
            {
                KeyPair          = Asymmetric.GenerateKeyPair(),
                HandshakePattern = NoiseHandshakeType.NoiseN
            };

            var serverConfig = new Config
            {
                KeyPair          = Asymmetric.GenerateKeyPair(),
                HandshakePattern = NoiseHandshakeType.NoiseN
            };

            this.RunOneWayTest(clientConfig, serverConfig, 1803);
        }
示例#5
0
        public async Task TestSeveralWriteRoutines()
        {
            var clientConfig = new Config
            {
                KeyPair              = Asymmetric.GenerateKeyPair(),
                HandshakePattern     = NoiseHandshakeType.NoiseXX,
                StaticPublicKeyProof = new byte[] { },
                PublicKeyVerifier    = ConnectionTest.Verifier
            };

            var serverConfig = new Config
            {
                KeyPair              = Asymmetric.GenerateKeyPair(),
                HandshakePattern     = NoiseHandshakeType.NoiseXX,
                StaticPublicKeyProof = new byte[] { },
                PublicKeyVerifier    = ConnectionTest.Verifier
            };

            await this.RunConnectionTest(clientConfig, serverConfig, 1810);
        }
示例#6
0
        private void PrepareDisco(int port)
        {
            // init
            var clientConfig = new Config
            {
                KeyPair          = Asymmetric.GenerateKeyPair(),
                HandshakePattern = NoiseHandshakeType.NoiseNK
            };

            var serverConfig = new Config
            {
                KeyPair          = Asymmetric.GenerateKeyPair(),
                HandshakePattern = NoiseHandshakeType.NoiseNK
            };

            // set up remote keys
            serverConfig.RemoteKey = clientConfig.KeyPair.PublicKey;
            clientConfig.RemoteKey = serverConfig.KeyPair.PublicKey;
            this.PrepareDiscoServer(serverConfig, port);
            System.Threading.Thread.Sleep(5000);
            this.PrepareDiscoClient(clientConfig, port);
        }
示例#7
0
        public async Task TestHalfDuplex()
        {
            // init
            var clientConfig = new Config
            {
                KeyPair              = Asymmetric.GenerateKeyPair(),
                HandshakePattern     = NoiseHandshakeType.NoiseXX,
                PublicKeyVerifier    = ConnectionTest.Verifier,
                StaticPublicKeyProof = new byte[] { },
                HalfDuplex           = true
            };

            var serverConfig = new Config
            {
                KeyPair              = Asymmetric.GenerateKeyPair(),
                HandshakePattern     = NoiseHandshakeType.NoiseXX,
                PublicKeyVerifier    = ConnectionTest.Verifier,
                StaticPublicKeyProof = new byte[] { },
                HalfDuplex           = true
            };

            await this.RunConnectionTest(clientConfig, serverConfig, 1811, 10);
        }