1
0
Fork 0
mirror of synced 2025-09-24 04:40:05 +00:00
ZoKrates/zokrates_cli/examples/sha256/utils/32/compression_round.code
2018-08-21 13:05:17 +02:00

42 lines
No EOL
17 KiB
Text

// COMPRESSION ROUND
import "./ar6xar11xar25.code" as AR6XAR11XAR25
import "./ar2xar13xar22.code" as AR2XAR13XAR22
import "./../../bitwise/32/andxornotand.code" as ANDXORNOTAND
import "./../../bitwise/32/andxorandxorand.code" as ANDXORANDXORAND
import "./add.code" as ADD2
def ADD5(field a31, field a30, field a29, field a28, field a27, field a26, field a25, field a24, field a23, field a22, field a21, field a20, field a19, field a18, field a17, field a16, field a15, field a14, field a13, field a12, field a11, field a10, field a9, field a8, field a7, field a6, field a5, field a4, field a3, field a2, field a1, field a0, field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0, field c31, field c30, field c29, field c28, field c27, field c26, field c25, field c24, field c23, field c22, field c21, field c20, field c19, field c18, field c17, field c16, field c15, field c14, field c13, field c12, field c11, field c10, field c9, field c8, field c7, field c6, field c5, field c4, field c3, field c2, field c1, field c0, field d31, field d30, field d29, field d28, field d27, field d26, field d25, field d24, field d23, field d22, field d21, field d20, field d19, field d18, field d17, field d16, field d15, field d14, field d13, field d12, field d11, field d10, field d9, field d8, field d7, field d6, field d5, field d4, field d3, field d2, field d1, field d0, field e31, field e30, field e29, field e28, field e27, field e26, field e25, field e24, field e23, field e22, field e21, field e20, field e19, field e18, field e17, field e16, field e15, field e14, field e13, field e12, field e11, field e10, field e9, field e8, field e7, field e6, field e5, field e4, field e3, field e2, field e1, field e0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field):
ab31, ab30, ab29, ab28, ab27, ab26, ab25, ab24, ab23, ab22, ab21, ab20, ab19, ab18, ab17, ab16, ab15, ab14, ab13, ab12, ab11, ab10, ab9, ab8, ab7, ab6, ab5, ab4, ab3, ab2, ab1, ab0 = ADD2(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0)
cd31, cd30, cd29, cd28, cd27, cd26, cd25, cd24, cd23, cd22, cd21, cd20, cd19, cd18, cd17, cd16, cd15, cd14, cd13, cd12, cd11, cd10, cd9, cd8, cd7, cd6, cd5, cd4, cd3, cd2, cd1, cd0 = ADD2(c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0)
abcd31, abcd30, abcd29, abcd28, abcd27, abcd26, abcd25, abcd24, abcd23, abcd22, abcd21, abcd20, abcd19, abcd18, abcd17, abcd16, abcd15, abcd14, abcd13, abcd12, abcd11, abcd10, abcd9, abcd8, abcd7, abcd6, abcd5, abcd4, abcd3, abcd2, abcd1, abcd0 = ADD2(ab31, ab30, ab29, ab28, ab27, ab26, ab25, ab24, ab23, ab22, ab21, ab20, ab19, ab18, ab17, ab16, ab15, ab14, ab13, ab12, ab11, ab10, ab9, ab8, ab7, ab6, ab5, ab4, ab3, ab2, ab1, ab0, cd31, cd30, cd29, cd28, cd27, cd26, cd25, cd24, cd23, cd22, cd21, cd20, cd19, cd18, cd17, cd16, cd15, cd14, cd13, cd12, cd11, cd10, cd9, cd8, cd7, cd6, cd5, cd4, cd3, cd2, cd1, cd0)
abcde31, abcde30, abcde29, abcde28, abcde27, abcde26, abcde25, abcde24, abcde23, abcde22, abcde21, abcde20, abcde19, abcde18, abcde17, abcde16, abcde15, abcde14, abcde13, abcde12, abcde11, abcde10, abcde9, abcde8, abcde7, abcde6, abcde5, abcde4, abcde3, abcde2, abcde1, abcde0 = ADD2(abcd31, abcd30, abcd29, abcd28, abcd27, abcd26, abcd25, abcd24, abcd23, abcd22, abcd21, abcd20, abcd19, abcd18, abcd17, abcd16, abcd15, abcd14, abcd13, abcd12, abcd11, abcd10, abcd9, abcd8, abcd7, abcd6, abcd5, abcd4, abcd3, abcd2, abcd1, abcd0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)
return abcde31, abcde30, abcde29, abcde28, abcde27, abcde26, abcde25, abcde24, abcde23, abcde22, abcde21, abcde20, abcde19, abcde18, abcde17, abcde16, abcde15, abcde14, abcde13, abcde12, abcde11, abcde10, abcde9, abcde8, abcde7, abcde6, abcde5, abcde4, abcde3, abcde2, abcde1, abcde0
def main(field k31, field k30, field k29, field k28, field k27, field k26, field k25, field k24, field k23, field k22, field k21, field k20, field k19, field k18, field k17, field k16, field k15, field k14, field k13, field k12, field k11, field k10, field k9, field k8, field k7, field k6, field k5, field k4, field k3, field k2, field k1, field k0, field w31, field w30, field w29, field w28, field w27, field w26, field w25, field w24, field w23, field w22, field w21, field w20, field w19, field w18, field w17, field w16, field w15, field w14, field w13, field w12, field w11, field w10, field w9, field w8, field w7, field w6, field w5, field w4, field w3, field w2, field w1, field w0, field a31, field a30, field a29, field a28, field a27, field a26, field a25, field a24, field a23, field a22, field a21, field a20, field a19, field a18, field a17, field a16, field a15, field a14, field a13, field a12, field a11, field a10, field a9, field a8, field a7, field a6, field a5, field a4, field a3, field a2, field a1, field a0, field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0, field c31, field c30, field c29, field c28, field c27, field c26, field c25, field c24, field c23, field c22, field c21, field c20, field c19, field c18, field c17, field c16, field c15, field c14, field c13, field c12, field c11, field c10, field c9, field c8, field c7, field c6, field c5, field c4, field c3, field c2, field c1, field c0, field d31, field d30, field d29, field d28, field d27, field d26, field d25, field d24, field d23, field d22, field d21, field d20, field d19, field d18, field d17, field d16, field d15, field d14, field d13, field d12, field d11, field d10, field d9, field d8, field d7, field d6, field d5, field d4, field d3, field d2, field d1, field d0, field e31, field e30, field e29, field e28, field e27, field e26, field e25, field e24, field e23, field e22, field e21, field e20, field e19, field e18, field e17, field e16, field e15, field e14, field e13, field e12, field e11, field e10, field e9, field e8, field e7, field e6, field e5, field e4, field e3, field e2, field e1, field e0, field f31, field f30, field f29, field f28, field f27, field f26, field f25, field f24, field f23, field f22, field f21, field f20, field f19, field f18, field f17, field f16, field f15, field f14, field f13, field f12, field f11, field f10, field f9, field f8, field f7, field f6, field f5, field f4, field f3, field f2, field f1, field f0, field g31, field g30, field g29, field g28, field g27, field g26, field g25, field g24, field g23, field g22, field g21, field g20, field g19, field g18, field g17, field g16, field g15, field g14, field g13, field g12, field g11, field g10, field g9, field g8, field g7, field g6, field g5, field g4, field g3, field g2, field g1, field g0, field h31, field h30, field h29, field h28, field h27, field h26, field h25, field h24, field h23, field h22, field h21, field h20, field h19, field h18, field h17, field h16, field h15, field h14, field h13, field h12, field h11, field h10, field h9, field h8, field h7, field h6, field h5, field h4, field h3, field h2, field h1, field h0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field):
// S1 := (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25)
SOne31, SOne30, SOne29, SOne28, SOne27, SOne26, SOne25, SOne24, SOne23, SOne22, SOne21, SOne20, SOne19, SOne18, SOne17, SOne16, SOne15, SOne14, SOne13, SOne12, SOne11, SOne10, SOne9, SOne8, SOne7, SOne6, SOne5, SOne4, SOne3, SOne2, SOne1, SOne0 = AR6XAR11XAR25(e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)
// ch := (e and f) xor ((not e) and g)
ch31, ch30, ch29, ch28, ch27, ch26, ch25, ch24, ch23, ch22, ch21, ch20, ch19, ch18, ch17, ch16, ch15, ch14, ch13, ch12, ch11, ch10, ch9, ch8, ch7, ch6, ch5, ch4, ch3, ch2, ch1, ch0 = ANDXORNOTAND(e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0)
// temp1 := h + S1 + ch + k[i] + w[i]
tempOne31, tempOne30, tempOne29, tempOne28, tempOne27, tempOne26, tempOne25, tempOne24, tempOne23, tempOne22, tempOne21, tempOne20, tempOne19, tempOne18, tempOne17, tempOne16, tempOne15, tempOne14, tempOne13, tempOne12, tempOne11, tempOne10, tempOne9, tempOne8, tempOne7, tempOne6, tempOne5, tempOne4, tempOne3, tempOne2, tempOne1, tempOne0 = ADD5(k31, k30, k29, k28, k27, k26, k25, k24, k23, k22, k21, k20, k19, k18, k17, k16, k15, k14, k13, k12, k11, k10, k9, k8, k7, k6, k5, k4, k3, k2, k1, k0, w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0, ch31, ch30, ch29, ch28, ch27, ch26, ch25, ch24, ch23, ch22, ch21, ch20, ch19, ch18, ch17, ch16, ch15, ch14, ch13, ch12, ch11, ch10, ch9, ch8, ch7, ch6, ch5, ch4, ch3, ch2, ch1, ch0, SOne31, SOne30, SOne29, SOne28, SOne27, SOne26, SOne25, SOne24, SOne23, SOne22, SOne21, SOne20, SOne19, SOne18, SOne17, SOne16, SOne15, SOne14, SOne13, SOne12, SOne11, SOne10, SOne9, SOne8, SOne7, SOne6, SOne5, SOne4, SOne3, SOne2, SOne1, SOne0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0)
// S0 := (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22)
SZero31, SZero30, SZero29, SZero28, SZero27, SZero26, SZero25, SZero24, SZero23, SZero22, SZero21, SZero20, SZero19, SZero18, SZero17, SZero16, SZero15, SZero14, SZero13, SZero12, SZero11, SZero10, SZero9, SZero8, SZero7, SZero6, SZero5, SZero4, SZero3, SZero2, SZero1, SZero0 = AR2XAR13XAR22(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0)
// maj := (a and b) xor (a and c) xor (b and c)
maj31, maj30, maj29, maj28, maj27, maj26, maj25, maj24, maj23, maj22, maj21, maj20, maj19, maj18, maj17, maj16, maj15, maj14, maj13, maj12, maj11, maj10, maj9, maj8, maj7, maj6, maj5, maj4, maj3, maj2, maj1, maj0 = ANDXORANDXORAND(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0)
// temp2 := S0 + maj
tempTwo31, tempTwo30, tempTwo29, tempTwo28, tempTwo27, tempTwo26, tempTwo25, tempTwo24, tempTwo23, tempTwo22, tempTwo21, tempTwo20, tempTwo19, tempTwo18, tempTwo17, tempTwo16, tempTwo15, tempTwo14, tempTwo13, tempTwo12, tempTwo11, tempTwo10, tempTwo9, tempTwo8, tempTwo7, tempTwo6, tempTwo5, tempTwo4, tempTwo3, tempTwo2, tempTwo1, tempTwo0 = ADD2(SZero31, SZero30, SZero29, SZero28, SZero27, SZero26, SZero25, SZero24, SZero23, SZero22, SZero21, SZero20, SZero19, SZero18, SZero17, SZero16, SZero15, SZero14, SZero13, SZero12, SZero11, SZero10, SZero9, SZero8, SZero7, SZero6, SZero5, SZero4, SZero3, SZero2, SZero1, SZero0, maj31, maj30, maj29, maj28, maj27, maj26, maj25, maj24, maj23, maj22, maj21, maj20, maj19, maj18, maj17, maj16, maj15, maj14, maj13, maj12, maj11, maj10, maj9, maj8, maj7, maj6, maj5, maj4, maj3, maj2, maj1, maj0)
// en := d + temp1
en31, en30, en29, en28, en27, en26, en25, en24, en23, en22, en21, en20, en19, en18, en17, en16, en15, en14, en13, en12, en11, en10, en9, en8, en7, en6, en5, en4, en3, en2, en1, en0 = ADD2(d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, tempOne31, tempOne30, tempOne29, tempOne28, tempOne27, tempOne26, tempOne25, tempOne24, tempOne23, tempOne22, tempOne21, tempOne20, tempOne19, tempOne18, tempOne17, tempOne16, tempOne15, tempOne14, tempOne13, tempOne12, tempOne11, tempOne10, tempOne9, tempOne8, tempOne7, tempOne6, tempOne5, tempOne4, tempOne3, tempOne2, tempOne1, tempOne0)
// an := temp1 + temp2
an31, an30, an29, an28, an27, an26, an25, an24, an23, an22, an21, an20, an19, an18, an17, an16, an15, an14, an13, an12, an11, an10, an9, an8, an7, an6, an5, an4, an3, an2, an1, an0 = ADD2(tempOne31, tempOne30, tempOne29, tempOne28, tempOne27, tempOne26, tempOne25, tempOne24, tempOne23, tempOne22, tempOne21, tempOne20, tempOne19, tempOne18, tempOne17, tempOne16, tempOne15, tempOne14, tempOne13, tempOne12, tempOne11, tempOne10, tempOne9, tempOne8, tempOne7, tempOne6, tempOne5, tempOne4, tempOne3, tempOne2, tempOne1, tempOne0, tempTwo31, tempTwo30, tempTwo29, tempTwo28, tempTwo27, tempTwo26, tempTwo25, tempTwo24, tempTwo23, tempTwo22, tempTwo21, tempTwo20, tempTwo19, tempTwo18, tempTwo17, tempTwo16, tempTwo15, tempTwo14, tempTwo13, tempTwo12, tempTwo11, tempTwo10, tempTwo9, tempTwo8, tempTwo7, tempTwo6, tempTwo5, tempTwo4, tempTwo3, tempTwo2, tempTwo1, tempTwo0)
return an31, an30, an29, an28, an27, an26, an25, an24, an23, an22, an21, an20, an19, an18, an17, an16, an15, an14, an13, an12, an11, an10, an9, an8, an7, an6, an5, an4, an3, an2, an1, an0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, en31, en30, en29, en28, en27, en26, en25, en24, en23, en22, en21, en20, en19, en18, en17, en16, en15, en14, en13, en12, en11, en10, en9, en8, en7, en6, en5, en4, en3, en2, en1, en0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0