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