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

package org.bouncycastle.pqc.jcajce.provider.ntru;

import java.security.PrivateKey;
import java.security.InvalidAlgorithmParameterException;
import org.bouncycastle.jcajce.spec.KTSParameterSpec;
import java.security.InvalidKeyException;
import java.security.SecureRandom;
import java.security.spec.AlgorithmParameterSpec;
import java.security.PublicKey;
import javax.crypto.KEMSpi;

public class NTRUKEMSpi implements KEMSpi
{
    @Override
    public EncapsulatorSpi engineNewEncapsulator(final PublicKey publicKey, AlgorithmParameterSpec build, SecureRandom secureRandom) throws InvalidAlgorithmParameterException, InvalidKeyException {
        if (!(publicKey instanceof BCNTRUPublicKey)) {
            throw new InvalidKeyException("unsupported key");
        }
        if (build == null) {
            build = new KTSParameterSpec.Builder("Generic", 256).withNoKdf().build();
        }
        if (!(build instanceof KTSParameterSpec)) {
            throw new InvalidAlgorithmParameterException("NTRU can only accept KTSParameterSpec");
        }
        if (secureRandom == null) {
            secureRandom = new SecureRandom();
        }
        return new NTRUEncapsulatorSpi((BCNTRUPublicKey)publicKey, (KTSParameterSpec)build, secureRandom);
    }
    
    @Override
    public DecapsulatorSpi engineNewDecapsulator(final PrivateKey privateKey, AlgorithmParameterSpec build) throws InvalidAlgorithmParameterException, InvalidKeyException {
        if (!(privateKey instanceof BCNTRUPrivateKey)) {
            throw new InvalidKeyException("unsupported key");
        }
        if (build == null) {
            build = new KTSParameterSpec.Builder("Generic", 256).withNoKdf().build();
        }
        if (!(build instanceof KTSParameterSpec)) {
            throw new InvalidAlgorithmParameterException("NTRU can only accept KTSParameterSpec");
        }
        return new NTRUDecapsulatorSpi((BCNTRUPrivateKey)privateKey, (KTSParameterSpec)build);
    }
}
