diff --git a/onionrblocks/__init__.py b/onionrblocks/__init__.py index 1134b3d..9a2b534 100644 --- a/onionrblocks/__init__.py +++ b/onionrblocks/__init__.py @@ -1,8 +1,20 @@ from typing import Union from time import time +from binascii import hexlify + import kasten +from .types import AnonymousVDFBlockResult + + +def __str_to_bytes(data: str): + try: + return data.encode('utf-8') + except AttributeError: + return data + + def _packer(block_data: bytes, **kasten_header) -> kasten.main.KastenPacked: def __get_optional(key, default): try: @@ -16,7 +28,7 @@ def _packer(block_data: bytes, **kasten_header) -> kasten.main.KastenPacked: kasten_header['encrypt mode'], __get_optional('signer', b''), __get_optional('signature', b''), - __get_optional('metadata', {}), + __get_optional('metadata', None), int(time()//60 * 60) ) @@ -25,8 +37,16 @@ def _packer(block_data: bytes, **kasten_header) -> kasten.main.KastenPacked: # They do not handle sigs or encryption (at least never directly) def create_block_anonymous_vdf( - rounds: int, block_data: Union[str, bytes], **block_header): + rounds: int, + block_data: Union[str, bytes], + **block_header) -> AnonymousVDFBlockResult: + block_data = __str_to_bytes(block_data) # Block with anonymous VDF as proof - packed = _packer(block_data, **block_header) - return kasten.generator.KastenMimcGenerator.generate( - packed, rounds) + + packed: kasten.types.KastenPacked = _packer(block_data, **block_header) + kasten_result: kasten.Kasten = \ + kasten.generator.KastenMimcGenerator.generate(packed, rounds) + print('orig packed', packed) + return AnonymousVDFBlockResult( + kasten_result.id, + kasten_result.get_packed()) diff --git a/tests/test_vdf_block.py b/tests/test_vdf_block.py index 3bf7195..ab7a93a 100644 --- a/tests/test_vdf_block.py +++ b/tests/test_vdf_block.py @@ -9,10 +9,13 @@ class TestVDFBlock(unittest.TestCase): def test_basic(self): rounds = 10**4 - k = onionrblocks.create_block_anonymous_vdf(rounds, b'test', **{'type': 'test', 'encrypt mode': 0}) - raw = k.data - id = binascii.hexlify(k.id) - kasten.generator.vdf_verify(raw, id, rounds) + data = b'test data' + k = onionrblocks.create_block_anonymous_vdf(rounds, data, **{'type': 'test', 'encrypt mode': 0}) + raw = k.raw_bytes + id = int.from_bytes(k.hex_checksum, byteorder="big") + #print(id, raw) + print(raw) + kasten.generator.KastenMimcGenerator.validate_id(id, raw, rounds) unittest.main() \ No newline at end of file