package org.bouncycastle.crypto.modes;
import org.bouncycastle.util.Arrays;
Some methods for GOST 3412 cipher algorithm
/**
* Some methods for GOST 3412 cipher algorithm
*/
class GOST3413CipherUtil
{
copy first size elements from from
Params: - from – source array
- size – size of new array
Returns:
/**
* copy first <b>size</b> elements from <b>from</b>
*
* @param from source array
* @param size size of new array
* @return
*/
public static byte[] MSB(byte[] from, int size)
{
return Arrays.copyOf(from, size);
}
copy last size elements from from
Params: - from – source array
- size – size of new array
Returns:
/**
* copy last <b>size</b> elements from <b>from</b>
*
* @param from source array
* @param size size of new array
* @return
*/
public static byte[] LSB(byte[] from, int size)
{
byte[] result = new byte[size];
System.arraycopy(from, from.length - size, result, 0, size);
return result;
}
componentwise addition modulo 2 (XOR)
Params: - in – clear text
- gamma – gamma parameter
Returns:
/**
* componentwise addition modulo 2 (XOR)
*
* @param in clear text
* @param gamma gamma parameter
* @return
*/
public static byte[] sum(byte[] in, byte[] gamma)
{
byte[] out = new byte[in.length];
for (int i = 0; i < in.length; i++)
{
out[i] = (byte)(in[i] ^ gamma[i]);
}
return out;
}
copy from input array size bytes with offset
Params: - input – input byte array
- size – count bytes to copy
- offset – inputs offset
Returns:
/**
* copy from <b>input</b> array <b>size</b> bytes with <b>offset</b>
*
* @param input input byte array
* @param size count bytes to copy
* @param offset <b>inputs</b> offset
* @return
*/
public static byte[] copyFromInput(byte[] input, int size, int offset)
{
if (input.length < (size + offset))
{
size = input.length - offset;
}
byte[] newIn = new byte[size];
System.arraycopy(input, offset, newIn, 0, size);
return newIn;
}
}