(message)
return [
	         [
	           struct.unpack("<L", message[i+j:i+j+4])[0]
	           for j in range(0, 64, 4)
	         ]
	         for i in range(0, len(message), 64)
	       ]
returns a two-dimensional array X[i][j] of 32-bit integers, where j ranges
	from 0 to 16.
	First pads the message to length in bytes is congruent to 56 (mod 64), 
	by first adding a byte 0x80, and then padding with 0x00 bytes until the
	message length is congruent to 56 (mod 64). Then adds the little-endian
	64-bit representation of the original length. Finally, splits the result
	up into 64-byte blocks, which are further parsed as 32-bit integers.
returns a two-dimensional array X[i][j] of 32-bit integers, where j ranges
	from 0 to 16.
	First pads the message to length in bytes is congruent to 56 (mod 64), 
	by first adding a byte 0x80, and then padding with 0x00 bytes until the
	message length is congruent to 56 (mod 64). Then adds the little-endian
	64-bit representation of the original length. Finally, splits the result
	up into 64-byte blocks, which are further parsed as 32-bit integers.
returns a two - dimensional array X [ i ] [ j ] of 32 - bit integers where j ranges from 0 to 16 . First pads the message to length in bytes is congruent to 56 ( mod 64 ) by first adding a byte 0x80 and then padding with 0x00 bytes until the message length is congruent to 56 ( mod 64 ) . Then adds the little - endian 64 - bit representation of the original length . Finally splits the result up into 64 - byte blocks which are further parsed as 32 - bit integers .
def padandsplit(message):
	"""
	returns a two-dimensional array X[i][j] of 32-bit integers, where j ranges
	from 0 to 16.
	First pads the message to length in bytes is congruent to 56 (mod 64), 
	by first adding a byte 0x80, and then padding with 0x00 bytes until the
	message length is congruent to 56 (mod 64). Then adds the little-endian
	64-bit representation of the original length. Finally, splits the result
	up into 64-byte blocks, which are further parsed as 32-bit integers.
	"""
	origlen = len(message)
	padlength = 64 - ((origlen - 56) % 64) #minimum padding is 1!
	message += b"\x80"
	message += b"\x00" * (padlength - 1)
	message += struct.pack("<Q", origlen*8)
	assert(len(message) % 64 == 0)
	return [
	         [
	           struct.unpack("<L", message[i+j:i+j+4])[0]
	           for j in range(0, 64, 4)
	         ]
	         for i in range(0, len(message), 64)
	       ]
def padandsplit ( message ) : origlen = len ( message ) padlength = 64 - ( ( origlen - 56 ) % 64 ) #minimum padding is 1! message += b"\x80" message += b"\x00" * ( padlength - 1 ) message += struct . pack ( "<Q" , origlen * 8 ) assert ( len ( message ) % 64 == 0 ) return [ [ struct . unpack ( "<L" , message [ i + j : i + j + 4 ] ) [ 0 ] for j in range ( 0 , 64 , 4 ) ] for i in range ( 0 , len ( message ) , 64 ) ]