Exemplo n.º 1
0
        static void Main(string[] args)
        {
            BasicLidgrenCryptoProviderResolver resolver = new BasicLidgrenCryptoProviderResolver();

            EncryptedConfigurator.Configure(resolver);

            IOperationDispatcher     callbackDispatcher = new OperationDispatcher();
            SessionEncryptedCallback callback           = new SessionEncryptedCallback();

            callbackDispatcher.RegisterHandler <ISessionEncryptedCallback>(callback);

            using (ClientConnection client = new ClientConnection("net://localhost:3133/EncryptedServices", callbackDispatcher))
            {
                Console.WriteLine("Opening client...");
                Console.WriteLine();
                client.Open();

                IAuthenticator authenticator = client.RemoteExecutor.Create <IAuthenticator>();

                Console.WriteLine("Note that encryption is not strictly enforced. Enforcement is left up to the developer.");
                Console.WriteLine("11 + 6 = " + authenticator.Add(11, 6));
                Console.WriteLine();

                Console.WriteLine("Generating secret key...");
                byte[] secretBytes  = CreateByteKey(96);
                string secretString = Convert.ToBase64String(secretBytes);
                Console.WriteLine("Secret key is " + secretString);
                Console.WriteLine();

                Console.WriteLine("Encrypting secret key...");
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                rsa.ImportParameters(authenticator.GetRsaParameters().ToParams());
                byte[] encryptedBytes = rsa.Encrypt(secretBytes, false);
                Console.WriteLine("Encrypted key is " + Convert.ToBase64String(encryptedBytes));
                Console.WriteLine();

                Console.WriteLine("Establishing encrypted session...");
                authenticator.EncryptSession(encryptedBytes);

                Console.WriteLine("Awaiting encryption confirmation...");
                callback.Wait();
                Console.WriteLine("Encryption confirmed; registering crypto provider...");
                resolver.Register(new IPEndPoint(IPAddress.Loopback, 3133),
                                  new DebugNetAESEncryption(EmptyPeer, secretString));
                Console.WriteLine("Connection is encrypted.");
                const int wait = 160;
                Console.WriteLine($"Pausing for {wait} milliseconds to ensure server has time to register crypto provider...");
                Thread.Sleep(wait);
                Console.WriteLine("Done waiting.");
                Console.WriteLine();

                Console.WriteLine("5 + 6 = " + authenticator.Add(5, 6));
                Console.WriteLine();

                Console.WriteLine("Done. Press enter to exit.");
                Console.ReadLine();
            }
        }
Exemplo n.º 2
0
        public void TestAesCrypto()
        {
            // Arrange
            IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Loopback, _port);
            BasicLidgrenCryptoProviderResolver resolver   = new BasicLidgrenCryptoProviderResolver();
            ObservableAESEncryption            encryption = new ObservableAESEncryption(_applicationId, "topsecret");
            int cryptoFired = 0;
            // 0: request before encrypt;            1: request after encrypt
            // 2: request received before decrypt;   3: request recieved after decrypt
            // 4: response before encrypt;           5: response after encrypt
            // 6: response received before decrypt;  7: response received after decrypt
            List <byte[]> serializedBytes = new List <byte[]>();

            encryption.OnEncrypt = (b, a) =>
            {
                serializedBytes.Add(b);
                serializedBytes.Add(a);
                cryptoFired++;
            };
            encryption.OnDecrypt = (b, a) =>
            {
                serializedBytes.Add(b);
                serializedBytes.Add(a);
                cryptoFired++;
            };
            using (CreateServer(resolver))
                using (ClientConnection client = CreateClientConnection(resolver))
                {
                    client.Open();
                    // Act + Assert
                    ICalculator calculator = client.RemoteExecutor.Create <ICalculator>();
                    Assert.AreEqual(5, calculator.Add(3, 2));
                    Assert.AreEqual(0, cryptoFired);
                    IPEndPoint clientEndPoint = client.GetClientEndpoint();
                    resolver.Register(clientEndPoint, encryption);
                    resolver.Register(serverEndPoint, encryption);
                    Assert.AreEqual(11, calculator.Add(5, 6));
                    Assert.AreEqual(4, cryptoFired);
                    CollectionAssert.AreNotEqual(serializedBytes[0], serializedBytes[1]);
                    CollectionAssert.AreEqual(serializedBytes[1], serializedBytes[2]);
                    CollectionAssert.AreNotEqual(serializedBytes[2], serializedBytes[3]);
                    CollectionAssert.AreNotEqual(serializedBytes[4], serializedBytes[5]);
                    CollectionAssert.AreEqual(serializedBytes[5], serializedBytes[6]);
                    CollectionAssert.AreNotEqual(serializedBytes[6], serializedBytes[7]);
                }
        }