github.com/Finschia/ostracon@v1.1.5/crypto/ed25519/ed25519_test.go (about) 1 package ed25519_test 2 3 import ( 4 "encoding/hex" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 10 "github.com/Finschia/ostracon/crypto" 11 "github.com/Finschia/ostracon/crypto/ed25519" 12 ) 13 14 func TestSignAndValidateEd25519(t *testing.T) { 15 16 privKey := ed25519.GenPrivKey() 17 pubKey := privKey.PubKey() 18 19 msg := crypto.CRandBytes(128) 20 sig, err := privKey.Sign(msg) 21 require.Nil(t, err) 22 23 // Test the signature 24 assert.True(t, pubKey.VerifySignature(msg, sig)) 25 26 // Mutate the signature, just one bit. 27 // TODO: Replace this with a much better fuzzer, tendermint/ed25519/issues/10 28 sig[7] ^= byte(0x01) 29 30 assert.False(t, pubKey.VerifySignature(msg, sig)) 31 } 32 33 func TestVRFProveAndVRFVerify(t *testing.T) { 34 35 privKey := ed25519.GenPrivKey() 36 pubKey := privKey.PubKey() 37 message, _ := hex.DecodeString("0000000000000000000000000000000000000000000000000000000000000000") 38 proof, err := privKey.VRFProve(message) 39 assert.Nil(t, err) 40 assert.NotNil(t, proof) 41 42 output, err := pubKey.VRFVerify(proof, message) 43 assert.Nil(t, err) 44 assert.NotNil(t, output) 45 46 // *** If the combination of (pubkey, message, proof) is incorrect *** 47 // invalid message 48 inValidMessage, _ := hex.DecodeString("0000000000000000000000000000000000000000000000000000000000000001") 49 _, err1 := pubKey.VRFVerify(proof, inValidMessage) 50 assert.Error(t, err1) 51 52 // invalid pubkey 53 invalidPrivKey := ed25519.GenPrivKey() 54 invalidPubkey := invalidPrivKey.PubKey() 55 _, err2 := invalidPubkey.VRFVerify(proof, message) 56 assert.Error(t, err2) 57 58 // invalid proof 59 invalidProof, _ := invalidPrivKey.VRFProve(message) 60 _, err3 := pubKey.VRFVerify(invalidProof, message) 61 assert.Error(t, err3) 62 }