| rfc9618v2.txt | rfc9618.txt | |||
|---|---|---|---|---|
| skipping to change at line 406 ¶ | skipping to change at line 406 ¶ | |||
| | | | | |||
| | Nodes in the graph can be divided into depths, numbered | | Nodes in the graph can be divided into depths, numbered | |||
| | starting from zero. A node at depth x can have zero or more | | starting from zero. A node at depth x can have zero or more | |||
| | children at depth x+1 and, with the exception of depth zero, | | children at depth x+1 and, with the exception of depth zero, | |||
| | one or more parents at depth x-1. No other edges between | | one or more parents at depth x-1. No other edges between | |||
| | nodes may exist. | | nodes may exist. | |||
| | | | | |||
| | If the node is at depth x, the components of the node have | | If the node is at depth x, the components of the node have | |||
| | the following semantics: | | the following semantics: | |||
| | | | | |||
| | (1) The valid_policy is a single policy OID representing a valid | | (1) The valid_policy is a single policy OID representing a | |||
| | policy for the path of length x. | | valid policy for the path of length x. | |||
| | | | | |||
| | (2) The qualifier_set is a set of policy qualifiers associated | | (2) The qualifier_set is a set of policy qualifiers | |||
| | with the valid policy in certificate x. It is only necessary | | associated with the valid policy in certificate x. It | |||
| | to maintain this field if policy qualifiers are returned to | | is only necessary to maintain this field if policy | |||
| | the application. See Section 6.1.5, step (g). | | qualifiers are returned to the application. See | |||
| | Section 6.1.5, step (g). | ||||
| | | | | |||
| | (3) The expected_policy_set contains one or more policy OIDs that | | (3) The expected_policy_set contains one or more policy OIDs | |||
| | would satisfy this policy in the certificate x+1. | | that would satisfy this policy in the certificate x+1. | |||
| | | | | |||
| | The initial value of the valid_policy_graph is a single node | | The initial value of the valid_policy_graph is a single node | |||
| | with valid_policy anyPolicy, an empty qualifier_set, and an | | with valid_policy anyPolicy, an empty qualifier_set, and an | |||
| | expected_policy_set with the single value anyPolicy. This | | expected_policy_set with the single value anyPolicy. This | |||
| | node is considered to be at depth zero. | | node is considered to be at depth zero. | |||
| | | | | |||
| | The graph additionally satisfies the following invariants: | | The graph additionally satisfies the following invariants: | |||
| | | | | |||
| | * For any depth x and policy OID P-OID, there is at most one node | | * For any depth x and policy OID P-OID, there is at most one | |||
| | at depth x whose valid_policy is P-OID. | | node at depth x whose valid_policy is P-OID. | |||
| | | | | |||
| | * The expected_policy_set of a node whose valid_policy is | | * The expected_policy_set of a node whose valid_policy is | |||
| | anyPolicy is always {anyPolicy}. | | anyPolicy is always {anyPolicy}. | |||
| | | | | |||
| | * A node at depth x whose valid_policy is anyPolicy, except for | | * A node at depth x whose valid_policy is anyPolicy, except | |||
| | the one at depth zero, always has exactly one parent: a node at | | for the one at depth zero, always has exactly one parent: | |||
| | depth x-1 whose valid_policy is also anyPolicy. | | a node at depth x-1 whose valid_policy is also anyPolicy. | |||
| | | | | |||
| | * Each node at depth greater than 0 has either one or more parent | | * Each node at depth greater than 0 has either one or more | |||
| | nodes whose valid_policy is not anyPolicy or a single parent | | parent nodes whose valid_policy is not anyPolicy or a | |||
| | node whose valid_policy is anyPolicy. That is, a node cannot | | single parent node whose valid_policy is anyPolicy. That | |||
| | simultaneously be a child of both anyPolicy and some non- | | is, a node cannot simultaneously be a child of both | |||
| | anyPolicy OID. | | anyPolicy and some non-anyPolicy OID. | |||
| | | | | |||
| | Figure 3 is a graphic representation of the initial state of | | Figure 3 is a graphic representation of the initial state of | |||
| | the valid_policy_graph. Additional figures will use this | | the valid_policy_graph. Additional figures will use this | |||
| | format to describe changes in the valid_policy_graph during | | format to describe changes in the valid_policy_graph during | |||
| | path processing. | | path processing. | |||
| | | | | |||
| | +----------------+ | | +----------------+ | |||
| | | anyPolicy | <---- valid_policy | | | anyPolicy | <---- valid_policy | |||
| | +----------------+ | | +----------------+ | |||
| | | {} | <---- qualifier_set | | | {} | <---- qualifier_set | |||
| skipping to change at line 466 ¶ | skipping to change at line 467 ¶ | |||
| 5.3. Updates to Section 6.1.3 | 5.3. Updates to Section 6.1.3 | |||
| The following replaces steps (d), (e), and (f) in Section 6.1.3 of | The following replaces steps (d), (e), and (f) in Section 6.1.3 of | |||
| [RFC5280]: | [RFC5280]: | |||
| | (d) If the certificate policies extension is present in the | | (d) If the certificate policies extension is present in the | |||
| | certificate and the valid_policy_graph is not NULL, process | | certificate and the valid_policy_graph is not NULL, process | |||
| | the policy information by performing the following steps in | | the policy information by performing the following steps in | |||
| | order: | | order: | |||
| | | | | |||
| | (1) For each policy P not equal to anyPolicy in the certificate | | (1) For each policy P not equal to anyPolicy in the | |||
| | policies extension, let P-OID denote the OID for policy P and | | certificate policies extension, let P-OID denote the OID | |||
| | P-Q denote the qualifier set for policy P. Perform the | | for policy P and P-Q denote the qualifier set for policy | |||
| | following steps in order: | | P. Perform the following steps in order: | |||
| | | | | |||
| | (i) Let parent_nodes be the nodes at depth i-1 in the | | (i) Let parent_nodes be the nodes at depth i-1 in the | |||
| | valid_policy_graph where P-OID is in the | | valid_policy_graph where P-OID is in the | |||
| | expected_policy_set. If parent_nodes is not empty, create a | | expected_policy_set. If parent_nodes is not | |||
| | child node as follows: set the valid_policy to P-OID, set | | empty, create a child node as follows: set the | |||
| | the qualifier_set to P-Q, set the expected_policy_set to | | valid_policy to P-OID, set the qualifier_set to | |||
| | {P-OID}, and set the parent nodes to parent_nodes. | | P-Q, set the expected_policy_set to {P-OID}, and | |||
| | set the parent nodes to parent_nodes. | ||||
| | | | | |||
| | For example, consider a valid_policy_graph with a node of | | For example, consider a valid_policy_graph with a | |||
| | depth i-1 where the expected_policy_set is {Gold, White} and | | node of depth i-1 where the expected_policy_set is | |||
| | a second node where the expected_policy_set is {Gold, | | {Gold, White} and a second node where the | |||
| | Yellow}. Assume the certificate policies Gold and Silver | | expected_policy_set is {Gold, Yellow}. Assume the | |||
| | appear in the certificate policies extension of certificate | | certificate policies Gold and Silver appear in the | |||
| | i. The Gold policy is matched, but the Silver policy is | | certificate policies extension of certificate i. | |||
| | not. This rule will generate a child node of depth i for | | The Gold policy is matched, but the Silver policy | |||
| | the Gold policy. The result is shown as Figure 4. | | is not. This rule will generate a child node of | |||
| | depth i for the Gold policy. The result is shown | ||||
| | as Figure 4. | ||||
| | | | | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | Red | | Blue | | | | Red | | Blue | | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | {} | | {} | depth i-1 | | | {} | | {} | depth i-1 | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | {Gold, White} | | {Gold, Yellow} | | | | {Gold, White} | | {Gold, Yellow} | | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | \ / | | \ / | |||
| | \ / | | \ / | |||
| | \ / | | \ / | |||
| | v v | | v v | |||
| | +-----------------+ | | +-----------------+ | |||
| | | Gold | | | | Gold | | |||
| | +-----------------+ | | +-----------------+ | |||
| | | {} | depth i | | | {} | depth i | |||
| | +-----------------+ | | +-----------------+ | |||
| | | {Gold} | | | | {Gold} | | |||
| | +-----------------+ | | +-----------------+ | |||
| | | | | |||
| | Figure 4: Processing an Exact Match | | Figure 4: Processing an Exact Match | |||
| | | | | |||
| | (ii) If there was no match in step (i) and the valid_policy_graph | | (ii) If there was no match in step (i) and the | |||
| | includes a node of depth i-1 with the valid_policy | | valid_policy_graph includes a node of depth i-1 | |||
| | anyPolicy, generate a child node with the following values: | | with the valid_policy anyPolicy, generate a child | |||
| | set the valid_policy to P-OID, set the qualifier_set to P-Q, | | node with the following values: set the | |||
| | set the expected_policy_set to {P-OID}, and set the parent | | valid_policy to P-OID, set the qualifier_set to | |||
| | node to the anyPolicy node at depth i-1. | | P-Q, set the expected_policy_set to {P-OID}, and | |||
| | set the parent node to the anyPolicy node at depth | ||||
| | i-1. | ||||
| | | | | |||
| | For example, consider a valid_policy_graph with a node of | | For example, consider a valid_policy_graph with a | |||
| | depth i-1 where the valid_policy is anyPolicy. Assume the | | node of depth i-1 where the valid_policy is | |||
| | certificate policies Gold and Silver appear in the | | anyPolicy. Assume the certificate policies Gold | |||
| | certificate policies extension of certificate i. The Gold | | and Silver appear in the certificate policies | |||
| | policy does not have a qualifier, but the Silver policy has | | extension of certificate i. The Gold policy does | |||
| | the qualifier Q-Silver. If Gold and Silver were not matched | | not have a qualifier, but the Silver policy has | |||
| | in (i) above, this rule will generate two child nodes of | | the qualifier Q-Silver. If Gold and Silver were | |||
| | depth i, one for each policy. The result is shown as | | not matched in (i) above, this rule will generate | |||
| | Figure 5. | | two child nodes of depth i, one for each policy. | |||
| | The result is shown as Figure 5. | ||||
| | | | | |||
| | +-----------------+ | | +-----------------+ | |||
| | | anyPolicy | | | | anyPolicy | | |||
| | +-----------------+ | | +-----------------+ | |||
| | | {} | | | | {} | | |||
| | +-----------------+ depth i-1 | | +-----------------+ depth i-1 | |||
| | | {anyPolicy} | | | | {anyPolicy} | | |||
| | +-----------------+ | | +-----------------+ | |||
| | / \ | | / \ | |||
| | / \ | | / \ | |||
| | / \ | | / \ | |||
| | v v | | v v | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | Gold | | Silver | | | | Gold | | Silver | | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | {} | | {Q-Silver} | depth i | | | {} | | {Q-Silver} | depth i | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | {Gold} | | {Silver} | | | | {Gold} | | {Silver} | | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | | | |||
| | Figure 5: Processing Unmatched Policies When a Leaf Node | | Figure 5: Processing Unmatched Policies When a | |||
| | Specifies anyPolicy | | Leaf Node Specifies anyPolicy | |||
| | | | | |||
| | (2) If the certificate policies extension includes the policy | | (2) If the certificate policies extension includes the | |||
| | anyPolicy with the qualifier set AP-Q and either (a) | | policy anyPolicy with the qualifier set AP-Q and either | |||
| | inhibit_anyPolicy is greater than 0 or (b) i<n and the | | (a) inhibit_anyPolicy is greater than 0 or (b) i<n and | |||
| | certificate is self-issued, then: | | the certificate is self-issued, then: | |||
| | | | | |||
| | For each policy OID P-OID (including anyPolicy) that appears | | For each policy OID P-OID (including anyPolicy) that | |||
| | in the expected_policy_set of some node in the | | appears in the expected_policy_set of some node in the | |||
| | valid_policy_graph for depth i-1, if P-OID does not appear as | | valid_policy_graph for depth i-1, if P-OID does not | |||
| | the valid_policy of some node at depth i, create a single | | appear as the valid_policy of some node at depth i, | |||
| | child node with the following values: set the valid_policy to | | create a single child node with the following values: | |||
| | P-OID, set the qualifier_set to AP-Q, set the | | set the valid_policy to P-OID, set the qualifier_set to | |||
| | expected_policy_set to {P-OID}, and set the parents to the | | AP-Q, set the expected_policy_set to {P-OID}, and set | |||
| | nodes at depth i-1 where P-OID appears in | | the parents to the nodes at depth i-1 where P-OID | |||
| | expected_policy_set. | | appears in expected_policy_set. | |||
| | | | | |||
| | This is equivalent to running step (1) above as if the | | This is equivalent to running step (1) above as if the | |||
| | certificate policies extension contained a policy with OID | | certificate policies extension contained a policy with | |||
| | P-OID and qualifier set AP-Q. | | OID P-OID and qualifier set AP-Q. | |||
| | | | | |||
| | For example, consider a valid_policy_graph with a node of | | For example, consider a valid_policy_graph with a node | |||
| | depth i-1 where the expected_policy_set is {Gold, Silver} and | | of depth i-1 where the expected_policy_set is {Gold, | |||
| | a second node of depth i-1 where the expected_policy_set is | | Silver} and a second node of depth i-1 where the | |||
| | {Gold}. Assume anyPolicy appears in the certificate policies | | expected_policy_set is {Gold}. Assume anyPolicy appears | |||
| | extension of certificate i with policy qualifiers AP-Q, but | | in the certificate policies extension of certificate i | |||
| | Gold and Silver do not appear. This rule will generate two | | with policy qualifiers AP-Q, but Gold and Silver do not | |||
| | child nodes of depth i, one for each policy. The result is | | appear. This rule will generate two child nodes of | |||
| | shown below as Figure 6. | | depth i, one for each policy. The result is shown below | |||
| | as Figure 6. | ||||
| | | | | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | Red | | Blue | | | | Red | | Blue | | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | {} | | {} | depth i-1 | | | {} | | {} | depth i-1 | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | {Gold, Silver} | | {Gold} | | | | {Gold, Silver} | | {Gold} | | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | \ | | | | \ | | |||
| | | \ | | | | \ | | |||
| | | \ | | | | \ | | |||
| | | \ | | | | \ | | |||
| | | \ | | | | \ | | |||
| | v v v | | v v v | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | Silver | | Gold | | | | Silver | | Gold | | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | {AP-Q} | | {AP-Q} | depth i | | | {AP-Q} | | {AP-Q} | depth i | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | {Silver} | | {Gold} | | | | {Silver} | | {Gold} | | |||
| | +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ | |||
| | | | | |||
| | Figure 6: Processing Unmatched Policies When the | | Figure 6: Processing Unmatched Policies When the | |||
| | Certificate Policies Extension Specifies anyPolicy | | Certificate Policies Extension Specifies anyPolicy | |||
| | | | | |||
| | (3) If there is a node in the valid_policy_graph of depth i-1 or | | (3) If there is a node in the valid_policy_graph of depth | |||
| | less without any child nodes, delete that node. Repeat this | | i-1 or less without any child nodes, delete that node. | |||
| | step until there are no nodes of depth i-1 or less without | | Repeat this step until there are no nodes of depth i-1 | |||
| | children. | | or less without children. | |||
| | | | | |||
| | For example, consider the valid_policy_graph shown in | | For example, consider the valid_policy_graph shown in | |||
| | Figure 7 below. The two nodes at depth i-1 that are marked | | Figure 7 below. The two nodes at depth i-1 that are | |||
| | with an 'X' have no children, and they are deleted. Applying | | marked with an 'X' have no children, and they are | |||
| | this rule to the resulting graph will cause the nodes at | | deleted. Applying this rule to the resulting graph will | |||
| | depth i-2 that is marked with a 'Y' to be deleted. In the | | cause the nodes at depth i-2 that is marked with a 'Y' | |||
| | resulting graph, there are no nodes of depth i-1 or less | | to be deleted. In the resulting graph, there are no | |||
| | without children, and this step is complete. | | nodes of depth i-1 or less without children, and this | |||
| | step is complete. | ||||
| | | | | |||
| | +-----------+ | | +-----------+ | |||
| | | | depth i-3 | | | | depth i-3 | |||
| | +-----------+ | | +-----------+ | |||
| | / | \ | | / | \ | |||
| | / | \ | | / | \ | |||
| | v v v | | v v v | |||
| | +-----------+ +-----------+ +-----------+ | | +-----------+ +-----------+ +-----------+ | |||
| | | | | | | Y | depth i-2 | | | | | | | Y | depth i-2 | |||
| | +-----------+ +-----------+ +-----------+ | | +-----------+ +-----------+ +-----------+ | |||
| | | \ | | | | | \ | | | |||
| | | \ | | | | | \ | | | |||
| | v v v v | | v v v v | |||
| | +-----------+ +-----------+ +-----------+ | | +-----------+ +-----------+ +-----------+ | |||
| | | X | | | | X | depth i-1 | | | X | | | | X | depth i-1 | |||
| | +-----------+ +-----------+ +-----------+ | | +-----------+ +-----------+ +-----------+ | |||
| | / | \ | | / | \ | |||
| | / | \ | | / | \ | |||
| | v v v | | v v v | |||
| | +-----------+ +-----------+ +-----------+ | | +-----------+ +-----------+ +-----------+ | |||
| | | | | | | | depth i | | | | | | | | depth i | |||
| | +-----------+ +-----------+ +-----------+ | | +-----------+ +-----------+ +-----------+ | |||
| | | | | |||
| | Figure 7: Pruning the valid_policy_graph | | Figure 7: Pruning the valid_policy_graph | |||
| | | | | |||
| | (e) If the certificate policies extension is not present, set the | | (e) If the certificate policies extension is not present, set the | |||
| | valid_policy_graph to NULL. | | valid_policy_graph to NULL. | |||
| | | | | |||
| | (f) Verify that either explicit_policy is greater than 0 or the | | (f) Verify that either explicit_policy is greater than 0 or the | |||
| | valid_policy_graph is not equal to NULL. | | valid_policy_graph is not equal to NULL. | |||
| The text following step (f) in Section 6.1.3 of [RFC5280], beginning | The text following step (f) in Section 6.1.3 of [RFC5280], beginning | |||
| with "If any of steps (a), (b), (c), or (f) fails", is left | with "If any of steps (a), (b), (c), or (f) fails", is left | |||
| unmodified. | unmodified. | |||
| 5.4. Updates to Section 6.1.4 | 5.4. Updates to Section 6.1.4 | |||
| The following replaces step (b) in Section 6.1.4 of [RFC5280]: | The following replaces step (b) in Section 6.1.4 of [RFC5280]: | |||
| | (b) If a policy mappings extension is present, then for each | | (b) If a policy mappings extension is present, then for each | |||
| | issuerDomainPolicy ID-P in the policy mappings extension: | | issuerDomainPolicy ID-P in the policy mappings extension: | |||
| | | | | |||
| | (1) If the policy_mapping variable is greater than 0 and there is | | (1) If the policy_mapping variable is greater than 0 and | |||
| | a node in the valid_policy_graph of depth i where ID-P is the | | there is a node in the valid_policy_graph of depth i | |||
| | valid_policy, set expected_policy_set to the set of | | where ID-P is the valid_policy, set expected_policy_set | |||
| | subjectDomainPolicy values that are specified as equivalent | | to the set of subjectDomainPolicy values that are | |||
| | to ID-P by the policy mappings extension. | | specified as equivalent to ID-P by the policy mappings | |||
| | extension. | ||||
| | | | | |||
| | (2) If the policy_mapping variable is greater than 0 and no node | | (2) If the policy_mapping variable is greater than 0 and no | |||
| | of depth i in the valid_policy_graph has a valid_policy of | | node of depth i in the valid_policy_graph has a | |||
| | ID-P but there is a node of depth i with a valid_policy of | | valid_policy of ID-P but there is a node of depth i with | |||
| | anyPolicy, then generate a child node of the node of depth | | a valid_policy of anyPolicy, then generate a child node | |||
| | i-1 that has a valid_policy of anyPolicy as follows: | | of the node of depth i-1 that has a valid_policy of | |||
| | anyPolicy as follows: | ||||
| | | | | |||
| | (i) set the valid_policy to ID-P; | | (i) set the valid_policy to ID-P; | |||
| | | | | |||
| | (ii) set the qualifier_set to the qualifier set of the policy | | (ii) set the qualifier_set to the qualifier set of the | |||
| | anyPolicy in the certificate policies extension of | | policy anyPolicy in the certificate policies | |||
| | certificate i; and | | extension of certificate i; and | |||
| | | | | |||
| | (iii) set the expected_policy_set to the set of | | (iii) set the expected_policy_set to the set of | |||
| | subjectDomainPolicy values that are specified as equivalent | | subjectDomainPolicy values that are specified as | |||
| | to ID-P by the policy mappings extension. | | equivalent to ID-P by the policy mappings | |||
| | extension. | ||||
| | | | | |||
| | (3) If the policy_mapping variable is equal to 0: | | (3) If the policy_mapping variable is equal to 0: | |||
| | | | | |||
| | (i) delete the node, if any, of depth i in the | | (i) delete the node, if any, of depth i in the | |||
| | valid_policy_graph where ID-P is the valid_policy. | | valid_policy_graph where ID-P is the valid_policy. | |||
| | | | | |||
| | (ii) If there is a node in the valid_policy_graph of depth i-1 or | | (ii) If there is a node in the valid_policy_graph of | |||
| | less without any child nodes, delete that node. Repeat this | | depth i-1 or less without any child nodes, delete | |||
| | step until there are no nodes of depth i-1 or less without | | that node. Repeat this step until there are no | |||
| | children. | | nodes of depth i-1 or less without children. | |||
| 5.5. Updates to Section 6.1.5 | 5.5. Updates to Section 6.1.5 | |||
| The following replaces step (g) in Section 6.1.5 of [RFC5280]: | The following replaces step (g) in Section 6.1.5 of [RFC5280]: | |||
| | (g) Calculate the user_constrained_policy_set as follows. The | | (g) Calculate the user_constrained_policy_set as follows. The | |||
| | user_constrained_policy_set is a set of policy OIDs, along | | user_constrained_policy_set is a set of policy OIDs, along | |||
| | with associated policy qualifiers. | | with associated policy qualifiers. | |||
| | | | | |||
| | (1) If the valid_policy_graph is NULL, set valid_policy_node_set | | (1) If the valid_policy_graph is NULL, set | |||
| | to the empty set. | | valid_policy_node_set to the empty set. | |||
| | | | | |||
| | (2) If the valid_policy_graph is not NULL, set | | (2) If the valid_policy_graph is not NULL, set | |||
| | valid_policy_node_set to the set of policy nodes whose | | valid_policy_node_set to the set of policy nodes whose | |||
| | valid_policy is not anyPolicy and whose parent list is a | | valid_policy is not anyPolicy and whose parent list is a | |||
| | single node with valid_policy of anyPolicy. | | single node with valid_policy of anyPolicy. | |||
| | | | | |||
| | (3) If the valid_policy_graph is not NULL and contains a node of | | (3) If the valid_policy_graph is not NULL and contains a | |||
| | depth n with the valid_policy anyPolicy, add it to | | node of depth n with the valid_policy anyPolicy, add it | |||
| | valid_policy_node_set. | | to valid_policy_node_set. | |||
| | | | | |||
| | (4) Compute authority_constrained_policy_set, a set of policy | | (4) Compute authority_constrained_policy_set, a set of | |||
| | OIDs and associated qualifiers as follows. For each node in | | policy OIDs and associated qualifiers as follows. For | |||
| | valid_policy_node_set: | | each node in valid_policy_node_set: | |||
| | | | | |||
| | (i) Add the node's valid_policy to | | (i) Add the node's valid_policy to | |||
| | authority_constrained_policy_set. | | authority_constrained_policy_set. | |||
| | | | | |||
| | (ii) Collect all qualifiers in the node, its ancestors, and | | (ii) Collect all qualifiers in the node, its ancestors, | |||
| | descendants and associate them with valid_policy. | | and descendants and associate them with | |||
| | Applications that do not use policy qualifiers MAY skip this | | valid_policy. Applications that do not use policy | |||
| | step to simplify processing. | | qualifiers MAY skip this step to simplify | |||
| | processing. | ||||
| | | | | |||
| | (5) Set user_constrained_policy_set to | | (5) Set user_constrained_policy_set to | |||
| | authority_constrained_policy_set. | | authority_constrained_policy_set. | |||
| | | | | |||
| | (6) If the user-initial-policy-set is not anyPolicy: | | (6) If the user-initial-policy-set is not anyPolicy: | |||
| | | | | |||
| | (i) Remove any elements of user_constrained_policy_set that do | | (i) Remove any elements of user_constrained_policy_set | |||
| | not appear in user-initial-policy-set. | | that do not appear in user-initial-policy-set. | |||
| | | | | |||
| | (ii) If anyPolicy appears in authority_constrained_policy_set | | (ii) If anyPolicy appears in | |||
| | with qualifiers AP-Q, for each OID P-OID in user-initial- | | authority_constrained_policy_set with qualifiers | |||
| | policy-set that does not appear in | | AP-Q, for each OID P-OID in user-initial-policy- | |||
| | user_constrained_policy_set, add P-OID with qualifiers AP-Q | | set that does not appear in | |||
| | to user_constrained_policy_set. | | user_constrained_policy_set, add P-OID with | |||
| | qualifiers AP-Q to user_constrained_policy_set. | ||||
| In addition, the final paragraph in Section 6.1.5 of [RFC5280] is | In addition, the final paragraph in Section 6.1.5 of [RFC5280] is | |||
| updated as follows: | updated as follows: | |||
| OLD: | OLD: | |||
| | If either (1) the value of explicit_policy variable is greater | | If either (1) the value of explicit_policy variable is greater | |||
| | than zero or (2) the valid_policy_tree is not NULL, then path | | than zero or (2) the valid_policy_tree is not NULL, then path | |||
| | processing has succeeded. | | processing has succeeded. | |||
| End of changes. 44 change blocks. | ||||
| 223 lines changed or deleted | 237 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||