github.com/dusk-network/dusk-crypto@v0.1.3/ringsig/blsag/blsag_test.go (about) 1 package blsag 2 3 import ( 4 "math/rand" 5 "testing" 6 7 ristretto "github.com/bwesterb/go-ristretto" 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestRingSig(t *testing.T) { 12 13 msg := []byte("hello world") 14 15 var privKey ristretto.Scalar 16 privKey.Rand() 17 mixin := []ristretto.Point{} 18 19 for i := 0; i < 5; i++ { 20 var ranPoint ristretto.Point 21 ranPoint.Rand() 22 mixin = append(mixin, ranPoint) 23 } 24 25 // Test we get the right number of elements back 26 rs := Sign(msg, mixin, privKey) 27 assert.Equal(t, len(mixin)+1, len(rs.S)) 28 assert.Equal(t, len(mixin)+1, len(rs.PubKeys)) 29 30 // Test we get back the same pubkeys 31 found := make(map[int]struct{}) 32 33 var signerPubKey ristretto.Point 34 signerPubKey.ScalarMultBase(&privKey) 35 36 for i, key := range rs.PubKeys { 37 for _, mix := range mixin { 38 if key.Equals(&mix) || key.Equals(&signerPubKey) { 39 found[i] = struct{}{} 40 } 41 } 42 } 43 assert.Equal(t, len(mixin)+1, len(found)) 44 45 } 46 47 func TestVerify(t *testing.T) { 48 49 for i := 0; i < 100; i++ { 50 msg := randBytes(i + 1) 51 var privKey ristretto.Scalar 52 privKey.Rand() 53 mixin := []ristretto.Point{} 54 55 for i := 0; i < 5; i++ { 56 var ranPoint ristretto.Point 57 ranPoint.Rand() 58 mixin = append(mixin, ranPoint) 59 } 60 61 // Test we get the right number of elements back 62 rs := Sign(msg, mixin, privKey) 63 64 // Test Verify 65 res := Verify(msg, rs) 66 assert.Equal(t, true, res) 67 68 // Wrong message 69 res = Verify(randBytes(5), rs) 70 assert.Equal(t, false, res) 71 } 72 73 } 74 75 //https://stackoverflow.com/a/31832326/5203311 76 const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 77 78 func randBytes(n int) []byte { 79 b := make([]byte, n) 80 for i := range b { 81 b[i] = letterBytes[rand.Intn(len(letterBytes))] 82 } 83 return b 84 }