arnaucube
arnaucube/grapevine-sonobePublic Self-hosted repository
grapevine-sonobe/circom/node_modules/circomlib/circuits/README.md
circom/node_modules/circomlib/circuits/README.mdRaw
  1# CircomLib/Circuits
  2
  3## Description
  4
  5- This folder contains circuit templates for standard operations and many cryptographic primitives.
  6- Below you can find specifications of each function. In the representation of elements, there are three tyes:
  7    - Binary
  8    - String
  9    - Field element (the field is specified in each case. We consider 2 possible fields: Fp and Fr, where p... and r... .)
 10
 11## Table of Contents
 12
 13[TOC]
 14
 15## Jordi
 16
 17* compconstant - Returns 1 if `in` (expanded to binary array) > `ct`
 18* aliascheck - check if `in` (expanded to binary array) oveflowed its 254 bits (<= -1)
 19* babyjub - twisted Edwards curve 168700.x^2 + y^2 = 1 + 168696.x^2.y^2
 20  * BabyAdd - (`xout`,`yout`) = (`x1`,`y1`) + (`x2`,`y2`)
 21  * BabyDbl - (`xout`,`yout`) = 2*(`x`,`y`)
 22  * BabyCheck - check that (`x`,`y`) is on the curve
 23* binsub - binary subtraction
 24* gates - logical gates
 25* mimc - SNARK-friendly hash Minimal Multiplicative Complexity.
 26  * https://eprint.iacr.org/2016/492.pdf
 27  * zcash/zcash#2233
 28* smt - Sparse Merkle Tree
 29  * https://ethresear.ch/t/optimizing-sparse-merkle-trees/3751
 30* montgomery https://en.wikipedia.org/wiki/Montgomery_curve
 31
 32## Circuits
 33
 34### sha256
 35
 36Folder containing the implementation of sha256 hash circuit.
 37
 38### smt
 39
 40Folder containing the circuit implementation of Sparse Merkle Trees.
 41
 42### aliascheck
 43
 44- `AliasCheck()`
 45
 46    - DESCRIPTION
 47    - SCHEMA
 48    - INPUT
 49    - OUTPUT
 50    - BENCHMARKS
 51    - EXAMPLE
 52
 53### babyjub
 54
 55Arithmetic on [Baby Jubjub elliptic curve](https://github.com/barryWhiteHat/baby_jubjub) in twisted Edwards form. (TODO: Expose here the characteristics of the curve?)
 56
 57
 58- `BabyAdd()`
 59
 60    - DESCRIPTION
 61
 62      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
 63
 64        (`xout`, `yout`) =  (`x1`,`y1`) + (`x2`,`y2`)
 65             = ((`x1y2`+`y1x2`)/(1+`dx1x2y1y2`)),(`y1y2`-`ax1x2`)/(1-`dx1x2y1y2`))
 66
 67    - SCHEMA
 68       ```
 69                                        var a     var d
 70                                          |         |
 71                                          |         |
 72                                    ______v_________v_______
 73                   input x1 ---->  |                        |
 74                   input y1 ---->  |        BabyAdd()       | ----> output xout
 75                   input x2 ---->  |                        | ----> output yout
 76                   input y2 ---->  |________________________|
 77       ```
 78
 79    - INPUTS
 80
 81      | Input         | Representation | Description         |                                             |
 82      | ------------- | -------------  | -------------       | -------------                               |
 83      | `x1`          | Bigint         | Field element of Fp | First coordinate of a point (x1, y1) on E.  |
 84      | `y1`          | Bigint         | Field element of Fp | Second coordinate of a point (x1, y1) on E. |
 85      | `x2`          | Bigint         | Field element of Fp | First coordinate of a point (x2, y2) on E.  |
 86      | `y2`          | Bigint         | Field element of Fp | Second coordinate of a point (x2, y2) on E. |
 87
 88      Requirement: at least `x1`!=`x2` or `y1`!=`y2`.
 89
 90    - OUTPUT
 91
 92      | Input         | Representation | Description         |                                             |
 93      | ------------- | -------------  | -------------       | -------------                               |
 94      | `xout`          | Bigint         | Field element of Fp | First coordinate of the addition point (xout, yout) = (x1, y1) + (x2, y2).  |
 95      | `yout`          | Bigint         | Field element of Fp | Second coordinate of the addition point (xout, yout) = (x1, y1) + (x2, y2). |
 96
 97    - BENCHMARKS (constraints)
 98
 99    - EXAMPLE
100
101- `BabyDbl()`
102    - DESCRIPTION : doubles a point (`xout`,`yout`) = 2*(`x`,`y`).
103    - SCHEMA
104    - INPUT
105    - OUTPUT
106    - BENCHMARKS
107    - EXAMPLE
108
109- `BabyCheck()`
110
111    - DESCRIPTION : checks if a given point is in the curve.
112    - SCHEMA
113    - INPUT
114    - OUTPUT
115    - BENCHMARKS
116    - EXAMPLE
117
118- `BabyPbk()`
119
120    - DESCRIPTION: : given a private key, it returns the associated public key.
121    - SCHEMA
122    - INPUT
123    - OUTPUT
124    - BENCHMARKS
125    - EXAMPLE
126
127
128### binsub
129
130- `BinSub(n)`
131
132    - DESCRIPTION: binary substraction.
133    - SCHEMA
134    - INPUT
135    - OUTPUT
136    - BENCHMARKS
137    - EXAMPLE
138
139### binsum
140
141- `nbits(a)`
142
143    - DESCRIPTION : binary sum.
144    - SCHEMA
145    - INPUT
146    - OUTPUT
147    - BENCHMARKS
148    - EXAMPLE
149
150- `BinSum(n, ops)`
151
152    - DESCRIPTION
153    - SCHEMA
154    - INPUT
155    - OUTPUT
156    - BENCHMARKS
157    - EXAMPLE
158
159### bitify
160
161- `Num2Bits()`
162
163    - DESCRIPTION
164    - SCHEMA
165    - INPUT
166    - OUTPUT
167    - BENCHMARKS
168    - EXAMPLE
169
170- `Num2Bits_strict()`
171
172    - DESCRIPTION
173    - SCHEMA
174    - INPUT
175    - OUTPUT
176    - BENCHMARKS
177    - EXAMPLE
178
179- `Bits2Num()`
180
181    - DESCRIPTION
182    - SCHEMA
183    - INPUT
184    - OUTPUT
185    - BENCHMARKS
186    - EXAMPLE
187
188- `Bits2Num_strict()`
189
190    - DESCRIPTION
191    - SCHEMA
192    - INPUT
193    - OUTPUT
194    - BENCHMARKS
195    - EXAMPLE
196
197- `Num2BitsNeg()`
198
199    - DESCRIPTION
200    - SCHEMA
201    - INPUT
202    - OUTPUT
203    - BENCHMARKS
204    - EXAMPLE
205
206### comparators
207
208- `IsZero() `
209
210    - DESCRIPTION
211    - SCHEMA
212    - INPUT
213    - OUTPUT
214    - BENCHMARKS
215    - EXAMPLE
216
217- `IsEqual()`
218
219    - DESCRIPTION
220    - SCHEMA
221    - INPUT
222    - OUTPUT
223    - BENCHMARKS
224    - EXAMPLE
225
226- `ForceEqualIfEnabled()`
227
228    - DESCRIPTION
229    - SCHEMA
230    - INPUT
231    - OUTPUT
232    - BENCHMARKS
233    - EXAMPLE
234
235- `LessThan()`
236
237    - DESCRIPTION
238    - SCHEMA
239    - INPUT
240    - OUTPUT
241    - BENCHMARKS
242    - EXAMPLE
243
244- `GreaterThan()`
245
246    - DESCRIPTION
247    - SCHEMA
248    - INPUT
249    - OUTPUT
250    - BENCHMARKS
251    - EXAMPLE
252
253- `GreaterEqThan()`
254
255    - DESCRIPTION
256    - SCHEMA
257    - INPUT
258    - OUTPUT
259    - BENCHMARKS
260    - EXAMPLE
261
262### compconstant
263
264- `CompConstant(ct)`
265
266    - DESCRIPTION
267    - SCHEMA
268    - INPUT
269    - OUTPUT
270    - BENCHMARKS
271    - EXAMPLE
272
273### eddsa
274
275Edwards Digital Signature Algorithm in Baby Jubjbub (link a eddsa)
276
277- `EdDSAVerifier(n)`
278
279    - DESCRIPTION
280    - SCHEMA
281    - INPUT
282    - OUTPUT
283    - BENCHMARKS
284    - EXAMPLE
285
286### eddsamimc
287
288- `EdDSAMiMCVerifier()`
289
290    - DESCRIPTION
291    - SCHEMA
292    - INPUT
293    - OUTPUT
294    - BENCHMARKS
295    - EXAMPLE
296
297### eddsamimcsponge
298
299- `EdDSAMiMCSpongeVerifier()`
300
301    - DESCRIPTION
302    - SCHEMA
303    - INPUT
304    - OUTPUT
305    - BENCHMARKS
306    - EXAMPLE
307
308### eddsaposeidon
309
310- `EdDSAPoseidonVerifier()`
311
312    - DESCRIPTION
313    - SCHEMA
314    - INPUT
315    - OUTPUT
316    - BENCHMARKS
317    - EXAMPLE
318
319### escalarmul
320
321- `EscalarMulWindow(base, k)`
322
323    - DESCRIPTION
324    - SCHEMA
325    - INPUT
326    - OUTPUT
327    - BENCHMARKS
328    - EXAMPLE
329
330- `EscalarMul(n, base)`
331
332    - DESCRIPTION
333    - SCHEMA
334    - INPUT
335    - OUTPUT
336    - BENCHMARKS
337    - EXAMPLE
338
339### escalarmulany
340
341- `Multiplexor2()`
342
343    - DESCRIPTION
344    - SCHEMA
345    - INPUT
346    - OUTPUT
347    - BENCHMARKS
348    - EXAMPLE
349
350- `BitElementMulAny()`
351
352    - DESCRIPTION
353    - SCHEMA
354    - INPUT
355    - OUTPUT
356    - BENCHMARKS
357    - EXAMPLE
358
359- `SegmentMulAny(n)`
360
361    - DESCRIPTION
362    - SCHEMA
363    - INPUT
364    - OUTPUT
365    - BENCHMARKS
366    - EXAMPLE
367
368- `EscalarMulAny(n)`
369
370    - DESCRIPTION
371    - SCHEMA
372    - INPUT
373    - OUTPUT
374    - BENCHMARKS
375    - EXAMPLE
376
377### escalarmulfix
378
379- `WindowMulFix()`
380
381    - DESCRIPTION
382    - SCHEMA
383    - INPUT
384    - OUTPUT
385    - BENCHMARKS
386    - EXAMPLE
387
388- `SegmentMulFix(nWindows)`
389
390    - DESCRIPTION
391    - SCHEMA
392    - INPUT
393    - OUTPUT
394    - BENCHMARKS
395    - EXAMPLE
396
397- `EscalarMulFix(n, BASE)`
398
399    - DESCRIPTION
400    - SCHEMA
401    - INPUT
402    - OUTPUT
403    - BENCHMARKS
404    - EXAMPLE
405
406### escalarmulw4table
407
408- `pointAdd`
409
410    - DESCRIPTION
411    - SCHEMA
412    - INPUT
413    - OUTPUT
414    - BENCHMARKS
415    - EXAMPLE
416
417- `EscalarMulW4Table`
418
419    - DESCRIPTION
420    - SCHEMA
421    - INPUT
422    - OUTPUT
423    - BENCHMARKS
424    - EXAMPLE
425
426### gates
427
428- `XOR`
429
430    - DESCRIPTION
431    - SCHEMA
432    - INPUT
433    - OUTPUT
434    - BENCHMARKS
435    - EXAMPLE
436
437- `AND`
438
439    - DESCRIPTION
440    - SCHEMA
441    - INPUT
442    - OUTPUT
443    - BENCHMARKS
444    - EXAMPLE
445
446- `OR`
447
448    - DESCRIPTION
449    - SCHEMA
450    - INPUT
451    - OUTPUT
452    - BENCHMARKS
453    - EXAMPLE
454
455- `NOT`
456
457    - DESCRIPTION
458    - SCHEMA
459    - INPUT
460    - OUTPUT
461    - BENCHMARKS
462    - EXAMPLE
463
464- `NAND`
465
466    - DESCRIPTION
467    - SCHEMA
468    - INPUT
469    - OUTPUT
470    - BENCHMARKS
471    - EXAMPLE
472
473- `NOR`
474
475    - DESCRIPTION
476    - SCHEMA
477    - INPUT
478    - OUTPUT
479    - BENCHMARKS
480    - EXAMPLE
481
482- `MultiAND`
483
484    - DESCRIPTION
485    - SCHEMA
486    - INPUT
487    - OUTPUT
488    - BENCHMARKS
489    - EXAMPLE
490
491### mimc
492
493Implementation of MiMC-7 hash in Fp being...  (link to description of the hash)
494
495- `MiMC7(nrounds)`
496
497    - DESCRIPTION
498    - SCHEMA
499    - INPUT
500    - OUTPUT
501    - BENCHMARKS
502    - EXAMPLE
503
504- `MultiMiMC7(nInputs, nRounds)`
505
506    - DESCRIPTION
507    - SCHEMA
508    - INPUT
509    - OUTPUT
510    - BENCHMARKS
511    - EXAMPLE
512
513### mimcsponge
514
515- `MiMCSponge(nInputs, nRounds, nOutputs)`
516
517    - DESCRIPTION
518    - SCHEMA
519    - INPUT
520    - OUTPUT
521    - BENCHMARKS
522    - EXAMPLE
523
524- `MiMCFeistel(nrounds)`
525
526    - DESCRIPTION
527    - SCHEMA
528    - INPUT
529    - OUTPUT
530    - BENCHMARKS
531    - EXAMPLE
532
533### montgomery
534
535- `Edwards2Montgomery()`
536
537    - DESCRIPTION
538    - SCHEMA
539    - INPUT
540    - OUTPUT
541    - BENCHMARKS
542    - EXAMPLE
543
544- `Montgomery2Edwards()`
545
546    - DESCRIPTION
547    - SCHEMA
548    - INPUT
549    - OUTPUT
550    - BENCHMARKS
551    - EXAMPLE
552
553- `MontgomeryAdd()`
554
555    - DESCRIPTION
556    - SCHEMA
557    - INPUT
558    - OUTPUT
559    - BENCHMARKS
560    - EXAMPLE
561
562- `MontgomeryDouble()`
563
564    - DESCRIPTION
565    - SCHEMA
566    - INPUT
567    - OUTPUT
568    - BENCHMARKS
569    - EXAMPLE
570
571### multiplexer
572
573- `log2(a)`
574
575    - DESCRIPTION
576    - SCHEMA
577    - INPUT
578    - OUTPUT
579    - BENCHMARKS
580    - EXAMPLE
581
582- `EscalarProduct(w)`
583
584    - DESCRIPTION
585    - SCHEMA
586    - INPUT
587    - OUTPUT
588    - BENCHMARKS
589    - EXAMPLE
590
591- `Decoder(w)`
592
593    - DESCRIPTION
594    - SCHEMA
595    - INPUT
596    - OUTPUT
597    - BENCHMARKS
598    - EXAMPLE
599
600- `Multiplexer(wIn, nIn)`
601
602    - DESCRIPTION
603    - SCHEMA
604    - INPUT
605    - OUTPUT
606    - BENCHMARKS
607    - EXAMPLE
608
609### mux1
610
611- `MultiMux1(n)`
612
613    - DESCRIPTION
614    - SCHEMA
615    - INPUT
616    - OUTPUT
617    - BENCHMARKS
618    - EXAMPLE
619
620- `Mux1()`
621
622    - DESCRIPTION
623    - SCHEMA
624    - INPUT
625    - OUTPUT
626    - BENCHMARKS
627    - EXAMPLE
628
629### mux2
630
631- `MultiMux2(n)`
632
633    - DESCRIPTION
634    - SCHEMA
635    - INPUT
636    - OUTPUT
637    - BENCHMARKS
638    - EXAMPLE
639
640- `Mux2()`
641
642    - DESCRIPTION
643    - SCHEMA
644    - INPUT
645    - OUTPUT
646    - BENCHMARKS
647    - EXAMPLE
648
649### mux3
650
651- `MultiMux3(n)`
652
653    - DESCRIPTION
654    - SCHEMA
655    - INPUT
656    - OUTPUT
657    - BENCHMARKS
658    - EXAMPLE
659
660- `Mux3()`
661
662    - DESCRIPTION
663    - SCHEMA
664    - INPUT
665    - OUTPUT
666    - BENCHMARKS
667    - EXAMPLE
668
669### mux4
670
671- `MultiMux4(n)`
672
673    - DESCRIPTION
674    - SCHEMA
675    - INPUT
676    - OUTPUT
677    - BENCHMARKS
678    - EXAMPLE
679
680- `Mux4()`
681
682    - DESCRIPTION
683    - SCHEMA
684    - INPUT
685    - OUTPUT
686    - BENCHMARKS
687    - EXAMPLE
688
689### pedersen_old
690
691Old version of the Pedersen hash (do not use any
692more?).
693
694### pedersen
695
696- `Window4()`
697
698    - DESCRIPTION
699    - SCHEMA
700    - INPUT
701    - OUTPUT
702    - BENCHMARKS
703    - EXAMPLE
704
705- `Segment(nWindows)`
706
707    - DESCRIPTION
708    - SCHEMA
709    - INPUT
710    - OUTPUT
711    - BENCHMARKS
712    - EXAMPLE
713
714- `Pedersen(n)`
715
716    - DESCRIPTION
717    - SCHEMA
718    - INPUT
719    - OUTPUT
720    - BENCHMARKS
721    - EXAMPLE
722
723### pointbits
724
725- `sqrt(n)`
726
727    - DESCRIPTION
728    - SCHEMA
729    - INPUT
730    - OUTPUT
731    - BENCHMARKS
732    - EXAMPLE
733
734- `Bits2Point()`
735
736    - DESCRIPTION
737    - SCHEMA
738    - INPUT
739    - OUTPUT
740    - BENCHMARKS
741    - EXAMPLE
742
743- `Bits2Point_Strict()`
744
745    - DESCRIPTION
746    - SCHEMA
747    - INPUT
748    - OUTPUT
749    - BENCHMARKS
750    - EXAMPLE
751
752- `Point2Bits`
753
754    - DESCRIPTION
755    - SCHEMA
756    - INPUT
757    - OUTPUT
758    - BENCHMARKS
759    - EXAMPLE
760
761- `Point2Bits_Strict`
762
763    - DESCRIPTION
764    - SCHEMA
765    - INPUT
766    - OUTPUT
767    - BENCHMARKS
768    - EXAMPLE
769
770### poseidon
771
772Implementation of Poseidon hash function (LINK)
773
774- `Sigma()`
775
776    - DESCRIPTION
777    - SCHEMA
778    - INPUT
779    - OUTPUT
780    - BENCHMARKS
781    - EXAMPLE
782
783- `Ark(t, C, r)`
784
785    - DESCRIPTION
786    - SCHEMA
787    - INPUT
788    - OUTPUT
789    - BENCHMARKS
790    - EXAMPLE
791
792- `Mix(t, M)`
793
794    - DESCRIPTION
795    - SCHEMA
796    - INPUT
797    - OUTPUT
798    - BENCHMARKS
799    - EXAMPLE
800
801- `Poseidon(nInputs)`
802
803    - DESCRIPTION
804    - SCHEMA
805    - INPUT
806    - OUTPUT
807    - BENCHMARKS
808    - EXAMPLE
809
810### sign
811
812- `Sign()`
813
814    - DESCRIPTION
815    - SCHEMA
816    - INPUT
817    - OUTPUT
818    - BENCHMARKS
819    - EXAMPLE
820
821### switcher
822
823- `Switcher()`
824
825    - DESCRIPTION
826    - SCHEMA
827    - INPUT
828    - OUTPUT
829    - BENCHMARKS
830    - EXAMPLE