@@ -21,6 +21,7 @@ import (
2121 "github.com/getamis/alice/crypto/birkhoffinterpolation"
2222 "github.com/getamis/alice/crypto/ecpointgrouplaw"
2323 "github.com/getamis/alice/crypto/elliptic"
24+ "github.com/getamis/alice/crypto/polynomial"
2425 "github.com/getamis/alice/crypto/tss"
2526 "github.com/getamis/alice/crypto/utils"
2627 "github.com/getamis/alice/internal/message/types"
@@ -38,83 +39,120 @@ func TestSigner(t *testing.T) {
3839
3940var _ = Describe ("Signer" , func () {
4041 var (
41- curve = elliptic .Ed25519 ()
42- )
42+ RumTime = 10
43+ curve = elliptic .Ed25519 ()
44+ poly , _ = polynomial .RandomPolynomial (curve .Params ().N , 2 )
45+ x1 , _ = utils .RandomPositiveInt (curve .Params ().N )
46+ x2 , _ = utils .RandomPositiveInt (curve .Params ().N )
47+ x3 , _ = utils .RandomPositiveInt (curve .Params ().N )
48+ share1 = poly .Evaluate (x1 )
49+ share2 = poly .Evaluate (x2 )
50+ share3 = poly .Evaluate (x3 )
51+ secrertRandomKey = poly .Evaluate (big0 )
4352
44- DescribeTable ("It should be OK" , func (ss [][]* big.Int , privateKey * big.Int ) {
45- expPublic := ecpointgrouplaw .ScalarBaseMult (curve , privateKey )
46- threshold := len (ss )
47- message := []byte ("8077818" )
48- signers , listeners := newSigners (curve , expPublic , ss , message )
49- doneChs := make ([]chan struct {}, threshold )
50- i := 0
51- for _ , l := range listeners {
52- doneChs [i ] = make (chan struct {})
53- doneCh := doneChs [i ]
54- l .On ("OnStateChanged" , types .StateInit , types .StateDone ).Run (func (args mock.Arguments ) {
55- close (doneCh )
56- }).Once ()
57- i ++
58- }
53+ setx1 , _ = new (big.Int ).SetString ("2254765913981550676205803762478430869696580688700958727495894224115312987764" , 10 )
54+ setx2 , _ = new (big.Int ).SetString ("2117636074604900758115075527580492494720639688970891834155177238392086845382" , 10 )
55+ setx3 , _ = new (big.Int ).SetString ("6414582964050248729324272790247195316284712038021768098875147472012178712076" , 10 )
56+ setShare1 , _ = new (big.Int ).SetString ("3675788498585450082991846428007326057826754636663877385528274415846839676857" , 10 )
57+ setShare2 , _ = new (big.Int ).SetString ("1522795425006476177538987458185716386773973361216994141828318603466392185301" , 10 )
58+ setShare3 , _ = new (big.Int ).SetString ("4575846830523611786637644129807785488887694553004765055615792711279484061401" , 10 )
59+ xcoord1 , _ = new (big.Int ).SetString ("13303072567237052328013834338380099174471808636153533034015575804719580433195" , 10 )
60+ ycoord1 , _ = new (big.Int ).SetString ("16964052623936448625187294284159857344364737590067812676140890490183700057118" , 10 )
61+ pubKey , _ = ecpointgrouplaw .NewECPoint (curve , xcoord1 , ycoord1 )
62+ )
5963
60- for _ , s := range signers {
61- s .Start ()
62- }
64+ DescribeTable ("It should be OK" , func (ss [][]* big.Int , privateKey * big.Int , pubKey * ecpointgrouplaw.ECPoint ) {
65+ for i := 0 ; i < RumTime ; i ++ {
66+ expPublic := pubKey
67+ if privateKey != nil {
68+ expPublic = ecpointgrouplaw .ScalarBaseMult (curve , privateKey )
69+ }
70+ threshold := len (ss )
71+ message := []byte ("8077818" )
72+ signers , listeners := newSigners (curve , expPublic , ss , message )
73+ doneChs := make ([]chan struct {}, threshold )
74+ i := 0
75+ for _ , l := range listeners {
76+ doneChs [i ] = make (chan struct {})
77+ doneCh := doneChs [i ]
78+ l .On ("OnStateChanged" , types .StateInit , types .StateDone ).Run (func (args mock.Arguments ) {
79+ close (doneCh )
80+ }).Once ()
81+ i ++
82+ }
6383
64- for i := 0 ; i < threshold ; i ++ {
65- <- doneChs [ i ]
66- }
84+ for _ , s := range signers {
85+ s . Start ()
86+ }
6787
68- // Build public key
69- var R * ecpointgrouplaw.ECPoint
70- var s * big.Int
71- for _ , signer := range signers {
72- signer .Stop ()
73- result , err := signer .GetResult ()
74- Expect (err ).Should (BeNil ())
75- // All R and S should be the same
76- if R != nil {
77- Expect (R .Equal (result .R )).Should (BeTrue ())
78- Expect (s ).Should (Equal (result .S ))
79- } else {
80- R = result .R
81- s = result .S
88+ for i := 0 ; i < threshold ; i ++ {
89+ <- doneChs [i ]
8290 }
83- }
84- edwardPubKey := edwards .NewPublicKey (edwards .Edwards (), expPublic .GetX (), expPublic .GetY ())
85- test1 := ecpointEncoding (R )
86- test2 := * test1
87- r := new (big.Int ).SetBytes (utils .ReverseByte (test2 [:]))
8891
89- Expect (edwards .Verify (edwardPubKey , message , r , s )).Should (BeTrue ())
90- for _ , l := range listeners {
91- l .AssertExpectations (GinkgoT ())
92+ // Build public key
93+ var R * ecpointgrouplaw.ECPoint
94+ var s * big.Int
95+ for _ , signer := range signers {
96+ signer .Stop ()
97+ result , err := signer .GetResult ()
98+ Expect (err ).Should (BeNil ())
99+ // All R and S should be the same
100+ if R != nil {
101+ Expect (R .Equal (result .R )).Should (BeTrue ())
102+ Expect (s ).Should (Equal (result .S ))
103+ } else {
104+ R = result .R
105+ s = result .S
106+ }
107+ }
108+ edwardPubKey := edwards .NewPublicKey (edwards .Edwards (), expPublic .GetX (), expPublic .GetY ())
109+ test1 := ecpointEncoding (R )
110+ test2 := * test1
111+ r := new (big.Int ).SetBytes (utils .ReverseByte (test2 [:]))
112+ verifyResult := edwards .Verify (edwardPubKey , message , r , s )
113+ Expect (verifyResult ).Should (BeTrue ())
114+ if ! verifyResult {
115+ break
116+ }
117+ for _ , l := range listeners {
118+ l .AssertExpectations (GinkgoT ())
119+ }
92120 }
93121 },
94122 Entry ("(x-cooord, share, rank):f(x) = 2x+100" , [][]* big.Int {
95123 {big .NewInt (1 ), big .NewInt (102 ), big .NewInt (0 )},
96124 {big .NewInt (2 ), big .NewInt (104 ), big .NewInt (0 )},
97125 {big .NewInt (8 ), big .NewInt (116 ), big .NewInt (0 )},
98- }, big .NewInt (100 )),
126+ }, big .NewInt (100 ), nil ),
99127 Entry ("(x-cooord, share, rank):f(x) = 2x+100" , [][]* big.Int {
100128 {big .NewInt (1 ), big .NewInt (102 ), big .NewInt (0 )},
101129 {big .NewInt (2 ), big .NewInt (104 ), big .NewInt (0 )},
102- }, big .NewInt (100 )),
130+ }, big .NewInt (100 ), nil ),
103131 Entry ("(x-cooord, share, rank):f(x) = x^2+5*x+1109" , [][]* big.Int {
104132 {big .NewInt (1 ), big .NewInt (1115 ), big .NewInt (0 )},
105133 {big .NewInt (2 ), big .NewInt (1123 ), big .NewInt (0 )},
106134 {big .NewInt (50 ), big .NewInt (3859 ), big .NewInt (0 )},
107- }, big .NewInt (1109 )),
135+ }, big .NewInt (1109 ), nil ),
108136 Entry ("(x-cooord, share, rank):f(x) = x^2+3*x+5555" , [][]* big.Int {
109137 {big .NewInt (1 ), big .NewInt (5559 ), big .NewInt (0 )},
110138 {big .NewInt (2 ), big .NewInt (5565 ), big .NewInt (0 )},
111139 {big .NewInt (50 ), big .NewInt (103 ), big .NewInt (1 )},
112- }, big .NewInt (5555 )),
140+ }, big .NewInt (5555 ), nil ),
113141 Entry ("(x-cooord, share, rank):f(x) = 2*x^2+3*x+1111" , [][]* big.Int {
114142 {big .NewInt (1 ), big .NewInt (1116 ), big .NewInt (0 )},
115143 {big .NewInt (2 ), big .NewInt (4 ), big .NewInt (2 )},
116144 {big .NewInt (50 ), big .NewInt (203 ), big .NewInt (1 )},
117- }, big .NewInt (1111 )),
145+ }, big .NewInt (1111 ), nil ),
146+ Entry ("(x-cooord, share, rank):f(x) = random" , [][]* big.Int {
147+ {x1 , share1 , big .NewInt (0 )},
148+ {x2 , share2 , big .NewInt (0 )},
149+ {x3 , share3 , big .NewInt (0 )},
150+ }, secrertRandomKey , nil ),
151+ FEntry ("(x-cooord, share, rank):" , [][]* big.Int {
152+ {setx1 , setShare1 , big .NewInt (0 )},
153+ {setx2 , setShare2 , big .NewInt (0 )},
154+ {setx3 , setShare3 , big .NewInt (0 )},
155+ }, nil , pubKey ),
118156 )
119157})
120158
0 commit comments