|
|
|
|
|
|
|
|
|
from __future__ import annotations |
|
|
|
import abc |
|
|
|
from cryptography.hazmat.bindings._rust import openssl as rust_openssl |
|
from cryptography.hazmat.primitives import _serialization |
|
|
|
generate_parameters = rust_openssl.dh.generate_parameters |
|
|
|
|
|
DHPrivateNumbers = rust_openssl.dh.DHPrivateNumbers |
|
DHPublicNumbers = rust_openssl.dh.DHPublicNumbers |
|
DHParameterNumbers = rust_openssl.dh.DHParameterNumbers |
|
|
|
|
|
class DHParameters(metaclass=abc.ABCMeta): |
|
@abc.abstractmethod |
|
def generate_private_key(self) -> DHPrivateKey: |
|
""" |
|
Generates and returns a DHPrivateKey. |
|
""" |
|
|
|
@abc.abstractmethod |
|
def parameter_bytes( |
|
self, |
|
encoding: _serialization.Encoding, |
|
format: _serialization.ParameterFormat, |
|
) -> bytes: |
|
""" |
|
Returns the parameters serialized as bytes. |
|
""" |
|
|
|
@abc.abstractmethod |
|
def parameter_numbers(self) -> DHParameterNumbers: |
|
""" |
|
Returns a DHParameterNumbers. |
|
""" |
|
|
|
|
|
DHParametersWithSerialization = DHParameters |
|
DHParameters.register(rust_openssl.dh.DHParameters) |
|
|
|
|
|
class DHPublicKey(metaclass=abc.ABCMeta): |
|
@property |
|
@abc.abstractmethod |
|
def key_size(self) -> int: |
|
""" |
|
The bit length of the prime modulus. |
|
""" |
|
|
|
@abc.abstractmethod |
|
def parameters(self) -> DHParameters: |
|
""" |
|
The DHParameters object associated with this public key. |
|
""" |
|
|
|
@abc.abstractmethod |
|
def public_numbers(self) -> DHPublicNumbers: |
|
""" |
|
Returns a DHPublicNumbers. |
|
""" |
|
|
|
@abc.abstractmethod |
|
def public_bytes( |
|
self, |
|
encoding: _serialization.Encoding, |
|
format: _serialization.PublicFormat, |
|
) -> bytes: |
|
""" |
|
Returns the key serialized as bytes. |
|
""" |
|
|
|
@abc.abstractmethod |
|
def __eq__(self, other: object) -> bool: |
|
""" |
|
Checks equality. |
|
""" |
|
|
|
|
|
DHPublicKeyWithSerialization = DHPublicKey |
|
DHPublicKey.register(rust_openssl.dh.DHPublicKey) |
|
|
|
|
|
class DHPrivateKey(metaclass=abc.ABCMeta): |
|
@property |
|
@abc.abstractmethod |
|
def key_size(self) -> int: |
|
""" |
|
The bit length of the prime modulus. |
|
""" |
|
|
|
@abc.abstractmethod |
|
def public_key(self) -> DHPublicKey: |
|
""" |
|
The DHPublicKey associated with this private key. |
|
""" |
|
|
|
@abc.abstractmethod |
|
def parameters(self) -> DHParameters: |
|
""" |
|
The DHParameters object associated with this private key. |
|
""" |
|
|
|
@abc.abstractmethod |
|
def exchange(self, peer_public_key: DHPublicKey) -> bytes: |
|
""" |
|
Given peer's DHPublicKey, carry out the key exchange and |
|
return shared key as bytes. |
|
""" |
|
|
|
@abc.abstractmethod |
|
def private_numbers(self) -> DHPrivateNumbers: |
|
""" |
|
Returns a DHPrivateNumbers. |
|
""" |
|
|
|
@abc.abstractmethod |
|
def private_bytes( |
|
self, |
|
encoding: _serialization.Encoding, |
|
format: _serialization.PrivateFormat, |
|
encryption_algorithm: _serialization.KeySerializationEncryption, |
|
) -> bytes: |
|
""" |
|
Returns the key serialized as bytes. |
|
""" |
|
|
|
|
|
DHPrivateKeyWithSerialization = DHPrivateKey |
|
DHPrivateKey.register(rust_openssl.dh.DHPrivateKey) |
|
|