aboutsummaryrefslogtreecommitdiff
path: root/nizk/stage2_test.go
blob: 3a2d51c3d1640a515cfd0fc146d8d5ff397dbb78 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package nizk

import (
	"testing"

	. "kesim.org/seal/common"
)

func TestStage2Simple1(t *testing.T) {
	id := Curve.RandomScalar()

	for _, lost := range []bool{true, false} {
		b1 := NewBit(id, !lost)
		c1 := b1.StageCommit()
		r1, _ := b1.RevealStage1()

		// Because the first index is a junction, any subsequent
		// combination of Bits must verify with 'lost' set to true
		// in the RevealStage2 calls.
		for _, s := range [][2]bool{
			{false, false},
			{true, false},
			{false, true},
			{true, true},
		} {
			b2 := NewBit(id, s[0])
			b3 := NewBit(id, s[1])
			b4 := NewBit(id, s[1]) // same as b3

			c2 := b2.StageCommit()
			c3 := b3.StageCommit()
			c4 := b4.StageCommit()

			r2, p2 := b2.RevealStage2(lost, b1)
			if !b2.Commitment.VerifyStage2(c1, c2, r1, r2, p2) {
				t.Fatalf("failed to verify b2: %t b3: %t bc2/b1", s[0], s[1])
			}

			r3, p3 := b3.RevealStage2(lost, b1)
			if !b3.Commitment.VerifyStage2(c1, c3, r1, r3, p3) {
				t.Fatalf("failed to verify b1: %t b3: %t bc3/b1", s[0], s[1])
			}

			r4, p4 := b4.RevealStage2(lost, b1)
			if !b4.Commitment.VerifyStage2(c1, c4, r1, r4, p4) {
				t.Fatalf("failed to verify b1: %t b4: %t bc4/b1", s[0], s[1])
			}
		}
	}
}

func bit2bit(bid uint) [4]*Bit {
	id := Curve.RandomScalar()

	return [4]*Bit{
		NewBit(id, (bid>>3)&1 != 0),
		NewBit(id, (bid>>2)&1 != 0),
		NewBit(id, (bid>>1)&1 != 0),
		NewBit(id, (bid>>0)&1 != 0),
	}
}

func TestStage2Complex(t *testing.T) {
	bits1 := 0b0101
	bits2 := 0b0010
	t.Logf("testing bits1: %b vs. bits2: %b", bits1, bits2)
}

func TestFromPaper(t *testing.T) {
	bid1 := 0b01010
	bid2 := 0b01001
	bid3 := 0b00111
	t.Logf("testing\n\tbits1: %04b\n\tbits2: %04b\n\tbits3: %04b", bid1, bid2, bid3)
}