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]); } }
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); }
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); } }
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); }
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()))); }
public static BitString ReverseByteOrder(BitString input) { return(new BitString(MsbLsbConversionHelpers.ReverseByteOrder(input.ToBytes()))); }
private BitString LittleEndianify(BitString x) { return(new BitString(MsbLsbConversionHelpers.ReverseByteOrder(x.ToBytes()))); }