module Rmega::Crypto::Rsa

Public Instance Methods

powm(b, p, m) click to toggle source
# File lib/rmega/crypto/rsa.rb, line 4
def powm(b, p, m)
  if p == 1
    b % m
  elsif (p & 0x1) == 0
    t = powm(b, p >> 1, m)
    (t * t) % m
  else
    (b * powm(b, p-1, m)) % m
  end
end
rsa_decrypt(m, pqdu) click to toggle source
# File lib/rmega/crypto/rsa.rb, line 15
def rsa_decrypt(m, pqdu)
  p, q, d, u = pqdu
  if p && q && u
    m1 = powm(m, d % (p - 1), p)
    m2 = powm(m, d % (q - 1), q)
    h = m2 - m1
    h = h + q if h < 0
    h = h * u % q
    h * p + m1
  else
    pow_m(m, d, p * q)
  end
end