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

package org.bouncycastle.pqc.math.ntru;

import org.bouncycastle.pqc.math.ntru.parameters.NTRUHRSSParameterSet;

public class HRSS1373Polynomial extends HRSSPolynomial
{
    private static final int L = 1376;
    private static final int M = 344;
    private static final int K = 86;
    
    public HRSS1373Polynomial(final NTRUHRSSParameterSet set) {
        super(set);
    }
    
    @Override
    public byte[] sqToBytes(final int n) {
        final byte[] array = new byte[n];
        final short[] array2 = new short[4];
        int i;
        for (i = 0; i < this.params.packDegree() / 4; ++i) {
            for (int j = 0; j < 4; ++j) {
                array2[j] = (short)Polynomial.modQ(this.coeffs[4 * i + j] & 0xFFFF, this.params.q());
            }
            array[7 * i + 0] = (byte)(array2[0] & 0xFF);
            array[7 * i + 1] = (byte)(array2[0] >>> 8 | (array2[1] & 0x3) << 6);
            array[7 * i + 2] = (byte)(array2[1] >>> 2 & 0xFF);
            array[7 * i + 3] = (byte)(array2[1] >>> 10 | (array2[2] & 0xF) << 4);
            array[7 * i + 4] = (byte)(array2[2] >>> 4 & 0xFF);
            array[7 * i + 5] = (byte)(array2[2] >>> 12 | (array2[3] & 0x3F) << 2);
            array[7 * i + 6] = (byte)(array2[3] >>> 6);
        }
        if (this.params.packDegree() % 4 == 2) {
            array2[0] = (short)Polynomial.modQ(this.coeffs[this.params.packDegree() - 2] & 0xFFFF, this.params.q());
            array2[1] = (short)Polynomial.modQ(this.coeffs[this.params.packDegree() - 1] & 0xFFFF, this.params.q());
            array[7 * i + 0] = (byte)(array2[0] & 0xFF);
            array[7 * i + 1] = (byte)(array2[0] >>> 8 | (array2[1] & 0x3) << 6);
            array[7 * i + 2] = (byte)(array2[1] >>> 2 & 0xFF);
            array[7 * i + 3] = (byte)(array2[1] >>> 10);
        }
        return array;
    }
    
    @Override
    public void sqFromBytes(final byte[] array) {
        int i;
        for (i = 0; i < this.params.packDegree() / 4; ++i) {
            this.coeffs[4 * i + 0] = (short)((array[7 * i + 0] & 0xFF) | ((short)(array[7 * i + 1] & 0xFF) & 0x3F) << 8);
            this.coeffs[4 * i + 1] = (short)((array[7 * i + 1] & 0xFF) >>> 6 | (short)(array[7 * i + 2] & 0xFF) << 2 | (short)(array[7 * i + 3] & 0xF) << 10);
            this.coeffs[4 * i + 2] = (short)((array[7 * i + 3] & 0xFF) >>> 4 | ((short)(array[7 * i + 4] & 0xFF) & 0xFF) << 4 | (short)(array[7 * i + 5] & 0x3) << 12);
            this.coeffs[4 * i + 3] = (short)((array[7 * i + 5] & 0xFF) >>> 2 | (short)(array[7 * i + 6] & 0xFF) << 6);
        }
        if (this.params.packDegree() % 4 == 2) {
            this.coeffs[4 * i + 0] = (short)(array[7 * i + 0] | (array[7 * i + 1] & 0x3F) << 8);
            this.coeffs[4 * i + 1] = (short)(array[7 * i + 1] >>> 6 | array[7 * i + 2] << 2 | (array[7 * i + 3] & 0xF) << 10);
        }
        this.coeffs[this.params.n() - 1] = 0;
    }
}
