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

package org.bouncycastle.pqc.crypto.sphincsplus;

import org.bouncycastle.util.Arrays;

public class SPHINCSPlusPrivateKeyParameters extends SPHINCSPlusKeyParameters
{
    final SK sk;
    final PK pk;
    
    public SPHINCSPlusPrivateKeyParameters(final SPHINCSPlusParameters sphincsPlusParameters, final byte[] array) {
        super(true, sphincsPlusParameters);
        final int n = sphincsPlusParameters.getN();
        if (array.length != 4 * n) {
            throw new IllegalArgumentException("private key encoding does not match parameters");
        }
        this.sk = new SK(Arrays.copyOfRange(array, 0, n), Arrays.copyOfRange(array, n, 2 * n));
        this.pk = new PK(Arrays.copyOfRange(array, 2 * n, 3 * n), Arrays.copyOfRange(array, 3 * n, 4 * n));
    }
    
    public SPHINCSPlusPrivateKeyParameters(final SPHINCSPlusParameters sphincsPlusParameters, final byte[] array, final byte[] array2, final byte[] array3, final byte[] array4) {
        super(true, sphincsPlusParameters);
        this.sk = new SK(array, array2);
        this.pk = new PK(array3, array4);
    }
    
    SPHINCSPlusPrivateKeyParameters(final SPHINCSPlusParameters sphincsPlusParameters, final SK sk, final PK pk) {
        super(true, sphincsPlusParameters);
        this.sk = sk;
        this.pk = pk;
    }
    
    public byte[] getSeed() {
        return Arrays.clone(this.sk.seed);
    }
    
    public byte[] getPrf() {
        return Arrays.clone(this.sk.prf);
    }
    
    public byte[] getPublicSeed() {
        return Arrays.clone(this.pk.seed);
    }
    
    public byte[] getRoot() {
        return Arrays.clone(this.pk.root);
    }
    
    public byte[] getPublicKey() {
        return Arrays.concatenate(this.pk.seed, this.pk.root);
    }
    
    public byte[] getEncoded() {
        return Arrays.concatenate(new byte[][] { this.sk.seed, this.sk.prf, this.pk.seed, this.pk.root });
    }
    
    public byte[] getEncodedPublicKey() {
        return Arrays.concatenate(this.pk.seed, this.pk.root);
    }
}
