1
0
Fork 0
mirror of synced 2025-09-24 04:40:05 +00:00
ZoKrates/zokrates_stdlib/stdlib/hashes/sha256/512bitPacked.zok
2020-07-03 18:10:33 +02:00

19 lines
No EOL
760 B
Text

import "../../utils/pack/u32/pack128" as pack128
import "../../utils/pack/u32/unpack128" as unpack128
import "./512bitPadded" as sha256
// A function that takes an array of 4 field elements as inputs, unpacks each of them to 128
// bits (big endian), concatenates them and applies sha256.
// It then returns an array of two field elements, each representing 128 bits of the result.
def main(field[4] preimage) -> (field[2]):
u32[4] a_bits = unpack128(preimage[0])
u32[4] b_bits = unpack128(preimage[1])
u32[4] c_bits = unpack128(preimage[2])
u32[4] d_bits = unpack128(preimage[3])
u32[8] lhs = [...a_bits, ...b_bits]
u32[8] rhs = [...c_bits, ...d_bits]
u32[8] r = sha256(lhs, rhs)
return [pack128(r[0..4]), pack128(r[4..8])]