Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Baulig <martin.baulig@xamarin.com>2016-03-22 06:43:59 +0300
committerMartin Baulig <martin.baulig@xamarin.com>2016-03-24 02:47:05 +0300
commit204435045cb49d8d20a2e178c68523610fcc5dac (patch)
treeaa4d0b2816de6175360f2ff9316bc9a15c11802d /mcs/class/System/System.Security.Cryptography.X509Certificates
parent2ff8515937102492b2d24303e273bdda0bb2405c (diff)
[System]: Add private 'X500DistinguishedName' API to store the canonical encoding and use it for fast comparison.
Diffstat (limited to 'mcs/class/System/System.Security.Cryptography.X509Certificates')
-rw-r--r--mcs/class/System/System.Security.Cryptography.X509Certificates/X500DistinguishedName.cs25
1 files changed, 25 insertions, 0 deletions
diff --git a/mcs/class/System/System.Security.Cryptography.X509Certificates/X500DistinguishedName.cs b/mcs/class/System/System.Security.Cryptography.X509Certificates/X500DistinguishedName.cs
index 0681e9eb5d7..795f0d04b21 100644
--- a/mcs/class/System/System.Security.Cryptography.X509Certificates/X500DistinguishedName.cs
+++ b/mcs/class/System/System.Security.Cryptography.X509Certificates/X500DistinguishedName.cs
@@ -52,6 +52,7 @@ namespace System.Security.Cryptography.X509Certificates {
X500DistinguishedNameFlags.UseT61Encoding | X500DistinguishedNameFlags.ForceUTF8Encoding;
private string name;
+ private byte[] canonEncoding;
public X500DistinguishedName (AsnEncodedData encodedDistinguishedName)
@@ -122,6 +123,20 @@ namespace System.Security.Cryptography.X509Certificates {
name = distinguishedName.name;
}
+ internal X500DistinguishedName (byte[] encoded, byte[] canonEncoding, string name)
+ : this (encoded)
+ {
+ this.canonEncoding = canonEncoding;
+ this.name = name;
+
+ Oid = new Oid ();
+ RawData = encoded;
+ }
+
+ internal byte[] CanonicalEncoding {
+ get { return canonEncoding; }
+ }
+
public string Name {
get { return name; }
@@ -215,6 +230,16 @@ namespace System.Security.Cryptography.X509Certificates {
if (name2 == null)
return false;
+ if (name1.canonEncoding != null && name2.canonEncoding != null) {
+ if (name1.canonEncoding.Length != name2.canonEncoding.Length)
+ return false;
+ for (int i = 0; i < name1.canonEncoding.Length; i++) {
+ if (name1.canonEncoding[i] != name2.canonEncoding[2])
+ return false;
+ }
+ return true;
+ }
+
X500DistinguishedNameFlags flags = X500DistinguishedNameFlags.UseNewLines | X500DistinguishedNameFlags.DoNotUseQuotes;
string[] split = new string[] { Environment.NewLine };
string[] parts1 = name1.Decode (flags).Split (split, StringSplitOptions.RemoveEmptyEntries);