| // Copyright 2026 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| package ed25519_test |
| |
| import ( |
| "crypto/ed25519" |
| "crypto/internal/cryptotest/wycheproof" |
| "crypto/x509" |
| "fmt" |
| "testing" |
| ) |
| |
| func TestEd25519Wycheproof(t *testing.T) { |
| file := "ed25519_test.json" |
| var testdata wycheproof.EddsaVerifySchemaV1Json |
| wycheproof.LoadVectorFile(t, file, &testdata) |
| |
| parseSPKIPub := func(p []byte) (ed25519.PublicKey, error) { |
| pubKeyAny, err := x509.ParsePKIXPublicKey(p) |
| if err != nil { |
| return nil, err |
| } |
| pub, ok := pubKeyAny.(ed25519.PublicKey) |
| if !ok { |
| return nil, fmt.Errorf("unexpected key type %T", pubKeyAny) |
| } |
| return pub, nil |
| } |
| |
| for tgIdx, tg := range testdata.TestGroups { |
| pubkey, err := parseSPKIPub(wycheproof.MustDecodeHex(tg.PublicKeyDer)) |
| if err != nil { |
| t.Fatalf("test group %d invalid DER encoded public key: %v", tgIdx+1, err) |
| } |
| |
| for _, tv := range tg.Tests { |
| t.Run(wycheproof.TestName(file, tv), func(t *testing.T) { |
| t.Parallel() |
| |
| got := ed25519.Verify( |
| pubkey, wycheproof.MustDecodeHex(tv.Msg), wycheproof.MustDecodeHex(tv.Sig)) |
| want := wycheproof.ShouldPass(t, tv.Result, tv.Flags, nil) |
| if got != want { |
| t.Errorf("Verify wanted success: %t", want) |
| } |
| }) |
| } |
| } |
| } |