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  }