Hi I'm having trouble with a certain part of my code right now. I'm writing a SHA 256 Hash function and I'm having an error with the message schedule. I don't really know how to approach this issue I basically created words 0-15 but I keep running into an error for words 16-64 I believe this is because they are strings, so I tried converting them into binary already but that ran into an issue of it's own which it would basically remove padded zero's since the binary say's that they are zero. Is there some way to fix this? here is the code below, with the error as well. Here is a screenshot of the error message
#VARIABLES
FF = (1 >> 32)-1
#Right rotate
def rr(a,b):
((a >> b) | (a << (32 - b))) & FF
#List of constants which is represented by K
K = (0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4,0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2)
h0 = 0x6a09e667
h1 = 0xbb67ae85
h2 = 0x3c6ef372
h3 = 0xa54ff53a
h4 = 0x510e527f
h5 = 0x9b05688c
h6 = 0x1f83d9ab
h7 = 0x5be0cd19
#Messages
word_Hash = "1: Please write below what\n word you would like to hash."
words = []
playerinput = []
varwords = [word_Hash]
#FUNCTIONS
count = 0
def finish():
global count, varwords, playerinput, words
if count >= 1:
screenframe1.pack_forget()
frm_screen2.pack()
#get input
wordtohash = playerinput.pop(0)
#convert to binary
BinaryConversion = ''.join(format(ord(i), '08b') for i in wordtohash) + "1"
#pad helped by Dr.Glynn, Maple
if len(BinaryConversion) <= 512:
count = len(BinaryConversion)
while count <= 448:
BinaryConversion = BinaryConversion + "0"
count += 1
wordtohash = len(wordtohash)
endofpad = int(wordtohash) * 8
numberofzeros = 0
while numberofzeros < 63 - int(len(bin(endofpad)[2:])):
BinaryConversion = BinaryConversion + "0"
numberofzeros += 1
#BinaryConversion = (BinaryConversion) + str(endofpad)
BinaryConversion = str(BinaryConversion) + str(bin(endofpad)[2:])
numbers = len(BinaryConversion)
#print(BinaryConversion)
#first 16 messages
w = [(BinaryConversion[0:31]), (BinaryConversion[32:63]), (BinaryConversion[64:95]), (BinaryConversion[96:127]),(BinaryConversion[128:159]),(BinaryConversion[160:191]),(BinaryConversion[192:223]),(BinaryConversion[224:255]),(BinaryConversion[256:287]), (BinaryConversion[288:319]),(BinaryConversion[320:351]),(BinaryConversion[352:383]),(BinaryConversion[384:415]),(BinaryConversion[416:447]),(BinaryConversion[448:479]),(BinaryConversion[480:511])]
print(w)
#Message Scedule
#rest of the messages
for i in range(16,64):
S0 = rr(w[i-15], 7) ^ rr(w[i-15], 18) ^ (w[i-15] >> 3)
S1 = rr(w[i - 2], 17) ^ rr(w[i - 2], 19) ^ (w[i - 2] >> 10)
enter code here**strong text**
w[i] = (w[i - 16] + S0 + w[i-7] + S1) & FF