gt:             else if (s.size() == 2)
context: package org.minicastle.asn1.x509;
  
  import org.minicastle.asn1.ASN1Encodable;
  import org.minicastle.asn1.ASN1EncodableVector;
  import org.minicastle.asn1.ASN1OctetString;
  import org.minicastle.asn1.ASN1Sequence;
  import org.minicastle.asn1.ASN1TaggedObject;
  import org.minicastle.asn1.DERBoolean;
  import org.minicastle.asn1.DERObject;
  import org.minicastle.asn1.DERObjectIdentifier;
  import org.minicastle.asn1.DERSequence;
  
  import java.util.Enumeration;
  import java.util.Hashtable;
  import java.util.Vector;
  
  public class X509Extensions
      extends ASN1Encodable
  {
      /**
       * Subject Directory Attributes
       */
      public static final DERObjectIdentifier SubjectDirectoryAttributes = new DERObjectIdentifier("2.5.29.9");
      
      /**
       * Subject Key Identifier 
       */
      public static final DERObjectIdentifier SubjectKeyIdentifier = new DERObjectIdentifier("2.5.29.14");
  
      /**
       * Key Usage 
       */
      public static final DERObjectIdentifier KeyUsage = new DERObjectIdentifier("2.5.29.15");
  
      /**
       * Private Key Usage Period 
       */
      public static final DERObjectIdentifier PrivateKeyUsagePeriod = new DERObjectIdentifier("2.5.29.16");
  
      /**
       * Subject Alternative Name 
       */
      public static final DERObjectIdentifier SubjectAlternativeName = new DERObjectIdentifier("2.5.29.17");
  
      /**
       * Issuer Alternative Name 
       */
      public static final DERObjectIdentifier IssuerAlternativeName = new DERObjectIdentifier("2.5.29.18");
  
      /**
       * Basic Constraints 
       */
      public static final DERObjectIdentifier BasicConstraints = new DERObjectIdentifier("2.5.29.19");
  
      /**
       * CRL Number 
       */
      public static final DERObjectIdentifier CRLNumber = new DERObjectIdentifier("2.5.29.20");
  
      /**
       * Reason code 
       */
      public static final DERObjectIdentifier ReasonCode = new DERObjectIdentifier("2.5.29.21");
  
      /**
       * Hold Instruction Code 
       */
      public static final DERObjectIdentifier InstructionCode = new DERObjectIdentifier("2.5.29.23");
  
      /**
       * Invalidity Date 
       */
      public static final DERObjectIdentifier InvalidityDate = new DERObjectIdentifier("2.5.29.24");
  
      /**
       * Delta CRL indicator 
       */
      public static final DERObjectIdentifier DeltaCRLIndicator = new DERObjectIdentifier("2.5.29.27");
  
      /**
       * Issuing Distribution Point 
       */
      public static final DERObjectIdentifier IssuingDistributionPoint = new DERObjectIdentifier("2.5.29.28");
  
      /**
       * Certificate Issuer 
       */
      public static final DERObjectIdentifier CertificateIssuer = new DERObjectIdentifier("2.5.29.29");
  
      /**
       * Name Constraints 
       */
      public static final DERObjectIdentifier NameConstraints = new DERObjectIdentifier("2.5.29.30");
  
      /**
       * CRL Distribution Points 
       */
      public static final DERObjectIdentifier CRLDistributionPoints = new DERObjectIdentifier("2.5.29.31");
  
      /**
       * Certificate Policies 
       */
      public static final DERObjectIdentifier CertificatePolicies = new DERObjectIdentifier("2.5.29.32");
  
      /**
       * Policy Mappings 
       */
      public static final DERObjectIdentifier PolicyMappings = new DERObjectIdentifier("2.5.29.33");
  
      /**
       * Authority Key Identifier 
       */
      public static final DERObjectIdentifier AuthorityKeyIdentifier = new DERObjectIdentifier("2.5.29.35");
  
      /**
       * Policy Constraints 
       */
      public static final DERObjectIdentifier PolicyConstraints = new DERObjectIdentifier("2.5.29.36");
  
      /**
       * Extended Key Usage 
       */
      public static final DERObjectIdentifier ExtendedKeyUsage = new DERObjectIdentifier("2.5.29.37");
  
      /**
       * Freshest CRL
       */
      public static final DERObjectIdentifier FreshestCRL = new DERObjectIdentifier("2.5.29.46");
       
      /**
       * Inhibit Any Policy
       */
      public static final DERObjectIdentifier InhibitAnyPolicy = new DERObjectIdentifier("2.5.29.54");
  
      /**
       * Authority Info Access
       */
      public static final DERObjectIdentifier AuthorityInfoAccess = new DERObjectIdentifier("1.3.6.1.5.5.7.1.1");
  
      /**
       * Subject Info Access
       */
      public static final DERObjectIdentifier SubjectInfoAccess = new DERObjectIdentifier("1.3.6.1.5.5.7.1.11");
      
      /**
       * Logo Type
       */
      public static final DERObjectIdentifier LogoType = new DERObjectIdentifier("1.3.6.1.5.5.7.1.12");
  
      /**
       * BiometricInfo
       */
      public static final DERObjectIdentifier BiometricInfo = new DERObjectIdentifier("1.3.6.1.5.5.7.1.2");
      
      /**
       * QCStatements
       */
      public static final DERObjectIdentifier QCStatements = new DERObjectIdentifier("1.3.6.1.5.5.7.1.3");
  
      /**
       * Audit identity extension in attribute certificates.
       */
      public static final DERObjectIdentifier AuditIdentity = new DERObjectIdentifier("1.3.6.1.5.5.7.1.4");
      
      /**
       * NoRevAvail extension in attribute certificates.
       */
      public static final DERObjectIdentifier NoRevAvail = new DERObjectIdentifier("2.5.29.56");
  
      /**
       * TargetInformation extension in attribute certificates.
       */
      public static final DERObjectIdentifier TargetInformation = new DERObjectIdentifier("2.5.29.55");
      
      private Hashtable               extensions = new Hashtable();
      private Vector                  ordering = new Vector();
  
      public static X509Extensions getInstance(
          ASN1TaggedObject obj,
          boolean          explicit)
      {
          return getInstance(ASN1Sequence.getInstance(obj, explicit));
      }
  
      public static X509Extensions getInstance(
          Object  obj)
      {
          if (obj == null || obj instanceof X509Extensions)
          {
              return (X509Extensions)obj;
          }
  
          if (obj instanceof ASN1Sequence)
          {
              return new X509Extensions((ASN1Sequence)obj);
          }
  
          if (obj instanceof ASN1TaggedObject)
          {
              return getInstance(((ASN1TaggedObject)obj).getObject());
          }
  
          throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
      }
  
      /**
       * Constructor from ASN1Sequence.
       *
       * the extensions are a list of constructed sequences, either with (OID, OctetString) or (OID, Boolean, OctetString)
       */
      public X509Extensions(
          ASN1Sequence  seq)
      {
          Enumeration e = seq.getObjects();
  
          while (e.hasMoreElements())
          {
              ASN1Sequence            s = ASN1Sequence.getInstance(e.nextElement());
  
              if (s.size() == 3)
              {
                  extensions.put(s.getObjectAt(0), new X509Extension(DERBoolean.getInstance(s.getObjectAt(1)), ASN1OctetString.getInstance(s.getObjectAt(2))));
              }
  