Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bb::stdlib::StdlibCodec< Field > Class Template Reference

#include <field_conversion.hpp>

Public Types

using DataType = Field
 
using Builder = typename Field::Builder
 
using fr = field_t< Builder >
 
using fq = bigfield< Builder, bb::Bn254FqParams >
 
using bn254_commitment = element< Builder, fq, fr, curve::BN254::Group >
 
using grumpkin_commitment = cycle_group< Builder >
 

Static Public Member Functions

template<typename T >
static T convert_challenge (const fr &challenge)
 A stdlib Transcript method needed to convert an fr challenge to a bigfield one. Assumes that challenge is "short".
 
static std::vector< frconvert_goblin_fr_to_bn254_frs (const goblin_field< Builder > &input)
 
static std::vector< frconvert_grumpkin_fr_to_bn254_frs (const fq &input)
 
template<typename T >
static constexpr size_t calc_num_fields ()
 Calculates the size of a type (in its native form) in terms of frs.
 
template<typename T >
static T deserialize_from_fields (std::span< const fr > fr_vec)
 Core stdlib Transcript deserialization method.
 
template<typename T >
static std::vector< frserialize_to_fields (const T &val)
 Core stdlib Transcript serialization method.
 
static std::array< fr, 2 > split_challenge (const fr &challenge)
 Split a challenge field element into two equal-width challenges.
 
template<typename TargetType >
static TargetType deserialize_from_frs (std::span< fr > elements, size_t &num_frs_read)
 A stdlib VerificationKey-specific method.
 

Detailed Description

template<typename Field>
class bb::stdlib::StdlibCodec< Field >

Definition at line 27 of file field_conversion.hpp.

Member Typedef Documentation

◆ bn254_commitment

template<typename Field >
using bb::stdlib::StdlibCodec< Field >::bn254_commitment = element<Builder, fq, fr, curve::BN254::Group>

Definition at line 33 of file field_conversion.hpp.

◆ Builder

template<typename Field >
using bb::stdlib::StdlibCodec< Field >::Builder = typename Field::Builder

Definition at line 30 of file field_conversion.hpp.

◆ DataType

template<typename Field >
using bb::stdlib::StdlibCodec< Field >::DataType = Field

Definition at line 29 of file field_conversion.hpp.

◆ fq

template<typename Field >
using bb::stdlib::StdlibCodec< Field >::fq = bigfield<Builder, bb::Bn254FqParams>

Definition at line 32 of file field_conversion.hpp.

◆ fr

template<typename Field >
using bb::stdlib::StdlibCodec< Field >::fr = field_t<Builder>

Definition at line 31 of file field_conversion.hpp.

◆ grumpkin_commitment

template<typename Field >
using bb::stdlib::StdlibCodec< Field >::grumpkin_commitment = cycle_group<Builder>

Definition at line 34 of file field_conversion.hpp.

Member Function Documentation

◆ calc_num_fields()

template<typename Field >
template<typename T >
static constexpr size_t bb::stdlib::StdlibCodec< Field >::calc_num_fields ( )
inlinestaticconstexpr

Calculates the size of a type (in its native form) in terms of frs.

Definition at line 80 of file field_conversion.hpp.

◆ convert_challenge()

template<typename Field >
template<typename T >
static T bb::stdlib::StdlibCodec< Field >::convert_challenge ( const fr challenge)
inlinestatic

A stdlib Transcript method needed to convert an fr challenge to a bigfield one. Assumes that challenge is "short".

Template Parameters
Tfr or fq
Parameters
challengea 127-bit limb of a full challenge
Returns
T

Definition at line 44 of file field_conversion.hpp.

◆ convert_goblin_fr_to_bn254_frs()

template<typename Field >
static std::vector< fr > bb::stdlib::StdlibCodec< Field >::convert_goblin_fr_to_bn254_frs ( const goblin_field< Builder > &  input)
inlinestatic

Definition at line 61 of file field_conversion.hpp.

◆ convert_grumpkin_fr_to_bn254_frs()

template<typename Field >
static std::vector< fr > bb::stdlib::StdlibCodec< Field >::convert_grumpkin_fr_to_bn254_frs ( const fq input)
inlinestatic

Definition at line 66 of file field_conversion.hpp.

◆ deserialize_from_fields()

template<typename Field >
template<typename T >
static T bb::stdlib::StdlibCodec< Field >::deserialize_from_fields ( std::span< const fr fr_vec)
inlinestatic

Core stdlib Transcript deserialization method.

Deserializes a vector of in-circuit frs, i.e. field_t elements, into

Template Parameters
BuilderUltraCircuitBuilder or MegaCircuitBuilder
TTarget object type
Parameters
fr_vecInput field_t elements

Definition at line 130 of file field_conversion.hpp.

◆ deserialize_from_frs()

template<typename Field >
template<typename TargetType >
static TargetType bb::stdlib::StdlibCodec< Field >::deserialize_from_frs ( std::span< fr elements,
size_t &  num_frs_read 
)
inlinestatic

A stdlib VerificationKey-specific method.

Deserialize an object of specified type from a buffer of field elements; update provided read count in place

Template Parameters
TargetTypeType to reconstruct from buffer of field elements
Parameters
elementsBuffer of field_t elements
num_frs_readIndex at which to read into buffer

Definition at line 299 of file field_conversion.hpp.

◆ serialize_to_fields()

template<typename Field >
template<typename T >
static std::vector< fr > bb::stdlib::StdlibCodec< Field >::serialize_to_fields ( const T &  val)
inlinestatic

Core stdlib Transcript serialization method.

Serializes an object into a flat vector of in-circuit fr, i.e. field_t elements. This is the inverse of deserialize_from_fields (up to the conventional point-at-infinity representation; see TODO below).

Serializes the following types:

Round-trip note:

  • For supported types, serialize_to_fields(val) followed by deserialize_from_fields<T>(...) reconstructs an equivalent in-circuit object, assuming the same arithmetization and that range/ECC checks are enforced where applicable during reconstruction (see ECCVM Transcript relation).

TODO(https://github.com/AztecProtocol/barretenberg/issues/1527): make the point-at-infinity representation fully uniform across (de)serialization paths.

Template Parameters
BuilderUltraCircuitBuilder or MegaCircuitBuilder
TTarget object type
Parameters
valValue to serialize
Returns
Flat vector of fr<Builder> elements

Definition at line 231 of file field_conversion.hpp.

◆ split_challenge()

template<typename Field >
static std::array< fr, 2 > bb::stdlib::StdlibCodec< Field >::split_challenge ( const fr challenge)
inlinestatic

Split a challenge field element into two equal-width challenges.

Both lo and hi are 127 bits each (254/2) which provides significantly more than our security parameter bound: 100 bits. The decomposition is constrained to be unique.

Parameters
challenge
Returns
std::array<DataType, 2>

Definition at line 280 of file field_conversion.hpp.


The documentation for this class was generated from the following file: