Class ArrayEncoder


  • public class ArrayEncoder
    extends java.lang.Object
    Converts a coefficient array to a compact byte array and vice versa.
    • Constructor Summary

      Constructors 
      Constructor Description
      ArrayEncoder()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static int[] decodeMod3Sves​(byte[] data, int N)
      Decodes a byte array encoded with encodeMod3Sves(int[]) back to an int array with N coefficients between -1 and 1.
      Ignores any excess bytes.
      See P1363.1 section 9.2.2.
      static int[] decodeMod3Tight​(byte[] b, int N)
      Converts a byte array produced by encodeMod3Tight(int[]) back to an int array.
      static int[] decodeMod3Tight​(java.io.InputStream is, int N)
      Converts data produced by encodeMod3Tight(int[]) back to an int array.
      static int[] decodeModQ​(byte[] data, int N, int q)
      Decodes a byte array encoded with encodeModQ(int[], int) back to an int array.
      N is the number of coefficients.
      static int[] decodeModQ​(java.io.InputStream is, int N, int q)
      Decodes data encoded with encodeModQ(int[], int) back to an int array.
      N is the number of coefficients.
      static byte[] encodeMod3Sves​(int[] arr)
      Encodes an int array whose elements are between -1 and 1, to a byte array.
      static byte[] encodeMod3Tight​(int[] intArray)
      Encodes an int array whose elements are between -1 and 1, to a byte array.
      static byte[] encodeModQ​(int[] a, int q)
      Encodes an int array whose elements are between 0 and q, to a byte array leaving no gaps between bits.
      q must be a power of 2.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • ArrayEncoder

        public ArrayEncoder()
    • Method Detail

      • encodeModQ

        public static byte[] encodeModQ​(int[] a,
                                        int q)
        Encodes an int array whose elements are between 0 and q, to a byte array leaving no gaps between bits.
        q must be a power of 2.
        Parameters:
        a - the input array
        q - the modulus
        Returns:
        the encoded array
      • decodeModQ

        public static int[] decodeModQ​(byte[] data,
                                       int N,
                                       int q)
        Decodes a byte array encoded with encodeModQ(int[], int) back to an int array.
        N is the number of coefficients. q must be a power of 2.
        Ignores any excess bytes.
        Parameters:
        data - an encoded ternary polynomial
        N - number of coefficients
        q -
        Returns:
        an array containing N coefficients between 0 and q-1
      • decodeModQ

        public static int[] decodeModQ​(java.io.InputStream is,
                                       int N,
                                       int q)
                                throws java.io.IOException
        Decodes data encoded with encodeModQ(int[], int) back to an int array.
        N is the number of coefficients. q must be a power of 2.
        Ignores any excess bytes.
        Parameters:
        is - an encoded ternary polynomial
        N - number of coefficients
        q -
        Returns:
        the decoded polynomial
        Throws:
        java.io.IOException
      • decodeMod3Sves

        public static int[] decodeMod3Sves​(byte[] data,
                                           int N)
        Decodes a byte array encoded with encodeMod3Sves(int[]) back to an int array with N coefficients between -1 and 1.
        Ignores any excess bytes.
        See P1363.1 section 9.2.2.
        Parameters:
        data - an encoded ternary polynomial
        N - number of coefficients
        Returns:
        the decoded coefficients
      • encodeMod3Sves

        public static byte[] encodeMod3Sves​(int[] arr)
        Encodes an int array whose elements are between -1 and 1, to a byte array. coeffs[2*i] and coeffs[2*i+1] must not both equal -1 for any integer i, so this method is only safe to use with arrays produced by decodeMod3Sves(byte[], int).
        See P1363.1 section 9.2.3.
        Parameters:
        arr -
        Returns:
        the encoded array
      • encodeMod3Tight

        public static byte[] encodeMod3Tight​(int[] intArray)
        Encodes an int array whose elements are between -1 and 1, to a byte array.
        Returns:
        the encoded array
      • decodeMod3Tight

        public static int[] decodeMod3Tight​(byte[] b,
                                            int N)
        Converts a byte array produced by encodeMod3Tight(int[]) back to an int array.
        Parameters:
        b - a byte array
        N - number of coefficients
        Returns:
        the decoded array
      • decodeMod3Tight

        public static int[] decodeMod3Tight​(java.io.InputStream is,
                                            int N)
                                     throws java.io.IOException
        Converts data produced by encodeMod3Tight(int[]) back to an int array.
        Parameters:
        is - an input stream containing the data to decode
        N - number of coefficients
        Returns:
        the decoded array
        Throws:
        java.io.IOException