X509SignatureUtilities
                    class X509SignatureUtilities
                
                using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.CryptoPro;
using Org.BouncyCastle.Asn1.Nist;
using Org.BouncyCastle.Asn1.Oiw;
using Org.BouncyCastle.Asn1.Pkcs;
using Org.BouncyCastle.Asn1.TeleTrust;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Asn1.X9;
using Org.BouncyCastle.Security;
namespace Org.BouncyCastle.X509
{
    internal class X509SignatureUtilities
    {
        internal static bool AreEquivalentAlgorithms(AlgorithmIdentifier id1, AlgorithmIdentifier id2)
        {
            if (!id1.Algorithm.Equals(id2.Algorithm))
                return false;
            if (IsAbsentOrEmptyParameters(id1.Parameters) && IsAbsentOrEmptyParameters(id2.Parameters))
                return true;
            return object.Equals(id1.Parameters, id2.Parameters);
        }
        private static string GetDigestAlgName(DerObjectIdentifier digestAlgOID)
        {
            if (PkcsObjectIdentifiers.MD5.Equals(digestAlgOID))
                return "MD5";
            if (OiwObjectIdentifiers.IdSha1.Equals(digestAlgOID))
                return "SHA1";
            if (NistObjectIdentifiers.IdSha224.Equals(digestAlgOID))
                return "SHA224";
            if (NistObjectIdentifiers.IdSha256.Equals(digestAlgOID))
                return "SHA256";
            if (NistObjectIdentifiers.IdSha384.Equals(digestAlgOID))
                return "SHA384";
            if (NistObjectIdentifiers.IdSha512.Equals(digestAlgOID))
                return "SHA512";
            if (TeleTrusTObjectIdentifiers.RipeMD128.Equals(digestAlgOID))
                return "RIPEMD128";
            if (TeleTrusTObjectIdentifiers.RipeMD160.Equals(digestAlgOID))
                return "RIPEMD160";
            if (TeleTrusTObjectIdentifiers.RipeMD256.Equals(digestAlgOID))
                return "RIPEMD256";
            if (CryptoProObjectIdentifiers.GostR3411.Equals(digestAlgOID))
                return "GOST3411";
            return digestAlgOID.GetID();
        }
        internal static string GetSignatureName(AlgorithmIdentifier sigAlgID)
        {
            DerObjectIdentifier algorithm = sigAlgID.Algorithm;
            Asn1Encodable parameters = sigAlgID.Parameters;
            if (!IsAbsentOrEmptyParameters(parameters)) {
                if (PkcsObjectIdentifiers.IdRsassaPss.Equals(algorithm))
                    return GetDigestAlgName(RsassaPssParameters.GetInstance(parameters).HashAlgorithm.Algorithm) + "withRSAandMGF1";
                if (X9ObjectIdentifiers.ECDsaWithSha2.Equals(algorithm))
                    return GetDigestAlgName((DerObjectIdentifier)Asn1Sequence.GetInstance(parameters)[0]) + "withECDSA";
            }
            return SignerUtilities.GetEncodingName(algorithm) ?? algorithm.GetID();
        }
        private static bool IsAbsentOrEmptyParameters(Asn1Encodable parameters)
        {
            if (parameters != null)
                return DerNull.Instance.Equals(parameters);
            return true;
        }
    }
}