mirror of
https://github.com/logos-storage/gnark-plonky2-verifier.git
synced 2026-01-09 00:23:10 +00:00
remove comments from original python
This commit is contained in:
parent
d4401cf94b
commit
105839d5bf
@ -1,5 +1,7 @@
|
||||
package sha512
|
||||
|
||||
// Based on https://gist.github.com/illia-v/7883be942da5d416521375004cecb68f
|
||||
|
||||
import (
|
||||
"github.com/consensys/gnark/frontend"
|
||||
)
|
||||
@ -12,8 +14,6 @@ func _right_rotate(n [64]frontend.Variable, bits int) [64]frontend.Variable {
|
||||
}
|
||||
return result
|
||||
}
|
||||
// def _right_rotate(n: int, bits: int) -> int:
|
||||
// return (n >> bits) | (n << (64 - bits)) & 0xFFFFFFFFFFFFFFFF
|
||||
|
||||
func PySha512(api frontend.API, in [] frontend.Variable) ([512] frontend.Variable) {
|
||||
_not := func(x [64]frontend.Variable) [64]frontend.Variable {
|
||||
@ -85,29 +85,23 @@ func PySha512(api frontend.API, in [] frontend.Variable) ([512] frontend.Variabl
|
||||
api.AssertIsBoolean(v)
|
||||
}
|
||||
mdi := divChecked(len(in), 8) % 128
|
||||
// mdi = len(message_array) % 128
|
||||
var padding_len int
|
||||
if mdi < 112 {
|
||||
padding_len = 119 - mdi
|
||||
} else {
|
||||
padding_len = 247 - mdi
|
||||
}
|
||||
// padding_len = 119 - mdi if mdi < 112 else 247 - mdi
|
||||
message_length_bits := uint64ToBits(uint64(len(in)))
|
||||
// ending = struct.pack('!Q', len(message_array) << 3)
|
||||
in = append(in, 1)
|
||||
for i := 0; i < 7; i++ {
|
||||
in = append(in, 0)
|
||||
}
|
||||
// message_array.append(0x80)
|
||||
for i := 0; i < padding_len * 8; i++ {
|
||||
in = append(in, 0)
|
||||
}
|
||||
// message_array.extend([0] * padding_len)
|
||||
for i := 0; i < 64; i++ {
|
||||
in = append(in, message_length_bits[i])
|
||||
}
|
||||
// message_array.extend(bytearray(ending))
|
||||
|
||||
sha512_hash := Array8_64{
|
||||
uint64ToBits(initial_hash[0]),
|
||||
@ -119,80 +113,46 @@ func PySha512(api frontend.API, in [] frontend.Variable) ([512] frontend.Variabl
|
||||
uint64ToBits(initial_hash[6]),
|
||||
uint64ToBits(initial_hash[7]),
|
||||
}
|
||||
// sha512_hash = list(initial_hash)
|
||||
for chunk_start := 0; chunk_start < divChecked(len(in), 8); chunk_start += 128 {
|
||||
// for chunk_start in range(0, len(message_array), 128):
|
||||
chunk := in[chunk_start * 8 : (chunk_start+128) * 8]
|
||||
// chunk = message_array[chunk_start:chunk_start + 128]
|
||||
if len(chunk) != 1024 { panic("bad length") }
|
||||
u := make([]frontend.Variable, 80 * 64)
|
||||
for i, _ := range u {
|
||||
u[i] = 0
|
||||
}
|
||||
// w = [0] * 80
|
||||
copy(u, chunk)
|
||||
// w[0:16] = struct.unpack('!16Q', chunk)
|
||||
|
||||
w := reshape(u)
|
||||
|
||||
for i := 16; i < 80; i++ {
|
||||
// for i in range(16, 80):
|
||||
s0 := _xor(
|
||||
_right_rotate(w[i - 15], 1),
|
||||
_right_rotate(w[i - 15], 8),
|
||||
_shr(w[i - 15], 7),
|
||||
)
|
||||
// s0 = (
|
||||
// _right_rotate(w[i - 15], 1) ^
|
||||
// _right_rotate(w[i - 15], 8) ^
|
||||
// (w[i - 15] >> 7)
|
||||
// )
|
||||
s1 := _xor(
|
||||
_right_rotate(w[i - 2], 19),
|
||||
_right_rotate(w[i - 2], 61),
|
||||
_shr(w[i - 2], 6),
|
||||
)
|
||||
// s1 = (
|
||||
// _right_rotate(w[i - 2], 19) ^
|
||||
// _right_rotate(w[i - 2], 61) ^
|
||||
// (w[i - 2] >> 6)
|
||||
// )
|
||||
w[i] = _add(w[i - 16], s0, w[i - 7], s1)
|
||||
// w[i] = (w[i - 16] + s0 + w[i - 7] + s1) & 0xFFFFFFFFFFFFFFFF
|
||||
}
|
||||
a, b, c, d, e, f, g, h := unpack8(sha512_hash)
|
||||
// a, b, c, d, e, f, g, h = sha512_hash
|
||||
for i := 0; i < 80; i++ {
|
||||
// for i in range(80):
|
||||
|
||||
sum1 := _xor(
|
||||
_right_rotate(e, 14),
|
||||
_right_rotate(e, 18),
|
||||
_right_rotate(e, 41),
|
||||
)
|
||||
// sum1 = (
|
||||
// _right_rotate(e, 14) ^
|
||||
// _right_rotate(e, 18) ^
|
||||
// _right_rotate(e, 41)
|
||||
// )
|
||||
ch := _xor(_and(e, f), _and(_not(e), g))
|
||||
// ch = (e & f) ^ (~e & g)
|
||||
temp1 := _add(h, sum1, ch, uint64ToBits(round_constants[i]), w[i])
|
||||
// temp1 = h + sum1 + ch + round_constants[i] + w[i]
|
||||
sum0 := _xor(
|
||||
_right_rotate(a, 28),
|
||||
_right_rotate(a, 34),
|
||||
_right_rotate(a, 39),
|
||||
)
|
||||
// sum0 = (
|
||||
// _right_rotate(a, 28) ^
|
||||
// _right_rotate(a, 34) ^
|
||||
// _right_rotate(a, 39)
|
||||
// )
|
||||
maj := _xor(_and(a, b), _and(a, c), _and(b, c))
|
||||
// maj = (a & b) ^ (a & c) ^ (b & c)
|
||||
temp2 := _add(sum0, maj)
|
||||
// temp2 = sum0 + maj
|
||||
|
||||
h = g
|
||||
g = f
|
||||
@ -202,46 +162,12 @@ func PySha512(api frontend.API, in [] frontend.Variable) ([512] frontend.Variabl
|
||||
c = b
|
||||
b = a
|
||||
a = _add(temp1, temp2)
|
||||
// h = g
|
||||
// g = f
|
||||
// f = e
|
||||
// e = (d + temp1) & 0xFFFFFFFFFFFFFFFF
|
||||
// d = c
|
||||
// c = b
|
||||
// b = a
|
||||
// a = (temp1 + temp2) & 0xFFFFFFFFFFFFFFFF
|
||||
// sha512_hash = [
|
||||
// (x + y) & 0xFFFFFFFFFFFFFFFF
|
||||
// for x, y in zip(sha512_hash, (a, b, c, d, e, f, g, h))
|
||||
// ]
|
||||
}
|
||||
sha512_hash = zip_add(sha512_hash, Array8_64{a, b, c, d, e, f, g, h})
|
||||
}
|
||||
return flatten8(sha512_hash)
|
||||
// return binascii.hexlify(
|
||||
// b''.join(struct.pack('!Q', element) for element in sha512_hash),
|
||||
// ).decode('utf-8')
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// if __name__ == "__main__":
|
||||
// assert sha512('Hello, world!') == (
|
||||
// 'c1527cd893c124773d811911970c8fe6e857d6df5dc9226bd8a160614c0cd963a4dde'
|
||||
// 'a2b94bb7d36021ef9d865d5cea294a82dd49a0bb269f51f6e7a57f79421'
|
||||
// )
|
||||
// assert sha512('Python') == (
|
||||
// 'fd9d4d5b7a8a8fae6b1bc099b799110f7e4338606e2610f5d9506a4346e0c3bfbc525'
|
||||
// 'f4eed1e05aa8c6f46b8efff526ec48b500928a1b341ade5a7855f533932'
|
||||
// )
|
||||
// assert sha512('Illia') == (
|
||||
// '09d4ba2426df452bddacde12436ef528c19e91236dfab2e7e2d45a0c2b450c7744397'
|
||||
// '67d8c23ed5be08cd50a7aa74b4c7ffda135a2f9ac18b186893a6b052710'
|
||||
// )
|
||||
|
||||
func reshape(u []frontend.Variable) [][64]frontend.Variable {
|
||||
l := divChecked(len(u), 64)
|
||||
result := make([][64]frontend.Variable, l)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user