new advisories work and features gaps work

This commit is contained in:
master
2026-01-14 18:39:19 +02:00
parent 95d5898650
commit 15aeac8e8b
148 changed files with 16731 additions and 554 deletions

View File

@@ -20,6 +20,8 @@ public sealed class EvidenceBundleAdapter : EvidenceAdapterBase, IEvidenceAdapte
public const string CallStack = "callstack/v1";
public const string Diff = "diff/v1";
public const string GraphRevision = "graph-revision/v1";
// Sprint: SPRINT_20260112_008_LB_binary_diff_evidence_models (BINDIFF-LB-003)
public const string BinaryDiff = "binary-diff/v1";
}
/// <inheritdoc />
@@ -76,6 +78,13 @@ public sealed class EvidenceBundleAdapter : EvidenceAdapterBase, IEvidenceAdapte
results.Add(ConvertGraphRevision(bundle.GraphRevision, subjectNodeId, provenance));
}
// Sprint: SPRINT_20260112_008_LB_binary_diff_evidence_models (BINDIFF-LB-003)
// Convert binary diff evidence
if (bundle.BinaryDiff is { Status: EvidenceStatus.Available })
{
results.Add(ConvertBinaryDiff(bundle.BinaryDiff, subjectNodeId, provenance));
}
return results;
}
@@ -215,6 +224,32 @@ public sealed class EvidenceBundleAdapter : EvidenceAdapterBase, IEvidenceAdapte
return CreateEvidence(subjectNodeId, EvidenceType.Dependency, payload, provenance, SchemaVersions.GraphRevision);
}
// Sprint: SPRINT_20260112_008_LB_binary_diff_evidence_models (BINDIFF-LB-003)
private static IEvidence ConvertBinaryDiff(
BinaryDiffEvidence binaryDiff,
string subjectNodeId,
EvidenceProvenance provenance)
{
var payload = new BinaryDiffPayload
{
Hash = binaryDiff.Hash,
DiffType = binaryDiff.DiffType.ToString(),
PreviousBinaryDigest = binaryDiff.PreviousBinaryDigest,
CurrentBinaryDigest = binaryDiff.CurrentBinaryDigest,
BinaryFormat = binaryDiff.BinaryFormat,
ToolVersion = binaryDiff.ToolVersion,
SimilarityScore = binaryDiff.SimilarityScore,
FunctionChangeCount = binaryDiff.FunctionChanges.Length,
SymbolChangeCount = binaryDiff.SymbolChanges.Length,
SectionChangeCount = binaryDiff.SectionChanges.Length,
SecurityChangeCount = binaryDiff.SecurityChanges.Length,
HasSemanticDiff = binaryDiff.SemanticDiff is not null,
SemanticSimilarity = binaryDiff.SemanticDiff?.Similarity
};
return CreateEvidence(subjectNodeId, EvidenceType.Artifact, payload, provenance, SchemaVersions.BinaryDiff);
}
#region Payload Records
internal sealed record ReachabilityPayload
@@ -313,5 +348,23 @@ public sealed class EvidenceBundleAdapter : EvidenceAdapterBase, IEvidenceAdapte
public int? EdgeCount { get; init; }
}
// Sprint: SPRINT_20260112_008_LB_binary_diff_evidence_models (BINDIFF-LB-003)
internal sealed record BinaryDiffPayload
{
public string? Hash { get; init; }
public string? DiffType { get; init; }
public string? PreviousBinaryDigest { get; init; }
public string? CurrentBinaryDigest { get; init; }
public string? BinaryFormat { get; init; }
public string? ToolVersion { get; init; }
public double? SimilarityScore { get; init; }
public int FunctionChangeCount { get; init; }
public int SymbolChangeCount { get; init; }
public int SectionChangeCount { get; init; }
public int SecurityChangeCount { get; init; }
public bool HasSemanticDiff { get; init; }
public double? SemanticSimilarity { get; init; }
}
#endregion
}