Xuelei, Thanks for the comments.
On 5/23/12 2:13 AM, Xuelei Fan wrote: > C1. flexibility of the API, maybe too later > > It may be too later, but I was wondering we may be able to consider the > CertPathBuilder/CertPathValidator spec changes a little more. > > There are two types of cert path checker, one is specified by > PKIXParameters.addCertPathChecker() explicit; the other one is enabled > by the provider implicit, as the pre-defined checkers, including the > revocation checker, the certificate basic constraints checker, the > algorithm constraints checker in PKIX provider, etc. > > Except the revocation checker, we may want to expose other pre-defined > checker in the future. For example, expose the algorithm constraints > checker. > > So I was wondering, maybe it is more flexible to change the new API of > CertPathBuilder from > public final CertPathChecker getRevocationChecker() > > to > public final List<CertPathChecker> getDefaultCheckers() I did consider something like this during development: public CertPathChecker getCertPathChecker(String type) where "type" would indicate what type of checker you wanted, ex: "Revocation", "AlgorithmConstraints". In the end I decided not to do that. If we find that it is desirable in the future to expose more CertPathCheckers, then we could easily add a method like the above -- but I don't feel it is necessary yet. > C2. stateless or not? > > For the new API, > public final CertPathChecker getRevocationChecker() > > It is not defined whether the update on the return value will impact the > behaviors of CertPathBuilder/CertPathValidator. In another words, is > the return value a reference or a cloned object? > > I think it is a cloned (or new) object but not a reference. it would be > better to describe it in the spec. It should always be a new object I think. Let me think about it a bit more and I will make that clarification. > C3. Minor comments on PKIXCertPathChecker.java > > It would be nice to add @Override to init(), > isForwardCheckingSupported() and check(Certificate, Collection<String>) > so that the compilers will help to check the declaration. Good point, will fix. It does not apply to check(Certificate, Collection<String>) though, since that is not a method of CertPathChecker. > C4. Very minor comments on package.html > Do you want to add OCSP RFC to the "Related Documentation" section? I don't think it's necessary since it is already referenced in the package specification. I actually think the reference to 5280 is redundant but I'll leave it alone. > C5. the interactions between PKIXRevocationChecker and > PKIXParameters.isRevocationEnabled(). > > We may have two types of PKIXRevocationChecker instances. One is the > default revocation checker, which may be got from > CertPathBuilder.getRevocationChecker() (just a maybe, may be not > retrievable) . Another one is the non-default revocation checker, which > is set by PKIXParameters.addCertPathChecker(). > > According to the spec, PKIXParameters.isRevocationEnabled() should only > impact the default revocation checker, but not the non-default > revocation checker. > > PKIXParameters.isRevocationEnabled() > ------------------------------------------------------------- > | true | false > ------------------------------------------------------------- > default revo checker | enabled | disabled > ------------------------------------------------------------- > non-default revo checker | enabled | enabled > ------------------------------------------------------------- > > That's OK. From the implementation, it seems that the non-default > revocation checker will override the default revocation checker. I think > we may need a description about the behavior. Otherwise, we may need to > use both PKIXParameters.isRevocationEnabled() and the non-default > revocation checker. > > In the class spec of PKIXRevocationChecker, it says, "When supplying a > revocation checker in this manner, do not enable the default revocation > checking mechanism (by calling {@link > PKIXParameters#setRevocationEnabled}." Oops, good catch. That sentence is no longer correct. If you add a PKIXRevocationChecker to your PKIXParameters, that's what is going to be used to check revocation, regardless of the setting of the PKIXParameters.isRevocationEnabled flag. > But it does not define the > behaviors about what happen if the default revocation checking mechanism > is enabled. As the default revocation checking mechanism is enabled by > default (see PKIXParameters.setRevocationEnabled(boolean)), if we do not > want to define the above behaviors, we must call the following two > methods in couple: > PKIXParameters.setRevocationEnabled(false); > PKIXParameters.addCertPathChecker(PKIXRevocationChecker); > > Otherwise, the behaviors are not defined. Right, I did not want the caller to have to call PKIXParameters.setRevocationEnabled(false); - it is too confusing. Some clarifications are in order - will work on that. > I will try to look into other update tomorrow. Ok, thanks. --Sean