crypto/internal/edwards25519 — validation proof

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

Validated 2026-08-27 · converter d8537c374

54 matched · 1 disclosed — Go 1.23.12, windows/amd64, converted package src/core/crypto/internal/edwards25519.

Verdicts

Test go test go2cs
TestAddSubNegOnBasePoint pass pass
TestAffineLookupTable pass pass
TestAllocations pass fail (disclosed)
TestBaseMultVsDalek pass pass
TestBasepointNafTableGeneration pass pass
TestBasepointTableGeneration pass pass
TestComparable pass pass
TestGenerator pass pass
TestInvalidEncodings pass pass
TestNafLookupTable5 pass pass
TestNafLookupTable8 pass pass
TestNonCanonicalPoints pass pass
TestNonCanonicalPoints/y=1,sign- pass pass
TestNonCanonicalPoints/y=p+1,sign+ pass pass
TestNonCanonicalPoints/y=p+1,sign- pass pass
TestNonCanonicalPoints/y=p+10,sign+ pass pass
TestNonCanonicalPoints/y=p+10,sign- pass pass
TestNonCanonicalPoints/y=p+14,sign+ pass pass
TestNonCanonicalPoints/y=p+14,sign- pass pass
TestNonCanonicalPoints/y=p+15,sign+ pass pass
TestNonCanonicalPoints/y=p+15,sign- pass pass
TestNonCanonicalPoints/y=p+16,sign+ pass pass
TestNonCanonicalPoints/y=p+16,sign- pass pass
TestNonCanonicalPoints/y=p+18,sign+ pass pass
TestNonCanonicalPoints/y=p+18,sign- pass pass
TestNonCanonicalPoints/y=p+3,sign+ pass pass
TestNonCanonicalPoints/y=p+3,sign- pass pass
TestNonCanonicalPoints/y=p+4,sign+ pass pass
TestNonCanonicalPoints/y=p+4,sign- pass pass
TestNonCanonicalPoints/y=p+5,sign+ pass pass
TestNonCanonicalPoints/y=p+5,sign- pass pass
TestNonCanonicalPoints/y=p+6,sign+ pass pass
TestNonCanonicalPoints/y=p+6,sign- pass pass
TestNonCanonicalPoints/y=p+9,sign+ pass pass
TestNonCanonicalPoints/y=p+9,sign- pass pass
TestNonCanonicalPoints/y=p,sign+ pass pass
TestNonCanonicalPoints/y=p,sign- pass pass
TestNonCanonicalPoints/y=p-1,sign- pass pass
TestProjLookupTable pass pass
TestScalarAddLikeSubNeg pass pass
TestScalarAliasing pass pass
TestScalarEqual pass pass
TestScalarGenerate pass pass
TestScalarMultDistributesOverAdd pass pass
TestScalarMultMatchesBaseMult pass pass
TestScalarMultNonIdentityPoint pass pass
TestScalarMultSmallScalars pass pass
TestScalarMultVsDalek pass pass
TestScalarMultiplyDistributesOverAdd pass pass
TestScalarNonAdjacentForm pass pass
TestScalarSetBytesWithClamping pass pass
TestScalarSetCanonicalBytes pass pass
TestScalarSetUniformBytes pass pass
TestVarTimeDoubleBaseMultMatchesBaseMult pass pass
TestVarTimeDoubleBaseMultVsDalek pass pass

Disclosed divergences

A disclosed divergence is a specific Go assertion the managed CLR provably cannot 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.

Test Class Pinned reason
TestAllocations alloc-profile want-zero AllocsPerRun assert over a point addition plus scalar/point encode round-trips: Go’s escape analysis proves every Point, Scalar and field-element temporary non-escaping (even NewIdentityPoint()/NewGeneratorPoint() stay on the stack), while the managed model heap-boxes each one — 98 golib objects per run at the B2 kind-split emission, so zero is structurally unreachable

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.