github.com/kubri/kubri@v0.5.1-0.20240317001612-bda2aaef967e/pkg/crypto/ed25519/ed25519_test.go (about) 1 package ed25519_test 2 3 import ( 4 "crypto/x509" 5 "os" 6 "os/exec" 7 "path/filepath" 8 "testing" 9 10 "github.com/kubri/kubri/pkg/crypto/ed25519" 11 "github.com/kubri/kubri/pkg/crypto/internal/cryptotest" 12 ) 13 14 func TestEd25519(t *testing.T) { 15 cryptotest.Test(t, cryptotest.Implementation[ed25519.PrivateKey, ed25519.PublicKey]{ 16 NewPrivateKey: ed25519.NewPrivateKey, 17 MarshalPrivateKey: ed25519.MarshalPrivateKey, 18 UnmarshalPrivateKey: ed25519.UnmarshalPrivateKey, 19 Public: ed25519.Public, 20 MarshalPublicKey: ed25519.MarshalPublicKey, 21 UnmarshalPublicKey: ed25519.UnmarshalPublicKey, 22 Sign: ed25519.Sign, 23 Verify: ed25519.Verify, 24 }) 25 26 t.Run("OpenSSL", func(t *testing.T) { 27 if _, err := exec.LookPath("openssl"); err != nil { 28 t.Skip("openssl not in path") 29 } 30 31 priv, _ := ed25519.NewPrivateKey() 32 data := []byte("foo\nbar\nbaz") 33 sig, _ := ed25519.Sign(priv, data) 34 pub, _ := x509.MarshalPKIXPublicKey(ed25519.Public(priv)) 35 36 dir := t.TempDir() 37 os.WriteFile(filepath.Join(dir, "public.der"), pub, 0o600) 38 os.WriteFile(filepath.Join(dir, "data.txt"), data, 0o600) 39 os.WriteFile(filepath.Join(dir, "data.txt.sig"), sig, 0o600) 40 41 cmd := exec.Command("openssl", "pkeyutl", "-verify", "-pubin", "-inkey", "public.der", "-rawin", "-in", "data.txt", "-sigfile", "data.txt.sig") 42 cmd.Dir = dir 43 out, err := cmd.CombinedOutput() 44 if err != nil { 45 t.Fatal(err, string(out)) 46 } 47 t.Log(string(out)) 48 }) 49 }