qrl.crypto package¶
Submodules¶
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.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_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'
-
height¶
-