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

package org.bouncycastle.pqc.crypto.mayo;

import org.bouncycastle.crypto.modes.CTRModeCipher;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.params.ParametersWithIV;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.crypto.BlockCipher;
import org.bouncycastle.crypto.modes.SICBlockCipher;
import org.bouncycastle.crypto.engines.AESEngine;
import org.bouncycastle.util.Pack;

class Utils
{
    public static void unpackMVecs(final byte[] array, int n, final long[] array2, int n2, final int n3, final int n4) {
        final int n5 = n4 + 15 >> 4;
        final int n6 = n4 >> 1;
        final int n7 = 8 - (n5 << 3) + n6;
        int i;
        int j;
        for (i = n3 - 1, n2 += i * n5, n += i * n6; i >= 0; --i, n2 -= n5, n -= n6) {
            for (j = 0; j < n5 - 1; ++j) {
                array2[n2 + j] = Pack.littleEndianToLong(array, n + (j << 3));
            }
            array2[n2 + j] = Pack.littleEndianToLong(array, n + (j << 3), n7);
        }
    }
    
    public static void packMVecs(final long[] array, final byte[] array2, int n, final int n2, final int n3) {
        final int n4 = n3 + 15 >> 4;
        final int n5 = n3 >> 1;
        final int n6 = 8 - (n4 << 3) + n5;
        for (int i = 0, n7 = 0; i < n2; ++i, n += n5, n7 += n4) {
            int j;
            for (j = 0; j < n4 - 1; ++j) {
                Pack.longToLittleEndian(array[n7 + j], array2, n + (j << 3));
            }
            Pack.longToLittleEndian(array[n7 + j], array2, n + (j << 3), n6);
        }
    }
    
    public static void expandP1P2(final MayoParameters mayoParameters, final long[] array, final byte[] array2) {
        final int n = mayoParameters.getP1Bytes() + mayoParameters.getP2Bytes();
        final byte[] array3 = new byte[n];
        final byte[] array4 = new byte[16];
        final CTRModeCipher instance = SICBlockCipher.newInstance(AESEngine.newInstance());
        instance.init(true, new ParametersWithIV(new KeyParameter(Arrays.copyOf(array2, mayoParameters.getPkSeedBytes())), array4));
        final int blockSize = instance.getBlockSize();
        final byte[] array5 = new byte[blockSize];
        final byte[] array6 = new byte[blockSize];
        int n2;
        for (n2 = 0; n2 + blockSize <= n; n2 += blockSize) {
            instance.processBlock(array5, 0, array6, 0);
            System.arraycopy(array6, 0, array3, n2, blockSize);
        }
        if (n2 < n) {
            instance.processBlock(array5, 0, array6, 0);
            System.arraycopy(array6, 0, array3, n2, n - n2);
        }
        unpackMVecs(array3, 0, array, 0, (mayoParameters.getP1Limbs() + mayoParameters.getP2Limbs()) / mayoParameters.getMVecLimbs(), mayoParameters.getM());
    }
}
