consensus

package
v1.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 1, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Overview

Package consensus implements the core algorithm for computing agreement between multiple vulnerability scanners.

Mathematical Foundation: Given sets of vulnerabilities from n scanners: V₁, V₂, ..., Vₙ

Definitions:

  • Consensus (Intersection): C = V₁ ∩ V₂ ∩ ... ∩ Vₙ Vulnerabilities found by ALL scanners

  • Union: U = V₁ ∪ V₂ ∪ ... ∪ Vₙ All unique vulnerabilities found by ANY scanner

  • Unique to scanner i: Uᵢ = Vᵢ - (V₁ ∪ ... ∪ Vᵢ₋₁ ∪ Vᵢ₊₁ ∪ ... ∪ Vₙ) Vulnerabilities found ONLY by scanner i

  • Overlap Percentage: |C| / |U| × 100 Measures agreement between scanners

Algorithm Complexity Analysis: Let n = number of scanners, m = average vulnerabilities per scanner

  • Time Complexity: O(n × m) for building sets + O(m) for intersection Overall: O(n × m)
  • Space Complexity: O(n × m) for storing all vulnerability sets

Confidence Scoring: - HIGH: Found by all scanners (consensus) - MEDIUM: Found by majority of scanners (>50%) - LOW: Found by only one scanner

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Analyzer

type Analyzer struct {
	// contains filtered or unexported fields
}

Analyzer computes consensus metrics from multiple scanner results.

func NewAnalyzer

func NewAnalyzer() *Analyzer

NewAnalyzer creates a new consensus analyzer.

func (*Analyzer) Analyze

func (a *Analyzer) Analyze(target string, results []models.ScanResult) *models.ConsensusResult

Analyze computes the consensus between scan results from multiple scanners.

Algorithm Steps: 1. Extract vulnerabilities from each successful scan 2. Build a map of vulnerability key -> list of scanners that found it 3. Compute intersection (consensus) - vulns found by ALL scanners 4. Compute unique findings - vulns found by ONLY one scanner 5. Calculate overlap percentage and confidence levels

Time Complexity: O(n × m) where n = scanners, m = avg vulnerabilities Space Complexity: O(n × m) for the vulnerability map

func (*Analyzer) CalculateConfidence

func (a *Analyzer) CalculateConfidence(occ *VulnerabilityOccurrence, totalScanners int) ConfidenceScore

CalculateConfidence determines confidence level for a vulnerability.

func (*Analyzer) ComputeStatistics

func (a *Analyzer) ComputeStatistics(result *models.ConsensusResult) Statistics

ComputeStatistics calculates detailed statistics from the analysis.

func (*Analyzer) GetVulnerabilityConfidences

func (a *Analyzer) GetVulnerabilityConfidences(results []models.ScanResult) map[string]ConfidenceScore

GetVulnerabilityConfidences returns confidence scores for all vulnerabilities.

type ConfidenceScore

type ConfidenceScore struct {
	Level      models.ConfidenceLevel
	Scanners   []string
	Percentage float64
}

ConfidenceScore calculates confidence for a vulnerability based on scanner agreement.

type Statistics

type Statistics struct {
	TotalVulnerabilities   int
	ConsensusCount         int
	UniqueCount            map[string]int
	OverlapPercentage      float64
	SeverityDistribution   map[models.Severity]int
	ConsensusBySeverity    map[models.Severity]int
	HighConfidenceCount    int
	MediumConfidenceCount  int
	LowConfidenceCount     int
	ScannerAgreementMatrix map[string]map[string]int
}

Statistics holds computed statistics about the consensus analysis.

type VulnerabilityOccurrence

type VulnerabilityOccurrence struct {
	Vulnerability models.Vulnerability
	Scanners      []string
	ScannerSet    map[string]struct{}
	Count         int
}

VulnerabilityOccurrence tracks which scanners found a vulnerability.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL