[Mono-dev] Endian Question

Neale Ferguson neale at sinenomine.net
Tue Apr 28 18:40:47 UTC 2015

The following test fails on s390x as the string that is encoded from the
decrypted block ends is in little endian order:

                public void FullRoundtripRead ()
                        byte[] encrypted;
                        using (DebugStream mem1 = new DebugStream ()) {
                                byte[] toEncrypt =
Encoding.Unicode.GetBytes ("Please encode me!");
                                using (CryptoStream crypt = new
CryptoStream (mem1, aes.CreateEncryptor (), CryptoStreamMode.Write)) {
                                        crypt.Write (toEncrypt, 0,
                                        crypt.FlushFinalBlock ();
                                encrypted = mem1.ToArray ();

                        using (DebugStream mem2 = new DebugStream
(encrypted)) {
                                byte[] buffer = new byte [1024];
                                CryptoStream cr = new CryptoStream (mem2,
aes.CreateDecryptor (), CryptoStreamMode.Read);
                                int len = cr.Read (buffer, 0,
                                cr.Close ();
                                Assert.AreEqual (34, len, "Full Length
                                Assert.AreEqual ("Please encode me!",
Encoding.Unicode.GetString (buffer, 0, len), "Full Block Read");

The question is at what point should byte swapping be performed? Should
all Encoding.Unicode.GetBytes(string) do the swap to little ending and
Encoding.Unicode.GetString(bytes) do the reverse?


More information about the Mono-devel-list mailing list