def get_hasher(self, formatted_hash): hasher_name = bytes_to_native(formatted_hash.split(b"$", 1)[0]) try: return self.hashers[hasher_name] except KeyError: raise ValueError( "unknown name (%r) or invalid hash: %r" % ( hasher_name, formatted_hash ) )
def parse(self, formatted_hash): """ Parses `formatted_hash` as returned by :meth:`format` and returns a :class:`PasswordHash`. """ if not b"$" in formatted_hash: raise ValueError("name missing: %r" % formatted_hash) name, hash = formatted_hash.split(b"$", 1) name = bytes_to_native(name) if name != self.name: raise ValueError("expected %r hash, got %r" % (self.name, name)) return hash