Ingen beskrivning

Michael Buesch 8f4bf2a632 readme: Fix dependency example 2 år sedan
examples eefd55f4c0 Add example 2 år sedan
maintenance 2ecc452195 Bump version 2 år sedan
src 55c23b597f Hide Shr3Ops from prelude 2 år sedan
.gitignore 412181aef0 Initial commit 2 år sedan
Cargo.toml 2ecc452195 Bump version 2 år sedan
LICENSE-APACHE 1a4705bf8e Add a copy of the licenses 2 år sedan
LICENSE-MIT 1a4705bf8e Add a copy of the licenses 2 år sedan
README.md 8f4bf2a632 readme: Fix dependency example 2 år sedan
build.rs 412181aef0 Initial commit 2 år sedan

README.md

SHR3: 3-shift register random number generator

https://bues.ch/

Git repository

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.

Example usage:

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().

Example Cargo.toml dependencies

Add this to your Cargo.toml:

[dependencies]
shr3 = "1"

no_std

This crate does not require the Rust std library. It does not link to std.

Optimized implementation

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.

License

Copyright (c) 2022 Michael Buesch m@bues.ch

Licensed under the Apache License version 2.0 or the MIT license, at your option.