public void ReverseByteOrderReturnsBytesInReverseOrder(string label, byte[] bytes)
        {
            var expectedResults = bytes.Reverse().ToArray();
            var subject         = MsbLsbConversionHelpers.ReverseByteOrder(bytes);

            for (int i = 0; i < bytes.Length; i++)
            {
                Assert.AreEqual(expectedResults[i], subject[i]);
            }
        }
예제 #2
0
        private static BitString ConvertEndianness(BitString message)
        {
            // For a small example... 60 01 (hex) = 0110 0000 0000 0001 (binary)
            //    should turn into    06 80 (hex) = 0000 0110 1000 0000 (binary

            var messageLen = message.BitLength;

            var reversedBits   = MsbLsbConversionHelpers.ReverseBitArrayBits(message.Bits);
            var normalizedBits = MsbLsbConversionHelpers.ReverseByteOrder(new BitString(reversedBits).ToBytes());

            message = new BitString(normalizedBits);
            var hex = message.ToHex();

            message = new BitString(hex, messageLen, false);

            return(message);
        }
예제 #3
0
        public HashResult Hash(BitString message)
        {
            Md5Init();
            var processResult = Md5Process(message);

            if (!processResult.Success)
            {
                return(processResult);
            }

            var finalResult = Md5Final();

            if (finalResult.Success)
            {
                // Reverse byte order
                var stateA = new BitString(_state[0], 32).ToBytes();
                stateA = MsbLsbConversionHelpers.ReverseByteOrder(stateA);

                var stateB = new BitString(_state[1], 32).ToBytes();
                stateB = MsbLsbConversionHelpers.ReverseByteOrder(stateB);

                var stateC = new BitString(_state[2], 32).ToBytes();
                stateC = MsbLsbConversionHelpers.ReverseByteOrder(stateC);

                var stateD = new BitString(_state[3], 32).ToBytes();
                stateD = MsbLsbConversionHelpers.ReverseByteOrder(stateD);

                // Build result
                var digest = new BitString(stateA)
                             .ConcatenateBits(new BitString(stateB))
                             .ConcatenateBits(new BitString(stateC))
                             .ConcatenateBits(new BitString(stateD));

                return(new HashResult(digest));
            }
            else
            {
                return(finalResult);
            }
        }
예제 #4
0
        private static BitString ConvertEndianness(BitString message)
        {
            // This is kinda gross... The message input is in the correct byte order but reversed bit order
            // So we must reverse the bits, then reverse the bytes to put everything in the correct order
            //
            // For a small example... 60 01 (hex) = 0110 0000 0000 0001 (binary)
            //    should turn into    06 80 (hex) = 0000 0110 1000 0000 (binary

            var messageLen = message.BitLength;

            // Convert to big endian byte order but little endian bit order
            var reversedBits   = MsbLsbConversionHelpers.ReverseBitArrayBits(message.Bits);
            var normalizedBits = MsbLsbConversionHelpers.ReverseByteOrder(new BitString(reversedBits).ToBytes());

            // After the byte conversion make sure the result is the correct length
            // The constructor here handles this for us
            message = new BitString(normalizedBits);
            var hex = message.ToHex();

            message = new BitString(hex, messageLen, false);

            return(message);
        }
예제 #5
0
 public BitString RevB(BitString x)
 {
     // 1. For i from 0 to BYTELEN(X)–1 and j from 1 to 8, let Y[8i+j] = X[8×(BYTELEN(X)–1–i)+j].
     // 2. Return Y[1..8×BYTELEN(X)].
     return(new BitString(MsbLsbConversionHelpers.ReverseByteOrder(x.ToBytes())));
 }
예제 #6
0
 public static BitString ReverseByteOrder(BitString input)
 {
     return(new BitString(MsbLsbConversionHelpers.ReverseByteOrder(input.ToBytes())));
 }
예제 #7
0
 private BitString LittleEndianify(BitString x)
 {
     return(new BitString(MsbLsbConversionHelpers.ReverseByteOrder(x.ToBytes())));
 }