update to target nrf52840

Committer:
geonnave
Date:
Thu Aug 13 12:23:41 2020 +0000
Revision:
0:ecd06432fb4b
First test for pulga

Who changed what in which revision?

UserRevisionLine numberNew 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