jumpserver/apps/common/hashers/sm3.py

35 lines
671 B
Python

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