#ifndef __CIRCOM_H #define __CIRCOM_H #include #include class Circom_CalcWit; typedef unsigned long long u64; typedef uint32_t u32; typedef uint8_t u8; typedef mpz_t BigInt; typedef BigInt *PBigInt; typedef int Circom_Size; typedef Circom_Size *Circom_Sizes; struct Circom_HashEntry { u64 hash; int pos; }; typedef Circom_HashEntry *Circom_HashTable; typedef enum { _typeSignal, _typeComponent} Circom_EntryType; struct Circom_ComponentEntry { int offset; Circom_Sizes sizes; Circom_EntryType type; }; typedef Circom_ComponentEntry *Circom_ComponentEntries; typedef void (*Circom_ComponentFunction)(Circom_CalcWit *ctx); struct Circom_Component { Circom_HashTable hashTable; Circom_ComponentEntries entries; Circom_ComponentFunction fn; int inputSignals; }; class Circom_Circuit { public: int NSignals; int NComponents; int NInputs; int NOutputs; int NVars; int *wit2sig; Circom_Component *components; u32 *mapIsInput; const char *P; }; #define BITMAP_ISSET(m, b) (m[b>>5] & (1 << (b&0x1F))) extern struct Circom_Circuit _circuit; #endif