123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- #pragma warning disable
- using System;
- using System.Text;
- namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509
- {
- /**
- * Implementation of the RoleSyntax object as specified by the RFC3281.
- *
- * <pre>
- * RoleSyntax ::= SEQUENCE {
- * roleAuthority [0] GeneralNames OPTIONAL,
- * roleName [1] GeneralName
- * }
- * </pre>
- */
- public class RoleSyntax
- : Asn1Encodable
- {
- private readonly GeneralNames roleAuthority;
- private readonly GeneralName roleName;
- /**
- * RoleSyntax factory method.
- * @param obj the object used to construct an instance of <code>
- * RoleSyntax</code>. It must be an instance of <code>RoleSyntax
- * </code> or <code>Asn1Sequence</code>.
- * @return the instance of <code>RoleSyntax</code> built from the
- * supplied object.
- * @throws java.lang.ArgumentException if the object passed
- * to the factory is not an instance of <code>RoleSyntax</code> or
- * <code>Asn1Sequence</code>.
- */
- public static RoleSyntax GetInstance(
- object obj)
- {
- if (obj is RoleSyntax)
- return (RoleSyntax)obj;
- if (obj != null)
- return new RoleSyntax(Asn1Sequence.GetInstance(obj));
- return null;
- }
- /**
- * Constructor.
- * @param roleAuthority the role authority of this RoleSyntax.
- * @param roleName the role name of this RoleSyntax.
- */
- public RoleSyntax(
- GeneralNames roleAuthority,
- GeneralName roleName)
- {
- if (roleName == null
- || roleName.TagNo != GeneralName.UniformResourceIdentifier
- || ((IAsn1String) roleName.Name).GetString().Equals(""))
- {
- throw new ArgumentException("the role name MUST be non empty and MUST " +
- "use the URI option of GeneralName");
- }
- this.roleAuthority = roleAuthority;
- this.roleName = roleName;
- }
- /**
- * Constructor. Invoking this constructor is the same as invoking
- * <code>new RoleSyntax(null, roleName)</code>.
- * @param roleName the role name of this RoleSyntax.
- */
- public RoleSyntax(
- GeneralName roleName)
- : this(null, roleName)
- {
- }
- /**
- * Utility constructor. Takes a <code>string</code> argument representing
- * the role name, builds a <code>GeneralName</code> to hold the role name
- * and calls the constructor that takes a <code>GeneralName</code>.
- * @param roleName
- */
- public RoleSyntax(
- string roleName)
- : this(new GeneralName(GeneralName.UniformResourceIdentifier,
- (roleName == null)? "": roleName))
- {
- }
- /**
- * Constructor that builds an instance of <code>RoleSyntax</code> by
- * extracting the encoded elements from the <code>Asn1Sequence</code>
- * object supplied.
- * @param seq an instance of <code>Asn1Sequence</code> that holds
- * the encoded elements used to build this <code>RoleSyntax</code>.
- */
- private RoleSyntax(
- Asn1Sequence seq)
- {
- if (seq.Count < 1 || seq.Count > 2)
- {
- throw new ArgumentException("Bad sequence size: " + seq.Count);
- }
- for (int i = 0; i != seq.Count; i++)
- {
- Asn1TaggedObject taggedObject = Asn1TaggedObject.GetInstance(seq[i]);
- switch (taggedObject.TagNo)
- {
- case 0:
- roleAuthority = GeneralNames.GetInstance(taggedObject, false);
- break;
- case 1:
- roleName = GeneralName.GetInstance(taggedObject, true);
- break;
- default:
- throw new ArgumentException("Unknown tag in RoleSyntax");
- }
- }
- }
- /**
- * Gets the role authority of this RoleSyntax.
- * @return an instance of <code>GeneralNames</code> holding the
- * role authority of this RoleSyntax.
- */
- public GeneralNames RoleAuthority
- {
- get { return this.roleAuthority; }
- }
- /**
- * Gets the role name of this RoleSyntax.
- * @return an instance of <code>GeneralName</code> holding the
- * role name of this RoleSyntax.
- */
- public GeneralName RoleName
- {
- get { return this.roleName; }
- }
- /**
- * Gets the role name as a <code>java.lang.string</code> object.
- * @return the role name of this RoleSyntax represented as a
- * <code>string</code> object.
- */
- public string GetRoleNameAsString()
- {
- return ((IAsn1String) this.roleName.Name).GetString();
- }
- /**
- * Gets the role authority as a <code>string[]</code> object.
- * @return the role authority of this RoleSyntax represented as a
- * <code>string[]</code> array.
- */
- public string[] GetRoleAuthorityAsString()
- {
- if (roleAuthority == null)
- {
- return new string[0];
- }
- GeneralName[] names = roleAuthority.GetNames();
- string[] namesString = new string[names.Length];
- for(int i = 0; i < names.Length; i++)
- {
- Asn1Encodable asn1Value = names[i].Name;
- if (asn1Value is IAsn1String)
- {
- namesString[i] = ((IAsn1String) asn1Value).GetString();
- }
- else
- {
- namesString[i] = asn1Value.ToString();
- }
- }
- return namesString;
- }
- /**
- * Implementation of the method <code>ToAsn1Object</code> as
- * required by the superclass <code>ASN1Encodable</code>.
- *
- * <pre>
- * RoleSyntax ::= SEQUENCE {
- * roleAuthority [0] GeneralNames OPTIONAL,
- * roleName [1] GeneralName
- * }
- * </pre>
- */
- public override Asn1Object ToAsn1Object()
- {
- Asn1EncodableVector v = new Asn1EncodableVector();
- v.AddOptionalTagged(false, 0, roleAuthority);
- v.Add(new DerTaggedObject(true, 1, roleName));
- return new DerSequence(v);
- }
- public override string ToString()
- {
- StringBuilder buff = new StringBuilder("Name: " + this.GetRoleNameAsString() +
- " - Auth: ");
- if (this.roleAuthority == null || roleAuthority.GetNames().Length == 0)
- {
- buff.Append("N/A");
- }
- else
- {
- string[] names = this.GetRoleAuthorityAsString();
- buff.Append('[').Append(names[0]);
- for(int i = 1; i < names.Length; i++)
- {
- buff.Append(", ").Append(names[i]);
- }
- buff.Append(']');
- }
- return buff.ToString();
- }
- }
- }
- #pragma warning restore
- #endif
|