本文整理汇总了C#中System.IO.Stream.WriteWithLength方法的典型用法代码示例。如果您正苦于以下问题:C# Stream.WriteWithLength方法的具体用法?C# Stream.WriteWithLength怎么用?C# Stream.WriteWithLength使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.IO.Stream
的用法示例。
在下文中一共展示了Stream.WriteWithLength方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: AuthenticateAsServer
/// <summary>
/// Requests that the provided stream be authenticated
/// </summary>
/// <param name="stream"></param>
/// <param name="additionalChallenge">Additional data to include in the challenge. If using SSL certificates,
/// adding the thumbprint to the challenge will allow detecting man in the middle attacks.</param>
/// <returns></returns>
public ScramServerSession AuthenticateAsServer(Stream stream, byte[] additionalChallenge = null)
{
if (additionalChallenge == null)
additionalChallenge = new byte[] { };
byte[] usernameBytes = stream.ReadBytes();
byte[] clientNonce = stream.ReadBytes();
ScramUserCredential user;
if (!Users.TryLookup(usernameBytes, out user))
return null;
byte[] serverNonce = m_nonce.Next();
stream.WriteByte((byte)user.HashMethod);
stream.WriteWithLength(serverNonce);
stream.WriteWithLength(user.Salt);
stream.Write(user.Iterations);
stream.Flush();
byte[] authMessage = Scram.ComputeAuthMessage(serverNonce, clientNonce, user.Salt, usernameBytes, user.Iterations, additionalChallenge);
byte[] clientSignature = user.ComputeClientSignature(authMessage);
byte[] serverSignature = user.ComputeServerSignature(authMessage);
byte[] clientProof = stream.ReadBytes();
byte[] clientKeyVerify = Scram.XOR(clientProof, clientSignature);
byte[] storedKeyVerify = user.ComputeStoredKey(clientKeyVerify);
if (storedKeyVerify.SecureEquals(user.StoredKey))
{
//Client holds the password
//Send ServerSignature
stream.WriteWithLength(serverSignature);
stream.Flush();
return new ScramServerSession(user.UserName);
}
return null;
}
示例2: AuthenticateAsClient
public bool AuthenticateAsClient(Stream stream, byte[] additionalChallenge = null)
{
if (additionalChallenge == null)
additionalChallenge = new byte[] { };
byte[] clientNonce = m_nonce.Next();
stream.WriteWithLength(m_usernameBytes);
stream.WriteWithLength(clientNonce);
stream.Flush();
HashMethod hashMethod = (HashMethod)stream.ReadByte();
byte[] serverNonce = stream.ReadBytes();
byte[] salt = stream.ReadBytes();
int iterations = stream.ReadInt32();
SetServerValues(hashMethod, salt, iterations);
byte[] authMessage = Scram.ComputeAuthMessage(serverNonce, clientNonce, salt, m_usernameBytes, iterations, additionalChallenge);
byte[] clientSignature = ComputeClientSignature(authMessage);
byte[] clientProof = Scram.XOR(m_clientKey, clientSignature);
stream.WriteWithLength(clientProof);
stream.Flush();
byte[] serverSignature = ComputeServerSignature(authMessage);
byte[] serverSignatureVerify = stream.ReadBytes();
return (serverSignature.SecureEquals(serverSignatureVerify));
}