Вычисляем переменную «interim_reasons_mask» для данного СОС следующим образом:
Если последовательность «issuingDistributionPoint» в субполе «crlExtensions» представлена и она включает субпоследовательность «onlySomeReasons», а также последовательность «DistributionPoint» содержит субпоследовательность «reasons», тогда присваиваем переменной «interim_reasons_mask» значение в точке пересечения причин из последовательности «DistributionPoint» и из субпоследовательности «onlySomeReasons» последовательности «issuingDistributionPoint».
Если последовательность «issuingDistributionPoint» в субполе «crlExtensions» включает субпоследовательность «onlySomeReasons», а последовательность «DistributionPoint» не содержит субпоследовательность «reasons», тогда присваиваем переменной «interim_reasons_mask» значение, содержащееся в субпоследовательности «onlySomeReasons» последовательности «issuingDistributionPoint».
Если последовательность «issuingDistributionPoint» в субполе «crlExtensions» не представлена или она не включает субпоследовательность «onlySomeReasons», но последовательность «DistributionPoint» содержит субпоследовательность «reasons», тогда присваиваем переменной «interim_reasons_mask» значение, содержащееся в субпоследовательности «reasons» последовательности «DistributionPoint».
Если последовательность «issuingDistributionPoint» в субполе «crlExtensions» не представлена или она не включает субпоследовательность «onlySomeReasons» и последовательность «DistributionPoint» не содержит субпоследовательность «reasons», тогда присваиваем переменной «interim_reasons_mask» специальное значение «all-reasons».
Проверяем, что переменная «interim_reasons_mask» включает одну или несколько причин, которые не содержатся в переменной «reasons_mask».
Получаем и подтверждаем подлинность маршрута сертификации до издателя заполняемого СОС. ДЗУЦ для МС должен быть, в обязательном порядке, тем же самым, как и ДЗУЦ, используемый при подтверждении подлинности целевого сертификата. Если в сертификате издателя СОС представлено субполе «keyUsage», то проверяем, что флаг «cRLSign» установлен.
Подтверждаем подлинность подписи в заполняемом СОС, используя для этого открытый ключ, подлинность которого была подтверждена в операции (f).
Если значение «use-deltas» установлено, то подтверждаем подлинность подписи в усечённом СОС, используя для этого открытый ключ, подлинность которого была подтверждена в операции (f).
Если значение «use-deltas» установлено, то осуществляем поиск сертификата в усечённом СОС. Если запись найдена и она совпадает с издателем сертификата и его серийным номером (5.3.3), то присваиваем значение переменной «cert_status» с указанием причины следующим образом:
Если код причины отзыва в расширении записи СОС представлен, то присваиваем переменной «cert_status» значение этого кода причины отзыва из расширения записи СОС.
Если код причины отзыва в расширении записи СОС не представлен, то присваиваем переменной «cert_status» значение «unspecified».
Если переменная «cert_status» имеет значение «UNREVOKED», то осуществляем поиск сертификата в заполняемом СОС. Если запись найдена и она совпадает с издателем сертификата и его серийным номером (5.3.3), то присваиваем значение переменной «cert_status» с указанием причины, как это было сделано в операции (i).
Если переменная «cert_status» имеет значение «removeFromCRL», то присваиваем переменной «cert_status» значение «UNREVOKED».
Присваиваем переменной состояния «reasons_mask» объединённое значение, состоящее из её предшествующего значения и значения переменной состояния «interim_reasons_mask».
Если переменная «reasons_mask» имеет специальное значение «allreasons» или переменная «cert_status» не имеет значения «UNREVOKED», то считаем, что состояние отзыва было установлено, то возвращаемся к переменной «cert_status».
Если же состояние отзыва не было установлено, то повторяем предшествующую процедуру с любыми приемлемыми СОС, которые не были указаны в последовательности «DistributionPoint», но были выпущены издателем сертификата. При обработке такого СОС полагаем, что последовательность «DistributionPoint» не содержит субпоследовательностей «reasons» и «cRLIssuer», а представлена субпоследовательность «DistributionPointName» с именем издателя сертификата (поле «Issuer»). Т.е. последовательность имён в полном наименовании «fullName» сформирована на основании поля «Issuer» сертификата, а также субполя «issuerAltName» в поле «Расширения» сертификата. После обработки таких СОС, если по-прежнему состояния отзыва не установлено, то присваиваем переменной «cert_status» значение «UNDETERMINED».