Open SCAP Library
|
00001 /* 00002 * Copyright 2008-2009 Red Hat Inc., Durham, North Carolina. 00003 * All Rights Reserved. 00004 * 00005 * This library is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU Lesser General Public 00007 * License as published by the Free Software Foundation; either 00008 * version 2.1 of the License, or (at your option) any later version. 00009 * 00010 * This library is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 * Lesser General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU Lesser General Public 00016 * License along with this library; if not, write to the Free Software 00017 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00018 * 00019 * Authors: 00020 * Tomas Heinrich <theinric@redhat.com> 00021 * Peter Vrabec <pvrabec@redhat.com> 00022 * Brandon Dixon <Brandon.Dixon@g2-inc.com> 00023 * Lukas Kuklinek <lkuklinek@redhat.com> 00024 */ 00035 #ifndef _CVSSCALC_H_ 00036 #define _CVSSCALC_H_ 00037 00038 #include <stdbool.h> 00039 #include <time.h> 00040 #include <stdio.h> 00041 00042 00044 const char *cvss_model_supported(void); 00045 00047 enum cvss_category { 00048 CVSS_NONE = 0x0000, 00049 CVSS_BASE = 0x0100, 00050 CVSS_TEMPORAL = 0x0200, 00051 CVSS_ENVIRONMENTAL = 0x0300, 00052 }; 00053 00055 enum cvss_access_vector { 00056 CVSS_AV_NOT_SET, 00057 CVSS_AV_LOCAL, 00058 CVSS_AV_ADJACENT_NETWORK, 00059 CVSS_AV_NETWORK, 00060 CVSS_AV_END_ 00061 }; 00062 00064 enum cvss_access_complexity { 00065 CVSS_AC_NOT_SET, 00066 CVSS_AC_HIGH, 00067 CVSS_AC_MEDIUM, 00068 CVSS_AC_LOW, 00069 CVSS_AC_END_ 00070 }; 00071 00073 enum cvss_authentication { 00074 CVSS_AU_NOT_SET, 00075 CVSS_AU_MULTIPLE, 00076 CVSS_AU_SINGLE, 00077 CVSS_AU_NONE, 00078 CVSS_AU_END_ 00079 }; 00080 00082 enum cvss_cia_impact { 00083 CVSS_IMP_NOT_SET, 00084 CVSS_IMP_NONE, 00085 CVSS_IMP_PARTIAL, 00086 CVSS_IMP_COMPLETE, 00087 CVSS_IMP_END_ 00088 }; 00089 00091 enum cvss_exploitability { 00092 CVSS_E_NOT_DEFINED, 00093 CVSS_E_UNPROVEN, 00094 CVSS_E_PROOF_OF_CONCEPT, 00095 CVSS_E_FUNCTIONAL, 00096 CVSS_E_HIGH, 00097 CVSS_E_END_ 00098 }; 00099 00101 enum cvss_remediation_level { 00102 CVSS_RL_NOT_DEFINED, 00103 CVSS_RL_OFFICIAL_FIX, 00104 CVSS_RL_TEMPORARY_FIX, 00105 CVSS_RL_WORKAROUND, 00106 CVSS_RL_UNAVAILABLE, 00107 CVSS_RL_END_ 00108 }; 00109 00111 enum cvss_report_confidence { 00112 CVSS_RC_NOT_DEFINED, 00113 CVSS_RC_UNCONFIRMED, 00114 CVSS_RC_UNCORROBORATED, 00115 CVSS_RC_CONFIRMED, 00116 CVSS_RC_END_ 00117 }; 00118 00120 enum cvss_collateral_damage_potential { 00121 CVSS_CDP_NOT_DEFINED, 00122 CVSS_CDP_NONE, 00123 CVSS_CDP_LOW, 00124 CVSS_CDP_LOW_MEDIUM, 00125 CVSS_CDP_MEDIUM_HIGH, 00126 CVSS_CDP_HIGH, 00127 CVSS_CDP_END_ 00128 }; 00129 00131 enum cvss_target_distribution { 00132 CVSS_TD_NOT_DEFINED, 00133 CVSS_TD_NONE, 00134 CVSS_TD_LOW, 00135 CVSS_TD_MEDIUM, 00136 CVSS_TD_HIGH, 00137 CVSS_TD_END_ 00138 }; 00139 00141 enum cvss_cia_requirement { 00142 CVSS_REQ_NOT_DEFINED, 00143 CVSS_REQ_LOW, 00144 CVSS_REQ_MEDIUM, 00145 CVSS_REQ_HIGH, 00146 CVSS_REQ_END_ 00147 }; 00148 00155 struct cvss_impact; 00156 00163 struct cvss_metrics; 00164 00166 float cvss_round(float x); 00167 00169 struct cvss_impact *cvss_impact_new(void); 00171 struct cvss_impact *cvss_impact_new_from_vector(const char *cvss_vector); 00173 struct cvss_impact *cvss_impact_clone(const struct cvss_impact* impact); 00175 //struct cvss_impact *cvss_impact_new_parse(const char *filename); 00177 void cvss_impact_free(struct cvss_impact* impact); 00184 void cvss_impact_describe(const struct cvss_impact *impact, FILE *f); 00185 00187 struct cvss_metrics *cvss_impact_get_base_metrics(const struct cvss_impact* impact); 00189 struct cvss_metrics *cvss_impact_get_temporal_metrics(const struct cvss_impact* impact); 00191 struct cvss_metrics *cvss_impact_get_environmental_metrics(const struct cvss_impact* impact); 00194 bool cvss_impact_set_metrics(struct cvss_impact* impact, struct cvss_metrics *metrics); 00196 char *cvss_impact_to_vector(const struct cvss_impact* impact); 00197 00219 float cvss_impact_base_exploitability_subscore(const struct cvss_impact* impact); 00220 00229 float cvss_impact_base_impact_subscore(const struct cvss_impact* impact); 00230 00243 float cvss_impact_base_score(const struct cvss_impact* impact); 00244 00258 float cvss_impact_temporal_multiplier(const struct cvss_impact* impact); 00259 00269 float cvss_impact_temporal_score(const struct cvss_impact* impact); 00270 00279 float cvss_impact_base_adjusted_impact_subscore(const struct cvss_impact* impact); 00280 00288 float cvss_impact_adjusted_base_score(const struct cvss_impact* impact); 00289 00297 float cvss_impact_adjusted_temporal_score(const struct cvss_impact* impact); 00298 00310 float cvss_impact_environmental_score(const struct cvss_impact* impact); 00311 00314 00315 struct cvss_metrics *cvss_metrics_new(enum cvss_category category); 00317 struct cvss_metrics *cvss_metrics_clone(const struct cvss_metrics* metrics); 00319 void cvss_metrics_free(struct cvss_metrics* metrics); 00321 enum cvss_category cvss_metrics_get_category(const struct cvss_metrics* metrics); 00323 const char *cvss_metrics_get_source(const struct cvss_metrics* metrics); 00325 bool cvss_metrics_set_source(struct cvss_metrics* metrics, const char *new_source); 00327 const char *cvss_metrics_get_generated_on_datetime(const struct cvss_metrics* metrics); 00329 bool cvss_metrics_set_generated_on_datetime(struct cvss_metrics* metrics, const char *new_datetime); 00331 const char *cvss_metrics_get_upgraded_from_version(const struct cvss_metrics* metrics); 00333 bool cvss_metrics_set_upgraded_from_version(struct cvss_metrics* metrics, const char *new_upgraded_from_version); 00335 float cvss_metrics_get_score(const struct cvss_metrics* metrics); 00337 bool cvss_metrics_set_score(struct cvss_metrics* metrics, float score); 00342 bool cvss_metrics_is_valid(const struct cvss_metrics* metrics); 00343 00354 00355 enum cvss_access_vector cvss_metrics_get_access_vector(const struct cvss_metrics* metrics); 00357 enum cvss_access_complexity cvss_metrics_get_access_complexity(const struct cvss_metrics* metrics); 00359 enum cvss_authentication cvss_metrics_get_authentication(const struct cvss_metrics* metrics); 00361 enum cvss_cia_impact cvss_metrics_get_confidentiality_impact(const struct cvss_metrics* metrics); 00363 enum cvss_cia_impact cvss_metrics_get_integrity_impact(const struct cvss_metrics* metrics); 00365 enum cvss_cia_impact cvss_metrics_get_availability_impact(const struct cvss_metrics* metrics); 00367 enum cvss_exploitability cvss_metrics_get_exploitability(const struct cvss_metrics* metrics); 00369 enum cvss_remediation_level cvss_metrics_get_remediation_level(const struct cvss_metrics* metrics); 00371 enum cvss_report_confidence cvss_metrics_get_report_confidence(const struct cvss_metrics* metrics); 00373 enum cvss_collateral_damage_potential cvss_metrics_get_collateral_damage_potential(const struct cvss_metrics* metrics); 00375 enum cvss_target_distribution cvss_metrics_get_target_distribution(const struct cvss_metrics* metrics); 00377 enum cvss_cia_requirement cvss_metrics_get_confidentiality_requirement(const struct cvss_metrics* metrics); 00379 enum cvss_cia_requirement cvss_metrics_get_integrity_requirement(const struct cvss_metrics* metrics); 00381 enum cvss_cia_requirement cvss_metrics_get_availability_requirement(const struct cvss_metrics* metrics); 00382 00384 bool cvss_metrics_set_access_vector(struct cvss_metrics* metrics, enum cvss_access_vector); 00386 bool cvss_metrics_set_access_complexity(struct cvss_metrics* metrics, enum cvss_access_complexity); 00388 bool cvss_metrics_set_authentication(struct cvss_metrics* metrics, enum cvss_authentication); 00390 bool cvss_metrics_set_confidentiality_impact(struct cvss_metrics* metrics, enum cvss_cia_impact); 00392 bool cvss_metrics_set_integrity_impact(struct cvss_metrics* metrics, enum cvss_cia_impact); 00394 bool cvss_metrics_set_availability_impact(struct cvss_metrics* metrics, enum cvss_cia_impact); 00396 bool cvss_metrics_set_exploitability(struct cvss_metrics* metrics, enum cvss_exploitability); 00398 bool cvss_metrics_set_remediation_level(struct cvss_metrics* metrics, enum cvss_remediation_level); 00400 bool cvss_metrics_set_report_confidence(struct cvss_metrics* metrics, enum cvss_report_confidence); 00402 bool cvss_metrics_set_collateral_damage_potential(struct cvss_metrics* metrics, enum cvss_collateral_damage_potential); 00404 bool cvss_metrics_set_target_distribution(struct cvss_metrics* metrics, enum cvss_target_distribution); 00406 bool cvss_metrics_set_confidentiality_requirement(struct cvss_metrics* metrics, enum cvss_cia_requirement); 00408 bool cvss_metrics_set_integrity_requirement(struct cvss_metrics* metrics, enum cvss_cia_requirement); 00410 bool cvss_metrics_set_availability_requirement(struct cvss_metrics* metrics, enum cvss_cia_requirement); 00411 00412 00416 #endif // _CVSSCALC_H_