diff options
-rw-r--r-- | nizk/vickrey_test.go | 93 |
1 files changed, 42 insertions, 51 deletions
diff --git a/nizk/vickrey_test.go b/nizk/vickrey_test.go index b5b11ba..282619d 100644 --- a/nizk/vickrey_test.go +++ b/nizk/vickrey_test.go @@ -1,7 +1,7 @@ package nizk import ( - "fmt" + "log" "math/rand" "slices" "strings" @@ -20,6 +20,9 @@ func runVickrey(n int, bitlength int, tb testing.TB) { } max := slices.Max(vals) max_idx := slices.Index(vals, max) + if max_idx < len(vals)-1 && max == slices.Max(vals[max_idx+1:]) { + max_idx = -1 + } var bits = make([][]*Bit, n) for i, b := range vals { @@ -39,11 +42,46 @@ func runVickrey(n int, bitlength int, tb testing.TB) { winner := -1 result := 0 + checkWinner := func(Z *Point, i int, idx int) { + Z2 := Z.Div(Zs[i]) + xu := Curve.Identity() + xl := Curve.Identity() + + for k := range n { + if k < i { + xu = xu.Mul(Xs[k]) + } else if k > i { + xl = xl.Div(Xs[k]) + } + } + xu = xu.Exp(bits[i][idx].Stage.x) + xl = xl.Exp(bits[i][idx].Stage.x) + X2 := xu.Mul(xl) + + if X2.Equal(Z2) { + tb.Logf("equal by value") + winner = i + } + + if winner < 0 { + // BUG! TODO! + s1 := X2.String() + s2 := Z2.String() + if strings.HasPrefix(s1, s2[:len(s2)-2]) { + log.Printf("BUG! TODO! equal only by string") + winner = i + } + + } + tb.Logf("testing max_idx %d, i %d, bit %d:\n%v vs %v", max_idx, i, idx, X2, Z2) + } + for idx := range bitlength { for i := range n { c[i] = bits[i][idx].StageCommit() Xs[i] = c[i].X } + if instage1 { var wg sync.WaitGroup wg.Add(n) @@ -71,29 +109,7 @@ func runVickrey(n int, bitlength int, tb testing.TB) { // Winner test if !lost[i] { - Z2 := Z.Div(Zs[i]) - X2 := Curve.Identity() - - for k := range n { - if i != k { - X2 = X2.Mul(Xs[k]) - } - } - X2 = X2.Exp(bits[i][idx].Stage.x) - // BUG TODO - { - b1 := X2.String() - b2 := Z2.String() - if strings.HasPrefix(b2, b1[:len(b1)-4]) { - fmt.Println("stage1, winner by string") - winner = i - } - } - if X2.Equal(Z2) { - fmt.Println("stage1, winner by equal") - winner = i - } - tb.Logf("stage 1: testing max_idx %d, i %d, bit %d:\n%v vs %v", max_idx, i, idx, X2, Z2) + checkWinner(Z, i, idx) } } result |= 1 << (bitlength - 1 - idx) @@ -131,31 +147,7 @@ func runVickrey(n int, bitlength int, tb testing.TB) { // Winner test if !lost[i] && winner < 0 { - Z2 := Z.Div(Zs[i]) - X2 := Curve.Identity() - - for k := range n { - if i != k { - X2 = X2.Mul(Xs[k]) - } - } - X2 = X2.Exp(bits[i][idx].Stage.x) - - // BUG TODO - { - b1 := X2.String() - b2 := Z2.String() - if strings.HasPrefix(b2, b1[:len(b1)-4]) { - fmt.Println("STAGE2, winner by string") - winner = i - } - } - if X2.Equal(Z2) { - fmt.Println("STAGE2, winner by equal") - - winner = i - } - tb.Logf("STAGE 2: testing max_idx %d, i %d, bit %d:\n%v vs %v", max_idx, i, idx, X2, Z2) + checkWinner(Z, i, idx) } } result |= 1 << (bitlength - 1 - idx) @@ -167,7 +159,6 @@ func runVickrey(n int, bitlength int, tb testing.TB) { if max_idx != winner { tb.Fatalf("wrong winner, max_idx: %d vs winner: %d val %08b\nvals=%08b", max_idx, winner, max, vals) } - fmt.Printf("winner: %d, max: %d, \nvals: %08b\n", winner, max, vals) } -func TestVickrey4on6bit(t *testing.T) { runVickrey(4, 6, t) } +func TestVickrey100on16bit(t *testing.T) { runVickrey(100, 16, t) } |