blob: aa3b428e2caf748137f2765534bcf9866f652461 [file] [log] [blame]
package org.bouncycastle.pqc.math.linearalgebra;
import java.math.BigInteger;
/**
* This interface defines a finite field element. It is implemented by the
* class {@link GF2nElement}.
*
* @see GF2nElement
*/
public interface GFElement
{
/**
* @return a copy of this GFElement
*/
Object clone();
// /////////////////////////////////////////////////////////////////
// comparison
// /////////////////////////////////////////////////////////////////
/**
* Compare this curve with another object.
*
* @param other the other object
* @return the result of the comparison
*/
boolean equals(Object other);
/**
* @return the hash code of this element
*/
int hashCode();
/**
* Checks whether this element is zero.
*
* @return <tt>true</tt> if <tt>this</tt> is the zero element
*/
boolean isZero();
/**
* Checks whether this element is one.
*
* @return <tt>true</tt> if <tt>this</tt> is the one element
*/
boolean isOne();
// /////////////////////////////////////////////////////////////////////
// arithmetic
// /////////////////////////////////////////////////////////////////////
/**
* Compute the sum of this element and the addend.
*
* @param addend the addend
* @return <tt>this + other</tt> (newly created)
*/
GFElement add(GFElement addend)
throws RuntimeException;
/**
* Compute the sum of this element and the addend, overwriting this element.
*
* @param addend the addend
*/
void addToThis(GFElement addend)
throws RuntimeException;
/**
* Compute the difference of this element and <tt>minuend</tt>.
*
* @param minuend the minuend
* @return <tt>this - minuend</tt> (newly created)
*/
GFElement subtract(GFElement minuend)
throws RuntimeException;
/**
* Compute the difference of this element and <tt>minuend</tt>,
* overwriting this element.
*
* @param minuend the minuend
*/
void subtractFromThis(GFElement minuend);
/**
* Compute the product of this element and <tt>factor</tt>.
*
* @param factor the factor
* @return <tt>this * factor</tt> (newly created)
*/
GFElement multiply(GFElement factor)
throws RuntimeException;
/**
* Compute <tt>this * factor</tt> (overwrite <tt>this</tt>).
*
* @param factor the factor
*/
void multiplyThisBy(GFElement factor)
throws RuntimeException;
/**
* Compute the multiplicative inverse of this element.
*
* @return <tt>this<sup>-1</sup></tt> (newly created)
* @throws ArithmeticException if <tt>this</tt> is the zero element.
*/
GFElement invert()
throws ArithmeticException;
// /////////////////////////////////////////////////////////////////////
// conversion
// /////////////////////////////////////////////////////////////////////
/**
* Returns this element as FlexiBigInt. The conversion is <a
* href="http://grouper.ieee.org/groups/1363/">P1363</a>-conform.
*
* @return this element as BigInt
*/
BigInteger toFlexiBigInt();
/**
* Returns this element as byte array. The conversion is <a href =
* "http://grouper.ieee.org/groups/1363/">P1363</a>-conform.
*
* @return this element as byte array
*/
byte[] toByteArray();
/**
* Return a String representation of this element.
*
* @return String representation of this element
*/
String toString();
/**
* Return a String representation of this element. <tt>radix</tt>
* specifies the radix of the String representation.
*
* @param radix specifies the radix of the String representation
* @return String representation of this element with the specified radix
*/
String toString(int radix);
}