summaryrefslogtreecommitdiff
path: root/vendor/getrandom/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/getrandom/README.md')
-rw-r--r--vendor/getrandom/README.md390
1 files changed, 0 insertions, 390 deletions
diff --git a/vendor/getrandom/README.md b/vendor/getrandom/README.md
deleted file mode 100644
index b0e17d47..00000000
--- a/vendor/getrandom/README.md
+++ /dev/null
@@ -1,390 +0,0 @@
-# getrandom: system's random number generator
-
-[![Build Status]][GitHub Actions]
-[![Crate]][crates.io]
-[![Documentation]][docs.rs]
-[![Dependency Status]][deps.rs]
-[![Downloads]][crates.io]
-[![License]][LICENSE-MIT]
-
-`getrandom` is a Rust library for retrieving random data from (operating) system sources.
-
-It is assumed that the system always provides high-quality, cryptographically secure random
-data, ideally backed by hardware entropy sources. This crate derives its name from
-the Linux `getrandom` syscall but is cross-platform, roughly supporting the same set
-of platforms as Rust's `std` library.
-
-This is a low-level API. Most users should prefer using a higher-level random-number
-library like [`rand`].
-
-[`rand`]: https://crates.io/crates/rand
-
-## Usage
-
-Add the `getrandom` dependency to your `Cargo.toml` file:
-
-```toml
-[dependencies]
-getrandom = "0.3"
-```
-
-Then invoke the `fill` function on a byte buffer to fill it with random data:
-
-```rust
-fn get_random_u128() -> Result<u128, getrandom::Error> {
- let mut buf = [0u8; 16];
- getrandom::fill(&mut buf)?;
- Ok(u128::from_ne_bytes(buf))
-}
-```
-
-## Supported targets
-
-| Target | Target Triple | Implementation
-| ------------------ | ------------------ | --------------
-| Linux, Android | `*‑linux‑*` | [`getrandom`][1] system call if available, otherwise [`/dev/urandom`][2] after successfully polling `/dev/random`
-| Windows 10+ | `*‑windows‑*` | [`ProcessPrng`] on Rust 1.78+, [`RtlGenRandom`] otherwise
-| Windows 7, 8 | `*-win7‑windows‑*` | [`RtlGenRandom`]
-| macOS | `*‑apple‑darwin` | [`getentropy`][3]
-| iOS, tvOS, watchOS | `*‑apple‑{ios,tvos,watchos}` | [`CCRandomGenerateBytes`]
-| FreeBSD | `*‑freebsd` | [`getrandom`][5]
-| OpenBSD | `*‑openbsd` | [`getentropy`][7]
-| NetBSD | `*‑netbsd` | [`getrandom`][16] if available, otherwise [`kern.arandom`][8]
-| Dragonfly BSD | `*‑dragonfly` | [`getrandom`][9]
-| Solaris | `*‑solaris` | [`getrandom`][11] with `GRND_RANDOM`
-| illumos | `*‑illumos` | [`getrandom`][12]
-| Fuchsia OS | `*‑fuchsia` | [`cprng_draw`]
-| Redox | `*‑redox` | `/dev/urandom`
-| Haiku | `*‑haiku` | `/dev/urandom` (identical to `/dev/random`)
-| Hermit | `*-hermit` | [`sys_read_entropy`]
-| Hurd | `*-hurd-*` | [`getrandom`][17]
-| SGX | `x86_64‑*‑sgx` | [`RDRAND`]
-| VxWorks | `*‑wrs‑vxworks‑*` | `randABytes` after checking entropy pool initialization with `randSecure`
-| Emscripten | `*‑emscripten` | [`getentropy`][13]
-| WASI 0.1 | `wasm32‑wasip1` | [`random_get`]
-| WASI 0.2 | `wasm32‑wasip2` | [`get-random-u64`]
-| SOLID | `*-kmc-solid_*` | `SOLID_RNG_SampleRandomBytes`
-| Nintendo 3DS | `*-nintendo-3ds` | [`getrandom`][18]
-| ESP-IDF | `*‑espidf` | [`esp_fill_random`] WARNING: see "Early Boot" section below
-| PS Vita | `*-vita-*` | [`getentropy`][19]
-| QNX Neutrino | `*‑nto-qnx*` | [`/dev/urandom`][14] (identical to `/dev/random`)
-| AIX | `*-ibm-aix` | [`/dev/urandom`][15]
-| Cygwin | `*-cygwin` | [`getrandom`][20] (based on [`RtlGenRandom`])
-
-Pull Requests that add support for new targets to `getrandom` are always welcome.
-
-### Opt-in backends
-
-`getrandom` also provides optional (opt-in) backends, which allow users to customize the source
-of randomness based on their specific needs:
-
-| Backend name | Target | Target Triple | Implementation
-| ----------------- | -------------------- | ------------------------ | --------------
-| `linux_getrandom` | Linux, Android | `*‑linux‑*` | [`getrandom`][1] system call (without `/dev/urandom` fallback). Bumps minimum supported Linux kernel version to 3.17 and Android API level to 23 (Marshmallow).
-| `linux_raw` | Linux, Android | `*‑linux‑*` | Same as `linux_getrandom`, but uses raw `asm!`-based syscalls instead of `libc`.
-| `rdrand` | x86, x86-64 | `x86_64-*`, `i686-*` | [`RDRAND`] instruction
-| `rndr` | AArch64 | `aarch64-*` | [`RNDR`] register
-| `wasm_js` | Web Browser, Node.js | `wasm32‑unknown‑unknown`, `wasm32v1-none` | [`Crypto.getRandomValues`]. Requires feature `wasm_js` ([see below](#webassembly-support)).
-| `efi_rng` | UEFI | `*-unknown‑uefi` | [`EFI_RNG_PROTOCOL`] with `EFI_RNG_ALGORITHM_RAW` (requires `std` and Nigthly compiler)
-| `custom` | All targets | `*` | User-provided custom implementation (see [custom backend])
-
-Opt-in backends can be enabled using the `getrandom_backend` configuration flag.
-The flag can be set either by specifying the `rustflags` field in [`.cargo/config.toml`]:
-```toml
-# It's recommended to set the flag on a per-target basis:
-[target.wasm32-unknown-unknown]
-rustflags = ['--cfg', 'getrandom_backend="wasm_js"']
-```
-
-Or by using the `RUSTFLAGS` environment variable:
-
-```sh
-RUSTFLAGS='--cfg getrandom_backend="linux_getrandom"' cargo build
-```
-
-Enabling an opt-in backend will replace the backend used by default. Doing this for
-an incorrect target (e.g. using `linux_getrandom` while compiling for a Windows target)
-will result in a compilation error. Be extremely careful while using opt-in backends,
-as incorrect configuration may result in vulnerable applications or applications
-that always panic.
-
-Note that using an opt-in backend in a library (e.g. for tests or benchmarks)
-WILL NOT have any effect on its downstream users.
-
-[`.cargo/config.toml`]: https://doc.rust-lang.org/cargo/reference/config.html
-
-### Raw Linux syscall support
-
-Currently the `linux_raw` backend supports only targets with stabilized `asm!` macro,
-i.e. `arm`, `aarch64`, `loongarch64`, `riscv32`, `riscv64`, `s390x`, `x86`, and `x86_64`.
-
-Note that the raw syscall backend may be slower than backends based on `libc::getrandom`,
-e.g. it does not implement vDSO optimizations and on `x86` it uses the infamously slow
-`int 0x80` instruction to perform syscall.
-
-### WebAssembly support
-
-This crate fully supports the [WASI] and [Emscripten] targets. However,
-the `wasm32-unknown-unknown` target (i.e. the target used by `wasm-pack`)
-is not automatically supported since, from the target name alone, we cannot deduce
-which JavaScript interface should be used (or if JavaScript is available at all).
-
-To enable `getrandom`'s functionality on `wasm32-unknown-unknown` using the Web
-Crypto methods [described above][opt-in] via [`wasm-bindgen`], do
-*both* of the following:
-
-- Use the `wasm_js` feature flag, i.e.
- `getrandom = { version = "0.3", features = ["wasm_js"] }`.
- On its own, this only makes the backend available. (As a side effect this
- will make your `Cargo.lock` significantly larger if you are not already
- using [`wasm-bindgen`], but otherwise enabling this feature is harmless.)
-- Set `RUSTFLAGS='--cfg getrandom_backend="wasm_js"'` ([see above][opt-in]).
-
-This backend supports both web browsers (main window and Web Workers)
-and Node.js (v19 or later) environments.
-
-WARNING: It is highly recommended to enable the `wasm_js` feature only for
-binary crates and tests, i.e. avoid unconditionally enabling it in library crates.
-
-### Custom backend
-
-If this crate does not support your target out of the box or you have to use
-a non-default entropy source, then you can provide a custom implementation.
-You need to enable the custom backend as described in the
-[opt-in backends][opt-in] section.
-
-Next, you need to define an `extern` function with the following signature:
-
-```rust
-use getrandom::Error;
-
-#[no_mangle]
-unsafe extern "Rust" fn __getrandom_v03_custom(
- dest: *mut u8,
- len: usize,
-) -> Result<(), Error> {
- todo!()
-}
-```
-
-This function should, ideally, be defined in the root crate of your project,
-e.g. in your `main.rs`. This function MUST be defined only once for your
-project, i.e. upstream library crates SHOULD NOT define it outside of
-tests and benchmarks. Improper configuration of this backend may result
-in linking errors.
-
-The function accepts a pointer to a buffer that should be filled with random
-data and its length in bytes. Note that the buffer MAY be uninitialized.
-On success, the function should return `Ok(())` and fully fill the input buffer;
-otherwise, it should return an error value.
-
-While wrapping functions which work with byte slices you should fully initialize
-the buffer before passing it to the function:
-```rust
-use getrandom::Error;
-
-fn my_entropy_source(buf: &mut [u8]) -> Result<(), getrandom::Error> {
- // ...
- Ok(())
-}
-
-#[no_mangle]
-unsafe extern "Rust" fn __getrandom_v03_custom(
- dest: *mut u8,
- len: usize,
-) -> Result<(), Error> {
- let buf = unsafe {
- // fill the buffer with zeros
- core::ptr::write_bytes(dest, 0, len);
- // create mutable byte slice
- core::slice::from_raw_parts_mut(dest, len)
- };
- my_entropy_source(buf)
-}
-```
-
-If you are confident that `getrandom` is not used in your project, but
-it gets pulled nevertheless by one of your dependencies, then you can
-use the following custom backend, which always returns the "unsupported" error:
-```rust
-use getrandom::Error;
-
-#[no_mangle]
-unsafe extern "Rust" fn __getrandom_v03_custom(
- dest: *mut u8,
- len: usize,
-) -> Result<(), Error> {
- Err(Error::UNSUPPORTED)
-}
-```
-
-### Platform Support
-
-This crate generally supports the same operating system and platform versions
-that the Rust standard library does. Additional targets may be supported using
-the opt-in custom backend.
-
-This means that as Rust drops support for old versions of operating systems
-(such as old Linux kernel versions, Android API levels, etc.) in stable releases,
-`getrandom` may create new patch releases that remove support for
-outdated platform versions.
-
-### `/dev/urandom` fallback on Linux and Android
-
-On Linux targets, the `/dev/urandom` fallback is present only if either `target_env`
-is `musl`, or `target_arch` is one of the following: `aarch64`, `arm`, `powerpc`,
-`powerpc64`, `s390x`, `x86`, `x86_64`. Other supported targets [require][platform-support]
-kernel versions that support the `getrandom` system call, so the fallback is not needed.
-
-On Android targets the fallback is present only for the following `target_arch`es:
-`aarch64`, `arm`, `x86`, `x86_64`. Other `target_arch`es (e.g. RISC-V) require
-sufficiently high API levels.
-
-The fallback can be disabled by enabling the `linux_getrandom` opt-in backend.
-Note that doing so will bump minimum supported Linux kernel version to 3.17
-and Android API level to 23 (Marshmallow).
-
-### Early boot
-
-Sometimes, early in the boot process, the OS has not collected enough
-entropy to securely seed its RNG. This is especially common on virtual
-machines, where standard "random" events are hard to come by.
-
-Some operating system interfaces always block until the RNG is securely
-seeded. This can take anywhere from a few seconds to more than a minute.
-A few (Linux, NetBSD and Solaris) offer a choice between blocking and
-getting an error; in these cases, we always choose to block.
-
-On Linux (when the `getrandom` system call is not available), reading from
-`/dev/urandom` never blocks, even when the OS hasn't collected enough
-entropy yet. To avoid returning low-entropy bytes, we first poll
-`/dev/random` and only switch to `/dev/urandom` once this has succeeded.
-
-On OpenBSD, this kind of entropy accounting isn't available, and on
-NetBSD, blocking on it is discouraged. On these platforms, nonblocking
-interfaces are used, even when reliable entropy may not be available.
-On the platforms where it is used, the reliability of entropy accounting
-itself isn't free from controversy. This library provides randomness
-sourced according to the platform's best practices, but each platform has
-its own limits on the grade of randomness it can promise in environments
-with few sources of entropy.
-
-On ESP-IDF, if `esp_fill_random` is used before enabling WiFi, BT, or the
-voltage noise entropy source (SAR ADC), the Hardware RNG will only be seeded
-via RC_FAST_CLK. This can occur during early boot unless
-`bootloader_random_enable()` is called. For more information see the
-[ESP-IDF RNG Docs][esp-idf-rng] or the
-[RNG section of the ESP32 Technical Reference Manual][esp-trng-docs].
-
-## Error handling
-
-We always prioritize failure over returning known insecure "random" bytes.
-Generally, on supported platforms, failure is highly unlikely, though not
-impossible. If an error does occur, it is likely that it will occur
-on every call to `getrandom`. Therefore, after the first successful call,
-one can be reasonably confident that no errors will occur.
-
-## Panic handling
-
-We strive to eliminate all potential panics from our backend implementations.
-In other words, when compiled with optimizations enabled, the generated
-binary code for `getrandom` functions should not contain any panic branches.
-Even if the platform misbehaves and returns an unexpected result,
-our code should correctly handle it and return an error, e.g.
-[`Error::UNEXPECTED`].
-
-## Sanitizer support
-
-If your code uses [`fill_uninit`] and you enable
-[MemorySanitizer](https://doc.rust-lang.org/beta/unstable-book/compiler-flags/sanitizer.html#memorysanitizer)
-(i.e. `-Zsanitizer=memory`), we will automatically handle unpoisoning
-of the destination buffer filled by `fill_uninit`.
-
-You can run sanitizer tests for your crate dependent on `getrandom` like this:
-```sh
-RUSTFLAGS="-Zsanitizer=memory" cargo test -Zbuild-std --target=x86_64-unknown-linux-gnu
-```
-
-## Minimum Supported Rust Version
-
-This crate requires Rust 1.63 or later.
-
-## License
-
-The `getrandom` library is distributed under either of
-
- * [Apache License, Version 2.0][LICENSE-APACHE]
- * [MIT license][LICENSE-MIT]
-
-at your option.
-
-### Contribution
-
-Unless you explicitly state otherwise, any contribution intentionally submitted
-for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
-dual licensed as above, without any additional terms or conditions.
-
-[//]: # (badges)
-
-[GitHub Actions]: https://github.com/rust-random/getrandom/actions?query=branch:master
-[Build Status]: https://github.com/rust-random/getrandom/actions/workflows/tests.yml/badge.svg?branch=master
-[crates.io]: https://crates.io/crates/getrandom
-[Crate]: https://img.shields.io/crates/v/getrandom
-[docs.rs]: https://docs.rs/getrandom
-[Documentation]: https://docs.rs/getrandom/badge.svg
-[deps.rs]: https://deps.rs/repo/github/rust-random/getrandom
-[Dependency Status]: https://deps.rs/repo/github/rust-random/getrandom/status.svg
-[Downloads]: https://img.shields.io/crates/d/getrandom
-[License]: https://img.shields.io/crates/l/getrandom
-
-[//]: # (supported targets)
-
-[1]: https://manned.org/getrandom.2
-[2]: https://manned.org/urandom.4
-[3]: https://www.unix.com/man-page/mojave/2/getentropy/
-[4]: https://www.unix.com/man-page/mojave/4/urandom/
-[5]: https://www.freebsd.org/cgi/man.cgi?query=getrandom&manpath=FreeBSD+12.0-stable
-[7]: https://man.openbsd.org/getentropy.2
-[8]: https://man.netbsd.org/sysctl.7
-[9]: https://leaf.dragonflybsd.org/cgi/web-man?command=getrandom
-[11]: https://docs.oracle.com/cd/E88353_01/html/E37841/getrandom-2.html
-[12]: https://illumos.org/man/2/getrandom
-[13]: https://github.com/emscripten-core/emscripten/pull/12240
-[14]: https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.utilities/topic/r/random.html
-[15]: https://www.ibm.com/docs/en/aix/7.3?topic=files-random-urandom-devices
-[16]: https://man.netbsd.org/getrandom.2
-[17]: https://www.gnu.org/software/libc/manual/html_mono/libc.html#index-getrandom
-[18]: https://github.com/rust3ds/shim-3ds/commit/b01d2568836dea2a65d05d662f8e5f805c64389d
-[19]: https://github.com/vitasdk/newlib/blob/2d869fe47aaf02b8e52d04e9a2b79d5b210fd016/newlib/libc/sys/vita/getentropy.c
-[20]: https://github.com/cygwin/cygwin/blob/main/winsup/cygwin/libc/getentropy.cc
-
-[`ProcessPrng`]: https://learn.microsoft.com/en-us/windows/win32/seccng/processprng
-[`RtlGenRandom`]: https://learn.microsoft.com/en-us/windows/win32/api/ntsecapi/nf-ntsecapi-rtlgenrandom
-[`Crypto.getRandomValues`]: https://www.w3.org/TR/WebCryptoAPI/#Crypto-method-getRandomValues
-[`RDRAND`]: https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide
-[`RNDR`]: https://developer.arm.com/documentation/ddi0601/2024-06/AArch64-Registers/RNDR--Random-Number
-[`CCRandomGenerateBytes`]: https://opensource.apple.com/source/CommonCrypto/CommonCrypto-60074/include/CommonRandom.h.auto.html
-[`cprng_draw`]: https://fuchsia.dev/fuchsia-src/zircon/syscalls/cprng_draw
-[`esp_fill_random`]: https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/random.html#functions
-[esp-idf-rng]: https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/random.html
-[esp-trng-docs]: https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf#rng
-[`EFI_RNG_PROTOCOL`]: https://uefi.org/specs/UEFI/2.10/37_Secure_Technologies.html#efi-rng-protocol
-[`random_get`]: https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-random_getbuf-pointeru8-buf_len-size---errno
-[`get-random-u64`]: https://github.com/WebAssembly/WASI/blob/v0.2.1/wasip2/random/random.wit#L23-L28
-[configuration flags]: #configuration-flags
-[custom backend]: #custom-backend
-[`wasm-bindgen`]: https://github.com/rustwasm/wasm-bindgen
-[`module`]: https://rustwasm.github.io/wasm-bindgen/reference/attributes/on-js-imports/module.html
-[`sys_read_entropy`]: https://github.com/hermit-os/kernel/blob/315f58ff5efc81d9bf0618af85a59963ff55f8b1/src/syscalls/entropy.rs#L47-L55
-[platform-support]: https://doc.rust-lang.org/stable/rustc/platform-support.html
-[WASI]: https://github.com/WebAssembly/WASI
-[Emscripten]: https://emscripten.org
-[opt-in]: #opt-in-backends
-
-[//]: # (licenses)
-
-[LICENSE-APACHE]: https://github.com/rust-random/getrandom/blob/master/LICENSE-APACHE
-[LICENSE-MIT]: https://github.com/rust-random/getrandom/blob/master/LICENSE-MIT
-
-[`Error::UNEXPECTED`]: https://docs.rs/getrandom/latest/getrandom/struct.Error.html#associatedconstant.UNEXPECTED
-[`fill_uninit`]: https://docs.rs/getrandom/latest/getrandom/fn.fill_uninit.html