Go to file
Leopere 6be48be0c2
Simplify README for easier onboarding
- Create concise README with TL;DR and quick start guide
- Move detailed technical docs to TECHNICAL.md
- Focus on: what it is, how to install, how to use
- Link to TECHNICAL.md and RESEARCH.md for deeper info

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 15:33:09 -05:00
man Add OpenSSL provider, camera reconnection, manpage, and cross-compile support 2026-02-05 14:53:19 -05:00
scripts Add randomness validation test suite 2026-02-05 15:18:51 -05:00
src Add OpenSSL provider, camera reconnection, manpage, and cross-compile support 2026-02-05 14:53:19 -05:00
.gitignore Add OpenSSL provider, camera reconnection, manpage, and cross-compile support 2026-02-05 14:53:19 -05:00
.woodpecker.yml Add FAKE_CAMERA mode and OBS virtual camera testing support 2026-01-22 16:14:30 -05:00
Cargo.lock Add OpenSSL provider, camera reconnection, manpage, and cross-compile support 2026-02-05 14:53:19 -05:00
Cargo.toml Add OpenSSL provider, camera reconnection, manpage, and cross-compile support 2026-02-05 14:53:19 -05:00
Dockerfile Add FAKE_CAMERA mode and OBS virtual camera testing support 2026-01-22 16:14:30 -05:00
README.md Simplify README for easier onboarding 2026-02-05 15:33:09 -05:00
RESEARCH.md Dramatically increase QRNG throughput with chunked hashing and high-res support 2026-01-26 12:31:17 -05:00
TECHNICAL.md Simplify README for easier onboarding 2026-02-05 15:33:09 -05:00
openssl-camera-qrng.cnf Add OpenSSL provider, camera reconnection, manpage, and cross-compile support 2026-02-05 14:53:19 -05:00

README.md

Camera TRNG

TL;DR: Turn any webcam into a true random number generator. Cover the lens, run the server, get random bytes.

What is this?

Your webcam generates electrical noise even when the lens is covered. This noise comes from quantum effects in the sensor. This tool captures that noise and turns it into random numbers - the same approach used by LavaRnd.

Quick Start

1. Install

# Clone and build
git clone https://git.nixc.us/colin/camera-trng.git
cd camera-trng
cargo build --release

Or use Docker:

docker pull git.nixc.us/colin/camera-trng:latest

2. Cover Your Camera Lens

Use tape, a lens cap, or put the camera in a dark box. The camera should see nothing but blackness.

3. Run

./target/release/camera-qrng

Server starts at http://localhost:8787

4. Get Random Bytes

# Get 32 random bytes (hex)
curl "http://localhost:8787/random?bytes=32&hex=true"

# Get 1KB of raw random data
curl "http://localhost:8787/random?bytes=1024" -o random.bin

# Continuous stream
curl -N "http://localhost:8787/stream"

Is it actually random?

Yes. This tool passes all NIST SP 800-22 statistical tests for randomness:

# Run the built-in test suite
./scripts/test-randomness.py --server http://localhost:8787

The output is cryptographic quality - suitable for generating encryption keys, secure tokens, etc.

API

Endpoint Description
GET /random?bytes=N Get N random bytes (max 1024)
GET /random?bytes=N&hex=true Get N random bytes as hex string
GET /stream Continuous stream of random bytes
GET /health Health check

Troubleshooting

macOS "Camera in use" error:

./scripts/release-camera.sh
./target/release/camera-qrng

Docker (Linux):

docker run -d --device /dev/video0 -p 8787:8787 git.nixc.us/colin/camera-trng:latest

More Info

  • TECHNICAL.md - Full API docs, CI/CD, configuration options
  • RESEARCH.md - The science behind camera-based random number generation

License

MIT