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

package org.bouncycastle.pqc.math.ntru;

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

public class HPS4096Polynomial extends HPSPolynomial
{
    public HPS4096Polynomial(final NTRUHPSParameterSet set) {
        super(set);
    }
    
    @Override
    public byte[] sqToBytes(final int n) {
        final byte[] array = new byte[n];
        final int q = this.params.q();
        for (int i = 0; i < this.params.packDegree() / 2; ++i) {
            array[3 * i + 0] = (byte)(Polynomial.modQ(this.coeffs[2 * i + 0] & 0xFFFF, q) & 0xFF);
            array[3 * i + 1] = (byte)(Polynomial.modQ(this.coeffs[2 * i + 0] & 0xFFFF, q) >>> 8 | (Polynomial.modQ(this.coeffs[2 * i + 1] & 0xFFFF, q) & 0xF) << 4);
            array[3 * i + 2] = (byte)(Polynomial.modQ(this.coeffs[2 * i + 1] & 0xFFFF, q) >>> 4);
        }
        return array;
    }
    
    @Override
    public void sqFromBytes(final byte[] array) {
        for (int i = 0; i < this.params.packDegree() / 2; ++i) {
            this.coeffs[2 * i + 0] = (short)((array[3 * i + 0] & 0xFF) >>> 0 | ((short)(array[3 * i + 1] & 0xFF) & 0xF) << 8);
            this.coeffs[2 * i + 1] = (short)((array[3 * i + 1] & 0xFF) >>> 4 | ((short)(array[3 * i + 2] & 0xFF) & 0xFF) << 4);
        }
        this.coeffs[this.params.n() - 1] = 0;
    }
}
