internal SecurityStatusPal Encrypt(byte[] buffer, int offset, int size, ref byte[] output, out int resultSize)
{
if (NetEventSource.IsEnabled)
{
NetEventSource.Enter(this, buffer, offset, size);
NetEventSource.DumpBuffer(this, buffer, 0, Math.Min(buffer.Length, 128));
}
byte[] writeBuffer = output;
try
{
if (offset < 0 || offset > (buffer == null ? 0 : buffer.Length))
{
throw new ArgumentOutOfRangeException(nameof(offset));
}
if (size < 0 || size > (buffer == null ? 0 : buffer.Length - offset))
{
throw new ArgumentOutOfRangeException(nameof(size));
}
resultSize = 0;
}
catch (Exception e) when (!ExceptionCheck.IsFatal(e))
{
NetEventSource.Fail(this, "Arguments out of range.");
throw;
}
SecurityStatusPal secStatus = SslStreamPal.EncryptMessage(
_securityContext,
buffer,
offset,
size,
_headerSize,
_trailerSize,
ref writeBuffer,
out resultSize);
if (secStatus.ErrorCode != SecurityStatusPalErrorCode.OK)
{
if (NetEventSource.IsEnabled) NetEventSource.Exit(this, $"ERROR {secStatus}");
}
else
{
output = writeBuffer;
if (NetEventSource.IsEnabled) NetEventSource.Exit(this, $"OK data size:{resultSize}");
}
return secStatus;
}