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) }