Esempio n. 1
0
        public ServerForm()
        {
            InitializeComponent();

            this.serverCred = new ServerCurrentCredential(PackageNames.Negotiate);

            this.serverContext = new ServerContext(
                serverCred,
                ContextAttrib.AcceptIntegrity |
                ContextAttrib.ReplayDetect |
                ContextAttrib.SequenceDetect |
                ContextAttrib.MutualAuth |
                ContextAttrib.Delegate |
                ContextAttrib.Confidentiality,
                true
                );

            this.server               = new CustomServer();
            this.server.Received     += server_Received;
            this.server.Disconnected += server_Disconnected;

            this.FormClosing += Form1_FormClosing;

            this.startButton.Click += startButton_Click;
            this.stopButton.Click  += stopButton_Click;

            this.encryptButton.Click     += encryptButton_Click;
            this.signButton.Click        += signButton_Click;
            this.impersonateButton.Click += impersonateButton_Click;

            this.running      = false;
            this.initializing = false;
            this.connected    = false;

            UpdateButtons();

            this.serverUsernameTextbox.Text = this.serverCred.PrincipleName;
        }
Esempio n. 2
0
        private static void CredTest(string packageName)
        {
            ClientCurrentCredential clientCred = null;
            ClientContext           client     = null;

            ServerCurrentCredential serverCred = null;
            ServerContext           server     = null;

            byte[] clientToken;
            byte[] serverToken;

            SecurityStatus clientStatus;
            SecurityStatus serverStatus;

            try
            {
                clientCred = new ClientCurrentCredential(packageName);
                serverCred = new ServerCurrentCredential(packageName);

                Console.Out.WriteLine(clientCred.PrincipleName);

                client = new ClientContext(
                    clientCred,
                    serverCred.PrincipleName,
                    ContextAttrib.MutualAuth |
                    ContextAttrib.InitIdentify |
                    ContextAttrib.Confidentiality |
                    ContextAttrib.ReplayDetect |
                    ContextAttrib.SequenceDetect |
                    ContextAttrib.Connection |
                    ContextAttrib.Delegate
                    );

                server = new ServerContext(
                    serverCred,
                    ContextAttrib.MutualAuth |
                    ContextAttrib.AcceptIdentify |
                    ContextAttrib.Confidentiality |
                    ContextAttrib.ReplayDetect |
                    ContextAttrib.SequenceDetect |
                    ContextAttrib.Connection |
                    ContextAttrib.Delegate
                    );

                clientToken = null;
                serverToken = null;

                clientStatus = client.Init(serverToken, out clientToken);

                while (true)
                {
                    serverStatus = server.AcceptToken(clientToken, out serverToken);

                    if (serverStatus != SecurityStatus.ContinueNeeded && clientStatus != SecurityStatus.ContinueNeeded)
                    {
                        break;
                    }

                    clientStatus = client.Init(serverToken, out clientToken);

                    if (serverStatus != SecurityStatus.ContinueNeeded && clientStatus != SecurityStatus.ContinueNeeded)
                    {
                        break;
                    }
                }

                Console.Out.WriteLine("Server authority: " + server.AuthorityName);
                Console.Out.WriteLine("Server context user: "******"Client authority: " + client.AuthorityName);
                Console.Out.WriteLine("Client context user: "******"Hello, world. This is a long message that will be encrypted";
                string rtMessage;

                byte[] plainText = new byte[Encoding.UTF8.GetByteCount(message)];
                byte[] cipherText;
                byte[] roundTripPlaintext;

                Encoding.UTF8.GetBytes(message, 0, message.Length, plainText, 0);

                cipherText = client.Encrypt(plainText);

                roundTripPlaintext = server.Decrypt(cipherText);

                if (roundTripPlaintext.Length != plainText.Length)
                {
                    throw new Exception();
                }

                for (int i = 0; i < plainText.Length; i++)
                {
                    if (plainText[i] != roundTripPlaintext[i])
                    {
                        throw new Exception();
                    }
                }

                rtMessage = Encoding.UTF8.GetString(roundTripPlaintext, 0, roundTripPlaintext.Length);

                if (rtMessage.Equals(message) == false)
                {
                    throw new Exception();
                }

                using (server.ImpersonateClient())
                {
                }

                cipherText = client.MakeSignature(plainText);

                bool goodSig = server.VerifySignature(cipherText, out roundTripPlaintext);

                if (goodSig == false ||
                    roundTripPlaintext.Length != plainText.Length)
                {
                    throw new Exception();
                }

                for (int i = 0; i < plainText.Length; i++)
                {
                    if (plainText[i] != roundTripPlaintext[i])
                    {
                        throw new Exception();
                    }
                }

                Console.Out.Flush();
            }
            finally
            {
                if (server != null)
                {
                    server.Dispose();
                }

                if (client != null)
                {
                    client.Dispose();
                }

                if (clientCred != null)
                {
                    clientCred.Dispose();
                }

                if (serverCred != null)
                {
                    serverCred.Dispose();
                }
            }
        }