Maven module :un.api : api-encoding :
Class : un.impl.cryptography.ec.ECField
Extends/Implements : un.impl.cryptography.ec.ECParam255
Subclasses : -

Algebraic operations on the finite field GF(2^m).

This public domain software was written by Stuart D. Gathman,
based on C software written by Paulo S.L.M. Barreto
based on original C++ software written by
George Barwood

THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

References
==========

1. Erik De Win et alii:
"A Fast Software Implementation for Arithmetic Operations in GF(2^n)",
presented at Asiacrypt96 (preprint).

Change log
==========

1997.09.15:
-- Fixed a bug in gfTrace() which would give wrong values (and
possibly also addressing error once in a while) for every field
where where GF_TM0 != 1. Thanks to Dave Dahm
for pointing out this bug and providing debugging data.


Variables : TOGGLE
Functions : gfNew, gfNew, gfEqual, gfClear, gfCopy, gfAdd, gfMultiply, gfSquare, gfSmallDiv, gfInvert, gfSquareRoot, gfTrace, gfQuadSolve, gfYbit, gfPack, gfUnpack, toString, gfRandom


char TOGGLE



Allocate a new polynomial. */
char[] gfNew ()

char[] gfNew (char[] q)

boolean gfEqual (char[] p, char[] q)


/*
public boolean equals(Object obj) {
if (!(obj instanceof ECField)) return false;
ECField q = (ECField)obj;
int n = p[0] + 1;
for (int i = 0; i <= n; ++i)
if (p[i] != q.p[i]) return false;
return true;
}
void gfClear (char[] p)

void gfCopy (char[] p, char[] q)


Set p := q + r */
void gfAdd (char[] p, char[] q, char[] r)


set r := p * q mod (x^GF_K + x^GF_T + 1) */
void gfMultiply (char[] r, char[] p, char[] q)


set r := p^2 mod (x^GF_K + x^GF_T + 1). */
void gfSquare (char[] r, char[] p)


sets p := (b^(-1))*p mod (x^GF_K + x^GF_T + 1) */
void gfSmallDiv (char[] p, char b)


sets b := a^(-1) mod (x^GF_K + x^GF_T + 1)
warning: a and b must not overlap!
return  true on failure
boolean gfInvert (char[] r, char[] a)


sets p := sqrt(b) = b^(2^(GF_M-1)) */
void gfSquareRoot (char[] p, char b)


Quickly evaluates to the trace of p. */
boolean gfTrace (char[] p)


set p to a solution of p^2 + p = beta.
return  true if there is no solution
boolean gfQuadSolve (char[] p, char[] beta)


Evaluates to the rightmost (least significant) bit of p */
boolean gfYbit (char[] p)


Packs a field point into a BigInteger. */
BigInteger gfPack (char[] p)


Unpacks a BigInteger into a field point. */
void gfUnpack (char[] p, BigInteger x)


Formats the contents of p. */
String toString (char[] p)


sets p := */
void gfRandom (char[] p, Random rand)