76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
#!/usr/bin/python3
|
|
# Eth ECDSA key generator for web3 hacking
|
|
# Author: six
|
|
|
|
# require(owner() == ecrecover(keccak256(abi.encodePacked(this, tokenId)), v, r, s), "Should be signed correctly");
|
|
# https://privatekeys.pw/keys/ethereum/1
|
|
|
|
from web3.auto import w3
|
|
from eth_account.messages import encode_defunct
|
|
|
|
#def sign_mint():
|
|
msg = "0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf"
|
|
msg = "1"
|
|
msg = "1659023558XXX" # unix time
|
|
private_key = "0000000000000000000000000000000000000000000000000000000000000001" # <- hex | pub -> 0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
|
|
message = encode_defunct(text=msg)
|
|
signed_message = w3.eth.account.sign_message(message, private_key=private_key)
|
|
|
|
print("Public key: 0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf")
|
|
print("Private key: 0000000000000000000000000000000000000000000000000000000000000001")
|
|
|
|
print(msg)
|
|
|
|
print("Signed message: ")
|
|
#print(type(signed_message))
|
|
print(signed_message)
|
|
|
|
print("\n Recovered message: ")
|
|
print(w3.eth.account.recover_message(message, signature=signed_message.signature))
|
|
|
|
#sign_mint()
|
|
|
|
|
|
from web3 import Web3
|
|
|
|
# ecrecover in Solidity expects v as a native uint8, but r and s as left-padded bytes32
|
|
# Remix / web3.js expect r and s to be encoded to hex
|
|
# This convenience method will do the pad & hex for us:
|
|
def to_32byte_hex(val):
|
|
return Web3.toHex(Web3.toBytes(val).rjust(32, b'\0'))
|
|
|
|
ec_recover_args = (msghash, v, r, s) = (
|
|
Web3.toHex(signed_message.messageHash),
|
|
signed_message.v,
|
|
to_32byte_hex(signed_message.r),
|
|
to_32byte_hex(signed_message.s),)
|
|
|
|
print("\n Recovered args (msghash, v, r, s):")
|
|
print(ec_recover_args)
|
|
|
|
# https://privatekeys.pw/keys/ethereum/1
|
|
|
|
# https://web3py.readthedocs.io/en/stable/web3.eth.account.html?highlight=sign#sign-a-message
|
|
# w3.eth.account.recover_message(message, signature=signed_message.signature)
|
|
#'0x5ce9454909639D2D17A3F753ce7d93fa0b9aB12E'
|
|
|
|
|
|
from flask import Flask, request
|
|
|
|
app = Flask(__name__)
|
|
|
|
@app.route('/')
|
|
def hello():
|
|
return 'Lets play a game... move to /verify and ? is the private key if: '
|
|
|
|
@app.route('/verify', methods=['GET'])
|
|
def search():
|
|
args = request.args
|
|
args.get("v", default="", type=str)
|
|
print(args)
|
|
#0000000000000000000000000000000000000000000000000000000000000001
|
|
return args
|
|
|
|
#if __name__ == '__main__':
|
|
# app.run(debug=False)
|