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; }
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(); } } }