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

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

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 HQCKEMSpi implements KEMSpi
{
    @Override
    public EncapsulatorSpi engineNewEncapsulator(final PublicKey publicKey, AlgorithmParameterSpec build, SecureRandom secureRandom) throws InvalidAlgorithmParameterException, InvalidKeyException {
        if (!(publicKey instanceof BCHQCPublicKey)) {
            throw new InvalidKeyException("unsupported key");
        }
        if (build == null) {
            build = new KTSParameterSpec.Builder("Generic", 256).withNoKdf().build();
        }
        if (!(build instanceof KTSParameterSpec)) {
            throw new InvalidAlgorithmParameterException("HQC can only accept KTSParameterSpec");
        }
        if (secureRandom == null) {
            secureRandom = new SecureRandom();
        }
        return new HQCEncapsulatorSpi((BCHQCPublicKey)publicKey, (KTSParameterSpec)build, secureRandom);
    }
    
    @Override
    public DecapsulatorSpi engineNewDecapsulator(final PrivateKey privateKey, AlgorithmParameterSpec build) throws InvalidAlgorithmParameterException, InvalidKeyException {
        if (!(privateKey instanceof BCHQCPrivateKey)) {
            throw new InvalidKeyException("unsupported key");
        }
        if (build == null) {
            build = new KTSParameterSpec.Builder("Generic", 256).withNoKdf().build();
        }
        if (!(build instanceof KTSParameterSpec)) {
            throw new InvalidAlgorithmParameterException("HQC can only accept KTSParameterSpec");
        }
        return new HQCDecapsulatorSpi((BCHQCPrivateKey)privateKey, (KTSParameterSpec)build);
    }
}
