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

package com.google.crypto.tink.aead;

import com.google.crypto.tink.aead.internal.XAesGcm;
import com.google.crypto.tink.internal.MutableKeyCreationRegistry;
import com.google.crypto.tink.internal.MutablePrimitiveRegistry;
import com.google.crypto.tink.internal.MutableParametersRegistry;
import com.google.crypto.tink.aead.internal.XAesGcmProtoSerialization;
import com.google.crypto.tink.AccessesPartialKey;
import java.security.GeneralSecurityException;
import com.google.crypto.tink.util.SecretBytes;
import javax.annotation.Nullable;
import java.util.Collections;
import java.util.HashMap;
import com.google.crypto.tink.Parameters;
import java.util.Map;
import com.google.crypto.tink.Aead;
import com.google.crypto.tink.internal.PrimitiveConstructor;
import com.google.crypto.tink.internal.KeyCreator;

public final class XAesGcmKeyManager
{
    private static final KeyCreator<XAesGcmParameters> KEY_CREATOR;
    private static final PrimitiveConstructor<XAesGcmKey, Aead> X_AES_GCM_PRIMITVE_CONSTRUCTOR;
    
    private static Map<String, Parameters> namedParameters() {
        final Map<String, Parameters> result = new HashMap<String, Parameters>();
        result.put("XAES_256_GCM_192_BIT_NONCE", PredefinedAeadParameters.XAES_256_GCM_192_BIT_NONCE);
        result.put("XAES_256_GCM_192_BIT_NONCE_NO_PREFIX", PredefinedAeadParameters.XAES_256_GCM_192_BIT_NONCE_NO_PREFIX);
        result.put("XAES_256_GCM_160_BIT_NONCE_NO_PREFIX", PredefinedAeadParameters.XAES_256_GCM_160_BIT_NONCE_NO_PREFIX);
        result.put("X_AES_GCM_8_BYTE_SALT_NO_PREFIX", PredefinedAeadParameters.X_AES_GCM_8_BYTE_SALT_NO_PREFIX);
        return Collections.unmodifiableMap((Map<? extends String, ? extends Parameters>)result);
    }
    
    @AccessesPartialKey
    private static XAesGcmKey createXAesGcmKey(final XAesGcmParameters parameters, @Nullable final Integer idRequirement) throws GeneralSecurityException {
        return XAesGcmKey.create(parameters, SecretBytes.randomBytes(32), idRequirement);
    }
    
    public static void register(final boolean newKeyAllowed) throws GeneralSecurityException {
        XAesGcmProtoSerialization.register();
        MutableParametersRegistry.globalInstance().putAll(namedParameters());
        MutablePrimitiveRegistry.globalInstance().registerPrimitiveConstructor(XAesGcmKeyManager.X_AES_GCM_PRIMITVE_CONSTRUCTOR);
        MutableKeyCreationRegistry.globalInstance().add(XAesGcmKeyManager.KEY_CREATOR, XAesGcmParameters.class);
    }
    
    private XAesGcmKeyManager() {
    }
    
    static {
        KEY_CREATOR = XAesGcmKeyManager::createXAesGcmKey;
        X_AES_GCM_PRIMITVE_CONSTRUCTOR = PrimitiveConstructor.create(XAesGcm::create, XAesGcmKey.class, Aead.class);
    }
}
