mirror of
https://github.com/logos-storage/circom-goldilocks.git
synced 2026-01-02 13:03:10 +00:00
105 lines
2.5 KiB
Plaintext
105 lines
2.5 KiB
Plaintext
|
|
// wrappers around the Goldilocks templates, so that input and output are classic
|
|
// signals, not Bus-es. The testing framework does not handle Bus inputs/outputs yet
|
|
|
|
pragma circom 2.2.0;
|
|
|
|
include "goldilocks.circom";
|
|
include "goldilocks_ext.circom";
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
template NegExtWrapper() {
|
|
signal input A[2];
|
|
signal output C[2];
|
|
|
|
GoldilocksExt() A1; A1.real.val <== A[0]; A1.imag.val <== A[1];
|
|
|
|
GoldilocksExt() C1 <== NegExt()( A1 );
|
|
|
|
C1.real.val ==> C[0];
|
|
C1.imag.val ==> C[1];
|
|
}
|
|
|
|
template AddExtWrapper() {
|
|
signal input A[2],B[2];
|
|
signal output C[2];
|
|
|
|
GoldilocksExt() A1; A1.real.val <== A[0]; A1.imag.val <== A[1];
|
|
GoldilocksExt() B1; B1.real.val <== B[0]; B1.imag.val <== B[1];
|
|
|
|
GoldilocksExt() C1 <== AddExt()( A1 , B1 );
|
|
|
|
C1.real.val ==> C[0];
|
|
C1.imag.val ==> C[1];
|
|
}
|
|
|
|
template SubExtWrapper() {
|
|
signal input A[2],B[2];
|
|
signal output C[2];
|
|
|
|
GoldilocksExt() A1; A1.real.val <== A[0]; A1.imag.val <== A[1];
|
|
GoldilocksExt() B1; B1.real.val <== B[0]; B1.imag.val <== B[1];
|
|
|
|
GoldilocksExt() C1 <== SubExt()( A1 , B1 );
|
|
|
|
C1.real.val ==> C[0];
|
|
C1.imag.val ==> C[1];
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
template SqrExtWrapper() {
|
|
signal input A[2];
|
|
signal output C[2];
|
|
|
|
GoldilocksExt() A1; A1.real.val <== A[0]; A1.imag.val <== A[1];
|
|
|
|
GoldilocksExt() C1 <== SqrExt()( A1 );
|
|
|
|
C1.real.val ==> C[0];
|
|
C1.imag.val ==> C[1];
|
|
}
|
|
|
|
template MulExtWrapper() {
|
|
signal input A[2],B[2];
|
|
signal output C[2];
|
|
|
|
GoldilocksExt() A1; A1.real.val <== A[0]; A1.imag.val <== A[1];
|
|
GoldilocksExt() B1; B1.real.val <== B[0]; B1.imag.val <== B[1];
|
|
|
|
GoldilocksExt() C1 <== MulExt()( A1 , B1 );
|
|
|
|
C1.real.val ==> C[0];
|
|
C1.imag.val ==> C[1];
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
template InvExtWrapper() {
|
|
signal input A[2];
|
|
signal output C[2];
|
|
|
|
GoldilocksExt() A1; A1.real.val <== A[0]; A1.imag.val <== A[1];
|
|
|
|
GoldilocksExt() C1 <== InvExt()( A1 );
|
|
|
|
C1.real.val ==> C[0];
|
|
C1.imag.val ==> C[1];
|
|
}
|
|
|
|
template DivExtWrapper() {
|
|
signal input A[2],B[2];
|
|
signal output C[2];
|
|
|
|
GoldilocksExt() A1; A1.real.val <== A[0]; A1.imag.val <== A[1];
|
|
GoldilocksExt() B1; B1.real.val <== B[0]; B1.imag.val <== B[1];
|
|
|
|
GoldilocksExt() C1 <== DivExt()( A1 , B1 );
|
|
|
|
C1.real.val ==> C[0];
|
|
C1.imag.val ==> C[1];
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|