Beispiel #1
0
  /**
   * dump a DER object as a formatted string with indentation
   *
   * @param obj the DERObject to be dumped out.
   */
  static void _dumpAsString(String indent, boolean verbose, DERObject obj, StringBuffer buf) {
    String nl = System.getProperty("line.separator");
    if (obj instanceof ASN1Sequence) {
      Enumeration e = ((ASN1Sequence) obj).getObjects();
      String tab = indent + TAB;

      buf.append(indent);
      if (obj instanceof BERSequence) {
        buf.append("BER Sequence");
      } else if (obj instanceof DERSequence) {
        buf.append("DER Sequence");
      } else {
        buf.append("Sequence");
      }

      buf.append(nl);

      while (e.hasMoreElements()) {
        Object o = e.nextElement();

        if (o == null || o.equals(new DERNull())) {
          buf.append(tab);
          buf.append("NULL");
          buf.append(nl);
        } else if (o instanceof DERObject) {
          _dumpAsString(tab, verbose, (DERObject) o, buf);
        } else {
          _dumpAsString(tab, verbose, ((DEREncodable) o).getDERObject(), buf);
        }
      }
    } else if (obj instanceof DERTaggedObject) {
      String tab = indent + TAB;

      buf.append(indent);
      if (obj instanceof BERTaggedObject) {
        buf.append("BER Tagged [");
      } else {
        buf.append("Tagged [");
      }

      DERTaggedObject o = (DERTaggedObject) obj;

      buf.append(Integer.toString(o.getTagNo()));
      buf.append(']');

      if (!o.isExplicit()) {
        buf.append(" IMPLICIT ");
      }

      buf.append(nl);

      if (o.isEmpty()) {
        buf.append(tab);
        buf.append("EMPTY");
        buf.append(nl);
      } else {
        _dumpAsString(tab, verbose, o.getObject(), buf);
      }
    } else if (obj instanceof BERSet) {
      Enumeration e = ((ASN1Set) obj).getObjects();
      String tab = indent + TAB;

      buf.append(indent);
      buf.append("BER Set");
      buf.append(nl);

      while (e.hasMoreElements()) {
        Object o = e.nextElement();

        if (o == null) {
          buf.append(tab);
          buf.append("NULL");
          buf.append(nl);
        } else if (o instanceof DERObject) {
          _dumpAsString(tab, verbose, (DERObject) o, buf);
        } else {
          _dumpAsString(tab, verbose, ((DEREncodable) o).getDERObject(), buf);
        }
      }
    } else if (obj instanceof DERSet) {
      Enumeration e = ((ASN1Set) obj).getObjects();
      String tab = indent + TAB;

      buf.append(indent);
      buf.append("DER Set");
      buf.append(nl);

      while (e.hasMoreElements()) {
        Object o = e.nextElement();

        if (o == null) {
          buf.append(tab);
          buf.append("NULL");
          buf.append(nl);
        } else if (o instanceof DERObject) {
          _dumpAsString(tab, verbose, (DERObject) o, buf);
        } else {
          _dumpAsString(tab, verbose, ((DEREncodable) o).getDERObject(), buf);
        }
      }
    } else if (obj instanceof DERObjectIdentifier) {
      buf.append(indent + "ObjectIdentifier(" + ((DERObjectIdentifier) obj).getId() + ")" + nl);
    } else if (obj instanceof DERBoolean) {
      buf.append(indent + "Boolean(" + ((DERBoolean) obj).isTrue() + ")" + nl);
    } else if (obj instanceof DERInteger) {
      buf.append(indent + "Integer(" + ((DERInteger) obj).getValue() + ")" + nl);
    } else if (obj instanceof BERConstructedOctetString) {
      ASN1OctetString oct = (ASN1OctetString) obj;
      buf.append(indent + "BER Constructed Octet String" + "[" + oct.getOctets().length + "] ");
      if (verbose) {
        buf.append(dumpBinaryDataAsString(indent, oct.getOctets()));
      } else {
        buf.append(nl);
      }
    } else if (obj instanceof DEROctetString) {
      ASN1OctetString oct = (ASN1OctetString) obj;
      buf.append(indent + "DER Octet String" + "[" + oct.getOctets().length + "] ");
      if (verbose) {
        buf.append(dumpBinaryDataAsString(indent, oct.getOctets()));
      } else {
        buf.append(nl);
      }
    } else if (obj instanceof DERBitString) {
      DERBitString bt = (DERBitString) obj;
      buf.append(
          indent + "DER Bit String" + "[" + bt.getBytes().length + ", " + bt.getPadBits() + "] ");
      if (verbose) {
        buf.append(dumpBinaryDataAsString(indent, bt.getBytes()));
      } else {
        buf.append(nl);
      }
    } else if (obj instanceof DERIA5String) {
      buf.append(indent + "IA5String(" + ((DERIA5String) obj).getString() + ") " + nl);
    } else if (obj instanceof DERUTF8String) {
      buf.append(indent + "UTF8String(" + ((DERUTF8String) obj).getString() + ") " + nl);
    } else if (obj instanceof DERPrintableString) {
      buf.append(indent + "PrintableString(" + ((DERPrintableString) obj).getString() + ") " + nl);
    } else if (obj instanceof DERVisibleString) {
      buf.append(indent + "VisibleString(" + ((DERVisibleString) obj).getString() + ") " + nl);
    } else if (obj instanceof DERBMPString) {
      buf.append(indent + "BMPString(" + ((DERBMPString) obj).getString() + ") " + nl);
    } else if (obj instanceof DERT61String) {
      buf.append(indent + "T61String(" + ((DERT61String) obj).getString() + ") " + nl);
    } else if (obj instanceof DERUTCTime) {
      buf.append(indent + "UTCTime(" + ((DERUTCTime) obj).getTime() + ") " + nl);
    } else if (obj instanceof DERGeneralizedTime) {
      buf.append(indent + "GeneralizedTime(" + ((DERGeneralizedTime) obj).getTime() + ") " + nl);
    } else if (obj instanceof DERUnknownTag) {
      buf.append(
          indent
              + "Unknown "
              + Integer.toString(((DERUnknownTag) obj).getTag(), 16)
              + " "
              + new String(Hex.encode(((DERUnknownTag) obj).getData()))
              + nl);
    } else if (obj instanceof BERApplicationSpecific) {
      buf.append(outputApplicationSpecific("BER", indent, verbose, obj, nl));
    } else if (obj instanceof DERApplicationSpecific) {
      buf.append(outputApplicationSpecific("DER", indent, verbose, obj, nl));
    } else if (obj instanceof DEREnumerated) {
      DEREnumerated en = (DEREnumerated) obj;
      buf.append(indent + "DER Enumerated(" + en.getValue() + ")" + nl);
    } else if (obj instanceof DERExternal) {
      DERExternal ext = (DERExternal) obj;
      buf.append(indent + "External " + nl);
      String tab = indent + TAB;
      if (ext.getDirectReference() != null) {
        buf.append(tab + "Direct Reference: " + ext.getDirectReference().getId() + nl);
      }
      if (ext.getIndirectReference() != null) {
        buf.append(tab + "Indirect Reference: " + ext.getIndirectReference().toString() + nl);
      }
      if (ext.getDataValueDescriptor() != null) {
        _dumpAsString(tab, verbose, ext.getDataValueDescriptor(), buf);
      }
      buf.append(tab + "Encoding: " + ext.getEncoding() + nl);
      _dumpAsString(tab, verbose, ext.getExternalContent(), buf);
    } else {
      buf.append(indent + obj.toString() + nl);
    }
  }
Beispiel #2
0
 public NetscapeCertType(DERBitString usage) {
   super(usage.getBytes(), usage.getPadBits());
 }