Source code for mimesis.providers.cryptographic

"""Cryptographic data provider."""

import hashlib
import secrets
from uuid import UUID, uuid4

from mimesis.datasets.int.cryptographic import WORDLIST
from mimesis.enums import Algorithm
from mimesis.providers.base import BaseProvider

__all__ = ["Cryptographic"]


[docs] class Cryptographic(BaseProvider): """Class that provides cryptographic data.""" class Meta: name = "cryptographic"
[docs] @staticmethod def uuid_object() -> UUID: """Generates UUID4 object. :return: UUID4 object. """ return uuid4()
[docs] def uuid(self) -> str: """Generates UUID4 string. :return: UUID4 as string. """ return str(self.uuid_object())
[docs] def hash(self, algorithm: Algorithm | None = None) -> str: # noqa: A003 """Generates random hash. To change hashing algorithm, pass parameter ``algorithm`` with needed value of the enum object :class:`~mimesis.enums.Algorithm` .. warning:: Seed is not applicable to this method, because of its cryptographic-safe nature. :param algorithm: Enum object :class:`~mimesis.enums.Algorithm`. :return: Hash. :raises NonEnumerableError: When algorithm is unsupported. """ key = self.validate_enum(algorithm, Algorithm) func = getattr(hashlib, key) value = func(self.uuid().encode()) return str(value.hexdigest())
[docs] @staticmethod def token_bytes(entropy: int = 32) -> bytes: """Generates byte string containing ``entropy`` bytes. The string has ``entropy`` random bytes, each byte converted to two hex digits. .. warning:: Seed is not applicable to this method, because of its cryptographic-safe nature. :param entropy: Number of bytes (default: 32). :return: Random bytes. """ return secrets.token_bytes(entropy)
[docs] @staticmethod def token_hex(entropy: int = 32) -> str: """Generates a random text string, in hexadecimal. The string has *entropy* random bytes, each byte converted to two hex digits. If *entropy* is ``None`` or not supplied, a reasonable default is used. .. warning:: Seed is not applicable to this method, because of its cryptographic-safe nature. :param entropy: Number of bytes (default: 32). :return: Token. """ return secrets.token_hex(entropy)
[docs] @staticmethod def token_urlsafe(entropy: int = 32) -> str: """Generates a random URL-safe text string, in Base64 encoding. The string has *entropy* random bytes. If *entropy* is ``None`` or not supplied, a reasonable default is used. .. warning:: Seed is not applicable to this method, because of its cryptographic-safe nature. :param entropy: Number of bytes (default: 32). :return: URL-safe token. """ return secrets.token_urlsafe(entropy)
[docs] def mnemonic_phrase(self) -> str: """Generates BIP-39 looking mnemonic phrase. :return: Mnemonic phrase. """ length = self.random.choice([12, 24]) phrases = self.random.choices(WORDLIST, k=length) return " ".join(phrases)