Michael Buesch 77f6a13e19 Add support for signed integers | 2 anni fa | |
---|---|---|
examples | 2 anni fa | |
maintenance | 2 anni fa | |
src | 2 anni fa | |
.gitignore | 2 anni fa | |
Cargo.toml | 2 anni fa | |
LICENSE-APACHE | 2 anni fa | |
LICENSE-MIT | 2 anni fa | |
README.md | 2 anni fa | |
build.rs | 2 anni fa |
The SHR3 generator can be used to generate non-crypto random bits with only very few computations.
It is suitable for running on very small and restricted hardware (e.g. small 8 bit microcontrollers). The SHR3 function is evaluated once per extracted random bit. The LSB of the SHR3 state is extracted as output.
The generator has a cycle of approximately 4_000_000_000
bits.
Do not use it to extract large amounts of random bits (more than a hundred MiB or so),
unless you can tolerate looping back to the beginning of the random stream.
It will loop back to the beginning after 2**32 - 1
iterations.
This generator is not cryptographically secure! Do not use it for cryptographic applications.
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().
Add this to your Cargo.toml:
[dependencies]
shr3 = "0.1"
This crate does not require the Rust std library. It does not link to std.
This crate includes an optimized implementation for AVR 8-bit.
All other architectures use the generic implementation. On most architectures, this generic implementation will be compiled to rather efficient code.
Copyright (c) 2022 Michael Buesch m@bues.ch
Licensed under the Apache License version 2.0 or the MIT license, at your option.