package org.bouncycastle.pqc.jcajce.provider.mceliece;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import java.security.spec.AlgorithmParameterSpec;
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.crypto.CryptoServicesRegistrar;
import org.bouncycastle.pqc.crypto.mceliece.McElieceCCA2KeyGenerationParameters;
import org.bouncycastle.pqc.crypto.mceliece.McElieceCCA2KeyPairGenerator;
import org.bouncycastle.pqc.crypto.mceliece.McElieceCCA2Parameters;
import org.bouncycastle.pqc.crypto.mceliece.McElieceCCA2PrivateKeyParameters;
import org.bouncycastle.pqc.crypto.mceliece.McElieceCCA2PublicKeyParameters;
import org.bouncycastle.pqc.jcajce.spec.McElieceCCA2KeyGenParameterSpec;
public class McElieceCCA2KeyPairGeneratorSpi
extends KeyPairGenerator
{
private McElieceCCA2KeyPairGenerator kpg;
public McElieceCCA2KeyPairGeneratorSpi()
{
super("McEliece-CCA2");
}
public void initialize(AlgorithmParameterSpec params, SecureRandom random)
throws InvalidAlgorithmParameterException
{
kpg = new McElieceCCA2KeyPairGenerator();
McElieceCCA2KeyGenParameterSpec ecc = (McElieceCCA2KeyGenParameterSpec)params;
McElieceCCA2KeyGenerationParameters mccca2KGParams = new McElieceCCA2KeyGenerationParameters(
random, new McElieceCCA2Parameters(ecc.getM(), ecc.getT(), ecc.getDigest()));
kpg.init(mccca2KGParams);
}
public void initialize(AlgorithmParameterSpec params)
throws InvalidAlgorithmParameterException
{
kpg = new McElieceCCA2KeyPairGenerator();
McElieceCCA2KeyGenParameterSpec ecc = (McElieceCCA2KeyGenParameterSpec)params;
McElieceCCA2KeyGenerationParameters mccca2KGParams = new McElieceCCA2KeyGenerationParameters(
CryptoServicesRegistrar.getSecureRandom(), new McElieceCCA2Parameters(ecc.getM(), ecc.getT(), ecc.getDigest()));
kpg.init(mccca2KGParams);
}
public void initialize(int keySize, SecureRandom random)
{
kpg = new McElieceCCA2KeyPairGenerator();
McElieceCCA2KeyGenerationParameters mccca2KGParams = new McElieceCCA2KeyGenerationParameters(random, new McElieceCCA2Parameters());
kpg.init(mccca2KGParams);
}
public KeyPair generateKeyPair()
{
AsymmetricCipherKeyPair generateKeyPair = kpg.generateKeyPair();
McElieceCCA2PrivateKeyParameters sk = (McElieceCCA2PrivateKeyParameters)generateKeyPair.getPrivate();
McElieceCCA2PublicKeyParameters pk = (McElieceCCA2PublicKeyParameters)generateKeyPair.getPublic();
return new KeyPair(new BCMcElieceCCA2PublicKey(pk), new BCMcElieceCCA2PrivateKey(sk));
}
}