⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x509certificate.java

📁 linux下编程用 编译软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
  public boolean hasUnsupportedCriticalExtension()  {    for (Iterator it = extensions.values().iterator(); it.hasNext(); )      {        Extension e = (Extension) it.next();        if (e.isCritical() && !e.isSupported())          return true;      }    return false;  }  public Set getCriticalExtensionOIDs()  {    HashSet s = new HashSet();    for (Iterator it = extensions.values().iterator(); it.hasNext(); )      {        Extension e = (Extension) it.next();        if (e.isCritical())          s.add(e.getOid().toString());      }    return Collections.unmodifiableSet(s);  }  public Set getNonCriticalExtensionOIDs()  {    HashSet s = new HashSet();    for (Iterator it = extensions.values().iterator(); it.hasNext(); )      {        Extension e = (Extension) it.next();        if (!e.isCritical())          s.add(e.getOid().toString());      }    return Collections.unmodifiableSet(s);  }  public byte[] getExtensionValue(String oid)  {    Extension e = getExtension(new OID(oid));    if (e != null)      {        return e.getValue().getEncoded();      }    return null;  }  // GnuPKIExtension method.  // -------------------------------------------------------------------------  public Extension getExtension(OID oid)  {    return (Extension) extensions.get(oid);  }  public Collection getExtensions()  {    return extensions.values();  }  // Certificate methods.  // -------------------------------------------------------------------------  public byte[] getEncoded() throws CertificateEncodingException  {    return (byte[]) encoded.clone();  }  public void verify(PublicKey key)    throws CertificateException, NoSuchAlgorithmException,           InvalidKeyException, NoSuchProviderException, SignatureException  {    Signature sig = Signature.getInstance(sigAlgId.toString());    doVerify(sig, key);  }  public void verify(PublicKey key, String provider)    throws CertificateException, NoSuchAlgorithmException,           InvalidKeyException, NoSuchProviderException, SignatureException  {    Signature sig = Signature.getInstance(sigAlgId.toString(), provider);    doVerify(sig, key);  }  public String toString()  {    StringWriter str = new StringWriter();    PrintWriter out = new PrintWriter(str);    out.println(X509Certificate.class.getName() + " {");    out.println("  TBSCertificate {");    out.println("    version = " + version + ";");    out.println("    serialNo = " + serialNo + ";");    out.println("    signature = {");    out.println("      algorithm = " + getSigAlgName() + ";");    out.print("      parameters =");    if (sigAlgVal != null)      {        out.println();        out.print(Util.hexDump(sigAlgVal, "        "));      }    else      {        out.println(" null;");      }    out.println("    }");    out.println("    issuer = " + issuer.getName() + ";");    out.println("    validity = {");    out.println("      notBefore = " + notBefore + ";");    out.println("      notAfter  = " + notAfter + ";");    out.println("    }");    out.println("    subject = " + subject.getName() + ";");    out.println("    subjectPublicKeyInfo = {");    out.println("      algorithm = " + subjectKey.getAlgorithm());    out.println("      key =");    out.print(Util.hexDump(subjectKey.getEncoded(), "        "));    out.println("    };");    out.println("    issuerUniqueId  = " + issuerUniqueId + ";");    out.println("    subjectUniqueId = " + subjectUniqueId + ";");    out.println("    extensions = {");    for (Iterator it = extensions.values().iterator(); it.hasNext(); )      {        out.println("      " + it.next());      }    out.println("    }");    out.println("  }");    out.println("  signatureAlgorithm = " + getSigAlgName() + ";");    out.println("  signatureValue =");    out.print(Util.hexDump(signature, "    "));    out.println("}");    return str.toString();  }  public PublicKey getPublicKey()  {    return subjectKey;  }  public boolean equals(Object other)  {    if (!(other instanceof X509Certificate))      return false;    try      {        if (other instanceof X509Certificate)          return Arrays.equals(encoded, ((X509Certificate) other).encoded);        byte[] enc = ((X509Certificate) other).getEncoded();        if (enc == null)          return false;        return Arrays.equals(encoded, enc);      }    catch (CertificateEncodingException cee)      {        return false;      }  }  // Own methods.  // ------------------------------------------------------------------------  /**   * Verify this certificate's signature.   */  private void doVerify(Signature sig, PublicKey key)    throws CertificateException, InvalidKeyException, SignatureException  {    logger.log (Component.X509, "verifying sig={0} key={1}",                new Object[] { sig, key });    sig.initVerify(key);    sig.update(tbsCertBytes);    if (!sig.verify(signature))      {        throw new CertificateException("signature not validated");      }  }  /**   * Parse a DER stream into an X.509 certificate.   *   * @param encoded The encoded bytes.   */  private void parse(InputStream encoded) throws Exception  {    DERReader der = new DERReader(encoded);    // Certificate ::= SEQUENCE {    DERValue cert = der.read();    logger.log (Component.X509, "start Certificate  len == {0}",                new Integer (cert.getLength()));    this.encoded = cert.getEncoded();    if (!cert.isConstructed())      {        throw new IOException("malformed Certificate");      }    // TBSCertificate ::= SEQUENCE {    DERValue tbsCert = der.read();    if (tbsCert.getValue() != DER.CONSTRUCTED_VALUE)      {        throw new IOException("malformed TBSCertificate");      }    tbsCertBytes = tbsCert.getEncoded();    logger.log (Component.X509, "start TBSCertificate  len == {0}",                new Integer (tbsCert.getLength()));    // Version ::= INTEGER [0] { v1(0), v2(1), v3(2) }    DERValue val = der.read();    if (val.getTagClass() == DER.CONTEXT && val.getTag() == 0)      {        version = ((BigInteger) der.read().getValue()).intValue() + 1;        val = der.read();      }    else      {        version = 1;      }    logger.log (Component.X509, "read version == {0}",                new Integer (version));    // SerialNumber ::= INTEGER    serialNo = (BigInteger) val.getValue();    logger.log (Component.X509, "read serial number == {0}", serialNo);    // AlgorithmIdentifier ::= SEQUENCE {    val = der.read();    if (!val.isConstructed())      {        throw new IOException("malformed AlgorithmIdentifier");      }    int certAlgLen = val.getLength();    logger.log (Component.X509, "start AlgorithmIdentifier  len == {0}",                new Integer (certAlgLen));    val = der.read();    //   algorithm    OBJECT IDENTIFIER,    algId = (OID) val.getValue();    logger.log (Component.X509, "read algorithm ID == {0}", algId);    //   parameters   ANY DEFINED BY algorithm OPTIONAL }    if (certAlgLen > val.getEncodedLength())      {        val = der.read();        if (val == null)          {            algVal = null;          }        else          {            algVal = val.getEncoded();            if (val.isConstructed())              encoded.skip(val.getLength());          }        logger.log (Component.X509, "read algorithm parameters == {0}", algVal);      }    // issuer   Name,    val = der.read();    issuer = new X500DistinguishedName(val.getEncoded());    der.skip(val.getLength());    logger.log (Component.X509, "read issuer == {0}", issuer);    // Validity ::= SEQUENCE {    //   notBefore   Time,    //   notAfter    Time }    if (!der.read().isConstructed())      {        throw new IOException("malformed Validity");      }    notBefore = (Date) der.read().getValue();    logger.log (Component.X509, "read notBefore == {0}", notBefore);    notAfter  = (Date) der.read().getValue();    logger.log (Component.X509, "read notAfter == {0}", notAfter);    // subject   Name,    val = der.read();    subject = new X500DistinguishedName(val.getEncoded());    der.skip(val.getLength());    logger.log (Component.X509, "read subject == {0}", subject);    // SubjectPublicKeyInfo ::= SEQUENCE {    //   algorithm         AlgorithmIdentifier,    //   subjectPublicKey  BIT STRING }    DERValue spki = der.read();    if (!spki.isConstructed())      {        throw new IOException("malformed SubjectPublicKeyInfo");      }    KeyFactory spkFac = KeyFactory.getInstance("X.509");    subjectKey = spkFac.generatePublic(new X509EncodedKeySpec(spki.getEncoded()));    der.skip(spki.getLength());    logger.log (Component.X509, "read subjectPublicKey == {0}", subjectKey);    val = der.read();    if (version >= 2 && val.getTagClass() != DER.UNIVERSAL && val.getTag() == 1)      {        byte[] b = (byte[]) val.getValue();        issuerUniqueId = new BitString(b, 1, b.length-1, b[0] & 0xFF);        logger.log (Component.X509, "read issuerUniqueId == {0}", issuerUniqueId);        val = der.read();      }    if (version >= 2 && val.getTagClass() != DER.UNIVERSAL && val.getTag() == 2)      {        byte[] b = (byte[]) val.getValue();        subjectUniqueId = new BitString(b, 1, b.length-1, b[0] & 0xFF);        logger.log (Component.X509, "read subjectUniqueId == {0}", subjectUniqueId);        val = der.read();      }    if (version >= 3 && val.getTagClass() != DER.UNIVERSAL && val.getTag() == 3)      {        val = der.read();        logger.log (Component.X509, "start Extensions  len == {0}",                    new Integer (val.getLength()));        int len = 0;        while (len < val.getLength())          {            DERValue ext = der.read();            logger.log (Component.X509, "start extension  len == {0}",                        new Integer (ext.getLength()));            Extension e = new Extension(ext.getEncoded());            extensions.put(e.getOid(), e);            der.skip(ext.getLength());            len += ext.getEncodedLength();            logger.log (Component.X509, "read extension {0} == {1}",                        new Object[] { e.getOid (), e });            logger.log (Component.X509, "count == {0}", new Integer (len));          }        val = der.read ();      }    logger.log (Component.X509, "read value {0}", val);    if (!val.isConstructed())      {        throw new CertificateException ("malformed AlgorithmIdentifier");      }    int sigAlgLen = val.getLength();    logger.log (Component.X509, "start AlgorithmIdentifier  len == {0}",                new Integer (sigAlgLen));    val = der.read();    sigAlgId = (OID) val.getValue();    logger.log (Component.X509, "read algorithm id == {0}", sigAlgId);    if (sigAlgLen > val.getEncodedLength())      {        val = der.read();        if (val.getValue() == null)          {            if (subjectKey instanceof DSAPublicKey)              {                AlgorithmParameters params =                  AlgorithmParameters.getInstance("DSA");                DSAParams dsap = ((DSAPublicKey) subjectKey).getParams();                DSAParameterSpec spec =                  new DSAParameterSpec(dsap.getP(), dsap.getQ(), dsap.getG());                params.init(spec);                sigAlgVal = params.getEncoded();              }          }        else          {            sigAlgVal = (byte[]) val.getEncoded();          }        if (val.isConstructed())          {            encoded.skip(val.getLength());          }        logger.log (Component.X509, "read parameters == {0}", sigAlgVal);      }    signature = ((BitString) der.read().getValue()).toByteArray();    logger.log (Component.X509, "read signature ==\n{0}", Util.hexDump(signature, ">>>> "));  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -