crypto/sha1 — validation proof

Go’s own crypto/sha1 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/sha1 row in Validated Test Packages.

Validated 2026-10-25 · converter 3e3f18925

13 matched · 1 disclosed — Go 1.26.10, windows/amd64, converted package src/core/crypto/sha1.

Measured at Release (tiered JIT off), oracle go version go1.26.10 windows/amd64.

Verdicts

Test go test go2cs
TestAllocations pass fail (disclosed)
TestBlockSize pass pass
TestExtraMethods pass pass
TestGolden pass pass
TestGoldenMarshal pass pass
TestLargeHashes pass pass
TestSHA1Hash pass pass
TestSHA1Hash/Clone pass pass
TestSHA1Hash/OutOfBoundsRead pass pass
TestSHA1Hash/ResetState pass pass
TestSHA1Hash/StatefulWrite pass pass
TestSHA1Hash/SumAppend pass pass
TestSHA1Hash/WriteWithoutError pass pass
TestSize 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 want-zero AllocsPerRun assert: Sum copies the digest (d0 := *d) so the caller can keep writing, and that copy must deep-copy the digest’s [5]uint32 state and [64]byte block — golib’s array is a struct over a heap T[], so the copy is two managed allocations where Go's is stack-resident; Write/Sum also allocate through the hash.Hash interface surface. RELABEL 2026-09-23 (C1, as ruled at ledger 2026-09-23 03:37 O1): alloc-profile -> deferred. 7 per run = 6 class-4 + 1 heap box. New() is outside the measured closure, so no hash.Hash shell is minted per run. RE-READ AT go1.26.10 (2026-10-25, G): reading moved from 7 per run at go1.24.13 to 9 per run on windows and linux; the test body is identical at go1.24.13 and go1.26.10.

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.