public void HChaCha20StateTestVector() { // https://tools.ietf.org/html/draft-irtf-cfrg-xchacha-03#section-2.2.1 // Arrange var key = CryptoBytes.FromHexString("00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f:10:11:12:13:14:15:16:17:18:19:1a:1b:1c:1d:1e:1f".Replace(":", string.Empty)); var nonce = CryptoBytes.FromHexString("00:00:00:09:00:00:00:4a:00:00:00:00:31:41:59:27".Replace(":", string.Empty)); var cipher = new XChaCha20(key, 0); // Act var initialState = new uint[16]; cipher.HChaCha20InitialState(initialState, nonce); // Assert var expectedInitialState = new uint[] { 0x61707865, 0x3320646e, 0x79622d32, 0x6b206574, 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c, 0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c, 0x09000000, 0x4a000000, 0x00000000, 0x27594131 }; initialState.Should().BeEquivalentTo(expectedInitialState); }