reason_mask: Эта переменная содержит набор причин отзыва, поддерживаемых CRL и дельта-CRL, обработанными до сих пор.
interim_reasons_mask: Содержит набор причин отзыва, поддерживаемых CRL или дельта-CRL, которые в настоящее время обрабатываются.
Цель этой обработки, посколькуЯ могу сказать, это собрать CRL, чтобы поддержать как можно больше причин отзыва.Поэтому добавление текущего CRL в список будет затруднительно только в том случае, если он поддерживает какие-либо причины отзыва, которые не были поддержаны ни одним из предыдущих CRL.
Если ваш reasons_mask
содержит все true
, то предыдущие CRLохватил все причины отзыва, или один не дает конкретных причин отзыва, которые он поддерживает, заставляя установить специальное значение all-reasons
(все флаги true), что означает, что не нужно объяснять дальнейшие причины отзыва, поэтому он непотрудитесь проверить дальше.
sun.security.provider.certpath.DistributionPointFetcher.java
...
// compute interim reasons mask
boolean[] interimReasonsMask = new boolean[9];
ReasonFlags reasons = null;
if (idpExt != null) {
reasons = (ReasonFlags) idpExt.get(IssuingDistributionPointExtension.REASONS);
}
boolean[] pointReasonFlags = point.getReasonFlags();
if (reasons != null) {
if (pointReasonFlags != null) {
// set interim reasons mask to the intersection of
// reasons in the DP and onlySomeReasons in the IDP
boolean[] idpReasonFlags = reasons.getFlags();
for (int i = 0; i < interimReasonsMask.length; i++) {
interimReasonsMask[i] = (i < idpReasonFlags.length && idpReasonFlags[i])
&& (i < pointReasonFlags.length && pointReasonFlags[i]);
}
} else {
// set interim reasons mask to the value of
// onlySomeReasons in the IDP (and clone it since we may
// modify it)
interimReasonsMask = reasons.getFlags().clone();
}
} else if (idpExt == null || reasons == null) {
if (pointReasonFlags != null) {
// set interim reasons mask to the value of DP reasons
interimReasonsMask = pointReasonFlags.clone();
} else {
// set interim reasons mask to the special value all-reasons
Arrays.fill(interimReasonsMask, true); // ### SEE HERE ###
}
}
// verify that interim reasons mask includes one or more reasons
// not included in the reasons mask
boolean oneOrMore = false;
for (int i = 0; i < interimReasonsMask.length && !oneOrMore; i++) {
if (interimReasonsMask[i] && !(i < reasonsMask.length && reasonsMask[i])) {
oneOrMore = true;
}
}
if (!oneOrMore) {
return false;
}
...