class Object

Public Instance Methods

chinese_remainder(residues, mods) click to toggle source

Transcribed from cryptopals.com/sets/5/challenges/40

# File lib/crypto_toolchain/extensions/object_extensions.rb, line 4
def chinese_remainder(residues, mods)
  mod_product = ->(without) { mods.inject(:*) / without }
  sum = 0
  residues.zip(mods) do |(residue, mod)|
    mp = mod_product.call(mod)
    sum += residue * mp * mp.invmod(mod)
  end
  sum % mods.inject(:*)
end
numberize(n) click to toggle source
# File lib/crypto_toolchain/extensions/object_extensions.rb, line 14
def numberize(n)
  if n.respond_to?(:to_number)
    n.to_number
  elsif n.is_a?(Numeric)
    n
  else
    raise ArgumentError, "#{n} cannot be numberized"
  end
end