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 //------------------------------------------------------------------------------