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.