The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Math::GF::Extension - Elements for arithmetics over extensions of Zn

SYNOPSIS

   use Math::GF;
   my $field = Math::GF->new(order => 8);

   # one is-a Math::GF::Extension because 8 is 2 elevated to 3
   my $one = $field->multiplicative_neutral;

DESCRIPTION

This module implements elements and operations over a Galois Field based on powers of a prime (where the power is greater than 1). You are not supposed to generate instances of this class directly, but only through Math::GF (see "SYNOPSIS" above for an example).

OPERATORS

This module overrides some arithmetic and comparison operators, namely:

   + - * / **
   == != eq

Additionally, the stringification operator "" is overloaded too.

METHODS

In the following, $e is supposed to be a Math::GF::Extension object.

assert_compatibility

   my $n = $e->assert_compatibility($other_element);

Assert the compatibility of this object $e with $other_element. It is defined as follows:

  • $other_element is-a Math::GF::Extension

  • $other_element is based on the same field, i.e. it has the same order as $e, i.e. the same "p" and "n".

Throws an error if the conditions are not met.

Returns the order (always a true value in Perl) if successful, a false value otherwise.

divided_by

   my $d = $e->divided_by($other_element);

Evaluate $e divided by $other_element. Calls "assert_compatibility". Used in the implementation of the / overloaded operator.

equal_to

   my $bool = $e->equal_to($other_element);

Asses equality of $e and $other_element. Calls "assert_compatibility". Used in the implementation of the == and eq overloaded operators.

field

   my $field = $e->field;

Accessor for the field where this element belongs.

i

   my $i = $e->i;

The reference value for the multiplicative inverse of this object.

inv

   my $inv = $e->inv;

A Math::GF::Extension element belonging to the same "field" that is the multiplicative inverse of this object.

minus

   my $difference = $e->minus($other_element);

Evaluate difference of $e and $other_element. Calls "assert_compatibility". Used in the implementation of the - overloaded operator.

n

   my $n = $e->n;

Power of the prime for the extension field. Same as $e->field->n.

not_equal_to

   my $bool = $e->not_equal_to($other_element);

Asses disequality of $e and $other_element. Calls "assert_compatibility". Used in the implementation of the != overloaded operator.

o

   my $i = $e->o;

The reference value for the additive inverse (opposite) of this object.

opp

   my $opp = $e->opp;

A Math::GF::Extension element belonging to the same "field" that is the additive inverse of this object.

p

   my $p = $e->p;

Prime integer at the base of the extension field. Same as $e->field->p.

plus

   my $sum = $e->plus($other_element);

Evaluate sum of $e and $other_element. Calls "assert_compatibility". Used in the implementation of the + overloaded operator.

stringify

   my $string = $e->stringify;

Get a string representation of the object. It does just return "v". Used in the implementation of the "" overloaded operator.

times

   my $prod = $e->times($other_element);

Evaluate product of $e and $other_element. Calls "assert_compatibility". Used in the implementation of the * overloaded operator.

to_power

   my $pow = $e->to_power($exp);

Evaluate the power of $e to $exp. Used in the implementation of the ** overloaded operator.

v

   my $v = $e->v;

A reference integer value for this object, comprised between 0 and one less than the order (i.e. "p" elevated to "n"). This value can not be used directly for modulo operations (this does not work in extension fields).

BUGS AND LIMITATIONS

Report bugs either through RT or GitHub (patches welcome).

SEE ALSO

Foo::Bar.

AUTHOR

Flavio Poletti <polettix@cpan.org>

COPYRIGHT AND LICENSE

Copyright (C) 2017, 2018 by Flavio Poletti <polettix@cpan.org>

This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0.

This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.