blob: 80f8828b1829c43d1db4fb2126c7044f0fea1c59 [file] [log] [blame]
package org.bouncycastle.pqc.crypto.gmss.util;
/**
* This class provides several methods that are required by the GMSS classes.
*/
public class GMSSUtil
{
/**
* Converts a 32 bit integer into a byte array beginning at
* <code>offset</code> (little-endian representation)
*
* @param value the integer to convert
*/
public byte[] intToBytesLittleEndian(int value)
{
byte[] bytes = new byte[4];
bytes[0] = (byte)((value) & 0xff);
bytes[1] = (byte)((value >> 8) & 0xff);
bytes[2] = (byte)((value >> 16) & 0xff);
bytes[3] = (byte)((value >> 24) & 0xff);
return bytes;
}
/**
* Converts a byte array beginning at <code>offset</code> into a 32 bit
* integer (little-endian representation)
*
* @param bytes the byte array
* @return The resulting integer
*/
public int bytesToIntLittleEndian(byte[] bytes)
{
return ((bytes[0] & 0xff)) | ((bytes[1] & 0xff) << 8)
| ((bytes[2] & 0xff) << 16) | ((bytes[3] & 0xff)) << 24;
}
/**
* Converts a byte array beginning at <code>offset</code> into a 32 bit
* integer (little-endian representation)
*
* @param bytes the byte array
* @param offset the integer offset into the byte array
* @return The resulting integer
*/
public int bytesToIntLittleEndian(byte[] bytes, int offset)
{
return ((bytes[offset++] & 0xff)) | ((bytes[offset++] & 0xff) << 8)
| ((bytes[offset++] & 0xff) << 16)
| ((bytes[offset] & 0xff)) << 24;
}
/**
* This method concatenates a 2-dimensional byte array into a 1-dimensional
* byte array
*
* @param arraycp a 2-dimensional byte array.
* @return 1-dimensional byte array with concatenated input array
*/
public byte[] concatenateArray(byte[][] arraycp)
{
byte[] dest = new byte[arraycp.length * arraycp[0].length];
int indx = 0;
for (int i = 0; i < arraycp.length; i++)
{
System.arraycopy(arraycp[i], 0, dest, indx, arraycp[i].length);
indx = indx + arraycp[i].length;
}
return dest;
}
/**
* This method prints the values of a 2-dimensional byte array
*
* @param text a String
* @param array a 2-dimensional byte array
*/
public void printArray(String text, byte[][] array)
{
System.out.println(text);
int counter = 0;
for (int i = 0; i < array.length; i++)
{
for (int j = 0; j < array[0].length; j++)
{
System.out.println(counter + "; " + array[i][j]);
counter++;
}
}
}
/**
* This method prints the values of a 1-dimensional byte array
*
* @param text a String
* @param array a 1-dimensional byte array.
*/
public void printArray(String text, byte[] array)
{
System.out.println(text);
int counter = 0;
for (int i = 0; i < array.length; i++)
{
System.out.println(counter + "; " + array[i]);
counter++;
}
}
/**
* This method tests if an integer is a power of 2.
*
* @param testValue an integer
* @return <code>TRUE</code> if <code>testValue</code> is a power of 2,
* <code>FALSE</code> otherwise
*/
public boolean testPowerOfTwo(int testValue)
{
int a = 1;
while (a < testValue)
{
a <<= 1;
}
if (testValue == a)
{
return true;
}
return false;
}
/**
* This method returns the least integer that is greater or equal to the
* logarithm to the base 2 of an integer <code>intValue</code>.
*
* @param intValue an integer
* @return The least integer greater or equal to the logarithm to the base 2
* of <code>intValue</code>
*/
public int getLog(int intValue)
{
int log = 1;
int i = 2;
while (i < intValue)
{
i <<= 1;
log++;
}
return log;
}
}