| package org.mariadb.jdbc.plugin.authentication.standard.ed25519.math; |
| |
| import java.io.Serializable; |
| |
| /** Note: concrete subclasses must implement hashCode() and equals() */ |
| public abstract class FieldElement implements Serializable { |
| private static final long serialVersionUID = 1239527465875676L; |
| |
| protected final Field f; |
| |
| public FieldElement(Field f) { |
| if (null == f) { |
| throw new IllegalArgumentException("field cannot be null"); |
| } |
| this.f = f; |
| } |
| |
| /** |
| * Encode a FieldElement in its $(b-1)$-bit encoding. |
| * |
| * @return the $(b-1)$-bit encoding of this FieldElement. |
| */ |
| public byte[] toByteArray() { |
| return f.getEncoding().encode(this); |
| } |
| |
| public abstract boolean isNonZero(); |
| |
| public boolean isNegative() { |
| return f.getEncoding().isNegative(this); |
| } |
| |
| public abstract FieldElement add(FieldElement val); |
| |
| public FieldElement addOne() { |
| return add(f.ONE); |
| } |
| |
| public abstract FieldElement subtract(FieldElement val); |
| |
| public FieldElement subtractOne() { |
| return subtract(f.ONE); |
| } |
| |
| public abstract FieldElement negate(); |
| |
| public FieldElement divide(FieldElement val) { |
| return multiply(val.invert()); |
| } |
| |
| public abstract FieldElement multiply(FieldElement val); |
| |
| public abstract FieldElement square(); |
| |
| public abstract FieldElement squareAndDouble(); |
| |
| public abstract FieldElement invert(); |
| |
| public abstract FieldElement pow22523(); |
| |
| public abstract FieldElement cmov(FieldElement val, final int b); |
| |
| // Note: concrete subclasses must implement hashCode() and equals() |
| } |