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

package org.bouncycastle.jcajce.provider.asymmetric.compositesignatures;

import org.bouncycastle.internal.asn1.iana.IANAObjectIdentifiers;
import org.bouncycastle.jcajce.CompositePrivateKey;
import org.bouncycastle.jcajce.CompositePublicKey;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.KeyPair;
import java.security.InvalidAlgorithmParameterException;
import java.security.spec.AlgorithmParameterSpec;
import java.security.SecureRandom;
import java.security.KeyPairGenerator;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;

public class KeyPairGeneratorSpi extends java.security.KeyPairGeneratorSpi
{
    private final ASN1ObjectIdentifier algorithm;
    private final KeyPairGenerator[] generators;
    private SecureRandom secureRandom;
    private boolean parametersInitialized;
    
    KeyPairGeneratorSpi(final ASN1ObjectIdentifier algorithm) {
        this.parametersInitialized = false;
        this.algorithm = algorithm;
        final String[] pairing = CompositeIndex.getPairing(algorithm);
        final AlgorithmParameterSpec[] keyPairSpecs = CompositeIndex.getKeyPairSpecs(algorithm);
        this.generators = new KeyPairGenerator[pairing.length];
        for (int i = 0; i != pairing.length; ++i) {
            try {
                this.generators[i] = KeyPairGenerator.getInstance(CompositeIndex.getBaseName(pairing[i]), "BC");
                final AlgorithmParameterSpec params = keyPairSpecs[i];
                if (params != null) {
                    this.generators[i].initialize(params);
                }
            }
            catch (final Exception ex) {
                throw new IllegalStateException("unable to create base generator: " + ex.getMessage());
            }
        }
    }
    
    @Override
    public void initialize(final int n, final SecureRandom secureRandom) {
        throw new IllegalArgumentException("use AlgorithmParameterSpec");
    }
    
    @Override
    public void initialize(final AlgorithmParameterSpec algorithmParameterSpec, final SecureRandom random) throws InvalidAlgorithmParameterException {
        if (algorithmParameterSpec != null) {
            throw new IllegalArgumentException("Use initialize only for custom SecureRandom. AlgorithmParameterSpec must be null because it is determined by algorithm name.");
        }
        final AlgorithmParameterSpec[] keyPairSpecs = CompositeIndex.getKeyPairSpecs(this.algorithm);
        for (int i = 0; i != keyPairSpecs.length; ++i) {
            final AlgorithmParameterSpec params = keyPairSpecs[i];
            if (params != null) {
                this.generators[i].initialize(params, random);
            }
        }
    }
    
    @Override
    public KeyPair generateKeyPair() {
        return this.getCompositeKeyPair();
    }
    
    private KeyPair getCompositeKeyPair() {
        final PublicKey[] array = new PublicKey[this.generators.length];
        final PrivateKey[] array2 = new PrivateKey[this.generators.length];
        for (int i = 0; i < this.generators.length; ++i) {
            final KeyPair generateKeyPair = this.generators[i].generateKeyPair();
            array[i] = generateKeyPair.getPublic();
            array2[i] = generateKeyPair.getPrivate();
        }
        return new KeyPair(new CompositePublicKey(this.algorithm, array), new CompositePrivateKey(this.algorithm, array2));
    }
    
    public static final class MLDSA44_ECDSA_P256_SHA256 extends KeyPairGeneratorSpi
    {
        public MLDSA44_ECDSA_P256_SHA256() {
            super(IANAObjectIdentifiers.id_MLDSA44_ECDSA_P256_SHA256);
        }
    }
    
    public static final class MLDSA44_Ed25519_SHA512 extends KeyPairGeneratorSpi
    {
        public MLDSA44_Ed25519_SHA512() {
            super(IANAObjectIdentifiers.id_MLDSA44_Ed25519_SHA512);
        }
    }
    
    public static final class MLDSA44_RSA2048_PKCS15_SHA256 extends KeyPairGeneratorSpi
    {
        public MLDSA44_RSA2048_PKCS15_SHA256() {
            super(IANAObjectIdentifiers.id_MLDSA44_RSA2048_PKCS15_SHA256);
        }
    }
    
    public static final class MLDSA44_RSA2048_PSS_SHA256 extends KeyPairGeneratorSpi
    {
        public MLDSA44_RSA2048_PSS_SHA256() {
            super(IANAObjectIdentifiers.id_MLDSA44_RSA2048_PSS_SHA256);
        }
    }
    
    public static final class MLDSA65_ECDSA_P256_SHA512 extends KeyPairGeneratorSpi
    {
        public MLDSA65_ECDSA_P256_SHA512() {
            super(IANAObjectIdentifiers.id_MLDSA65_ECDSA_P256_SHA512);
        }
    }
    
    public static final class MLDSA65_ECDSA_P384_SHA512 extends KeyPairGeneratorSpi
    {
        public MLDSA65_ECDSA_P384_SHA512() {
            super(IANAObjectIdentifiers.id_MLDSA65_ECDSA_P384_SHA512);
        }
    }
    
    public static final class MLDSA65_ECDSA_brainpoolP256r1_SHA512 extends KeyPairGeneratorSpi
    {
        public MLDSA65_ECDSA_brainpoolP256r1_SHA512() {
            super(IANAObjectIdentifiers.id_MLDSA65_ECDSA_brainpoolP256r1_SHA512);
        }
    }
    
    public static final class MLDSA65_Ed25519_SHA512 extends KeyPairGeneratorSpi
    {
        public MLDSA65_Ed25519_SHA512() {
            super(IANAObjectIdentifiers.id_MLDSA65_Ed25519_SHA512);
        }
    }
    
    public static final class MLDSA65_RSA3072_PKCS15_SHA512 extends KeyPairGeneratorSpi
    {
        public MLDSA65_RSA3072_PKCS15_SHA512() {
            super(IANAObjectIdentifiers.id_MLDSA65_RSA3072_PKCS15_SHA512);
        }
    }
    
    public static final class MLDSA65_RSA3072_PSS_SHA512 extends KeyPairGeneratorSpi
    {
        public MLDSA65_RSA3072_PSS_SHA512() {
            super(IANAObjectIdentifiers.id_MLDSA65_RSA3072_PSS_SHA512);
        }
    }
    
    public static final class MLDSA65_RSA4096_PKCS15_SHA512 extends KeyPairGeneratorSpi
    {
        public MLDSA65_RSA4096_PKCS15_SHA512() {
            super(IANAObjectIdentifiers.id_MLDSA65_RSA4096_PKCS15_SHA512);
        }
    }
    
    public static final class MLDSA65_RSA4096_PSS_SHA512 extends KeyPairGeneratorSpi
    {
        public MLDSA65_RSA4096_PSS_SHA512() {
            super(IANAObjectIdentifiers.id_MLDSA65_RSA4096_PSS_SHA512);
        }
    }
    
    public static final class MLDSA87_ECDSA_P384_SHA512 extends KeyPairGeneratorSpi
    {
        public MLDSA87_ECDSA_P384_SHA512() {
            super(IANAObjectIdentifiers.id_MLDSA87_ECDSA_P384_SHA512);
        }
    }
    
    public static final class MLDSA87_ECDSA_P521_SHA512 extends KeyPairGeneratorSpi
    {
        public MLDSA87_ECDSA_P521_SHA512() {
            super(IANAObjectIdentifiers.id_MLDSA87_ECDSA_P521_SHA512);
        }
    }
    
    public static final class MLDSA87_ECDSA_brainpoolP384r1_SHA512 extends KeyPairGeneratorSpi
    {
        public MLDSA87_ECDSA_brainpoolP384r1_SHA512() {
            super(IANAObjectIdentifiers.id_MLDSA87_ECDSA_brainpoolP384r1_SHA512);
        }
    }
    
    public static final class MLDSA87_Ed448_SHAKE256 extends KeyPairGeneratorSpi
    {
        public MLDSA87_Ed448_SHAKE256() {
            super(IANAObjectIdentifiers.id_MLDSA87_Ed448_SHAKE256);
        }
    }
    
    public static final class MLDSA87_RSA3072_PSS_SHA512 extends KeyPairGeneratorSpi
    {
        public MLDSA87_RSA3072_PSS_SHA512() {
            super(IANAObjectIdentifiers.id_MLDSA87_RSA3072_PSS_SHA512);
        }
    }
    
    public static final class MLDSA87_RSA4096_PSS_SHA512 extends KeyPairGeneratorSpi
    {
        public MLDSA87_RSA4096_PSS_SHA512() {
            super(IANAObjectIdentifiers.id_MLDSA87_RSA4096_PSS_SHA512);
        }
    }
}
