/**
   * An array of names indicating acceptable digest algorithms to use when signing. The value shall
   * be one of <b>SHA1</b>, <b>SHA256</b>, <b>SHA384</b>, <b>SHA512</b>, <b>RIPEMD160</b>. The
   * default value is implementation-specific.
   *
   * @return the digest method that shall be used by the signature handler
   */
  public List<String> getDigestMethod() {
    List<String> retval = null;
    COSArray fields = (COSArray) dictionary.getDictionaryObject(COSName.DIGEST_METHOD);

    if (fields != null) {
      List<String> actuals = new ArrayList<String>();
      for (int i = 0; i < fields.size(); i++) {
        String element = fields.getName(i);
        if (element != null) {
          if (element != null) {
            actuals.add(element);
          }
        }
      }
      retval = new COSArrayList(actuals, fields);
    }
    return retval;
  }
  /**
   * If <b>SubFilter</b> is not null and the {@link #isSubFilterRequired()} indicates this entry is
   * a required constraint, then the first matching encodings shall be used when signing; otherwise,
   * signing shall not take place. If {@link #isSubFilterRequired()} indicates that this is an
   * optional constraint, then the first matching encoding shall be used if it is available. If it
   * is not available, a different encoding may be used instead.
   *
   * @return the subfilter that shall be used by the signature handler
   */
  public List<String> getSubFilter() {
    List<String> retval = null;
    COSArray fields = (COSArray) dictionary.getDictionaryObject(COSName.SUBFILTER);

    if (fields != null) {
      List<String> actuals = new ArrayList<String>();
      for (int i = 0; i < fields.size(); i++) {
        String element = fields.getName(i);
        if (element != null) {
          if (element != null) {
            actuals.add(element);
          }
        }
      }
      retval = new COSArrayList(actuals, fields);
    }
    return retval;
  }