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

package org.bouncycastle.pqc.crypto.rainbow;

import org.bouncycastle.util.Arrays;

public class RainbowPrivateKeyParameters extends RainbowKeyParameters
{
    final byte[] sk_seed;
    final short[][] s1;
    final short[][] t1;
    final short[][] t3;
    final short[][] t4;
    final short[][][] l1_F1;
    final short[][][] l1_F2;
    final short[][][] l2_F1;
    final short[][][] l2_F2;
    final short[][][] l2_F3;
    final short[][][] l2_F5;
    final short[][][] l2_F6;
    private final byte[] pk_seed;
    private byte[] pk_encoded;
    
    RainbowPrivateKeyParameters(final RainbowParameters rainbowParameters, final byte[] array, final short[][] array2, final short[][] array3, final short[][] array4, final short[][] array5, final short[][][] array6, final short[][][] array7, final short[][][] array8, final short[][][] array9, final short[][][] array10, final short[][][] array11, final short[][][] array12, final byte[] pk_encoded) {
        super(true, rainbowParameters);
        this.pk_seed = null;
        this.pk_encoded = pk_encoded;
        this.sk_seed = array.clone();
        this.s1 = RainbowUtil.cloneArray(array2);
        this.t1 = RainbowUtil.cloneArray(array3);
        this.t3 = RainbowUtil.cloneArray(array4);
        this.t4 = RainbowUtil.cloneArray(array5);
        this.l1_F1 = RainbowUtil.cloneArray(array6);
        this.l1_F2 = RainbowUtil.cloneArray(array7);
        this.l2_F1 = RainbowUtil.cloneArray(array8);
        this.l2_F2 = RainbowUtil.cloneArray(array9);
        this.l2_F3 = RainbowUtil.cloneArray(array10);
        this.l2_F5 = RainbowUtil.cloneArray(array11);
        this.l2_F6 = RainbowUtil.cloneArray(array12);
    }
    
    RainbowPrivateKeyParameters(final RainbowParameters rainbowParameters, final byte[] pk_seed, final byte[] sk_seed, final byte[] pk_encoded) {
        super(true, rainbowParameters);
        final RainbowPrivateKeyParameters generatePrivateKey = new RainbowKeyComputation(rainbowParameters, pk_seed, sk_seed).generatePrivateKey();
        this.pk_seed = pk_seed;
        this.pk_encoded = pk_encoded;
        this.sk_seed = sk_seed;
        this.s1 = generatePrivateKey.s1;
        this.t1 = generatePrivateKey.t1;
        this.t3 = generatePrivateKey.t3;
        this.t4 = generatePrivateKey.t4;
        this.l1_F1 = generatePrivateKey.l1_F1;
        this.l1_F2 = generatePrivateKey.l1_F2;
        this.l2_F1 = generatePrivateKey.l2_F1;
        this.l2_F2 = generatePrivateKey.l2_F2;
        this.l2_F3 = generatePrivateKey.l2_F3;
        this.l2_F5 = generatePrivateKey.l2_F5;
        this.l2_F6 = generatePrivateKey.l2_F6;
    }
    
    public RainbowPrivateKeyParameters(final RainbowParameters rainbowParameters, final byte[] array) {
        super(true, rainbowParameters);
        if (rainbowParameters.getVersion() == Version.COMPRESSED) {
            this.pk_seed = Arrays.copyOfRange(array, 0, rainbowParameters.getLen_pkseed());
            this.sk_seed = Arrays.copyOfRange(array, rainbowParameters.getLen_pkseed(), rainbowParameters.getLen_pkseed() + rainbowParameters.getLen_skseed());
            final RainbowPrivateKeyParameters generatePrivateKey = new RainbowKeyComputation(rainbowParameters, this.pk_seed, this.sk_seed).generatePrivateKey();
            this.pk_encoded = generatePrivateKey.pk_encoded;
            this.s1 = generatePrivateKey.s1;
            this.t1 = generatePrivateKey.t1;
            this.t3 = generatePrivateKey.t3;
            this.t4 = generatePrivateKey.t4;
            this.l1_F1 = generatePrivateKey.l1_F1;
            this.l1_F2 = generatePrivateKey.l1_F2;
            this.l2_F1 = generatePrivateKey.l2_F1;
            this.l2_F2 = generatePrivateKey.l2_F2;
            this.l2_F3 = generatePrivateKey.l2_F3;
            this.l2_F5 = generatePrivateKey.l2_F5;
            this.l2_F6 = generatePrivateKey.l2_F6;
        }
        else {
            final int v1 = rainbowParameters.getV1();
            final int o1 = rainbowParameters.getO1();
            final int o2 = rainbowParameters.getO2();
            this.s1 = new short[o1][o2];
            this.t1 = new short[v1][o1];
            this.t4 = new short[v1][o2];
            this.t3 = new short[o1][o2];
            this.l1_F1 = new short[o1][v1][v1];
            this.l1_F2 = new short[o1][v1][o1];
            this.l2_F1 = new short[o2][v1][v1];
            this.l2_F2 = new short[o2][v1][o1];
            this.l2_F3 = new short[o2][v1][o2];
            this.l2_F5 = new short[o2][o1][o1];
            this.l2_F6 = new short[o2][o1][o2];
            final int n = 0;
            this.pk_seed = null;
            this.sk_seed = Arrays.copyOfRange(array, n, rainbowParameters.getLen_skseed());
            final int n2 = n + this.sk_seed.length;
            final int n3 = n2 + RainbowUtil.loadEncoded(this.s1, array, n2);
            final int n4 = n3 + RainbowUtil.loadEncoded(this.t1, array, n3);
            final int n5 = n4 + RainbowUtil.loadEncoded(this.t4, array, n4);
            final int n6 = n5 + RainbowUtil.loadEncoded(this.t3, array, n5);
            final int n7 = n6 + RainbowUtil.loadEncoded(this.l1_F1, array, n6, true);
            final int n8 = n7 + RainbowUtil.loadEncoded(this.l1_F2, array, n7, false);
            final int n9 = n8 + RainbowUtil.loadEncoded(this.l2_F1, array, n8, true);
            final int n10 = n9 + RainbowUtil.loadEncoded(this.l2_F2, array, n9, false);
            final int n11 = n10 + RainbowUtil.loadEncoded(this.l2_F3, array, n10, false);
            final int n12 = n11 + RainbowUtil.loadEncoded(this.l2_F5, array, n11, true);
            this.pk_encoded = Arrays.copyOfRange(array, n12 + RainbowUtil.loadEncoded(this.l2_F6, array, n12, false), array.length);
        }
    }
    
    byte[] getSk_seed() {
        return Arrays.clone(this.sk_seed);
    }
    
    short[][] getS1() {
        return RainbowUtil.cloneArray(this.s1);
    }
    
    short[][] getT1() {
        return RainbowUtil.cloneArray(this.t1);
    }
    
    short[][] getT4() {
        return RainbowUtil.cloneArray(this.t4);
    }
    
    short[][] getT3() {
        return RainbowUtil.cloneArray(this.t3);
    }
    
    short[][][] getL1_F1() {
        return RainbowUtil.cloneArray(this.l1_F1);
    }
    
    short[][][] getL1_F2() {
        return RainbowUtil.cloneArray(this.l1_F2);
    }
    
    short[][][] getL2_F1() {
        return RainbowUtil.cloneArray(this.l2_F1);
    }
    
    short[][][] getL2_F2() {
        return RainbowUtil.cloneArray(this.l2_F2);
    }
    
    short[][][] getL2_F3() {
        return RainbowUtil.cloneArray(this.l2_F3);
    }
    
    short[][][] getL2_F5() {
        return RainbowUtil.cloneArray(this.l2_F5);
    }
    
    short[][][] getL2_F6() {
        return RainbowUtil.cloneArray(this.l2_F6);
    }
    
    public byte[] getPrivateKey() {
        if (this.getParameters().getVersion() == Version.COMPRESSED) {
            return Arrays.concatenate(this.pk_seed, this.sk_seed);
        }
        return Arrays.concatenate(Arrays.concatenate(Arrays.concatenate(Arrays.concatenate(Arrays.concatenate(Arrays.concatenate(Arrays.concatenate(Arrays.concatenate(Arrays.concatenate(Arrays.concatenate(Arrays.concatenate(this.sk_seed, RainbowUtil.getEncoded(this.s1)), RainbowUtil.getEncoded(this.t1)), RainbowUtil.getEncoded(this.t4)), RainbowUtil.getEncoded(this.t3)), RainbowUtil.getEncoded(this.l1_F1, true)), RainbowUtil.getEncoded(this.l1_F2, false)), RainbowUtil.getEncoded(this.l2_F1, true)), RainbowUtil.getEncoded(this.l2_F2, false)), RainbowUtil.getEncoded(this.l2_F3, false)), RainbowUtil.getEncoded(this.l2_F5, true)), RainbowUtil.getEncoded(this.l2_F6, false));
    }
    
    public byte[] getEncoded() {
        if (this.getParameters().getVersion() == Version.COMPRESSED) {
            return Arrays.concatenate(this.pk_seed, this.sk_seed);
        }
        return Arrays.concatenate(this.getPrivateKey(), this.pk_encoded);
    }
    
    public byte[] getPublicKey() {
        return this.pk_encoded;
    }
}
