package org.bouncycastle.jce.cert; import java.security.PublicKey; /** * This class represents the successful result of the PKIX certification path * validation algorithm. <br /> * <br /> * Instances of <code>PKIXCertPathValidatorResult</code> are returned by the * {@link CertPathValidator#validate validate} method of * <code>CertPathValidator</code> objects implementing the PKIX algorithm.<br /> * <br /> * All <code>PKIXCertPathValidatorResult</code> objects contain the valid * policy tree and subject public key resulting from the validation algorithm, * as well as a <code>TrustAnchor</code> describing the certification * authority (CA) that served as a trust anchor for the certification path.<br /> * <br /> * <b>Concurrent Access</b><br /> * <br /> * Unless otherwise specified, the methods defined in this class are not * thread-safe. Multiple threads that need to access a single object * concurrently should synchronize amongst themselves and provide the necessary * locking. Multiple threads each manipulating separate objects need not * synchronize. * * @see CertPathValidatorResult */ public class PKIXCertPathValidatorResult implements CertPathValidatorResult { private TrustAnchor trustAnchor; private PolicyNode policyTree; private PublicKey subjectPublicKey; /** * Creates an instance of <code>PKIXCertPathValidatorResult</code> * containing the specified parameters. * * @param trustAnchor * a <code>TrustAnchor</code> describing the CA that served as * a trust anchor for the certification path * @param policyTree * the immutable valid policy tree, or <code>null</code> if * there are no valid policies * @param subjectPublicKey * the public key of the subject * * @exception NullPointerException * if the <code>subjectPublicKey</code> or * <code>trustAnchor</code> parameters are * <code>null</code> */ public PKIXCertPathValidatorResult( TrustAnchor trustAnchor, PolicyNode policyTree, PublicKey subjectPublicKey) { if (subjectPublicKey == null) { throw new NullPointerException("subjectPublicKey must be non-null"); } if (trustAnchor == null) { throw new NullPointerException("trustAnchor must be non-null"); } this.trustAnchor = trustAnchor; this.policyTree = policyTree; this.subjectPublicKey = subjectPublicKey; } /** * Returns the <code>TrustAnchor</code> describing the CA that served as a * trust anchor for the certification path. * * @return the <code>TrustAnchor</code> (never <code>null</code>) */ public TrustAnchor getTrustAnchor() { return trustAnchor; } /** * Returns the root node of the valid policy tree resulting from the PKIX * certification path validation algorithm. The <code>PolicyNode</code> * object that is returned and any objects that it returns through public * methods are immutable.<br /> * <br /> * Most applications will not need to examine the valid policy tree. They * can achieve their policy processing goals by setting the policy-related * parameters in <code>PKIXParameters</code>. However, more sophisticated * applications, especially those that process policy qualifiers, may need * to traverse the valid policy tree using the * {@link PolicyNode#getParent PolicyNode.getParent} and * {@link PolicyNode#getChildren PolicyNode.getChildren} methods. * * @return the root node of the valid policy tree, or <code>null</code> if * there are no valid policies */ public PolicyNode getPolicyTree() { return policyTree; } /** * Returns the public key of the subject (target) of the certification path, * including any inherited public key parameters if applicable. * * @return the public key of the subject (never <code>null</code>) */ public PublicKey getPublicKey() { return subjectPublicKey; } /** * Returns a copy of this object. * * @return the copy */ public Object clone() { try { return super.clone(); } catch (CloneNotSupportedException ex) { throw new InternalError(ex.toString()); } } /** * Return a printable representation of this * <code>PKIXCertPathValidatorResult</code>. * * @return a <code>String</code> describing the contents of this * <code>PKIXCertPathValidatorResult</code> */ public String toString() { StringBuffer s = new StringBuffer(); s.append("PKIXCertPathValidatorResult: [ \n"); s.append(" Trust Anchor: ").append(getTrustAnchor()).append('\n'); s.append(" Policy Tree: ").append(getPolicyTree()).append('\n'); s.append(" Subject Public Key: ").append(getPublicKey()).append("\n]"); return s.toString(); } }