private static void SymmetricEncrypt(
TcpChannelToken token,
ArraySegment<byte> dataToEncrypt,
bool useClientKeys)
{
SymmetricAlgorithm encryptingKey = (useClientKeys)?token.ClientEncryptor:token.ServerEncryptor;
if (encryptingKey == null)
{
throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "Token missing symmetric key object.");
}
using (ICryptoTransform encryptor = encryptingKey.CreateEncryptor())
{
byte[] blockToEncrypt = dataToEncrypt.Array;
int start = dataToEncrypt.Offset;
int count = dataToEncrypt.Count;
if (count % encryptor.InputBlockSize != 0)
{
throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "Input data is not an even number of encryption blocks.");
}
encryptor.TransformBlock(blockToEncrypt, start, count, blockToEncrypt, start);
}
}