def verify_knowledge_exponent(u, w, z, Q, r, n): g = pow(65537, hash_to_length(concat(u, w)), n) l, nonce = hash_to_prime(concat(u, w, z)) alpha = hash_to_length(concat(u, w, z, l)) # print((pow(Q, l, n) * pow(u*pow(g,alpha,n), r, n)) % n) # print((w * pow(z, alpha, n)) % n ) return (pow(Q, l, n) * pow(u*pow(g,alpha,n), r, n)) % n == (w * pow(z, alpha, n)) % n
def prove_knowledge_exponent(x, u, w, n): g = pow(65537, hash_to_length(concat(u, w)), n) z = pow(g, x, n) l, nonce = hash_to_prime(concat(u, w, z)) # Fiat-Shamir instead of interactive challenge alpha = hash_to_length(concat(u, w, z, l)) q = x // l r = x % l Q = pow(u*pow(g,alpha,n), q, n) return z, Q, r
def __verify_exponentiation_test(Q, u, x, w, n): # start_time = datetime.datetime.now() l = hash_to_prime(x=(concat(x, u, w)))[0] # end_time = datetime.datetime.now() # print((end_time - start_time)) # start_time = datetime.datetime.now() r = x % l # end_time = datetime.datetime.now() # print((end_time - start_time)) # check (Q^l)(u^r) == w return pow(Q, l, n) * pow(u, r, n) % n == w
def prove_exponentiation_test(u, x, w, n): l, nonce = hash_to_prime(concat(x, u, w)) # Fiat-Shamir instead of interactive challenge q = x // l Q = pow(u, q, n) return Q
def __verify_exponentiation(Q, l_nonce, u, x, w, n): l = hash_to_prime(x=(concat(x, u, w)), nonce=l_nonce)[0] r = x % l # check (Q^l)(u^r) == w return (pow(Q, l, n) % n) * (pow(u, r, n) % n) % n == w