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

package org.bouncycastle.pqc.crypto.crystals.dilithium;

class Rounding
{
    public static int[] power2Round(final int n) {
        final int[] array = { n + 4096 - 1 >> 13, 0 };
        array[1] = n - (array[0] << 13);
        return array;
    }
    
    public static int[] decompose(final int n, final int n2) {
        final int n3 = n + 127 >> 7;
        int n4;
        if (n2 == 261888) {
            n4 = (n3 * 1025 + 2097152 >> 22 & 0xF);
        }
        else {
            if (n2 != 95232) {
                throw new RuntimeException("Wrong Gamma2!");
            }
            final int n5 = n3 * 11275 + 8388608 >> 24;
            n4 = (n5 ^ (43 - n5 >> 31 & n5));
        }
        final int n6 = n - n4 * 2 * n2;
        return new int[] { n6 - (4190208 - n6 >> 31 & 0x7FE001), n4 };
    }
    
    public static int makeHint(final int n, final int n2, final DilithiumEngine dilithiumEngine) {
        final int dilithiumGamma2 = dilithiumEngine.getDilithiumGamma2();
        final int n3 = 8380417;
        if (n <= dilithiumGamma2 || n > n3 - dilithiumGamma2 || (n == n3 - dilithiumGamma2 && n2 == 0)) {
            return 0;
        }
        return 1;
    }
    
    public static int useHint(final int n, final int n2, final int n3) {
        final int[] decompose = decompose(n, n3);
        final int n4 = decompose[0];
        final int n5 = decompose[1];
        if (n2 == 0) {
            return n5;
        }
        if (n3 == 261888) {
            if (n4 > 0) {
                return n5 + 1 & 0xF;
            }
            return n5 - 1 & 0xF;
        }
        else {
            if (n3 != 95232) {
                throw new RuntimeException("Wrong Gamma2!");
            }
            if (n4 > 0) {
                return (n5 == 43) ? 0 : (n5 + 1);
            }
            return (n5 == 0) ? 43 : (n5 - 1);
        }
    }
}
