in cvss3/score.go [139:178]
func (v Vector) modifiedImpactScore() float64 {
var mc, mi, ma float64
if v.EnvironmentalMetrics.ModifiedConfidentiality.defined() {
mc = v.EnvironmentalMetrics.ModifiedConfidentiality.weight()
} else {
mc = v.BaseMetrics.Confidentiality.weight()
}
if v.EnvironmentalMetrics.ModifiedIntegrity.defined() {
mi = v.EnvironmentalMetrics.ModifiedIntegrity.weight()
} else {
mi = v.BaseMetrics.Integrity.weight()
}
if v.EnvironmentalMetrics.ModifiedAvailability.defined() {
ma = v.EnvironmentalMetrics.ModifiedAvailability.weight()
} else {
ma = v.BaseMetrics.Availability.weight()
}
iscModified := math.Min(
1-(1-mc*v.EnvironmentalMetrics.ConfidentialityRequirement.weight())*
(1-mi*v.EnvironmentalMetrics.IntegrityRequirement.weight())*
(1-ma*v.EnvironmentalMetrics.AvailabilityRequirement.weight()),
0.915,
)
if v.modifiedScopeChanged() {
switch v.version {
case version(1):
return 7.52*(iscModified-0.029) - 3.25*math.Pow((iscModified*0.9731-0.02), 13)
case version(0):
fallthrough
default:
return 7.52*(iscModified-0.029) - 3.25*math.Pow((iscModified-0.02), 15)
}
} else {
return 6.42 * iscModified
}
}