Source code for x3dh.crypto_provider

from abc import ABC, abstractmethod
import enum
import sys

if sys.version_info >= (3, 11):
    from typing import assert_never
else:
    from typing_extensions import assert_never


__all__ = [
    "CryptoProvider",
    "HashFunction"
]


[docs] @enum.unique class HashFunction(enum.Enum): """ Enumeration of the hash functions supported for the key derivation step of X3DH. """ SHA_256 = "SHA_256" SHA_512 = "SHA_512" @property def hash_size(self) -> int: """ Returns: The byte size of the hashes produced by this hash function. """ if self is HashFunction.SHA_256: return 32 if self is HashFunction.SHA_512: return 64 return assert_never(self)
[docs] class CryptoProvider(ABC): """ Abstraction of the cryptographic operations needed by this package to allow for different backend implementations. """
[docs] @staticmethod @abstractmethod async def hkdf_derive( hash_function: HashFunction, length: int, salt: bytes, info: bytes, key_material: bytes ) -> bytes: """ Args: hash_function: The hash function to parameterize the HKDF with. length: The number of bytes to derive. salt: The salt input for the HKDF. info: The info input for the HKDF. key_material: The input key material to derive from. Returns: The derived key material. """