using System.Security.Cryptography.X509Certificates;
using System.Text;
+using Mono.Security;
+using Mono.Security.Cryptography;
+
namespace System.Security.Cryptography {
internal enum AsnDecodeStatus {
return SubjectKeyIdentifierExtension (multiLine);
// other known objects (i.e. supported structure) -
// but without any corresponding framework class
+ case Oid.oidSubjectAltName:
+ return SubjectAltName (multiLine);
case Oid.oidNetscapeCertType:
return NetscapeCertType (multiLine);
default:
// Indirectly (undocumented but) supported extensions
+ internal string SubjectAltName (bool multiLine)
+ {
+ if (_raw.Length < 5)
+ return "Information Not Available";
+
+ try {
+ ASN1 ex = new ASN1 (_raw);
+ StringBuilder sb = new StringBuilder ();
+ for (int i=0; i < ex.Count; i++) {
+ ASN1 el = ex [i];
+
+ string type = null;
+ string name = null;
+
+ switch (el.Tag) {
+ case 0x81:
+ type = "RFC822 Name=";
+ name = Encoding.ASCII.GetString (el.Value);
+ break;
+ case 0x82:
+ type = "DNS Name=";
+ name = Encoding.ASCII.GetString (el.Value);
+ break;
+ default:
+ type = String.Format ("Unknown ({0})=", el.Tag);
+ name = CryptoConvert.ToHex (el.Value);
+ break;
+ }
+
+ sb.Append (type);
+ sb.Append (name);
+ if (multiLine) {
+ sb.Append (Environment.NewLine);
+ } else if (i < ex.Count - 1) {
+ sb.Append (", ");
+ }
+ }
+ return sb.ToString ();
+ }
+ catch {
+ return String.Empty;
+ }
+ }
+
internal string NetscapeCertType (bool multiLine)
{
// 4 byte long, BITSTRING (0x03), Value length of 2
+2005-01-20 Sebastien Pouliot <sebastien@ximian.com>
+
+ * AsnEncodedData.cs: Added "internal" support for SubjectAltName
+ extension as it is required for SSL support.
+ * Oid.cs: Added Oid / FriendlyName definitions for SubjectAltName.
+
2005-01-17 Sebastien Pouliot <sebastien@ximian.com>
* AsnEncodedData.cs: Added more decoding/formatting code as this class
internal const string name3Des = "3des";
internal const string oidSha1 = "1.3.14.3.2.26";
internal const string nameSha1 = "sha1";
+ internal const string oidSubjectAltName = "2.5.29.17";
+ internal const string nameSubjectAltName = "Subject Alternative Name";
internal const string oidNetscapeCertType = "2.16.840.1.113730.1.1";
internal const string nameNetscapeCertType = "Netscape Cert Type";
return X509EnhancedKeyUsageExtension.friendlyName;
case X509SubjectKeyIdentifierExtension.oid:
return X509SubjectKeyIdentifierExtension.friendlyName;
+ case oidSubjectAltName:
+ return nameSubjectAltName;
case oidNetscapeCertType:
return nameNetscapeCertType;
case oidMd5:
return X509EnhancedKeyUsageExtension.oid;
case X509SubjectKeyIdentifierExtension.friendlyName:
return X509SubjectKeyIdentifierExtension.oid;
+ case nameSubjectAltName:
+ return oidSubjectAltName;
case nameNetscapeCertType:
return oidNetscapeCertType;
case nameMd5: