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.
- BenchmarkEncodingDecoding (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkScalarBaseMult (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkScalarMult (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkVarTimeDoubleScalarBaseMult (benchmark): benchmark execution is deferred to Phase 4D