Skip to content

Commit 2e220f2

Browse files
committed
Manually split 'sha_transform' to avoid compilation bailout.
1 parent 0926479 commit 2e220f2

File tree

1 file changed

+34
-19
lines changed

1 file changed

+34
-19
lines changed

graalpython/lib-python/3/_sha256.py

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -46,25 +46,8 @@ def new_shaobject():
4646
Gamma0 = lambda x: (S(x, 7) ^ S(x, 18) ^ R(x, 3))
4747
Gamma1 = lambda x: (S(x, 17) ^ S(x, 19) ^ R(x, 10))
4848

49-
def sha_transform(sha_info):
50-
W = []
51-
52-
d = sha_info['data']
53-
for i in range(0,16):
54-
W.append( (d[4*i]<<24) + (d[4*i+1]<<16) + (d[4*i+2]<<8) + d[4*i+3])
55-
56-
for i in range(16,64):
57-
W.append( (Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16]) & 0xffffffff )
58-
59-
ss = sha_info['digest'][:]
60-
61-
def RND(a,b,c,d,e,f,g,h,i,ki):
62-
t0 = h + Sigma1(e) + Ch(e, f, g) + ki + W[i];
63-
t1 = Sigma0(a) + Maj(a, b, c);
64-
d += t0;
65-
h = t0 + t1;
66-
return d & 0xffffffff, h & 0xffffffff
67-
49+
# TODO: TRUFFLE CHANGE BEGIN
50+
def do_part1(ss, RND):
6851
ss[3], ss[7] = RND(ss[0],ss[1],ss[2],ss[3],ss[4],ss[5],ss[6],ss[7],0,0x428a2f98);
6952
ss[2], ss[6] = RND(ss[7],ss[0],ss[1],ss[2],ss[3],ss[4],ss[5],ss[6],1,0x71374491);
7053
ss[1], ss[5] = RND(ss[6],ss[7],ss[0],ss[1],ss[2],ss[3],ss[4],ss[5],2,0xb5c0fbcf);
@@ -95,6 +78,9 @@ def RND(a,b,c,d,e,f,g,h,i,ki):
9578
ss[0], ss[4] = RND(ss[5],ss[6],ss[7],ss[0],ss[1],ss[2],ss[3],ss[4],27,0xbf597fc7);
9679
ss[7], ss[3] = RND(ss[4],ss[5],ss[6],ss[7],ss[0],ss[1],ss[2],ss[3],28,0xc6e00bf3);
9780
ss[6], ss[2] = RND(ss[3],ss[4],ss[5],ss[6],ss[7],ss[0],ss[1],ss[2],29,0xd5a79147);
81+
82+
83+
def do_part2(ss, RND):
9884
ss[5], ss[1] = RND(ss[2],ss[3],ss[4],ss[5],ss[6],ss[7],ss[0],ss[1],30,0x06ca6351);
9985
ss[4], ss[0] = RND(ss[1],ss[2],ss[3],ss[4],ss[5],ss[6],ss[7],ss[0],31,0x14292967);
10086
ss[3], ss[7] = RND(ss[0],ss[1],ss[2],ss[3],ss[4],ss[5],ss[6],ss[7],32,0x27b70a85);
@@ -129,12 +115,41 @@ def RND(a,b,c,d,e,f,g,h,i,ki):
129115
ss[6], ss[2] = RND(ss[3],ss[4],ss[5],ss[6],ss[7],ss[0],ss[1],ss[2],61,0xa4506ceb);
130116
ss[5], ss[1] = RND(ss[2],ss[3],ss[4],ss[5],ss[6],ss[7],ss[0],ss[1],62,0xbef9a3f7);
131117
ss[4], ss[0] = RND(ss[1],ss[2],ss[3],ss[4],ss[5],ss[6],ss[7],ss[0],63,0xc67178f2);
118+
# TODO: TRUFFLE CHANGE END
119+
120+
121+
def sha_transform256(sha_info):
122+
W = []
123+
124+
d = sha_info['data']
125+
for i in range(0,16):
126+
W.append( (d[4*i]<<24) + (d[4*i+1]<<16) + (d[4*i+2]<<8) + d[4*i+3])
127+
128+
for i in range(16,64):
129+
W.append( (Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16]) & 0xffffffff )
130+
131+
ss = sha_info['digest'][:]
132+
def RND(a,b,c,d,e,f,g,h,i,ki):
133+
t0 = h + Sigma1(e) + Ch(e, f, g) + ki + W[i];
134+
t1 = Sigma0(a) + Maj(a, b, c);
135+
d += t0;
136+
h = t0 + t1;
137+
return d & 0xffffffff, h & 0xffffffff
138+
139+
# TODO: TRUFFLE CHANGE BEGIN
140+
do_part1(ss, RND)
141+
do_part2(ss, RND)
142+
# TODO: TRUFFLE CHANGE END
132143

133144
dig = []
134145
for i, x in enumerate(sha_info['digest']):
135146
dig.append( (x + ss[i]) & 0xffffffff )
136147
sha_info['digest'] = dig
137148

149+
150+
def sha_transform(sha_info):
151+
sha_transform256(sha_info)
152+
138153
def sha_init():
139154
sha_info = new_shaobject()
140155
sha_info['digest'] = [0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19]

0 commit comments

Comments
 (0)