#random #generator #numbers #bits #register #extracted #3-shift

无需std shr3

SHR3 - 3位移位寄存器随机数生成器

2个版本 (1个稳定版)

1.0.0 2022年8月4日
0.1.0 2022年5月28日

#1972算法

MIT/Apache

34KB
565

SHR3: 3位移位寄存器随机数生成器

https://bues.ch/

Git仓库

SHR3生成器可以用来生成非加密随机位,计算量非常小。

它适用于运行在非常小且受限的硬件上(例如小的8位微控制器)。SHR3函数在提取每个随机位时评估一次。将SHR3状态的最低位提取为输出。

生成器的周期约为4_000_000_000位。不要用它提取大量随机位(超过几百MiB),除非您能容忍随机流回起点。它将在2**32 - 1次迭代后回环到起点。

此生成器不是密码学安全的!不要将其用于加密应用。

示例用法

use shr3::prelude::*;

let mut shr3 = Shr3::new();                 // SHR3 with default seed (1).
let x: u8 = shr3.get();                     // Extract 8 bits from shr3.
let y: u16 = shr3.get_bits(10);             // Extract 10 bits from shr3 and store in lower bits of y.
assert_eq!(x, 0xF8);                        // Extracted random value.
assert_eq!(y, 0x2CC);                       // Extracted random value.

let mut shr3 = Shr3::new_state(42);         // SHR3 with custom seed (42).

let mut shr3: Shr3 = Default::default();    // Alternative to Shr::new().

示例Cargo.toml依赖项

将此内容添加到您的Cargo.toml

[dependencies]
shr3 = "1"

no_std

此crate不需要Rust std库。它不链接到std。

优化实现

此crate包括AVR 8位的优化实现。

所有其他架构使用通用实现。在大多数架构上,此通用实现将被编译为相当高效的代码。

许可证

版权(c)2022 Michael Buesch [email protected]

根据您的选择,许可在Apache License版本2.0或MIT许可证下。

无运行时依赖项