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

package org.bouncycastle.pqc.crypto.falcon;

import org.bouncycastle.crypto.digests.SHAKEDigest;

class FalconCommon
{
    static final int[] l2bound;
    
    static void hash_to_point_vartime(final SHAKEDigest shakeDigest, final short[] array, final int n) {
        int n2 = 0;
        int i = 1 << n;
        final byte[] array2 = new byte[2];
        while (i > 0) {
            shakeDigest.doOutput(array2, 0, 2);
            final int n3 = (array2[0] & 0xFF) << 8 | (array2[1] & 0xFF);
            if (n3 < 61445) {
                array[n2++] = (short)(n3 % 12289);
                --i;
            }
        }
    }
    
    static int is_short(final short[] array, final int n, final short[] array2, final int n2) {
        final int n3 = 1 << n2;
        int n4 = 0;
        int n5 = 0;
        for (int i = 0; i < n3; ++i) {
            final short n6 = array[n + i];
            final int n7 = n4 + n6 * n6;
            final int n8 = n5 | n7;
            final short n9 = array2[i];
            n4 = n7 + n9 * n9;
            n5 = (n8 | n4);
        }
        return (((long)(n4 | -(n5 >>> 31)) & 0xFFFFFFFFL) <= FalconCommon.l2bound[n2]) ? 1 : 0;
    }
    
    static int is_short_half(int n, final short[] array, final int n2) {
        final int n3 = 1 << n2;
        int n4 = -(n >>> 31);
        for (final short n5 : array) {
            n += n5 * n5;
            n4 |= n;
        }
        n |= -(n4 >>> 31);
        return (((long)n & 0xFFFFFFFFL) <= FalconCommon.l2bound[n2]) ? 1 : 0;
    }
    
    static {
        l2bound = new int[] { 0, 101498, 208714, 428865, 892039, 1852696, 3842630, 7959734, 16468416, 34034726, 70265242 };
    }
}
