Files
drf-rack/net/xeaf/rack/util/crypto.py

52 lines
1.6 KiB
Python

# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Работа с криптографией
"""
import secrets
class Crypto:
"""
Реализует методы работы со случайными и криптографическими значениями
"""
DEFAULT_TOKEN_LENGTH = 32
""" Длина токена по умолчанию """
DEFAULT_PIN_CODE_LENGTH = 4
""" Длина PIN-кода по умолчанию """
DEFAULT_PIN_CODE_ALPHABET = "0123456789"
""" Алфавит PIN-кода по умолчанию """
@classmethod
def gen_token(cls, length: int = DEFAULT_TOKEN_LENGTH) -> str:
"""
Генерирует случайный токен
:param length: Длина токена
:return: Сгенерированный токен
"""
bytes_needed = (length + 1) // 2
token = secrets.token_hex(bytes_needed)
return token[:length]
@classmethod
def gen_pin_code(cls, length: int = DEFAULT_PIN_CODE_LENGTH, alphabet: str = DEFAULT_PIN_CODE_ALPHABET):
"""
Генерирует случайный PIN-код
:param length: Длина PIN-кода
:param alphabet: Алфавит PIN-кода
:return: Сгенерированный PIN-код
"""
return "".join(secrets.choice(alphabet) for _ in range(length))