public void RowRoundCorrect2() { uint[] s = { 0x08521bd6, 0x1fe88837, 0xbb2aa576, 0x3aa26365, 0xc54c6a5b, 0x2fc74c2f, 0x6dd39cc3, 0xda0a64f6, 0x90a2f23d, 0x067f95a6, 0x06b35f61, 0x41e4732e, 0xe859c100, 0xea4d84b7, 0x0f619bff, 0xbc6e965a }; Salsa20Transformation.RowRound(s); Assert.Equal(s[0], (uint)0xa890d39d); Assert.Equal(s[1], (uint)0x65d71596); Assert.Equal(s[2], (uint)0xe9487daa); Assert.Equal(s[3], (uint)0xc8ca6a86); Assert.Equal(s[4], (uint)0x949d2192); Assert.Equal(s[5], (uint)0x764b7754); Assert.Equal(s[6], (uint)0xe408d9b9); Assert.Equal(s[7], (uint)0x7a41b4d1); Assert.Equal(s[8], (uint)0x3402e183); Assert.Equal(s[9], (uint)0x3c3af432); Assert.Equal(s[10], (uint)0x50669f96); Assert.Equal(s[11], (uint)0xd89ef0a8); Assert.Equal(s[12], (uint)0x0040ede5); Assert.Equal(s[13], (uint)0xb545fbce); Assert.Equal(s[14], (uint)0xd257ed4f); Assert.Equal(s[15], (uint)0x1818882d); }
public void LeftRotate() { uint expected = 0x150f0fd8; uint actual = Salsa20Transformation.RotateLeft(0xc0a8787e, 5); Assert.Equal(expected, actual); }
public void DoubleRoundCorrect2() { uint[] s = { 0xde501066, 0x6f9eb8f7, 0xe4fbbd9b, 0x454e3f57, 0xb75540d3, 0x43e93a4c, 0x3a6f2aa0, 0x726d6b36, 0x9243f484, 0x9145d1e8, 0x4fa9d247, 0xdc8dee11, 0x054bf545, 0x254dd653, 0xd9421b6d, 0x67b276c1 }; Salsa20Transformation.DoubleRound(s); Assert.Equal(s[0], (uint)0xccaaf672); Assert.Equal(s[1], (uint)0x23d960f7); Assert.Equal(s[2], (uint)0x9153e63a); Assert.Equal(s[3], (uint)0xcd9a60d0); Assert.Equal(s[4], (uint)0x50440492); Assert.Equal(s[5], (uint)0xf07cad19); Assert.Equal(s[6], (uint)0xae344aa0); Assert.Equal(s[7], (uint)0xdf4cfdfc); Assert.Equal(s[8], (uint)0xca531c29); Assert.Equal(s[9], (uint)0x8e7943db); Assert.Equal(s[10], (uint)0xac1680cd); Assert.Equal(s[11], (uint)0xd503ca00); Assert.Equal(s[12], (uint)0xa74b2ad6); Assert.Equal(s[13], (uint)0xbc331c5c); Assert.Equal(s[14], (uint)0x1dda24c7); Assert.Equal(s[15], (uint)0xee928277); }
public void RowRoundCorrect() { uint[] s = { 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000 }; Salsa20Transformation.RowRound(s); Assert.Equal(s[0], (uint)0x08008145); Assert.Equal(s[1], (uint)0x00000080); Assert.Equal(s[2], (uint)0x00010200); Assert.Equal(s[3], (uint)0x20500000); Assert.Equal(s[4], (uint)0x20100001); Assert.Equal(s[5], (uint)0x00048044); Assert.Equal(s[6], (uint)0x00000080); Assert.Equal(s[7], (uint)0x00010000); Assert.Equal(s[8], (uint)0x00000001); Assert.Equal(s[9], (uint)0x00002000); Assert.Equal(s[10], (uint)0x80040000); Assert.Equal(s[11], (uint)0x00000000); Assert.Equal(s[12], (uint)0x00000001); Assert.Equal(s[13], (uint)0x00000200); Assert.Equal(s[14], (uint)0x00402000); Assert.Equal(s[15], (uint)0x88000100); }
public void DoubleRoundCorrect() { uint[] s = { 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }; Salsa20Transformation.DoubleRound(s); Assert.Equal(s[0], (uint)0x8186a22d); Assert.Equal(s[1], (uint)0x0040a284); Assert.Equal(s[2], (uint)0x82479210); Assert.Equal(s[3], (uint)0x06929051); Assert.Equal(s[4], (uint)0x08000090); Assert.Equal(s[5], (uint)0x02402200); Assert.Equal(s[6], (uint)0x00004000); Assert.Equal(s[7], (uint)0x00800000); Assert.Equal(s[8], (uint)0x00010200); Assert.Equal(s[9], (uint)0x20400000); Assert.Equal(s[10], (uint)0x08008104); Assert.Equal(s[11], (uint)0x00000000); Assert.Equal(s[12], (uint)0x20500000); Assert.Equal(s[13], (uint)0xa0000040); Assert.Equal(s[14], (uint)0x0008180a); Assert.Equal(s[15], (uint)0x612a8020); }
public void ColumnRoundCorrect2() { uint[] s = { 0x08521bd6, 0x1fe88837, 0xbb2aa576, 0x3aa26365, 0xc54c6a5b, 0x2fc74c2f, 0x6dd39cc3, 0xda0a64f6, 0x90a2f23d, 0x067f95a6, 0x06b35f61, 0x41e4732e, 0xe859c100, 0xea4d84b7, 0x0f619bff, 0xbc6e965a }; Salsa20Transformation.ColumnRound(s); Assert.Equal(s[0], (uint)0x8c9d190a); Assert.Equal(s[1], (uint)0xce8e4c90); Assert.Equal(s[2], (uint)0x1ef8e9d3); Assert.Equal(s[3], (uint)0x1326a71a); Assert.Equal(s[4], (uint)0x90a20123); Assert.Equal(s[5], (uint)0xead3c4f3); Assert.Equal(s[6], (uint)0x63a091a0); Assert.Equal(s[7], (uint)0xf0708d69); Assert.Equal(s[8], (uint)0x789b010c); Assert.Equal(s[9], (uint)0xd195a681); Assert.Equal(s[10], (uint)0xeb7d5504); Assert.Equal(s[11], (uint)0xa774135c); Assert.Equal(s[12], (uint)0x481c2027); Assert.Equal(s[13], (uint)0x53a8e4b5); Assert.Equal(s[14], (uint)0x4c1f89c5); Assert.Equal(s[15], (uint)0x3f78c9c8); }
public void ColumnRoundCorrect() { uint[] s = { 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000 }; Salsa20Transformation.ColumnRound(s); Assert.Equal(s[0], (uint)0x10090288); Assert.Equal(s[1], (uint)0x00000000); Assert.Equal(s[2], (uint)0x00000000); Assert.Equal(s[3], (uint)0x00000000); Assert.Equal(s[4], (uint)0x00000101); Assert.Equal(s[5], (uint)0x00000000); Assert.Equal(s[6], (uint)0x00000000); Assert.Equal(s[7], (uint)0x00000000); Assert.Equal(s[8], (uint)0x00020401); Assert.Equal(s[9], (uint)0x00000000); Assert.Equal(s[10], (uint)0x00000000); Assert.Equal(s[11], (uint)0x00000000); Assert.Equal(s[12], (uint)0x40a04001); Assert.Equal(s[13], (uint)0x00000000); Assert.Equal(s[14], (uint)0x00000000); Assert.Equal(s[15], (uint)0x00000000); }
public void LittleEndianCorrect() { byte[] arr = { 86, 75, 30, 9 }; uint expected = 0x091e4b56; uint actual = Salsa20Transformation.LittleEndian(arr, 0); Assert.Equal(expected, actual); }
public void QuaterRoundCorrect2() { uint[] s = { 0x00000000, 0x00000001, 0x00000000, 0x00000000 }; (s[0], s[1], s[2], s[3]) = Salsa20Transformation.QuarterRound(s[0], s[1], s[2], s[3]); Assert.Equal(s[0], (uint)0x88000100); Assert.Equal(s[1], (uint)0x00000001); Assert.Equal(s[2], (uint)0x00000200); Assert.Equal(s[3], (uint)0x00402000); }
public void RevLittleEndianCorrect() { byte[] arr = new byte[4]; uint input = 0x091e4b56; Salsa20Transformation.RevLittleEndian(input, arr, 0); Assert.Equal(arr[0], (byte)86); Assert.Equal(arr[1], (byte)75); Assert.Equal(arr[2], (byte)30); Assert.Equal(arr[3], (byte)9); }
public void SalsaBlockCorrectZeros() { uint[] input = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; byte[] expected = new byte[input.Length * 4]; expected.Initialize(); byte[] actual = new byte[expected.Length]; Salsa20Transformation.SalsaBlock(actual, input, 20); Assert.Equal(expected, actual); }
public void InitialState32() { byte[] k = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 }; byte[] n = { 3, 1, 4, 1, 5, 9, 2, 6 }; uint[] expected = { 0x61707865, 0x04030201, 0x08070605, 0x0c0b0a09, 0x100f0e0d, 0x3320646e, 0x01040103, 0x06020905, 0x00000000, 0x00000000, 0x79622d32, 0x14131211, 0x18171615, 0x1c1b1a19, 0x201f1e1d, 0x6b206574 }; uint[] actual = Salsa20Transformation.CreateInitialState(k, n); Assert.Equal(expected, actual); }
public void SalsaBlockCorrect() { uint[] input = { Salsa20Transformation.LittleEndian(new byte[] { 211, 159, 13, 115 }, 0), Salsa20Transformation.LittleEndian(new byte[] { 76, 55, 82, 183 }, 0), Salsa20Transformation.LittleEndian(new byte[] { 3, 117, 222, 37, }, 0), Salsa20Transformation.LittleEndian(new byte[] { 191, 187, 234,136, }, 0), Salsa20Transformation.LittleEndian(new byte[] { 49, 237, 179, 48, }, 0), Salsa20Transformation.LittleEndian(new byte[] { 1, 106, 178,219, }, 0), Salsa20Transformation.LittleEndian(new byte[] { 175, 199, 166, 48, }, 0), Salsa20Transformation.LittleEndian(new byte[] { 86, 16, 179,207, }, 0), Salsa20Transformation.LittleEndian(new byte[] { 31, 240, 32, 63, }, 0), Salsa20Transformation.LittleEndian(new byte[] { 15, 83, 93,161, }, 0), Salsa20Transformation.LittleEndian(new byte[] { 116, 147, 48,113, }, 0), Salsa20Transformation.LittleEndian(new byte[] { 238, 55, 204, 36, }, 0), Salsa20Transformation.LittleEndian(new byte[] { 79, 201, 235, 79, }, 0), Salsa20Transformation.LittleEndian(new byte[] { 3, 81, 156, 47, }, 0), Salsa20Transformation.LittleEndian(new byte[] { 203, 26, 244,243, }, 0), Salsa20Transformation.LittleEndian(new byte[] { 88, 118, 104, 54 }, 0) }; byte[] h = { 211, 159, 13, 115, 76, 55, 82, 183, 3, 117, 222, 37, 191, 187, 234, 136, 49, 237, 179, 48, 1, 106, 178, 219, 175, 199, 166, 48, 86, 16, 179, 207, 31, 240, 32, 63, 15, 83, 93, 161, 116, 147, 48, 113, 238, 55, 204, 36, 79, 201, 235, 79, 3, 81, 156, 47, 203, 26, 244, 243, 88, 118, 104, 54 }; Assert.Equal(h.Take(4).ToArray(), BitConverter.GetBytes(input[0])); byte[] expected = { 109, 42, 178, 168, 156, 240, 248, 238, 168, 196, 190, 203, 26, 110, 170, 154, 29, 29, 150, 26, 150, 30, 235, 249, 190, 163, 251, 48, 69, 144, 51, 57, 118, 40, 152, 157, 180, 57, 27, 94, 107, 42, 236, 35, 27, 111, 114, 114, 219, 236, 232, 135, 111, 155, 110, 18, 24, 232, 95, 158, 179, 19, 48, 202 }; byte[] actual = new byte[expected.Length]; Salsa20Transformation.SalsaBlock(actual, input, 20); Assert.Equal(expected, actual); }