예제 #1
0
def _pack_v5(cmd_id: int, payload: Tuple[Any, ...],
             privkey: datatypes.PrivateKey) -> bytes:
    """Create and sign a discovery v5 UDP message to be sent to a remote node."""
    cmd_id = to_bytes(cmd_id)
    encoded_data = cmd_id + rlp.encode(payload)
    signature = privkey.sign_msg(encoded_data)
    return signature.to_bytes() + encoded_data
예제 #2
0
    def as_signed_transaction(self,
                              private_key: PrivateKey) -> 'TypedTransaction':
        message = self.get_message_for_signing()
        signature = private_key.sign_msg(message)
        y_parity, r, s = signature.vrs

        signed_transaction = DynamicFeeTransaction(
            self.chain_id, self.nonce, self.max_priority_fee_per_gas,
            self.max_fee_per_gas, self.gas, self.to, self.value, self.data,
            self.access_list, y_parity, r, s)
        return LondonTypedTransaction(self._type_id, signed_transaction)
예제 #3
0
def _pack(cmd_id: int, payload: List[Any], privkey: datatypes.PrivateKey) -> bytes:
    """Create and sign a UDP message to be sent to a remote node.

    See https://github.com/ethereum/devp2p/blob/master/rlpx.md#node-discovery for information on
    how UDP packets are structured.
    """
    cmd_id = to_bytes(cmd_id)
    expiration = rlp.sedes.big_endian_int.serialize(int(time.time() + EXPIRATION))
    encoded_data = cmd_id + rlp.encode(payload + [expiration])
    signature = privkey.sign_msg(encoded_data)
    message_hash = keccak(signature.to_bytes() + encoded_data)
    return message_hash + signature.to_bytes() + encoded_data
예제 #4
0
    def as_signed_transaction(self,
                              private_key: PrivateKey) -> 'TypedTransaction':
        message = self.get_message_for_signing()
        signature = private_key.sign_msg(message)
        y_parity, r, s = signature.vrs

        signed_transaction = AccessListTransaction(self.chain_id, self.nonce,
                                                   self.gas_price, self.gas,
                                                   self.to, self.value,
                                                   self.data, self.access_list,
                                                   y_parity, r, s)
        return TypedTransaction(self._type_id, signed_transaction)
예제 #5
0
def _pack_v4(cmd_id: int, payload: Sequence[Any],
             privkey: datatypes.PrivateKey) -> bytes:
    """Create and sign a UDP message to be sent to a remote node.

    See https://github.com/ethereum/devp2p/blob/master/rlpx.md#node-discovery for information on
    how UDP packets are structured.
    """
    cmd_id_bytes = to_bytes(cmd_id)
    encoded_data = cmd_id_bytes + rlp.encode(payload)
    signature = privkey.sign_msg(encoded_data)
    message_hash = keccak(signature.to_bytes() + encoded_data)
    return message_hash + signature.to_bytes() + encoded_data
예제 #6
0
def test_playbet():
    lastBlock = 100
    reveal = 99
    commitLastBlock = unhexlify('%010x' % lastBlock)  # 和uint40对应
    commit = keccak(unhexlify('%064x' % reveal))
    print('0x' + commit.hex())

    privateKey = unhexlify(
        'dbbad2a5682517e4ff095f948f721563231282ca4179ae0dfea1c76143ba9607')
    # r, s, v, sig = ecsign(h, privateKey)
    # sig = new_sign(privkey=privateKey, msg_hash=h)

    pk = PrivateKey(privateKey, CoinCurveECCBackend)
    sig = pk.sign_msg(message=commitLastBlock + commit)
    # return sig

    print('"0x' + sig.to_bytes()[:32].hex() + '"')
    print('"0x' + sig.to_bytes()[32:-1].hex() + '"')
    print(sig.to_bytes()[-1])

    pass
예제 #7
0
def create_transaction_signature(unsigned_txn: BaseTransaction,
                                 private_key: datatypes.PrivateKey,
                                 chain_id: int = None) -> VRS:

    transaction_parts = rlp.decode(rlp.encode(unsigned_txn))

    if chain_id:
        transaction_parts_for_signature = (
            transaction_parts + [int_to_big_endian(chain_id), b'', b''])
    else:
        transaction_parts_for_signature = transaction_parts

    message = rlp.encode(transaction_parts_for_signature)
    signature = private_key.sign_msg(message)

    canonical_v, r, s = signature.vrs

    if chain_id:
        v = canonical_v + chain_id * 2 + EIP155_CHAIN_ID_OFFSET
    else:
        v = canonical_v + V_OFFSET

    return VRS((v, r, s))
예제 #8
0
     b'\x12\x34\x56\x78\x12\x34\x56\x78\x12\x34\x56\x78\x12\x34\x56\x78'
     b'\x12\x34\x56\x78\x12\x34\x56\x78\x12\x34\x56\x78\x12\x34\x56\x78')
 pby = PrivateKey(
     b'\x23\x45\x67\x89\x23\x45\x67\x89\x23\x45\x67\x89\x23\x45\x67\x89'
     b'\x23\x45\x67\x89\x23\x45\x67\x89\x23\x45\x67\x89\x23\x45\x67\x89')
 content = [
     json.dumps({
         "from": "0x12345678",
         "to": "0x87654321",
         "data": "..."
     },
                sort_keys=True).encode('utf-8'), b'\x01', b'\x02', b'\x03'
 ]
 print("time used: ", time.time() - beg)
 signaturex = [
     pbx.sign_msg(ETHSIGN_HEADER + b'\x33\x32' +
                  keccak(rlp.encode([content, []]))).to_bytes(),
     pbx.public_key.to_address()
 ]
 rlped_datax = rlp.encode([content, [signaturex]])
 attex = Attestation.create_attestation(content, signaturex)
 print("time used: ", time.time() - beg)
 # print(attex.content, attex.signatures)
 # print(attex.encode() == rlped_datax)
 attex.sign_and_encode([
     pby.sign_msg(ETHSIGN_HEADER + b'\x33\x32' + attex.hash()),
     pby.public_key.to_address()
 ])
 rlped_datay = attex.encode()
 attey = Attestation(rlped_datay)
 # print(attey.content, attey.signatures)
 # print(attey.encode() == rlped_datay)
def ecdsa_sign(private_key: bytes, message: bytes) -> bytes:
    signer = PrivateKey(private_key)
    return signer.sign_msg(message).to_bytes()