module RSA::ACC::PoE

Non-Interactive Proof of Exponentiation

Public Instance Methods

prove(base, exp, result, modulus) click to toggle source

Computes a proof base ^ H(exp) was performed to derive result. @param [Integer] base The known base. @param [Integer] exp The exponentiation. @param [Integer] result such as result = base^exp. @param [Integer] modulus modulus using computation.

# File lib/rsa/acc/poe.rb, line 19
def prove(base, exp, result, modulus)
  l = compute_challenge(base, exp, result)
  q = exp / l
  base.pow(q, modulus)
end
verify(base, exp, result, proof, modulus) click to toggle source

Verifies that base^exp = result using the given proof to avoid computation. @param [Integer] base The known base. @param [Integer] exp The exponentiation. @param [Integer] result such as result = base^exp. @param [Integer] proof an proof. @param [Integer] modulus modulus using computation.

# File lib/rsa/acc/poe.rb, line 31
def verify(base, exp, result, proof, modulus)
  l = compute_challenge(base, exp, result)
  r = exp % l
  w = (proof.pow(l, modulus) * base.pow(r, modulus)) % modulus
  w == result
end