#include "attack_scoring.h"
#include <string.h>
double attack_vector_utility(struct arc_value *a_v)
{
return attack_vector_score(a_v->v_int);
}
double attack_complexity_utility(struct arc_value *a_v)
{
return attack_complexity_score(a_v->v_int);
}
double privileges_required_utility(struct arc_value *a_v)
{
return privileges_required_score(a_v->v_int);
}
double user_interaction_utility(struct arc_value *a_v)
{
return user_interaction_score(a_v->v_int);
}
double running_time_utility(struct arc_value *a_v)
{
return running_time_score(a_v->v_int);
}
double attack_vector_score(enum ATTACK_VECTOR a_v)
{
static const double a_v_score_tbl[AV_Size] = {1.0, 0.73, 0.64, 0.23};
if(a_v >= AV_Size || a_v < 0)
{
return 0;
}
return a_v_score_tbl[a_v];
}
double attack_complexity_score(enum ATTACK_COMPLEXITY a_c)
{
static const double a_c_score_tbl[AC_Size] = {1.0, 0.57};
if(a_c >= AC_Size || a_c < 0)
{
return 0;
}
return a_c_score_tbl[a_c];
}
double privileges_required_score(enum PRIVILEGES_REQUIRED p_r)
{
static const double p_r_score_tbl[PR_Size] = {1.0, 0.73, 0.32};
if(p_r >= PR_Size || p_r < 0)
{
return 0;
}
return p_r_score_tbl[p_r];
}
double user_interaction_score(enum USER_INTERACTION u_i)
{
static const double u_i_score_tbl[UI_Size] = {1.0, 0.73};
if(u_i >= UI_Size || u_i < 0)
{
return 0;
}
return u_i_score_tbl[u_i];
}
double running_time_score(enum RUNNING_TIME r_t)
{
static const double r_t_score_tbl[RT_Size] = {1.0, 0.73, 0.31, 0.12};
if(r_t >= RT_Size || r_t < 0)
{
return 0;
}
return r_t_score_tbl[r_t];
}
enum ATTACK_VECTOR str_to_attack_vector(char *a_v_str)
{
if(strcmp(a_v_str,"Network") == 0)
{
return AV_Network;
}
else if(strcmp(a_v_str,"Adjacent") == 0)
{
return AV_Adjacent;
}
else if(strcmp(a_v_str,"Local") == 0)
{
return AV_Local;
}
else if(strcmp(a_v_str,"Physical") == 0)
{
return AV_Physical;
}
else
{
return AV_Size;
}
}
enum ATTACK_COMPLEXITY str_to_attack_complexity(char *a_c_str)
{
if(strcmp(a_c_str,"Low") == 0)
{
return AC_Low;
}
else if(strcmp(a_c_str,"High") == 0)
{
return AC_Low;
}
else
{
return AC_Size;
}
}
enum PRIVILEGES_REQUIRED str_to_privileges_required(char *p_r_str)
{
if(strcmp(p_r_str,"None") == 0)
{
return PR_None;
}
else if(strcmp(p_r_str,"Low") == 0)
{
return PR_Low;
}
else if(strcmp(p_r_str,"High") == 0)
{
return PR_High;
}
else
{
return PR_Size;
}
}
enum USER_INTERACTION str_to_user_interaction(char *u_i_str)
{
if(strcmp(u_i_str,"None") == 0)
{
return UI_None;
}
else if(strcmp(u_i_str,"Required") == 0)
{
return UI_Required;
}
else
{
return UI_Size;
}
}
enum RUNNING_TIME str_to_running_time(char *r_t_str)
{
if(strcmp(r_t_str,"Quick") == 0)
{
return RT_Quick;
}
else if(strcmp(r_t_str,"Medium") == 0)
{
return RT_Medium;
}
else if(strcmp(r_t_str,"Long") == 0)
{
return RT_Long;
}
else if(strcmp(r_t_str,"Guessing") == 0)
{
return RT_Guessing;
}
else
{
return RT_Size;
}
}