def setUp(self): super(PrepareMultisigTransferCommandTestCase, self).setUp() self.adapter = MockAdapter() self.command = PrepareMultisigTransferCommand(self.adapter) # Define some tryte sequences that we can reuse between tests. self.digest_1 =\ Digest( trytes = b'FWNEPVJNGUKTSHSBDO9AORBCVWWLVXC9KAMKYYNKPYNJDKSAUURI9ELKOEEYPKVTYP' b'CKOCJQESYFEMINIFKX9PDDGRBEEHYYXCJW9LHGWFZGHKCPVDBGMGQKIPCNKNITGMZT' b'DIWVUB9PCHCOPHMIWKSUKRHZOJPMAY', key_index = 0, ) self.digest_2 =\ Digest( trytes = b'PAIRLDJQY9XAUSKIGCTHRJHZVARBEY9NNHYJ9UI9HWWZXFSDWEZEGDCWNVVYSYDV9O' b'HTR9NGGZURISWTNECFTCMEWQQFJ9VKLFPDTYJYXC99OLGRH9OSFJLMEOGHFDHZYEAF' b'IMIZTJRBQUVCR9U9ZWTMUXTUEOUBLC', key_index = 0, ) self.trytes_1 = (b'TESTVALUE9DONTUSEINPRODUCTION99999IIPEM9' b'LA9FLHEGHDACSA9DOBQHQCX9BBHCFDIIMACARHA9B') self.trytes_2 = (b'TESTVALUE9DONTUSEINPRODUCTION99999BGUDVE' b'DGH9WFQDEDVETCOGEGCDI9RFHGFGXBI99EJICHNEM') self.trytes_3 = (b'TESTVALUE9DONTUSEINPRODUCTION99999XBGEUC' b'LF9EIFXHM9KHQANBLBHFVGTEGBWHNAKFDGZHYGCHI')
def setUp(self): super(MultisigAddressBuilderTestCase, self).setUp() # Define some tryte sequences that we can reuse between tests. self.digest_1 =\ Digest( trytes = b'FWNEPVJNGUKTSHSBDO9AORBCVWWLVXC9KAMKYYNKPYNJDKSAUURI9ELKOEEYPKVTYP' b'CKOCJQESYFEMINIFKX9PDDGRBEEHYYXCJW9LHGWFZGHKCPVDBGMGQKIPCNKNITGMZT' b'DIWVUB9PCHCOPHMIWKSUKRHZOJPMAY', key_index = 0, ) self.digest_2 =\ Digest( trytes = b'PAIRLDJQY9XAUSKIGCTHRJHZVARBEY9NNHYJ9UI9HWWZXFSDWEZEGDCWNVVYSYDV9O' b'HTR9NGGZURISWTNECFTCMEWQQFJ9VKLFPDTYJYXC99OLGRH9OSFJLMEOGHFDHZYEAF' b'IMIZTJRBQUVCR9U9ZWTMUXTUEOUBLC', key_index = 0, ) self.digest_3 =\ Digest( trytes = b'KBNYOFY9HJSPBDBFSTIEMYJAAMNOXLVXBDUKJRBUGAPIIZNDARXEWDZRBCIYFQCBID' b'HXIQFIDFPNGIFN9DDXQUGYZGDML9ZIELDSVICFUOPWEPCUWEDUFKXKSOZKTSHIMEIR' b'HOXKPJFRWWCNYPXR9RI9SMBFSDQFWM', key_index = 0, )
def setUp(self): super(CreateMultisigAddressCommandTestCase, self).setUp() self.adapter = MockAdapter() self.command = CreateMultisigAddressCommand(self.adapter) # Define some tryte sequences that we can reuse between tests. self.digest_1 =\ Digest( trytes = b'FWNEPVJNGUKTSHSBDO9AORBCVWWLVXC9KAMKYYNKPYNJDKSAUURI9ELKOEEYPKVTYP' b'CKOCJQESYFEMINIFKX9PDDGRBEEHYYXCJW9LHGWFZGHKCPVDBGMGQKIPCNKNITGMZT' b'DIWVUB9PCHCOPHMIWKSUKRHZOJPMAY', key_index = 0, ) self.digest_2 =\ Digest( trytes = b'PAIRLDJQY9XAUSKIGCTHRJHZVARBEY9NNHYJ9UI9HWWZXFSDWEZEGDCWNVVYSYDV9O' b'HTR9NGGZURISWTNECFTCMEWQQFJ9VKLFPDTYJYXC99OLGRH9OSFJLMEOGHFDHZYEAF' b'IMIZTJRBQUVCR9U9ZWTMUXTUEOUBLC', key_index = 0, )
def test_init_error_too_short(self): """ A digest's length must be a multiple of :py:attr:`Hash.LEN` trytes. """ with self.assertRaises(ValueError): Digest(b'9' * (Hash.LEN - 1)) with self.assertRaises(ValueError): Digest(b'9' * (2 * Hash.LEN - 1))
def setUp(self): super(GetDigestsCommandTestCase, self).setUp() self.adapter = MockAdapter() self.command = GetDigestsCommand(self.adapter) # Define some tryte sequences that we can reuse between tests. self.key1 = PrivateKey(TryteString(b'KEYONE', pad=FRAGMENT_LENGTH), 0) self.key2 = PrivateKey(TryteString(b'KEYTWO', pad=FRAGMENT_LENGTH), 1) self.digest1 = Digest(TryteString(b'DIGESTONE', pad=Hash.LEN), 0) self.digest2 = Digest(TryteString(b'DIGESTTWO', pad=Hash.LEN), 1)
def _mock_get_digest(key_iterator): # type: (KeyIterator) -> Digest """ Mocks the behavior of :py:class:`KeyGenerator`, to speed up unit tests. Note that :py:class:`KeyGenerator` has its own test case, so we're not impacting the stability of the codebase by doing this. """ # noinspection SpellCheckingInspection digests = [ b'KDWISSPKPF9DZNKMYEVPPYI9CXMFZRAAKCQNMFJI' b'JIQLT9IPMEVVNYBTIBTN9CBCJMYTUMSRJAEMUUMIA', b'XUWRYOZQYEVM9CRZZPZQRTAHBMLM9EYMZZIYRFV9' b'GZST9XGK9LWUDGIXCCRFLWHUJPYQ9MMYDZEMAJZOI', b'SEJHPHEF9NXPPZQUOVGZNUZSP9DQOBRVSAGADUAD' b'EPRDFQJPXTOJGFPEXUPRQUYTTSD9GVPXTWWZQSGXA', b'LNXDEKQCP9OXMBNDUJCZIMVRVGJLKFVMMRPHROSH' b'XCWW9M9QGYVUMPXCR9ANPEPVGBI9WOERTFDAGKCVZ', ] key_index = key_iterator.current # Simulate generating the key. key_iterator.current += key_iterator.step # This should still behave like the real thing, so that we can # verify that :py:class`AddressGenerator` is invoking the key # generator correctly. return Digest(digests[key_index], key_index)
def setUp(self): super(ProposedMultisigBundleTestCase, self).setUp() self.bundle = ProposedMultisigBundle() print_var_type_n_val(var001=self.bundle, pointer="#234fcvredfrZER") #234fcvredfrZER # Value: # # <iota.multisig.transaction.ProposedMultisigBundle object at 0x0000027BCD717FD0> # Type: iota.multisig.transaction.ProposedMultisigBundle # Define some tryte sequences that we can reuse between tests. self.digest_1 =\ Digest( trytes = b'FWNEPVJNGUKTSHSBDO9AORBCVWWLVXC9KAMKYYNKPYNJDKSAUURI9ELKOEEYPKVTYP' b'CKOCJQESYFEMINIFKX9PDDGRBEEHYYXCJW9LHGWFZGHKCPVDBGMGQKIPCNKNITGMZT' b'DIWVUB9PCHCOPHMIWKSUKRHZOJPMAY', key_index = 0, ) self.digest_2 =\ Digest( trytes = b'PAIRLDJQY9XAUSKIGCTHRJHZVARBEY9NNHYJ9UI9HWWZXFSDWEZEGDCWNVVYSYDV9O' b'HTR9NGGZURISWTNECFTCMEWQQFJ9VKLFPDTYJYXC99OLGRH9OSFJLMEOGHFDHZYEAF' b'IMIZTJRBQUVCR9U9ZWTMUXTUEOUBLC', key_index = 0, ) self.trytes_1 = (b'TESTVALUE9DONTUSEINPRODUCTION99999IIPEM9' b'LA9FLHEGHDACSA9DOBQHQCX9BBHCFDIIMACARHA9B') print_var_type_n_val(var001=self.trytes_1, pointer="#Z456gXCVBjtrTY844") #Z456gXCVBjtrTY844 # Value: b'TESTVALUE9DONTUSEINPRODUCTION99999IIPEM9LA9FLHEGHDACSA9DOBQHQCX9BBHCFDIIMACARHA9B' # Type: <class 'bytes'> self.trytes_2 = (b'TESTVALUE9DONTUSEINPRODUCTION99999BGUDVE' b'DGH9WFQDEDVETCOGEGCDI9RFHGFGXBI99EJICHNEM') self.trytes_3 = (b'TESTVALUE9DONTUSEINPRODUCTION99999XBGEUC' b'LF9EIFXHM9KHQANBLBHFVGTEGBWHNAKFDGZHYGCHI')
def address_from_digest(digest: Digest) -> Address: """ Generates an address from a private key digest. """ address_trits: List[int] = [0] * (Address.LEN * TRITS_PER_TRYTE) sponge = Kerl() sponge.absorb(digest.as_trits()) sponge.squeeze(address_trits) return Address.from_trits( trits=address_trits, key_index=digest.key_index, security_level=digest.security_level, )
def test_address_from_digest(self): """ Generating an address from a private key digest. """ digest =\ Digest( trytes = b'ABQXVJNER9MPMXMBPNMFBMDGTXRWSYHNZKGAGUOI' b'JKOJGZVGHCUXXGFZEMMGDSGWDCKJXO9ILLFAKGGZE', key_index = 0, ) self.assertEqual( AddressGenerator.address_from_digest(digest), Address(b'QLOEDSBXXOLLUJYLEGKEPYDRIJJTPIMEPKMFHUVJ' b'MPMLYYCLPQPANEVDSERQWPVNHCAXYRLAYMBHJLWWR'), )
def add_digest(self, digest: Digest) -> None: """ Absorbs a digest into the sponge. .. important:: Keep track of the order that digests are added! To spend inputs from a multisig address, you must provide the private keys in the same order! References: - https://github.com/iotaledger/wiki/blob/master/multisigs.md#spending-inputs """ if self._address: raise ValueError( 'Cannot add digests once an address is extracted.') self._sponge.absorb(digest.as_trits()) self._digests.append(digest)
def test_random(self): """ Generating a random Digest should fail. """ with self.assertRaises(TypeError): random_digest = Digest.random()