diff options
author | Martin Baulig <martin.baulig@xamarin.com> | 2016-03-22 06:43:59 +0300 |
---|---|---|
committer | Martin Baulig <martin.baulig@xamarin.com> | 2016-03-24 02:47:05 +0300 |
commit | 204435045cb49d8d20a2e178c68523610fcc5dac (patch) | |
tree | aa4d0b2816de6175360f2ff9316bc9a15c11802d /mcs/class/System/System.Security.Cryptography.X509Certificates | |
parent | 2ff8515937102492b2d24303e273bdda0bb2405c (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.cs | 25 |
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); |