This commit is contained in:
Ivan Vazhenin
2024-04-25 20:32:28 +03:00
commit 7b8035ff33
101 changed files with 13658 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
from abc import ABCMeta
from abc import abstractmethod
from pygost.utils import hexenc
# This function is taken from six package as is
def add_metaclass(metaclass):
"""Class decorator for creating a class with a metaclass."""
def wrapper(cls):
orig_vars = cls.__dict__.copy()
slots = orig_vars.get("__slots__")
if slots is not None:
if isinstance(slots, str):
slots = [slots]
for slots_var in slots:
orig_vars.pop(slots_var)
orig_vars.pop("__dict__", None)
orig_vars.pop("__weakref__", None)
return metaclass(cls.__name__, cls.__bases__, orig_vars)
return wrapper
@add_metaclass(ABCMeta)
class PEP247(object):
@property
@abstractmethod
def digest_size(self):
"""The size of the digest produced by the hashing objects.
"""
@abstractmethod
def copy(self):
"""Return a separate copy of this hashing object.
"""
@abstractmethod
def update(self, data):
"""Hash data into the current state of the hashing object.
"""
@abstractmethod
def digest(self):
"""Return the hash value as a string containing 8-bit data.
"""
def hexdigest(self):
"""Return the hash value as a string containing hexadecimal digits.
"""
return hexenc(self.digest())