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

package org.bouncycastle.pqc.crypto.bike;

import org.bouncycastle.util.Pack;
import org.bouncycastle.crypto.Xof;

class BIKEUtils
{
    static int getHammingWeight(final byte[] array) {
        int n = 0;
        for (int i = 0; i < array.length; ++i) {
            n += array[i];
        }
        return n;
    }
    
    static void fromBitArrayToByteArray(final byte[] array, final byte[] array2, final int n, final int n2) {
        for (int n3 = 0, n4 = 0; n3 < (long)n2; n3 += 8, ++n4) {
            if (n3 + 8 >= n2) {
                int n5 = array2[n + n3];
                for (int i = n2 - n3 - 1; i >= 1; --i) {
                    n5 |= array2[n + n3 + i] << i;
                }
                array[n4] = (byte)n5;
            }
            else {
                int n6 = array2[n + n3];
                for (int j = 7; j >= 1; --j) {
                    n6 |= array2[n + n3 + j] << j;
                }
                array[n4] = (byte)n6;
            }
        }
    }
    
    static void generateRandomByteArray(final byte[] array, final int n, final int n2, final Xof xof) {
        final byte[] array2 = new byte[4];
        for (int i = n2 - 1; i >= 0; --i) {
            xof.doOutput(array2, 0, 4);
            int n3 = (int)(((long)Pack.littleEndianToInt(array2, 0) & 0xFFFFFFFFL) * (n - i) >> 32) + i;
            if (CHECK_BIT(array, n3) != 0) {
                n3 = i;
            }
            SET_BIT(array, n3);
        }
    }
    
    protected static int CHECK_BIT(final byte[] array, final int n) {
        return array[n / 8] >>> n % 8 & 0x1;
    }
    
    protected static void SET_BIT(final byte[] array, final int n) {
        final int n2 = n / 8;
        final int n3 = n % 8;
        final int n4 = n2;
        array[n4] = (byte)((long)array[n4] | 1L << (int)n3);
    }
}
