1 package rsa
2
3 import (
4 "crypto/rand"
5 "crypto/rsa"
6 "math/big"
7 "testing"
8 )
9
10 func marshalTestSignShare(share SignShare, t *testing.T) {
11 marshall, err := share.MarshalBinary()
12 if err != nil {
13 t.Fatal(err)
14 }
15
16 share2 := SignShare{}
17 err = share2.UnmarshalBinary(marshall)
18 if err != nil {
19 t.Fatal(err)
20 }
21
22 if share.Players != share2.Players {
23 t.Fatalf("Players did not match, expected %d, found %d", share.Players, share2.Players)
24 }
25
26 if share.Threshold != share2.Threshold {
27 t.Fatalf("Threshold did not match, expected %d, found %d", share.Threshold, share2.Threshold)
28 }
29
30 if share.Index != share2.Index {
31 t.Fatalf("Index did not match, expected %d, found %d", share.Index, share2.Index)
32 }
33
34 if share.xi.Cmp(share2.xi) != 0 {
35 t.Fatalf("si did not match, expected %v, found %v", share.xi.Bytes(), share2.xi.Bytes())
36 }
37 }
38
39 func unmarshalSignShareTest(t *testing.T, input []byte) {
40 share := SignShare{}
41 err := share.UnmarshalBinary(input)
42 if err == nil {
43 t.Fatalf("unmarshall succeeded when it shouldn't have")
44 }
45 }
46
47 func TestMarshallSignShare(t *testing.T) {
48 marshalTestSignShare(SignShare{
49 xi: big.NewInt(10),
50 Index: 30,
51 Players: 16,
52 Threshold: 18,
53 }, t)
54
55 marshalTestSignShare(SignShare{
56 xi: big.NewInt(0),
57 Index: 0,
58 Players: 0,
59 Threshold: 0,
60 }, t)
61
62 unmarshalSignShareTest(t, []byte{})
63 unmarshalSignShareTest(t, []byte{0, 0, 0})
64 unmarshalSignShareTest(t, []byte{0, 0, 0, 0, 0, 0, 0, 0})
65 unmarshalSignShareTest(t, []byte{0, 0, 0, 0, 0, 0, 0, 1})
66 unmarshalSignShareTest(t, []byte{0, 0, 0, 0, 0, 0, 0, 2, 1})
67 }
68
69 func TestMarshallFullSignShare(t *testing.T) {
70 const players = 3
71 const threshold = 2
72 const bits = 4096
73
74 key, err := rsa.GenerateKey(rand.Reader, bits)
75 if err != nil {
76 t.Fatal(err)
77 }
78 keys, err := Deal(rand.Reader, players, threshold, key, false)
79 if err != nil {
80 t.Fatal(err)
81 }
82 for _, share := range keys {
83 keyshare, err := share.Sign(rand.Reader, &key.PublicKey, []byte("Cloudflare!"), true)
84 if err != nil {
85 t.Fatal(err)
86 }
87 _, err = keyshare.MarshalBinary()
88 if err != nil {
89 t.Fatal(err)
90 }
91 }
92 }
93
View as plain text