diff --git a/src/utils/reconstructhash.py b/src/utils/reconstructhash.py index c50840cb..435d25ec 100644 --- a/src/utils/reconstructhash.py +++ b/src/utils/reconstructhash.py @@ -1,8 +1,10 @@ ''' Onionr - Private P2P Communication - z-fill (zero fill) a string to a specific length, intended for reconstructing block hashes + z-fill (zero fill) a string to a specific length + intended for reconstructing block hashes ''' +from typing import Union ''' This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,10 +19,17 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . ''' -def reconstruct_hash(hex_hash, length=64): + + +def reconstruct_hash(hex_hash: Union[str, bytes], + length: int = 64) -> Union[str, bytes]: + """Pad hash hex string with zeros, return result""" return hex_hash.zfill(length) -def deconstruct_hash(hex_hash): + +def deconstruct_hash(hex_hash: Union[str, bytes]) -> Union[str, bytes]: + """Remove leading zeros from hex hash, return result""" + new_hash = '' ret_bytes = False try: hex_hash = hex_hash.decode() @@ -28,10 +37,15 @@ def deconstruct_hash(hex_hash): except AttributeError: pass - num_zeroes = hex_hash.count('0') - new_hash = hex_hash[num_zeroes:] + c = 0 + for x in hex_hash: + if x == '0': + c += 1 + else: + break + new_hash = hex_hash[c:] if ret_bytes: + new_hash = new_hash.encode() - - return new_hash \ No newline at end of file + return new_hash