blob: b6182f49fbadf168be6fdc9fd59a87f210d1d5c2 [file] [log] [blame]
package org.mariadb.jdbc.plugin.authentication.standard.ed25519.math;
/**
* Common interface for all $(b-1)$-bit encodings of elements of EdDSA finite fields.
*
* @author str4d
*/
public abstract class Encoding {
protected Field f;
public synchronized void setField(Field f) {
if (this.f != null) throw new IllegalStateException("already set");
this.f = f;
}
/**
* Encode a FieldElement in its $(b-1)$-bit encoding.
*
* @param x the FieldElement to encode
* @return the $(b-1)$-bit encoding of this FieldElement.
*/
public abstract byte[] encode(FieldElement x);
/**
* Decode a FieldElement from its $(b-1)$-bit encoding. The highest bit is masked out.
*
* @param in the $(b-1)$-bit encoding of a FieldElement.
* @return the FieldElement represented by 'val'.
*/
public abstract FieldElement decode(byte[] in);
/**
* From the Ed25519 paper:<br>
* $x$ is negative if the $(b-1)$-bit encoding of $x$ is lexicographically larger than the
* $(b-1)$-bit encoding of -x. If $q$ is an odd prime and the encoding is the little-endian
* representation of $\{0, 1,\dots, q-1\}$ then the negative elements of $F_q$ are $\{1, 3,
* 5,\dots, q-2\}$.
*
* @param x the FieldElement to check
* @return true if negative
*/
public abstract boolean isNegative(FieldElement x);
}