Release Notes
wj-diode-quantum 1.0.0 Beta 2 - 4 August 2026
A fix for the keyed ANU endpoint, which never worked in the first beta.
Fixed
- The keyed API at
api.quantumnumbers.anu.edu.aucould not be used at all. It returnslengthas a JSON string and omitssizeentirely, while the legacy endpoint returns both as numbers.anuResponsedeclared them as ints, so every keyed response failed to decode before the data was reached and the source produced nothing butparse response: json: cannot unmarshal string into Go struct field. Neither field is used for anything — they only echo the request back — so neither is decoded now. Collections from the legacy endpoint were never affected.
Documentation
- Corrected the yield figures for the keyed API. Requests are made with
type=hex16, sosizecounts 16-bit values per block rather than bytes and a block atsize: 10is 20 bytes. Atlength: 1024, size: 10the endpoint yields 20,480 bytes, or 1,280 values per request — twice what was previously documented.
wj-diode-quantum 1.0.0 Beta - 2 August 2026
First release.
Collects quantum random numbers from the Australian National University, pushes them across a data diode, and serves them one at a time on the far side.
Collecting
- Draws from both ANU endpoints: the current keyed API at
api.quantumnumbers.anu.edu.auand the older unkeyed one atqrng.anu.edu.au. Either or both can be enabled; when both are on, both are used on every cycle and their values are merged into one batch, each tagged with its source. - Blocks returned by either API are concatenated and re-sliced into 128-bit values locally, so the differing per-block size limits do not matter. Leftover bytes are discarded rather than padded.
- Batches wait in an outbox until the send command succeeds, so an interrupted or failed transfer is retried rather than lost. After a configurable number of attempts a batch is moved aside so one bad file cannot block the queue.
Serving
- One 128-bit value per request over HTTP, with the time it was collected.
- The pool is a bounded LIFO: newest served first, oldest discarded once it reaches capacity.
- A value is never served twice. Each take is journalled and flushed to disk before the value reaches the client, so the guarantee survives a crash, not just a clean shutdown.
- Batches arriving over the diode are validated whole and rejected whole. A batch that arrives twice is recognised and adds nothing.
servecan run and supervise the receiving tool, so the protected machine needs one process.
Getting set up
setup sendandsetup recvask only what cannot be defaulted and write a working config, along with the companion files the diode tool needs. Passwords go to a0600file rather than a command line.sample-configprints a config showing every option.statsreports pool depth and age without writing to the database, so it is safe to run against a live server.
Notes
- The API has no authentication and binds to
127.0.0.1by default. - The legacy ANU endpoint is limited to one request per minute and is being retired by ANU.