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

package com.google.crypto.tink.signature;

import com.google.crypto.tink.config.internal.TinkFipsUtil;
import com.google.crypto.tink.Configuration;
import java.security.GeneralSecurityException;
import com.google.crypto.tink.signature.internal.SlhDsaVerifyConscrypt;
import com.google.crypto.tink.signature.internal.SlhDsaSignConscrypt;
import com.google.crypto.tink.signature.internal.MlDsaVerifyConscrypt;
import com.google.crypto.tink.signature.internal.MlDsaSignConscrypt;
import com.google.crypto.tink.subtle.Ed25519Verify;
import com.google.crypto.tink.subtle.Ed25519Sign;
import com.google.crypto.tink.subtle.RsaSsaPkcs1VerifyJce;
import com.google.crypto.tink.subtle.RsaSsaPkcs1SignJce;
import com.google.crypto.tink.subtle.RsaSsaPssVerifyJce;
import com.google.crypto.tink.subtle.RsaSsaPssSignJce;
import com.google.crypto.tink.PublicKeyVerify;
import com.google.crypto.tink.subtle.EcdsaVerifyJce;
import com.google.crypto.tink.Key;
import com.google.crypto.tink.internal.PrimitiveConstructor;
import com.google.crypto.tink.PublicKeySign;
import com.google.crypto.tink.subtle.EcdsaSignJce;
import com.google.crypto.tink.internal.PrimitiveRegistry;
import com.google.crypto.tink.internal.InternalConfiguration;

class SignatureConfigurationV1
{
    private static final InternalConfiguration INTERNAL_CONFIGURATION;
    
    private SignatureConfigurationV1() {
    }
    
    private static InternalConfiguration create() {
        try {
            final PrimitiveRegistry.Builder builder = PrimitiveRegistry.builder();
            PublicKeySignWrapper.registerToInternalPrimitiveRegistry(builder);
            PublicKeyVerifyWrapper.registerToInternalPrimitiveRegistry(builder);
            builder.registerPrimitiveConstructor((PrimitiveConstructor<Key, Object>)PrimitiveConstructor.create((PrimitiveConstructor.PrimitiveConstructionFunction<KeyT, PrimitiveT>)EcdsaSignJce::create, (Class<KeyT>)EcdsaPrivateKey.class, (Class<PrimitiveT>)PublicKeySign.class));
            builder.registerPrimitiveConstructor((PrimitiveConstructor<Key, Object>)PrimitiveConstructor.create((PrimitiveConstructor.PrimitiveConstructionFunction<KeyT, PrimitiveT>)EcdsaVerifyJce::create, (Class<KeyT>)EcdsaPublicKey.class, (Class<PrimitiveT>)PublicKeyVerify.class));
            builder.registerPrimitiveConstructor((PrimitiveConstructor<Key, Object>)PrimitiveConstructor.create((PrimitiveConstructor.PrimitiveConstructionFunction<KeyT, PrimitiveT>)RsaSsaPssSignJce::create, (Class<KeyT>)RsaSsaPssPrivateKey.class, (Class<PrimitiveT>)PublicKeySign.class));
            builder.registerPrimitiveConstructor((PrimitiveConstructor<Key, Object>)PrimitiveConstructor.create((PrimitiveConstructor.PrimitiveConstructionFunction<KeyT, PrimitiveT>)RsaSsaPssVerifyJce::create, (Class<KeyT>)RsaSsaPssPublicKey.class, (Class<PrimitiveT>)PublicKeyVerify.class));
            builder.registerPrimitiveConstructor((PrimitiveConstructor<Key, Object>)PrimitiveConstructor.create((PrimitiveConstructor.PrimitiveConstructionFunction<KeyT, PrimitiveT>)RsaSsaPkcs1SignJce::create, (Class<KeyT>)RsaSsaPkcs1PrivateKey.class, (Class<PrimitiveT>)PublicKeySign.class));
            builder.registerPrimitiveConstructor((PrimitiveConstructor<Key, Object>)PrimitiveConstructor.create((PrimitiveConstructor.PrimitiveConstructionFunction<KeyT, PrimitiveT>)RsaSsaPkcs1VerifyJce::create, (Class<KeyT>)RsaSsaPkcs1PublicKey.class, (Class<PrimitiveT>)PublicKeyVerify.class));
            builder.registerPrimitiveConstructor((PrimitiveConstructor<Key, Object>)PrimitiveConstructor.create((PrimitiveConstructor.PrimitiveConstructionFunction<KeyT, PrimitiveT>)Ed25519Sign::create, (Class<KeyT>)Ed25519PrivateKey.class, (Class<PrimitiveT>)PublicKeySign.class));
            builder.registerPrimitiveConstructor((PrimitiveConstructor<Key, Object>)PrimitiveConstructor.create((PrimitiveConstructor.PrimitiveConstructionFunction<KeyT, PrimitiveT>)Ed25519Verify::create, (Class<KeyT>)Ed25519PublicKey.class, (Class<PrimitiveT>)PublicKeyVerify.class));
            builder.registerPrimitiveConstructor((PrimitiveConstructor<Key, Object>)PrimitiveConstructor.create((PrimitiveConstructor.PrimitiveConstructionFunction<KeyT, PrimitiveT>)MlDsaSignConscrypt::create, (Class<KeyT>)MlDsaPrivateKey.class, (Class<PrimitiveT>)PublicKeySign.class));
            builder.registerPrimitiveConstructor((PrimitiveConstructor<Key, Object>)PrimitiveConstructor.create((PrimitiveConstructor.PrimitiveConstructionFunction<KeyT, PrimitiveT>)MlDsaVerifyConscrypt::create, (Class<KeyT>)MlDsaPublicKey.class, (Class<PrimitiveT>)PublicKeyVerify.class));
            builder.registerPrimitiveConstructor((PrimitiveConstructor<Key, Object>)PrimitiveConstructor.create((PrimitiveConstructor.PrimitiveConstructionFunction<KeyT, PrimitiveT>)SlhDsaSignConscrypt::create, (Class<KeyT>)SlhDsaPrivateKey.class, (Class<PrimitiveT>)PublicKeySign.class));
            builder.registerPrimitiveConstructor((PrimitiveConstructor<Key, Object>)PrimitiveConstructor.create((PrimitiveConstructor.PrimitiveConstructionFunction<KeyT, PrimitiveT>)SlhDsaVerifyConscrypt::create, (Class<KeyT>)SlhDsaPublicKey.class, (Class<PrimitiveT>)PublicKeyVerify.class));
            return InternalConfiguration.createFromPrimitiveRegistry(builder.build());
        }
        catch (final GeneralSecurityException e) {
            throw new IllegalStateException(e);
        }
    }
    
    public static Configuration get() throws GeneralSecurityException {
        if (TinkFipsUtil.useOnlyFips()) {
            throw new GeneralSecurityException("Cannot use non-FIPS-compliant SignatureConfigurationV1 in FIPS mode");
        }
        return SignatureConfigurationV1.INTERNAL_CONFIGURATION;
    }
    
    static {
        INTERNAL_CONFIGURATION = create();
    }
}
