Exemple #1
0
    def __init__(
        self,
        remote: Node,
        privkey: datatypes.PrivateKey,
        reader: asyncio.StreamReader,
        writer: asyncio.StreamWriter,
        aes_secret: bytes,
        mac_secret: bytes,
        egress_mac: sha3.keccak_256,
        ingress_mac: sha3.keccak_256,
        chaindb: ChainDB,
        network_id: int,
    ) -> None:
        self._finished = asyncio.Event()
        self.remote = remote
        self.privkey = privkey
        self.reader = reader
        self.writer = writer
        self.base_protocol = P2PProtocol(self)
        self.chaindb = chaindb
        self.network_id = network_id
        self.sub_proto_msg_queue = asyncio.Queue(
        )  # type: asyncio.Queue[Tuple[protocol.Command, protocol._DecodedMsgType]]  # noqa: E501

        self.egress_mac = egress_mac
        self.ingress_mac = ingress_mac
        # FIXME: Yes, the encryption is insecure, see: https://github.com/ethereum/devp2p/issues/32
        iv = b"\x00" * 16
        aes_cipher = Cipher(algorithms.AES(aes_secret), modes.CTR(iv),
                            default_backend())
        self.aes_enc = aes_cipher.encryptor()
        self.aes_dec = aes_cipher.decryptor()
        mac_cipher = Cipher(algorithms.AES(mac_secret), modes.ECB(),
                            default_backend())
        self.mac_enc = mac_cipher.encryptor().update
Exemple #2
0
    def __init__(self, remote: Node, privkey: datatypes.PrivateKey,
                 reader: asyncio.StreamReader, writer: asyncio.StreamWriter,
                 aes_secret: bytes, mac_secret: bytes,
                 egress_mac: sha3.keccak_256, ingress_mac: sha3.keccak_256,
                 chaindb: BaseChainDB, network_id: int) -> None:
        self._finished = asyncio.Event()
        self._pending_replies = {
        }  # type: Dict[int, Callable[[protocol._DecodedMsgType], None]]
        self.remote = remote
        self.privkey = privkey
        self.reader = reader
        self.writer = writer
        self.base_protocol = P2PProtocol(self)
        self.chaindb = chaindb
        self.network_id = network_id
        # The sub protocols that have been enabled for this peer; will be populated when
        # we receive the initial hello msg.
        self.enabled_sub_protocols = []  # type: List[protocol.Protocol]

        self.egress_mac = egress_mac
        self.ingress_mac = ingress_mac
        # FIXME: Yes, the encryption is insecure, see: https://github.com/ethereum/devp2p/issues/32
        iv = b"\x00" * 16
        aes_cipher = Cipher(algorithms.AES(aes_secret), modes.CTR(iv),
                            default_backend())
        self.aes_enc = aes_cipher.encryptor()
        self.aes_dec = aes_cipher.decryptor()
        mac_cipher = Cipher(algorithms.AES(mac_secret), modes.ECB(),
                            default_backend())
        self.mac_enc = mac_cipher.encryptor().update
Exemple #3
0
    def __init__(self, remote, privkey, reader, writer, aes_secret, mac_secret,
                 egress_mac, ingress_mac, chaindb, network_id):
        self._finished = asyncio.Event()
        self._pending_replies = {}
        self.remote = remote
        self.privkey = privkey
        self.reader = reader
        self.writer = writer
        self.base_protocol = P2PProtocol(self)
        self.chaindb = chaindb
        self.network_id = network_id
        # The sub protocols that have been enabled for this peer; will be populated when
        # we receive the initial hello msg.
        self.enabled_sub_protocols = []

        self.egress_mac = egress_mac
        self.ingress_mac = ingress_mac
        # FIXME: Yes, the encryption is insecure, see: https://github.com/ethereum/devp2p/issues/32
        iv = b"\x00" * 16
        aes_cipher = Cipher(algorithms.AES(aes_secret), modes.CTR(iv),
                            default_backend())
        self.aes_enc = aes_cipher.encryptor()
        self.aes_dec = aes_cipher.decryptor()
        mac_cipher = Cipher(algorithms.AES(mac_secret), modes.ECB(),
                            default_backend())
        self.mac_enc = mac_cipher.encryptor().update
Exemple #4
0
 def __init__(self, supported_sub_protocols):
     self._supported_sub_protocols = supported_sub_protocols
     self.base_protocol = P2PProtocol(self)