// 
// Decompiled by Procyon v0.6.0
// 

package org.bouncycastle.pqc.crypto.hqc;

import org.bouncycastle.util.Pack;

class Utils
{
    static void fromLongArrayToByteArray(final byte[] array, final long[] array2) {
        final int n = array.length / 8;
        for (int i = 0; i != n; ++i) {
            Pack.longToLittleEndian(array2[i], array, i * 8);
        }
        if (array.length % 8 != 0) {
            for (int j = n * 8, n2 = 0; j < array.length; array[j++] = (byte)(array2[n] >>> n2++ * 8)) {}
        }
    }
    
    static void fromLongArrayToByteArray(final byte[] array, int i, final int n, final long[] array2) {
        final int n2 = n >> 3;
        for (int j = 0; j != n2; ++j) {
            Pack.longToLittleEndian(array2[j], array, i);
            i += 8;
        }
        if ((n & 0x7) != 0x0) {
            for (int n3 = 0; i < array.length; array[i++] = (byte)(array2[n2] >>> n3++ * 8)) {}
        }
    }
    
    static long bitMask(final long n, final long n2) {
        return (1L << (int)(n % n2)) - 1L;
    }
    
    static void fromByteArrayToLongArray(final long[] array, final byte[] array2, int n, final int n2) {
        byte[] array3 = array2;
        if (n2 % 8 != 0) {
            array3 = new byte[(n2 + 7) / 8 * 8];
            System.arraycopy(array2, n, array3, 0, n2);
            n = 0;
        }
        for (int min = Math.min(array.length, n2 + 7 >>> 3), i = 0; i < min; ++i) {
            array[i] = Pack.littleEndianToLong(array3, n);
            n += 8;
        }
    }
    
    static void fromByte32ArrayToLongArray(final long[] array, final int[] array2) {
        for (int i = 0; i != array2.length; i += 2) {
            array[i / 2] = ((long)array2[i] & 0xFFFFFFFFL);
            final int n = i / 2;
            array[n] |= (long)array2[i + 1] << 32;
        }
    }
    
    static void fromLongArrayToByte32Array(final int[] array, final long[] array2) {
        for (int i = 0; i != array2.length; ++i) {
            array[2 * i] = (int)array2[i];
            array[2 * i + 1] = (int)(array2[i] >> 32);
        }
    }
    
    static void copyBytes(final int[] array, final int n, final int[] array2, final int n2, final int n3) {
        System.arraycopy(array, n, array2, n2, n3 / 2);
    }
    
    static int getByteSizeFromBitSize(final int n) {
        return (n + 7) / 8;
    }
    
    static int getByte64SizeFromBitSize(final int n) {
        return (n + 63) / 64;
    }
    
    static int toUnsigned8bits(final int n) {
        return n & 0xFF;
    }
    
    static int toUnsigned16Bits(final int n) {
        return n & 0xFFFF;
    }
}
