class Sperm::Groups::Isomorphism

Provides isomorphism from (Z/(p-1)Z, +) to (Z/pZ \ {0}, *).

Attributes

add_group[R]
mul_group[R]

Public Class Methods

new(add_group, mul_group) click to toggle source
# File lib/sperm/groups/isomorphism.rb, line 13
def initialize(add_group, mul_group)
  fail ArgumentError, 'unequal orders' unless add_group.order == mul_group.order
  @add_group = add_group
  @mul_group = mul_group
end

Public Instance Methods

map(number) click to toggle source
# File lib/sperm/groups/isomorphism.rb, line 19
def map(number)
  fail ArgumentError, 'not an element' unless add_group.include?(number)
  mul_group.generator.to_bn.mod_exp(number, mul_group.modulo).to_i
end