sha256 algorithm security seems to come from these two loops. i dont think constants values has almost anything to do with it so i initialized them as 0x1.
if you can create an algorithm to gain statistically significantly better than brute force efficiency in reversing the hash, you got really something.
//
message_schedule = []
for t in range(0, hash_len):
if t <= 15:
message_schedule.append(bytes(message_block[t*4:(t*4)+4]))
else:
term1 = _sigma1(int.from_bytes(message_schedule[t-2], 'big'))
term2 = int.from_bytes(message_schedule[t-7], 'big')
term3 = _sigma0(int.from_bytes(message_schedule[t-15], 'big'))
term4 = int.from_bytes(message_schedule[t-16], 'big')
schedule = ((term1 + term2 + term3 + term4) % 2**32).to_bytes(4, 'big')
message_schedule.append(schedule)
# Initialize working variables
a = 0x1
b = 0x1
c = 0x1
d = 0x1
e = 0x1
f = 0x1
g = 0x1
h = 0x1
# Iterate for t=0 to 63
for t in range(hash_len):
t1 = ((h + _capsigma1(e) + _ch(e, f, g) + K[t] +
int.from_bytes(message_schedule[t], 'big')) % 2**32)
t2 = (_capsigma0(a) + _maj(a, b, c)) % 2**32
h = g
g = f
f = e
e = (d + t1) % 2**32
d = c
c = b
b = a
a = (t1 + t2) % 2**32