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

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

import org.bouncycastle.asn1.bc.BCObjectIdentifiers;
import java.util.HashSet;
import java.security.PublicKey;
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import java.io.IOException;
import java.security.PrivateKey;
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import java.security.InvalidKeyException;
import java.security.spec.X509EncodedKeySpec;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.KeySpec;
import java.security.Key;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import java.util.Set;
import org.bouncycastle.pqc.jcajce.provider.util.BaseKeyFactorySpi;

public class SnovaKeyFactorySpi extends BaseKeyFactorySpi
{
    private static final Set<ASN1ObjectIdentifier> keyOids;
    
    public SnovaKeyFactorySpi() {
        super(SnovaKeyFactorySpi.keyOids);
    }
    
    public SnovaKeyFactorySpi(final ASN1ObjectIdentifier asn1ObjectIdentifier) {
        super(asn1ObjectIdentifier);
    }
    
    public final KeySpec engineGetKeySpec(final Key key, final Class obj) throws InvalidKeySpecException {
        if (key instanceof BCSnovaPrivateKey) {
            if (PKCS8EncodedKeySpec.class.isAssignableFrom(obj)) {
                return new PKCS8EncodedKeySpec(key.getEncoded());
            }
        }
        else {
            if (!(key instanceof BCSnovaPublicKey)) {
                throw new InvalidKeySpecException("Unsupported key type: " + key.getClass() + ".");
            }
            if (X509EncodedKeySpec.class.isAssignableFrom(obj)) {
                return new X509EncodedKeySpec(key.getEncoded());
            }
        }
        throw new InvalidKeySpecException("Unknown key specification: " + obj + ".");
    }
    
    public final Key engineTranslateKey(final Key key) throws InvalidKeyException {
        if (key instanceof BCSnovaPrivateKey || key instanceof BCSnovaPublicKey) {
            return key;
        }
        throw new InvalidKeyException("Unsupported key type");
    }
    
    @Override
    public PrivateKey generatePrivate(final PrivateKeyInfo privateKeyInfo) throws IOException {
        return new BCSnovaPrivateKey(privateKeyInfo);
    }
    
    @Override
    public PublicKey generatePublic(final SubjectPublicKeyInfo subjectPublicKeyInfo) throws IOException {
        return new BCSnovaPublicKey(subjectPublicKeyInfo);
    }
    
    static {
        (keyOids = new HashSet<ASN1ObjectIdentifier>()).add(BCObjectIdentifiers.snova_24_5_4_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_24_5_4_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_24_5_4_shake_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_24_5_4_shake_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_24_5_5_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_24_5_5_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_24_5_5_shake_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_24_5_5_shake_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_25_8_3_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_25_8_3_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_25_8_3_shake_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_25_8_3_shake_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_29_6_5_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_29_6_5_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_29_6_5_shake_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_29_6_5_shake_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_37_8_4_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_37_8_4_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_37_8_4_shake_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_37_8_4_shake_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_37_17_2_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_37_17_2_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_37_17_2_shake_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_37_17_2_shake_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_49_11_3_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_49_11_3_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_49_11_3_shake_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_49_11_3_shake_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_56_25_2_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_56_25_2_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_56_25_2_shake_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_56_25_2_shake_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_60_10_4_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_60_10_4_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_60_10_4_shake_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_60_10_4_shake_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_66_15_3_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_66_15_3_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_66_15_3_shake_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_66_15_3_shake_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_75_33_2_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_75_33_2_esk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_75_33_2_shake_ssk);
        SnovaKeyFactorySpi.keyOids.add(BCObjectIdentifiers.snova_75_33_2_shake_esk);
    }
    
    public static class SNOVA_24_5_4_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_24_5_4_ESK() {
            super(BCObjectIdentifiers.snova_24_5_4_esk);
        }
    }
    
    public static class SNOVA_24_5_4_SHAKE_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_24_5_4_SHAKE_ESK() {
            super(BCObjectIdentifiers.snova_24_5_4_shake_esk);
        }
    }
    
    public static class SNOVA_24_5_4_SHAKE_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_24_5_4_SHAKE_SSK() {
            super(BCObjectIdentifiers.snova_24_5_4_shake_ssk);
        }
    }
    
    public static class SNOVA_24_5_4_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_24_5_4_SSK() {
            super(BCObjectIdentifiers.snova_24_5_4_ssk);
        }
    }
    
    public static class SNOVA_24_5_5_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_24_5_5_ESK() {
            super(BCObjectIdentifiers.snova_24_5_5_esk);
        }
    }
    
    public static class SNOVA_24_5_5_SHAKE_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_24_5_5_SHAKE_ESK() {
            super(BCObjectIdentifiers.snova_24_5_5_shake_esk);
        }
    }
    
    public static class SNOVA_24_5_5_SHAKE_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_24_5_5_SHAKE_SSK() {
            super(BCObjectIdentifiers.snova_24_5_5_shake_ssk);
        }
    }
    
    public static class SNOVA_24_5_5_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_24_5_5_SSK() {
            super(BCObjectIdentifiers.snova_24_5_5_ssk);
        }
    }
    
    public static class SNOVA_25_8_3_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_25_8_3_ESK() {
            super(BCObjectIdentifiers.snova_25_8_3_esk);
        }
    }
    
    public static class SNOVA_25_8_3_SHAKE_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_25_8_3_SHAKE_ESK() {
            super(BCObjectIdentifiers.snova_25_8_3_shake_esk);
        }
    }
    
    public static class SNOVA_25_8_3_SHAKE_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_25_8_3_SHAKE_SSK() {
            super(BCObjectIdentifiers.snova_25_8_3_shake_ssk);
        }
    }
    
    public static class SNOVA_25_8_3_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_25_8_3_SSK() {
            super(BCObjectIdentifiers.snova_25_8_3_ssk);
        }
    }
    
    public static class SNOVA_29_6_5_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_29_6_5_ESK() {
            super(BCObjectIdentifiers.snova_29_6_5_esk);
        }
    }
    
    public static class SNOVA_29_6_5_SHAKE_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_29_6_5_SHAKE_ESK() {
            super(BCObjectIdentifiers.snova_29_6_5_shake_esk);
        }
    }
    
    public static class SNOVA_29_6_5_SHAKE_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_29_6_5_SHAKE_SSK() {
            super(BCObjectIdentifiers.snova_29_6_5_shake_ssk);
        }
    }
    
    public static class SNOVA_29_6_5_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_29_6_5_SSK() {
            super(BCObjectIdentifiers.snova_29_6_5_ssk);
        }
    }
    
    public static class SNOVA_37_17_2_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_37_17_2_ESK() {
            super(BCObjectIdentifiers.snova_37_17_2_esk);
        }
    }
    
    public static class SNOVA_37_17_2_SHAKE_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_37_17_2_SHAKE_ESK() {
            super(BCObjectIdentifiers.snova_37_17_2_shake_esk);
        }
    }
    
    public static class SNOVA_37_17_2_SHAKE_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_37_17_2_SHAKE_SSK() {
            super(BCObjectIdentifiers.snova_37_17_2_shake_ssk);
        }
    }
    
    public static class SNOVA_37_17_2_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_37_17_2_SSK() {
            super(BCObjectIdentifiers.snova_37_17_2_ssk);
        }
    }
    
    public static class SNOVA_37_8_4_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_37_8_4_ESK() {
            super(BCObjectIdentifiers.snova_37_8_4_esk);
        }
    }
    
    public static class SNOVA_37_8_4_SHAKE_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_37_8_4_SHAKE_ESK() {
            super(BCObjectIdentifiers.snova_37_8_4_shake_esk);
        }
    }
    
    public static class SNOVA_37_8_4_SHAKE_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_37_8_4_SHAKE_SSK() {
            super(BCObjectIdentifiers.snova_37_8_4_shake_ssk);
        }
    }
    
    public static class SNOVA_37_8_4_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_37_8_4_SSK() {
            super(BCObjectIdentifiers.snova_37_8_4_ssk);
        }
    }
    
    public static class SNOVA_49_11_3_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_49_11_3_ESK() {
            super(BCObjectIdentifiers.snova_49_11_3_esk);
        }
    }
    
    public static class SNOVA_49_11_3_SHAKE_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_49_11_3_SHAKE_ESK() {
            super(BCObjectIdentifiers.snova_49_11_3_shake_esk);
        }
    }
    
    public static class SNOVA_49_11_3_SHAKE_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_49_11_3_SHAKE_SSK() {
            super(BCObjectIdentifiers.snova_49_11_3_shake_ssk);
        }
    }
    
    public static class SNOVA_49_11_3_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_49_11_3_SSK() {
            super(BCObjectIdentifiers.snova_49_11_3_ssk);
        }
    }
    
    public static class SNOVA_56_25_2_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_56_25_2_ESK() {
            super(BCObjectIdentifiers.snova_56_25_2_esk);
        }
    }
    
    public static class SNOVA_56_25_2_SHAKE_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_56_25_2_SHAKE_ESK() {
            super(BCObjectIdentifiers.snova_56_25_2_shake_esk);
        }
    }
    
    public static class SNOVA_56_25_2_SHAKE_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_56_25_2_SHAKE_SSK() {
            super(BCObjectIdentifiers.snova_56_25_2_shake_ssk);
        }
    }
    
    public static class SNOVA_56_25_2_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_56_25_2_SSK() {
            super(BCObjectIdentifiers.snova_56_25_2_ssk);
        }
    }
    
    public static class SNOVA_60_10_4_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_60_10_4_ESK() {
            super(BCObjectIdentifiers.snova_60_10_4_esk);
        }
    }
    
    public static class SNOVA_60_10_4_SHAKE_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_60_10_4_SHAKE_ESK() {
            super(BCObjectIdentifiers.snova_60_10_4_shake_esk);
        }
    }
    
    public static class SNOVA_60_10_4_SHAKE_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_60_10_4_SHAKE_SSK() {
            super(BCObjectIdentifiers.snova_60_10_4_shake_ssk);
        }
    }
    
    public static class SNOVA_60_10_4_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_60_10_4_SSK() {
            super(BCObjectIdentifiers.snova_60_10_4_ssk);
        }
    }
    
    public static class SNOVA_66_15_3_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_66_15_3_ESK() {
            super(BCObjectIdentifiers.snova_66_15_3_esk);
        }
    }
    
    public static class SNOVA_66_15_3_SHAKE_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_66_15_3_SHAKE_ESK() {
            super(BCObjectIdentifiers.snova_66_15_3_shake_esk);
        }
    }
    
    public static class SNOVA_66_15_3_SHAKE_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_66_15_3_SHAKE_SSK() {
            super(BCObjectIdentifiers.snova_66_15_3_shake_ssk);
        }
    }
    
    public static class SNOVA_66_15_3_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_66_15_3_SSK() {
            super(BCObjectIdentifiers.snova_66_15_3_ssk);
        }
    }
    
    public static class SNOVA_75_33_2_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_75_33_2_ESK() {
            super(BCObjectIdentifiers.snova_75_33_2_esk);
        }
    }
    
    public static class SNOVA_75_33_2_SHAKE_ESK extends SnovaKeyFactorySpi
    {
        public SNOVA_75_33_2_SHAKE_ESK() {
            super(BCObjectIdentifiers.snova_75_33_2_shake_esk);
        }
    }
    
    public static class SNOVA_75_33_2_SHAKE_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_75_33_2_SHAKE_SSK() {
            super(BCObjectIdentifiers.snova_75_33_2_shake_ssk);
        }
    }
    
    public static class SNOVA_75_33_2_SSK extends SnovaKeyFactorySpi
    {
        public SNOVA_75_33_2_SSK() {
            super(BCObjectIdentifiers.snova_75_33_2_ssk);
        }
    }
}
