Node.js
Node 18+ · no dependencies
Promise-based, with TypeScript types. Works with require and import.
Download jebtek-rdrand-2.0.0.tgz
npm install https://rdrand.com/Downloads/jebtek-rdrand-2.0.0.tgz
const { RdRand } = require("@jebtek/rdrand");
const rng = new RdRand();
await rng.generateKey(32); // "kq9ZLx0t…"
await rng.generateBytes(16); // Buffer
await rng.generateUInt(); // 0 to 2147483647
rng.source; // "rdrand", "rndr" or "service"
Kotlin / Java
JVM 11+ · Kotlin stdlib only
One jar with the hardware library for every platform inside. Blocking calls that take microseconds on hardware.
Download rdrand-kotlin-2.0.0.jar
implementation(files("libs/rdrand-kotlin-2.0.0.jar"))
import com.jebtek.rdrand.RdRand
val rng = RdRand()
rng.generateKey(32)
rng.generateBytes(16) // ByteArray
rng.generateUInt() // 0 to Int.MAX_VALUE
rng.source // RDRAND, RNDR or SERVICE
Rust
crate source · MSRV 1.80
RDRAND and RNDR built in. The API fallback is the default service feature; turn it off for a dependency-free, hardware-only crate.
Download rdrand-rust-2.0.0.zip
rdrand-client = { path = "rdrand-client-2.0.0" } # Cargo.toml, after unzipping
let rng = rdrand_client::Client::new();
rng.generate_key(32)?;
rng.generate_bytes(16)?; // Vec<u8>
rng.generate_uint()?; // 0 ..= 2^31 - 1
rng.source(); // Source::Rdrand, Rndr or Service
.NET
.NET Standard 2.0 · no dependencies
For .NET 6/8/9+ and .NET Framework 4.6.1+. Async and blocking methods.
Download JebteK.RdRand.2.0.0.nupkg
dotnet add package JebteK.RdRand --version 2.0.0 --source <folder with the .nupkg>
using JebteK.RdRand;
using var rng = new RdRandClient();
await rng.GenerateKeyAsync(32);
await rng.GenerateBytesAsync(16); // byte[]
await rng.GenerateUIntAsync(); // 0 to 2147483647
rng.Source; // Rdrand, Rndr or Service