aboutsummaryrefslogtreecommitdiff
path: root/nizk/vickrey_test.go
diff options
context:
space:
mode:
authorÖzgür Kesim <oec@kesim.org>2024-11-17 21:28:20 +0100
committerÖzgür Kesim <oec@kesim.org>2024-11-17 21:28:20 +0100
commit4edd858503b7c59c29465961bc38d079aeb68c85 (patch)
treead9d736e36cb8f157b88bef0ea1091ea439b729b /nizk/vickrey_test.go
parent85de36ea107f8b7a99487a2fffc31d11c8862dfc (diff)
wip: winning detect works, albeit with a workaround
Diffstat (limited to 'nizk/vickrey_test.go')
-rw-r--r--nizk/vickrey_test.go93
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) }