public void Dispose() { if (m_Client != null) { m_Client.Dispose(); } if (m_ClientCred != null) { m_ClientCred.Dispose(); } }
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(); } } }