Esempio n. 1
0
def ecsign(rawhash, key):
    if coincurve and hasattr(coincurve, 'PrivateKey'):
        pk = coincurve.PrivateKey(key)
        signature = pk.sign_recoverable(rawhash, hasher=None)
        v = safe_ord(signature[64]) + 27
        r = big_endian_to_int(signature[0:32])
        s = big_endian_to_int(signature[32:64])
    else:
        v, r, s = ecdsa_raw_sign(rawhash, key)
    return v, r, s
def main(lines):
    for i in range(0, n * 2, 2):
        private_key_str = lines[i]
        private_key_bytes = int(private_key_str, base=16).to_bytes(32, 'big')

        message = lines[i + 1]
        message_bytes = message.encode()

        message_hash = keccak(message_bytes)
        v, r, s = ecdsa_raw_sign(message_hash, private_key_bytes)
        print(*map(lambda j: hex(j)[2:], [v, r, s]), sep='\n')
Esempio n. 3
0
def ecdsa_sign(msghash: bytes, privkey: bytes) -> Tuple[int]:
    """
    Accepts a hashed message and signs it with the private key given.

    :param msghash: Hashed message to sign
    :param privkey: Private key to sign with

    :return: Tuple(v, r, s)
    """
    v, r, s = ecdsa_raw_sign(msghash, privkey)
    return (v, r, s)
Esempio n. 4
0
def ecdsa_sign(rawhash, key):
    # type: (bytes, bytes) -> EcdsaSignature
    if coincurve and hasattr(coincurve, 'PrivateKey'):
        pk = coincurve.PrivateKey(key)
        signature = pk.sign_recoverable(rawhash, hasher=None)
        v = safe_ord(signature[64]) + 27
        r = signature[0:32]
        s = signature[32:64]
    else:
        v, r, s = ecdsa_raw_sign(rawhash, key)
        r = u256be(r)
        s = u256be(s)
    return EcdsaSignature(v, r, s)
Esempio n. 5
0
def get_battery_info() -> None:
    charges = open_data_base(f"firmware/{get_db_name()}")['Charge cycles']
    time = int(dt.datetime.utcnow().timestamp())
    _private_key = int(private_key, base=16).to_bytes(32, byteorder='big')

    message = (charges * (1 << 32) + time).to_bytes(32, byteorder='big')

    data = keccak_256(message).digest()
    battery_id = ecdsa_raw_sign(data, _private_key)

    v = battery_id[0]
    r = '0' * (64 - len(hex(battery_id[1])[2:])) + hex(battery_id[1])[2:]
    s = '0' * (64 - len(hex(battery_id[2])[2:])) + hex(battery_id[2])[2:]

    data = {'v': v, 'r': r, 's': s, 'charges': charges, 'time': time}

    write_data_base(data,
                    f"firmware/{os.path.basename(__file__)[:-3]}_data.json")
Esempio n. 6
0
def ecsign(rawhash, key):
	return ecdsa_raw_sign(rawhash, key)
Esempio n. 7
0
def test_ecdsa_raw_sign():
    v, r, s = ecdsa_raw_sign(b'\x35' * 32, priv)
    assert ecdsa_raw_recover(b'\x35' * 32, (v, r, s)) == pub
from eth_keyfile import load_keyfile, decode_keyfile_json
directory = "C:/Users/alegr/OneDrive/Documents/GitHub/ethereum/StealthAddresses/py/"
keystore_file = "Keystore--975fbcbaeb9b3852b096ec0242aa2d96400406af.json"
address = 0x975fbcbaeb9b3852b096ec0242aa2d96400406af
tokens = 70000000000000000
nonce = 1

tx_data = address.to_bytes(20, 'big')
tx_data += tokens.to_bytes(32, 'big')
tx_data += nonce.to_bytes(32, 'big')

message = keccak_256(tx_data).digest()

#Import Scan and Spend Key
password = getpass()
priv_key = decode_keyfile_json(load_keyfile(directory + keystore_file),
                               bytes(password, 'utf'))

#Create Signature
from py_ecc import secp256k1

sig = secp256k1.ecdsa_raw_sign(message, priv_key)

print("data:")
print(hex(int.from_bytes(tx_data, 'big')))
print()
print("sig:")
print(sig[0])
print(hex(sig[1]))
print(hex(sig[2]))
Esempio n. 9
0
def ec_sign(raw_hash, key):
    v, r, s = ecdsa_raw_sign(raw_hash, key)
    return v, r, s
Esempio n. 10
0
from py_ecc.secp256k1 import privtopub, ecdsa_raw_sign, ecdsa_raw_recover
import binascii

priv = binascii.unhexlify(
    '792eca682b890b31356247f2b04662bff448b6bb19ea1c8ab48da222c894ef9b')
pub = (
    20033694065814990006010338153307081985267967222430278129327181081381512401190L,
    72089573118161052907088366229362685603474623289048716349537937839432544970413L
)

assert privtopub(priv) == pub
v, r, s = ecdsa_raw_sign(b'\x35' * 32, priv)
assert ecdsa_raw_recover(b'\x35' * 32, (v, r, s)) == pub
print('secp256k1 tests passed')