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

package com.nimbusds.jose.crypto.impl;

import java.security.InvalidAlgorithmParameterException;
import java.security.NoSuchAlgorithmException;
import com.nimbusds.jose.JOSEException;
import java.util.Collection;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.PSSParameterSpec;
import java.security.spec.MGF1ParameterSpec;
import java.security.Signature;
import java.security.Provider;
import com.nimbusds.jose.JWSAlgorithm;

public class RSASSA
{
    public static Signature getSignerAndVerifier(final JWSAlgorithm alg, final Provider provider) throws JOSEException {
        Signature signature;
        if (alg.equals(JWSAlgorithm.RS256) && (signature = getSignerAndVerifier("SHA256withRSA", provider)) != null) {
            return signature;
        }
        if (alg.equals(JWSAlgorithm.RS384) && (signature = getSignerAndVerifier("SHA384withRSA", provider)) != null) {
            return signature;
        }
        if (alg.equals(JWSAlgorithm.RS512) && (signature = getSignerAndVerifier("SHA512withRSA", provider)) != null) {
            return signature;
        }
        if (alg.equals(JWSAlgorithm.PS256) && (signature = getSignerAndVerifier("RSASSA-PSS", provider, new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 32, 1))) != null) {
            return signature;
        }
        if (alg.equals(JWSAlgorithm.PS256) && (signature = getSignerAndVerifier("SHA256withRSA/PSS", provider)) != null) {
            return signature;
        }
        if (alg.equals(JWSAlgorithm.PS256) && (signature = getSignerAndVerifier("SHA256withRSAandMGF1", provider)) != null) {
            return signature;
        }
        if (alg.equals(JWSAlgorithm.PS384) && (signature = getSignerAndVerifier("RSASSA-PSS", provider, new PSSParameterSpec("SHA-384", "MGF1", MGF1ParameterSpec.SHA384, 48, 1))) != null) {
            return signature;
        }
        if (alg.equals(JWSAlgorithm.PS384) && (signature = getSignerAndVerifier("SHA384withRSA/PSS", provider)) != null) {
            return signature;
        }
        if (alg.equals(JWSAlgorithm.PS384) && (signature = getSignerAndVerifier("SHA384withRSAandMGF1", provider)) != null) {
            return signature;
        }
        if (alg.equals(JWSAlgorithm.PS512) && (signature = getSignerAndVerifier("RSASSA-PSS", provider, new PSSParameterSpec("SHA-512", "MGF1", MGF1ParameterSpec.SHA512, 64, 1))) != null) {
            return signature;
        }
        if (alg.equals(JWSAlgorithm.PS512) && (signature = getSignerAndVerifier("SHA512withRSA/PSS", provider)) != null) {
            return signature;
        }
        if (alg.equals(JWSAlgorithm.PS512) && (signature = getSignerAndVerifier("SHA512withRSAandMGF1", provider)) != null) {
            return signature;
        }
        throw new JOSEException(AlgorithmSupportMessage.unsupportedJWSAlgorithm(alg, RSASSAProvider.SUPPORTED_ALGORITHMS));
    }
    
    private static Signature getSignerAndVerifier(final String jcaAlg, final Provider provider) throws JOSEException {
        return getSignerAndVerifier(jcaAlg, provider, null);
    }
    
    private static Signature getSignerAndVerifier(final String jcaAlg, final Provider provider, final PSSParameterSpec pssSpec) throws JOSEException {
        Signature signature;
        try {
            if (provider != null) {
                signature = Signature.getInstance(jcaAlg, provider);
            }
            else {
                signature = Signature.getInstance(jcaAlg);
            }
        }
        catch (final NoSuchAlgorithmException ignore) {
            return null;
        }
        if (pssSpec != null) {
            try {
                signature.setParameter(pssSpec);
            }
            catch (final InvalidAlgorithmParameterException e) {
                throw new JOSEException("Invalid RSASSA-PSS salt length parameter: " + e.getMessage(), e);
            }
        }
        return signature;
    }
    
    private RSASSA() {
    }
}
