org.bouncycastle.pqc.math.linearalgebra.GFElement Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcprov-ext-debug-jdk15on Show documentation
Show all versions of bcprov-ext-debug-jdk15on Show documentation
The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.5 to JDK 1.8. Note: this package includes the NTRU encryption algorithms.
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 true if this is the zero element
*/
boolean isZero();
/**
* Checks whether this element is one.
*
* @return true if this is the one element
*/
boolean isOne();
// /////////////////////////////////////////////////////////////////////
// arithmetic
// /////////////////////////////////////////////////////////////////////
/**
* Compute the sum of this element and the addend.
*
* @param addend the addend
* @return this + other (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 minuend.
*
* @param minuend the minuend
* @return this - minuend (newly created)
*/
GFElement subtract(GFElement minuend)
throws RuntimeException;
/**
* Compute the difference of this element and minuend,
* overwriting this element.
*
* @param minuend the minuend
*/
void subtractFromThis(GFElement minuend);
/**
* Compute the product of this element and factor.
*
* @param factor the factor
* @return this * factor (newly created)
*/
GFElement multiply(GFElement factor)
throws RuntimeException;
/**
* Compute this * factor (overwrite this).
*
* @param factor the factor
*/
void multiplyThisBy(GFElement factor)
throws RuntimeException;
/**
* Compute the multiplicative inverse of this element.
*
* @return this-1 (newly created)
* @throws ArithmeticException if this is the zero element.
*/
GFElement invert()
throws ArithmeticException;
// /////////////////////////////////////////////////////////////////////
// conversion
// /////////////////////////////////////////////////////////////////////
/**
* Returns this element as FlexiBigInt. The conversion is P1363-conform.
*
* @return this element as BigInt
*/
BigInteger toFlexiBigInt();
/**
* Returns this element as byte array. The conversion is P1363-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. radix
* 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);
}