Пример #1
0
        public ServerForm()
        {
            InitializeComponent();

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

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

            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;
        }
Пример #2
0
        private static void CredTest( string packageName )
        {
            ClientCredential clientCred = null;
            ClientContext client = null;

            ServerCredential serverCred = null;
            ServerContext server = null;

            byte[] clientToken;
            byte[] serverToken;

            SecurityStatus clientStatus;
            SecurityStatus serverStatus;

            try
            {
                clientCred = new ClientCredential( packageName );
                serverCred = new ServerCredential( 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();
                }
            }
        }