github.com/dusk-network/dusk-crypto@v0.1.3/rangeproof/generators/generator.go (about) 1 package generator 2 3 import ( 4 ristretto "github.com/bwesterb/go-ristretto" 5 ) 6 7 // This package will generate the generators for the pedersens and the bulletproof 8 9 // Generator holds the information to generate a set of points 10 // based on an initial byte slice; data 11 type Generator struct { 12 data []byte 13 Bases []ristretto.Point 14 } 15 16 // New will generate a generator which 17 // will use data to generate `n` points 18 func New(data []byte) *Generator { 19 return &Generator{ 20 data: data, 21 Bases: []ristretto.Point{}, 22 } 23 } 24 25 //Clear will clear all of the Bases 26 // but leave the counter as is 27 func (g *Generator) Clear() { 28 g.Bases = []ristretto.Point{} 29 } 30 31 // Iterate will generate a new point using 32 // the previous point's bytes as a seed or the original 33 // nonce data, if no previous point is available 34 func (g *Generator) Iterate() ristretto.Point { 35 36 p := ristretto.Point{} 37 38 if len(g.Bases) == 0 { 39 p.Derive(g.data) 40 return p 41 } 42 43 prevPoint := g.Bases[len(g.Bases)-1] 44 p.Derive(prevPoint.Bytes()) 45 46 return p 47 } 48 49 // Compute will generate num amount of points, which will act as point generators 50 // using the initial data. 51 func (g *Generator) Compute(num uint32) { 52 53 for i := uint32(0); i < num; i++ { 54 g.Bases = append(g.Bases, g.Iterate()) 55 } 56 57 }