|
| 1 | +/* SPDX-License-Identifier: MIT */ |
| 2 | +/* AUTO-GENERATED by arbiterc — do not edit */ |
| 3 | + |
| 4 | +#include "arbiter_model.h" |
| 5 | +#include <arbiter/arbiter.h> |
| 6 | + |
| 7 | +static const struct ARBITER_fact_def model_facts[] = { |
| 8 | + { .id = 0, .type = ARBITER_FACT_ENUM, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "auth.decision" }, |
| 9 | + { .id = 1, .type = ARBITER_FACT_UINT32, .range_min = 0, .range_max = 100, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "auth.risk_score" }, |
| 10 | + { .id = 2, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "cors.allow" }, |
| 11 | + { .id = 3, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "cors.preflight" }, |
| 12 | + { .id = 4, .type = ARBITER_FACT_UINT32, .range_min = 0, .range_max = 100000, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.client_requests_1m" }, |
| 13 | + { .id = 5, .type = ARBITER_FACT_UINT32, .range_min = 0, .range_max = 1048576, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.content_length" }, |
| 14 | + { .id = 6, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.has_auth_token" }, |
| 15 | + { .id = 7, .type = ARBITER_FACT_ENUM, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.method" }, |
| 16 | + { .id = 8, .type = ARBITER_FACT_ENUM, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.origin_class" }, |
| 17 | + { .id = 9, .type = ARBITER_FACT_ENUM, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.path_class" }, |
| 18 | + { .id = 10, .type = ARBITER_FACT_ENUM, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.token_role" }, |
| 19 | + { .id = 11, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.token_valid" }, |
| 20 | +}; |
| 21 | + |
| 22 | +static const struct ARBITER_condition_def model_conditions[] = { |
| 23 | + { .fact_id = 7, .op = ARBITER_OP_EQ, .value = 5, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 24 | + { .fact_id = 8, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ANY, .group_index = 0, .next = UINT16_MAX }, |
| 25 | + { .fact_id = 8, .op = ARBITER_OP_EQ, .value = 2, .group = ARBITER_COND_ANY, .group_index = 0, .next = UINT16_MAX }, |
| 26 | + { .fact_id = 8, .op = ARBITER_OP_EQ, .value = 4, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 27 | + { .fact_id = 4, .op = ARBITER_OP_GT, .value = 60, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 28 | + { .fact_id = 9, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 29 | + { .fact_id = 9, .op = ARBITER_OP_EQ, .value = 4, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 30 | + { .fact_id = 7, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 31 | + { .fact_id = 6, .op = ARBITER_OP_EQ, .value = 0, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 32 | + { .fact_id = 9, .op = ARBITER_OP_EQ, .value = 2, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 33 | + { .fact_id = 6, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 34 | + { .fact_id = 11, .op = ARBITER_OP_EQ, .value = 0, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 35 | + { .fact_id = 9, .op = ARBITER_OP_EQ, .value = 3, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 36 | + { .fact_id = 10, .op = ARBITER_OP_LT, .value = 3, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 37 | + { .fact_id = 6, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 38 | + { .fact_id = 11, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 39 | + { .fact_id = 0, .op = ARBITER_OP_EQ, .value = 0, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 40 | + { .fact_id = 6, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 41 | + { .fact_id = 5, .op = ARBITER_OP_GT, .value = 65536, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 42 | +}; |
| 43 | + |
| 44 | +static const struct ARBITER_action_def model_actions[] = { |
| 45 | + { .id = 0, .type = ARBITER_ACTION_CALLBACK, .target_fact_id = 0, .target_value = 0, .callback = NULL, .must_complete_within_ms = 0, .safe_state_action = false, .name = "send_429" }, |
| 46 | +}; |
| 47 | + |
| 48 | +static const struct ARBITER_rule_def model_rules[] = { |
| 49 | + { .id = 0, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 0, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 1, .safety_critical = false, .name = "01_cors.preflight", .explanation = "OPTIONS request — CORS preflight." }, |
| 50 | + { .id = 1, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 1, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "02_cors.allow_origin", .explanation = "Same-origin or allowed origin — CORS pass." }, |
| 51 | + { .id = 2, .rule_class = ARBITER_RULE_CONSTRAINT, .condition_start = 3, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 2, .safety_critical = false, .name = "03_cors.block_origin", .explanation = "Blocked origin — 403." }, |
| 52 | + { .id = 3, .rule_class = ARBITER_RULE_CONSTRAINT, .condition_start = 4, .condition_count = 1, .action_start = 0, .action_count = 1, .safety_goal_id = UINT16_MAX, .set_mode = 3, .safety_critical = false, .name = "10_rate.check", .explanation = "Client > 60 req/min — 429 Too Many Requests." }, |
| 53 | + { .id = 4, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 5, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 0, .safety_critical = false, .name = "20_auth.public_path", .explanation = "Public path — no auth required." }, |
| 54 | + { .id = 5, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 6, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 0, .safety_critical = false, .name = "21_auth.health_check", .explanation = "Health check GET — always allowed." }, |
| 55 | + { .id = 6, .rule_class = ARBITER_RULE_CONSTRAINT, .condition_start = 8, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 2, .safety_critical = false, .name = "22_auth.no_token", .explanation = "Auth-required path but no token — 401." }, |
| 56 | + { .id = 7, .rule_class = ARBITER_RULE_CONSTRAINT, .condition_start = 10, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 2, .safety_critical = false, .name = "23_auth.invalid_token", .explanation = "Invalid/expired token — 401." }, |
| 57 | + { .id = 8, .rule_class = ARBITER_RULE_CONSTRAINT, .condition_start = 12, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 2, .safety_critical = false, .name = "24_auth.admin_check", .explanation = "Admin path requires admin role — 403." }, |
| 58 | + { .id = 9, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 14, .condition_count = 3, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 0, .safety_critical = false, .name = "25_auth.valid_token", .explanation = "Valid token, authorized — allow." }, |
| 59 | + { .id = 10, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 17, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "30_risk.compute", .explanation = NULL }, |
| 60 | + { .id = 11, .rule_class = ARBITER_RULE_CONSTRAINT, .condition_start = 18, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 2, .safety_critical = false, .name = "40_payload.too_large", .explanation = "Payload > 64KB — rejected." }, |
| 61 | +}; |
| 62 | + |
| 63 | +static const char *model_mode_names[] = { |
| 64 | + "mode.allow", |
| 65 | + "mode.cors_preflight", |
| 66 | + "mode.deny", |
| 67 | + "mode.rate_limited", |
| 68 | +}; |
| 69 | + |
| 70 | +const struct ARBITER_model ARBITER_generated_model = { |
| 71 | + .name = "iot_access_control", |
| 72 | + .model_hash = { 0xd0, 0x17, 0xb9, 0x4e, 0x8c, 0xe6, 0x6a, 0xd6, 0x46, 0x1c, 0x9f, 0xed, 0x03, 0xa1, 0xcc, 0x71, 0x0f, 0xe7, 0x8a, 0x48, 0xae, 0x97, 0xf7, 0x3a, 0xcd, 0x08, 0x85, 0xb0, 0x03, 0x27, 0xc1, 0x5b }, |
| 73 | + .schema_hash = { 0x0d, 0x55, 0x33, 0x65, 0xf3, 0x4e, 0x02, 0xf3, 0xf8, 0x94, 0xe8, 0x25, 0xbb, 0x47, 0x86, 0x45, 0xfd, 0x8b, 0x78, 0xb1, 0x27, 0xf5, 0x8c, 0x42, 0xba, 0xbd, 0x80, 0x1f, 0x77, 0x57, 0x1f, 0x35 }, |
| 74 | + .fact_count = 12, |
| 75 | + .rule_count = 12, |
| 76 | + .condition_count = 19, |
| 77 | + .action_count = 1, |
| 78 | + .mode_count = 4, |
| 79 | + .facts = model_facts, |
| 80 | + .rules = model_rules, |
| 81 | + .conditions = model_conditions, |
| 82 | + .actions = model_actions, |
| 83 | + .mode_names = model_mode_names, |
| 84 | +}; |
0 commit comments