Skip to content
Merged
Show file tree
Hide file tree
Changes from 56 commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
75197be
chore: move tinyfield to smallfield package
ivokub Nov 24, 2024
46a8757
feat: autogenerate field when requested
ivokub Jan 31, 2025
0102726
feat: automate small field imports
ivokub Nov 25, 2024
8710ad3
feat: compile constraints for field implementations
ivokub Jan 31, 2025
406ee4a
fix: generate backends later
ivokub Jan 31, 2025
82fa2ba
chore: generate
ivokub Nov 25, 2024
1d0c350
feat: support babybear in builders
ivokub Nov 25, 2024
c78329f
feat: typed parameter in constraint template
ivokub Mar 31, 2025
09c22d5
chore: go generate
ivokub Mar 31, 2025
f1dc112
feat: make constraint system interfaces generic
ivokub Mar 31, 2025
cf1f1be
feat: add generic Element type
ivokub Mar 31, 2025
bd20da1
feat: make marhaling type parameter aware
ivokub Mar 31, 2025
b99aa3b
test: use concrete coefficient type in test
ivokub Mar 31, 2025
48deec4
feat: make frontend interfaces generic
ivokub Mar 31, 2025
4edaf21
feat: keep default NewBuilder over U64
ivokub Mar 31, 2025
422befe
feat: make R1CS builder generic
ivokub Mar 31, 2025
550eae9
test: use concrete U64 element in R1CS frontend tests
ivokub Mar 31, 2025
02f2d70
feat: make SCS frontend generic
ivokub Mar 31, 2025
b89d517
feat: make assertions specific to U64
ivokub Mar 31, 2025
6d347c9
feat: make test engine parametric
ivokub Mar 31, 2025
c3d3748
feat: make backend generic aware (but fix with U64)
ivokub Mar 31, 2025
ef1da5d
refactor: use logderive table through interface to avoid type parameter
ivokub Mar 31, 2025
c7724df
refactor: use parametric definition of ConstraintSystem
ivokub Mar 31, 2025
fbffc04
test: update regression test #1045
ivokub Mar 31, 2025
645668a
test: add element parametric init test
ivokub Mar 31, 2025
14a5f0b
fix: generic debug table
ivokub Mar 31, 2025
07fe4ff
fix: specific Element
ivokub Mar 31, 2025
50a473f
chore: go generate
ivokub Mar 31, 2025
22f109b
feat: add small field asserter
ivokub Mar 31, 2025
5fbcf39
feat: add U32 compiler and builder separately
ivokub Mar 31, 2025
9e3385b
test: generate r1cs test to corresponding type
ivokub Mar 31, 2025
f9f43d5
refactor: make the default ConstraintSystem to be U64
ivokub Apr 1, 2025
cdf2710
refactor: code generate default constraint system on U64
ivokub Apr 1, 2025
a60a5c3
chore: go generate
ivokub Apr 1, 2025
7c514a0
refactor: use default U64 constraint system in gadgets
ivokub Apr 1, 2025
1180ee9
fix: assume tinyfield is U64 for now
ivokub Apr 1, 2025
32b7a85
fix: linter weak rand
ivokub Apr 1, 2025
0e517de
test: remove non-native test over small field (other PR)
ivokub Apr 1, 2025
11e73d6
fix: r1cs determinism test
ivokub Apr 1, 2025
4650434
perf: avoid function call in super-fast-paths
ivokub Apr 1, 2025
0de2c50
feat: add small field witness parsing and marshal
ivokub Apr 10, 2025
a4b574e
feat: add koalabear support
ivokub Apr 10, 2025
e85ff39
chore: go generate
ivokub Apr 10, 2025
c645db7
feat: add generic compile method for more convenient switching
ivokub Apr 10, 2025
96f4939
feat: make scs.NewBuilder generic
ivokub Apr 10, 2025
11da0c7
docs: document scs.NewBuilder
ivokub Apr 10, 2025
2cc3f38
test: use generic compile method in compiled test
ivokub Apr 10, 2025
c55c1d0
feat: support koalabear when initializing builders
ivokub Apr 10, 2025
4f18e53
test: add tests for small field compile and solve
ivokub Apr 10, 2025
9802f40
test: edge case Element
ivokub Apr 10, 2025
5cae078
test: fits element
ivokub Apr 10, 2025
58a24a7
test: new element edge cases
ivokub Apr 10, 2025
316f81e
Merge branch 'master' into feat/clean-generic-element
ivokub Apr 10, 2025
c9e4653
test: use correct builder for r1cs
ivokub Apr 10, 2025
a2193de
test: type constrain for test
ivokub Apr 10, 2025
8962903
fix: typo
ivokub Apr 10, 2025
9fdabaa
chore: update go.mod
ivokub Apr 11, 2025
a70477e
feat: use U32 for tinyfield
ivokub Apr 11, 2025
a7a6885
docs: use helpful error
ivokub Apr 11, 2025
70d80ce
test: use U32 for permuter test
ivokub Apr 11, 2025
809ee5e
docs: now all builders support commitment
ivokub Apr 11, 2025
337c864
Merge branch 'master' into feat/clean-generic-element
ivokub Apr 13, 2025
03b269d
refactor: use IsSmallField helper
ivokub Apr 13, 2025
eff3acb
chore: go mod update
ivokub Apr 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 52 additions & 3 deletions backend/witness/vector.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ import (
fr_bn254 "github.com/consensys/gnark-crypto/ecc/bn254/fr"
fr_bw6633 "github.com/consensys/gnark-crypto/ecc/bw6-633/fr"
fr_bw6761 "github.com/consensys/gnark-crypto/ecc/bw6-761/fr"
"github.com/consensys/gnark/internal/tinyfield"
"github.com/consensys/gnark-crypto/field/babybear"
"github.com/consensys/gnark-crypto/field/koalabear"
"github.com/consensys/gnark/internal/smallfields/tinyfield"
"github.com/consensys/gnark/internal/utils"
)

Expand All @@ -37,9 +39,14 @@ func newVector(field *big.Int, size int) (any, error) {
default:
if field.Cmp(tinyfield.Modulus()) == 0 {
return make(tinyfield.Vector, size), nil
} else {
return nil, errors.New("unsupported modulus")
}
if field.Cmp(babybear.Modulus()) == 0 {
return make(babybear.Vector, size), nil
}
if field.Cmp(koalabear.Modulus()) == 0 {
return make(koalabear.Vector, size), nil
}
return nil, errors.New("unsupported modulus")
}
}

Expand Down Expand Up @@ -77,6 +84,14 @@ func newFrom(from any, n int) (any, error) {
a := make(tinyfield.Vector, n)
copy(a, wt)
return a, nil
case babybear.Vector:
a := make(babybear.Vector, n)
copy(a, wt)
return a, nil
case koalabear.Vector:
a := make(koalabear.Vector, n)
copy(a, wt)
return a, nil
default:
return nil, errors.New("unsupported modulus")
}
Comment thread
ivokub marked this conversation as resolved.
Expand All @@ -100,6 +115,10 @@ func leafType(v any) reflect.Type {
return reflect.TypeOf(fr_bw6633.Element{})
case tinyfield.Vector:
return reflect.TypeOf(tinyfield.Element{})
case babybear.Vector:
return reflect.TypeOf(babybear.Element{})
case koalabear.Vector:
return reflect.TypeOf(koalabear.Element{})
default:
panic("invalid input")
}
Expand Down Expand Up @@ -155,6 +174,18 @@ func set(v any, index int, value any) error {
}
_, err := pv[index].SetInterface(value)
return err
case babybear.Vector:
if index >= len(pv) {
return errors.New("out of bounds")
}
_, err := pv[index].SetInterface(value)
return err
case koalabear.Vector:
if index >= len(pv) {
return errors.New("out of bounds")
}
_, err := pv[index].SetInterface(value)
return err
default:
panic("invalid input")
}
Expand Down Expand Up @@ -219,6 +250,20 @@ func iterate(v any) chan any {
}
close(chValues)
}()
case babybear.Vector:
go func() {
for i := 0; i < len(pv); i++ {
chValues <- &(pv)[i]
}
close(chValues)
}()
case koalabear.Vector:
go func() {
for i := 0; i < len(pv); i++ {
chValues <- &(pv)[i]
}
close(chValues)
}()
default:
panic("invalid input")
}
Expand All @@ -243,6 +288,10 @@ func resize(v any, n int) any {
return make(fr_bw6633.Vector, n)
case tinyfield.Vector:
return make(tinyfield.Vector, n)
case babybear.Vector:
return make(babybear.Vector, n)
case koalabear.Vector:
return make(koalabear.Vector, n)
default:
panic("invalid input")
}
Expand Down
14 changes: 13 additions & 1 deletion backend/witness/witness.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,11 @@ import (
fr_bn254 "github.com/consensys/gnark-crypto/ecc/bn254/fr"
fr_bw6633 "github.com/consensys/gnark-crypto/ecc/bw6-633/fr"
fr_bw6761 "github.com/consensys/gnark-crypto/ecc/bw6-761/fr"
"github.com/consensys/gnark-crypto/field/babybear"
"github.com/consensys/gnark-crypto/field/koalabear"
"github.com/consensys/gnark/debug"
"github.com/consensys/gnark/frontend/schema"
"github.com/consensys/gnark/internal/tinyfield"
"github.com/consensys/gnark/internal/smallfields/tinyfield"
)

var ErrInvalidWitness = errors.New("invalid witness")
Expand Down Expand Up @@ -189,6 +191,10 @@ func (w *witness) WriteTo(wr io.Writer) (n int64, err error) {
m, err = t.WriteTo(wr)
case tinyfield.Vector:
m, err = t.WriteTo(wr)
case babybear.Vector:
m, err = t.WriteTo(wr)
case koalabear.Vector:
m, err = t.WriteTo(wr)
default:
panic("invalid input")
}
Expand Down Expand Up @@ -235,6 +241,12 @@ func (w *witness) ReadFrom(r io.Reader) (n int64, err error) {
case tinyfield.Vector:
m, err = t.ReadFrom(r)
w.vector = t
case babybear.Vector:
m, err = t.ReadFrom(r)
w.vector = t
case koalabear.Vector:
m, err = t.ReadFrom(r)
w.vector = t
default:
panic("invalid input")
}
Expand Down
219 changes: 219 additions & 0 deletions constraint/babybear/coeff.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading