Skip to content

Commit

Permalink
Merge pull request #235 from ConsenSys/witness-public-api
Browse files Browse the repository at this point in the history
feat: added witness.Public to return Public part of the witness vector
  • Loading branch information
gbotrel authored Jan 15, 2022
2 parents c2b22dd + bc0673a commit 58758e8
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 2 deletions.
31 changes: 31 additions & 0 deletions backend/witness/vector.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,34 @@ func newVector(curveID ecc.ID) (Vector, error) {
}
return w, nil
}

func newFrom(from Vector, n int) (Vector, error) {
switch wt := from.(type) {
case *witness_bn254.Witness:
a := make(witness_bn254.Witness, n)
copy(a, *wt)
return &a, nil
case *witness_bls12377.Witness:
a := make(witness_bls12377.Witness, n)
copy(a, *wt)
return &a, nil
case *witness_bls12381.Witness:
a := make(witness_bls12381.Witness, n)
copy(a, *wt)
return &a, nil
case *witness_bw6761.Witness:
a := make(witness_bw6761.Witness, n)
copy(a, *wt)
return &a, nil
case *witness_bls24315.Witness:
a := make(witness_bls24315.Witness, n)
copy(a, *wt)
return &a, nil
case *witness_bw6633.Witness:
a := make(witness_bw6633.Witness, n)
copy(a, *wt)
return &a, nil
default:
return nil, errMissingCurveID
}
}
19 changes: 19 additions & 0 deletions backend/witness/witness.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,25 @@ func New(curveID ecc.ID, schema *schema.Schema) (*Witness, error) {
}, nil
}

// Public extracts the public part of the witness and returns a new witness object
func (w *Witness) Public() (*Witness, error) {
if w.Vector == nil {
return nil, fmt.Errorf("%w: empty witness", ErrInvalidWitness)
}
if w.Schema == nil {
return nil, errMissingSchema
}
v, err := newFrom(w.Vector, w.Schema.NbPublic)
if err != nil {
return nil, err
}
return &Witness{
CurveID: w.CurveID,
Vector: v,
Schema: w.Schema,
}, nil
}

// MarshalBinary implements encoding.BinaryMarshaler
// Only the vector of field elements is marshalled: the curveID and the Schema are omitted.
func (w *Witness) MarshalBinary() (data []byte, err error) {
Expand Down
26 changes: 26 additions & 0 deletions backend/witness/witness_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,32 @@ func TestMarshal(t *testing.T) {
roundTripMarshal(assert, assignment, Binary, false)
}

func TestPublic(t *testing.T) {
assert := require.New(t)

var assignment circuit
assignment.X = new(fr.Element).SetInt64(42)
assignment.Y = new(fr.Element).SetInt64(8000)
assignment.E = new(fr.Element).SetInt64(1)

w, err := New(ecc.BN254, nil)
assert.NoError(err)

w.Schema, err = w.Vector.FromAssignment(&assignment, tVariable, false)
assert.NoError(err)

publicW, err := w.Public()
assert.NoError(err)

assert.Equal(3, w.Vector.Len())
assert.Equal(2, publicW.Vector.Len())

wt := publicW.Vector.(*witness_bn254.Witness)

assert.Equal("42", (*wt)[0].String())
assert.Equal("8000", (*wt)[1].String())
}

var tVariable reflect.Type

func init() {
Expand Down
2 changes: 0 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a h1:AEpwbXTjBGKoqxuQ6QAcBMEuK0+PtajQj0wJkhTnSd0=
github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
github.com/consensys/gnark-crypto v0.5.4-0.20211222202820-aee0c136fb9f h1:HT4hl58/L66zdhJi8wEbdoXceHv9AnIJij5lP1iOuQw=
github.com/consensys/gnark-crypto v0.5.4-0.20211222202820-aee0c136fb9f/go.mod h1:PicAZJP763+7N9LZFfj+MquTXq98pwjD6l8Ry8WdHSU=
github.com/consensys/gnark-crypto v0.6.1-0.20220110145513-493bb1c180d9 h1:NSmw/VuOS3KCClXAijCQ6dJVtCSMbTwK/M8ulvPCvmY=
github.com/consensys/gnark-crypto v0.6.1-0.20220110145513-493bb1c180d9/go.mod h1:PicAZJP763+7N9LZFfj+MquTXq98pwjD6l8Ry8WdHSU=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand Down

0 comments on commit 58758e8

Please sign in to comment.