Skip to content

Commit

Permalink
public_key: Verify policy trees and fix handling of any policy extension
Browse files Browse the repository at this point in the history
Closes #6198
  • Loading branch information
IngelaAndin committed Aug 22, 2023
1 parent a241c95 commit 2d99975
Show file tree
Hide file tree
Showing 2 changed files with 608 additions and 155 deletions.
29 changes: 21 additions & 8 deletions lib/public_key/src/pubkey_cert.erl
Original file line number Diff line number Diff line change
Expand Up @@ -941,18 +941,31 @@ policy_children(Parents, Critical, Policy, Qualifiers) ->

%% Step 2
handle_any_policy_ext(Critical, Qualifiers, Parents, Children) ->
handle_any_policy_ext(Critical, Qualifiers, Parents, Children, []).
SamLen = maybe_add_empty_children(Parents, Children),
NewChildren = handle_any_policy_ext(Critical, Qualifiers, Parents, SamLen, []),
merge_children(Children, NewChildren, []).

handle_any_policy_ext(_, _, [], Children0, AccChildren) ->
merge_children(Children0, lists:reverse(AccChildren), []);
handle_any_policy_ext(_, _, [], [], AccChildren) ->
AccChildren;
handle_any_policy_ext(Critical, Qualifiers,
[#{expected_policy_set := ExpPolicySet} | ParentsRest],
Children0, Acc) ->
[#{expected_policy_set := ExpPolicySet,
valid_policy:= ValidPolicy} | ParentsRest],
[Children | RestChildren], AccChildren) ->
Nodes = [policy_node(Critical, Policy, Qualifiers,
[Policy])
[ValidPolicy])
|| Policy <- ExpPolicySet,
not has_policy_node(Policy, Children0 ++ Acc)],
handle_any_policy_ext(Critical, Qualifiers, ParentsRest, Children0, [Nodes | Acc]).
not has_policy_node(Policy, Children)],
handle_any_policy_ext(Critical, Qualifiers, ParentsRest, RestChildren, [Nodes | AccChildren]).

maybe_add_empty_children(Parents, Children) ->
maybe_add_empty_children(Parents, Children, []).

maybe_add_empty_children([], _, AccChildren) ->
lists:reverse(AccChildren);
maybe_add_empty_children([_ | RestParents], [Children | RestChildren], AccChildren) ->
maybe_add_empty_children(RestParents, RestChildren, [Children | AccChildren]);
maybe_add_empty_children([_ | RestParents], [] = RestChildren, AccChildren) ->
maybe_add_empty_children(RestParents, RestChildren, [[] | AccChildren]).


%% Step 1 i:
Expand Down
Loading

0 comments on commit 2d99975

Please sign in to comment.