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

package org.bouncycastle.pqc.crypto.ntru;

import org.bouncycastle.pqc.math.ntru.parameters.NTRUParameterSet;
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.crypto.KeyGenerationParameters;
import java.security.SecureRandom;
import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator;

public class NTRUKeyPairGenerator implements AsymmetricCipherKeyPairGenerator
{
    private NTRUKeyGenerationParameters params;
    private SecureRandom random;
    
    @Override
    public void init(final KeyGenerationParameters keyGenerationParameters) {
        this.params = (NTRUKeyGenerationParameters)keyGenerationParameters;
        this.random = keyGenerationParameters.getRandom();
    }
    
    @Override
    public AsymmetricCipherKeyPair generateKeyPair() {
        final NTRUParameters parameters = this.params.getParameters();
        final NTRUParameterSet parameterSet = parameters.getParameterSet();
        final byte[] bytes = new byte[parameterSet.sampleFgBytes()];
        this.random.nextBytes(bytes);
        final OWCPAKeyPair keypair = new NTRUOWCPA(parameterSet).keypair(bytes);
        final byte[] publicKey = keypair.publicKey;
        final byte[] bytes2 = new byte[parameterSet.prfKeyBytes()];
        this.random.nextBytes(bytes2);
        return new AsymmetricCipherKeyPair(new NTRUPublicKeyParameters(parameters, publicKey), new NTRUPrivateKeyParameters(parameters, Arrays.concatenate(keypair.privateKey, bytes2)));
    }
}
