|
|
# CircomLib/Circuits
## Description
- This folder contains circuit templates for standard operations and many cryptographic primitives. - Below you can find specifications of each function. In the representation of elements, there are three tyes: - Binary - String - Field element (the field is specified in each case. We consider 2 possible fields: Fp and Fr, where p... and r... .)
## Table of Contents
[TOC]
## Jordi
* compconstant - Returns 1 if `in` (expanded to binary array) > `ct` * aliascheck - check if `in` (expanded to binary array) oveflowed its 254 bits (<= -1) * babyjub - twisted Edwards curve 168700.x^2 + y^2 = 1 + 168696.x^2.y^2 * BabyAdd - (`xout`,`yout`) = (`x1`,`y1`) + (`x2`,`y2`) * BabyDbl - (`xout`,`yout`) = 2*(`x`,`y`) * BabyCheck - check that (`x`,`y`) is on the curve * binsub - binary subtraction * gates - logical gates * mimc - SNARK-friendly hash Minimal Multiplicative Complexity. * https://eprint.iacr.org/2016/492.pdf * zcash/zcash#2233 * smt - Sparse Merkle Tree * https://ethresear.ch/t/optimizing-sparse-merkle-trees/3751 * montgomery https://en.wikipedia.org/wiki/Montgomery_curve
## Circuits
### sha256
Folder containing the implementation of sha256 hash circuit.
### smt
Folder containing the circuit implementation of Sparse Merkle Trees.
### aliascheck
- `AliasCheck()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### babyjub
Arithmetic on [Baby Jubjub elliptic curve](https://github.com/barryWhiteHat/baby_jubjub) in twisted Edwards form. (TODO: Expose here the characteristics of the curve?)
- `BabyAdd()`
- DESCRIPTION
It adds two points on the Baby Jubjub curve. More specifically, given two points P1 = (`x1`, `y1`) and P2 = (`x2`, `y2`) it returns a point P3 = (`xout`, `yout`) such that
(`xout`, `yout`) = (`x1`,`y1`) + (`x2`,`y2`) = ((`x1y2`+`y1x2`)/(1+`dx1x2y1y2`)),(`y1y2`-`ax1x2`)/(1-`dx1x2y1y2`))
- SCHEMA ``` var a var d | | | | ______v_________v_______ input x1 ----> | | input y1 ----> | BabyAdd() | ----> output xout input x2 ----> | | ----> output yout input y2 ----> |________________________| ```
- INPUTS
| Input | Representation | Description | | | ------------- | ------------- | ------------- | ------------- | | `x1` | Bigint | Field element of Fp | First coordinate of a point (x1, y1) on E. | | `y1` | Bigint | Field element of Fp | Second coordinate of a point (x1, y1) on E. | | `x2` | Bigint | Field element of Fp | First coordinate of a point (x2, y2) on E. | | `y2` | Bigint | Field element of Fp | Second coordinate of a point (x2, y2) on E. |
Requirement: at least `x1`!=`x2` or `y1`!=`y2`.
- OUTPUT
| Input | Representation | Description | | | ------------- | ------------- | ------------- | ------------- | | `xout` | Bigint | Field element of Fp | First coordinate of the addition point (xout, yout) = (x1, y1) + (x2, y2). | | `yout` | Bigint | Field element of Fp | Second coordinate of the addition point (xout, yout) = (x1, y1) + (x2, y2). |
- BENCHMARKS (constraints)
- EXAMPLE
- `BabyDbl()` - DESCRIPTION : doubles a point (`xout`,`yout`) = 2*(`x`,`y`). - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `BabyCheck()`
- DESCRIPTION : checks if a given point is in the curve. - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `BabyPbk()`
- DESCRIPTION: : given a private key, it returns the associated public key. - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### binsub
- `BinSub(n)`
- DESCRIPTION: binary substraction. - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### binsum
- `nbits(a)`
- DESCRIPTION : binary sum. - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `BinSum(n, ops)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### bitify
- `Num2Bits()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Num2Bits_strict()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Bits2Num()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Bits2Num_strict()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Num2BitsNeg()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### comparators
- `IsZero() `
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `IsEqual()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `ForceEqualIfEnabled()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `LessThan()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `GreaterThan()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `GreaterEqThan()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### compconstant
- `CompConstant(ct)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### eddsa
Edwards Digital Signature Algorithm in Baby Jubjbub (link a eddsa)
- `EdDSAVerifier(n)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### eddsamimc
- `EdDSAMiMCVerifier()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### eddsamimcsponge
- `EdDSAMiMCSpongeVerifier()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### eddsaposeidon
- `EdDSAPoseidonVerifier()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### escalarmul
- `EscalarMulWindow(base, k)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `EscalarMul(n, base)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### escalarmulany
- `Multiplexor2()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `BitElementMulAny()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `SegmentMulAny(n)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `EscalarMulAny(n)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### escalarmulfix
- `WindowMulFix()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `SegmentMulFix(nWindows)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `EscalarMulFix(n, BASE)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### escalarmulw4table
- `pointAdd`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `EscalarMulW4Table`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### gates
- `XOR`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `AND`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `OR`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `NOT`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `NAND`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `NOR`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `MultiAND`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### mimc
Implementation of MiMC-7 hash in Fp being... (link to description of the hash)
- `MiMC7(nrounds)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `MultiMiMC7(nInputs, nRounds)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### mimcsponge
- `MiMCSponge(nInputs, nRounds, nOutputs)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `MiMCFeistel(nrounds)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### montgomery
- `Edwards2Montgomery()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Montgomery2Edwards()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `MontgomeryAdd()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `MontgomeryDouble()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### multiplexer
- `log2(a)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `EscalarProduct(w)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Decoder(w)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Multiplexer(wIn, nIn)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### mux1
- `MultiMux1(n)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Mux1()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### mux2
- `MultiMux2(n)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Mux2()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### mux3
- `MultiMux3(n)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Mux3()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### mux4
- `MultiMux4(n)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Mux4()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### pedersen_old
Old version of the Pedersen hash (do not use any more?).
### pedersen
- `Window4()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Segment(nWindows)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Pedersen(n)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### pointbits
- `sqrt(n)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Bits2Point()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Bits2Point_Strict()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Point2Bits`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Point2Bits_Strict`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### poseidon
Implementation of Poseidon hash function (LINK)
- `Sigma()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Ark(t, C, r)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Mix(t, M)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
- `Poseidon(nInputs)`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### sign
- `Sign()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
### switcher
- `Switcher()`
- DESCRIPTION - SCHEMA - INPUT - OUTPUT - BENCHMARKS - EXAMPLE
|