crypto/rand — validation proof
Go’s own crypto/rand test suite, converted to C# by go2cs, built against the converted standard
library, run under the Go-semantics test host, and compared verdict for verdict against a clean
go test -json baseline of the same sources. This page is generated by the converter from that
comparison — it is the evidence behind the crypto/rand row in
Validated Test Packages.
Validated 2026-09-23 · converter f95f88866
314 matched · 1 disclosed — Go 1.24.13, windows/amd64, converted package
src/core/crypto/rand.
Measured at Release (tiered JIT off), oracle go version go1.24.13 windows/amd64.
Verdicts
| Test | go test |
go2cs |
|---|---|---|
TestAllocations |
pass | fail (disclosed) |
TestConcurrentRead |
pass | pass |
TestConcurrentRead/Read |
pass | pass |
TestConcurrentRead/Reader.Read |
pass | pass |
TestInt |
pass | pass |
TestIntEmptyMaxPanics |
pass | pass |
TestIntMask |
pass | pass |
TestIntMask/max=1 |
pass | pass |
TestIntMask/max=10 |
pass | pass |
TestIntMask/max=100 |
pass | pass |
TestIntMask/max=101 |
pass | pass |
TestIntMask/max=102 |
pass | pass |
TestIntMask/max=103 |
pass | pass |
TestIntMask/max=104 |
pass | pass |
TestIntMask/max=105 |
pass | pass |
TestIntMask/max=106 |
pass | pass |
TestIntMask/max=107 |
pass | pass |
TestIntMask/max=108 |
pass | pass |
TestIntMask/max=109 |
pass | pass |
TestIntMask/max=11 |
pass | pass |
TestIntMask/max=110 |
pass | pass |
TestIntMask/max=111 |
pass | pass |
TestIntMask/max=112 |
pass | pass |
TestIntMask/max=113 |
pass | pass |
TestIntMask/max=114 |
pass | pass |
TestIntMask/max=115 |
pass | pass |
TestIntMask/max=116 |
pass | pass |
TestIntMask/max=117 |
pass | pass |
TestIntMask/max=118 |
pass | pass |
TestIntMask/max=119 |
pass | pass |
TestIntMask/max=12 |
pass | pass |
TestIntMask/max=120 |
pass | pass |
TestIntMask/max=121 |
pass | pass |
TestIntMask/max=122 |
pass | pass |
TestIntMask/max=123 |
pass | pass |
TestIntMask/max=124 |
pass | pass |
TestIntMask/max=125 |
pass | pass |
TestIntMask/max=126 |
pass | pass |
TestIntMask/max=127 |
pass | pass |
TestIntMask/max=128 |
pass | pass |
TestIntMask/max=129 |
pass | pass |
TestIntMask/max=13 |
pass | pass |
TestIntMask/max=130 |
pass | pass |
TestIntMask/max=131 |
pass | pass |
TestIntMask/max=132 |
pass | pass |
TestIntMask/max=133 |
pass | pass |
TestIntMask/max=134 |
pass | pass |
TestIntMask/max=135 |
pass | pass |
TestIntMask/max=136 |
pass | pass |
TestIntMask/max=137 |
pass | pass |
TestIntMask/max=138 |
pass | pass |
TestIntMask/max=139 |
pass | pass |
TestIntMask/max=14 |
pass | pass |
TestIntMask/max=140 |
pass | pass |
TestIntMask/max=141 |
pass | pass |
TestIntMask/max=142 |
pass | pass |
TestIntMask/max=143 |
pass | pass |
TestIntMask/max=144 |
pass | pass |
TestIntMask/max=145 |
pass | pass |
TestIntMask/max=146 |
pass | pass |
TestIntMask/max=147 |
pass | pass |
TestIntMask/max=148 |
pass | pass |
TestIntMask/max=149 |
pass | pass |
TestIntMask/max=15 |
pass | pass |
TestIntMask/max=150 |
pass | pass |
TestIntMask/max=151 |
pass | pass |
TestIntMask/max=152 |
pass | pass |
TestIntMask/max=153 |
pass | pass |
TestIntMask/max=154 |
pass | pass |
TestIntMask/max=155 |
pass | pass |
TestIntMask/max=156 |
pass | pass |
TestIntMask/max=157 |
pass | pass |
TestIntMask/max=158 |
pass | pass |
TestIntMask/max=159 |
pass | pass |
TestIntMask/max=16 |
pass | pass |
TestIntMask/max=160 |
pass | pass |
TestIntMask/max=161 |
pass | pass |
TestIntMask/max=162 |
pass | pass |
TestIntMask/max=163 |
pass | pass |
TestIntMask/max=164 |
pass | pass |
TestIntMask/max=165 |
pass | pass |
TestIntMask/max=166 |
pass | pass |
TestIntMask/max=167 |
pass | pass |
TestIntMask/max=168 |
pass | pass |
TestIntMask/max=169 |
pass | pass |
TestIntMask/max=17 |
pass | pass |
TestIntMask/max=170 |
pass | pass |
TestIntMask/max=171 |
pass | pass |
TestIntMask/max=172 |
pass | pass |
TestIntMask/max=173 |
pass | pass |
TestIntMask/max=174 |
pass | pass |
TestIntMask/max=175 |
pass | pass |
TestIntMask/max=176 |
pass | pass |
TestIntMask/max=177 |
pass | pass |
TestIntMask/max=178 |
pass | pass |
TestIntMask/max=179 |
pass | pass |
TestIntMask/max=18 |
pass | pass |
TestIntMask/max=180 |
pass | pass |
TestIntMask/max=181 |
pass | pass |
TestIntMask/max=182 |
pass | pass |
TestIntMask/max=183 |
pass | pass |
TestIntMask/max=184 |
pass | pass |
TestIntMask/max=185 |
pass | pass |
TestIntMask/max=186 |
pass | pass |
TestIntMask/max=187 |
pass | pass |
TestIntMask/max=188 |
pass | pass |
TestIntMask/max=189 |
pass | pass |
TestIntMask/max=19 |
pass | pass |
TestIntMask/max=190 |
pass | pass |
TestIntMask/max=191 |
pass | pass |
TestIntMask/max=192 |
pass | pass |
TestIntMask/max=193 |
pass | pass |
TestIntMask/max=194 |
pass | pass |
TestIntMask/max=195 |
pass | pass |
TestIntMask/max=196 |
pass | pass |
TestIntMask/max=197 |
pass | pass |
TestIntMask/max=198 |
pass | pass |
TestIntMask/max=199 |
pass | pass |
TestIntMask/max=2 |
pass | pass |
TestIntMask/max=20 |
pass | pass |
TestIntMask/max=200 |
pass | pass |
TestIntMask/max=201 |
pass | pass |
TestIntMask/max=202 |
pass | pass |
TestIntMask/max=203 |
pass | pass |
TestIntMask/max=204 |
pass | pass |
TestIntMask/max=205 |
pass | pass |
TestIntMask/max=206 |
pass | pass |
TestIntMask/max=207 |
pass | pass |
TestIntMask/max=208 |
pass | pass |
TestIntMask/max=209 |
pass | pass |
TestIntMask/max=21 |
pass | pass |
TestIntMask/max=210 |
pass | pass |
TestIntMask/max=211 |
pass | pass |
TestIntMask/max=212 |
pass | pass |
TestIntMask/max=213 |
pass | pass |
TestIntMask/max=214 |
pass | pass |
TestIntMask/max=215 |
pass | pass |
TestIntMask/max=216 |
pass | pass |
TestIntMask/max=217 |
pass | pass |
TestIntMask/max=218 |
pass | pass |
TestIntMask/max=219 |
pass | pass |
TestIntMask/max=22 |
pass | pass |
TestIntMask/max=220 |
pass | pass |
TestIntMask/max=221 |
pass | pass |
TestIntMask/max=222 |
pass | pass |
TestIntMask/max=223 |
pass | pass |
TestIntMask/max=224 |
pass | pass |
TestIntMask/max=225 |
pass | pass |
TestIntMask/max=226 |
pass | pass |
TestIntMask/max=227 |
pass | pass |
TestIntMask/max=228 |
pass | pass |
TestIntMask/max=229 |
pass | pass |
TestIntMask/max=23 |
pass | pass |
TestIntMask/max=230 |
pass | pass |
TestIntMask/max=231 |
pass | pass |
TestIntMask/max=232 |
pass | pass |
TestIntMask/max=233 |
pass | pass |
TestIntMask/max=234 |
pass | pass |
TestIntMask/max=235 |
pass | pass |
TestIntMask/max=236 |
pass | pass |
TestIntMask/max=237 |
pass | pass |
TestIntMask/max=238 |
pass | pass |
TestIntMask/max=239 |
pass | pass |
TestIntMask/max=24 |
pass | pass |
TestIntMask/max=240 |
pass | pass |
TestIntMask/max=241 |
pass | pass |
TestIntMask/max=242 |
pass | pass |
TestIntMask/max=243 |
pass | pass |
TestIntMask/max=244 |
pass | pass |
TestIntMask/max=245 |
pass | pass |
TestIntMask/max=246 |
pass | pass |
TestIntMask/max=247 |
pass | pass |
TestIntMask/max=248 |
pass | pass |
TestIntMask/max=249 |
pass | pass |
TestIntMask/max=25 |
pass | pass |
TestIntMask/max=250 |
pass | pass |
TestIntMask/max=251 |
pass | pass |
TestIntMask/max=252 |
pass | pass |
TestIntMask/max=253 |
pass | pass |
TestIntMask/max=254 |
pass | pass |
TestIntMask/max=255 |
pass | pass |
TestIntMask/max=256 |
pass | pass |
TestIntMask/max=26 |
pass | pass |
TestIntMask/max=27 |
pass | pass |
TestIntMask/max=28 |
pass | pass |
TestIntMask/max=29 |
pass | pass |
TestIntMask/max=3 |
pass | pass |
TestIntMask/max=30 |
pass | pass |
TestIntMask/max=31 |
pass | pass |
TestIntMask/max=32 |
pass | pass |
TestIntMask/max=33 |
pass | pass |
TestIntMask/max=34 |
pass | pass |
TestIntMask/max=35 |
pass | pass |
TestIntMask/max=36 |
pass | pass |
TestIntMask/max=37 |
pass | pass |
TestIntMask/max=38 |
pass | pass |
TestIntMask/max=39 |
pass | pass |
TestIntMask/max=4 |
pass | pass |
TestIntMask/max=40 |
pass | pass |
TestIntMask/max=41 |
pass | pass |
TestIntMask/max=42 |
pass | pass |
TestIntMask/max=43 |
pass | pass |
TestIntMask/max=44 |
pass | pass |
TestIntMask/max=45 |
pass | pass |
TestIntMask/max=46 |
pass | pass |
TestIntMask/max=47 |
pass | pass |
TestIntMask/max=48 |
pass | pass |
TestIntMask/max=49 |
pass | pass |
TestIntMask/max=5 |
pass | pass |
TestIntMask/max=50 |
pass | pass |
TestIntMask/max=51 |
pass | pass |
TestIntMask/max=52 |
pass | pass |
TestIntMask/max=53 |
pass | pass |
TestIntMask/max=54 |
pass | pass |
TestIntMask/max=55 |
pass | pass |
TestIntMask/max=56 |
pass | pass |
TestIntMask/max=57 |
pass | pass |
TestIntMask/max=58 |
pass | pass |
TestIntMask/max=59 |
pass | pass |
TestIntMask/max=6 |
pass | pass |
TestIntMask/max=60 |
pass | pass |
TestIntMask/max=61 |
pass | pass |
TestIntMask/max=62 |
pass | pass |
TestIntMask/max=63 |
pass | pass |
TestIntMask/max=64 |
pass | pass |
TestIntMask/max=65 |
pass | pass |
TestIntMask/max=66 |
pass | pass |
TestIntMask/max=67 |
pass | pass |
TestIntMask/max=68 |
pass | pass |
TestIntMask/max=69 |
pass | pass |
TestIntMask/max=7 |
pass | pass |
TestIntMask/max=70 |
pass | pass |
TestIntMask/max=71 |
pass | pass |
TestIntMask/max=72 |
pass | pass |
TestIntMask/max=73 |
pass | pass |
TestIntMask/max=74 |
pass | pass |
TestIntMask/max=75 |
pass | pass |
TestIntMask/max=76 |
pass | pass |
TestIntMask/max=77 |
pass | pass |
TestIntMask/max=78 |
pass | pass |
TestIntMask/max=79 |
pass | pass |
TestIntMask/max=8 |
pass | pass |
TestIntMask/max=80 |
pass | pass |
TestIntMask/max=81 |
pass | pass |
TestIntMask/max=82 |
pass | pass |
TestIntMask/max=83 |
pass | pass |
TestIntMask/max=84 |
pass | pass |
TestIntMask/max=85 |
pass | pass |
TestIntMask/max=86 |
pass | pass |
TestIntMask/max=87 |
pass | pass |
TestIntMask/max=88 |
pass | pass |
TestIntMask/max=89 |
pass | pass |
TestIntMask/max=9 |
pass | pass |
TestIntMask/max=90 |
pass | pass |
TestIntMask/max=91 |
pass | pass |
TestIntMask/max=92 |
pass | pass |
TestIntMask/max=93 |
pass | pass |
TestIntMask/max=94 |
pass | pass |
TestIntMask/max=95 |
pass | pass |
TestIntMask/max=96 |
pass | pass |
TestIntMask/max=97 |
pass | pass |
TestIntMask/max=98 |
pass | pass |
TestIntMask/max=99 |
pass | pass |
TestIntNegativeMaxPanics |
pass | pass |
TestIntReads |
pass | pass |
TestIntReads/max=1 |
pass | pass |
TestIntReads/max=1024 |
pass | pass |
TestIntReads/max=1048576 |
pass | pass |
TestIntReads/max=1073741824 |
pass | pass |
TestIntReads/max=128 |
pass | pass |
TestIntReads/max=131072 |
pass | pass |
TestIntReads/max=134217728 |
pass | pass |
TestIntReads/max=16 |
pass | pass |
TestIntReads/max=16384 |
pass | pass |
TestIntReads/max=16777216 |
pass | pass |
TestIntReads/max=2 |
pass | pass |
TestIntReads/max=2048 |
pass | pass |
TestIntReads/max=2097152 |
pass | pass |
TestIntReads/max=2147483648 |
pass | pass |
TestIntReads/max=256 |
pass | pass |
TestIntReads/max=262144 |
pass | pass |
TestIntReads/max=268435456 |
pass | pass |
TestIntReads/max=32 |
pass | pass |
TestIntReads/max=32768 |
pass | pass |
TestIntReads/max=33554432 |
pass | pass |
TestIntReads/max=4 |
pass | pass |
TestIntReads/max=4096 |
pass | pass |
TestIntReads/max=4194304 |
pass | pass |
TestIntReads/max=512 |
pass | pass |
TestIntReads/max=524288 |
pass | pass |
TestIntReads/max=536870912 |
pass | pass |
TestIntReads/max=64 |
pass | pass |
TestIntReads/max=65536 |
pass | pass |
TestIntReads/max=67108864 |
pass | pass |
TestIntReads/max=8 |
pass | pass |
TestIntReads/max=8192 |
pass | pass |
TestIntReads/max=8388608 |
pass | pass |
TestLargeRead |
pass | pass |
TestLargeRead/Read |
pass | pass |
TestLargeRead/Reader.Read |
pass | pass |
TestPrimeBitsLt2 |
pass | pass |
TestPrimeNondeterministic |
pass | pass |
TestPrimeSmall |
pass | pass |
TestRead |
pass | pass |
TestRead/Read |
pass | pass |
TestRead/Reader.Read |
pass | pass |
TestReadByteValues |
pass | pass |
TestReadByteValues/Read |
pass | pass |
TestReadByteValues/Reader.Read |
pass | pass |
TestReadEmpty |
pass | pass |
TestReadEmpty/Read |
pass | pass |
TestReadEmpty/Reader.Read |
pass | pass |
TestReadError |
pass | pass |
TestReadUsesReader |
pass | pass |
TestText |
pass | pass |
Disclosed divergences
A disclosed divergence is a specific Go assertion this conversion does not satisfy — not
a skipped test and not a tolerance. Each one is pinned by exact failure signature in the package’s
hand-owned go2cs_test_disclosures.json;
a disclosed test that fails any other way is still a hard mismatch.
The Class column says which kind each one is: a deferred entry is an assertion the managed
CLR can meet, pinned against the named plan that will retire it; every other class is one it
provably cannot satisfy.
| Test | Class | Pinned reason |
|---|---|---|
TestAllocations |
deferred |
exact-count AllocsPerRun assert: crypto/rand.Read into a 32-byte buffer must allocate ZERO objects per run, and the converted path allocates two. DEFERRED rather than alloc-count-semantics, and the discriminator is the run’s own unit note rather than a source read: the host reports counted 20 go2cs-runtime object allocations (4,424 bytes) over 10 run(s) and states the figure is an allocation COUNT per run from go2cs’s own runtime counter, the structural mirror of runtime.MemStats.Mallocs – so the counter SAW the allocations and the units are Go’s own, which is exactly the case the deferred class exists for. The 20-vs-2 relation is TOTAL against PER RUN: 20 counted over 10 runs is the 2 the test’s own allocs = 2, want 0 reports, not a second measurement. It carries no floor: nothing in the CLR’s object model requires an allocation to fill a 32-byte buffer with random bytes – the closure’s make([]byte, 32) does not escape, so Go stack-allocates it – which makes the excess reducible bridge work rather than a structural minimum, and a floor claim here would be one the census could not falsify. Contrast crypto/internal/fips140test.TestXAESAllocations, whose reading is a 199-per-run LOWER BOUND over a whole AES-GCM seal/open round trip and is STRUCTURAL on a stated floor: the discriminator between the two is a named removable mechanism, not the size of the number. SCOPE OF THE MEASUREMENT: Release with tiering off, the configuration of record, read from the run’s own environment block; no other configuration was run and none is claimed. |
Excluded declarations
Declarations filtered from both sides of the comparison, and therefore not claimed above:
Benchmark, Fuzz and Example declarations the converted host does not execute, plus any
test requiring a capability the managed runtime does not provide — a testing member the host
has not implemented, or a platform behavior it provably cannot reproduce. Each is named with
the capability it needs.
- BenchmarkPrime (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkRead (benchmark): benchmark execution is deferred to Phase 4D
- ExampleRead (example): example execution is deferred to Phase 4D