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 }