update to target nrf52840
abac_them.h@1:f2e3a692717a, 2020-08-13 (annotated)
- Committer:
- brunnobbco
- Date:
- Thu Aug 13 12:56:05 2020 +0000
- Revision:
- 1:f2e3a692717a
- Parent:
- 0:ecd06432fb4b
Target NRF52840
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
geonnave | 0:ecd06432fb4b | 1 | #ifndef ABAC_THEM_H |
geonnave | 0:ecd06432fb4b | 2 | #define ABAC_THEM_H |
geonnave | 0:ecd06432fb4b | 3 | |
geonnave | 0:ecd06432fb4b | 4 | enum abac_types {abac_integer, abac_real, abac_integer_range, abac_real_range, abac_string, abac_string_list, abac_dictionary}; |
geonnave | 0:ecd06432fb4b | 5 | |
geonnave | 0:ecd06432fb4b | 6 | typedef struct range_v2 { |
geonnave | 0:ecd06432fb4b | 7 | union { |
geonnave | 0:ecd06432fb4b | 8 | float real_min; |
geonnave | 0:ecd06432fb4b | 9 | int integer_min; |
geonnave | 0:ecd06432fb4b | 10 | }; |
geonnave | 0:ecd06432fb4b | 11 | union { |
geonnave | 0:ecd06432fb4b | 12 | float real_max; |
geonnave | 0:ecd06432fb4b | 13 | int integer_max; |
geonnave | 0:ecd06432fb4b | 14 | }; |
geonnave | 0:ecd06432fb4b | 15 | } range_v2; |
geonnave | 0:ecd06432fb4b | 16 | |
geonnave | 0:ecd06432fb4b | 17 | typedef struct attr_v2 { |
geonnave | 0:ecd06432fb4b | 18 | enum abac_types data_type; |
geonnave | 0:ecd06432fb4b | 19 | char *name; |
geonnave | 0:ecd06432fb4b | 20 | size_t inner_list_len; // used for either strings or inner_attrs |
geonnave | 0:ecd06432fb4b | 21 | union { |
geonnave | 0:ecd06432fb4b | 22 | char *string; |
geonnave | 0:ecd06432fb4b | 23 | char **string_list; |
geonnave | 0:ecd06432fb4b | 24 | int integer; |
geonnave | 0:ecd06432fb4b | 25 | float real; |
geonnave | 0:ecd06432fb4b | 26 | range_v2 ran; |
geonnave | 0:ecd06432fb4b | 27 | struct attr_v2 **inner_attrs; |
geonnave | 0:ecd06432fb4b | 28 | }; |
geonnave | 0:ecd06432fb4b | 29 | } attr_v2; |
geonnave | 0:ecd06432fb4b | 30 | |
geonnave | 0:ecd06432fb4b | 31 | typedef struct rule { |
geonnave | 0:ecd06432fb4b | 32 | attr_v2 **users; |
geonnave | 0:ecd06432fb4b | 33 | attr_v2 **objects; |
geonnave | 0:ecd06432fb4b | 34 | attr_v2 **contexts; |
geonnave | 0:ecd06432fb4b | 35 | char **operations; |
geonnave | 0:ecd06432fb4b | 36 | size_t users_len; |
geonnave | 0:ecd06432fb4b | 37 | size_t objects_len; |
geonnave | 0:ecd06432fb4b | 38 | size_t contexts_len; |
geonnave | 0:ecd06432fb4b | 39 | size_t operations_len; |
geonnave | 0:ecd06432fb4b | 40 | } rule; |
geonnave | 0:ecd06432fb4b | 41 | |
geonnave | 0:ecd06432fb4b | 42 | // typedef struct policy_v2 { |
geonnave | 0:ecd06432fb4b | 43 | // char *id; |
geonnave | 0:ecd06432fb4b | 44 | // char *version; |
geonnave | 0:ecd06432fb4b | 45 | // char *name; |
geonnave | 0:ecd06432fb4b | 46 | // rule permissions; |
geonnave | 0:ecd06432fb4b | 47 | // } policy_v2; |
geonnave | 0:ecd06432fb4b | 48 | |
geonnave | 0:ecd06432fb4b | 49 | typedef struct node { |
geonnave | 0:ecd06432fb4b | 50 | char *value; |
geonnave | 0:ecd06432fb4b | 51 | struct node *next; |
geonnave | 0:ecd06432fb4b | 52 | } node; |
geonnave | 0:ecd06432fb4b | 53 | |
geonnave | 0:ecd06432fb4b | 54 | typedef struct graph { |
geonnave | 0:ecd06432fb4b | 55 | size_t len; |
geonnave | 0:ecd06432fb4b | 56 | node **list; |
geonnave | 0:ecd06432fb4b | 57 | } graph; |
geonnave | 0:ecd06432fb4b | 58 | |
geonnave | 0:ecd06432fb4b | 59 | attr_v2 new_attr_integer(char *name, int value); |
geonnave | 0:ecd06432fb4b | 60 | attr_v2 new_attr_real(char *name, float value); |
geonnave | 0:ecd06432fb4b | 61 | attr_v2 new_attr_integer_range(char *name, int min, int max); |
geonnave | 0:ecd06432fb4b | 62 | attr_v2 new_attr_real_range(char *name, float min, float max); |
geonnave | 0:ecd06432fb4b | 63 | attr_v2 new_attr_string(char *name, char *value); |
geonnave | 0:ecd06432fb4b | 64 | attr_v2 new_attr_string_list(char *name, size_t len); |
geonnave | 0:ecd06432fb4b | 65 | attr_v2 new_attr_dictionary(char *name, attr_v2 **value, size_t len); |
geonnave | 0:ecd06432fb4b | 66 | attr_v2 **new_attr_list(size_t len); |
geonnave | 0:ecd06432fb4b | 67 | char **new_operations_list(size_t len); |
geonnave | 0:ecd06432fb4b | 68 | |
geonnave | 0:ecd06432fb4b | 69 | int match_attrs_v2(attr_v2 **ras, size_t ras_len, attr_v2 **pas, size_t pas_len); |
geonnave | 0:ecd06432fb4b | 70 | int match_attr_v2(attr_v2 ra, attr_v2 pa); |
geonnave | 0:ecd06432fb4b | 71 | int match_permission(rule r, rule perm); |
geonnave | 0:ecd06432fb4b | 72 | int authorize_permissions(rule req, rule *perms, size_t len); |
geonnave | 0:ecd06432fb4b | 73 | int is_subset(char **ro, size_t ro_len, char **po, size_t po_len); |
geonnave | 0:ecd06432fb4b | 74 | |
geonnave | 0:ecd06432fb4b | 75 | void show_attr_v2(attr_v2 at); |
geonnave | 0:ecd06432fb4b | 76 | void show_operations(char **ops, size_t len); |
geonnave | 0:ecd06432fb4b | 77 | void show_rule(rule r, char *desc); |
geonnave | 0:ecd06432fb4b | 78 | void show_node_list(node *list, size_t len, char *desc); |
geonnave | 0:ecd06432fb4b | 79 | void show_visited(node *visited, size_t v_len); |
geonnave | 0:ecd06432fb4b | 80 | |
geonnave | 0:ecd06432fb4b | 81 | node new_graph_node(char *value); |
geonnave | 0:ecd06432fb4b | 82 | void create_directed_edge(node *, node *); |
geonnave | 0:ecd06432fb4b | 83 | graph new_graph(size_t len); |
geonnave | 0:ecd06432fb4b | 84 | |
geonnave | 0:ecd06432fb4b | 85 | node *find_ancestors_dfs(graph g, node n, size_t *len); |
geonnave | 0:ecd06432fb4b | 86 | int is_in(node k, node *list, size_t v_len); |
geonnave | 0:ecd06432fb4b | 87 | void expand_attrs(rule *, graph); |
geonnave | 0:ecd06432fb4b | 88 | int authorize_permissions_expand(rule req, rule *perms, size_t p_len, graph g); |
geonnave | 0:ecd06432fb4b | 89 | |
geonnave | 0:ecd06432fb4b | 90 | #endif |