# https://en.wikipedia.org/wiki/Fowler–Noll–Vo_hash_function import base64 import struct def fnv64(data): hash_ = 0xcbf29ce484222325 for b in data: hash_ *= 0x100000001b3 hash_ &= 0xffffffffffffffff hash_ ^= b return hash_ def hash_dn(dn, salt): # Turn dn into bytes with a salt, dn is expected to be ascii data data = salt.encode("ascii") + dn.encode("ascii") # Hash data hash_ = fnv64(data) # Pack hash (int) into bytes bhash = struct.pack("