Refactor ID to not use third-party type for cryptographic keys

Remove `ID.from_privkey` which would require specific knowledge per cryptosystem
This commit is contained in:
Alex Stokes 2019-08-02 16:03:40 -07:00
parent cff5fe0d5f
commit bd8d45fbc1
No known key found for this signature in database
GPG Key ID: 51CE1721B245C086
3 changed files with 6 additions and 35 deletions

View File

@ -28,9 +28,8 @@ async def cleanup_done_tasks():
def generate_id(): def generate_id():
new_key = RSA.generate(2048, e=65537) new_key = RSA.generate(2048, e=65537).publickey().export_key("DER")
new_id = ID.from_pubkey(new_key.publickey()) new_id = ID.from_pubkey(new_key)
# private_key = new_key.exportKey("PEM")
return new_id return new_id

View File

@ -5,16 +5,6 @@ import base58
import multihash import multihash
from Crypto.PublicKey.RSA import RsaKey
# MaxInlineKeyLength is the maximum length a key can be for it to be inlined in
# the peer ID.
# * When `len(pubKey.Bytes()) <= MaxInlineKeyLength`, the peer ID is the
# identity multihash hash of the public key.
# * When `len(pubKey.Bytes()) > MaxInlineKeyLength`, the peer ID is the
# sha2-256 multihash of the public key.
MAX_INLINE_KEY_LENGTH = 42
class ID: class ID:
@ -64,22 +54,11 @@ class ID:
return pid return pid
@classmethod @classmethod
def from_pubkey(cls, key: RsaKey) -> "ID": def from_pubkey(cls, key: bytes) -> "ID":
# export into binary format algo = multihash.Func.sha2_256
key_bin = key.exportKey("DER") mh_digest = multihash.digest(key, algo)
algo: int = multihash.Func.sha2_256
# TODO: seems identity is not yet supported in pymultihash
# if len(b) <= MAX_INLINE_KEY_LENGTH:
# algo multihash.func.identity
mh_digest: multihash.Multihash = multihash.digest(key_bin, algo)
return cls(mh_digest.encode()) return cls(mh_digest.encode())
@classmethod
def from_privkey(cls, key: RsaKey) -> "ID":
return cls.from_pubkey(key.publickey())
def digest(data: Union[str, bytes]) -> bytes: def digest(data: Union[str, bytes]) -> bytes:
if isinstance(data, str): if isinstance(data, str):

View File

@ -111,13 +111,6 @@ def test_id_from_public_key():
algo = multihash.Func.sha2_256 algo = multihash.Func.sha2_256
mh_digest = multihash.digest(key_bin, algo) mh_digest = multihash.digest(key_bin, algo)
expected = ID(mh_digest.encode()) expected = ID(mh_digest.encode())
actual = ID.from_pubkey(key) actual = ID.from_pubkey(key_bin)
assert actual == expected assert actual == expected
def test_id_from_private_key():
key = RSA.generate(2048, e=65537)
id_from_pub = ID.from_pubkey(key.publickey())
id_from_priv = ID.from_privkey(key)
assert id_from_pub == id_from_priv