github.com/0chain/gosdk@v1.17.11/core/zcncrypto/ed25519_test.go (about)

     1  package zcncrypto
     2  
     3  import (
     4  	"encoding/hex"
     5  	"testing"
     6  
     7  	"github.com/0chain/errors"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  var edverifyPublickey = `b987071c14695caf340ea11560f5a3cb76ad1e709803a8b339826ab3964e470a`
    12  var edsignPrivatekey = `62fc118369fb9dd1fa6065d4f8f765c52ac68ad5aced17a1e5c4f8b4301a9469b987071c14695caf340ea11560f5a3cb76ad1e709803a8b339826ab3964e470a`
    13  var eddata = `TEST`
    14  
    15  //var edexpectedHash = `f4f08e9367e133dc42a4b9c9c665a9efbd4bf15db14d49c6ec51d0dc4c437ffb`
    16  var edWallet *Wallet
    17  
    18  func TestEd25519GenerateKeys(t *testing.T) {
    19  	sigScheme := NewSignatureScheme("ed25519")
    20  	switch sigScheme.(type) {
    21  	case SignatureScheme:
    22  		// pass
    23  	default:
    24  		t.Fatalf("Signature scheme invalid")
    25  	}
    26  	w, err := sigScheme.GenerateKeys()
    27  	if err != nil {
    28  		t.Fatalf("Generate keys failed %s", errors.Top(err))
    29  	}
    30  	if w.ClientID == "" || w.ClientKey == "" || len(w.Keys) != 1 || w.Mnemonic == "" {
    31  		t.Fatalf("Invalid keys generated")
    32  	}
    33  	edWallet = w
    34  }
    35  
    36  func TestEd25519SignAndVerify(t *testing.T) {
    37  	signScheme := NewSignatureScheme("ed25519")
    38  	// Check failure without private key
    39  	_, err := signScheme.Sign(eddata)
    40  	if err == nil {
    41  		t.Fatalf("Sign passed without private key")
    42  	}
    43  	// Sign with valid private key
    44  	err = signScheme.SetPrivateKey(edsignPrivatekey)
    45  	require.NoError(t, err)
    46  
    47  	signature, err := signScheme.Sign(hex.EncodeToString([]byte(eddata)))
    48  	if err != nil {
    49  		t.Fatalf("ed25519 signing failed")
    50  	}
    51  	verifyScheme := NewSignatureScheme("ed25519")
    52  	err = verifyScheme.SetPublicKey(edverifyPublickey)
    53  	require.NoError(t, err)
    54  	if ok, err := verifyScheme.Verify(signature, hex.EncodeToString([]byte(eddata))); err != nil || !ok {
    55  		t.Fatalf("Verification failed\n")
    56  	}
    57  }
    58  
    59  func TestEd25519RecoveryKeys(t *testing.T) {
    60  	sigScheme := NewSignatureScheme("ed25519")
    61  	w, err := sigScheme.RecoverKeys(edWallet.Mnemonic)
    62  	if err != nil {
    63  		t.Fatalf("set Recover Keys failed")
    64  	}
    65  	if w.ClientID != edWallet.ClientID || w.ClientKey != edWallet.ClientKey {
    66  		t.Fatalf("Recover key didn't match with generated keys")
    67  	}
    68  }
    69  
    70  func BenchmarkE25519Signandverify(b *testing.B) {
    71  	sigScheme := NewSignatureScheme("ed25519")
    72  	err := sigScheme.SetPrivateKey(edsignPrivatekey)
    73  	require.NoError(b, err)
    74  	for i := 0; i < b.N; i++ {
    75  		signature, err := sigScheme.Sign(eddata)
    76  		if err != nil {
    77  			b.Fatalf("BLS signing failed")
    78  		}
    79  		verifyScheme := NewSignatureScheme("ed25519")
    80  		err = verifyScheme.SetPublicKey(edverifyPublickey)
    81  		require.NoError(b, err)
    82  		if ok, err := verifyScheme.Verify(signature, eddata); err != nil || !ok {
    83  			b.Fatalf("Verification failed\n")
    84  		}
    85  	}
    86  }