private static byte[] CounterToBytes(long counter)
{
Contract.Requires<ArgumentOutOfRangeException>(counter >= 0);
Contract.Ensures(Contract.Result<byte[]>() != null);
var result = new List<byte>();
while (counter != 0)
{
result.Add((byte) (counter & 0xFF));
counter >>= 8;
}
for (int i = 0, j = 8 - result.Count; i < j; i++)
{
result.Add(0);
}
result.Reverse();
return result.ToArray();
}