arnaucube
arnaucube/circomPublic Self-hosted repository
First iteration sha256
Jordi Baylina jordi@baylina.cat
Wed, 12 Sep 2018 11:02:50 +0200
commit

2f1e74dd386b0b8618cc9c38c59b10f1b94fe854

parent

c8d80533bcb7c81fbd7becd2a5fcf85c7f9814d6

M circuits/gates.circom → circuits/gates.circom

@@ -46,22 +46,4 @@

out <== a*b + 1 - a - b; } -template Xor3(n) { - signal input a[n]; - signal input b[n]; - signal input c[n]; - signal output out[n]; - component xor1[n] = XOR(); - component xor2[n] = XOR(); - - for (var k=0; k<n; k++) { - xor1[k].a <== a[k]; - xor1[k].b <== b[k]; - - xor2[k].a <== xor1[k].out; - xor2[k].b <== c[k]; - - out[k] <== xor2[k].out; - } -}
A circuits/sha256/ch.circom

@@ -0,0 +1,27 @@

+/* Ch + +000 0 +001 1 +010 0 +011 1 +100 0 +101 0 +110 1 +111 1 + +out = a&b ^ (!a)&c => + +out = a*(b-c) + c + +*/ + +template Ch(n) { + signal input a[n]; + signal input b[n]; + signal input c[n]; + signal output out[n]; + + for (var k=0; k<n; k++) { + out[k] <== a[k] * (b[k]-c[k]) + c[k]; + } +}
A circuits/sha256/gates.circom

@@ -0,0 +1,49 @@

+ +template XOR() { + signal input a; + signal input b; + signal output out; + + out <== a + b - 2*a*b; +} + +template AND() { + signal input a; + signal input b; + signal output out; + + out <== a*b; +} + +template OR() { + signal input a; + signal input b; + signal output out; + + out <== a + b - a*b; +} + +template NOT() { + signal input in; + signal output out; + + out <== 1 + in - 2*in; +} + +template NAND() { + signal input a; + signal input b; + signal output out; + + out <== 1 - a*b; +} + +template NOR() { + signal input a; + signal input b; + signal output out; + + out <== a*b + 1 - a - b; +} + +
M circuits/sha256/main.circom → circuits/sha256/main.circom

@@ -1,50 +1,15 @@

- -/* include "sha256_2.jaz"; -component main = SHA256_2(); -*/ - -/* -include "constants.jaz" - -template A() { - signal input in; - component h0; - h0 = K(8); - - var lc = 0; - var e = 1; - for (var i=0; i<32; i++) { - lc = lc + e*h0.out[i]; - e *= 2; - } - - lc === in; -} - -component main = A(); -*/ - -include "bitify.jaz" - -template A() { - signal input in; +template Main() { + signal private input a; + signal private input b; signal output out; - component n2b; - component b2n; + component sha256_2 = SHA256_2(); - n2b = Num2Bits(216); - b2n = Bits2Num(216); - - n2b.in <== in; - - for (var i=0; i<216; i++) { - b2n.in[i] <== n2b.out[i]; - } - - out <== b2n.out; + sha256_2.a <== a; + sha256_2.b <== a; + out <== sha256_2.out; } -component main = A(); +component main = Main();
A circuits/sha256/maj.circom

@@ -0,0 +1,25 @@

+/* Maj function for sha256 + +out = a&b ^ a&c ^ b&c => + +out = a*b + a*c + b*c - 2*a*b*c => + +out = a*( b + c - 2*b*c ) + b*c => + +mid = b*c +out = a*( b + c - 2*mid ) + mid + +*/ + +template Maj(n) { + signal input a[n]; + signal input b[n]; + signal input c[n]; + signal output out[n]; + signal mid[n]; + + for (var k=0; k<n; k++) { + mid[k] <== b[k]*c[k]; + out[k] <== a[k] * (b[k]+c[k]-2*mid[k]) + mid[k]; + } +}
M circuits/sha256/sha256_2.circom → circuits/sha256/sha256_2.circom

@@ -1,14 +1,14 @@

-include "sha256compression.jaz"; -include "bitify.jaz" +include "sha256compression.circom"; +include "bitify.circom" -component sha256_2() { +template Sha256_2() { signal input a; signal input b; signal output out; - component num2bits[2] = Num2Bits(216); component bits2num = Bits2Num(216); + component num2bits[2] = Num2Bits(216); num2bits[0].inp <== a; num2bits[1].inp <== b;
M circuits/sha256/sha256compression.circom → circuits/sha256/sha256compression.circom

@@ -1,11 +1,11 @@

-include "constants.jaz"; -include "t1.jaz"; -include "t2.jaz"; -include "binsum.jaz"; -include "sigmaplus.jaz"; +include "constants.circom"; +include "t1.circom"; +include "t2.circom"; +include "binsum.circom"; +include "sigmaplus.circom"; -template sha256compression() { +template Sha256compression() { signal input inp[512]; signal output out[256]; signal a[64][32];

@@ -16,14 +16,14 @@ signal e[64][32];

signal f[64][32]; signal g[64][32]; signal h[64][32]; - signal w[64][512]; + signal w[64][32]; var i; component sigmaPlus[48] = SigmaPlus(); - component k[64]; - for (i=0; i<64; i++) k[i] = K(i); + component ct_k[64]; + for (i=0; i<64; i++) ct_k[i] = K(i); component ha0 = H0(0); component hb0 = H0(1);

@@ -37,20 +37,20 @@

component t1[64] = T1(); component t2[64] = T2(); - component suma[64] = Sum2(32); - component sume[64] = Sum2(32); - component fsum[8] = Sum2(32); + component suma[64] = Sum(32, 2); + component sume[64] = Sum(32, 2); + component fsum[8] = Sum(32, 2); var k; var t; for (t=0; t<64; t++) { if (t<16) { - for (k=0; k<256; k++) { - w[t][k] <== inp[k]; + for (k=0; k<32; k++) { + w[t][k] <== inp[t*32+k]; } } else { - for (k=0; k<256; k++) { + for (k=0; k<32; k++) { sigmaPlus[t-16].in2[k] <== w[t-2][k]; sigmaPlus[t-16].in7[k] <== w[t-2][k]; sigmaPlus[t-16].in15[k] <== w[t-15][k];

@@ -77,20 +77,12 @@ t1[t].h[k] <== h[k];

t1[t].e[k] <== e[k]; t1[t].f[k] <== f[k]; t1[t].g[k] <== g[k]; - if (t<20) { - t1[t].g[k] <== K0.out[k]; - } else if (t<40) { - t1[t].g[k] <== K20.out[k]; - } else if (t<60) { - t1[t].g[k] <== K40.out[k]; - } else { - t1[t].g[k] <== K60.out[k]; - } + t1[t].k[k] <== ct_K[t].out[k]; t1[t].w[k] <== w[t][k]; t2[t].a[k] <== a[k]; - t2[t].b[k] <== a[k]; - t2[t].c[k] <== a[k]; + t2[t].b[k] <== b[k]; + t2[t].c[k] <== c[k]; } for (k=0; k<32; k++) {

@@ -114,32 +106,32 @@ }

} for (k=0; k<32; k++) { - fsum[0].a[k] <== ha0.out[k]; - fsum[0].b[k] <== a[64][k]; - fsum[1].a[k] <== hb0.out[k]; - fsum[1].b[k] <== b[64][k]; - fsum[2].a[k] <== hc0.out[k]; - fsum[2].b[k] <== c[64][k]; - fsum[3].a[k] <== hd0.out[k]; - fsum[3].b[k] <== d[64][k]; - fsum[4].a[k] <== he0.out[k]; - fsum[4].b[k] <== e[64][k]; - fsum[5].a[k] <== hf0.out[k]; - fsum[5].b[k] <== f[64][k]; - fsum[6].a[k] <== hg0.out[k]; - fsum[6].b[k] <== g[64][k]; - fsum[7].a[k] <== hh0.out[k]; - fsum[7].b[k] <== h[64][k]; + fsum[0].in[0][k] <== ha0.out[k]; + fsum[0].in[1][k] <== a[64][k]; + fsum[1].in[0][k] <== hb0.out[k]; + fsum[1].in[1][k] <== b[64][k]; + fsum[2].in[0][k] <== hc0.out[k]; + fsum[2].in[1][k] <== c[64][k]; + fsum[3].in[0][k] <== hd0.out[k]; + fsum[3].in[1][k] <== d[64][k]; + fsum[4].in[0][k] <== he0.out[k]; + fsum[4].in[1][k] <== e[64][k]; + fsum[5].in[0][k] <== hf0.out[k]; + fsum[5].in[1][k] <== f[64][k]; + fsum[6].in[0][k] <== hg0.out[k]; + fsum[6].in[1][k] <== g[64][k]; + fsum[7].in[0][k] <== hh0.out[k]; + fsum[7].in[1][k] <== h[64][k]; } for (k=0; k<32; k++) { - out[k] <== fsum[0].out[k]; - out[32+k] <== fsum[1].out[k]; - out[64+k] <== fsum[2].out[k]; - out[96+k] <== fsum[2].out[k]; - out[128+k] <== fsum[2].out[k]; - out[160+k] <== fsum[2].out[k]; - out[192+k] <== fsum[2].out[k]; - out[224+k] <== fsum[2].out[k]; + out[k] <== fsum[0].out[k]; + out[32+k] <== fsum[1].out[k]; + out[64+k] <== fsum[2].out[k]; + out[96+k] <== fsum[3].out[k]; + out[128+k] <== fsum[4].out[k]; + out[160+k] <== fsum[5].out[k]; + out[192+k] <== fsum[6].out[k]; + out[224+k] <== fsum[7].out[k]; } }
M circuits/sha256/sigma.circom → circuits/sha256/sigma.circom

@@ -1,8 +1,8 @@

-include "gates.jaz"; -include "rotate.jaz"; +include "xor3.circom"; +include "rotate.circom"; template Sigma(ra, rb, rc) { - signal input in; + signal input in[32]; signal output out; component xor3 = Xor3(32);
M circuits/sha256/sigmaplus.circom → circuits/sha256/sigmaplus.circom

@@ -1,5 +1,5 @@

-include "sum.jaz" -include "sigma.jaz" +include "binsum.circom" +include "sigma.circom" template SigmaPlus() { signal input in2[32];
M circuits/sha256/t1.circom → circuits/sha256/t1.circom

@@ -0,0 +1,33 @@

+include "binsum.circom"; +include "sigma.circom"; +include "ch.circom"; + +template T1() { + signal input h[32]; + signal input e[32]; + signal input f[32]; + signal input g[32]; + signal input k[32]; + signal input w[32]; + signal output out[32]; + + component sum = Sum(32, 5); + component ch = Ch(32); + + component bigsigma1 = Sigma(6, 11, 25); + + for (var k=0; k<32; k++) { + bigsigma1.in[k] <== e[k]; + ch.a[k] <== e[k]; + ch.b[k] <== f[k]; + ch.c[k] <== g[k] + + sum.in[0][k] <== h[k]; + sum.in[1][k] <== bigsigma1.out[k]; + sum.in[2][k] <== ch.out[k]; + sum.in[3][k] <== k[k]; + sum.in[4][k] <== w[k]; + + out[k] <== sum.out[k]; + } +}
M circuits/sha256/t2.circom → circuits/sha256/t2.circom

@@ -0,0 +1,28 @@

+include "binsum.circom"; +include "sigma.circom"; +include "maj.circom" + +template T2() { + signal input a[32]; + signal input b[32]; + signal input c[32]; + signal output out[32]; + + component sum = Sum(32, 2); + + component bigsigma0 = Sigma(2, 13, 22); + component maj = Maj(32); + + for (var k=0; k<32; k++) { + + bigsigma0.in[k] <== a[k]; + maj.a[k] <== a[k]; + maj.b[k] <== b[k]; + maj.c[k] <== c[k]; + + sum.in[0][k] <== bigsigma0.out[k]; + sum.in[1][k] <== maj.out[k]; + + out[k] <== sum.out[k]; + } +}
A circuits/sha256/xor3.circom

@@ -0,0 +1,25 @@

+/* Xor3 function for sha256 + +out = a ^ b ^ c => + +out = a+b+c - 2*a*b - 2*a*c - 2*b*c + 4*a*b*c => + +out = a*( 1 - 2*b - 2*c + 4*b*c ) + b + c - 2*b*c => + +mid = b*c +out = a*( 1 - 2*b -2*c + 4*mid ) + b + c - 2 * mid + +*/ + +template Xor3(n) { + signal input a[n]; + signal input b[n]; + signal input c[n]; + signal output out[n]; + signal mid[n]; + + for (var k=0; k<n; k++) { + mid[k] <== b[k]*c[k]; + out[k] <== a[k] * (1 -2*b[k] -2*c[k] +4*mid[k]) + b[k] + c[k] -2*mid[k]; + } +}
M package-lock.json → package-lock.json

@@ -1,6 +1,6 @@

{ "name": "circom", - "version": "0.0.2", + "version": "0.0.5", "lockfileVersion": 1, "requires": true, "dependencies": {

@@ -1470,12 +1470,12 @@ "mkdirp": "^0.5.1"

} }, "zksnark": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/zksnark/-/zksnark-0.0.2.tgz", - "integrity": "sha512-+MYducXidMTCRRuxSLLNXBEQRIzi8nA7us2jDzlf8d+yySFRymK56z7tQUics97nl1+AoGH40GhtNlWgTFBbig==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/zksnark/-/zksnark-0.0.5.tgz", + "integrity": "sha512-GmcAzmFdDI5iF7SHUiFOHnhZdW++7lbwttuZMEOEFkWHTg4Hk+dlmcYAGZ0LjpCf0zRTALODt6nystuUXF6RRw==", "dev": true, "requires": { - "big-integer": "^1.6.34", + "big-integer": "^1.6.35", "chai": "^4.1.2", "eslint": "^5.3.0" },

@@ -1493,9 +1493,9 @@ "uri-js": "^4.2.2"

} }, "big-integer": { - "version": "1.6.35", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.35.tgz", - "integrity": "sha512-jqLsX6dzmPHOhApAUyGwrpzqn3DXpdTqbOM6baPys7A423ys7IsTpcucDVGP0PmzxGsPYbW3xVOJ4SxAzI0vqQ==", + "version": "1.6.36", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.36.tgz", + "integrity": "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==", "dev": true }, "chardet": {
A test/circuits/out.json

@@ -0,0 +1,2371 @@

+{ + "mainCode": "{\n {\n }\n {\n }\n}\n", + "signalName2Idx": { + "one": 0, + "main.a": 3, + "main.b": 2, + "main.out": 1, + "main.n2ba.in": 3, + "main.n2ba.out[0]": 4, + "main.n2ba.out[1]": 5, + "main.n2ba.out[2]": 6, + "main.n2ba.out[3]": 7, + "main.n2ba.out[4]": 8, + "main.n2ba.out[5]": 9, + "main.n2ba.out[6]": 10, + "main.n2ba.out[7]": 11, + "main.n2ba.out[8]": 12, + "main.n2ba.out[9]": 13, + "main.n2ba.out[10]": 14, + "main.n2ba.out[11]": 15, + "main.n2ba.out[12]": 16, + "main.n2ba.out[13]": 17, + "main.n2ba.out[14]": 18, + "main.n2ba.out[15]": 19, + "main.n2ba.out[16]": 20, + "main.n2ba.out[17]": 21, + "main.n2ba.out[18]": 22, + "main.n2ba.out[19]": 23, + "main.n2ba.out[20]": 24, + "main.n2ba.out[21]": 25, + "main.n2ba.out[22]": 26, + "main.n2ba.out[23]": 27, + "main.n2ba.out[24]": 28, + "main.n2ba.out[25]": 29, + "main.n2ba.out[26]": 30, + "main.n2ba.out[27]": 31, + "main.n2ba.out[28]": 32, + "main.n2ba.out[29]": 33, + "main.n2ba.out[30]": 34, + "main.n2ba.out[31]": 35, + "main.n2bb.in": 2, + "main.n2bb.out[0]": 36, + "main.n2bb.out[1]": 37, + "main.n2bb.out[2]": 38, + "main.n2bb.out[3]": 39, + "main.n2bb.out[4]": 40, + "main.n2bb.out[5]": 41, + "main.n2bb.out[6]": 42, + "main.n2bb.out[7]": 43, + "main.n2bb.out[8]": 44, + "main.n2bb.out[9]": 45, + "main.n2bb.out[10]": 46, + "main.n2bb.out[11]": 47, + "main.n2bb.out[12]": 48, + "main.n2bb.out[13]": 49, + "main.n2bb.out[14]": 50, + "main.n2bb.out[15]": 51, + "main.n2bb.out[16]": 52, + "main.n2bb.out[17]": 53, + "main.n2bb.out[18]": 54, + "main.n2bb.out[19]": 55, + "main.n2bb.out[20]": 56, + "main.n2bb.out[21]": 57, + "main.n2bb.out[22]": 58, + "main.n2bb.out[23]": 59, + "main.n2bb.out[24]": 60, + "main.n2bb.out[25]": 61, + "main.n2bb.out[26]": 62, + "main.n2bb.out[27]": 63, + "main.n2bb.out[28]": 64, + "main.n2bb.out[29]": 65, + "main.n2bb.out[30]": 66, + "main.n2bb.out[31]": 67, + "main.sum.in[0][0]": 4, + "main.sum.in[0][1]": 5, + "main.sum.in[0][2]": 6, + "main.sum.in[0][3]": 7, + "main.sum.in[0][4]": 8, + "main.sum.in[0][5]": 9, + "main.sum.in[0][6]": 10, + "main.sum.in[0][7]": 11, + "main.sum.in[0][8]": 12, + "main.sum.in[0][9]": 13, + "main.sum.in[0][10]": 14, + "main.sum.in[0][11]": 15, + "main.sum.in[0][12]": 16, + "main.sum.in[0][13]": 17, + "main.sum.in[0][14]": 18, + "main.sum.in[0][15]": 19, + "main.sum.in[0][16]": 20, + "main.sum.in[0][17]": 21, + "main.sum.in[0][18]": 22, + "main.sum.in[0][19]": 23, + "main.sum.in[0][20]": 24, + "main.sum.in[0][21]": 25, + "main.sum.in[0][22]": 26, + "main.sum.in[0][23]": 27, + "main.sum.in[0][24]": 28, + "main.sum.in[0][25]": 29, + "main.sum.in[0][26]": 30, + "main.sum.in[0][27]": 31, + "main.sum.in[0][28]": 32, + "main.sum.in[0][29]": 33, + "main.sum.in[0][30]": 34, + "main.sum.in[0][31]": 35, + "main.sum.in[1][0]": 36, + "main.sum.in[1][1]": 37, + "main.sum.in[1][2]": 38, + "main.sum.in[1][3]": 39, + "main.sum.in[1][4]": 40, + "main.sum.in[1][5]": 41, + "main.sum.in[1][6]": 42, + "main.sum.in[1][7]": 43, + "main.sum.in[1][8]": 44, + "main.sum.in[1][9]": 45, + "main.sum.in[1][10]": 46, + "main.sum.in[1][11]": 47, + "main.sum.in[1][12]": 48, + "main.sum.in[1][13]": 49, + "main.sum.in[1][14]": 50, + "main.sum.in[1][15]": 51, + "main.sum.in[1][16]": 52, + "main.sum.in[1][17]": 53, + "main.sum.in[1][18]": 54, + "main.sum.in[1][19]": 55, + "main.sum.in[1][20]": 56, + "main.sum.in[1][21]": 57, + "main.sum.in[1][22]": 58, + "main.sum.in[1][23]": 59, + "main.sum.in[1][24]": 60, + "main.sum.in[1][25]": 61, + "main.sum.in[1][26]": 62, + "main.sum.in[1][27]": 63, + "main.sum.in[1][28]": 64, + "main.sum.in[1][29]": 65, + "main.sum.in[1][30]": 66, + "main.sum.in[1][31]": 67, + "main.sum.out[0]": 68, + "main.sum.out[1]": 69, + "main.sum.out[2]": 70, + "main.sum.out[3]": 71, + "main.sum.out[4]": 72, + "main.sum.out[5]": 73, + "main.sum.out[6]": 74, + "main.sum.out[7]": 75, + "main.sum.out[8]": 76, + "main.sum.out[9]": 77, + "main.sum.out[10]": 78, + "main.sum.out[11]": 79, + "main.sum.out[12]": 80, + "main.sum.out[13]": 81, + "main.sum.out[14]": 82, + "main.sum.out[15]": 83, + "main.sum.out[16]": 84, + "main.sum.out[17]": 85, + "main.sum.out[18]": 86, + "main.sum.out[19]": 87, + "main.sum.out[20]": 88, + "main.sum.out[21]": 89, + "main.sum.out[22]": 90, + "main.sum.out[23]": 91, + "main.sum.out[24]": 92, + "main.sum.out[25]": 93, + "main.sum.out[26]": 94, + "main.sum.out[27]": 95, + "main.sum.out[28]": 96, + "main.sum.out[29]": 97, + "main.sum.out[30]": 98, + "main.sum.out[31]": 99, + "main.sum.out[32]": 100, + "main.b2n.in[0]": 68, + "main.b2n.in[1]": 69, + "main.b2n.in[2]": 70, + "main.b2n.in[3]": 71, + "main.b2n.in[4]": 72, + "main.b2n.in[5]": 73, + "main.b2n.in[6]": 74, + "main.b2n.in[7]": 75, + "main.b2n.in[8]": 76, + "main.b2n.in[9]": 77, + "main.b2n.in[10]": 78, + "main.b2n.in[11]": 79, + "main.b2n.in[12]": 80, + "main.b2n.in[13]": 81, + "main.b2n.in[14]": 82, + "main.b2n.in[15]": 83, + "main.b2n.in[16]": 84, + "main.b2n.in[17]": 85, + "main.b2n.in[18]": 86, + "main.b2n.in[19]": 87, + "main.b2n.in[20]": 88, + "main.b2n.in[21]": 89, + "main.b2n.in[22]": 90, + "main.b2n.in[23]": 91, + "main.b2n.in[24]": 92, + "main.b2n.in[25]": 93, + "main.b2n.in[26]": 94, + "main.b2n.in[27]": 95, + "main.b2n.in[28]": 96, + "main.b2n.in[29]": 97, + "main.b2n.in[30]": 98, + "main.b2n.in[31]": 99, + "main.b2n.out": 1 + }, + "components": [ + { + "name": "main", + "params": {}, + "template": "A", + "inputSignals": 2 + }, + { + "name": "main.n2ba", + "params": { + "n": "32" + }, + "template": "Num2Bits", + "inputSignals": 1 + }, + { + "name": "main.n2bb", + "params": { + "n": "32" + }, + "template": "Num2Bits", + "inputSignals": 1 + }, + { + "name": "main.sum", + "params": { + "n": "32", + "ops": "2" + }, + "template": "BinSum", + "inputSignals": 64 + }, + { + "name": "main.b2n", + "params": { + "n": "32" + }, + "template": "Bits2Num", + "inputSignals": 32 + } + ], + "componentName2Idx": { + "main": 0, + "main.n2ba": 1, + "main.n2bb": 2, + "main.sum": 3, + "main.b2n": 4 + }, + "signals": [ + { + "names": [ + "one" + ], + "triggerComponents": [] + }, + { + "names": [ + "main.out", + "main.b2n.out" + ], + "triggerComponents": [] + }, + { + "names": [ + "main.b", + "main.n2bb.in" + ], + "triggerComponents": [ + 0, + 2 + ] + }, + { + "names": [ + "main.a", + "main.n2ba.in" + ], + "triggerComponents": [ + 0, + 1 + ] + }, + { + "names": [ + "main.n2ba.out[0]", + "main.sum.in[0][0]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[1]", + "main.sum.in[0][1]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[2]", + "main.sum.in[0][2]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[3]", + "main.sum.in[0][3]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[4]", + "main.sum.in[0][4]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[5]", + "main.sum.in[0][5]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[6]", + "main.sum.in[0][6]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[7]", + "main.sum.in[0][7]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[8]", + "main.sum.in[0][8]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[9]", + "main.sum.in[0][9]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[10]", + "main.sum.in[0][10]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[11]", + "main.sum.in[0][11]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[12]", + "main.sum.in[0][12]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[13]", + "main.sum.in[0][13]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[14]", + "main.sum.in[0][14]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[15]", + "main.sum.in[0][15]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[16]", + "main.sum.in[0][16]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[17]", + "main.sum.in[0][17]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[18]", + "main.sum.in[0][18]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[19]", + "main.sum.in[0][19]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[20]", + "main.sum.in[0][20]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[21]", + "main.sum.in[0][21]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[22]", + "main.sum.in[0][22]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[23]", + "main.sum.in[0][23]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[24]", + "main.sum.in[0][24]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[25]", + "main.sum.in[0][25]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[26]", + "main.sum.in[0][26]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[27]", + "main.sum.in[0][27]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[28]", + "main.sum.in[0][28]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[29]", + "main.sum.in[0][29]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[30]", + "main.sum.in[0][30]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2ba.out[31]", + "main.sum.in[0][31]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[0]", + "main.sum.in[1][0]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[1]", + "main.sum.in[1][1]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[2]", + "main.sum.in[1][2]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[3]", + "main.sum.in[1][3]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[4]", + "main.sum.in[1][4]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[5]", + "main.sum.in[1][5]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[6]", + "main.sum.in[1][6]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[7]", + "main.sum.in[1][7]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[8]", + "main.sum.in[1][8]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[9]", + "main.sum.in[1][9]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[10]", + "main.sum.in[1][10]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[11]", + "main.sum.in[1][11]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[12]", + "main.sum.in[1][12]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[13]", + "main.sum.in[1][13]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[14]", + "main.sum.in[1][14]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[15]", + "main.sum.in[1][15]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[16]", + "main.sum.in[1][16]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[17]", + "main.sum.in[1][17]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[18]", + "main.sum.in[1][18]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[19]", + "main.sum.in[1][19]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[20]", + "main.sum.in[1][20]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[21]", + "main.sum.in[1][21]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[22]", + "main.sum.in[1][22]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[23]", + "main.sum.in[1][23]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[24]", + "main.sum.in[1][24]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[25]", + "main.sum.in[1][25]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[26]", + "main.sum.in[1][26]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[27]", + "main.sum.in[1][27]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[28]", + "main.sum.in[1][28]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[29]", + "main.sum.in[1][29]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[30]", + "main.sum.in[1][30]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.n2bb.out[31]", + "main.sum.in[1][31]" + ], + "triggerComponents": [ + 3 + ] + }, + { + "names": [ + "main.sum.out[0]", + "main.b2n.in[0]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[1]", + "main.b2n.in[1]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[2]", + "main.b2n.in[2]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[3]", + "main.b2n.in[3]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[4]", + "main.b2n.in[4]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[5]", + "main.b2n.in[5]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[6]", + "main.b2n.in[6]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[7]", + "main.b2n.in[7]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[8]", + "main.b2n.in[8]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[9]", + "main.b2n.in[9]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[10]", + "main.b2n.in[10]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[11]", + "main.b2n.in[11]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[12]", + "main.b2n.in[12]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[13]", + "main.b2n.in[13]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[14]", + "main.b2n.in[14]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[15]", + "main.b2n.in[15]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[16]", + "main.b2n.in[16]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[17]", + "main.b2n.in[17]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[18]", + "main.b2n.in[18]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[19]", + "main.b2n.in[19]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[20]", + "main.b2n.in[20]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[21]", + "main.b2n.in[21]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[22]", + "main.b2n.in[22]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[23]", + "main.b2n.in[23]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[24]", + "main.b2n.in[24]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[25]", + "main.b2n.in[25]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[26]", + "main.b2n.in[26]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[27]", + "main.b2n.in[27]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[28]", + "main.b2n.in[28]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[29]", + "main.b2n.in[29]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[30]", + "main.b2n.in[30]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[31]", + "main.b2n.in[31]" + ], + "triggerComponents": [ + 4 + ] + }, + { + "names": [ + "main.sum.out[32]" + ], + "triggerComponents": [] + } + ], + "constraints": [ + [ + { + "4": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "4": "1" + }, + {} + ], + [ + { + "5": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "5": "1" + }, + {} + ], + [ + { + "6": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "6": "1" + }, + {} + ], + [ + { + "7": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "7": "1" + }, + {} + ], + [ + { + "8": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "8": "1" + }, + {} + ], + [ + { + "9": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "9": "1" + }, + {} + ], + [ + { + "10": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "10": "1" + }, + {} + ], + [ + { + "11": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "11": "1" + }, + {} + ], + [ + { + "12": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "12": "1" + }, + {} + ], + [ + { + "13": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "13": "1" + }, + {} + ], + [ + { + "14": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "14": "1" + }, + {} + ], + [ + { + "15": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "15": "1" + }, + {} + ], + [ + { + "16": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "16": "1" + }, + {} + ], + [ + { + "17": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "17": "1" + }, + {} + ], + [ + { + "18": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "18": "1" + }, + {} + ], + [ + { + "19": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "19": "1" + }, + {} + ], + [ + { + "20": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "20": "1" + }, + {} + ], + [ + { + "21": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "21": "1" + }, + {} + ], + [ + { + "22": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "22": "1" + }, + {} + ], + [ + { + "23": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "23": "1" + }, + {} + ], + [ + { + "24": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "24": "1" + }, + {} + ], + [ + { + "25": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "25": "1" + }, + {} + ], + [ + { + "26": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "26": "1" + }, + {} + ], + [ + { + "27": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "27": "1" + }, + {} + ], + [ + { + "28": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "28": "1" + }, + {} + ], + [ + { + "29": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "29": "1" + }, + {} + ], + [ + { + "30": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "30": "1" + }, + {} + ], + [ + { + "31": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "31": "1" + }, + {} + ], + [ + { + "32": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "32": "1" + }, + {} + ], + [ + { + "33": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "33": "1" + }, + {} + ], + [ + { + "34": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "34": "1" + }, + {} + ], + [ + { + "35": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "35": "1" + }, + {} + ], + [ + {}, + {}, + { + "3": "1", + "4": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "5": "21888242871839275222246405745257275088548364400416034343698204186575808495615", + "6": "21888242871839275222246405745257275088548364400416034343698204186575808495613", + "7": "21888242871839275222246405745257275088548364400416034343698204186575808495609", + "8": "21888242871839275222246405745257275088548364400416034343698204186575808495601", + "9": "21888242871839275222246405745257275088548364400416034343698204186575808495585", + "10": "21888242871839275222246405745257275088548364400416034343698204186575808495553", + "11": "21888242871839275222246405745257275088548364400416034343698204186575808495489", + "12": "21888242871839275222246405745257275088548364400416034343698204186575808495361", + "13": "21888242871839275222246405745257275088548364400416034343698204186575808495105", + "14": "21888242871839275222246405745257275088548364400416034343698204186575808494593", + "15": "21888242871839275222246405745257275088548364400416034343698204186575808493569", + "16": "21888242871839275222246405745257275088548364400416034343698204186575808491521", + "17": "21888242871839275222246405745257275088548364400416034343698204186575808487425", + "18": "21888242871839275222246405745257275088548364400416034343698204186575808479233", + "19": "21888242871839275222246405745257275088548364400416034343698204186575808462849", + "20": "21888242871839275222246405745257275088548364400416034343698204186575808430081", + "21": "21888242871839275222246405745257275088548364400416034343698204186575808364545", + "22": "21888242871839275222246405745257275088548364400416034343698204186575808233473", + "23": "21888242871839275222246405745257275088548364400416034343698204186575807971329", + "24": "21888242871839275222246405745257275088548364400416034343698204186575807447041", + "25": "21888242871839275222246405745257275088548364400416034343698204186575806398465", + "26": "21888242871839275222246405745257275088548364400416034343698204186575804301313", + "27": "21888242871839275222246405745257275088548364400416034343698204186575800107009", + "28": "21888242871839275222246405745257275088548364400416034343698204186575791718401", + "29": "21888242871839275222246405745257275088548364400416034343698204186575774941185", + "30": "21888242871839275222246405745257275088548364400416034343698204186575741386753", + "31": "21888242871839275222246405745257275088548364400416034343698204186575674277889", + "32": "21888242871839275222246405745257275088548364400416034343698204186575540060161", + "33": "21888242871839275222246405745257275088548364400416034343698204186575271624705", + "34": "21888242871839275222246405745257275088548364400416034343698204186574734753793", + "35": "21888242871839275222246405745257275088548364400416034343698204186573661011969" + } + ], + [ + { + "36": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "36": "1" + }, + {} + ], + [ + { + "37": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "37": "1" + }, + {} + ], + [ + { + "38": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "38": "1" + }, + {} + ], + [ + { + "39": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "39": "1" + }, + {} + ], + [ + { + "40": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "40": "1" + }, + {} + ], + [ + { + "41": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "41": "1" + }, + {} + ], + [ + { + "42": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "42": "1" + }, + {} + ], + [ + { + "43": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "43": "1" + }, + {} + ], + [ + { + "44": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "44": "1" + }, + {} + ], + [ + { + "45": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "45": "1" + }, + {} + ], + [ + { + "46": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "46": "1" + }, + {} + ], + [ + { + "47": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "47": "1" + }, + {} + ], + [ + { + "48": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "48": "1" + }, + {} + ], + [ + { + "49": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "49": "1" + }, + {} + ], + [ + { + "50": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "50": "1" + }, + {} + ], + [ + { + "51": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "51": "1" + }, + {} + ], + [ + { + "52": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "52": "1" + }, + {} + ], + [ + { + "53": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "53": "1" + }, + {} + ], + [ + { + "54": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "54": "1" + }, + {} + ], + [ + { + "55": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "55": "1" + }, + {} + ], + [ + { + "56": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "56": "1" + }, + {} + ], + [ + { + "57": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "57": "1" + }, + {} + ], + [ + { + "58": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "58": "1" + }, + {} + ], + [ + { + "59": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "59": "1" + }, + {} + ], + [ + { + "60": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "60": "1" + }, + {} + ], + [ + { + "61": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "61": "1" + }, + {} + ], + [ + { + "62": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "62": "1" + }, + {} + ], + [ + { + "63": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "63": "1" + }, + {} + ], + [ + { + "64": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "64": "1" + }, + {} + ], + [ + { + "65": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "65": "1" + }, + {} + ], + [ + { + "66": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "66": "1" + }, + {} + ], + [ + { + "67": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "67": "1" + }, + {} + ], + [ + {}, + {}, + { + "2": "1", + "36": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "37": "21888242871839275222246405745257275088548364400416034343698204186575808495615", + "38": "21888242871839275222246405745257275088548364400416034343698204186575808495613", + "39": "21888242871839275222246405745257275088548364400416034343698204186575808495609", + "40": "21888242871839275222246405745257275088548364400416034343698204186575808495601", + "41": "21888242871839275222246405745257275088548364400416034343698204186575808495585", + "42": "21888242871839275222246405745257275088548364400416034343698204186575808495553", + "43": "21888242871839275222246405745257275088548364400416034343698204186575808495489", + "44": "21888242871839275222246405745257275088548364400416034343698204186575808495361", + "45": "21888242871839275222246405745257275088548364400416034343698204186575808495105", + "46": "21888242871839275222246405745257275088548364400416034343698204186575808494593", + "47": "21888242871839275222246405745257275088548364400416034343698204186575808493569", + "48": "21888242871839275222246405745257275088548364400416034343698204186575808491521", + "49": "21888242871839275222246405745257275088548364400416034343698204186575808487425", + "50": "21888242871839275222246405745257275088548364400416034343698204186575808479233", + "51": "21888242871839275222246405745257275088548364400416034343698204186575808462849", + "52": "21888242871839275222246405745257275088548364400416034343698204186575808430081", + "53": "21888242871839275222246405745257275088548364400416034343698204186575808364545", + "54": "21888242871839275222246405745257275088548364400416034343698204186575808233473", + "55": "21888242871839275222246405745257275088548364400416034343698204186575807971329", + "56": "21888242871839275222246405745257275088548364400416034343698204186575807447041", + "57": "21888242871839275222246405745257275088548364400416034343698204186575806398465", + "58": "21888242871839275222246405745257275088548364400416034343698204186575804301313", + "59": "21888242871839275222246405745257275088548364400416034343698204186575800107009", + "60": "21888242871839275222246405745257275088548364400416034343698204186575791718401", + "61": "21888242871839275222246405745257275088548364400416034343698204186575774941185", + "62": "21888242871839275222246405745257275088548364400416034343698204186575741386753", + "63": "21888242871839275222246405745257275088548364400416034343698204186575674277889", + "64": "21888242871839275222246405745257275088548364400416034343698204186575540060161", + "65": "21888242871839275222246405745257275088548364400416034343698204186575271624705", + "66": "21888242871839275222246405745257275088548364400416034343698204186574734753793", + "67": "21888242871839275222246405745257275088548364400416034343698204186573661011969" + } + ], + [ + { + "68": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "68": "1" + }, + {} + ], + [ + { + "69": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "69": "1" + }, + {} + ], + [ + { + "70": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "70": "1" + }, + {} + ], + [ + { + "71": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "71": "1" + }, + {} + ], + [ + { + "72": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "72": "1" + }, + {} + ], + [ + { + "73": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "73": "1" + }, + {} + ], + [ + { + "74": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "74": "1" + }, + {} + ], + [ + { + "75": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "75": "1" + }, + {} + ], + [ + { + "76": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "76": "1" + }, + {} + ], + [ + { + "77": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "77": "1" + }, + {} + ], + [ + { + "78": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "78": "1" + }, + {} + ], + [ + { + "79": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "79": "1" + }, + {} + ], + [ + { + "80": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "80": "1" + }, + {} + ], + [ + { + "81": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "81": "1" + }, + {} + ], + [ + { + "82": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "82": "1" + }, + {} + ], + [ + { + "83": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "83": "1" + }, + {} + ], + [ + { + "84": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "84": "1" + }, + {} + ], + [ + { + "85": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "85": "1" + }, + {} + ], + [ + { + "86": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "86": "1" + }, + {} + ], + [ + { + "87": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "87": "1" + }, + {} + ], + [ + { + "88": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "88": "1" + }, + {} + ], + [ + { + "89": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "89": "1" + }, + {} + ], + [ + { + "90": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "90": "1" + }, + {} + ], + [ + { + "91": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "91": "1" + }, + {} + ], + [ + { + "92": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "92": "1" + }, + {} + ], + [ + { + "93": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "93": "1" + }, + {} + ], + [ + { + "94": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "94": "1" + }, + {} + ], + [ + { + "95": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "95": "1" + }, + {} + ], + [ + { + "96": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "96": "1" + }, + {} + ], + [ + { + "97": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "97": "1" + }, + {} + ], + [ + { + "98": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "98": "1" + }, + {} + ], + [ + { + "99": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "99": "1" + }, + {} + ], + [ + { + "100": "1" + }, + { + "0": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "100": "1" + }, + {} + ], + [ + {}, + {}, + { + "4": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "5": "21888242871839275222246405745257275088548364400416034343698204186575808495615", + "6": "21888242871839275222246405745257275088548364400416034343698204186575808495613", + "7": "21888242871839275222246405745257275088548364400416034343698204186575808495609", + "8": "21888242871839275222246405745257275088548364400416034343698204186575808495601", + "9": "21888242871839275222246405745257275088548364400416034343698204186575808495585", + "10": "21888242871839275222246405745257275088548364400416034343698204186575808495553", + "11": "21888242871839275222246405745257275088548364400416034343698204186575808495489", + "12": "21888242871839275222246405745257275088548364400416034343698204186575808495361", + "13": "21888242871839275222246405745257275088548364400416034343698204186575808495105", + "14": "21888242871839275222246405745257275088548364400416034343698204186575808494593", + "15": "21888242871839275222246405745257275088548364400416034343698204186575808493569", + "16": "21888242871839275222246405745257275088548364400416034343698204186575808491521", + "17": "21888242871839275222246405745257275088548364400416034343698204186575808487425", + "18": "21888242871839275222246405745257275088548364400416034343698204186575808479233", + "19": "21888242871839275222246405745257275088548364400416034343698204186575808462849", + "20": "21888242871839275222246405745257275088548364400416034343698204186575808430081", + "21": "21888242871839275222246405745257275088548364400416034343698204186575808364545", + "22": "21888242871839275222246405745257275088548364400416034343698204186575808233473", + "23": "21888242871839275222246405745257275088548364400416034343698204186575807971329", + "24": "21888242871839275222246405745257275088548364400416034343698204186575807447041", + "25": "21888242871839275222246405745257275088548364400416034343698204186575806398465", + "26": "21888242871839275222246405745257275088548364400416034343698204186575804301313", + "27": "21888242871839275222246405745257275088548364400416034343698204186575800107009", + "28": "21888242871839275222246405745257275088548364400416034343698204186575791718401", + "29": "21888242871839275222246405745257275088548364400416034343698204186575774941185", + "30": "21888242871839275222246405745257275088548364400416034343698204186575741386753", + "31": "21888242871839275222246405745257275088548364400416034343698204186575674277889", + "32": "21888242871839275222246405745257275088548364400416034343698204186575540060161", + "33": "21888242871839275222246405745257275088548364400416034343698204186575271624705", + "34": "21888242871839275222246405745257275088548364400416034343698204186574734753793", + "35": "21888242871839275222246405745257275088548364400416034343698204186573661011969", + "36": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "37": "21888242871839275222246405745257275088548364400416034343698204186575808495615", + "38": "21888242871839275222246405745257275088548364400416034343698204186575808495613", + "39": "21888242871839275222246405745257275088548364400416034343698204186575808495609", + "40": "21888242871839275222246405745257275088548364400416034343698204186575808495601", + "41": "21888242871839275222246405745257275088548364400416034343698204186575808495585", + "42": "21888242871839275222246405745257275088548364400416034343698204186575808495553", + "43": "21888242871839275222246405745257275088548364400416034343698204186575808495489", + "44": "21888242871839275222246405745257275088548364400416034343698204186575808495361", + "45": "21888242871839275222246405745257275088548364400416034343698204186575808495105", + "46": "21888242871839275222246405745257275088548364400416034343698204186575808494593", + "47": "21888242871839275222246405745257275088548364400416034343698204186575808493569", + "48": "21888242871839275222246405745257275088548364400416034343698204186575808491521", + "49": "21888242871839275222246405745257275088548364400416034343698204186575808487425", + "50": "21888242871839275222246405745257275088548364400416034343698204186575808479233", + "51": "21888242871839275222246405745257275088548364400416034343698204186575808462849", + "52": "21888242871839275222246405745257275088548364400416034343698204186575808430081", + "53": "21888242871839275222246405745257275088548364400416034343698204186575808364545", + "54": "21888242871839275222246405745257275088548364400416034343698204186575808233473", + "55": "21888242871839275222246405745257275088548364400416034343698204186575807971329", + "56": "21888242871839275222246405745257275088548364400416034343698204186575807447041", + "57": "21888242871839275222246405745257275088548364400416034343698204186575806398465", + "58": "21888242871839275222246405745257275088548364400416034343698204186575804301313", + "59": "21888242871839275222246405745257275088548364400416034343698204186575800107009", + "60": "21888242871839275222246405745257275088548364400416034343698204186575791718401", + "61": "21888242871839275222246405745257275088548364400416034343698204186575774941185", + "62": "21888242871839275222246405745257275088548364400416034343698204186575741386753", + "63": "21888242871839275222246405745257275088548364400416034343698204186575674277889", + "64": "21888242871839275222246405745257275088548364400416034343698204186575540060161", + "65": "21888242871839275222246405745257275088548364400416034343698204186575271624705", + "66": "21888242871839275222246405745257275088548364400416034343698204186574734753793", + "67": "21888242871839275222246405745257275088548364400416034343698204186573661011969", + "68": "1", + "69": "2", + "70": "4", + "71": "8", + "72": "16", + "73": "32", + "74": "64", + "75": "128", + "76": "256", + "77": "512", + "78": "1024", + "79": "2048", + "80": "4096", + "81": "8192", + "82": "16384", + "83": "32768", + "84": "65536", + "85": "131072", + "86": "262144", + "87": "524288", + "88": "1048576", + "89": "2097152", + "90": "4194304", + "91": "8388608", + "92": "16777216", + "93": "33554432", + "94": "67108864", + "95": "134217728", + "96": "268435456", + "97": "536870912", + "98": "1073741824", + "99": "2147483648", + "100": "4294967296" + } + ], + [ + {}, + {}, + { + "1": "21888242871839275222246405745257275088548364400416034343698204186575808495616", + "68": "1", + "69": "2", + "70": "4", + "71": "8", + "72": "16", + "73": "32", + "74": "64", + "75": "128", + "76": "256", + "77": "512", + "78": "1024", + "79": "2048", + "80": "4096", + "81": "8192", + "82": "16384", + "83": "32768", + "84": "65536", + "85": "131072", + "86": "262144", + "87": "524288", + "88": "1048576", + "89": "2097152", + "90": "4194304", + "91": "8388608", + "92": "16777216", + "93": "33554432", + "94": "67108864", + "95": "134217728", + "96": "268435456", + "97": "536870912", + "98": "1073741824", + "99": "2147483648" + } + ] + ], + "templates": { + "Num2Bits": "function(ctx) {\n ctx.setVar(\"lc1\", [], \"0\");\n for (ctx.setVar(\"i\", [], \"0\");bigInt(ctx.getVar(\"i\",[])).lt(bigInt(ctx.getVar(\"n\",[]))) ? 1 : 0;(ctx.setVar(\"i\", [], bigInt(ctx.getVar(\"i\",[])).add(bigInt(\"1\")).mod(__P__))).add(__P__).sub(bigInt(1)).mod(__P__))\n {\n ctx.setSignal(\"out\", [ctx.getVar(\"i\",[])], bigInt(bigInt(ctx.getVar(\"i\",[])).greater(bigInt(256)) ? 0 : bigInt(ctx.getSignal(\"in\", [])).shr(bigInt(ctx.getVar(\"i\",[]))).and(__MASK__)).and(bigInt(\"1\")).and(__MASK__));\n ctx.assert(bigInt(ctx.getSignal(\"out\", [ctx.getVar(\"i\",[])])).mul(bigInt(bigInt(ctx.getSignal(\"out\", [ctx.getVar(\"i\",[])])).add(__P__).sub(bigInt(\"1\")).mod(__P__))).mod(__P__), \"0\");\n ctx.setVar(\"lc1\", [], bigInt(ctx.getVar(\"lc1\",[])).add(bigInt(bigInt(ctx.getSignal(\"out\", [ctx.getVar(\"i\",[])])).mul(bigInt(bigInt(\"2\").modPow(bigInt(ctx.getVar(\"i\",[])), __P__))).mod(__P__))).mod(__P__));\n }\n ctx.assert(ctx.getVar(\"lc1\",[]), ctx.getSignal(\"in\", []));\n}\n", + "Bits2Num": "function(ctx) {\n ctx.setVar(\"lc1\", [], \"0\");\n for (ctx.setVar(\"i\", [], \"0\");bigInt(ctx.getVar(\"i\",[])).lt(bigInt(ctx.getVar(\"n\",[]))) ? 1 : 0;(ctx.setVar(\"i\", [], bigInt(ctx.getVar(\"i\",[])).add(bigInt(\"1\")).mod(__P__))).add(__P__).sub(bigInt(1)).mod(__P__))\n {\n ctx.setVar(\"lc1\", [], bigInt(ctx.getVar(\"lc1\",[])).add(bigInt(bigInt(ctx.getSignal(\"in\", [ctx.getVar(\"i\",[])])).mul(bigInt(bigInt(\"2\").modPow(bigInt(ctx.getVar(\"i\",[])), __P__))).mod(__P__))).mod(__P__));\n }\n ctx.setSignal(\"out\", [], ctx.getVar(\"lc1\",[]));\n ctx.assert(ctx.getSignal(\"out\", []), ctx.getVar(\"lc1\",[]));\n}\n", + "BinSum": "function(ctx) {\n ctx.setVar(\"nout\", [], ctx.callFunction(\"nbits\", [bigInt(bigInt(bigInt(\"2\").modPow(bigInt(ctx.getVar(\"n\",[])), __P__)).add(__P__).sub(bigInt(\"1\")).mod(__P__)).mul(bigInt(ctx.getVar(\"ops\",[]))).mod(__P__)]));\n ctx.setVar(\"lin\", [], \"0\");\n ctx.setVar(\"lout\", [], \"0\");\n for (ctx.setVar(\"k\", [], \"0\");bigInt(ctx.getVar(\"k\",[])).lt(bigInt(ctx.getVar(\"n\",[]))) ? 1 : 0;(ctx.setVar(\"k\", [], bigInt(ctx.getVar(\"k\",[])).add(bigInt(\"1\")).mod(__P__))).add(__P__).sub(bigInt(1)).mod(__P__))\n {\n for (ctx.setVar(\"j\", [], \"0\");bigInt(ctx.getVar(\"j\",[])).lt(bigInt(ctx.getVar(\"ops\",[]))) ? 1 : 0;(ctx.setVar(\"j\", [], bigInt(ctx.getVar(\"j\",[])).add(bigInt(\"1\")).mod(__P__))).add(__P__).sub(bigInt(1)).mod(__P__))\n {\n ctx.setVar(\"lin\", [], bigInt(ctx.getVar(\"lin\",[])).add(bigInt(bigInt(ctx.getSignal(\"in\", [ctx.getVar(\"j\",[]),ctx.getVar(\"k\",[])])).mul(bigInt(bigInt(\"2\").modPow(bigInt(ctx.getVar(\"k\",[])), __P__))).mod(__P__))).mod(__P__));\n }\n }\n for (ctx.setVar(\"k\", [], \"0\");bigInt(ctx.getVar(\"k\",[])).lt(bigInt(ctx.getVar(\"nout\",[]))) ? 1 : 0;(ctx.setVar(\"k\", [], bigInt(ctx.getVar(\"k\",[])).add(bigInt(\"1\")).mod(__P__))).add(__P__).sub(bigInt(1)).mod(__P__))\n {\n ctx.setSignal(\"out\", [ctx.getVar(\"k\",[])], bigInt(bigInt(ctx.getVar(\"k\",[])).greater(bigInt(256)) ? 0 : bigInt(ctx.getVar(\"lin\",[])).shr(bigInt(ctx.getVar(\"k\",[]))).and(__MASK__)).and(bigInt(\"1\")).and(__MASK__));\n ctx.assert(bigInt(ctx.getSignal(\"out\", [ctx.getVar(\"k\",[])])).mul(bigInt(bigInt(ctx.getSignal(\"out\", [ctx.getVar(\"k\",[])])).add(__P__).sub(bigInt(\"1\")).mod(__P__))).mod(__P__), \"0\");\n ctx.setVar(\"lout\", [], bigInt(ctx.getVar(\"lout\",[])).add(bigInt(bigInt(ctx.getSignal(\"out\", [ctx.getVar(\"k\",[])])).mul(bigInt(bigInt(\"2\").modPow(bigInt(ctx.getVar(\"k\",[])), __P__))).mod(__P__))).mod(__P__));\n }\n ctx.assert(ctx.getVar(\"lin\",[]), ctx.getVar(\"lout\",[]));\n}\n", + "A": "function(ctx) {\n ctx.setPin(\"n2ba\", [], \"in\", [], ctx.getSignal(\"a\", []));\n ctx.assert(ctx.getPin(\"n2ba\", [], \"in\", []), ctx.getSignal(\"a\", []));\n ctx.setPin(\"n2bb\", [], \"in\", [], ctx.getSignal(\"b\", []));\n ctx.assert(ctx.getPin(\"n2bb\", [], \"in\", []), ctx.getSignal(\"b\", []));\n for (ctx.setVar(\"i\", [], \"0\");bigInt(ctx.getVar(\"i\",[])).lt(bigInt(\"32\")) ? 1 : 0;(ctx.setVar(\"i\", [], bigInt(ctx.getVar(\"i\",[])).add(bigInt(\"1\")).mod(__P__))).add(__P__).sub(bigInt(1)).mod(__P__))\n {\n ctx.setPin(\"sum\", [], \"in\", [\"0\",ctx.getVar(\"i\",[])], ctx.getPin(\"n2ba\", [], \"out\", [ctx.getVar(\"i\",[])]));\n ctx.assert(ctx.getPin(\"sum\", [], \"in\", [\"0\",ctx.getVar(\"i\",[])]), ctx.getPin(\"n2ba\", [], \"out\", [ctx.getVar(\"i\",[])]));\n ctx.setPin(\"sum\", [], \"in\", [\"1\",ctx.getVar(\"i\",[])], ctx.getPin(\"n2bb\", [], \"out\", [ctx.getVar(\"i\",[])]));\n ctx.assert(ctx.getPin(\"sum\", [], \"in\", [\"1\",ctx.getVar(\"i\",[])]), ctx.getPin(\"n2bb\", [], \"out\", [ctx.getVar(\"i\",[])]));\n ctx.setPin(\"b2n\", [], \"in\", [ctx.getVar(\"i\",[])], ctx.getPin(\"sum\", [], \"out\", [ctx.getVar(\"i\",[])]));\n ctx.assert(ctx.getPin(\"b2n\", [], \"in\", [ctx.getVar(\"i\",[])]), ctx.getPin(\"sum\", [], \"out\", [ctx.getVar(\"i\",[])]));\n }\n ctx.setSignal(\"out\", [], ctx.getPin(\"b2n\", [], \"out\", []));\n ctx.assert(ctx.getSignal(\"out\", []), ctx.getPin(\"b2n\", [], \"out\", []));\n}\n" + }, + "functions": { + "nbits": { + "params": [ + "a" + ], + "func": "function(ctx) {\n ctx.setVar(\"n\", [], \"1\");\n ctx.setVar(\"r\", [], \"0\");\n while (bigInt(bigInt(ctx.getVar(\"n\",[])).add(__P__).sub(bigInt(\"1\")).mod(__P__)).lt(bigInt(ctx.getVar(\"a\",[]))) ? 1 : 0)\n {\n (ctx.setVar(\"r\", [], bigInt(ctx.getVar(\"r\",[])).add(bigInt(\"1\")).mod(__P__))).add(__P__).sub(bigInt(1)).mod(__P__);\n ctx.setVar(\"n\", [], bigInt(ctx.getVar(\"n\",[])).mul(bigInt(\"2\")).mod(__P__));\n }\n return ctx.getVar(\"r\",[]);;\n}\n" + } + }, + "nPrvInputs": 1, + "nPubInputs": 1, + "nInputs": 2, + "nOutputs": 1, + "nVars": 101, + "nConstants": 0, + "nSignals": 101 +}
A test/circuits/sha256_2_test.circom

@@ -0,0 +1,15 @@

+include "../../circuits/sha256/sha256_2.circom"; + +template Main() { + signal private input a; + signal private input b; + signal output out; + + component sha256_2 = Sha256_2(); + + sha256_2.a <== a; + sha256_2.b <== a; + out <== sha256_2.out; +} + +component main = Main();
M test/sha256.js → test/sha256.js

@@ -1,6 +1,7 @@

const chai = require("chai"); const path = require("path"); const zkSnark = require("zksnark"); +const crypto = require("crypto"); const compiler = require("../index.js");

@@ -30,6 +31,23 @@ const witness = circuit.calculateWitness({ "a": "111", "b": "222" });

assert(witness[0].equals(zkSnark.bigInt(1))); assert(witness[1].equals(zkSnark.bigInt("333"))); + }); + it("Should calculate a hash", async () => { + const cirDef = await compiler(path.join(__dirname, "circuits", "sha256_2_test.circom")); + const circuit = new zkSnark.Circuit(cirDef); + + const witness = circuit.calculateWitness({ "a": "1", "b": "2" }); + + const b = new Buffer.alloc(432); + b[115] = 1; + b[431] = 2; + + const hash = crypto.createHash("sha256") + .update(b) + .digest("hex"); + const r = "0x" + hash.slice(40); + + assert(witness[1].equals(zkSnark.bigInt(r))); });