/opt/imh-python/lib/python3.9/site-packages/twisted/conch/ssh
NameSizeModeActions
__pycache__/-0755rm
address.py11020644editdlrm
agent.py95160644editdlrm
channel.py99680644editdlrm
common.py19540644editdlrm
connection.py255420644editdlrm
factory.py39890644editdlrm
filetransfer.py380890644editdlrm
forwarding.py82250644editdlrm
keys.py688450644editdlrm
service.py15560644editdlrm
session.py140380644editdlrm
sexpy.py9440644editdlrm
transport.py815220644editdlrm
userauth.py277130644editdlrm
_kex.py85670644editdlrm
_keys_pynacl.py32030644editdlrm
__init__.py1820644editdlrm
Edit: /opt/imh-python/lib/python3.9/site-packages/twisted/conch/ssh/_keys_pynacl.py (3203B)
# -*- test-case-name: twisted.conch.test.test_keys -*- # Copyright (c) Twisted Matrix Laboratories. # See LICENSE for details. """ Optional PyNaCl fallback code for Ed25519 keys. """ from cryptography.exceptions import InvalidSignature from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric import ed25519 from nacl.exceptions import BadSignatureError from nacl.signing import SigningKey, VerifyKey class Ed25519PublicKey(ed25519.Ed25519PublicKey): def __init__(self, data: bytes): self._key = VerifyKey(data) def __bytes__(self) -> bytes: return bytes(self._key) def __hash__(self) -> int: return hash(bytes(self)) def __eq__(self, other: object) -> bool: if not isinstance(other, self.__class__): return False return self._key == other._key def __ne__(self, other: object) -> bool: return not (self == other) @classmethod def from_public_bytes(cls, data: bytes) -> ed25519.Ed25519PublicKey: return cls(data) def public_bytes( self, encoding: serialization.Encoding, format: serialization.PublicFormat, ) -> bytes: if ( encoding is not serialization.Encoding.Raw or format is not serialization.PublicFormat.Raw ): raise ValueError("Both encoding and format must be Raw") return bytes(self) def verify(self, signature: bytes, data: bytes) -> None: try: self._key.verify(data, signature) except BadSignatureError as e: raise InvalidSignature(str(e)) class Ed25519PrivateKey(ed25519.Ed25519PrivateKey): def __init__(self, data: bytes): self._key = SigningKey(data) def __bytes__(self) -> bytes: return bytes(self._key) def __hash__(self) -> int: return hash(bytes(self)) def __eq__(self, other: object) -> bool: if not isinstance(other, self.__class__): return False return self._key == other._key def __ne__(self, other: object) -> bool: return not (self == other) @classmethod def generate(cls) -> ed25519.Ed25519PrivateKey: return cls(bytes(SigningKey.generate())) @classmethod def from_private_bytes(cls, data: bytes) -> ed25519.Ed25519PrivateKey: return cls(data) def public_key(self) -> ed25519.Ed25519PublicKey: return Ed25519PublicKey(bytes(self._key.verify_key)) def private_bytes( self, encoding: serialization.Encoding, format: serialization.PrivateFormat, encryption_algorithm: serialization.KeySerializationEncryption, ) -> bytes: if ( encoding is not serialization.Encoding.Raw or format is not serialization.PrivateFormat.Raw or not isinstance(encryption_algorithm, serialization.NoEncryption) ): raise ValueError( "Encoding and format must be Raw and " "encryption_algorithm must be NoEncryption" ) return bytes(self) def sign(self, data: bytes) -> bytes: return self._key.sign(data).signature