def test_ecrecover_output_zero(signature_test_contract, get_accounts, get_private_key): """ ecrecover returns 0 due to an error caused by an incorrect value of the v parameter """ A = get_accounts(1)[0] privatekey = get_private_key(A) message_hash = Web3.soliditySha3(['string', 'uint256'], ['hello', 5]) signature = sign(privatekey, message_hash, v=27) assert signature_test_contract.call().verifyEcrecoverOutput( message_hash, signature[:32], signature[32:64], 2) == empty_address
def test_verify_fail(signature_test_contract, get_accounts, get_private_key): (A, B) = get_accounts(2) message_hash = Web3.soliditySha3(['string', 'uint256'], ['hello', 5]) signature = sign(get_private_key(A), message_hash, v=27) assert signature_test_contract.call().verify(message_hash, signature) == A message_hash = Web3.soliditySha3(['string', 'uint256'], ['hello', 6]) assert signature_test_contract.call().verify(message_hash, signature) != A signature2 = signature[:65] + bytes([2]) with pytest.raises(tester.TransactionFailed): signature_test_contract.call().verify(message_hash, signature2)
def test_ecrecover_output_fail(signature_test_contract, get_accounts, get_private_key): A = get_accounts(1)[0] privatekey = get_private_key(A) message_hash = Web3.soliditySha3(['string', 'uint256'], ['hello', 5]) signature = sign(privatekey, message_hash, v=27) assert signature_test_contract.call().verifyEcrecoverOutput( message_hash, signature[:32], signature[32:64], int.from_bytes(signature[64:], byteorder='big')) == A message_hash2 = Web3.soliditySha3(['string', 'uint256'], ['hello', 6]) assert signature_test_contract.call().verifyEcrecoverOutput( message_hash2, signature[:32], signature[32:64], int.from_bytes(signature[64:], byteorder='big')) != A