package cvss import ( "strings" ) //go:generate stringer -linecomment -type=v3Key //go:generate stringer -linecomment -type=v3Metric // CVSS v3 metric key type v3Key byte const ( v3AttackVector v3Key = iota // AV v3AttackComplexity // AC v3PrivilegesRequired // PR v3UserInteraction // UI v3Scope // S v3Confidentiality // C v3Integrity // I v3Availability // A v3ExploitCodeMaturity // E v3RemediationLevel // RL v3ReportConfidence // RC v3ConfidentialityRequirement // CR v3IntegrityRequirement // IR v3AvailabilityRequirement // AR v3ModifiedAttackVector // MAV v3ModifiedAttackComplexity // MAC v3ModifiedPrivilegesRequired // MPR v3ModifiedUserInteraction // MUI v3ModifiedScope // MS v3ModifiedConfidentiality // MC v3ModifiedIntegrity // MI v3ModifiedAvailability // MA v3InvalidKey // invalid ) // CVSS v3 metric key info lut var v3Keys = map[v3Key]struct { Name string Category Category } { v3AttackVector: { "Attack Vector", Base }, v3AttackComplexity: { "Attack Complexity", Base }, v3PrivilegesRequired: { "Privileges Required", Base }, v3UserInteraction: { "User Interaction", Base }, v3Scope: { "Scope", Base }, v3Confidentiality: { "Confidentiality", Base }, v3Integrity: { "Integrity", Base }, v3Availability: { "Availability", Base }, v3ExploitCodeMaturity: { "Exploit Code Maturity", Temporal }, v3RemediationLevel: { "Remediation Level", Temporal }, v3ReportConfidence: { "Report Confidence", Temporal }, v3ConfidentialityRequirement: { "Confidentiality Requirement", Environmental }, v3IntegrityRequirement: { "Integrity Requirement", Environmental }, v3AvailabilityRequirement: { "Availability Requirement", Environmental }, v3ModifiedAttackVector: { "Modified Attack Vector", Environmental }, v3ModifiedAttackComplexity: { "Modified Attack Complexity", Environmental }, v3ModifiedPrivilegesRequired: { "Modified Privileges Required", Environmental }, v3ModifiedUserInteraction: { "Modified User Interaction", Environmental }, v3ModifiedScope: { "Modified Scope", Environmental }, v3ModifiedConfidentiality: { "Modified Confidentiality", Environmental }, v3ModifiedIntegrity: { "Modified Integrity", Environmental }, v3ModifiedAvailability: { "Modified Availability", Environmental }, } // metric key IDs lut var v3KeyIds = map[string]v3Key { "AV": v3AttackVector, "AC": v3AttackComplexity, "PR": v3PrivilegesRequired, "UI": v3UserInteraction, "S": v3Scope, "C": v3Confidentiality, "I": v3Integrity, "A": v3Availability, "E": v3ExploitCodeMaturity, "RL": v3RemediationLevel, "RC": v3ReportConfidence, "CR": v3ConfidentialityRequirement, "IR": v3IntegrityRequirement, "AR": v3AvailabilityRequirement, "MAV": v3ModifiedAttackVector, "MAC": v3ModifiedAttackComplexity, "MPR": v3ModifiedPrivilegesRequired, "MUI": v3ModifiedUserInteraction, "MS": v3ModifiedScope, "MC": v3ModifiedConfidentiality, "MI": v3ModifiedIntegrity, "MA": v3ModifiedAvailability, } // // Get metric key from string. // func getV3KeyFromString(s string) (v3Key, error) { // k, ok := v3KeyIds[s] // if ok { // return k, nil // } else { // return v3InvalidKey, newBadKey(V30, s) // } // } // Get metric key name. func (k v3Key) Name() string { return v3Keys[k].Name } // Get metric key category. func (k v3Key) Category() Category { return v3Keys[k].Category }