qrl.crypto package

Submodules

qrl.crypto.doctest_data module

qrl.crypto.doctest_data.binvec2hstr(data)[source]

qrl.crypto.hashchain module

qrl.crypto.misc module

qrl.crypto.misc.merkle_tx_hash(hashes)[source]

merkle tree root hash of tx from pool for next POW block :param hashes: :return:

>>> bin2hstr(merkle_tx_hash([b'0', b'1']) ) # FIXME: This input is not realistic
'938db8c9f82c8cb58d3f3ef4fd250036a48d26a712753d2fde5abd03a85cabf4'
>>> merkle_tx_hash(['938db8c9f82c8cb58d3f3ef4fd250036a48d26a712753d2fde5abd03a85cabf4'])
'938db8c9f82c8cb58d3f3ef4fd250036a48d26a712753d2fde5abd03a85cabf4'
>>> bin2hstr(merkle_tx_hash('938db8c9f82c8cb58d3f3ef4fd250036a48d26a712753d2fde5abd03a85cabf4'))
'938db8c9f82c8cb58d3f3ef4fd250036a48d26a712753d2fde5abd03a85cabf4'
>>> bin2hstr(merkle_tx_hash([b'0', b'938db8c9f82c8cb58d3f3ef4fd250036a48d26a712753d2fde5abd03a85cabf4']))  # FIXME: This input is not realistic
'40243e694d9c015d5097590bcc9df82683d8ba4006d58c6abb5e1a6bee5ec6dc'
qrl.crypto.misc.sha256(message: bytes) → bytes[source]
Parameters:message (Union[str, unicode]) –
Returns:
Return type:str
>>> bin2hstr(sha256(b"test"))
'9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'
>>> bin2hstr(sha256(b"another string"))
'81e7826a5821395470e5a2fed0277b6a40c26257512319875e1d70106dcb1ca0'
qrl.crypto.misc.sha256_n(message: bytes, count) → bytes[source]

qrl.crypto.xmss module

class qrl.crypto.xmss.XMSS(tree_height, seed=None, _xmssfast=None)[source]

Bases: object

SIGN(message)[source]
Parameters:message
Returns:
>>> from qrl.crypto.doctest_data import *; bin2hstr(XMSS(4, xmss_test_seed1).SIGN(str2bin("test_message"))) == xmss_sign_expected1
True
>>> from qrl.crypto.doctest_data import *; bin2hstr(XMSS(4, xmss_test_seed2).SIGN(str2bin("test_message"))) == xmss_sign_expected2
True
static VERIFY(message: bytes, signature: bytes, pk: bytes)[source]

Verify an xmss sig with shorter PK same function but verifies using shorter signature where PK: {root, hex(_public_SEED)} # main verification function.. :param pk: :type pk: :param message: :param signature: :return:

>>> from qrl.crypto.doctest_data import *; XMSS.VERIFY( str2bin("test_message"), hstr2bin(xmss_sign_expected1), hstr2bin(xmss_pk_expected1))
True
>>> from qrl.crypto.doctest_data import *; XMSS.VERIFY( str2bin("test_messagex"), hstr2bin(xmss_sign_expected1), hstr2bin(xmss_pk_expected1))
False
>>> from qrl.crypto.doctest_data import *; XMSS.VERIFY( str2bin("test_message"), hstr2bin(xmss_sign_expected2), hstr2bin(xmss_pk_expected2))
True
>>> from qrl.crypto.doctest_data import *; XMSS.VERIFY( str2bin("test_messagex"), hstr2bin(xmss_sign_expected2), hstr2bin(xmss_pk_expected2))
False
get_address() → bytes[source]
get_hexseed()[source]
Returns:
Return type:
>>> from qrl.crypto.doctest_data import *; XMSS(4, xmss_test_seed1).get_hexseed()
'303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030'
>>> from qrl.crypto.doctest_data import *; XMSS(4, xmss_test_seed2).get_hexseed()
'333133313331333133313331333133313331333133313331333133313331333133313331333133313331333133313331'
get_index()[source]
Returns:
Return type:
>>> from qrl.crypto.doctest_data import *; XMSS(4, xmss_test_seed1).get_index()
0
>>> from qrl.crypto.doctest_data import *; XMSS(4, xmss_test_seed2).get_index()
0
>>> from qrl.crypto.doctest_data import *
>>> xmss = XMSS(4, xmss_test_seed2)
>>> s = xmss.SIGN(str2bin("test"))
>>> xmss.get_index()
1
get_mnemonic()[source]
Returns:
Return type:
>>> from qrl.crypto.doctest_data import *; XMSS(4, hstr2bin(xmss_mnemonic_seed1)).get_mnemonic() == xmss_mnemonic_test1
True
>>> from qrl.crypto.doctest_data import *; XMSS(4, hstr2bin(xmss_mnemonic_seed2)).get_mnemonic() == xmss_mnemonic_test2
True
>>> from qrl.crypto.doctest_data import *; XMSS(4, mnemonic2bin(xmss_mnemonic_test1)).get_mnemonic() == xmss_mnemonic_test1
True
>>> from qrl.crypto.doctest_data import *; XMSS(4, mnemonic2bin(xmss_mnemonic_test2)).get_mnemonic() == xmss_mnemonic_test2
True
get_number_signatures()[source]
Returns:
Return type:
>>> from qrl.crypto.doctest_data import *; XMSS(4, xmss_test_seed1).get_number_signatures()
16
>>> from qrl.crypto.doctest_data import *; XMSS(4, xmss_test_seed2).get_number_signatures()
16
get_remaining_signatures()[source]
Returns:
Return type:
>>> from qrl.crypto.doctest_data import *; XMSS(4, xmss_test_seed1).get_remaining_signatures()
16
>>> from qrl.crypto.doctest_data import *; XMSS(4, xmss_test_seed2).get_remaining_signatures()
16
get_seed()[source]
Returns:
Return type:
>>> from qrl.crypto.doctest_data import *; bin2hstr( XMSS(4, xmss_test_seed1).get_seed() )
'303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030'
>>> from qrl.crypto.doctest_data import *; bin2hstr( XMSS(4, xmss_test_seed2).get_seed() )
'333133313331333133313331333133313331333133313331333133313331333133313331333133313331333133313331'
get_seed_private()[source]
Returns:
Return type:
>>> from qrl.crypto.doctest_data import *; bin2hstr( XMSS(4, xmss_test_seed1).get_seed_public() )
'51ec21420dd061739e4637fd74517a46f86f89e0fb83f2526fafafe356e564ff'
>>> from qrl.crypto.doctest_data import *; bin2hstr( XMSS(4, xmss_test_seed2).get_seed_public() )
'df2355c48096f2351e4d04db57b326c355345552d31b75a65ac18b1f6d7c7875'
get_seed_public()[source]
Returns:
Return type:
>>> from qrl.crypto.doctest_data import *; bin2hstr( XMSS(4, xmss_test_seed1).get_seed_private() )
'5f2eb95ccf6a0e3e7f472c32d234340c20b3fd379dc28b710affcc0cb2afa57b'
>>> from qrl.crypto.doctest_data import *; bin2hstr( XMSS(4, xmss_test_seed2).get_seed_private() )
'ad70ef34f316aaadcbf16a64b1b381db731eb53d833745c0d3eaa1e24cf728a2'
get_type()[source]
height
list_addresses()[source]

List the addresses derived in the main tree :return:

pk()[source]
>>> from qrl.crypto.doctest_data import *; bin2hstr(XMSS(4, xmss_test_seed1).pk()) == xmss_pk_expected1
True
>>> from qrl.crypto.doctest_data import *; bin2hstr(XMSS(4, xmss_test_seed2).pk()) == xmss_pk_expected2
True
set_index(new_index)[source]
Returns:
Return type:
>>> from qrl.crypto.doctest_data import *
>>> xmss = XMSS(4, xmss_test_seed1)
>>> xmss.set_index(1)
>>> xmss.get_index()
1
>>> from qrl.crypto.doctest_data import *
>>> xmss = XMSS(4, xmss_test_seed1)
>>> xmss.set_index(10)
>>> xmss.get_index()
10

Module contents