trivial random ports for deterministic seeding
Peter McGoron 31 May 2026 16:56 UTC
I've added a "trivial" random port in my CHICKEN implementation of the
current draft: <https://codeberg.org/phm/srfi-271-egg>
The trivial random port cyclically repeats an input bytevector. It can
be used to deterministically seed other random ports, and a long-enough
bytevector sourced from /dev/random can be used as a seed in most cases.
Example:
(import (scheme base)
(prefix (srfi 271 determinized trivial) tr:)
(prefix (srfi 271 determinized) det:))
(define seed #u8(1 2 3 4))
(define port (tr:make-random-port seed))
(read-bytevector port 4) ⇒ #u8(1 2 3 4)
(read-u8 port) ⇒ 1
(read-bytevector port 10) ⇒ #u8(2 3 4 1 2 3 4 1 2 3)
(define state (tr:random-port-state port))
(define new-port (tr:make-random-port state))
(read-bytevector new-port 5) ⇒ #u8(4 1 2 3 4)
(read-bytevector port 5) ⇒ #u8(4 1 2 3 4)
(define some-other-random-algorithm-port
(det:make-random-port port))
;; Will work except in pathological cases.
;; A 128 byte seed from a very random source like /dev/random
;; will likely be sufficient for all practical cases.
-- Peter McGoron