from gmssl import sm3, func from django.contrib.auth.hashers import PBKDF2PasswordHasher class Hasher: name = 'sm3' block_size = 64 digest_size = 32 def __init__(self, data): self.__data = data def hexdigest(self): return sm3.sm3_hash(func.bytes_to_list(self.__data)) def digest(self): return bytes.fromhex(self.hexdigest()) @staticmethod def hash(msg=b''): return Hasher(msg) def update(self, data): self.__data += data def copy(self): return Hasher(self.__data) class PBKDF2SM3PasswordHasher(PBKDF2PasswordHasher): algorithm = "pbkdf2_sm3" digest = Hasher.hash