commitment_test.go raw

   1  package gnarlring
   2  
   3  import "testing"
   4  
   5  func TestChildCommitment(t *testing.T) {
   6  	pk, _ := NTRUKeyGen()
   7  	cc := NewChildCommitment(5, pk, nil) // nil rng uses crypto/rand via Default
   8  
   9  	if cc.Index != 5 {
  10  		t.Fatalf("index = %d, want 5", cc.Index)
  11  	}
  12  	if !Equal(cc.PubKey, pk.H) {
  13  		t.Fatal("PubKey mismatch")
  14  	}
  15  	if IsZero(cc.W) {
  16  		t.Fatal("W is zero — unlikely for fresh z")
  17  	}
  18  }
  19  
  20  func TestAggregatedCommitment(t *testing.T) {
  21  	pk, _ := NTRUKeyGen()
  22  	ac := NewAggregatedCommitment()
  23  
  24  	cc := NewChildCommitment(0, pk, nil)
  25  	if !ac.Add(cc) {
  26  		t.Fatal("Add failed")
  27  	}
  28  	if ac.Count != 1 {
  29  		t.Fatalf("Count = %d, want 1", ac.Count)
  30  	}
  31  	if ac.Add(cc) {
  32  		t.Fatal("Add should reject duplicate")
  33  	}
  34  
  35  	ac.Remove(0)
  36  	if ac.Count != 0 {
  37  		t.Fatalf("Count after remove = %d, want 0", ac.Count)
  38  	}
  39  }
  40  
  41  func TestAggregatedTarget(t *testing.T) {
  42  	pk, _ := NTRUKeyGen()
  43  	ac := NewAggregatedCommitment()
  44  
  45  	for i := 0; i < N; i++ {
  46  		cc := NewChildCommitment(i, pk, nil)
  47  		ac.Add(cc)
  48  	}
  49  
  50  	target1 := ac.Target([]byte("hello"), 0)
  51  	target2 := ac.Target([]byte("hello"), 0)
  52  	if !Equal(target1, target2) {
  53  		t.Fatal("target not deterministic")
  54  	}
  55  
  56  	// Different message → different target.
  57  	target3 := ac.Target([]byte("world"), 0)
  58  	if Equal(target1, target3) {
  59  		t.Fatal("different messages give same target")
  60  	}
  61  
  62  	// Different epoch → different target.
  63  	target4 := ac.Target([]byte("hello"), 1)
  64  	if Equal(target1, target4) {
  65  		t.Fatal("different epochs give same target")
  66  	}
  67  }
  68  
  69  func TestWCompressed(t *testing.T) {
  70  	pk, _ := NTRUKeyGen()
  71  	ac := NewAggregatedCommitment()
  72  
  73  	for i := 0; i < N; i++ {
  74  		cc := NewChildCommitment(i, pk, nil)
  75  		ac.Add(cc)
  76  	}
  77  
  78  	wc1 := ac.WCompressed(0)
  79  	wc2 := ac.WCompressed(0)
  80  	if len(wc1) != 27 {
  81  		t.Fatalf("WCompressed len = %d, want 27", len(wc1))
  82  	}
  83  	if string(wc1) != string(wc2) {
  84  		t.Fatal("WCompressed not deterministic")
  85  	}
  86  }
  87