/ circuit / test_wrapper_ext.circom
test_wrapper_ext.circom
  1  
  2  // wrappers around the Goldilocks templates, so that input and output are classic
  3  // signals, not Bus-es. The testing framework does not handle Bus inputs/outputs yet
  4  
  5  pragma circom 2.2.0;
  6  
  7  include "goldilocks.circom";
  8  include "goldilocks_ext.circom";
  9  
 10  //------------------------------------------------------------------------------
 11  
 12  template NegExtWrapper() {
 13    signal input  A[2];
 14    signal output C[2];
 15  
 16    GoldilocksExt() A1; A1.real.val <== A[0]; A1.imag.val <== A[1];
 17  
 18    GoldilocksExt() C1 <== NegExt()( A1 );
 19  
 20    C1.real.val ==> C[0];
 21    C1.imag.val ==> C[1];
 22  }
 23  
 24  template AddExtWrapper() {
 25    signal input  A[2],B[2];
 26    signal output C[2];
 27  
 28    GoldilocksExt() A1; A1.real.val <== A[0]; A1.imag.val <== A[1];
 29    GoldilocksExt() B1; B1.real.val <== B[0]; B1.imag.val <== B[1];
 30  
 31    GoldilocksExt() C1 <== AddExt()( A1 , B1 );
 32  
 33    C1.real.val ==> C[0];
 34    C1.imag.val ==> C[1];
 35  }
 36  
 37  template SubExtWrapper() {
 38    signal input  A[2],B[2];
 39    signal output C[2];
 40  
 41    GoldilocksExt() A1; A1.real.val <== A[0]; A1.imag.val <== A[1];
 42    GoldilocksExt() B1; B1.real.val <== B[0]; B1.imag.val <== B[1];
 43  
 44    GoldilocksExt() C1 <== SubExt()( A1 , B1 );
 45  
 46    C1.real.val ==> C[0];
 47    C1.imag.val ==> C[1];
 48  }
 49  
 50  //------------------------------------------------------------------------------
 51  
 52  template SqrExtWrapper() {
 53    signal input  A[2];
 54    signal output C[2];
 55  
 56    GoldilocksExt() A1; A1.real.val <== A[0]; A1.imag.val <== A[1];
 57  
 58    GoldilocksExt() C1 <== SqrExt()( A1 );
 59  
 60    C1.real.val ==> C[0];
 61    C1.imag.val ==> C[1];
 62  }
 63  
 64  template MulExtWrapper() {
 65    signal input  A[2],B[2];
 66    signal output C[2];
 67  
 68    GoldilocksExt() A1; A1.real.val <== A[0]; A1.imag.val <== A[1];
 69    GoldilocksExt() B1; B1.real.val <== B[0]; B1.imag.val <== B[1];
 70    
 71    GoldilocksExt() C1 <== MulExt()( A1 , B1 );
 72  
 73    C1.real.val ==> C[0];
 74    C1.imag.val ==> C[1];
 75  }
 76  
 77  //------------------------------------------------------------------------------
 78  
 79  template InvExtWrapper() {
 80    signal input  A[2];
 81    signal output C[2];
 82  
 83    GoldilocksExt() A1; A1.real.val <== A[0]; A1.imag.val <== A[1];
 84  
 85    GoldilocksExt() C1 <== InvExt()( A1 );
 86  
 87    C1.real.val ==> C[0];
 88    C1.imag.val ==> C[1];
 89  }
 90  
 91  template DivExtWrapper() {
 92    signal input  A[2],B[2];
 93    signal output C[2];
 94  
 95    GoldilocksExt() A1; A1.real.val <== A[0]; A1.imag.val <== A[1];
 96    GoldilocksExt() B1; B1.real.val <== B[0]; B1.imag.val <== B[1];
 97  
 98    GoldilocksExt() C1 <== DivExt()( A1 , B1 );
 99  
100    C1.real.val ==> C[0];
101    C1.imag.val ==> C[1];
102  }
103  
104  //------------------------------------------------------------------------------