| 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); |
| } |