CodeGen

Struct CodeGen 

Source
pub struct CodeGen { /* private fields */ }
Expand description

The main struct to handle code generation for this macro.

Initialize a CodeGen with the SigmaCompSpec you get by parsing the macro input. Pass it to the various transformations and statement handlers, which will both update the code it will generate, and modify the SigmaCompSpec. Then at the end, call CodeGen::generate with the modified SigmaCompSpec to generate the code output by this macro.

Implementations§

Source§

impl CodeGen

Source

pub fn new(spec: &SigmaCompSpec) -> Self

Create a new CodeGen given the SigmaCompSpec you get by parsing the macro input.

Source

pub fn gen_scalar( &self, vars: &mut TaggedVarDict, base: &Ident, is_rand: bool, is_vec: bool, ) -> Ident

Create a new generated private Scalar variable to put in the Witness.

If you call this, you should also call prove_append with code like quote!{ let #id = ... } where id is the Ident returned from this function.

Source

pub fn gen_point( &mut self, vars: &mut TaggedVarDict, base: &Ident, is_vec: bool, send_to_verifier: bool, ) -> Ident

Create a new public Point variable to put in the Instance, optionally marking it as needing to be sent from the prover to the verifier along with the proof.

If you call this function, you should also call prove_append with code like quote!{ let #id = ... } where id is the Ident returned from this function. If is_vec is true, then you should also call verify_pre_instance_append with code like quote!{ let mut #id = Vec::<Point>::new(); #id.resize(#len, Point::default()); } where len is the number of elements you expect to have in the vector (computed at runtime, perhaps based on the values of public parameters).

Source

pub fn gen_ident(&self, base: &Ident) -> Ident

Create a new identifier, using the unique prefix

Source

pub fn prove_append(&mut self, code: TokenStream)

Append some code to the generated prove function

Source

pub fn verify_append(&mut self, code: TokenStream)

Append some code to the generated verify function

Source

pub fn verify_pre_instance_append(&mut self, code: TokenStream)

Append some code to the generated verify function to be run before the sent_instance are deserialized

Source

pub fn prove_verify_append(&mut self, code: TokenStream)

Append some code to both the generated prove and verify functions

Source

pub fn prove_verify_pre_instance_append(&mut self, code: TokenStream)

Append some code to both the generated prove and verify functions, the latter to be run before the sent_instance are deserialized

Source

pub fn code_strings(&self) -> (String, String, String)

Extract (as Strings) the code inserted by prove_append, verify_append, and verify_pre_instance_append.

Source

pub fn generate( &self, spec: &mut SigmaCompSpec, emit_prover: bool, emit_verifier: bool, ) -> TokenStream

Generate the code to be output by this macro.

emit_prover and emit_verifier are as in sigma_compiler_core.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.