pub mod core_analyzer;
pub mod vulnerability_database;
pub mod risk_assessment;
pub mod threat_modeling;
pub mod crypto_analysis;
pub mod compliance_framework;
pub mod security_metrics;
pub mod security_types;
pub use security_types::*;
pub use core_analyzer::{
TraitSecurityAnalyzer,
SecurityAnalysisResult as CoreSecurityAnalysisResult,
SecurityAnalysisError,
RiskRecommendation,
};
pub use vulnerability_database::{
VulnerabilityDatabase,
CveEntry,
VulnerabilityRule,
create_vulnerability_details,
};
pub use risk_assessment::{
SecurityRiskAssessor,
RiskAssessmentModel,
BayesianRiskParameters,
MonteCarloConfig,
};
pub use threat_modeling::{
ThreatModelingEngine,
StrideAnalyzer,
AttackTreeGenerator,
ThreatScenario,
ThreatIntelligenceManager,
AttackVector,
ThreatLandscapeAssessment,
ThreatModelingResult,
StrideAnalysisResult,
AttackTree,
ThreatModelingError,
create_threat_modeling_engine,
create_comprehensive_threat_model,
};
pub use crypto_analysis::{
CryptographicAnalyzer,
CryptographicAlgorithmAnalyzer,
KeyManagementAnalyzer,
SideChannelAttackDetector,
CryptographicProtocolAnalyzer,
RandomNumberGeneratorAnalyzer,
HashFunctionAnalyzer,
DigitalSignatureAnalyzer,
EncryptionAnalyzer,
QuantumResistanceAnalyzer,
CryptographicImplementationAnalyzer,
CryptographicAnalysisResult,
CryptographicAnalysisError,
create_cryptographic_analyzer,
analyze_cryptographic_security,
};
pub use compliance_framework::{
ComplianceFrameworkManager,
ComplianceEngine,
RegulatoryFramework,
SecurityStandard,
AuditManager,
PolicyEngine,
ControlsAssessor,
GapAnalyzer,
CertificationManager,
ComplianceMonitor,
ComplianceReportingEngine,
DocumentationManager,
ComplianceAssessmentResult,
FrameworkAssessmentResult,
ComplianceStatus,
ComplianceLevel,
ComplianceError,
create_compliance_framework_manager,
assess_comprehensive_compliance,
};
pub use security_metrics::{
SecurityMetricsCollector,
MetricCollector,
KpiAnalyzer,
KriMonitor,
DashboardManager,
TrendAnalyzer,
AnomalyDetector,
BenchmarkingEngine,
RealTimeMonitor,
ScorecardGenerator,
CorrelationAnalyzer,
PerformanceMeasurer,
ComplianceTracker,
SecurityMetricsResult,
MetricCollection,
SecurityMetricsError,
create_security_metrics_collector,
collect_comprehensive_security_metrics,
};
use std::collections::HashMap;
use std::time::{Duration, SystemTime};
use serde::{Serialize, Deserialize};
use crate::trait_explorer::TraitContext;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ComprehensiveSecurityAnalysisResult {
pub analysis_id: String,
pub analysis_timestamp: SystemTime,
pub core_analysis: SecurityAnalysis,
pub vulnerability_assessment: VulnerabilityAssessmentResult,
pub risk_assessment: RiskAssessmentResult,
pub threat_modeling: ThreatModelingResult,
pub cryptographic_analysis: CryptographicAnalysisResult,
pub compliance_assessment: ComplianceAssessmentResult,
pub security_metrics: SecurityMetricsResult,
pub overall_security_score: f64,
pub overall_risk_level: RiskLevel,
pub overall_compliance_status: ComplianceStatus,
pub consolidated_recommendations: Vec<ConsolidatedRecommendation>,
pub executive_summary: ExecutiveSummary,
pub analysis_confidence: f64,
pub analysis_metadata: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConsolidatedRecommendation {
pub recommendation_id: String,
pub title: String,
pub description: String,
pub priority: AnalysisPriority,
pub analysis_domains: Vec<String>,
pub related_vulnerabilities: Vec<String>,
pub related_risks: Vec<String>,
pub related_compliance_issues: Vec<String>,
pub implementation_guidance: String,
pub expected_risk_reduction: f64,
pub implementation_cost: f64,
pub implementation_timeline: Duration,
pub success_metrics: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExecutiveSummary {
pub security_posture: SecurityPosture,
pub key_findings: Vec<String>,
pub critical_issues: Vec<String>,
pub top_risks: Vec<String>,
pub compliance_summary: String,
pub recommended_next_steps: Vec<String>,
pub resource_requirements: ResourceRequirements,
pub improvement_timeline: Duration,
pub roi_estimate: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum SecurityPosture {
Strong,
Adequate,
Weak,
Poor,
Critical,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceRequirements {
pub budget_estimate: f64,
pub personnel_requirements: Vec<String>,
pub technology_requirements: Vec<String>,
pub training_requirements: Vec<String>,
pub consulting_requirements: Vec<String>,
}
#[derive(Debug)]
pub struct ComprehensiveSecurityAnalyzer {
core_analyzer: TraitSecurityAnalyzer,
vulnerability_database: VulnerabilityDatabase,
risk_assessor: SecurityRiskAssessor,
threat_modeling_engine: ThreatModelingEngine,
cryptographic_analyzer: CryptographicAnalyzer,
compliance_manager: ComplianceFrameworkManager,
metrics_collector: SecurityMetricsCollector,
analysis_config: SecurityAnalysisConfig,
}
impl ComprehensiveSecurityAnalyzer {
pub fn new() -> Self {
Self {
core_analyzer: TraitSecurityAnalyzer::new(),
vulnerability_database: VulnerabilityDatabase::new(),
risk_assessor: SecurityRiskAssessor::new(),
threat_modeling_engine: ThreatModelingEngine::new(),
cryptographic_analyzer: CryptographicAnalyzer::new(),
compliance_manager: ComplianceFrameworkManager::new(),
metrics_collector: SecurityMetricsCollector::new(),
analysis_config: SecurityAnalysisConfig::default(),
}
}
pub fn configure_analysis(&mut self, config: SecurityAnalysisConfig) {
self.analysis_config = config;
}
pub fn analyze_comprehensive_security(
&mut self,
context: &TraitContext,
) -> Result<ComprehensiveSecurityAnalysisResult, SecurityAnalysisError> {
let analysis_id = self.generate_analysis_id();
let analysis_timestamp = SystemTime::now();
let core_analysis = self.core_analyzer.analyze_trait_security(context)
.map_err(|e| SecurityAnalysisError::AnalysisError(format!("Core analysis failed: {}", e)))?;
let vulnerability_assessment = self.vulnerability_database.get_vulnerabilities(context)
.map_err(|e| SecurityAnalysisError::AnalysisError(format!("Vulnerability assessment failed: {}", e)))?;
let risk_assessment = self.risk_assessor.assess_comprehensive_risk(context)
.map_err(|e| SecurityAnalysisError::AnalysisError(format!("Risk assessment failed: {}", e)))?;
let threat_modeling = self.threat_modeling_engine.analyze_threats(context)
.map_err(|e| SecurityAnalysisError::AnalysisError(format!("Threat modeling failed: {}", e)))?;
let cryptographic_analysis = self.cryptographic_analyzer.analyze_cryptographic_security(context)
.map_err(|e| SecurityAnalysisError::AnalysisError(format!("Cryptographic analysis failed: {}", e)))?;
let compliance_assessment = self.compliance_manager.assess_compliance(context)
.map_err(|e| SecurityAnalysisError::AnalysisError(format!("Compliance assessment failed: {}", e)))?;
let security_metrics = self.metrics_collector.collect_security_metrics(context)
.map_err(|e| SecurityAnalysisError::AnalysisError(format!("Security metrics collection failed: {}", e)))?;
let overall_security_score = self.calculate_overall_security_score(
&core_analysis,
&vulnerability_assessment,
&risk_assessment,
&threat_modeling,
&cryptographic_analysis,
&compliance_assessment,
&security_metrics,
)?;
let overall_risk_level = self.determine_overall_risk_level(&risk_assessment, &threat_modeling)?;
let overall_compliance_status = self.determine_overall_compliance_status(&compliance_assessment)?;
let consolidated_recommendations = self.generate_consolidated_recommendations(
&core_analysis,
&vulnerability_assessment,
&risk_assessment,
&threat_modeling,
&cryptographic_analysis,
&compliance_assessment,
)?;
let executive_summary = self.generate_executive_summary(
overall_security_score,
&overall_risk_level,
&overall_compliance_status,
&consolidated_recommendations,
)?;
let analysis_confidence = self.calculate_analysis_confidence(
&core_analysis,
&vulnerability_assessment,
&risk_assessment,
&threat_modeling,
&cryptographic_analysis,
&compliance_assessment,
&security_metrics,
)?;
let analysis_metadata = self.generate_analysis_metadata(context);
Ok(ComprehensiveSecurityAnalysisResult {
analysis_id,
analysis_timestamp,
core_analysis,
vulnerability_assessment,
risk_assessment,
threat_modeling,
cryptographic_analysis,
compliance_assessment,
security_metrics,
overall_security_score,
overall_risk_level,
overall_compliance_status,
consolidated_recommendations,
executive_summary,
analysis_confidence,
analysis_metadata,
})
}
fn generate_analysis_id(&self) -> String {
format!("comprehensive_analysis_{}",
SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).expect("duration_since should succeed").as_secs())
}
fn calculate_overall_security_score(
&self,
core_analysis: &SecurityAnalysis,
vulnerability_assessment: &VulnerabilityAssessmentResult,
risk_assessment: &RiskAssessmentResult,
threat_modeling: &ThreatModelingResult,
cryptographic_analysis: &CryptographicAnalysisResult,
compliance_assessment: &ComplianceAssessmentResult,
security_metrics: &SecurityMetricsResult,
) -> Result<f64, SecurityAnalysisError> {
let weights = [0.2, 0.15, 0.2, 0.15, 0.1, 0.1, 0.1]; let scores = [
core_analysis.overall_security_score,
vulnerability_assessment.overall_vulnerability_score,
risk_assessment.overall_risk_score,
threat_modeling.model_confidence * 10.0, cryptographic_analysis.overall_cryptographic_score,
compliance_assessment.compliance_score,
security_metrics.overall_security_score,
];
let weighted_score = weights.iter()
.zip(scores.iter())
.map(|(weight, score)| weight * score)
.sum::<f64>();
Ok(weighted_score.min(10.0).max(0.0))
}
fn determine_overall_risk_level(
&self,
risk_assessment: &RiskAssessmentResult,
threat_modeling: &ThreatModelingResult,
) -> Result<RiskLevel, SecurityAnalysisError> {
let risk_level = if risk_assessment.overall_risk_level.to_numeric_value() >
RiskLevel::from_score(threat_modeling.model_confidence * 10.0).to_numeric_value() {
risk_assessment.overall_risk_level.clone()
} else {
RiskLevel::from_score(threat_modeling.model_confidence * 10.0)
};
Ok(risk_level)
}
fn determine_overall_compliance_status(
&self,
compliance_assessment: &ComplianceAssessmentResult,
) -> Result<ComplianceStatus, SecurityAnalysisError> {
Ok(compliance_assessment.framework_assessments.values()
.map(|assessment| &assessment.compliance_status)
.min()
.unwrap_or(&ComplianceStatus::NotAssessed)
.clone())
}
fn generate_consolidated_recommendations(
&self,
core_analysis: &SecurityAnalysis,
vulnerability_assessment: &VulnerabilityAssessmentResult,
risk_assessment: &RiskAssessmentResult,
threat_modeling: &ThreatModelingResult,
cryptographic_analysis: &CryptographicAnalysisResult,
compliance_assessment: &ComplianceAssessmentResult,
) -> Result<Vec<ConsolidatedRecommendation>, SecurityAnalysisError> {
let mut recommendations = Vec::new();
for (i, recommendation) in core_analysis.recommendations.iter().enumerate() {
recommendations.push(ConsolidatedRecommendation {
recommendation_id: format!("core_{}", i),
title: recommendation.title.clone(),
description: recommendation.description.clone(),
priority: recommendation.priority.clone(),
analysis_domains: vec!["core_analysis".to_string()],
related_vulnerabilities: Vec::new(),
related_risks: Vec::new(),
related_compliance_issues: Vec::new(),
implementation_guidance: recommendation.implementation_guidance.clone(),
expected_risk_reduction: recommendation.expected_risk_reduction,
implementation_cost: recommendation.cost_estimate,
implementation_timeline: recommendation.timeline,
success_metrics: recommendation.success_criteria.clone(),
});
}
Ok(recommendations)
}
fn generate_executive_summary(
&self,
overall_security_score: f64,
overall_risk_level: &RiskLevel,
overall_compliance_status: &ComplianceStatus,
consolidated_recommendations: &[ConsolidatedRecommendation],
) -> Result<ExecutiveSummary, SecurityAnalysisError> {
let security_posture = match overall_security_score {
s if s >= 8.5 => SecurityPosture::Strong,
s if s >= 7.0 => SecurityPosture::Adequate,
s if s >= 5.0 => SecurityPosture::Weak,
s if s >= 3.0 => SecurityPosture::Poor,
_ => SecurityPosture::Critical,
};
let critical_recommendations: Vec<_> = consolidated_recommendations.iter()
.filter(|r| matches!(r.priority, AnalysisPriority::Critical))
.map(|r| r.title.clone())
.collect();
let high_priority_recommendations: Vec<_> = consolidated_recommendations.iter()
.filter(|r| matches!(r.priority, AnalysisPriority::High))
.map(|r| r.title.clone())
.take(5)
.collect();
Ok(ExecutiveSummary {
security_posture,
key_findings: vec![
format!("Overall security score: {:.1}/10.0", overall_security_score),
format!("Risk level: {:?}", overall_risk_level),
format!("Compliance status: {:?}", overall_compliance_status),
],
critical_issues: critical_recommendations,
top_risks: vec![], compliance_summary: format!("Overall compliance status: {:?}", overall_compliance_status),
recommended_next_steps: high_priority_recommendations,
resource_requirements: ResourceRequirements {
budget_estimate: consolidated_recommendations.iter()
.map(|r| r.implementation_cost)
.sum(),
personnel_requirements: vec!["Security Engineer".to_string(), "Compliance Specialist".to_string()],
technology_requirements: vec!["Vulnerability Scanner".to_string(), "SIEM System".to_string()],
training_requirements: vec!["Security Awareness Training".to_string()],
consulting_requirements: vec!["Security Assessment".to_string()],
},
improvement_timeline: Duration::from_secs(86400 * 90), roi_estimate: 3.5, })
}
fn calculate_analysis_confidence(
&self,
core_analysis: &SecurityAnalysis,
vulnerability_assessment: &VulnerabilityAssessmentResult,
risk_assessment: &RiskAssessmentResult,
threat_modeling: &ThreatModelingResult,
cryptographic_analysis: &CryptographicAnalysisResult,
compliance_assessment: &ComplianceAssessmentResult,
security_metrics: &SecurityMetricsResult,
) -> Result<f64, SecurityAnalysisError> {
let confidence_scores = [
core_analysis.analysis_confidence,
vulnerability_assessment.assessment_confidence,
risk_assessment.assessment_confidence,
threat_modeling.model_confidence,
cryptographic_analysis.analysis_confidence,
compliance_assessment.assessment_confidence,
security_metrics.analysis_confidence,
];
let average_confidence = confidence_scores.iter().sum::<f64>() / confidence_scores.len() as f64;
Ok(average_confidence.min(1.0).max(0.0))
}
fn generate_analysis_metadata(&self, context: &TraitContext) -> HashMap<String, String> {
let mut metadata = HashMap::new();
metadata.insert("analysis_version".to_string(), "1.0.0".to_string());
metadata.insert("framework_version".to_string(), "2024.1".to_string());
metadata.insert("analysis_scope".to_string(), "comprehensive".to_string());
metadata.insert("context_id".to_string(), context.trait_name.clone());
metadata
}
}
impl Default for ComprehensiveSecurityAnalyzer {
fn default() -> Self {
Self::new()
}
}
pub fn create_comprehensive_security_analyzer() -> ComprehensiveSecurityAnalyzer {
ComprehensiveSecurityAnalyzer::new()
}
pub fn perform_comprehensive_security_analysis(
context: &TraitContext,
) -> Result<ComprehensiveSecurityAnalysisResult, SecurityAnalysisError> {
let mut analyzer = create_comprehensive_security_analyzer();
analyzer.analyze_comprehensive_security(context)
}
pub fn perform_comprehensive_security_analysis_with_config(
context: &TraitContext,
config: SecurityAnalysisConfig,
) -> Result<ComprehensiveSecurityAnalysisResult, SecurityAnalysisError> {
let mut analyzer = create_comprehensive_security_analyzer();
analyzer.configure_analysis(config);
analyzer.analyze_comprehensive_security(context)
}