almost works

This commit is contained in:
Christoph J. Scherr 2023-04-25 18:55:33 +02:00
parent 727a514b16
commit f4bdec695c
Signed by: PlexSheep
GPG Key ID: 25B4ACF7D88186CC
1 changed files with 27 additions and 5 deletions

View File

@ -8,9 +8,9 @@ Since this (auth) hash did not have a name before, I gave it the name 'authur1'
@license MIT @license MIT
@source: https://git.cscherr.de/PlexSheep/python-dhbw/src/branch/master/src/authur1.py @source: https://git.cscherr.de/PlexSheep/python-dhbw/src/branch/master/src/authur1.py
""" """
import math
import argparse import argparse
# FIXME make proper pyi Implementation for the rust part
from plexcryptool import binary from plexcryptool import binary
# constants for authur1 # constants for authur1
@ -38,11 +38,16 @@ def inner_authur1(input: int) -> int:
return output return output
def authur1(input: bytearray) -> bytearray: def authur1(input: bytearray, verbose: bool = False) -> bytearray:
internal_buffer: bytearray = bytearray() internal_buffer: bytearray = bytearray()
accumulator: bytearray = DEFINED_INITIAL accumulator: bytearray = DEFINED_INITIAL
for in_byte in input: for in_byte in input:
if not len(internal_buffer) == 4: if verbose:
print("current in_byte: %s" % chr(in_byte))
print("current buffer: %s" % internal_buffer.hex())
if len(internal_buffer) < 4:
if verbose:
print("loading buffer")
internal_buffer.append(in_byte) internal_buffer.append(in_byte)
continue continue
# else # else
@ -50,10 +55,19 @@ def authur1(input: bytearray) -> bytearray:
accuint = int.from_bytes(accumulator) accuint = int.from_bytes(accumulator)
accuint = inner_authur1(accuint ^ int.from_bytes(internal_buffer)) accuint = inner_authur1(accuint ^ int.from_bytes(internal_buffer))
accumulator = bytearray(accuint.to_bytes(4)) accumulator = bytearray(accuint.to_bytes(4))
internal_buffer.clear()
assert len(internal_buffer) == 0
internal_buffer.append(in_byte)
assert len(accumulator) == 4, "accumulator too long: %d bytes" % len(accumulator) assert len(accumulator) == 4, "accumulator too long: %d bytes" % len(accumulator)
if verbose:
print("internal state after the bytes were read: %s" % accumulator.hex())
# finished loading input bytes into the hash, fill with padding and do it one last time # finished loading input bytes into the hash, fill with padding and do it one last time
while not len(internal_buffer) == 4: if verbose:
print("buffer pre last fill: %s" % internal_buffer.hex())
while len(internal_buffer) < 4:
internal_buffer.append(PADDING) internal_buffer.append(PADDING)
if verbose:
print("buffer after last fill: %s" % internal_buffer.hex())
assert len(internal_buffer) == 4, "internal buffer of authur1 not 4 byte long" assert len(internal_buffer) == 4, "internal buffer of authur1 not 4 byte long"
# same as above, one last time # same as above, one last time
assert len(accumulator) == 4, "accumulator too long: %d bytes" % len(accumulator) assert len(accumulator) == 4, "accumulator too long: %d bytes" % len(accumulator)
@ -62,6 +76,12 @@ def authur1(input: bytearray) -> bytearray:
accumulator = bytearray(accuint.to_bytes(4)) accumulator = bytearray(accuint.to_bytes(4))
assert len(accumulator) == 4, "accumulator too long: %d bytes" % len(accumulator) assert len(accumulator) == 4, "accumulator too long: %d bytes" % len(accumulator)
if verbose:
print("returning state: %s" % accumulator.hex())
# now Q the accumulator and return
accuint = int.from_bytes(accumulator)
accuint = inner_authur1(accuint)
accumulator = bytearray(accuint.to_bytes(4))
return accumulator return accumulator
def test(): def test():
@ -97,11 +117,13 @@ def main():
help='an input that should be hashed') help='an input that should be hashed')
parser.add_argument('-t', '--test', action="store_true", parser.add_argument('-t', '--test', action="store_true",
help='perform tests') help='perform tests')
parser.add_argument('-v', '--verbose', action="store_true",
help='print many things')
args = parser.parse_args() args = parser.parse_args()
if args.hash: if args.hash:
my_bytes: bytearray = bytearray(str.encode(args.hash)) my_bytes: bytearray = bytearray(str.encode(args.hash))
hashed = authur1(my_bytes) hashed = authur1(my_bytes, args.verbose)
print("hash for \"%s\" is:\n%s" % (args.hash, hashed.hex())) print("hash for \"%s\" is:\n%s" % (args.hash, hashed.hex()))
exit() exit()
elif args.test: elif args.test: