crypto/ed25519 — validation proof
Go’s own crypto/ed25519 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/ed25519 row in
Validated Test Packages.
Validated 2026-10-25 · converter 3e3f18925
9 matched · 1 disclosed — Go 1.26.10, windows/amd64, converted package
src/core/crypto/ed25519.
Measured at Release (tiered JIT off), oracle go version go1.26.10 windows/amd64.
Verdicts
| Test | go test |
go2cs |
|---|---|---|
TestAllocations |
pass | fail (disclosed) |
TestCryptoSigner |
pass | pass |
TestEd25519Vectors |
pass | pass |
TestEqual |
pass | pass |
TestGenerateKey |
pass | pass |
TestGolden |
pass | pass |
TestMalleability |
pass | pass |
TestSignVerify |
pass | pass |
TestSignVerifyContext |
pass | pass |
TestSignVerifyHashed |
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: the run loop builds seed/message slices, derives a key, signs and verifies – every step allocates in the managed model (golib slices, ж boxes, edwards25519 scalar/point state) where Go’s escape analysis and fixed-size arrays keep the whole round on the stack. The converted path counts 4,312 objects per run on windows and linux, a lower bound. Deferred, not a floor: the edwards25519 temporaries, the address-take and receiver boxes and the Scalar/fiat arrays are each storage Go keeps off the heap, and each has planned work that removes it; the entry retires only at zero bytes. |
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.
- BenchmarkKeyGeneration (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkNewKeyFromSeed (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSigning (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkVerification (benchmark): benchmark execution is deferred to Phase 4D
- Example_ed25519ctx (example): example execution is deferred to Phase 4D