java.lang.Object
net.i2p.crypto.eddsa.math.Encoding
All Implemented Interfaces:
Serializable
Direct Known Subclasses:
BigIntegerLittleEndianEncoding, Ed25519LittleEndianEncoding

public abstract class Encodingextends Object implements Serializable
Common interface for all $(b-1)$-bit encodings of elements of EdDSA finite fields.
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected Field
    The field.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Constructor for field encoding implementations.
  • Method Summary

    Modifier and Type
    Method
    Description
    abstract FieldElement
    decode(byte[] in)
    Decode a FieldElement from its $(b-1)$-bit encoding.
    abstract byte[]
    Encode a FieldElement in its $(b-1)$-bit encoding.
    abstract boolean
    From the Ed25519 paper:
    $x$ is negative if the $(b-1)$-bit encoding of $x$ is lexicographically larger than the $(b-1)$-bit encoding of -x.
    void
    The field for this encoding.

    Methods inherited from class Object

    clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • f

      protected Field f
      The field.
  • Constructor Details

    • Encoding

      public Encoding()
      Constructor for field encoding implementations.
  • Method Details

    • setField

      public void setField(Field f)
      The field for this encoding.
      Parameters:
      f - The field to set.
    • encode

      public abstract byte[] encode(FieldElement x)
      Encode a FieldElement in its $(b-1)$-bit encoding.
      Parameters:
      x - the FieldElement to encode
      Returns:
      the $(b-1)$-bit encoding of this FieldElement.
    • decode

      public abstract FieldElement decode(byte[] in)
      Decode a FieldElement from its $(b-1)$-bit encoding. The highest bit is masked out.
      Parameters:
      in - the $(b-1)$-bit encoding of a FieldElement.
      Returns:
      the FieldElement represented by 'val'.
    • isNegative

      public abstract boolean isNegative(FieldElement x)
      From the Ed25519 paper:
      $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\}$.
      Parameters:
      x - the FieldElement to check
      Returns:
      true if negative