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

package org.bouncycastle.pqc.crypto.sphincsplus;

import java.util.HashMap;
import org.bouncycastle.util.Integers;
import org.bouncycastle.util.Pack;
import java.util.Map;

public class SPHINCSPlusParameters
{
    public static final SPHINCSPlusParameters sha2_128f_robust;
    public static final SPHINCSPlusParameters sha2_128s_robust;
    public static final SPHINCSPlusParameters sha2_192f_robust;
    public static final SPHINCSPlusParameters sha2_192s_robust;
    public static final SPHINCSPlusParameters sha2_256f_robust;
    public static final SPHINCSPlusParameters sha2_256s_robust;
    public static final SPHINCSPlusParameters sha2_128f;
    public static final SPHINCSPlusParameters sha2_128s;
    public static final SPHINCSPlusParameters sha2_192f;
    public static final SPHINCSPlusParameters sha2_192s;
    public static final SPHINCSPlusParameters sha2_256f;
    public static final SPHINCSPlusParameters sha2_256s;
    public static final SPHINCSPlusParameters shake_128f_robust;
    public static final SPHINCSPlusParameters shake_128s_robust;
    public static final SPHINCSPlusParameters shake_192f_robust;
    public static final SPHINCSPlusParameters shake_192s_robust;
    public static final SPHINCSPlusParameters shake_256f_robust;
    public static final SPHINCSPlusParameters shake_256s_robust;
    public static final SPHINCSPlusParameters shake_128f;
    public static final SPHINCSPlusParameters shake_128s;
    public static final SPHINCSPlusParameters shake_192f;
    public static final SPHINCSPlusParameters shake_192s;
    public static final SPHINCSPlusParameters shake_256f;
    public static final SPHINCSPlusParameters shake_256s;
    @Deprecated
    public static final SPHINCSPlusParameters haraka_128f;
    @Deprecated
    public static final SPHINCSPlusParameters haraka_128s;
    @Deprecated
    public static final SPHINCSPlusParameters haraka_192f;
    @Deprecated
    public static final SPHINCSPlusParameters haraka_192s;
    @Deprecated
    public static final SPHINCSPlusParameters haraka_256f;
    @Deprecated
    public static final SPHINCSPlusParameters haraka_256s;
    public static final SPHINCSPlusParameters haraka_128f_simple;
    public static final SPHINCSPlusParameters haraka_128s_simple;
    public static final SPHINCSPlusParameters haraka_192f_simple;
    public static final SPHINCSPlusParameters haraka_192s_simple;
    public static final SPHINCSPlusParameters haraka_256f_simple;
    public static final SPHINCSPlusParameters haraka_256s_simple;
    private static final Map<Integer, SPHINCSPlusParameters> ID_TO_PARAMS;
    private final Integer id;
    private final String name;
    private final SPHINCSPlusEngineProvider engineProvider;
    
    private SPHINCSPlusParameters(final Integer id, final String name, final SPHINCSPlusEngineProvider engineProvider) {
        this.id = id;
        this.name = name;
        this.engineProvider = engineProvider;
    }
    
    public Integer getID() {
        return this.id;
    }
    
    public String getName() {
        return this.name;
    }
    
    int getN() {
        return this.engineProvider.getN();
    }
    
    SPHINCSPlusEngine getEngine() {
        return this.engineProvider.get();
    }
    
    public static SPHINCSPlusParameters getParams(final Integer n) {
        return SPHINCSPlusParameters.ID_TO_PARAMS.get(n);
    }
    
    @Deprecated
    public static Integer getID(final SPHINCSPlusParameters sphincsPlusParameters) {
        return sphincsPlusParameters.getID();
    }
    
    public byte[] getEncoded() {
        return Pack.intToBigEndian(this.getID());
    }
    
    static {
        sha2_128f_robust = new SPHINCSPlusParameters(Integers.valueOf(65793), "sha2-128f-robust", new Sha2EngineProvider(true, 16, 16, 22, 6, 33, 66));
        sha2_128s_robust = new SPHINCSPlusParameters(Integers.valueOf(65794), "sha2-128s-robust", new Sha2EngineProvider(true, 16, 16, 7, 12, 14, 63));
        sha2_192f_robust = new SPHINCSPlusParameters(Integers.valueOf(65795), "sha2-192f-robust", new Sha2EngineProvider(true, 24, 16, 22, 8, 33, 66));
        sha2_192s_robust = new SPHINCSPlusParameters(Integers.valueOf(65796), "sha2-192s-robust", new Sha2EngineProvider(true, 24, 16, 7, 14, 17, 63));
        sha2_256f_robust = new SPHINCSPlusParameters(Integers.valueOf(65797), "sha2-256f-robust", new Sha2EngineProvider(true, 32, 16, 17, 9, 35, 68));
        sha2_256s_robust = new SPHINCSPlusParameters(Integers.valueOf(65798), "sha2-256s-robust", new Sha2EngineProvider(true, 32, 16, 8, 14, 22, 64));
        sha2_128f = new SPHINCSPlusParameters(Integers.valueOf(66049), "sha2-128f", new Sha2EngineProvider(false, 16, 16, 22, 6, 33, 66));
        sha2_128s = new SPHINCSPlusParameters(Integers.valueOf(66050), "sha2-128s", new Sha2EngineProvider(false, 16, 16, 7, 12, 14, 63));
        sha2_192f = new SPHINCSPlusParameters(Integers.valueOf(66051), "sha2-192f", new Sha2EngineProvider(false, 24, 16, 22, 8, 33, 66));
        sha2_192s = new SPHINCSPlusParameters(Integers.valueOf(66052), "sha2-192s", new Sha2EngineProvider(false, 24, 16, 7, 14, 17, 63));
        sha2_256f = new SPHINCSPlusParameters(Integers.valueOf(66053), "sha2-256f", new Sha2EngineProvider(false, 32, 16, 17, 9, 35, 68));
        sha2_256s = new SPHINCSPlusParameters(Integers.valueOf(66054), "sha2-256s", new Sha2EngineProvider(false, 32, 16, 8, 14, 22, 64));
        shake_128f_robust = new SPHINCSPlusParameters(Integers.valueOf(131329), "shake-128f-robust", new Shake256EngineProvider(true, 16, 16, 22, 6, 33, 66));
        shake_128s_robust = new SPHINCSPlusParameters(Integers.valueOf(131330), "shake-128s-robust", new Shake256EngineProvider(true, 16, 16, 7, 12, 14, 63));
        shake_192f_robust = new SPHINCSPlusParameters(Integers.valueOf(131331), "shake-192f-robust", new Shake256EngineProvider(true, 24, 16, 22, 8, 33, 66));
        shake_192s_robust = new SPHINCSPlusParameters(Integers.valueOf(131332), "shake-192s-robust", new Shake256EngineProvider(true, 24, 16, 7, 14, 17, 63));
        shake_256f_robust = new SPHINCSPlusParameters(Integers.valueOf(131333), "shake-256f-robust", new Shake256EngineProvider(true, 32, 16, 17, 9, 35, 68));
        shake_256s_robust = new SPHINCSPlusParameters(Integers.valueOf(131334), "shake-256s-robust", new Shake256EngineProvider(true, 32, 16, 8, 14, 22, 64));
        shake_128f = new SPHINCSPlusParameters(Integers.valueOf(131585), "shake-128f", new Shake256EngineProvider(false, 16, 16, 22, 6, 33, 66));
        shake_128s = new SPHINCSPlusParameters(Integers.valueOf(131586), "shake-128s", new Shake256EngineProvider(false, 16, 16, 7, 12, 14, 63));
        shake_192f = new SPHINCSPlusParameters(Integers.valueOf(131587), "shake-192f", new Shake256EngineProvider(false, 24, 16, 22, 8, 33, 66));
        shake_192s = new SPHINCSPlusParameters(Integers.valueOf(131588), "shake-192s", new Shake256EngineProvider(false, 24, 16, 7, 14, 17, 63));
        shake_256f = new SPHINCSPlusParameters(Integers.valueOf(131589), "shake-256f", new Shake256EngineProvider(false, 32, 16, 17, 9, 35, 68));
        shake_256s = new SPHINCSPlusParameters(Integers.valueOf(131590), "shake-256s", new Shake256EngineProvider(false, 32, 16, 8, 14, 22, 64));
        haraka_128f = new SPHINCSPlusParameters(Integers.valueOf(196865), "haraka-128f-robust", new HarakaSEngineProvider(true, 16, 16, 22, 6, 33, 66));
        haraka_128s = new SPHINCSPlusParameters(Integers.valueOf(196866), "haraka-128s-robust", new HarakaSEngineProvider(true, 16, 16, 7, 12, 14, 63));
        haraka_192f = new SPHINCSPlusParameters(Integers.valueOf(196867), "haraka-192f-robust", new HarakaSEngineProvider(true, 24, 16, 22, 8, 33, 66));
        haraka_192s = new SPHINCSPlusParameters(Integers.valueOf(196868), "haraka-192s-robust", new HarakaSEngineProvider(true, 24, 16, 7, 14, 17, 63));
        haraka_256f = new SPHINCSPlusParameters(Integers.valueOf(196869), "haraka-256f-robust", new HarakaSEngineProvider(true, 32, 16, 17, 9, 35, 68));
        haraka_256s = new SPHINCSPlusParameters(Integers.valueOf(196870), "haraka-256s-robust", new HarakaSEngineProvider(true, 32, 16, 8, 14, 22, 64));
        haraka_128f_simple = new SPHINCSPlusParameters(Integers.valueOf(197121), "haraka-128f-simple", new HarakaSEngineProvider(false, 16, 16, 22, 6, 33, 66));
        haraka_128s_simple = new SPHINCSPlusParameters(Integers.valueOf(197122), "haraka-128s-simple", new HarakaSEngineProvider(false, 16, 16, 7, 12, 14, 63));
        haraka_192f_simple = new SPHINCSPlusParameters(Integers.valueOf(197123), "haraka-192f-simple", new HarakaSEngineProvider(false, 24, 16, 22, 8, 33, 66));
        haraka_192s_simple = new SPHINCSPlusParameters(Integers.valueOf(197124), "haraka-192s-simple", new HarakaSEngineProvider(false, 24, 16, 7, 14, 17, 63));
        haraka_256f_simple = new SPHINCSPlusParameters(Integers.valueOf(197125), "haraka-256f-simple", new HarakaSEngineProvider(false, 32, 16, 17, 9, 35, 68));
        haraka_256s_simple = new SPHINCSPlusParameters(Integers.valueOf(197126), "haraka-256s-simple", new HarakaSEngineProvider(false, 32, 16, 8, 14, 22, 64));
        ID_TO_PARAMS = new HashMap<Integer, SPHINCSPlusParameters>();
        final SPHINCSPlusParameters[] array = { SPHINCSPlusParameters.sha2_128f_robust, SPHINCSPlusParameters.sha2_128s_robust, SPHINCSPlusParameters.sha2_192f_robust, SPHINCSPlusParameters.sha2_192s_robust, SPHINCSPlusParameters.sha2_256f_robust, SPHINCSPlusParameters.sha2_256s_robust, SPHINCSPlusParameters.sha2_128f, SPHINCSPlusParameters.sha2_128s, SPHINCSPlusParameters.sha2_192f, SPHINCSPlusParameters.sha2_192s, SPHINCSPlusParameters.sha2_256f, SPHINCSPlusParameters.sha2_256s, SPHINCSPlusParameters.shake_128f_robust, SPHINCSPlusParameters.shake_128s_robust, SPHINCSPlusParameters.shake_192f_robust, SPHINCSPlusParameters.shake_192s_robust, SPHINCSPlusParameters.shake_256f_robust, SPHINCSPlusParameters.shake_256s_robust, SPHINCSPlusParameters.shake_128f, SPHINCSPlusParameters.shake_128s, SPHINCSPlusParameters.shake_192f, SPHINCSPlusParameters.shake_192s, SPHINCSPlusParameters.shake_256f, SPHINCSPlusParameters.shake_256s, SPHINCSPlusParameters.haraka_128f, SPHINCSPlusParameters.haraka_128s, SPHINCSPlusParameters.haraka_192f, SPHINCSPlusParameters.haraka_192s, SPHINCSPlusParameters.haraka_256f, SPHINCSPlusParameters.haraka_256s, SPHINCSPlusParameters.haraka_128f_simple, SPHINCSPlusParameters.haraka_128s_simple, SPHINCSPlusParameters.haraka_192f_simple, SPHINCSPlusParameters.haraka_192s_simple, SPHINCSPlusParameters.haraka_256f_simple, SPHINCSPlusParameters.haraka_256s_simple };
        for (int i = 0; i < array.length; ++i) {
            final SPHINCSPlusParameters sphincsPlusParameters = array[i];
            SPHINCSPlusParameters.ID_TO_PARAMS.put(sphincsPlusParameters.getID(), sphincsPlusParameters);
        }
    }
    
    private static class HarakaSEngineProvider implements SPHINCSPlusEngineProvider
    {
        private final boolean robust;
        private final int n;
        private final int w;
        private final int d;
        private final int a;
        private final int k;
        private final int h;
        
        public HarakaSEngineProvider(final boolean robust, final int n, final int w, final int d, final int a, final int k, final int h) {
            this.robust = robust;
            this.n = n;
            this.w = w;
            this.d = d;
            this.a = a;
            this.k = k;
            this.h = h;
        }
        
        @Override
        public int getN() {
            return this.n;
        }
        
        @Override
        public SPHINCSPlusEngine get() {
            return new SPHINCSPlusEngine.HarakaSEngine(this.robust, this.n, this.w, this.d, this.a, this.k, this.h);
        }
    }
    
    private static class Sha2EngineProvider implements SPHINCSPlusEngineProvider
    {
        private final boolean robust;
        private final int n;
        private final int w;
        private final int d;
        private final int a;
        private final int k;
        private final int h;
        
        public Sha2EngineProvider(final boolean robust, final int n, final int w, final int d, final int a, final int k, final int h) {
            this.robust = robust;
            this.n = n;
            this.w = w;
            this.d = d;
            this.a = a;
            this.k = k;
            this.h = h;
        }
        
        @Override
        public int getN() {
            return this.n;
        }
        
        @Override
        public SPHINCSPlusEngine get() {
            return new SPHINCSPlusEngine.Sha2Engine(this.robust, this.n, this.w, this.d, this.a, this.k, this.h);
        }
    }
    
    private static class Shake256EngineProvider implements SPHINCSPlusEngineProvider
    {
        private final boolean robust;
        private final int n;
        private final int w;
        private final int d;
        private final int a;
        private final int k;
        private final int h;
        
        public Shake256EngineProvider(final boolean robust, final int n, final int w, final int d, final int a, final int k, final int h) {
            this.robust = robust;
            this.n = n;
            this.w = w;
            this.d = d;
            this.a = a;
            this.k = k;
            this.h = h;
        }
        
        @Override
        public int getN() {
            return this.n;
        }
        
        @Override
        public SPHINCSPlusEngine get() {
            return new SPHINCSPlusEngine.Shake256Engine(this.robust, this.n, this.w, this.d, this.a, this.k, this.h);
        }
    }
}
