notbefore
Consumer CLI for the public qrng-beacon-log — an hourly, commit-then-reveal, host-attested randomness log
anchored to drand quicknet, RFC 3161 timestamps, Rekor and OpenTimestamps. Spec: NOTBEFORE.md (draft 0.2) in
https://github.com/docdailey/qrng-beacon-log.
What it proves: the 32-byte attested value (V) of hour (N) was fixed before drand round (R) and
not selected after (R) existed. What it does not prove: that the bits are quantum, secret, certified, or
unique. This is not a certification of anything; see CLAIMS.md in the log repository.
pip install notbefore # PyPI, 0.2.0; needs git and openssl on PATH; add [anchors] for OpenTimestamps proofs
notbefore verify 41 # commit 40 + reveal 41: signatures (pinned keys), drand BLS offline, RFC 3161, Rekor anchors
notbefore value 41 # V, only if verify passes
notbefore seed 41 --purpose clinic-qi-roster-2026-09-12 # S = SHA256("notbefore/derive/v1" || V || purpose)
notbefore shuffle 41 --purpose split:iris-csv:v3 rows.txt # deterministic shuffle of the lines of rows.txt
notbefore split 41 --purpose split:iris-csv:v3 --frac 0.8 rows.txt
Streams, for scripting. Payloads go to stdout only; the verification transcript goes to stderr. So
V=$(notbefore value 45) is the 64-hex value and nothing else, and notbefore shuffle … > out.txt is clean. -q
silences the PASS/INFO lines; FAIL/WARN lines and a non-zero exit still report a bad pair. --json gives a
machine-readable result on stdout.
seed, shuffle and split write a transcript JSON (notbefore-<seq>-<purpose>.json) — the engineering
artifact that lets anyone reproduce the result from the public log.
Trust model. The verifier, the signing keys, the drand group key, the Rekor log key, the freetsa CA and the
expected host configuration are vendored inside this package, pinned at a named commit of the log repository
(notbefore --version prints it). The CLI executes only those files; the log is read as data. Updating the
verifier means updating the package — deliberately.
Two publication surfaces. The log is read from git (a cached clone of the repository, or --log-dir);
https://notbefore.net serves the same repository statically. Once checkpoints are enabled, verify also fetches
https://notbefore.net/checkpoint and requires it to be the same head as git's, or an append-only relative of it —
two different heads under the log's key is a split between surfaces and fails loudly (--checkpoint-url overrides).
Eligible pairs start at 0020/0021 (0026/0027 preferred, execution enforced). verify 19 fails by design (ERR-007).
Pulses 0001–0041 carry retroactive anchors (2026-09-12 12:47 UTC); from 0042 anchors are contemporaneous.
MIT. Data in the log: CC BY 4.0.
Releasing (operators): RELEASING.md — every change to the verifier or keys needs a new package, and the flow there is the only way one gets made.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file notbefore-0.3.1.tar.gz.
File metadata
- Download URL: notbefore-0.3.1.tar.gz
- Upload date:
- Size: 57.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6fccde6b243ece395fa9a6f8fe794e5802a1db3f4c78cc9d4d2fbe253bf422a0
|
|
| MD5 |
f98d88ca2d496da47484adc2aaba21a2
|
|
| BLAKE2b-256 |
8d74c73b0b077abffa28c150f793ae1e4252c833c80b4adba2328f1e1c071164
|
Provenance
The following attestation bundles were made for notbefore-0.3.1.tar.gz:
Publisher:
cli.yml on docdailey/qrng-beacon-log
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
notbefore-0.3.1.tar.gz -
Subject digest:
6fccde6b243ece395fa9a6f8fe794e5802a1db3f4c78cc9d4d2fbe253bf422a0 - Sigstore transparency entry: 2809493255
- Sigstore integration time:
-
Permalink:
docdailey/qrng-beacon-log@0dcf36d8365a0df1f45f2894f965c21efde6a177 -
Branch / Tag:
refs/tags/cli-v0.3.1 - Owner: https://github.com/docdailey
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cli.yml@0dcf36d8365a0df1f45f2894f965c21efde6a177 -
Trigger Event:
push
-
Statement type:
File details
Details for the file notbefore-0.3.1-py3-none-any.whl.
File metadata
- Download URL: notbefore-0.3.1-py3-none-any.whl
- Upload date:
- Size: 67.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
468121be20b32455522b5594296cb10e3cc483b44d6070394941f1f18c007f7f
|
|
| MD5 |
a096c85ce236fb44ffe1ab4677571a45
|
|
| BLAKE2b-256 |
cfb38ed4b82058450fb026a6bffb2e7a0d4bfb642110af1013c662af354d5081
|
Provenance
The following attestation bundles were made for notbefore-0.3.1-py3-none-any.whl:
Publisher:
cli.yml on docdailey/qrng-beacon-log
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
notbefore-0.3.1-py3-none-any.whl -
Subject digest:
468121be20b32455522b5594296cb10e3cc483b44d6070394941f1f18c007f7f - Sigstore transparency entry: 2809493274
- Sigstore integration time:
-
Permalink:
docdailey/qrng-beacon-log@0dcf36d8365a0df1f45f2894f965c21efde6a177 -
Branch / Tag:
refs/tags/cli-v0.3.1 - Owner: https://github.com/docdailey
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cli.yml@0dcf36d8365a0df1f45f2894f965c21efde6a177 -
Trigger Event:
push
-
Statement type: