"""Cryptography primitives test module.""" import pytest from merkle_tree_stream import MerkleTreeNode from pysodium import crypto_sign_PUBLICKEYBYTES, crypto_sign_SECRETKEYBYTES from hypercore_crypto import data, key_pair, parent, random_bytes, sign, verify def test_key_pair_seed_length(): with pytest.raises(ValueError) as exception: key_pair(b'world hello') assert 'must be of length' in str(exception) def test_key_pair_length(): public_key, secret_key = key_pair() assert len(public_key) == crypto_sign_PUBLICKEYBYTES assert len(secret_key) == crypto_sign_SECRETKEYBYTES def test_sign(): message = b'hello world' _, secret_key = key_pair() signature = sign(message, secret_key) assert message not in signature assert len(signature) == 64 def test_verify(): message = b'hello world' public_key, secret_key = key_pair() signature = sign(message, secret_key) assert verify(message, signature, public_key) def test_data_digest(): assert ( data(b'hello world').hex() == 'ccfa4259ee7c41e411e5770973a49c5ceffb5272d6a37f2c6f2dac2190f7e2b7' ) def test_random_bytes(): assert len(random_bytes(32)) == 32 def test_parent_digest(): _data = b'hello world' _parent = parent( MerkleTreeNode( index=0, size=11, hash=data(_data), parent=None, data=None ), MerkleTreeNode( index=2, size=11, hash=data(_data), parent=None, data=None ), ) assert ( _parent.hex() == '43563406adba8b34b133fdca32d0a458c5be769615e01df30e6535ccd3c075f0' )