Skip to content

Commit 75c06da

Browse files
committed
Add StdRng test setting the counter
1 parent 37d5ad2 commit 75c06da

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

src/rngs/std.rs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,4 +348,53 @@ mod test {
348348

349349
assert_eq!(rng.0.get_word_pos(), 32);
350350
}
351+
352+
#[test]
353+
fn test_chacha_counter() {
354+
// Source: none
355+
// Test: all zero key and IV, block set to u32::MAX, rounds 12, 256-bit key
356+
357+
let seed = [0u8; 32];
358+
let mut rng = StdRng::from_seed(seed);
359+
let block = u32::MAX;
360+
let words_per_block = 16;
361+
rng.0.set_word_pos((block as u128) * words_per_block);
362+
363+
let mut expected = [0u32; 12];
364+
// Note: four blocks get generated by set_word_pos
365+
expected[8] = block.wrapping_add(4);
366+
expected[9] = 1;
367+
assert_eq!(rng_state(&rng), &expected);
368+
369+
let mut results = [0u8; 64];
370+
rng.fill_bytes(&mut results);
371+
#[rustfmt::skip]
372+
let expected = [
373+
0xd7, 0xa6, 0xaf, 0x50, 0xf1, 0xc9, 0x2a, 0x29,
374+
0x48, 0x42, 0x52, 0xbb, 0xfc, 0xe2, 0x06, 0xf1,
375+
0x7d, 0x01, 0xdd, 0x13, 0x95, 0x30, 0xa3, 0x83,
376+
0x0a, 0xb5, 0x83, 0xc1, 0xf6, 0x2e, 0x03, 0x12,
377+
0x82, 0x93, 0x61, 0xa1, 0x9a, 0x8a, 0x95, 0x6c,
378+
0xed, 0xea, 0x38, 0x04, 0x30, 0xff, 0x93, 0x2c,
379+
0xd0, 0x52, 0xdb, 0x5e, 0x94, 0x77, 0x83, 0x50,
380+
0x58, 0xb8, 0x0a, 0x27, 0x24, 0x06, 0xfc, 0x74,
381+
];
382+
assert_eq!(results, expected);
383+
384+
rng.fill_bytes(&mut results);
385+
#[rustfmt::skip]
386+
let expected = [
387+
0xcc, 0x7b, 0x53, 0xdc, 0x11, 0x89, 0x4d, 0x26,
388+
0x24, 0x05, 0x81, 0xb8, 0xa8, 0xf4, 0xf4, 0xe5,
389+
0xaf, 0x40, 0x67, 0x05, 0x80, 0x12, 0x23, 0xb1,
390+
0x3f, 0x82, 0x1f, 0xdc, 0xcb, 0xa6, 0xa6, 0x18,
391+
0x8a, 0x63, 0xf8, 0xd3, 0xdc, 0x83, 0xcc, 0xbc,
392+
0xed, 0x45, 0x1f, 0x4b, 0xa4, 0xe0, 0xda, 0xab,
393+
0x22, 0x8a, 0xbb, 0x0d, 0x74, 0x39, 0xcc, 0x67,
394+
0xe5, 0x0d, 0xf7, 0x12, 0x9f, 0x64, 0x6b, 0xad,
395+
];
396+
assert_eq!(results, expected);
397+
398+
assert_eq!(rng.0.get_word_pos(), (block as u128) * words_per_block + 32);
399+
}
351400
}

0 commit comments

Comments
 (0)