Add source for some secure bytes, e.g. to provide a nonce

This commit is contained in:
Alex Stokes 2019-08-22 17:55:05 +02:00
parent b59c5d6ca1
commit 0cc3fc24a7
No known key found for this signature in database
GPG Key ID: 51CE1721B245C086

View File

@ -1,14 +1,30 @@
import secrets
from typing import Callable
from libp2p.crypto.keys import KeyPair from libp2p.crypto.keys import KeyPair
from libp2p.peer.id import ID from libp2p.peer.id import ID
from libp2p.security.secure_transport_interface import ISecureTransport from libp2p.security.secure_transport_interface import ISecureTransport
def default_secure_bytes_provider(n: int) -> bytes:
return secrets.token_bytes(n)
class BaseSecureTransport(ISecureTransport): class BaseSecureTransport(ISecureTransport):
""" """
``BaseSecureTransport`` is not fully instantiated from its abstract classes as it ``BaseSecureTransport`` is not fully instantiated from its abstract classes as it
is only meant to be used in clases that derive from it. is only meant to be used in clases that derive from it.
Clients can provide a strategy to get cryptographically secure bytes of a given length.
A default implementation is provided using the ``secrets`` module from the
standard library.
""" """
def __init__(self, local_key_pair: KeyPair) -> None: def __init__(
self,
local_key_pair: KeyPair,
secure_bytes_provider: Callable[[int], bytes] = default_secure_bytes_provider,
) -> None:
self.local_private_key = local_key_pair.private_key self.local_private_key = local_key_pair.private_key
self.local_peer = ID.from_pubkey(local_key_pair.public_key) self.local_peer = ID.from_pubkey(local_key_pair.public_key)
self.secure_bytes_provider = secure_bytes_provider