Skip to content

Commit ee0f67d

Browse files
authored
Merge pull request #100 from rust-random/clean-up-rng-list
Clean up RNG comparison table
2 parents 20540a1 + f32c871 commit ee0f67d

1 file changed

Lines changed: 11 additions & 7 deletions

File tree

src/guide-rngs.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ You may wish to refer to the [pcg-random] and [xoshiro] websites.
3939

4040
| name | full name | performance | memory | quality | period | features |
4141
|------|-----------|-------------|--------|---------|--------|----------|
42-
| [`SmallRng`] | (unspecified) | 11 GB/s | 16 bytes | ★★★☆☆ |`u32` * 2<sup>64</sup> | not portable |
43-
| [`Pcg32`] | PCG XSH RR 64/32 (LCG) | 5 GB/s | 16 bytes | ★★★☆☆ | `u32` * 2<sup>64</sup> | |
44-
| [`Pcg64`] | PCG XSL 128/64 (LCG) | 7 GB/s | 32 bytes | ★★★☆☆ | `u64` * 2<sup>128</sup> | |
45-
| [`Pcg64Mcg`] | PCG XSL 128/64 (MCG) | 8 GB/s | 16 bytes | ★★★☆☆ | `u64` * 2<sup>126</sup> | |
42+
| [`SmallRng`] | (unspecified) | fast | small | ★★★☆☆ |`u32` * 2<sup>64</sup> | not portable |
43+
| [`Pcg32`] | PCG XSH RR 64/32 (LCG) | 5 GB/s | 16 bytes | ★★★☆☆ | `u32` * 2<sup>64</sup> | jump-ahead |
44+
| [`Pcg64`] | PCG XSL 128/64 (LCG) | 7 GB/s | 32 bytes | ★★★☆☆ | `u64` * 2<sup>128</sup> | jump-ahead |
45+
| [`Pcg64Mcg`] | PCG XSL 128/64 (MCG) | 8 GB/s | 16 bytes | ★★★☆☆ | `u64` * 2<sup>126</sup> | jump-ahead |
4646
| [`XorShiftRng`] | Xorshift 32/128 | 7 GB/s | 16 bytes | ★☆☆☆☆ | `u32` * 2<sup>128</sup> - 1 ||
4747
| [`Xoshiro256PlusPlus`] | Xoshiro256++ | 11 GB/s | 32 bytes | ★★★☆☆ | `u64` * 2<sup>256</sup> - 1 | jump-ahead |
4848
| [`Xoshiro256Plus`] | Xoshiro256+ | 13 GB/s | 32 bytes | ★★☆☆☆ | `u64` * 2<sup>256</sup> - 1 | jump-ahead |
@@ -79,13 +79,16 @@ table since CSPRNGs may not have observable defects.
7979

8080
| name | full name | performance | initialization | memory | security (predictability) | forward secrecy |
8181
|------|-----------|--------------|--------------|----------|----------------|-------------------------|
82-
| [`StdRng`] | (unspecified) | 4.1 GB/s | fast | 136 bytes | widely trusted | no |
83-
| [`ChaCha20Rng`] | ChaCha20 | 2.6 GB/s | fast | 136 bytes | [rigorously analysed](https://tools.ietf.org/html/rfc7539#section-1) | no |
84-
| [`ChaCha8Rng`] | ChaCha8 | 5.8 GB/s | fast | 136 bytes | small security margin | no |
82+
| [`StdRng`] | (unspecified) | fast | fast | (unspecified) | widely trusted | no |
83+
| [`ChaCha20Rng`] | ChaCha20 | 2.6 GB/s | fast | 320 bytes[^size] | [rigorously analysed](https://tools.ietf.org/html/rfc7539#section-1) | no |
84+
| [`ChaCha12Rng`] | ChaCha12 | 4.1 GB/s | fast | 320 bytes[^size] | [large security margin](https://eprint.iacr.org/2019/1492) | no |
85+
| [`ChaCha8Rng`] | ChaCha8 | 5.8 GB/s | fast | 320 bytes[^size] | [sufficient security margin](https://eprint.iacr.org/2019/1492) | no |
8586
| [`Hc128Rng`] | HC-128 | 4.6 GB/s | slow | 4176 bytes | [recommended by eSTREAM](http://www.ecrypt.eu.org/stream/) | no |
8687
| [`IsaacRng`] | ISAAC | 2.1 GB/s | slow | 2072 bytes | [unknown](https://burtleburtle.net/bob/rand/isaacafa.html) | unknown |
8788
| [`Isaac64Rng`] | ISAAC-64 | 3.7 GB/s | slow | 4136 bytes| unknown | unknown |
8889

90+
[^size]: The size is an implementation detail, and may change.
91+
8992
It should be noted that the ISAAC generators are only included for
9093
historical reasons: they have been with the Rust language since the very
9194
beginning. They have good quality output and no attacks are known, but have
@@ -322,6 +325,7 @@ by P. Hellekalek.
322325
[`Xoshiro256Plus`]: https://docs.rs/rand_xoshiro/latest/rand_xoshiro/struct.Xoshiro256Plus.html
323326
[`SplitMix64`]: https://docs.rs/rand_xoshiro/latest/rand_xoshiro/struct.SplitMix64.html
324327
[`ChaCha20Rng`]: https://docs.rs/chacha20/latest/chacha20/struct.ChaCha20Rng.html
328+
[`ChaCha12Rng`]: https://docs.rs/chacha20/latest/chacha20/struct.ChaCha12Rng.html
325329
[`ChaCha8Rng`]: https://docs.rs/chacha20/latest/chacha20/struct.ChaCha8Rng.html
326330
[`Hc128Rng`]: https://docs.rs/rand_hc/latest/rand_hc/struct.Hc128Rng.html
327331
[`IsaacRng`]: https://docs.rs/rand_isaac/latest/rand_isaac/isaac/struct.IsaacRng.html

0 commit comments

Comments
 (0)