blob: 2b073b1b7ff09ba0b77feb54534955654e8614a6 [file] [log] [blame]
package org.bouncycastle.pqc.crypto.rainbow.util;
/**
* This class is needed for the conversions while encoding and decoding, as well as for
* comparison between arrays of some dimensions
*/
public class RainbowUtil
{
/**
* This function converts an one-dimensional array of bytes into a
* one-dimensional array of int
*
* @param in the array to be converted
* @return out
* the one-dimensional int-array that corresponds the input
*/
public static int[] convertArraytoInt(byte[] in)
{
int[] out = new int[in.length];
for (int i = 0; i < in.length; i++)
{
out[i] = in[i] & GF2Field.MASK;
}
return out;
}
/**
* This function converts an one-dimensional array of bytes into a
* one-dimensional array of type short
*
* @param in the array to be converted
* @return out
* one-dimensional short-array that corresponds the input
*/
public static short[] convertArray(byte[] in)
{
short[] out = new short[in.length];
for (int i = 0; i < in.length; i++)
{
out[i] = (short)(in[i] & GF2Field.MASK);
}
return out;
}
/**
* This function converts a matrix of bytes into a matrix of type short
*
* @param in the matrix to be converted
* @return out
* short-matrix that corresponds the input
*/
public static short[][] convertArray(byte[][] in)
{
short[][] out = new short[in.length][in[0].length];
for (int i = 0; i < in.length; i++)
{
for (int j = 0; j < in[0].length; j++)
{
out[i][j] = (short)(in[i][j] & GF2Field.MASK);
}
}
return out;
}
/**
* This function converts a 3-dimensional array of bytes into a 3-dimensional array of type short
*
* @param in the array to be converted
* @return out
* short-array that corresponds the input
*/
public static short[][][] convertArray(byte[][][] in)
{
short[][][] out = new short[in.length][in[0].length][in[0][0].length];
for (int i = 0; i < in.length; i++)
{
for (int j = 0; j < in[0].length; j++)
{
for (int k = 0; k < in[0][0].length; k++)
{
out[i][j][k] = (short)(in[i][j][k] & GF2Field.MASK);
}
}
}
return out;
}
/**
* This function converts an array of type int into an array of type byte
*
* @param in the array to be converted
* @return out
* the byte-array that corresponds the input
*/
public static byte[] convertIntArray(int[] in)
{
byte[] out = new byte[in.length];
for (int i = 0; i < in.length; i++)
{
out[i] = (byte)in[i];
}
return out;
}
/**
* This function converts an array of type short into an array of type byte
*
* @param in the array to be converted
* @return out
* the byte-array that corresponds the input
*/
public static byte[] convertArray(short[] in)
{
byte[] out = new byte[in.length];
for (int i = 0; i < in.length; i++)
{
out[i] = (byte)in[i];
}
return out;
}
/**
* This function converts a matrix of type short into a matrix of type byte
*
* @param in the matrix to be converted
* @return out
* the byte-matrix that corresponds the input
*/
public static byte[][] convertArray(short[][] in)
{
byte[][] out = new byte[in.length][in[0].length];
for (int i = 0; i < in.length; i++)
{
for (int j = 0; j < in[0].length; j++)
{
out[i][j] = (byte)in[i][j];
}
}
return out;
}
/**
* This function converts a 3-dimensional array of type short into a 3-dimensional array of type byte
*
* @param in the array to be converted
* @return out
* the byte-array that corresponds the input
*/
public static byte[][][] convertArray(short[][][] in)
{
byte[][][] out = new byte[in.length][in[0].length][in[0][0].length];
for (int i = 0; i < in.length; i++)
{
for (int j = 0; j < in[0].length; j++)
{
for (int k = 0; k < in[0][0].length; k++)
{
out[i][j][k] = (byte)in[i][j][k];
}
}
}
return out;
}
/**
* Compare two short arrays. No null checks are performed.
*
* @param left the first short array
* @param right the second short array
* @return the result of the comparison
*/
public static boolean equals(short[] left, short[] right)
{
if (left.length != right.length)
{
return false;
}
boolean result = true;
for (int i = left.length - 1; i >= 0; i--)
{
result &= left[i] == right[i];
}
return result;
}
/**
* Compare two two-dimensional short arrays. No null checks are performed.
*
* @param left the first short array
* @param right the second short array
* @return the result of the comparison
*/
public static boolean equals(short[][] left, short[][] right)
{
if (left.length != right.length)
{
return false;
}
boolean result = true;
for (int i = left.length - 1; i >= 0; i--)
{
result &= equals(left[i], right[i]);
}
return result;
}
/**
* Compare two three-dimensional short arrays. No null checks are performed.
*
* @param left the first short array
* @param right the second short array
* @return the result of the comparison
*/
public static boolean equals(short[][][] left, short[][][] right)
{
if (left.length != right.length)
{
return false;
}
boolean result = true;
for (int i = left.length - 1; i >= 0; i--)
{
result &= equals(left[i], right[i]);
}
return result;
}
}