"""Interface to DH key exchange"""from__future__importannotationsfromtypingimportTYPE_CHECKINGfrompyflocker.ciphers.backendsimport(Backendsas_Backends,load_algorithmas_load_algo,)ifTYPE_CHECKING:# pragma: no coverfromtypesimportModuleTypefrompyflocker.ciphersimportbasedef_load_dhe(backend:_Backends)->ModuleType:return_load_algo("DH",backend)
[docs]defgenerate(key_size:int,g:int=2,*,backend:_Backends=_Backends.CRYPTOGRAPHY,)->base.BaseDHParameters:""" Generate DHE parameter with prime number's bit size ``bits`` and generator ``g`` (default 2). Recommended size of ``bits`` > 1024. Args: key_size: The bit length of the prime modulus. g: The value to use as a generator value. Default is 2. Keyword Arguments: backend: The backend to use. It must be a value from :any:`Backends`. Returns: DHParameters: A DH key exchange paramenter object. """return_load_dhe(backend).generate(key_size,g)
[docs]defload_from_parameters(p:int,g:int=2,q:int|None=None,*,backend:_Backends=_Backends.CRYPTOGRAPHY,)->base.BaseDHParameters:"""Create a DH Parameter object from the given parameters. Args: p: The prime modulus ``p``. g: The generator. q: ``p`` subgroup order value. Keyword Arguments: backend: The backend to use. It must be a value from :any:`Backends`. Returns: A DH key exchange paramenter object. """return_load_dhe(backend).load_from_parameters(p,g,q)
[docs]defload_parameters(data:bytes,*,backend:_Backends=_Backends.CRYPTOGRAPHY,)->base.BaseDHParameters:"""Deserialize the DH parameters and load a parameter object. Args: data: Serialized DH Parameter. Keyword Arguments: backend: The backend to use. It must be a value from :any:`Backends`. Returns: A DHE parameter object. """return_load_dhe(backend).load_parameters(data)
[docs]defload_public_key(data:bytes,*,backend:_Backends=_Backends.CRYPTOGRAPHY,)->base.BaseDHPublicKey:"""Loads the public key and returns a Key interface. Args: data: The public key (a bytes-like object) to deserialize. Keyword Arguments: backend: The backend to use. It must be a value from :any:`Backends`. Returns: An public key object. """return_load_dhe(backend).load_public_key(data)
[docs]defload_private_key(data:bytes,passphrase:bytes|None=None,*,backend:_Backends=_Backends.CRYPTOGRAPHY,)->base.BaseDHPrivateKey:"""Loads the private key. Args: data: The private key (a bytes-like object) to deserialize. passphrase: The passphrase (in bytes) that was used to encrypt the private key. ``None`` if the key was not encrypted. Keyword Arguments: backend: The backend to use. It must be a value from :any:`Backends`. Returns: A private key object. """return_load_dhe(backend).load_private_key(data,passphrase)