Refactor X509SignatureUtilities
1 files changed, 36 insertions, 34 deletions
diff --git a/crypto/src/x509/X509SignatureUtil.cs b/crypto/src/x509/X509SignatureUtil.cs
index 635e7d70b..8bffd8d37 100644
--- a/crypto/src/x509/X509SignatureUtil.cs
+++ b/crypto/src/x509/X509SignatureUtil.cs
@@ -7,6 +7,7 @@ using Org.BouncyCastle.Asn1.TeleTrust;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Asn1.X9;
using Org.BouncyCastle.Security;
+using Org.BouncyCastle.Utilities;
namespace Org.BouncyCastle.X509
{
@@ -17,43 +18,15 @@ namespace Org.BouncyCastle.X509
if (!id1.Algorithm.Equals(id2.Algorithm))
return false;
- Asn1Encodable p1 = id1.Parameters;
- Asn1Encodable p2 = id2.Parameters;
+ // TODO Java has a property to control whether absent parameters can match NULL parameters
+ {
+ if (IsAbsentOrEmptyParameters(id1.Parameters) && IsAbsentOrEmptyParameters(id2.Parameters))
+ return true;
+ }
- if (p1 == p2)
- return true;
- if (p1 == null)
- return p2.ToAsn1Object() is Asn1Null;
- if (p2 == null)
- return p1.ToAsn1Object() is Asn1Null;
-
- return p1.Equals(p2);
+ return Objects.Equals(id1.Parameters, id2.Parameters);
}
- internal static string GetSignatureName(AlgorithmIdentifier sigAlgID)
- {
- DerObjectIdentifier sigAlgOid = sigAlgID.Algorithm;
- Asn1Encodable parameters = sigAlgID.Parameters;
-
- if (parameters != null && !DerNull.Instance.Equals(parameters))
- {
- if (PkcsObjectIdentifiers.IdRsassaPss.Equals(sigAlgOid))
- {
- RsassaPssParameters rsaParams = RsassaPssParameters.GetInstance(parameters);
-
- return GetDigestAlgName(rsaParams.HashAlgorithm.Algorithm) + "withRSAandMGF1";
- }
- if (X9ObjectIdentifiers.ECDsaWithSha2.Equals(sigAlgOid))
- {
- Asn1Sequence ecDsaParams = Asn1Sequence.GetInstance(parameters);
-
- return GetDigestAlgName((DerObjectIdentifier)ecDsaParams[0]) + "withECDSA";
- }
- }
-
- return SignerUtilities.GetEncodingName(sigAlgOid) ?? sigAlgOid.GetID();
- }
-
/**
* Return the digest algorithm using one of the standard JCA string
* representations rather than the algorithm identifier (if possible).
@@ -103,7 +76,36 @@ namespace Org.BouncyCastle.X509
else
{
return digestAlgOID.GetID();
+ }
+ }
+
+ internal static string GetSignatureName(AlgorithmIdentifier sigAlgID)
+ {
+ DerObjectIdentifier sigAlgOid = sigAlgID.Algorithm;
+ Asn1Encodable parameters = sigAlgID.Parameters;
+
+ if (!IsAbsentOrEmptyParameters(parameters))
+ {
+ if (PkcsObjectIdentifiers.IdRsassaPss.Equals(sigAlgOid))
+ {
+ RsassaPssParameters rsaParams = RsassaPssParameters.GetInstance(parameters);
+
+ return GetDigestAlgName(rsaParams.HashAlgorithm.Algorithm) + "withRSAandMGF1";
+ }
+ if (X9ObjectIdentifiers.ECDsaWithSha2.Equals(sigAlgOid))
+ {
+ Asn1Sequence ecDsaParams = Asn1Sequence.GetInstance(parameters);
+
+ return GetDigestAlgName((DerObjectIdentifier)ecDsaParams[0]) + "withECDSA";
+ }
}
+
+ return SignerUtilities.GetEncodingName(sigAlgOid) ?? sigAlgOid.GetID();
}
+
+ private static bool IsAbsentOrEmptyParameters(Asn1Encodable parameters)
+ {
+ return parameters == null || DerNull.Instance.Equals(parameters);
+ }
}
}
|