def gen_pbkdf1(password, salt, iterations=10000): """Simple implementation of pbkdf1 using iterations of sha1 """ O = sha1(password + salt).digest() for _ in xrange(2, iterations + 1): O = sha1(O).digest() return O
def gen_sha1(password, salt = "abcdefghijklmnopqrstuvwxyz", iterations=10000): """Python implementation for a slow password hash """ h = sha1() h.update(password) h.update(salt) for x in range(iterations): h.update(h.digest()) return h.hexdigest()
def generate_p_q(L, N): g = N n = (L - 1) // g b = (L - 1) % g while True: while True: s = xmpz(randrange(1, 2**(g))) a = sha1(to_binary(s)).hexdigest() zz = xmpz((s + 1) % (2**g)) z = sha1(to_binary(zz)).hexdigest() U = int(a, 16) ^ int(z, 16) mask = 2**(N - 1) + 1 q = U | mask if is_prime(q, 20): break i = 0 j = 2 while i < 4096: V = [] for k in range(n + 1): arg = xmpz((s + j + k) % (2**g)) zzv = sha1(to_binary(arg)).hexdigest() V.append(int(zzv, 16)) W = 0 for qq in range(0, n): W += V[qq] * 2**(160 * qq) W += (V[n] % 2**b) * 2**(160 * n) X = W + 2**(L - 1) c = X % (2 * q) p = X - c + 1 if p >= 2**(L - 1): if is_prime(p, 10): return p, q i += 1 j += n + 1
def file_hash(filedata): return sha1(filedata).hexdigest()