Ejemplo n.º 1
0
        public static void EdgeCaseEmptyFormat()
        {
            X500DistinguishedName dn = new X500DistinguishedName("");

            Assert.Equal(string.Empty, dn.Format(true));
            Assert.Equal(string.Empty, dn.Format(false));
        }
Ejemplo n.º 2
0
        public static void TestFormat()
        {
            byte[] encoding = "300e310c300a06035504031303466f6f".HexToByteArray();
            String s;

            X500DistinguishedName n = new X500DistinguishedName(encoding);

            s = n.Format(multiLine: false);
            Assert.Equal("CN=Foo", s);

            s = n.Format(multiLine: true);
            Assert.Equal("CN=Foo\r\n", s);
        }
Ejemplo n.º 3
0
        public static void TestFormat()
        {
            byte[] encoding = "300e310c300a06035504031303466f6f".HexToByteArray();
            String s;

            X500DistinguishedName n = new X500DistinguishedName(encoding);

            s = n.Format(multiLine: false);
            Assert.Equal("CN=Foo", s);

            s = n.Format(multiLine: true);
            Assert.Equal("CN=Foo\r\n", s);
        }
Ejemplo n.º 4
0
        public static void TestFormat(bool multiLine)
        {
            // The Issuer field from the Microsoft.com test cert.
            byte[] encoding = (
                "3077310B3009060355040613025553311D301B060355040A131453796D616E74" +
                "656320436F72706F726174696F6E311F301D060355040B131653796D616E7465" +
                "63205472757374204E6574776F726B312830260603550403131F53796D616E74" +
                "656320436C61737320332045562053534C204341202D204733").HexToByteArray();

            X500DistinguishedName name = new X500DistinguishedName(encoding);
            string formatted           = name.Format(multiLine);
            string expected;

            if (multiLine)
            {
                expected = string.Format(
                    "C=US{0}O=Symantec Corporation{0}OU=Symantec Trust Network{0}CN=Symantec Class 3 EV SSL CA - G3{0}",
                    Environment.NewLine);
            }
            else
            {
                expected = "C=US, O=Symantec Corporation, OU=Symantec Trust Network, CN=Symantec Class 3 EV SSL CA - G3";
            }

            Assert.Equal(expected, formatted);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Create certificate subject RDN selector instance.
        /// </summary>
        /// <param name="rdnList">List of expected RDNs. Special chars must be escaped in RDN value.</param>
        public CertificateSubjectRdnSelector(IList <CertificateSubjectRdn> rdnList)
        {
            if (rdnList == null)
            {
                throw new ArgumentNullException(nameof(rdnList));
            }

            if (rdnList.Count == 0)
            {
                throw new ArgumentException("RDN list cannot be empty.", nameof(rdnList));
            }

            foreach (CertificateSubjectRdn rdn in rdnList)
            {
                try
                {
                    X500DistinguishedName dname = new X500DistinguishedName(rdn.Oid + "=\"" + rdn.Value + "\"");
                    _rdnList.Add(dname.Format(false));
                }
                catch (Exception ex)
                {
                    throw new ArgumentException(string.Format("Rdn contains invalid Oid or Value. Oid: {0} Value: {1}", rdn.Oid, rdn.Value), ex);
                }
            }
        }
Ejemplo n.º 6
0
        private void Empty(X500DistinguishedName dn)
        {
            Assert.AreEqual(String.Empty, dn.Name, "Name");

            Assert.AreEqual(String.Empty, dn.Decode(X500DistinguishedNameFlags.None), "Decode(None)");
            Assert.AreEqual(String.Empty, dn.Decode(X500DistinguishedNameFlags.Reversed), "Decode(Reversed)");
            Assert.AreEqual(String.Empty, dn.Decode(X500DistinguishedNameFlags.UseSemicolons), "Decode(UseSemicolons)");
            Assert.AreEqual(String.Empty, dn.Decode(X500DistinguishedNameFlags.DoNotUsePlusSign), "Decode(DoNotUsePlusSign)");
            Assert.AreEqual(String.Empty, dn.Decode(X500DistinguishedNameFlags.DoNotUseQuotes), "Decode(DoNotUseQuotes)");
            Assert.AreEqual(String.Empty, dn.Decode(X500DistinguishedNameFlags.UseCommas), "Decode(UseCommas)");
            Assert.AreEqual(String.Empty, dn.Decode(X500DistinguishedNameFlags.UseNewLines), "Decode(UseNewLines)");
            Assert.AreEqual(String.Empty, dn.Decode(X500DistinguishedNameFlags.UseUTF8Encoding), "Decode(UseUTF8Encoding)");
            Assert.AreEqual(String.Empty, dn.Decode(X500DistinguishedNameFlags.UseT61Encoding), "Decode(UseT61Encoding)");
            Assert.AreEqual(String.Empty, dn.Decode(X500DistinguishedNameFlags.ForceUTF8Encoding), "Decode(ForceUTF8Encoding)");

            Assert.AreEqual(String.Empty, dn.Format(true), "Format(true)");
            Assert.AreEqual(String.Empty, dn.Format(false), "Format(false)");
        }
Ejemplo n.º 7
0
 public static X509Certificate2 LookupCertificateBySubjectDn(X500DistinguishedName subjectDn)
 {
     foreach (var entry in TheRootCertificates)
     {
         if (entry.Value.SubjectName.Decode(X500DistinguishedNameFlags.None).ToLower() == subjectDn.Decode(X500DistinguishedNameFlags.None).ToLower())
         {
             return(entry.Value);
         }
     }
     throw new ArgumentException("No certificate for subjectDn: " + subjectDn.Format(false));
 }
Ejemplo n.º 8
0
        private static List <string> GetRdnList(X500DistinguishedName dname)
        {
            string[] rdns = dname.Format(true).Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

            // trim values
            for (int i = 0; i < rdns.Length; i++)
            {
                rdns[i] = rdns[i].Trim();
            }

            return(new List <string>(rdns));
        }
Ejemplo n.º 9
0
        private void RsaIssuer(X500DistinguishedName dn)
        {
            Assert.AreEqual(name, dn.Name, "Name");
            Assert.AreEqual(97, dn.RawData.Length, "RawData");

            Assert.AreEqual(rname, dn.Decode(X500DistinguishedNameFlags.None), "Decode(None)");
            Assert.AreEqual(name, dn.Decode(X500DistinguishedNameFlags.Reversed), "Decode(Reversed)");
            Assert.AreEqual("C=US; O=\"RSA Data Security, Inc.\"; OU=Secure Server Certification Authority", dn.Decode(X500DistinguishedNameFlags.UseSemicolons), "Decode(UseSemicolons)");
            Assert.AreEqual(rname, dn.Decode(X500DistinguishedNameFlags.DoNotUsePlusSign), "Decode(DoNotUsePlusSign)");
            Assert.AreEqual("C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority", dn.Decode(X500DistinguishedNameFlags.DoNotUseQuotes), "Decode(DoNotUseQuotes)");
            Assert.AreEqual(rname, dn.Decode(X500DistinguishedNameFlags.UseCommas), "Decode(UseCommas)");
            string newline = String.Format("C=US{0}O=\"RSA Data Security, Inc.\"{0}OU=Secure Server Certification Authority", Environment.NewLine);

            Assert.AreEqual(newline, dn.Decode(X500DistinguishedNameFlags.UseNewLines), "Decode(UseNewLines)");
            Assert.AreEqual(rname, dn.Decode(X500DistinguishedNameFlags.UseUTF8Encoding), "Decode(UseUTF8Encoding)");
            Assert.AreEqual(rname, dn.Decode(X500DistinguishedNameFlags.UseT61Encoding), "Decode(UseT61Encoding)");
            Assert.AreEqual(rname, dn.Decode(X500DistinguishedNameFlags.ForceUTF8Encoding), "Decode(ForceUTF8Encoding)");

            Assert.AreEqual(newline + Environment.NewLine, dn.Format(true), "Format(true)");
            Assert.AreEqual(rname, dn.Format(false), "Format(false)");
        }
        private static string ObtainCommonName(X500DistinguishedName distinguishedName)
        {
            const string prefix = "CN=";

            foreach (var value in distinguishedName.Format(true).Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
            {
                if (!value.StartsWith(prefix))
                {
                    continue;
                }

                return(value.Remove(0, prefix.Length));
            }

            return(null);
        }
Ejemplo n.º 11
0
        private static void ProcessTestCase(SimpleEncoderTestCase testCase, X500DistinguishedName dn)
        {
            // The simple encoding test is "does it output the expected text?", then
            // we'll move on to the exact bytes.
            Assert.Equal(testCase.GetNormalizedValue(), dn.Format(false));

            string expectedHex;

            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                expectedHex = testCase.GetBmpEncoding() ?? testCase.GetPreferredEncoding();
            }
            else
            {
                expectedHex = testCase.GetPreferredEncoding();
            }

            string actualHex = dn.RawData.ByteArrayToHex();

            Assert.Equal(expectedHex, actualHex);
        }
Ejemplo n.º 12
0
            public static string getBestName(X500DistinguishedName x500DN)
            {
                // Break the DN into parts
                var           DNParts = ParseX500Subject(x500DN.Format(true));
                List <string> names;

                if (DNParts.TryGetValue("CN", out names))
                {
                    // Return the first CN found
                    return(names[0]);
                }
                else
                {
                    if (DNParts.TryGetValue("OU", out names))
                    {
                        return(names[0]);
                    }
                }
                // Else give up and return nothing
                return("");
            }
Ejemplo n.º 13
0
        private static void VerifySeparatorProcessing(X500DistinguishedNameFlags flags)
        {
            const string input = "CN=a, O=b; OU=c\r L=d\n S=e";

            // No separator flags: , and ; => CN, O, OU
            const string withNoFlags = "CN=a, O=b, OU=\"c\r L=d\n S=e\"";
            // UseNewlines: \r and \n => CN, L, S
            const string withNewlines = "CN=\"a, O=b; OU=c\", L=d, S=e";
            // UseCommas: , => CN, O
            const string withCommas = "CN=a, O=\"b; OU=c\r L=d\n S=e\"";
            // UseSemicolons: ; => CN, OU
            const string withSemicolons = "CN=\"a, O=b\", OU=\"c\r L=d\n S=e\"";

            string expected;

            // Semicolons, if specified, always wins.
            // then commas, if specified, wins.
            // then newlines, if specified is valid.
            // Specifying nothing at all is (for some reason) both commas and semicolons.
            if ((flags & X500DistinguishedNameFlags.UseSemicolons) != 0)
            {
                expected = withSemicolons;
            }
            else if ((flags & X500DistinguishedNameFlags.UseCommas) != 0)
            {
                expected = withCommas;
            }
            else if ((flags & X500DistinguishedNameFlags.UseNewLines) != 0)
            {
                expected = withNewlines;
            }
            else
            {
                expected = withNoFlags;
            }

            X500DistinguishedName dn = new X500DistinguishedName(input, flags);

            Assert.Equal(expected, dn.Format(false));
        }
Ejemplo n.º 14
0
        public static void TestFormat(bool multiLine)
        {
            // The Issuer field from the Microsoft.com test cert.
            byte[] encoding = (
                "3077310B3009060355040613025553311D301B060355040A131453796D616E74" +
                "656320436F72706F726174696F6E311F301D060355040B131653796D616E7465" +
                "63205472757374204E6574776F726B312830260603550403131F53796D616E74" +
                "656320436C61737320332045562053534C204341202D204733").HexToByteArray();

            X500DistinguishedName name = new X500DistinguishedName(encoding);
            string formatted = name.Format(multiLine);
            string expected;

            if (multiLine)
            {
                expected = string.Format(
                    "C=US{0}O=Symantec Corporation{0}OU=Symantec Trust Network{0}CN=Symantec Class 3 EV SSL CA - G3{0}",
                    Environment.NewLine);
            }
            else
            {
                expected = "C=US, O=Symantec Corporation, OU=Symantec Trust Network, CN=Symantec Class 3 EV SSL CA - G3";
            }

            Assert.Equal(expected, formatted);
        }
Ejemplo n.º 15
0
 static string FormatCertificateDistinguishedName(X500DistinguishedName name)
 {
     return(string.Join("\n    ", name.Format(true).Split('\n').Where(line => line.Length > 0).Reverse().ToArray()));
 }
Ejemplo n.º 16
0
 public X509Certificate2 CreateMutualAuthenticationX509(X500DistinguishedName fullSubject, DateTimeOffset validFrom, DateTimeOffset expires)
 {
     return CreateMutualAuthenticationX509(fullSubject.Format(false), validFrom, expires);
 }