forked from STI/Astroport.ONE
136 lines
3.3 KiB
Python
136 lines
3.3 KiB
Python
|
# This file is dual licensed under the terms of the Apache License, Version
|
||
|
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
||
|
# for complete details.
|
||
|
|
||
|
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)
|