Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Suspected infinite recursion in jacobian #49

Open
mderka opened this issue Dec 13, 2018 · 3 comments
Open

Suspected infinite recursion in jacobian #49

mderka opened this issue Dec 13, 2018 · 3 comments
Labels

Comments

@mderka
Copy link

mderka commented Dec 13, 2018

(Submitting as instructed on Gitter by @carver .)

  • Version: eth-keys==0.2.0b3, eth-tester[py-evm]==0.1.0b33, py-evm=0.2.0a33
  • Python: 3.6.6
  • OS: linux (inside docker on osx)

What was wrong?

When running a transaction in our test suited, the following error showed up. The error appears like an infinite loop/recursion. It appears intermittently and I do not have solid way of reproducing it.

Please include any of the following that are applicable:

  • The code which produced the error
  • The full output of the error
tests/audit/test_audit.py:1255: in __send_done_message
    {"from": self.__config.account}
tests/audit/test_audit.py:115: in __safe_transact
    raise e
tests/audit/test_audit.py:111: in __safe_transact
    return contract_entity.transact(tx_args)
/usr/lib/python3.6/site-packages/web3/contract.py:1034: in transact
    **self.kwargs)
/usr/lib/python3.6/site-packages/web3/contract.py:1311: in transact_with_contract_function
    txn_hash = web3.eth.sendTransaction(transact_transaction)
/usr/lib/python3.6/site-packages/web3/eth.py:244: in sendTransaction
    [transaction],
/usr/lib/python3.6/site-packages/web3/manager.py:103: in request_blocking
    response = self._make_request(method, params)
/usr/lib/python3.6/site-packages/web3/manager.py:86: in _make_request
    return request_func(method, params)
/usr/lib/python3.6/site-packages/web3/middleware/gas_price_strategy.py:18: in middleware
    return make_request(method, params)
/usr/lib/python3.6/site-packages/web3/middleware/formatting.py:21: in middleware
    response = make_request(method, formatted_params)
/usr/lib/python3.6/site-packages/web3/middleware/attrdict.py:18: in middleware
    response = make_request(method, params)
/usr/lib/python3.6/site-packages/web3/middleware/formatting.py:21: in middleware
    response = make_request(method, formatted_params)
/usr/lib/python3.6/site-packages/web3/middleware/normalize_errors.py:9: in middleware
    result = make_request(method, params)
/usr/lib/python3.6/site-packages/web3/middleware/validation.py:43: in middleware
    return make_request(method, post_validated_params)
/usr/lib/python3.6/site-packages/web3/middleware/formatting.py:21: in middleware
    response = make_request(method, formatted_params)
/usr/lib/python3.6/site-packages/web3/providers/eth_tester/middleware.py:320: in middleware
    return make_request(method, [filled_transaction] + params[1:])
/usr/lib/python3.6/site-packages/web3/middleware/fixture.py:12: in middleware
    return make_request(method, params)
/usr/lib/python3.6/site-packages/web3/middleware/formatting.py:21: in middleware
    response = make_request(method, formatted_params)
/usr/lib/python3.6/site-packages/web3/providers/eth_tester/main.py:46: in make_request
    response = delegator(self.ethereum_tester, params)
cytoolz/functoolz.pyx:232: in cytoolz.functoolz.curry.__call__
    ???
/usr/lib/python3.6/site-packages/web3/providers/eth_tester/defaults.py:36: in call_eth_tester
    return getattr(eth_tester, fn_name)(*fn_args, **fn_kwargs)
/usr/lib/python3.6/site-packages/eth_tester/main.py:78: in func_wrapper
    transaction_hash = func(self, *args, **kwargs)
/usr/lib/python3.6/site-packages/eth_tester/main.py:430: in send_transaction
    return self._add_transaction_to_pending_block(transaction)
/usr/lib/python3.6/site-packages/eth_tester/main.py:473: in _add_transaction_to_pending_block
    raw_transaction_hash = self.backend.send_transaction(raw_transaction)
/usr/lib/python3.6/site-packages/eth_tester/backends/pyevm/main.py:496: in send_transaction
    self.chain.apply_transaction(signed_evm_transaction)
/usr/lib/python3.6/site-packages/eth/chains/base.py:841: in apply_transaction
    new_header, receipt, computation = vm.apply_transaction(base_block.header, transaction)
/usr/lib/python3.6/site-packages/eth/vm/base.py:356: in apply_transaction
    state_root, computation = self.state.apply_transaction(transaction)
/usr/lib/python3.6/site-packages/eth/vm/state.py:220: in apply_transaction
    computation = self.execute_transaction(transaction)
/usr/lib/python3.6/site-packages/eth/vm/forks/frontier/state.py:189: in execute_transaction
    return executor(transaction)
/usr/lib/python3.6/site-packages/eth/vm/state.py:268: in __call__
    message = self.build_evm_message(valid_transaction)
/usr/lib/python3.6/site-packages/eth/vm/forks/frontier/state.py:52: in build_evm_message
    self.vm_state.account_db.delta_balance(transaction.sender, -1 * gas_fee)
/usr/lib/python3.6/site-packages/eth/rlp/transactions.py:97: in sender
    return self.get_sender()
/usr/lib/python3.6/site-packages/eth/vm/forks/frontier/transactions.py:63: in get_sender
    return extract_transaction_sender(self)
/usr/lib/python3.6/site-packages/eth/utils/transactions.py:103: in extract_transaction_sender
    public_key = signature.recover_public_key_from_msg(message)
/usr/lib/python3.6/site-packages/eth_keys/datatypes.py:376: in recover_public_key_from_msg
    return self.recover_public_key_from_msg_hash(message_hash)
/usr/lib/python3.6/site-packages/eth_keys/datatypes.py:379: in recover_public_key_from_msg_hash
    return self.backend.ecdsa_recover(message_hash, self)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/main.py:30: in ecdsa_recover
    public_key_bytes = ecdsa_raw_recover(msg_hash, signature.vrs)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/ecdsa.py:135: in ecdsa_raw_recover
    Q = jacobian_multiply(Qr, inv(r, N))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:78: in jacobian_multiply
    return jacobian_double(jacobian_multiply(a, n // 2))
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:80: in jacobian_multiply
    return jacobian_add(jacobian_double(jacobian_multiply(a, n // 2)), a)
/usr/lib/python3.6/site-packages/eth_keys/backends/native/jacobian.py:59: in jacobian_add
    ny = (R * (U1H2 - nx) - S1 * H3) % P
/usr/lib/python3.6/site-packages/timeout_decorator/timeout_decorator.py:72: in handler
    _raise_exception(timeout_exception, exception_message)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

exception = <class 'StopIteration'>, exception_message = None

    def _raise_exception(exception, exception_message):
        """ This function checks if a exception message is given.
    
        If there is no exception message, the default behaviour is maintained.
        If there is an exception message, the message is passed to the exception with the 'value' keyword.
        """
        if exception_message is None:
>           raise exception()
E           StopIteration

/usr/lib/python3.6/site-packages/timeout_decorator/timeout_decorator.py:45: StopIteration

How can it be fixed?

I do not have an insight.

@pipermerriam
Copy link
Member

It would be really helpful if we could get the values from this section.

/usr/lib/python3.6/site-packages/eth_keys/backends/native/main.py:30: in ecdsa_recover
    public_key_bytes = ecdsa_raw_recover(msg_hash, signature.vrs)

Specifically the msg_hash and signature.vrs values. This will let us confirm this bug in isolation.

@mderka
Copy link
Author

mderka commented Dec 14, 2018

Those values will likely not be available. They are dynamic and I cannot consistently reproduce the issue, so they are hard to get. I will try to run the tests whenever possible and report if I manage to retrieve them.

@carver
Copy link
Collaborator

carver commented Dec 14, 2018

Recovering a signature is a feature that we already test on lots of random inputs, even on invalid signatures. See https://github.com/ethereum/eth-keys/blob/ce2aade354c77531babaa16669529082a7835f39/tests/backends/test_native_backend_against_coincurve.py

So it's going to be tricky for us to figure out this bug without the specific inputs. One thing we could do in the meantime is catch that StopIteration in eth-keys main and re-raise the exception with the message & signature. (also, should StopIteration be a timeout exception instead?)

pacrob pushed a commit to pacrob/eth-keys that referenced this issue Dec 20, 2023
@pacrob pacrob added the p3 label Aug 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants