mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-01-07 11:40:01 -08:00
c0aa4e4996
* Bump dnspython from 2.3.0 to 2.4.2 Bumps [dnspython](https://github.com/rthalley/dnspython) from 2.3.0 to 2.4.2. - [Release notes](https://github.com/rthalley/dnspython/releases) - [Changelog](https://github.com/rthalley/dnspython/blob/master/doc/whatsnew.rst) - [Commits](https://github.com/rthalley/dnspython/compare/v2.3.0...v2.4.2) --- updated-dependencies: - dependency-name: dnspython dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * Update dnspython==2.4.2 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> [skip ci]
69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
from typing import Any, Optional, Type
|
|
|
|
from cryptography.hazmat.primitives import serialization
|
|
|
|
from dns.dnssecalgs.base import GenericPrivateKey, GenericPublicKey
|
|
from dns.exception import AlgorithmKeyMismatch
|
|
|
|
|
|
class CryptographyPublicKey(GenericPublicKey):
|
|
key: Any = None
|
|
key_cls: Any = None
|
|
|
|
def __init__(self, key: Any) -> None: # pylint: disable=super-init-not-called
|
|
if self.key_cls is None:
|
|
raise TypeError("Undefined private key class")
|
|
if not isinstance( # pylint: disable=isinstance-second-argument-not-valid-type
|
|
key, self.key_cls
|
|
):
|
|
raise AlgorithmKeyMismatch
|
|
self.key = key
|
|
|
|
@classmethod
|
|
def from_pem(cls, public_pem: bytes) -> "GenericPublicKey":
|
|
key = serialization.load_pem_public_key(public_pem)
|
|
return cls(key=key)
|
|
|
|
def to_pem(self) -> bytes:
|
|
return self.key.public_bytes(
|
|
encoding=serialization.Encoding.PEM,
|
|
format=serialization.PublicFormat.SubjectPublicKeyInfo,
|
|
)
|
|
|
|
|
|
class CryptographyPrivateKey(GenericPrivateKey):
|
|
key: Any = None
|
|
key_cls: Any = None
|
|
public_cls: Type[CryptographyPublicKey]
|
|
|
|
def __init__(self, key: Any) -> None: # pylint: disable=super-init-not-called
|
|
if self.key_cls is None:
|
|
raise TypeError("Undefined private key class")
|
|
if not isinstance( # pylint: disable=isinstance-second-argument-not-valid-type
|
|
key, self.key_cls
|
|
):
|
|
raise AlgorithmKeyMismatch
|
|
self.key = key
|
|
|
|
def public_key(self) -> "CryptographyPublicKey":
|
|
return self.public_cls(key=self.key.public_key())
|
|
|
|
@classmethod
|
|
def from_pem(
|
|
cls, private_pem: bytes, password: Optional[bytes] = None
|
|
) -> "GenericPrivateKey":
|
|
key = serialization.load_pem_private_key(private_pem, password=password)
|
|
return cls(key=key)
|
|
|
|
def to_pem(self, password: Optional[bytes] = None) -> bytes:
|
|
encryption_algorithm: serialization.KeySerializationEncryption
|
|
if password:
|
|
encryption_algorithm = serialization.BestAvailableEncryption(password)
|
|
else:
|
|
encryption_algorithm = serialization.NoEncryption()
|
|
return self.key.private_bytes(
|
|
encoding=serialization.Encoding.PEM,
|
|
format=serialization.PrivateFormat.PKCS8,
|
|
encryption_algorithm=encryption_algorithm,
|
|
)
|