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

package org.bouncycastle.pqc.crypto.slhdsa;

import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.crypto.KeyGenerationParameters;
import java.security.SecureRandom;
import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator;

public class SLHDSAKeyPairGenerator implements AsymmetricCipherKeyPairGenerator
{
    private SecureRandom random;
    private SLHDSAParameters parameters;
    
    @Override
    public void init(final KeyGenerationParameters keyGenerationParameters) {
        this.random = keyGenerationParameters.getRandom();
        this.parameters = ((SLHDSAKeyGenerationParameters)keyGenerationParameters).getParameters();
    }
    
    public AsymmetricCipherKeyPair internalGenerateKeyPair(final byte[] array, final byte[] array2, final byte[] array3) {
        return this.implGenerateKeyPair(this.parameters.getEngine(), array, array2, array3);
    }
    
    @Override
    public AsymmetricCipherKeyPair generateKeyPair() {
        final SLHDSAEngine engine = this.parameters.getEngine();
        return this.implGenerateKeyPair(engine, this.sec_rand(engine.N), this.sec_rand(engine.N), this.sec_rand(engine.N));
    }
    
    private AsymmetricCipherKeyPair implGenerateKeyPair(final SLHDSAEngine slhdsaEngine, final byte[] array, final byte[] array2, final byte[] array3) {
        final SK sk = new SK(array, array2);
        slhdsaEngine.init(array3);
        final PK pk = new PK(array3, new HT(slhdsaEngine, sk.seed, array3).htPubKey);
        return new AsymmetricCipherKeyPair(new SLHDSAPublicKeyParameters(this.parameters, pk), new SLHDSAPrivateKeyParameters(this.parameters, sk, pk));
    }
    
    private byte[] sec_rand(final int n) {
        final byte[] bytes = new byte[n];
        this.random.nextBytes(bytes);
        return bytes;
    }
}
