save checkpoint: save features

This commit is contained in:
master
2026-02-12 10:27:23 +02:00
parent dca86e1248
commit 5bca406787
8837 changed files with 1796879 additions and 5294 deletions

View File

@@ -88,6 +88,11 @@ public sealed class ResolutionController : ControllerBase
var result = await _resolutionService.ResolveAsync(request, options, ct);
return Ok(result);
}
catch (ArgumentException ex)
{
_logger.LogWarning(ex, "Invalid vulnerability resolution request for package {Package}", request.Package);
return BadRequest(CreateProblem(ex.Message, "InvalidRequest", StatusCodes.Status400BadRequest));
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to resolve vulnerability for package {Package}", request.Package);
@@ -153,6 +158,11 @@ public sealed class ResolutionController : ControllerBase
var result = await _resolutionService.ResolveBatchAsync(request, options, ct);
return Ok(result);
}
catch (ArgumentException ex)
{
_logger.LogWarning(ex, "Invalid batch vulnerability resolution request");
return BadRequest(CreateProblem(ex.Message, "InvalidRequest", StatusCodes.Status400BadRequest));
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to process batch resolution");

View File

@@ -5,6 +5,9 @@ using Microsoft.Extensions.Options;
using StackExchange.Redis;
using StellaOps.BinaryIndex.Cache;
using StellaOps.BinaryIndex.Core.Resolution;
using StellaOps.BinaryIndex.Core.Services;
using StellaOps.BinaryIndex.GoldenSet;
using StellaOps.BinaryIndex.Persistence.Repositories;
using StellaOps.BinaryIndex.VexBridge;
using StellaOps.BinaryIndex.WebService.Middleware;
using StellaOps.BinaryIndex.WebService.Services;
@@ -26,15 +29,17 @@ builder.Services.AddOptions<ResolutionCacheOptions>()
.Bind(builder.Configuration.GetSection(ResolutionCacheOptions.SectionName))
.ValidateOnStart();
// Add Redis/Valkey connection
// Add Redis/Valkey connection (optional with deterministic in-memory fallback)
var redisConnectionString = builder.Configuration.GetConnectionString("Redis") ?? "localhost:6379";
builder.Services.AddSingleton<IConnectionMultiplexer>(_ =>
ConnectionMultiplexer.Connect(redisConnectionString));
// Add services
builder.Services.TryAddSingleton(TimeProvider.System);
builder.Services.TryAddSingleton<IRandomSource, SystemRandomSource>();
builder.Services.AddSingleton<IResolutionCacheService, ResolutionCacheService>();
builder.Services.AddGoldenSetServices(builder.Configuration);
builder.Services.TryAddSingleton<IGoldenSetStore, InMemoryGoldenSetStore>();
builder.Services.TryAddSingleton<IBinaryVulnerabilityService, InMemoryBinaryVulnerabilityService>();
builder.Services.TryAddSingleton<IDeltaSignatureRepository, InMemoryDeltaSignatureRepository>();
builder.Services.AddSingleton<IResolutionCacheService>(sp => CreateResolutionCacheService(sp, redisConnectionString));
builder.Services.AddScoped<ResolutionService>();
builder.Services.AddScoped<IResolutionService>(sp =>
new CachedResolutionService(
@@ -73,10 +78,58 @@ if (app.Environment.IsDevelopment())
}
app.UseStellaOpsCors();
app.UseHttpsRedirection();
var hasHttpsBinding = app.Urls.Any(url => url.StartsWith("https://", StringComparison.OrdinalIgnoreCase));
if (hasHttpsBinding)
{
app.UseHttpsRedirection();
}
else
{
app.Logger.LogInformation("Skipping HTTPS redirection because no HTTPS binding is configured.");
}
app.UseResolutionRateLimiting();
app.UseAuthorization();
app.MapControllers();
app.MapHealthChecks("/health");
app.Run();
static IResolutionCacheService CreateResolutionCacheService(IServiceProvider services, string redisConnectionString)
{
var startupLogger = services
.GetRequiredService<ILoggerFactory>()
.CreateLogger("BinaryIndex.WebService.Startup");
var cacheOptions = services.GetRequiredService<IOptions<ResolutionCacheOptions>>();
var random = services.GetRequiredService<IRandomSource>();
try
{
var redisOptions = ConfigurationOptions.Parse(redisConnectionString);
redisOptions.AbortOnConnectFail = true;
redisOptions.ConnectRetry = 0;
redisOptions.ConnectTimeout = 500;
redisOptions.SyncTimeout = 500;
redisOptions.AsyncTimeout = 500;
var multiplexer = ConnectionMultiplexer.Connect(redisOptions);
_ = multiplexer.GetDatabase().Ping();
startupLogger.LogInformation("Using Redis-backed resolution cache.");
return new ResolutionCacheService(
multiplexer,
cacheOptions,
services.GetRequiredService<ILogger<ResolutionCacheService>>(),
random);
}
catch (Exception ex)
{
startupLogger.LogWarning(
ex,
"Redis is unavailable. Falling back to deterministic in-memory resolution cache.");
return new InMemoryResolutionCacheService(
cacheOptions,
services.GetRequiredService<TimeProvider>(),
services.GetRequiredService<ILogger<InMemoryResolutionCacheService>>());
}
}

View File

@@ -0,0 +1,77 @@
using StellaOps.BinaryIndex.Core.Models;
using StellaOps.BinaryIndex.Core.Services;
using System.Collections.Immutable;
namespace StellaOps.BinaryIndex.WebService.Services;
/// <summary>
/// Deterministic fallback vulnerability service used when persistence-backed
/// BinaryIndex services are not configured in local/dev WebService startup.
/// </summary>
public sealed class InMemoryBinaryVulnerabilityService : IBinaryVulnerabilityService
{
public Task<ImmutableArray<BinaryVulnMatch>> LookupByIdentityAsync(
BinaryIdentity identity,
LookupOptions? options = null,
CancellationToken ct = default) =>
Task.FromResult(ImmutableArray<BinaryVulnMatch>.Empty);
public Task<ImmutableDictionary<string, ImmutableArray<BinaryVulnMatch>>> LookupBatchAsync(
IEnumerable<BinaryIdentity> identities,
LookupOptions? options = null,
CancellationToken ct = default) =>
Task.FromResult(ImmutableDictionary<string, ImmutableArray<BinaryVulnMatch>>.Empty);
public Task<FixStatusResult?> GetFixStatusAsync(
string distro,
string release,
string sourcePkg,
string cveId,
CancellationToken ct = default) =>
Task.FromResult<FixStatusResult?>(null);
public Task<ImmutableDictionary<string, FixStatusResult>> GetFixStatusBatchAsync(
string distro,
string release,
string sourcePkg,
IEnumerable<string> cveIds,
CancellationToken ct = default) =>
Task.FromResult(ImmutableDictionary<string, FixStatusResult>.Empty);
public Task<ImmutableArray<BinaryVulnMatch>> LookupByFingerprintAsync(
byte[] fingerprint,
FingerprintLookupOptions? options = null,
CancellationToken ct = default) =>
Task.FromResult(ImmutableArray<BinaryVulnMatch>.Empty);
public Task<ImmutableDictionary<string, ImmutableArray<BinaryVulnMatch>>> LookupByFingerprintBatchAsync(
IEnumerable<(string Key, byte[] Fingerprint)> fingerprints,
FingerprintLookupOptions? options = null,
CancellationToken ct = default) =>
Task.FromResult(ImmutableDictionary<string, ImmutableArray<BinaryVulnMatch>>.Empty);
public Task<ImmutableArray<BinaryVulnMatch>> LookupByDeltaSignatureAsync(
Stream binaryStream,
DeltaSigLookupOptions? options = null,
CancellationToken ct = default) =>
Task.FromResult(ImmutableArray<BinaryVulnMatch>.Empty);
public Task<ImmutableArray<BinaryVulnMatch>> LookupBySymbolHashAsync(
string symbolHash,
string symbolName,
DeltaSigLookupOptions? options = null,
CancellationToken ct = default) =>
Task.FromResult(ImmutableArray<BinaryVulnMatch>.Empty);
public Task<ImmutableArray<CorpusFunctionMatch>> IdentifyFunctionFromCorpusAsync(
FunctionFingerprintSet fingerprints,
CorpusLookupOptions? options = null,
CancellationToken ct = default) =>
Task.FromResult(ImmutableArray<CorpusFunctionMatch>.Empty);
public Task<ImmutableDictionary<string, ImmutableArray<CorpusFunctionMatch>>> IdentifyFunctionsFromCorpusBatchAsync(
IEnumerable<(string Key, FunctionFingerprintSet Fingerprints)> functions,
CorpusLookupOptions? options = null,
CancellationToken ct = default) =>
Task.FromResult(ImmutableDictionary<string, ImmutableArray<CorpusFunctionMatch>>.Empty);
}

View File

@@ -0,0 +1,494 @@
using StellaOps.BinaryIndex.DeltaSig;
using StellaOps.BinaryIndex.Persistence.Repositories;
using System.Collections.Immutable;
namespace StellaOps.BinaryIndex.WebService.Services;
/// <summary>
/// Deterministic fallback repository used when persistence-backed delta-signature
/// storage is not configured in local/dev WebService startup.
/// </summary>
public sealed class InMemoryDeltaSignatureRepository : IDeltaSignatureRepository
{
private readonly object _gate = new();
private readonly TimeProvider _timeProvider;
private readonly List<DeltaSignatureEntity> _signatures;
private readonly List<DeltaSigMatchEntity> _matches;
public InMemoryDeltaSignatureRepository(TimeProvider? timeProvider = null)
{
_timeProvider = timeProvider ?? TimeProvider.System;
var now = _timeProvider.GetUtcNow();
_signatures =
[
Signature(
id: Guid.Parse("11111111-1111-1111-1111-111111111111"),
cveId: "CVE-2023-0286",
packageName: "openssl",
symbolName: "tls1_process_heartbeat",
hashHex: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
signatureState: "vulnerable",
now: now),
Signature(
id: Guid.Parse("22222222-2222-2222-2222-222222222222"),
cveId: "CVE-2023-0286",
packageName: "openssl",
symbolName: "tls1_process_heartbeat",
hashHex: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
signatureState: "patched",
now: now),
Signature(
id: Guid.Parse("33333333-3333-3333-3333-333333333333"),
cveId: "CVE-2023-0286",
packageName: "openssl",
symbolName: "X509_VERIFY_PARAM_set1_policies",
hashHex: "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
signatureState: "patched",
now: now),
Signature(
id: Guid.Parse("44444444-4444-4444-4444-444444444444"),
cveId: "CVE-2021-3156",
packageName: "sudo",
symbolName: "set_cmnd",
hashHex: "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
signatureState: "vulnerable",
now: now)
];
_matches =
[
new DeltaSigMatchEntity
{
Id = Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"),
BinaryKey = "sha256:img-openssl-1",
BinarySha256 = "img-openssl-1",
CveId = "CVE-2023-0286",
SymbolName = "tls1_process_heartbeat",
MatchType = "exact",
Confidence = 0.95m,
MatchedState = "patched",
ScannedAt = now.AddMinutes(-1)
},
new DeltaSigMatchEntity
{
Id = Guid.Parse("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"),
BinaryKey = "sha256:img-openssl-2",
BinarySha256 = "img-openssl-2",
CveId = "CVE-2023-0286",
SymbolName = "tls1_process_heartbeat",
MatchType = "exact",
Confidence = 0.93m,
MatchedState = "vulnerable",
ScannedAt = now.AddMinutes(-2)
},
new DeltaSigMatchEntity
{
Id = Guid.Parse("cccccccc-cccc-cccc-cccc-cccccccccccc"),
BinaryKey = "sha256:img-openssl-3",
BinarySha256 = "img-openssl-3",
CveId = "CVE-2023-0286",
SymbolName = "X509_VERIFY_PARAM_set1_policies",
MatchType = "heuristic",
Confidence = 0.71m,
MatchedState = "unknown",
ScannedAt = now.AddMinutes(-3)
},
new DeltaSigMatchEntity
{
Id = Guid.Parse("dddddddd-dddd-dddd-dddd-dddddddddddd"),
BinaryKey = "sha256:img-sudo-1",
BinarySha256 = "img-sudo-1",
CveId = "CVE-2021-3156",
SymbolName = "set_cmnd",
MatchType = "exact",
Confidence = 0.89m,
MatchedState = "vulnerable",
ScannedAt = now.AddMinutes(-4)
}
];
}
public Task<DeltaSignatureEntity> CreateAsync(
DeltaSignatureEntity entity,
CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
var now = _timeProvider.GetUtcNow();
var created = entity with
{
Id = entity.Id == Guid.Empty ? Guid.NewGuid() : entity.Id,
CreatedAt = entity.CreatedAt == default ? now : entity.CreatedAt,
UpdatedAt = now
};
lock (_gate)
{
_signatures.Add(created);
}
return Task.FromResult(created);
}
public async Task<IReadOnlyList<DeltaSignatureEntity>> CreateBatchAsync(
IEnumerable<DeltaSignatureEntity> entities,
CancellationToken ct = default)
{
var created = new List<DeltaSignatureEntity>();
foreach (var entity in entities)
{
created.Add(await CreateAsync(entity, ct).ConfigureAwait(false));
}
return created;
}
public Task<DeltaSignatureEntity?> GetByIdAsync(
Guid id,
CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
lock (_gate)
{
return Task.FromResult(_signatures.FirstOrDefault(s => s.Id == id));
}
}
public Task<IReadOnlyList<DeltaSignatureEntity>> GetByCveAsync(
string cveId,
CancellationToken ct = default) =>
QueryAsync(
s => s.CveId.Equals(cveId, StringComparison.OrdinalIgnoreCase),
s => s.SymbolName,
ct);
public Task<IReadOnlyList<DeltaSignatureEntity>> GetByPackageAsync(
string packageName,
string? soname = null,
CancellationToken ct = default) =>
QueryAsync(
s => s.PackageName.Equals(packageName, StringComparison.OrdinalIgnoreCase) &&
(soname is null || string.Equals(s.Soname, soname, StringComparison.OrdinalIgnoreCase)),
s => s.CveId,
ct);
public Task<IReadOnlyList<DeltaSignatureEntity>> GetByHashAsync(
string hashHex,
CancellationToken ct = default) =>
QueryAsync(
s => s.HashHex.Equals(hashHex, StringComparison.OrdinalIgnoreCase),
s => s.CveId,
ct);
public Task<IReadOnlyList<DeltaSignatureEntity>> GetForMatchingAsync(
string arch,
string abi,
IEnumerable<string> symbolNames,
CancellationToken ct = default)
{
var symbolSet = symbolNames
.Where(s => !string.IsNullOrWhiteSpace(s))
.ToHashSet(StringComparer.OrdinalIgnoreCase);
return QueryAsync(
s => s.Arch.Equals(arch, StringComparison.OrdinalIgnoreCase) &&
s.Abi.Equals(abi, StringComparison.OrdinalIgnoreCase) &&
symbolSet.Contains(s.SymbolName),
s => s.CveId,
ct);
}
public Task<IReadOnlyList<DeltaSignatureEntity>> GetAllMatchingAsync(
IReadOnlyList<string>? cveFilter = null,
string? packageFilter = null,
string? archFilter = null,
CancellationToken ct = default)
{
var cveSet = cveFilter is { Count: > 0 }
? cveFilter.ToHashSet(StringComparer.OrdinalIgnoreCase)
: null;
return QueryAsync(
s =>
(cveSet is null || cveSet.Contains(s.CveId)) &&
(string.IsNullOrWhiteSpace(packageFilter) ||
s.PackageName.Equals(packageFilter, StringComparison.OrdinalIgnoreCase)) &&
(string.IsNullOrWhiteSpace(archFilter) ||
s.Arch.Equals(archFilter, StringComparison.OrdinalIgnoreCase)),
s => s.CveId,
ct);
}
public Task<DeltaSignatureEntity> UpdateAsync(
DeltaSignatureEntity entity,
CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
var now = _timeProvider.GetUtcNow();
var updated = entity with
{
Id = entity.Id == Guid.Empty ? Guid.NewGuid() : entity.Id,
CreatedAt = entity.CreatedAt == default ? now : entity.CreatedAt,
UpdatedAt = now
};
lock (_gate)
{
var index = _signatures.FindIndex(s => s.Id == updated.Id);
if (index >= 0)
{
_signatures[index] = updated;
}
else
{
_signatures.Add(updated);
}
}
return Task.FromResult(updated);
}
public Task<bool> DeleteAsync(
Guid id,
CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
lock (_gate)
{
var removed = _signatures.RemoveAll(s => s.Id == id);
return Task.FromResult(removed > 0);
}
}
public Task<IReadOnlyDictionary<string, int>> GetCountsByStateAsync(
CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
lock (_gate)
{
var counts = _signatures
.GroupBy(s => NormalizeState(s.SignatureState))
.ToDictionary(g => g.Key, g => g.Count(), StringComparer.OrdinalIgnoreCase);
return Task.FromResult<IReadOnlyDictionary<string, int>>(counts);
}
}
public Task<PatchCoverageResult> GetPatchCoverageAsync(
IReadOnlyList<string>? cveFilter = null,
string? packageFilter = null,
int limit = 100,
int offset = 0,
CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
var cveSet = cveFilter is { Count: > 0 }
? cveFilter.ToHashSet(StringComparer.OrdinalIgnoreCase)
: null;
lock (_gate)
{
var grouped = _signatures
.Where(s =>
(cveSet is null || cveSet.Contains(s.CveId)) &&
(string.IsNullOrWhiteSpace(packageFilter) ||
s.PackageName.Equals(packageFilter, StringComparison.OrdinalIgnoreCase)))
.GroupBy(s => new { s.CveId, s.PackageName })
.Select(g =>
{
var vulnerableCount = g.Count(s => NormalizeState(s.SignatureState) == "vulnerable");
var patchedCount = g.Count(s => NormalizeState(s.SignatureState) == "patched");
var unknownCount = g.Count() - vulnerableCount - patchedCount;
var denominator = vulnerableCount + patchedCount + unknownCount;
var coverage = denominator == 0
? 0m
: decimal.Round((decimal)patchedCount * 100m / denominator, 1);
return new PatchCoverageEntry
{
CveId = g.Key.CveId,
PackageName = g.Key.PackageName,
VulnerableCount = vulnerableCount,
PatchedCount = patchedCount,
UnknownCount = unknownCount,
SymbolCount = g.Select(x => x.SymbolName).Distinct(StringComparer.OrdinalIgnoreCase).Count(),
CoveragePercent = coverage,
LastUpdatedAt = g.Max(x => x.UpdatedAt)
};
})
.OrderBy(e => e.CveId, StringComparer.OrdinalIgnoreCase)
.ToList();
return Task.FromResult(new PatchCoverageResult
{
Entries = grouped.Skip(offset).Take(limit).ToList(),
TotalCount = grouped.Count,
Offset = offset,
Limit = limit
});
}
}
public Task<PatchCoverageDetails?> GetPatchCoverageDetailsAsync(
string cveId,
CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
lock (_gate)
{
var cveSignatures = _signatures
.Where(s => s.CveId.Equals(cveId, StringComparison.OrdinalIgnoreCase))
.ToList();
if (cveSignatures.Count == 0)
{
return Task.FromResult<PatchCoverageDetails?>(null);
}
var functions = cveSignatures
.GroupBy(s => new { s.SymbolName, s.Soname })
.Select(g =>
{
var vulnerableCount = g.Count(s => NormalizeState(s.SignatureState) == "vulnerable");
var patchedCount = g.Count(s => NormalizeState(s.SignatureState) == "patched");
var unknownCount = g.Count() - vulnerableCount - patchedCount;
return new FunctionCoverageEntry
{
SymbolName = g.Key.SymbolName,
Soname = g.Key.Soname,
VulnerableCount = vulnerableCount,
PatchedCount = patchedCount,
UnknownCount = unknownCount,
HasDelta = vulnerableCount > 0 && patchedCount > 0
};
})
.OrderBy(x => x.SymbolName, StringComparer.OrdinalIgnoreCase)
.ToList();
var totalVulnerable = functions.Sum(f => f.VulnerableCount);
var totalPatched = functions.Sum(f => f.PatchedCount);
var totalUnknown = functions.Sum(f => f.UnknownCount);
var total = totalVulnerable + totalPatched + totalUnknown;
return Task.FromResult<PatchCoverageDetails?>(new PatchCoverageDetails
{
CveId = cveId,
PackageName = cveSignatures[0].PackageName,
Functions = functions,
Summary = new PatchCoverageSummary
{
TotalImages = total,
VulnerableImages = totalVulnerable,
PatchedImages = totalPatched,
UnknownImages = totalUnknown,
OverallCoverage = total == 0 ? 0m : decimal.Round((decimal)totalPatched * 100m / total, 1),
SymbolCount = functions.Count,
DeltaPairCount = functions.Count(f => f.HasDelta)
}
});
}
}
public Task<PatchMatchPage> GetMatchingImagesAsync(
string cveId,
string? symbolName = null,
string? matchState = null,
int limit = 50,
int offset = 0,
CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
lock (_gate)
{
var filtered = _matches
.Where(m => m.CveId.Equals(cveId, StringComparison.OrdinalIgnoreCase))
.Where(m => string.IsNullOrWhiteSpace(symbolName) ||
m.SymbolName.Equals(symbolName, StringComparison.OrdinalIgnoreCase))
.Where(m => string.IsNullOrWhiteSpace(matchState) ||
NormalizeState(m.MatchedState) == NormalizeState(matchState))
.OrderByDescending(m => m.ScannedAt)
.ToList();
return Task.FromResult(new PatchMatchPage
{
Matches = filtered
.Skip(offset)
.Take(limit)
.Select(m => new PatchMatchEntry
{
MatchId = m.Id,
BinaryKey = m.BinaryKey,
BinarySha256 = m.BinarySha256,
SymbolName = m.SymbolName,
MatchState = NormalizeState(m.MatchedState),
Confidence = m.Confidence,
ScanId = m.ScanId,
ScannedAt = m.ScannedAt
})
.ToList(),
TotalCount = filtered.Count,
Offset = offset,
Limit = limit
});
}
}
private Task<IReadOnlyList<DeltaSignatureEntity>> QueryAsync(
Func<DeltaSignatureEntity, bool> predicate,
Func<DeltaSignatureEntity, string> orderBy,
CancellationToken ct)
{
ct.ThrowIfCancellationRequested();
lock (_gate)
{
return Task.FromResult<IReadOnlyList<DeltaSignatureEntity>>(
_signatures
.Where(predicate)
.OrderBy(orderBy, StringComparer.OrdinalIgnoreCase)
.ThenBy(s => s.SymbolName, StringComparer.OrdinalIgnoreCase)
.ThenBy(s => s.SignatureState, StringComparer.OrdinalIgnoreCase)
.ToList());
}
}
private static string NormalizeState(string state) => state.Trim().ToLowerInvariant();
private static DeltaSignatureEntity Signature(
Guid id,
string cveId,
string packageName,
string symbolName,
string hashHex,
string signatureState,
DateTimeOffset now) =>
new()
{
Id = id,
CveId = cveId,
PackageName = packageName,
Soname = "libcrypto.so.3",
Arch = "x86_64",
Abi = "gnu",
RecipeId = "delta/v1",
RecipeVersion = "1.0.0",
SymbolName = symbolName,
Scope = ".text",
HashAlg = "sha256",
HashHex = hashHex,
SizeBytes = 128,
CfgBbCount = 6,
CfgEdgeHash = hashHex[..16],
ChunkHashes =
[
new ChunkHash(0, 64, hashHex[..16]),
new ChunkHash(64, 64, hashHex[16..32])
],
SignatureState = signatureState,
CreatedAt = now,
UpdatedAt = now
};
}

View File

@@ -0,0 +1,425 @@
using Microsoft.Extensions.Logging;
using StellaOps.BinaryIndex.GoldenSet;
using System.Collections.Immutable;
using System.Globalization;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
namespace StellaOps.BinaryIndex.WebService.Services;
/// <summary>
/// Deterministic in-memory GoldenSet store used by WebService local/offline runtime.
/// </summary>
public sealed class InMemoryGoldenSetStore : IGoldenSetStore
{
private readonly object _gate = new();
private readonly Dictionary<string, StoredRecord> _records = new(StringComparer.OrdinalIgnoreCase);
private readonly Dictionary<string, string> _idByDigest = new(StringComparer.Ordinal);
private readonly Dictionary<string, List<GoldenSetAuditEntry>> _audit = new(StringComparer.OrdinalIgnoreCase);
private readonly TimeProvider _timeProvider;
private readonly ILogger<InMemoryGoldenSetStore> _logger;
public InMemoryGoldenSetStore(
TimeProvider? timeProvider = null,
ILogger<InMemoryGoldenSetStore>? logger = null)
{
_timeProvider = timeProvider ?? TimeProvider.System;
_logger = logger ?? Microsoft.Extensions.Logging.Abstractions.NullLogger<InMemoryGoldenSetStore>.Instance;
}
public Task<GoldenSetStoreResult> StoreAsync(
GoldenSetDefinition definition,
GoldenSetStatus status = GoldenSetStatus.Draft,
CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
ArgumentNullException.ThrowIfNull(definition);
if (string.IsNullOrWhiteSpace(definition.Id))
{
return Task.FromResult(GoldenSetStoreResult.Failed("Golden set id is required."));
}
var id = definition.Id.Trim();
var now = _timeProvider.GetUtcNow();
var digest = definition.ContentDigest ?? ComputeContentDigest(definition);
var normalizedDefinition = definition with { Id = id, ContentDigest = digest };
lock (_gate)
{
var wasUpdated = _records.TryGetValue(id, out var existing);
var createdAt = wasUpdated ? existing!.Stored.CreatedAt : now;
var stored = new StoredGoldenSet
{
Definition = normalizedDefinition,
Status = status,
CreatedAt = createdAt,
UpdatedAt = now
};
_records[id] = new StoredRecord(stored, digest);
_idByDigest[digest] = id;
AppendAudit(
id,
new GoldenSetAuditEntry
{
Operation = wasUpdated ? "update" : "create",
ActorId = string.IsNullOrWhiteSpace(definition.Metadata.AuthorId) ? "system" : definition.Metadata.AuthorId,
Timestamp = now,
OldStatus = wasUpdated ? existing!.Stored.Status : null,
NewStatus = status,
Comment = wasUpdated ? "Updated in-memory golden set entry." : "Created in-memory golden set entry."
});
return Task.FromResult(GoldenSetStoreResult.Succeeded(digest, wasUpdated));
}
}
public Task<GoldenSetDefinition?> GetByIdAsync(string goldenSetId, CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
ArgumentException.ThrowIfNullOrWhiteSpace(goldenSetId);
lock (_gate)
{
return Task.FromResult(
_records.TryGetValue(goldenSetId.Trim(), out var record)
? record.Stored.Definition
: null);
}
}
public Task<GoldenSetDefinition?> GetByDigestAsync(string contentDigest, CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
ArgumentException.ThrowIfNullOrWhiteSpace(contentDigest);
lock (_gate)
{
if (!_idByDigest.TryGetValue(contentDigest.Trim(), out var id))
{
return Task.FromResult<GoldenSetDefinition?>(null);
}
return Task.FromResult(
_records.TryGetValue(id, out var record)
? record.Stored.Definition
: null);
}
}
public Task<ImmutableArray<GoldenSetSummary>> ListAsync(
GoldenSetListQuery query,
CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
ArgumentNullException.ThrowIfNull(query);
lock (_gate)
{
IEnumerable<StoredRecord> records = _records.Values;
if (!string.IsNullOrWhiteSpace(query.ComponentFilter))
{
records = records.Where(x =>
string.Equals(
x.Stored.Definition.Component,
query.ComponentFilter,
StringComparison.OrdinalIgnoreCase));
}
if (query.StatusFilter.HasValue)
{
records = records.Where(x => x.Stored.Status == query.StatusFilter.Value);
}
if (query.TagsFilter is { IsDefaultOrEmpty: false })
{
var tags = query.TagsFilter.Value;
records = records.Where(x =>
!x.Stored.Definition.Metadata.Tags.IsDefaultOrEmpty &&
x.Stored.Definition.Metadata.Tags.Any(t =>
tags.Any(filter => string.Equals(filter, t, StringComparison.OrdinalIgnoreCase))));
}
if (query.CreatedAfter.HasValue)
{
records = records.Where(x => x.Stored.CreatedAt >= query.CreatedAfter.Value);
}
if (query.CreatedBefore.HasValue)
{
records = records.Where(x => x.Stored.CreatedAt <= query.CreatedBefore.Value);
}
records = query.OrderBy switch
{
GoldenSetOrderBy.IdAsc => records.OrderBy(x => x.Stored.Definition.Id, StringComparer.OrdinalIgnoreCase),
GoldenSetOrderBy.IdDesc => records.OrderByDescending(x => x.Stored.Definition.Id, StringComparer.OrdinalIgnoreCase),
GoldenSetOrderBy.CreatedAtAsc => records.OrderBy(x => x.Stored.CreatedAt),
GoldenSetOrderBy.CreatedAtDesc => records.OrderByDescending(x => x.Stored.CreatedAt),
GoldenSetOrderBy.ComponentAsc => records
.OrderBy(x => x.Stored.Definition.Component, StringComparer.OrdinalIgnoreCase)
.ThenBy(x => x.Stored.Definition.Id, StringComparer.OrdinalIgnoreCase),
GoldenSetOrderBy.ComponentDesc => records
.OrderByDescending(x => x.Stored.Definition.Component, StringComparer.OrdinalIgnoreCase)
.ThenBy(x => x.Stored.Definition.Id, StringComparer.OrdinalIgnoreCase),
_ => records.OrderByDescending(x => x.Stored.CreatedAt)
};
var projected = records
.Skip(Math.Max(0, query.Offset))
.Take(Math.Max(1, query.Limit))
.Select(x => new GoldenSetSummary
{
Id = x.Stored.Definition.Id,
Component = x.Stored.Definition.Component,
Status = x.Stored.Status,
TargetCount = x.Stored.Definition.Targets.IsDefault ? 0 : x.Stored.Definition.Targets.Length,
CreatedAt = x.Stored.CreatedAt,
ReviewedAt = x.Stored.Definition.Metadata.ReviewedAt,
ContentDigest = x.ContentDigest,
Tags = x.Stored.Definition.Metadata.Tags
})
.ToImmutableArray();
return Task.FromResult(projected);
}
}
public Task UpdateStatusAsync(
string goldenSetId,
GoldenSetStatus status,
string? reviewedBy = null,
CancellationToken ct = default) =>
UpdateStatusAsync(
goldenSetId,
status,
reviewedBy ?? "system",
comment: string.Empty,
ct: ct);
public Task<GoldenSetStoreResult> UpdateStatusAsync(
string goldenSetId,
GoldenSetStatus status,
string actorId,
string comment,
CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
ArgumentException.ThrowIfNullOrWhiteSpace(goldenSetId);
ArgumentException.ThrowIfNullOrWhiteSpace(actorId);
var id = goldenSetId.Trim();
var now = _timeProvider.GetUtcNow();
lock (_gate)
{
if (!_records.TryGetValue(id, out var existing))
{
return Task.FromResult(GoldenSetStoreResult.Failed($"Golden set '{id}' was not found."));
}
var updatedMetadata = existing.Stored.Definition.Metadata with
{
ReviewedBy = actorId,
ReviewedAt = now
};
var updatedDefinition = existing.Stored.Definition with
{
Metadata = updatedMetadata
};
_records[id] = existing with
{
Stored = existing.Stored with
{
Definition = updatedDefinition,
Status = status,
UpdatedAt = now
}
};
AppendAudit(
id,
new GoldenSetAuditEntry
{
Operation = "status_update",
ActorId = actorId,
Timestamp = now,
OldStatus = existing.Stored.Status,
NewStatus = status,
Comment = comment
});
return Task.FromResult(GoldenSetStoreResult.Succeeded(existing.ContentDigest, wasUpdated: true));
}
}
public Task<StoredGoldenSet?> GetAsync(string goldenSetId, CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
ArgumentException.ThrowIfNullOrWhiteSpace(goldenSetId);
lock (_gate)
{
return Task.FromResult(
_records.TryGetValue(goldenSetId.Trim(), out var record)
? record.Stored
: null);
}
}
public Task<ImmutableArray<GoldenSetAuditEntry>> GetAuditLogAsync(
string goldenSetId,
CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
ArgumentException.ThrowIfNullOrWhiteSpace(goldenSetId);
lock (_gate)
{
if (!_audit.TryGetValue(goldenSetId.Trim(), out var entries))
{
return Task.FromResult(ImmutableArray<GoldenSetAuditEntry>.Empty);
}
return Task.FromResult(
entries
.OrderByDescending(x => x.Timestamp)
.ToImmutableArray());
}
}
public Task<ImmutableArray<GoldenSetDefinition>> GetByComponentAsync(
string component,
GoldenSetStatus? statusFilter = GoldenSetStatus.Approved,
CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
ArgumentException.ThrowIfNullOrWhiteSpace(component);
lock (_gate)
{
var definitions = _records.Values
.Where(x => string.Equals(
x.Stored.Definition.Component,
component,
StringComparison.OrdinalIgnoreCase))
.Where(x => !statusFilter.HasValue || x.Stored.Status == statusFilter.Value)
.OrderBy(x => x.Stored.Definition.Id, StringComparer.OrdinalIgnoreCase)
.Select(x => x.Stored.Definition)
.ToImmutableArray();
return Task.FromResult(definitions);
}
}
public Task<bool> DeleteAsync(string goldenSetId, CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
ArgumentException.ThrowIfNullOrWhiteSpace(goldenSetId);
var id = goldenSetId.Trim();
var now = _timeProvider.GetUtcNow();
lock (_gate)
{
if (!_records.TryGetValue(id, out var existing))
{
return Task.FromResult(false);
}
_records[id] = existing with
{
Stored = existing.Stored with
{
Status = GoldenSetStatus.Archived,
UpdatedAt = now
}
};
AppendAudit(
id,
new GoldenSetAuditEntry
{
Operation = "delete",
ActorId = "system",
Timestamp = now,
OldStatus = existing.Stored.Status,
NewStatus = GoldenSetStatus.Archived,
Comment = "Archived via in-memory delete."
});
return Task.FromResult(true);
}
}
private void AppendAudit(string id, GoldenSetAuditEntry entry)
{
if (!_audit.TryGetValue(id, out var entries))
{
entries = [];
_audit[id] = entries;
}
entries.Add(entry);
}
private static string ComputeContentDigest(GoldenSetDefinition definition)
{
var canonical = new
{
id = definition.Id,
component = definition.Component,
targets = definition.Targets
.OrderBy(x => x.FunctionName, StringComparer.Ordinal)
.Select(t => new
{
function = t.FunctionName,
edges = t.Edges.Select(e => e.ToString()).OrderBy(x => x, StringComparer.Ordinal).ToArray(),
sinks = t.Sinks.OrderBy(x => x, StringComparer.Ordinal).ToArray(),
constants = t.Constants.OrderBy(x => x, StringComparer.Ordinal).ToArray(),
taintInvariant = t.TaintInvariant,
sourceFile = t.SourceFile,
sourceLine = t.SourceLine
})
.ToArray(),
metadata = new
{
authorId = definition.Metadata.AuthorId,
createdAt = definition.Metadata.CreatedAt.ToUniversalTime().ToString("O", CultureInfo.InvariantCulture),
sourceRef = definition.Metadata.SourceRef,
reviewedBy = definition.Metadata.ReviewedBy,
reviewedAt = definition.Metadata.ReviewedAt?.ToUniversalTime().ToString("O", CultureInfo.InvariantCulture),
tags = definition.Metadata.Tags.OrderBy(x => x, StringComparer.Ordinal).ToArray(),
schemaVersion = definition.Metadata.SchemaVersion
},
witness = definition.Witness is null
? null
: new
{
arguments = definition.Witness.Arguments.ToArray(),
invariant = definition.Witness.Invariant,
pocFileRef = definition.Witness.PocFileRef
}
};
var json = JsonSerializer.Serialize(canonical, CanonicalJsonOptions);
var hash = SHA256.HashData(Encoding.UTF8.GetBytes(json));
return $"sha256:{Convert.ToHexStringLower(hash)}";
}
private static readonly JsonSerializerOptions CanonicalJsonOptions = new()
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = false,
DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
};
private sealed record StoredRecord(StoredGoldenSet Stored, string ContentDigest);
}

View File

@@ -0,0 +1,179 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using StellaOps.BinaryIndex.Cache;
using StellaOps.BinaryIndex.Contracts.Resolution;
using System.Text.RegularExpressions;
namespace StellaOps.BinaryIndex.WebService.Services;
/// <summary>
/// Deterministic in-memory cache used when Redis is unavailable.
/// </summary>
public sealed class InMemoryResolutionCacheService : IResolutionCacheService
{
private readonly object _gate = new();
private readonly Dictionary<string, CacheEntry> _entries = new(StringComparer.Ordinal);
private readonly ResolutionCacheOptions _options;
private readonly TimeProvider _timeProvider;
private readonly ILogger<InMemoryResolutionCacheService> _logger;
public InMemoryResolutionCacheService(
IOptions<ResolutionCacheOptions> options,
TimeProvider timeProvider,
ILogger<InMemoryResolutionCacheService> logger)
{
_options = options?.Value ?? throw new ArgumentNullException(nameof(options));
_timeProvider = timeProvider ?? throw new ArgumentNullException(nameof(timeProvider));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
public Task<CachedResolution?> GetAsync(string cacheKey, CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
ArgumentException.ThrowIfNullOrWhiteSpace(cacheKey);
lock (_gate)
{
if (!_entries.TryGetValue(cacheKey, out var entry))
{
return Task.FromResult<CachedResolution?>(null);
}
var now = _timeProvider.GetUtcNow();
if (entry.ExpiresAt <= now)
{
_entries.Remove(cacheKey);
return Task.FromResult<CachedResolution?>(null);
}
return Task.FromResult<CachedResolution?>(entry.Value);
}
}
public Task SetAsync(string cacheKey, CachedResolution result, TimeSpan ttl, CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
ArgumentException.ThrowIfNullOrWhiteSpace(cacheKey);
ArgumentNullException.ThrowIfNull(result);
lock (_gate)
{
if (ttl <= TimeSpan.Zero)
{
_entries.Remove(cacheKey);
return Task.CompletedTask;
}
var now = _timeProvider.GetUtcNow();
_entries[cacheKey] = new CacheEntry(result, now + ttl);
return Task.CompletedTask;
}
}
public Task InvalidateByPatternAsync(string pattern, CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
ArgumentException.ThrowIfNullOrWhiteSpace(pattern);
var regex = ToPatternRegex(pattern);
lock (_gate)
{
var keys = _entries.Keys
.Where(key => regex.IsMatch(key))
.ToArray();
foreach (var key in keys)
{
_entries.Remove(key);
}
if (keys.Length > 0)
{
_logger.LogInformation(
"Invalidated {Count} in-memory cache entries for pattern {Pattern}",
keys.Length,
pattern);
}
}
return Task.CompletedTask;
}
public string GenerateCacheKey(VulnResolutionRequest request)
{
ArgumentNullException.ThrowIfNull(request);
var algorithm = DetermineAlgorithm(request);
var hash = ComputeIdentityHash(request);
var cveId = request.CveId ?? "all";
return $"{_options.KeyPrefix}:{algorithm}:{hash}:{cveId}";
}
private static string DetermineAlgorithm(VulnResolutionRequest request)
{
if (!string.IsNullOrWhiteSpace(request.BuildId))
{
return "build_id";
}
if (!string.IsNullOrWhiteSpace(request.Fingerprint))
{
return request.FingerprintAlgorithm ?? "combined";
}
if (!string.IsNullOrWhiteSpace(request.Hashes?.TextSha256))
{
return "text_sha256";
}
if (!string.IsNullOrWhiteSpace(request.Hashes?.FileSha256))
{
return "file_sha256";
}
return "package";
}
private static string ComputeIdentityHash(VulnResolutionRequest request)
{
if (!string.IsNullOrWhiteSpace(request.BuildId))
{
return request.BuildId;
}
if (!string.IsNullOrWhiteSpace(request.Fingerprint))
{
return ComputeShortHash(request.Fingerprint);
}
if (!string.IsNullOrWhiteSpace(request.Hashes?.TextSha256))
{
return request.Hashes.TextSha256;
}
if (!string.IsNullOrWhiteSpace(request.Hashes?.FileSha256))
{
return request.Hashes.FileSha256;
}
var key = $"{request.Package}:{request.DistroRelease ?? "unknown"}";
return ComputeShortHash(key);
}
private static string ComputeShortHash(string input)
{
var bytes = System.Text.Encoding.UTF8.GetBytes(input);
var hash = System.Security.Cryptography.SHA256.HashData(bytes);
return Convert.ToHexStringLower(hash)[..16];
}
private static Regex ToPatternRegex(string pattern)
{
var escaped = Regex.Escape(pattern)
.Replace("\\*", ".*", StringComparison.Ordinal)
.Replace("\\?", ".", StringComparison.Ordinal);
return new Regex($"^{escaped}$", RegexOptions.Compiled | RegexOptions.CultureInvariant);
}
private sealed record CacheEntry(CachedResolution Value, DateTimeOffset ExpiresAt);
}

View File

@@ -5,6 +5,27 @@ Source of truth: `docs-archived/implplan/2025-12-29-csproj-audit/SPRINT_20251229
| Task ID | Status | Notes |
| --- | --- | --- |
| QA-BINARYINDEX-VERIFY-029 | DONE | SPRINT_20260211_033 run-001: `patch-coverage-tracking` passed Tier 0/1/2 with patch-coverage controller behavioral evidence (including post-create coverage updates) and was moved to `docs/features/checked/binaryindex/patch-coverage-tracking.md`. |
| QA-BINARYINDEX-VERIFY-028 | BLOCKED | SPRINT_20260211_033: `ml-function-embedding-service` is actively owned by another lane (`run-001` in progress); this lane terminalized collision as `skipped` (`owned_by_other_agent`) per FLOW 0.1. |
| QA-BINARYINDEX-VERIFY-026 | DONE | SPRINT_20260211_033 run-002: `known-build-binary-catalog` passed Tier 0/1/2 with Build-ID/SHA256/assertion/cache/method-mapping behavioral evidence; dossier verified in `docs/features/checked/binaryindex/known-build-binary-catalog.md`. |
| QA-BINARYINDEX-VERIFY-025 | DOING | SPRINT_20260211_033 run-001: claimed `ground-truth-corpus-infrastructure` for Tier 0/1/2 verification as next deterministic queued BinaryIndex feature. |
| QA-BINARYINDEX-VERIFY-023 | BLOCKED | SPRINT_20260211_033: required module-local charters missing for Analysis/Analysis.Tests/GoldenSet.Tests paths; blocked per repo AGENTS rule 5. |
| QA-BINARYINDEX-VERIFY-018 | DONE | SPRINT_20260211_033 run-001: `elf-normalization-and-delta-hashing` terminalized as `not_implemented` after Tier 0/1/2 parity evidence confirmed missing segment-level ELF normalization pipeline. |
| QA-BINARYINDEX-VERIFY-017 | DONE | SPRINT_20260211_033 run-001: `disassembly-and-binary-analysis-pipeline` passed Tier 0/1/2 with Disassembly/Ghidra/Decompiler behavioral evidence and was moved to `docs/features/checked/binaryindex/`. |
| QA-BINARYINDEX-VERIFY-016 | DONE | SPRINT_20260211_033 run-001: `delta-signature-predicates` passed Tier 0/1/2 with DeltaSig/VexBridge behavioral evidence and was moved to `docs/features/checked/binaryindex/`. |
| QA-BINARYINDEX-VERIFY-015 | DONE | SPRINT_20260211_033 run-002: completed Tier 0/1/2 verification and terminalized `delta-signature-matching-and-patch-coverage-analysis` as `not_implemented` (missing `IDeltaSignatureRepository` wiring and IR-diff parity gaps). |
| QA-BINARYINDEX-VERIFY-013 | DOING | SPRINT_20260211_030 run-001: claimed `call-ngram-fingerprinting-for-binary-similarity-analysis` for Tier 0/1/2 verification as next deterministic queued BinaryIndex feature. |
| QA-BINARYINDEX-VERIFY-012 | DONE | SPRINT_20260211_030 run-001: `byte-level-binary-diffing-with-rolling-hash-windows` terminalized as `not_implemented` after Tier 0/1/2 parity review showed missing byte-range rolling-window and privacy/section behavior claims. |
| QA-BINARYINDEX-VERIFY-011 | DONE | SPRINT_20260211_030 run-001: `binary-to-vex-claim-auto-generation` passed Tier 0/1/2 with VEX mapping/threshold/build-id/DSSE behavior evidence; dossier moved to `docs/features/checked/binaryindex/`. |
| QA-BINARYINDEX-VERIFY-009 | BLOCKED | SPRINT_20260211_030: ownership collision for `binary-resolution-api-with-cache-layer`; this lane terminalized as `skipped` (`owned_by_other_agent`) per FLOW 0.1. |
| QA-BINARYINDEX-VERIFY-008 | DONE | SPRINT_20260211_030 run-001: `binary-reachability-analysis` terminalized as `not_implemented` after Tier 0/1/2 verification and parity review of stubbed analysis/reachability paths. |
| QA-BINARYINDEX-VERIFY-007 | DONE | SPRINT_20260211_030 run-001: `binary-proof-verification-pipeline` terminalized as `not_implemented` after Tier 0/1/2 verification and parity review of placeholder validation/matcher stages. |
| QA-BINARYINDEX-VERIFY-001 | DONE | SPRINT_20260211_030 run-001/run-002: verified `binaryindex-ops-endpoints`; fixed DI startup blocker and completed Tier 0/1/2 with terminal `done`. |
| QA-BINARYINDEX-VERIFY-002 | DONE | SPRINT_20260211_030 run-001: `binary-call-graph-extraction-and-reachability-analysis` terminalized as `not_implemented` after Tier 0/1/2 parity review. |
| QA-BINARYINDEX-VERIFY-003 | DONE | SPRINT_20260211_030 run-001: `binary-identity-extraction` terminalized as `not_implemented` after Tier 0/1/2 parity review. |
| QA-BINARYINDEX-VERIFY-004 | DONE | SPRINT_20260211_030 run-001: verified `binaryindex-ops-cli-commands`; Tier 0/1/2 passed with live CLI ops checks and semantic-flag evidence. |
| QA-BINARYINDEX-VERIFY-005 | DONE | SPRINT_20260211_030 run-001: `binaryindex-user-configuration-system` terminalized as `not_implemented`; live ops config probe showed `StellaOps:BinaryIndex:*` overrides were not reflected in runtime config endpoint output. |
| QA-BINARYINDEX-VERIFY-006 | DONE | SPRINT_20260211_030 run-001: `binary-intelligence-graph-binary-identity-indexing` terminalized as `not_implemented` after Tier 0/1/2 API parity verification (default runtime fallback + reachability wiring gaps). |
| AUDIT-0129-M | DONE | Maintainability audit for StellaOps.BinaryIndex.WebService; revalidated 2026-01-06. |
| AUDIT-0129-T | DONE | Test coverage audit for StellaOps.BinaryIndex.WebService; revalidated 2026-01-06. |
| AUDIT-0129-A | TODO | Revalidated 2026-01-06; open findings pending apply. |

View File

@@ -0,0 +1,304 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>StellaOps.Auth.ServerIntegration</name>
</assembly>
<members>
<member name="T:StellaOps.Auth.ServerIntegration.ServiceCollectionExtensions">
<summary>
Dependency injection helpers for configuring StellaOps resource server authentication.
</summary>
</member>
<member name="M:StellaOps.Auth.ServerIntegration.ServiceCollectionExtensions.AddStellaOpsResourceServerAuthentication(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.Configuration.IConfiguration,System.String,System.Action{StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions})">
<summary>
Registers JWT bearer authentication and related authorisation helpers using the provided configuration section.
</summary>
<param name="services">The service collection.</param>
<param name="configuration">Application configuration.</param>
<param name="configurationSection">
Optional configuration section path. Defaults to <c>Authority:ResourceServer</c>. Provide <c>null</c> to skip binding.
</param>
<param name="configure">Optional callback allowing additional mutation of <see cref="T:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions"/>.</param>
</member>
<member name="T:StellaOps.Auth.ServerIntegration.StellaOpsAuthorityConfigurationManager">
<summary>
Cached configuration manager for StellaOps Authority metadata and JWKS.
</summary>
</member>
<member name="T:StellaOps.Auth.ServerIntegration.StellaOpsAuthorizationPolicyBuilderExtensions">
<summary>
Extension methods for configuring StellaOps authorisation policies.
</summary>
</member>
<member name="M:StellaOps.Auth.ServerIntegration.StellaOpsAuthorizationPolicyBuilderExtensions.RequireStellaOpsScopes(Microsoft.AspNetCore.Authorization.AuthorizationPolicyBuilder,System.String[])">
<summary>
Requires the specified scopes using the StellaOps scope requirement.
</summary>
</member>
<member name="M:StellaOps.Auth.ServerIntegration.StellaOpsAuthorizationPolicyBuilderExtensions.AddStellaOpsScopePolicy(Microsoft.AspNetCore.Authorization.AuthorizationOptions,System.String,System.String[])">
<summary>
Registers a named policy that enforces the provided scopes.
</summary>
</member>
<member name="M:StellaOps.Auth.ServerIntegration.StellaOpsAuthorizationPolicyBuilderExtensions.AddStellaOpsScopeHandler(Microsoft.Extensions.DependencyInjection.IServiceCollection)">
<summary>
Adds the scope handler to the DI container.
</summary>
</member>
<member name="T:StellaOps.Auth.ServerIntegration.StellaOpsBypassEvaluator">
<summary>
Evaluates whether a request qualifies for network-based bypass.
</summary>
</member>
<member name="T:StellaOps.Auth.ServerIntegration.StellaOpsLocalHostnameExtensions">
<summary>
Provides two extension methods for the <c>.stella-ops.local</c> hostname convention:
<list type="bullet">
<item>
<see cref="M:StellaOps.Auth.ServerIntegration.StellaOpsLocalHostnameExtensions.TryAddStellaOpsLocalBinding(Microsoft.AspNetCore.Builder.WebApplicationBuilder,System.String)"/> — called on <see cref="T:Microsoft.AspNetCore.Builder.WebApplicationBuilder"/>
before <c>Build()</c>; binds both <c>https://{serviceName}.stella-ops.local</c> (port 443)
and <c>http://{serviceName}.stella-ops.local</c> (port 80).
</item>
<item>
<see cref="M:StellaOps.Auth.ServerIntegration.StellaOpsLocalHostnameExtensions.LogStellaOpsLocalHostname(Microsoft.AspNetCore.Builder.WebApplication,System.String)"/> — called on <see cref="T:Microsoft.AspNetCore.Builder.WebApplication"/>
after <c>Build()</c>; checks DNS for the friendly hostname and logs the result.
</item>
</list>
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsLocalHostnameExtensions.LocalBindingBoundKey">
<summary>
Configuration key used to communicate local-binding status
from the builder phase to the app phase.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsLocalHostnameExtensions.LocalBindingServiceKey">
<summary>
Configuration key storing the service name for use in the app phase.
</summary>
</member>
<member name="M:StellaOps.Auth.ServerIntegration.StellaOpsLocalHostnameExtensions.TryAddStellaOpsLocalBinding(Microsoft.AspNetCore.Builder.WebApplicationBuilder,System.String)">
<summary>
Resolves <c>{serviceName}.stella-ops.local</c> to its dedicated loopback IP
(from the hosts file), then binds <c>https://{hostname}</c> (port 443) and
<c>http://{hostname}</c> (port 80) on that IP. Each service uses a unique
loopback address (e.g. 127.1.0.2) so ports never collide.
</summary>
</member>
<member name="M:StellaOps.Auth.ServerIntegration.StellaOpsLocalHostnameExtensions.TryAddStellaOpsSharedPort(Microsoft.AspNetCore.Builder.WebApplicationBuilder)">
<summary>
Backwards-compatible overload — reads the service name from configuration
set by <see cref="M:StellaOps.Auth.ServerIntegration.StellaOpsLocalHostnameExtensions.TryAddStellaOpsLocalBinding(Microsoft.AspNetCore.Builder.WebApplicationBuilder,System.String)"/>.
</summary>
</member>
<member name="M:StellaOps.Auth.ServerIntegration.StellaOpsLocalHostnameExtensions.LogStellaOpsLocalHostname(Microsoft.AspNetCore.Builder.WebApplication,System.String)">
<summary>
Registers a startup callback that checks DNS for
<c>{serviceName}.stella-ops.local</c> and logs the result.
Also warns if the local bindings were skipped.
</summary>
</member>
<member name="T:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions">
<summary>
Options controlling StellaOps resource server authentication.
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.Authority">
<summary>
Gets or sets the Authority (issuer) URL that exposes OpenID discovery.
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.MetadataAddress">
<summary>
Optional explicit OpenID Connect metadata address.
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.Audiences">
<summary>
Audiences accepted by the resource server (validated against the <c>aud</c> claim).
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.RequiredScopes">
<summary>
Scopes enforced by default authorisation policies.
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.RequiredTenants">
<summary>
Tenants permitted to access the resource server (empty list disables tenant checks).
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.BypassNetworks">
<summary>
Networks permitted to bypass authentication (used for trusted on-host automation).
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.RequireHttpsMetadata">
<summary>
Whether HTTPS metadata is required when communicating with Authority.
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.BackchannelTimeout">
<summary>
Back-channel timeout when fetching metadata/JWKS.
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.TokenClockSkew">
<summary>
Clock skew tolerated when validating tokens.
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.MetadataCacheLifetime">
<summary>
Lifetime for cached discovery/JWKS metadata before forcing a refresh.
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.AllowOfflineCacheFallback">
<summary>
Gets or sets a value indicating whether stale metadata/JWKS may be reused if Authority is unreachable.
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.OfflineCacheTolerance">
<summary>
Additional tolerance window during which stale metadata/JWKS may be reused when offline fallback is allowed.
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.AuthorityUri">
<summary>
Gets the canonical Authority URI (populated during validation).
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.NormalizedScopes">
<summary>
Gets the normalised scope list (populated during validation).
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.NormalizedTenants">
<summary>
Gets the normalised tenant list (populated during validation).
</summary>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.BypassMatcher">
<summary>
Gets the network matcher used for bypass checks (populated during validation).
</summary>
</member>
<member name="M:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerOptions.Validate">
<summary>
Validates provided configuration and normalises collections.
</summary>
</member>
<member name="T:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies">
<summary>
Named authorization policies for StellaOps observability and evidence resource servers.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.ObservabilityRead">
<summary>
Observability dashboards/read-only access policy name.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.ObservabilityIncident">
<summary>
Observability incident activation policy name.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.TimelineRead">
<summary>
Timeline read policy name.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.TimelineWrite">
<summary>
Timeline write policy name.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.EvidenceCreate">
<summary>
Evidence create policy name.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.EvidenceRead">
<summary>
Evidence read policy name.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.EvidenceHold">
<summary>
Evidence hold policy name.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.AttestRead">
<summary>
Attestation read policy name.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.ExportViewer">
<summary>
Export viewer policy name.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.ExportOperator">
<summary>
Export operator policy name.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.ExportAdmin">
<summary>
Export admin policy name.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.PacksRead">
<summary>
Pack read policy name.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.PacksWrite">
<summary>
Pack write policy name.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.PacksRun">
<summary>
Pack run policy name.
</summary>
</member>
<member name="F:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.PacksApprove">
<summary>
Pack approval policy name.
</summary>
</member>
<member name="M:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.AddObservabilityResourcePolicies(Microsoft.AspNetCore.Authorization.AuthorizationOptions)">
<summary>
Registers all observability, timeline, evidence, attestation, and export authorization policies.
</summary>
</member>
<member name="M:StellaOps.Auth.ServerIntegration.StellaOpsResourceServerPolicies.AddPacksResourcePolicies(Microsoft.AspNetCore.Authorization.AuthorizationOptions)">
<summary>
Registers Task Pack registry, execution, and approval authorization policies.
</summary>
<param name="options">The authorization options to update.</param>
</member>
<member name="T:StellaOps.Auth.ServerIntegration.StellaOpsScopeAuthorizationHandler">
<summary>
Handles <see cref="T:StellaOps.Auth.ServerIntegration.StellaOpsScopeRequirement"/> evaluation.
</summary>
</member>
<member name="T:StellaOps.Auth.ServerIntegration.StellaOpsScopeRequirement">
<summary>
Authorisation requirement enforcing StellaOps scope membership.
</summary>
</member>
<member name="M:StellaOps.Auth.ServerIntegration.StellaOpsScopeRequirement.#ctor(System.Collections.Generic.IEnumerable{System.String})">
<summary>
Initialises a new instance of the <see cref="T:StellaOps.Auth.ServerIntegration.StellaOpsScopeRequirement"/> class.
</summary>
<param name="scopes">Scopes that satisfy the requirement.</param>
</member>
<member name="P:StellaOps.Auth.ServerIntegration.StellaOpsScopeRequirement.RequiredScopes">
<summary>
Gets the required scopes.
</summary>
</member>
</members>
</doc>

View File

@@ -0,0 +1,181 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>StellaOps.BinaryIndex.Contracts</name>
</assembly>
<members>
<member name="T:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionRequest">
<summary>
Request to resolve vulnerability status for a binary.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionRequest.Package">
<summary>
Package URL (PURL) or CPE identifier.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionRequest.FilePath">
<summary>
File path within container/filesystem.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionRequest.BuildId">
<summary>
ELF Build-ID, PE CodeView GUID, or Mach-O UUID.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionRequest.Hashes">
<summary>
Hash values for matching.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionRequest.Fingerprint">
<summary>
Fingerprint bytes (Base64-encoded).
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionRequest.FingerprintAlgorithm">
<summary>
Fingerprint algorithm if fingerprint provided (e.g., "combined", "tlsh", "ssdeep").
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionRequest.CveId">
<summary>
CVE to check (optional, for targeted queries). If not provided, checks all known CVEs.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionRequest.DistroRelease">
<summary>
Distro hint for fix status lookup (e.g., "debian:bookworm").
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionHashes">
<summary>
Hash values for binary matching.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionHashes.FileSha256">
<summary>SHA-256 hash of the entire file.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionHashes.TextSha256">
<summary>SHA-256 hash of the .text section.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionHashes.Blake3">
<summary>BLAKE3 hash (future-proof).</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionResponse">
<summary>
Response from vulnerability resolution.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionResponse.Package">
<summary>Package identifier from request.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionResponse.Status">
<summary>Resolution status.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionResponse.FixedVersion">
<summary>Version where fix was applied (if status is Fixed).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionResponse.Evidence">
<summary>Evidence supporting the resolution.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionResponse.AttestationDsse">
<summary>DSSE attestation envelope (Base64-encoded JSON).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionResponse.ResolvedAt">
<summary>Timestamp when resolution was computed.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionResponse.FromCache">
<summary>Whether result was served from cache.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.VulnResolutionResponse.CveId">
<summary>CVE ID if a specific CVE was queried.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionStatus">
<summary>
Resolution status enumeration.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionStatus.Fixed">
<summary>Vulnerability is fixed in this binary (backport detected).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionStatus.Vulnerable">
<summary>Binary is vulnerable.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionStatus.NotAffected">
<summary>Binary is not affected by this CVE.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionStatus.Unknown">
<summary>Resolution status unknown.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionEvidence">
<summary>
Evidence supporting a resolution decision.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionEvidence.MatchType">
<summary>Match method used (build_id, fingerprint, hash_exact).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionEvidence.Confidence">
<summary>Confidence score (0.0-1.0).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionEvidence.DistroAdvisoryId">
<summary>Distro advisory ID (e.g., DSA-5343-1, RHSA-2024:1234).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionEvidence.PatchHash">
<summary>SHA-256 of the security patch.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionEvidence.MatchedFingerprintIds">
<summary>List of matched fingerprint IDs.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionEvidence.FunctionDiffSummary">
<summary>Summary of function-level differences.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionEvidence.SourcePackage">
<summary>Source package name.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.ResolutionEvidence.FixMethod">
<summary>Detection method (security_feed, changelog, patch_header).</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Contracts.Resolution.BatchVulnResolutionRequest">
<summary>
Batch request for resolving multiple vulnerabilities.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.BatchVulnResolutionRequest.Items">
<summary>List of resolution requests.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.BatchVulnResolutionRequest.Options">
<summary>Resolution options.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Contracts.Resolution.BatchResolutionOptions">
<summary>
Options for batch resolution.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.BatchResolutionOptions.BypassCache">
<summary>Bypass cache and perform fresh lookups.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.BatchResolutionOptions.IncludeDsseAttestation">
<summary>Include DSSE attestation in responses.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Contracts.Resolution.BatchVulnResolutionResponse">
<summary>
Response from batch vulnerability resolution.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.BatchVulnResolutionResponse.Results">
<summary>List of resolution results.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.BatchVulnResolutionResponse.TotalCount">
<summary>Total items processed.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.BatchVulnResolutionResponse.CacheHits">
<summary>Number of items served from cache.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Contracts.Resolution.BatchVulnResolutionResponse.ProcessingTimeMs">
<summary>Processing time in milliseconds.</summary>
</member>
</members>
</doc>

View File

@@ -0,0 +1,635 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>StellaOps.BinaryIndex.Disassembly.Abstractions</name>
</assembly>
<members>
<member name="T:StellaOps.BinaryIndex.Disassembly.IDisassemblyPlugin">
<summary>
Abstraction over binary disassembly engine plugins.
Each plugin implements this interface to provide disassembly capabilities.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.IDisassemblyPlugin.Capabilities">
<summary>
Gets the capabilities of this disassembly plugin.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.IDisassemblyPlugin.LoadBinary(System.IO.Stream,System.Nullable{StellaOps.BinaryIndex.Disassembly.CpuArchitecture},System.Nullable{StellaOps.BinaryIndex.Disassembly.BinaryFormat})">
<summary>
Loads a binary from a stream and detects format/architecture.
</summary>
<param name="stream">The binary stream to load.</param>
<param name="archHint">Optional hint for architecture detection.</param>
<param name="formatHint">Optional hint for format detection.</param>
<returns>Binary information including format, architecture, and metadata.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.IDisassemblyPlugin.LoadBinary(System.ReadOnlySpan{System.Byte},System.Nullable{StellaOps.BinaryIndex.Disassembly.CpuArchitecture},System.Nullable{StellaOps.BinaryIndex.Disassembly.BinaryFormat})">
<summary>
Loads a binary from a byte array.
</summary>
<param name="bytes">The binary data.</param>
<param name="archHint">Optional hint for architecture detection.</param>
<param name="formatHint">Optional hint for format detection.</param>
<returns>Binary information including format, architecture, and metadata.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.IDisassemblyPlugin.GetCodeRegions(StellaOps.BinaryIndex.Disassembly.BinaryInfo)">
<summary>
Gets executable code regions (sections) from the binary.
</summary>
<param name="binary">The loaded binary information.</param>
<returns>Enumerable of code regions.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.IDisassemblyPlugin.GetSymbols(StellaOps.BinaryIndex.Disassembly.BinaryInfo)">
<summary>
Gets symbols (functions) from the binary.
</summary>
<param name="binary">The loaded binary information.</param>
<returns>Enumerable of symbol information.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.IDisassemblyPlugin.Disassemble(StellaOps.BinaryIndex.Disassembly.BinaryInfo,StellaOps.BinaryIndex.Disassembly.CodeRegion)">
<summary>
Disassembles a code region to instructions.
</summary>
<param name="binary">The loaded binary information.</param>
<param name="region">The code region to disassemble.</param>
<returns>Enumerable of disassembled instructions.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.IDisassemblyPlugin.Disassemble(StellaOps.BinaryIndex.Disassembly.BinaryInfo,System.UInt64,System.UInt64)">
<summary>
Disassembles starting at a specific address for a given length.
</summary>
<param name="binary">The loaded binary information.</param>
<param name="startAddress">Virtual address to start disassembly.</param>
<param name="length">Maximum number of bytes to disassemble.</param>
<returns>Enumerable of disassembled instructions.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.IDisassemblyPlugin.DisassembleSymbol(StellaOps.BinaryIndex.Disassembly.BinaryInfo,StellaOps.BinaryIndex.Disassembly.SymbolInfo)">
<summary>
Disassembles a specific symbol/function.
</summary>
<param name="binary">The loaded binary information.</param>
<param name="symbol">The symbol to disassemble.</param>
<returns>Enumerable of disassembled instructions.</returns>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.IDisassemblyPluginRegistry">
<summary>
Registry for disassembly plugins. Manages plugin discovery and selection.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.IDisassemblyPluginRegistry.Plugins">
<summary>
Gets all registered plugins.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.IDisassemblyPluginRegistry.FindPlugin(StellaOps.BinaryIndex.Disassembly.CpuArchitecture,StellaOps.BinaryIndex.Disassembly.BinaryFormat)">
<summary>
Finds the best plugin for the given architecture and format.
</summary>
<param name="architecture">Target CPU architecture.</param>
<param name="format">Target binary format.</param>
<returns>The best matching plugin, or null if none found.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.IDisassemblyPluginRegistry.FindPluginsForArchitecture(StellaOps.BinaryIndex.Disassembly.CpuArchitecture)">
<summary>
Finds all plugins that support the given architecture.
</summary>
<param name="architecture">Target CPU architecture.</param>
<returns>All matching plugins ordered by priority.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.IDisassemblyPluginRegistry.FindPluginsForFormat(StellaOps.BinaryIndex.Disassembly.BinaryFormat)">
<summary>
Finds all plugins that support the given format.
</summary>
<param name="format">Target binary format.</param>
<returns>All matching plugins ordered by priority.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.IDisassemblyPluginRegistry.GetPlugin(System.String)">
<summary>
Gets a plugin by its unique identifier.
</summary>
<param name="pluginId">The plugin identifier.</param>
<returns>The plugin if found, null otherwise.</returns>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.IDisassemblyService">
<summary>
Facade service for disassembly operations. Automatically selects the best plugin.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.IDisassemblyService.LoadBinary(System.IO.Stream,System.String)">
<summary>
Loads a binary and automatically selects the best plugin.
</summary>
<param name="stream">The binary stream to load.</param>
<param name="preferredPluginId">Optional preferred plugin ID.</param>
<returns>Binary information and the plugin used.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.IDisassemblyService.LoadBinary(System.ReadOnlySpan{System.Byte},System.String)">
<summary>
Loads a binary from bytes and automatically selects the best plugin.
</summary>
<param name="bytes">The binary data.</param>
<param name="preferredPluginId">Optional preferred plugin ID.</param>
<returns>Binary information and the plugin used.</returns>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.IDisassemblyService.Registry">
<summary>
Gets the plugin registry.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.BinaryFormat">
<summary>
Binary executable format.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.BinaryFormat.Unknown">
<summary>Unknown format.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.BinaryFormat.Raw">
<summary>Raw binary data (no format metadata).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.BinaryFormat.ELF">
<summary>Executable and Linkable Format (Linux, BSD, etc.).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.BinaryFormat.PE">
<summary>Portable Executable (Windows).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.BinaryFormat.MachO">
<summary>Mach-O (macOS, iOS).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.BinaryFormat.WASM">
<summary>WebAssembly module.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.BinaryInfo">
<summary>
Information about a loaded binary.
</summary>
<param name="Format">Binary format: ELF, PE, MachO, etc.</param>
<param name="Architecture">CPU architecture.</param>
<param name="Bitness">32 or 64 bit.</param>
<param name="Endianness">Byte order.</param>
<param name="Abi">Application binary interface hint (gnu, musl, msvc, darwin).</param>
<param name="EntryPoint">Entry point address if available.</param>
<param name="BuildId">Build identifier if present (e.g., GNU build-id).</param>
<param name="Metadata">Additional metadata from the binary.</param>
<param name="Handle">Internal handle for the disassembly engine (engine-specific).</param>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.BinaryInfo.#ctor(StellaOps.BinaryIndex.Disassembly.BinaryFormat,StellaOps.BinaryIndex.Disassembly.CpuArchitecture,System.Int32,StellaOps.BinaryIndex.Disassembly.Endianness,System.String,System.Nullable{System.UInt64},System.String,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Object},System.Object)">
<summary>
Information about a loaded binary.
</summary>
<param name="Format">Binary format: ELF, PE, MachO, etc.</param>
<param name="Architecture">CPU architecture.</param>
<param name="Bitness">32 or 64 bit.</param>
<param name="Endianness">Byte order.</param>
<param name="Abi">Application binary interface hint (gnu, musl, msvc, darwin).</param>
<param name="EntryPoint">Entry point address if available.</param>
<param name="BuildId">Build identifier if present (e.g., GNU build-id).</param>
<param name="Metadata">Additional metadata from the binary.</param>
<param name="Handle">Internal handle for the disassembly engine (engine-specific).</param>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.BinaryInfo.Format">
<summary>Binary format: ELF, PE, MachO, etc.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.BinaryInfo.Architecture">
<summary>CPU architecture.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.BinaryInfo.Bitness">
<summary>32 or 64 bit.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.BinaryInfo.Endianness">
<summary>Byte order.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.BinaryInfo.Abi">
<summary>Application binary interface hint (gnu, musl, msvc, darwin).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.BinaryInfo.EntryPoint">
<summary>Entry point address if available.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.BinaryInfo.BuildId">
<summary>Build identifier if present (e.g., GNU build-id).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.BinaryInfo.Metadata">
<summary>Additional metadata from the binary.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.BinaryInfo.Handle">
<summary>Internal handle for the disassembly engine (engine-specific).</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.CodeRegion">
<summary>
Represents a code region (section) in a binary.
</summary>
<param name="Name">Section name: .text, .rodata, etc.</param>
<param name="VirtualAddress">Virtual address in memory.</param>
<param name="FileOffset">Offset in the binary file.</param>
<param name="Size">Size in bytes.</param>
<param name="IsExecutable">Whether the region contains executable code.</param>
<param name="IsReadable">Whether the region is readable.</param>
<param name="IsWritable">Whether the region is writable.</param>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.CodeRegion.#ctor(System.String,System.UInt64,System.UInt64,System.UInt64,System.Boolean,System.Boolean,System.Boolean)">
<summary>
Represents a code region (section) in a binary.
</summary>
<param name="Name">Section name: .text, .rodata, etc.</param>
<param name="VirtualAddress">Virtual address in memory.</param>
<param name="FileOffset">Offset in the binary file.</param>
<param name="Size">Size in bytes.</param>
<param name="IsExecutable">Whether the region contains executable code.</param>
<param name="IsReadable">Whether the region is readable.</param>
<param name="IsWritable">Whether the region is writable.</param>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.CodeRegion.Name">
<summary>Section name: .text, .rodata, etc.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.CodeRegion.VirtualAddress">
<summary>Virtual address in memory.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.CodeRegion.FileOffset">
<summary>Offset in the binary file.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.CodeRegion.Size">
<summary>Size in bytes.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.CodeRegion.IsExecutable">
<summary>Whether the region contains executable code.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.CodeRegion.IsReadable">
<summary>Whether the region is readable.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.CodeRegion.IsWritable">
<summary>Whether the region is writable.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.CpuArchitecture">
<summary>
CPU architecture identifier.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.Unknown">
<summary>Unknown architecture.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.X86">
<summary>Intel/AMD 32-bit x86.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.X86_64">
<summary>Intel/AMD 64-bit x86-64 (amd64).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.ARM32">
<summary>ARM 32-bit (ARMv7).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.ARM64">
<summary>ARM 64-bit (AArch64/ARMv8).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.MIPS32">
<summary>MIPS 32-bit.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.MIPS64">
<summary>MIPS 64-bit.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.RISCV64">
<summary>RISC-V 64-bit.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.PPC32">
<summary>PowerPC 32-bit.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.PPC64">
<summary>PowerPC 64-bit.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.SPARC">
<summary>SPARC.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.SH4">
<summary>SuperH SH4.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.AVR">
<summary>AVR microcontroller.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.EVM">
<summary>Ethereum Virtual Machine.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.CpuArchitecture.WASM">
<summary>WebAssembly.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.DisassembledInstruction">
<summary>
A disassembled instruction.
</summary>
<param name="Address">Virtual address of the instruction.</param>
<param name="RawBytes">Raw bytes of the instruction.</param>
<param name="Mnemonic">Instruction mnemonic (e.g., MOV, ADD, JMP).</param>
<param name="OperandsText">Text representation of operands.</param>
<param name="Kind">Classification of the instruction.</param>
<param name="Operands">Parsed operands.</param>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassembledInstruction.#ctor(System.UInt64,System.Collections.Immutable.ImmutableArray{System.Byte},System.String,System.String,StellaOps.BinaryIndex.Disassembly.InstructionKind,System.Collections.Immutable.ImmutableArray{StellaOps.BinaryIndex.Disassembly.Operand})">
<summary>
A disassembled instruction.
</summary>
<param name="Address">Virtual address of the instruction.</param>
<param name="RawBytes">Raw bytes of the instruction.</param>
<param name="Mnemonic">Instruction mnemonic (e.g., MOV, ADD, JMP).</param>
<param name="OperandsText">Text representation of operands.</param>
<param name="Kind">Classification of the instruction.</param>
<param name="Operands">Parsed operands.</param>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassembledInstruction.Address">
<summary>Virtual address of the instruction.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassembledInstruction.RawBytes">
<summary>Raw bytes of the instruction.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassembledInstruction.Mnemonic">
<summary>Instruction mnemonic (e.g., MOV, ADD, JMP).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassembledInstruction.OperandsText">
<summary>Text representation of operands.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassembledInstruction.Kind">
<summary>Classification of the instruction.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassembledInstruction.Operands">
<summary>Parsed operands.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.DisassemblyCapabilities">
<summary>
Describes the capabilities of a disassembly plugin.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyCapabilities.PluginId">
<summary>
The unique identifier of the plugin.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyCapabilities.Name">
<summary>
Display name of the disassembly engine.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyCapabilities.Version">
<summary>
Version of the underlying disassembly library.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyCapabilities.SupportedArchitectures">
<summary>
Supported CPU architectures.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyCapabilities.SupportedFormats">
<summary>
Supported binary formats.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyCapabilities.SupportsLifting">
<summary>
Whether the plugin supports lifting to intermediate representation.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyCapabilities.SupportsCfgRecovery">
<summary>
Whether the plugin supports control flow graph recovery.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyCapabilities.Priority">
<summary>
Priority for plugin selection when multiple plugins support the same arch/format.
Higher values indicate higher priority.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyCapabilities.SupportsArchitecture(StellaOps.BinaryIndex.Disassembly.CpuArchitecture)">
<summary>
Checks if this plugin supports the given architecture.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyCapabilities.SupportsFormat(StellaOps.BinaryIndex.Disassembly.BinaryFormat)">
<summary>
Checks if this plugin supports the given format.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyCapabilities.CanHandle(StellaOps.BinaryIndex.Disassembly.CpuArchitecture,StellaOps.BinaryIndex.Disassembly.BinaryFormat)">
<summary>
Checks if this plugin can handle the given architecture and format combination.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.Endianness">
<summary>
Byte order.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.Endianness.Little">
<summary>Little-endian (LSB first).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.Endianness.Big">
<summary>Big-endian (MSB first).</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.InstructionKind">
<summary>
Classification of instruction types.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Unknown">
<summary>Unknown or unclassified instruction.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Arithmetic">
<summary>Arithmetic operation (ADD, SUB, MUL, DIV).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Logic">
<summary>Logical operation (AND, OR, XOR, NOT).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Move">
<summary>Data movement (MOV, PUSH, POP).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Load">
<summary>Memory load operation.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Store">
<summary>Memory store operation.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Branch">
<summary>Unconditional branch (JMP).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.ConditionalBranch">
<summary>Conditional branch (JE, JNE, JL, etc.).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Call">
<summary>Function call.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Return">
<summary>Function return.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Nop">
<summary>No operation.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Syscall">
<summary>System call.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Interrupt">
<summary>Software interrupt.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Compare">
<summary>Compare operation.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Shift">
<summary>Shift operation.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.Vector">
<summary>Vector/SIMD operation.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.InstructionKind.FloatingPoint">
<summary>Floating point operation.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.Operand">
<summary>
An instruction operand.
</summary>
<param name="Type">Operand type.</param>
<param name="Text">Text representation.</param>
<param name="Value">Immediate value if applicable.</param>
<param name="Register">Register name if applicable.</param>
<param name="MemoryBase">Base register for memory operand.</param>
<param name="MemoryIndex">Index register for memory operand.</param>
<param name="MemoryScale">Scale factor for indexed memory operand.</param>
<param name="MemoryDisplacement">Displacement for memory operand.</param>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.Operand.#ctor(StellaOps.BinaryIndex.Disassembly.OperandType,System.String,System.Nullable{System.Int64},System.String,System.String,System.String,System.Nullable{System.Int32},System.Nullable{System.Int64})">
<summary>
An instruction operand.
</summary>
<param name="Type">Operand type.</param>
<param name="Text">Text representation.</param>
<param name="Value">Immediate value if applicable.</param>
<param name="Register">Register name if applicable.</param>
<param name="MemoryBase">Base register for memory operand.</param>
<param name="MemoryIndex">Index register for memory operand.</param>
<param name="MemoryScale">Scale factor for indexed memory operand.</param>
<param name="MemoryDisplacement">Displacement for memory operand.</param>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.Operand.Type">
<summary>Operand type.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.Operand.Text">
<summary>Text representation.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.Operand.Value">
<summary>Immediate value if applicable.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.Operand.Register">
<summary>Register name if applicable.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.Operand.MemoryBase">
<summary>Base register for memory operand.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.Operand.MemoryIndex">
<summary>Index register for memory operand.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.Operand.MemoryScale">
<summary>Scale factor for indexed memory operand.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.Operand.MemoryDisplacement">
<summary>Displacement for memory operand.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.OperandType">
<summary>
Type of operand.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.OperandType.Unknown">
<summary>Unknown operand type.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.OperandType.Register">
<summary>CPU register.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.OperandType.Immediate">
<summary>Immediate value.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.OperandType.Memory">
<summary>Memory reference.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.OperandType.Address">
<summary>Address/label.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.SymbolInfo">
<summary>
Information about a symbol in the binary.
</summary>
<param name="Name">Symbol name.</param>
<param name="Address">Virtual address of the symbol.</param>
<param name="Size">Size in bytes (0 if unknown).</param>
<param name="Type">Symbol type.</param>
<param name="Binding">Symbol binding.</param>
<param name="Section">Section containing the symbol.</param>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.SymbolInfo.#ctor(System.String,System.UInt64,System.UInt64,StellaOps.BinaryIndex.Disassembly.SymbolType,StellaOps.BinaryIndex.Disassembly.SymbolBinding,System.String)">
<summary>
Information about a symbol in the binary.
</summary>
<param name="Name">Symbol name.</param>
<param name="Address">Virtual address of the symbol.</param>
<param name="Size">Size in bytes (0 if unknown).</param>
<param name="Type">Symbol type.</param>
<param name="Binding">Symbol binding.</param>
<param name="Section">Section containing the symbol.</param>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.SymbolInfo.Name">
<summary>Symbol name.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.SymbolInfo.Address">
<summary>Virtual address of the symbol.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.SymbolInfo.Size">
<summary>Size in bytes (0 if unknown).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.SymbolInfo.Type">
<summary>Symbol type.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.SymbolInfo.Binding">
<summary>Symbol binding.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.SymbolInfo.Section">
<summary>Section containing the symbol.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.SymbolType">
<summary>
Type of symbol.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.SymbolType.Unknown">
<summary>Unknown or unspecified type.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.SymbolType.Function">
<summary>Function/procedure.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.SymbolType.Object">
<summary>Data object.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.SymbolType.Section">
<summary>Section symbol.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.SymbolType.File">
<summary>Source file name.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.SymbolType.Common">
<summary>Common block symbol.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.SymbolType.Tls">
<summary>Thread-local storage.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.SymbolBinding">
<summary>
Symbol binding/visibility.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.SymbolBinding.Unknown">
<summary>Unknown binding.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.SymbolBinding.Local">
<summary>Local symbol (not visible outside the object).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.SymbolBinding.Global">
<summary>Global symbol (visible to other objects).</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.SymbolBinding.Weak">
<summary>Weak symbol (can be overridden).</summary>
</member>
</members>
</doc>

View File

@@ -0,0 +1,258 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>StellaOps.BinaryIndex.Disassembly.B2R2</name>
</assembly>
<members>
<member name="T:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2BinaryHandle">
<summary>
Internal handle for B2R2 binary data.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2BinaryHandle.#ctor(B2R2.FrontEnd.BinHandle,System.Byte[])">
<summary>
Internal handle for B2R2 binary data.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2DisassemblyPlugin">
<summary>
B2R2-based disassembly plugin supporting multiple architectures.
B2R2 is a pure .NET binary analysis framework supporting ELF, PE, and Mach-O
on x86, x86-64, ARM32, ARM64, MIPS, RISC-V, and more.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2DisassemblyPlugin.PluginId">
<summary>
Plugin identifier.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2DisassemblyPlugin.#ctor(Microsoft.Extensions.Logging.ILogger{StellaOps.BinaryIndex.Disassembly.B2R2.B2R2DisassemblyPlugin})">
<summary>
Creates a new B2R2 disassembly plugin.
</summary>
<param name="logger">Logger instance.</param>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2DisassemblyPlugin.Capabilities">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2DisassemblyPlugin.Disassemble(StellaOps.BinaryIndex.Disassembly.BinaryInfo,StellaOps.BinaryIndex.Disassembly.CodeRegion)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2DisassemblyPlugin.Disassemble(StellaOps.BinaryIndex.Disassembly.BinaryInfo,System.UInt64,System.UInt64)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2DisassemblyPlugin.DisassembleSymbol(StellaOps.BinaryIndex.Disassembly.BinaryInfo,StellaOps.BinaryIndex.Disassembly.SymbolInfo)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2DisassemblyPlugin.LoadBinary(System.IO.Stream,System.Nullable{StellaOps.BinaryIndex.Disassembly.CpuArchitecture},System.Nullable{StellaOps.BinaryIndex.Disassembly.BinaryFormat})">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2DisassemblyPlugin.LoadBinary(System.ReadOnlySpan{System.Byte},System.Nullable{StellaOps.BinaryIndex.Disassembly.CpuArchitecture},System.Nullable{StellaOps.BinaryIndex.Disassembly.BinaryFormat})">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2DisassemblyPlugin.GetCodeRegions(StellaOps.BinaryIndex.Disassembly.BinaryInfo)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2DisassemblyPlugin.GetSymbols(StellaOps.BinaryIndex.Disassembly.BinaryInfo)">
<inheritdoc />
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2IsaPoolStats">
<summary>
Per-ISA pool statistics.
</summary>
<param name="PooledCount">Number of lifters in pool for this ISA.</param>
<param name="ActiveCount">Number of lifters currently in use for this ISA.</param>
<param name="MaxPoolSize">Maximum pool size for this ISA.</param>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2IsaPoolStats.#ctor(System.Int32,System.Int32,System.Int32)">
<summary>
Per-ISA pool statistics.
</summary>
<param name="PooledCount">Number of lifters in pool for this ISA.</param>
<param name="ActiveCount">Number of lifters currently in use for this ISA.</param>
<param name="MaxPoolSize">Maximum pool size for this ISA.</param>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2IsaPoolStats.PooledCount">
<summary>Number of lifters in pool for this ISA.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2IsaPoolStats.ActiveCount">
<summary>Number of lifters currently in use for this ISA.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2IsaPoolStats.MaxPoolSize">
<summary>Maximum pool size for this ISA.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPool">
<summary>
Bounded pool of B2R2 lifters with warm preload per ISA.
Thread-safe and designed for reuse in high-throughput scenarios.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPool.#ctor(Microsoft.Extensions.Logging.ILogger{StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPool},Microsoft.Extensions.Options.IOptions{StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPoolOptions})">
<summary>
Creates a new B2R2 lifter pool.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPool.Acquire(B2R2.ISA)">
<summary>
Acquires a lifter for the specified ISA.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPool.Return(StellaOps.BinaryIndex.Disassembly.B2R2.PooledLifter,B2R2.ISA)">
<summary>
Returns a lifter to the pool.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPool.Dispose">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPool.GetStats">
<summary>
Gets the current pool statistics.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPool.WarmPool">
<summary>
Warms the pool by preloading lifters for common ISAs.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPoolOptions">
<summary>
Configuration options for the B2R2 lifter pool.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPoolOptions.SectionName">
<summary>
Configuration section name.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPoolOptions.MaxPoolSizePerIsa">
<summary>
Maximum number of pooled lifters per ISA.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPoolOptions.EnableWarmPreload">
<summary>
Whether to warm preload lifters for common ISAs at startup.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPoolOptions.WarmPreloadIsas">
<summary>
ISAs to warm preload at startup.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPoolOptions.AcquireTimeout">
<summary>
Timeout for acquiring a lifter from the pool.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPoolStats">
<summary>
Statistics for the B2R2 lifter pool.
</summary>
<param name="TotalPooledLifters">Total lifters currently in pool.</param>
<param name="TotalActiveLifters">Total lifters currently in use.</param>
<param name="IsWarm">Whether the pool has been warmed.</param>
<param name="IsaStats">Per-ISA pool statistics.</param>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPoolStats.#ctor(System.Int32,System.Int32,System.Boolean,System.Collections.Immutable.ImmutableDictionary{System.String,StellaOps.BinaryIndex.Disassembly.B2R2.B2R2IsaPoolStats})">
<summary>
Statistics for the B2R2 lifter pool.
</summary>
<param name="TotalPooledLifters">Total lifters currently in pool.</param>
<param name="TotalActiveLifters">Total lifters currently in use.</param>
<param name="IsWarm">Whether the pool has been warmed.</param>
<param name="IsaStats">Per-ISA pool statistics.</param>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPoolStats.TotalPooledLifters">
<summary>Total lifters currently in pool.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPoolStats.TotalActiveLifters">
<summary>Total lifters currently in use.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPoolStats.IsWarm">
<summary>Whether the pool has been warmed.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LifterPoolStats.IsaStats">
<summary>Per-ISA pool statistics.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LowUirLiftingService">
<summary>
B2R2 LowUIR adapter for the IR lifting service.
Maps B2R2 BinIR/LowUIR statements to the StellaOps IR model
with deterministic ordering and invariant formatting.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LowUirLiftingService.AdapterVersion">
<summary>
Version string for cache key generation.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LowUirLiftingService.SupportsArchitecture(StellaOps.BinaryIndex.Disassembly.CpuArchitecture)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LowUirLiftingService.LiftToIrAsync(System.Collections.Generic.IReadOnlyList{StellaOps.BinaryIndex.Disassembly.DisassembledInstruction},System.String,System.UInt64,StellaOps.BinaryIndex.Disassembly.CpuArchitecture,StellaOps.BinaryIndex.Semantic.LiftOptions,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2LowUirLiftingService.TransformToSsaAsync(StellaOps.BinaryIndex.Semantic.LiftedFunction,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2ServiceCollectionExtensions">
<summary>
Extension methods for registering the B2R2 disassembly plugin.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2ServiceCollectionExtensions.AddB2R2DisassemblyPlugin(Microsoft.Extensions.DependencyInjection.IServiceCollection)">
<summary>
Adds the B2R2 disassembly plugin to the service collection.
Provides multi-architecture disassembly (x86, x64, ARM32, ARM64, MIPS, RISC-V, etc.).
</summary>
<param name="services">The service collection.</param>
<returns>The service collection for chaining.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2ServiceCollectionExtensions.AddB2R2LifterPool(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.Configuration.IConfiguration)">
<summary>
Adds the B2R2 lifter pool to the service collection.
Provides pooled lifters with warm preload for improved performance.
</summary>
<param name="services">The service collection.</param>
<param name="configuration">Configuration for binding pool options.</param>
<returns>The service collection for chaining.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2ServiceCollectionExtensions.AddB2R2LowUirLiftingService(Microsoft.Extensions.DependencyInjection.IServiceCollection)">
<summary>
Adds the B2R2 LowUIR lifting service to the service collection.
Provides IR lifting with B2R2 LowUIR semantics.
</summary>
<param name="services">The service collection.</param>
<returns>The service collection for chaining.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.B2R2ServiceCollectionExtensions.AddB2R2Services(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.Configuration.IConfiguration)">
<summary>
Adds all B2R2 services to the service collection.
</summary>
<param name="services">The service collection.</param>
<param name="configuration">Configuration for binding options.</param>
<returns>The service collection for chaining.</returns>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.B2R2.PooledLifter">
<summary>
Pooled B2R2 BinHandle and LiftingUnit for reuse across calls.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.B2R2.PooledLifter.BinHandle">
<summary>
The B2R2 BinHandle for this lifter.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.B2R2.PooledLifter.LiftingUnit">
<summary>
The B2R2 LiftingUnit for this lifter.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.B2R2.PooledLifter.Dispose">
<summary>
Returns the lifter to the pool.
</summary>
</member>
</members>
</doc>

View File

@@ -0,0 +1,271 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>StellaOps.BinaryIndex.Disassembly</name>
</assembly>
<members>
<member name="T:StellaOps.BinaryIndex.Disassembly.DisassemblyOptions">
<summary>
Configuration options for the disassembly service.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.DisassemblyOptions.SectionName">
<summary>
Configuration section name.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyOptions.PreferredPluginId">
<summary>
The preferred plugin ID to use for disassembly when multiple plugins are available.
If not set, the plugin with the highest priority for the given architecture/format is used.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyOptions.ArchitecturePreferences">
<summary>
Plugin-specific preferences by architecture.
Key: architecture name (e.g., "x86_64", "arm64"), Value: preferred plugin ID.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyOptions.MaxInstructionsPerRegion">
<summary>
Maximum instruction count to disassemble per region (prevents runaway disassembly).
Default: 1,000,000 instructions.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.DisassemblyPluginRegistry">
<summary>
Default implementation of the disassembly plugin registry.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyPluginRegistry.#ctor(System.Collections.Generic.IEnumerable{StellaOps.BinaryIndex.Disassembly.IDisassemblyPlugin},Microsoft.Extensions.Logging.ILogger{StellaOps.BinaryIndex.Disassembly.DisassemblyPluginRegistry})">
<summary>
Creates a new plugin registry with the given plugins.
</summary>
<param name="plugins">The registered plugins.</param>
<param name="logger">Logger instance.</param>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyPluginRegistry.Plugins">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyPluginRegistry.FindPlugin(StellaOps.BinaryIndex.Disassembly.CpuArchitecture,StellaOps.BinaryIndex.Disassembly.BinaryFormat)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyPluginRegistry.FindPluginsForArchitecture(StellaOps.BinaryIndex.Disassembly.CpuArchitecture)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyPluginRegistry.FindPluginsForFormat(StellaOps.BinaryIndex.Disassembly.BinaryFormat)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyPluginRegistry.GetPlugin(System.String)">
<inheritdoc />
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.DisassemblyQualityResult">
<summary>
Result of a disassembly operation with quality metrics.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyQualityResult.Binary">
<summary>
The loaded binary information.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyQualityResult.Plugin">
<summary>
The plugin that produced this result.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyQualityResult.CodeRegions">
<summary>
Discovered code regions.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyQualityResult.Symbols">
<summary>
Discovered symbols/functions.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyQualityResult.TotalInstructions">
<summary>
Total instructions disassembled across all regions.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyQualityResult.DecodedInstructions">
<summary>
Successfully decoded instructions count.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyQualityResult.FailedInstructions">
<summary>
Failed/invalid instruction count.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyQualityResult.Confidence">
<summary>
Confidence score (0.0-1.0) based on quality metrics.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyQualityResult.UsedFallback">
<summary>
Whether this result came from a fallback plugin.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyQualityResult.FallbackReason">
<summary>
Reason for fallback if applicable.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyQualityResult.DecodeSuccessRate">
<summary>
Decode success rate (DecodedInstructions / TotalInstructions).
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.DisassemblyService">
<summary>
Default implementation of the disassembly service facade.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyService.#ctor(StellaOps.BinaryIndex.Disassembly.IDisassemblyPluginRegistry,Microsoft.Extensions.Options.IOptions{StellaOps.BinaryIndex.Disassembly.DisassemblyOptions},Microsoft.Extensions.Logging.ILogger{StellaOps.BinaryIndex.Disassembly.DisassemblyService})">
<summary>
Creates a new disassembly service.
</summary>
<param name="registry">The plugin registry.</param>
<param name="options">Service options.</param>
<param name="logger">Logger instance.</param>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.DisassemblyService.Registry">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyService.LoadBinary(System.IO.Stream,System.String)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyService.LoadBinary(System.ReadOnlySpan{System.Byte},System.String)">
<inheritdoc />
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.DisassemblyServiceCollectionExtensions">
<summary>
Extension methods for configuring disassembly services.
</summary>
<summary>
Extension methods for configuring hybrid disassembly services.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyServiceCollectionExtensions.AddDisassemblyServices(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.Configuration.IConfiguration)">
<summary>
Adds the disassembly service infrastructure (registry and service facade).
Use AddXxxDisassemblyPlugin() methods to register actual plugins.
</summary>
<param name="services">The service collection.</param>
<param name="configuration">Optional configuration for binding options.</param>
<returns>The service collection for chaining.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyServiceCollectionExtensions.AddDisassemblyServices(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{StellaOps.BinaryIndex.Disassembly.DisassemblyOptions})">
<summary>
Adds the disassembly service infrastructure with options configuration action.
</summary>
<param name="services">The service collection.</param>
<param name="configure">Action to configure options.</param>
<returns>The service collection for chaining.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyServiceCollectionExtensions.AddHybridDisassemblyServices(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.Configuration.IConfiguration)">
<summary>
Adds the hybrid disassembly service with fallback logic between plugins.
This replaces the standard disassembly service with a hybrid version that
automatically falls back to secondary plugins when primary quality is low.
</summary>
<param name="services">The service collection.</param>
<param name="configuration">Configuration for binding options.</param>
<returns>The service collection for chaining.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.DisassemblyServiceCollectionExtensions.AddHybridDisassemblyServices(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{StellaOps.BinaryIndex.Disassembly.HybridDisassemblyOptions},System.Action{StellaOps.BinaryIndex.Disassembly.DisassemblyOptions})">
<summary>
Adds the hybrid disassembly service with configuration actions.
</summary>
<param name="services">The service collection.</param>
<param name="configureHybrid">Action to configure hybrid options.</param>
<param name="configureDisassembly">Optional action to configure standard options.</param>
<returns>The service collection for chaining.</returns>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyOptions">
<summary>
Configuration options for hybrid disassembly with fallback logic.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyOptions.SectionName">
<summary>
Configuration section name.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyOptions.PrimaryPluginId">
<summary>
Primary plugin ID to try first. If null, auto-selects highest priority plugin.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyOptions.FallbackPluginId">
<summary>
Fallback plugin ID to use when primary fails quality threshold.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyOptions.MinConfidenceThreshold">
<summary>
Minimum confidence score (0.0-1.0) required to accept primary plugin results.
If primary result confidence is below this, fallback is attempted.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyOptions.MinFunctionCount">
<summary>
Minimum function discovery count. If primary finds fewer functions, fallback is attempted.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyOptions.MinDecodeSuccessRate">
<summary>
Minimum instruction decode success rate (0.0-1.0).
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyOptions.AutoFallbackOnUnsupported">
<summary>
Whether to automatically fallback when primary plugin doesn't support the architecture.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyOptions.EnableFallback">
<summary>
Whether to enable hybrid fallback logic at all. If false, behaves like standard service.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyOptions.PluginTimeoutSeconds">
<summary>
Timeout in seconds for each plugin attempt.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyService">
<summary>
Hybrid disassembly service that implements smart routing between plugins
with quality-based fallback logic (e.g., B2R2 primary -> Ghidra fallback).
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyService.#ctor(StellaOps.BinaryIndex.Disassembly.IDisassemblyPluginRegistry,Microsoft.Extensions.Options.IOptions{StellaOps.BinaryIndex.Disassembly.HybridDisassemblyOptions},Microsoft.Extensions.Logging.ILogger{StellaOps.BinaryIndex.Disassembly.HybridDisassemblyService})">
<summary>
Creates a new hybrid disassembly service.
</summary>
<param name="registry">The plugin registry.</param>
<param name="options">Hybrid options.</param>
<param name="logger">Logger instance.</param>
</member>
<member name="P:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyService.Registry">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyService.LoadBinary(System.IO.Stream,System.String)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyService.LoadBinary(System.ReadOnlySpan{System.Byte},System.String)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Disassembly.HybridDisassemblyService.LoadBinaryWithQuality(System.ReadOnlySpan{System.Byte},System.String)">
<summary>
Loads binary with quality assessment and returns detailed quality result.
</summary>
<param name="bytes">The binary data.</param>
<param name="preferredPluginId">Optional preferred plugin ID.</param>
<returns>A quality result with metrics and fallback info.</returns>
</member>
</members>
</doc>

View File

@@ -0,0 +1,709 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>StellaOps.BinaryIndex.Fingerprints</name>
</assembly>
<members>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Generators.BasicBlockFingerprintGenerator">
<summary>
Generates fingerprints based on basic block hashing.
Algorithm:
1. Disassemble function to basic blocks using IDisassemblyService
2. Normalize instructions (remove absolute addresses)
3. Extract CFG using CfgExtractor
4. Hash each basic block
5. Combine block hashes with CFG topology
Produces a 16-byte fingerprint.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Generators.BasicBlockFingerprintGenerator.#ctor(Microsoft.Extensions.Logging.ILogger{StellaOps.BinaryIndex.Fingerprints.Generators.BasicBlockFingerprintGenerator},StellaOps.BinaryIndex.Disassembly.DisassemblyService,StellaOps.BinaryIndex.Normalization.NormalizationService)">
<summary>
Creates a new BasicBlockFingerprintGenerator with disassembly support.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Generators.BasicBlockFingerprintGenerator.#ctor(Microsoft.Extensions.Logging.ILogger{StellaOps.BinaryIndex.Fingerprints.Generators.BasicBlockFingerprintGenerator})">
<summary>
Creates a BasicBlockFingerprintGenerator without disassembly (falls back to heuristics).
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Generators.BasicBlockFingerprintGenerator.GenerateWithDisassemblyAsync(StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintInput,System.Threading.CancellationToken)">
<summary>
Generates fingerprint using proper disassembly and CFG extraction.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Generators.BasicBlockFingerprintGenerator.GenerateWithHeuristics(StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintInput)">
<summary>
Generates fingerprint using byte-level heuristics (fallback).
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Generators.BasicBlockFingerprintGenerator.IdentifyBasicBlocksHeuristic(System.Byte[],System.String)">
<summary>
Identifies basic blocks in the binary data using byte heuristics.
A basic block ends at: jump, call, return, or conditional branch.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Generators.BasicBlockFingerprintGenerator.CombineBlockHashes(System.Collections.Generic.List{System.Byte[]},System.Int32)">
<summary>
Combines block hashes with edge count to produce final fingerprint.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Generators.CombinedFingerprintGenerator">
<summary>
Combines multiple fingerprinting algorithms into an ensemble fingerprint.
Uses weighted combination of BasicBlock, ControlFlowGraph, and StringRefs.
This provides the most robust fingerprint by combining structural and
semantic features from all algorithms.
Produces a 48-byte fingerprint (16 + 32 + optional 16 for string refs).
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Generators.ControlFlowGraphFingerprintGenerator">
<summary>
Generates fingerprints based on control flow graph structure.
Algorithm:
1. Build CFG from disassembly
2. Extract graph properties (node count, edge count, cyclomatic complexity)
3. Compute structural hash (adjacency matrix or graph kernel)
Resilient to instruction reordering, captures loop and branch structure.
Produces a 32-byte fingerprint.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Generators.ControlFlowGraphFingerprintGenerator.CfgNode">
<summary>
Represents a node in the control flow graph.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintInput">
<summary>
Input data for fingerprint generation.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintInput.BinaryData">
<summary>Raw binary data of the function or code section.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintInput.Architecture">
<summary>Target architecture (e.g., "x86_64", "aarch64").</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintInput.FunctionName">
<summary>Function name if known.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintInput.BaseAddress">
<summary>Base address for disassembly normalization.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintInput.CveId">
<summary>CVE identifier this fingerprint is for.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintInput.Component">
<summary>Component name (e.g., "openssl").</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintInput.SourceFile">
<summary>Source file path if known.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintInput.SourceLine">
<summary>Source line number if known.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintInput.Purl">
<summary>Package URL if known.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintOutput">
<summary>
Output from fingerprint generation.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintOutput.Hash">
<summary>Fingerprint hash bytes.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintOutput.FingerprintId">
<summary>Unique fingerprint identifier (hex-encoded).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintOutput.Algorithm">
<summary>Algorithm used for generation.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintOutput.Confidence">
<summary>Generation confidence score (0.0-1.0).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintOutput.Metadata">
<summary>Additional metadata from generation.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintMetadata">
<summary>
Additional metadata extracted during fingerprint generation.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintMetadata.BasicBlockCount">
<summary>Number of basic blocks in the function.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintMetadata.EdgeCount">
<summary>Number of edges in the control flow graph.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintMetadata.CyclomaticComplexity">
<summary>Cyclomatic complexity.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintMetadata.StringRefCount">
<summary>Number of string references.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintMetadata.InstructionCount">
<summary>Instruction count.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintMetadata.FunctionSize">
<summary>Function size in bytes.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Generators.IVulnFingerprintGenerator">
<summary>
Interface for vulnerability fingerprint generators.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Generators.IVulnFingerprintGenerator.Algorithm">
<summary>
Algorithm type produced by this generator.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Generators.IVulnFingerprintGenerator.GenerateAsync(StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintInput,System.Threading.CancellationToken)">
<summary>
Generates a fingerprint from the given input.
</summary>
<param name="input">Input data for fingerprint generation.</param>
<param name="ct">Cancellation token.</param>
<returns>Generated fingerprint output.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Generators.IVulnFingerprintGenerator.CanProcess(StellaOps.BinaryIndex.Fingerprints.Generators.FingerprintInput)">
<summary>
Checks if this generator can process the given input.
</summary>
<param name="input">Input to validate.</param>
<returns>True if the generator can process this input.</returns>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Generators.StringRefsFingerprintGenerator">
<summary>
Generates fingerprints based on string references in code.
Algorithm:
1. Extract string constants referenced by function
2. Hash string content (normalized)
3. Include reference order/pattern
Useful for error message patterns and version strings.
Produces a 16-byte fingerprint.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Generators.StringRefsFingerprintGenerator.ExtractStringReferences(System.Byte[])">
<summary>
Extracts ASCII/UTF-8 string references from binary data.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.IFingerprintRepository">
<summary>
Repository for vulnerable fingerprints.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.IFingerprintRepository.CreateAsync(StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint,System.Threading.CancellationToken)">
<summary>
Creates a new fingerprint record.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.IFingerprintRepository.GetByIdAsync(System.Guid,System.Threading.CancellationToken)">
<summary>
Gets a fingerprint by ID.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.IFingerprintRepository.GetByCveAsync(System.String,System.Threading.CancellationToken)">
<summary>
Gets all fingerprints for a CVE.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.IFingerprintRepository.SearchByHashAsync(System.Byte[],StellaOps.BinaryIndex.Fingerprints.Models.FingerprintAlgorithm,System.String,System.Threading.CancellationToken)">
<summary>
Searches for fingerprints by hash.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.IFingerprintRepository.UpdateValidationStatsAsync(System.Guid,StellaOps.BinaryIndex.Fingerprints.Models.FingerprintValidationStats,System.Threading.CancellationToken)">
<summary>
Updates validation statistics for a fingerprint.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.IFingerprintMatchRepository">
<summary>
Repository for fingerprint matches.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.IFingerprintMatchRepository.CreateAsync(StellaOps.BinaryIndex.Fingerprints.Models.FingerprintMatch,System.Threading.CancellationToken)">
<summary>
Creates a new match record.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.IFingerprintMatchRepository.GetByScanAsync(System.Guid,System.Threading.CancellationToken)">
<summary>
Gets all matches for a scan.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.IFingerprintMatchRepository.UpdateReachabilityAsync(System.Guid,StellaOps.BinaryIndex.Fingerprints.Models.ReachabilityStatus,System.Threading.CancellationToken)">
<summary>
Updates reachability status for a match.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Matching.FingerprintMatcher">
<summary>
Implementation of fingerprint matching using multiple similarity metrics.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Matching.FingerprintMatcher.CalculateBasicBlockSimilarity(System.Byte[],System.Byte[])">
<summary>
Calculates similarity using TLSH-like algorithm for basic blocks.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Matching.FingerprintMatcher.CalculateCfgSimilarity(System.Byte[],System.Byte[])">
<summary>
Calculates similarity for CFG fingerprints using structural comparison.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Matching.FingerprintMatcher.CalculateStringRefsSimilarity(System.Byte[],System.Byte[])">
<summary>
Calculates similarity for string reference fingerprints.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Matching.FingerprintMatcher.CalculateCombinedSimilarity(System.Byte[],System.Byte[])">
<summary>
Calculates similarity for combined fingerprints.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Matching.FingerprintMatcher.CalculateHashSimilarity(System.ReadOnlySpan{System.Byte},System.ReadOnlySpan{System.Byte})">
<summary>
General hash similarity using normalized Hamming distance.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Matching.FingerprintMatchResult">
<summary>
Result of a fingerprint matching operation.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.FingerprintMatchResult.IsMatch">
<summary>Whether a match was found.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.FingerprintMatchResult.Similarity">
<summary>Similarity score (0.0-1.0).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.FingerprintMatchResult.MatchedFingerprint">
<summary>Matched fingerprint if found.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.FingerprintMatchResult.Confidence">
<summary>Match confidence score.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.FingerprintMatchResult.Details">
<summary>Additional match details.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Matching.MatchDetails">
<summary>
Details about how a match was determined.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.MatchDetails.MatchingAlgorithm">
<summary>Which algorithm found the match.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.MatchDetails.BasicBlockSimilarity">
<summary>Basic block similarity if applicable.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.MatchDetails.CfgSimilarity">
<summary>CFG similarity if applicable.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.MatchDetails.StringRefsSimilarity">
<summary>String refs similarity if applicable.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.MatchDetails.CandidatesEvaluated">
<summary>Number of candidate fingerprints evaluated.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.MatchDetails.MatchTimeMs">
<summary>Time taken for matching in milliseconds.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Matching.MatchOptions">
<summary>
Options for fingerprint matching.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.MatchOptions.MinSimilarity">
<summary>Minimum similarity threshold (0.0-1.0). Default 0.95.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.MatchOptions.MaxCandidates">
<summary>Maximum candidates to evaluate. Default 100.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.MatchOptions.Algorithms">
<summary>Algorithms to use for matching. Empty means all.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.MatchOptions.RequireValidated">
<summary>Whether to require validation of matched fingerprint.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Matching.MatchOptions.Architecture">
<summary>Architecture filter. Null means any.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Matching.IFingerprintMatcher">
<summary>
Interface for fingerprint matching operations.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Matching.IFingerprintMatcher.MatchAsync(System.Byte[],StellaOps.BinaryIndex.Fingerprints.Matching.MatchOptions,System.Threading.CancellationToken)">
<summary>
Matches a fingerprint against the vulnerability database.
</summary>
<param name="fingerprint">Fingerprint to match.</param>
<param name="options">Matching options.</param>
<param name="ct">Cancellation token.</param>
<returns>Match result.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Matching.IFingerprintMatcher.MatchBatchAsync(System.Collections.Generic.IEnumerable{System.Byte[]},StellaOps.BinaryIndex.Fingerprints.Matching.MatchOptions,System.Threading.CancellationToken)">
<summary>
Matches multiple fingerprints in batch.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Matching.IFingerprintMatcher.CalculateSimilarity(System.Byte[],System.Byte[],StellaOps.BinaryIndex.Fingerprints.Models.FingerprintAlgorithm)">
<summary>
Calculates similarity between two fingerprints.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint">
<summary>
Represents a fingerprint of a vulnerable function.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.Id">
<summary>Unique fingerprint identifier</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.CveId">
<summary>CVE identifier</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.Component">
<summary>Component name (e.g., "openssl")</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.Purl">
<summary>Package URL (PURL) if applicable</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.Algorithm">
<summary>Fingerprinting algorithm used</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.FingerprintId">
<summary>Fingerprint identifier (hex string)</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.FingerprintHash">
<summary>Fingerprint hash bytes</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.Architecture">
<summary>Target architecture (e.g., "x86_64")</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.FunctionName">
<summary>Function name if known</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.SourceFile">
<summary>Source file if known</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.SourceLine">
<summary>Source line if known</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.SimilarityThreshold">
<summary>Similarity threshold for matching (0.0-1.0)</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.Confidence">
<summary>Confidence score (0.0-1.0)</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.Validated">
<summary>Whether this fingerprint has been validated</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.ValidationStats">
<summary>Validation statistics</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.VulnBuildRef">
<summary>Reference to vulnerable build artifact</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.FixedBuildRef">
<summary>Reference to fixed build artifact</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint.IndexedAt">
<summary>Timestamp when this fingerprint was indexed</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintAlgorithm">
<summary>
Fingerprinting algorithm types.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintAlgorithm.BasicBlock">
<summary>Basic block level fingerprinting</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintAlgorithm.ControlFlowGraph">
<summary>Control flow graph based</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintAlgorithm.StringRefs">
<summary>String reference based</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintAlgorithm.Combined">
<summary>Combined algorithm</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintValidationStats">
<summary>
Validation statistics for a fingerprint.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintValidationStats.TruePositives">
<summary>Number of true positive matches</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintValidationStats.FalsePositives">
<summary>Number of false positive matches</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintValidationStats.TrueNegatives">
<summary>Number of true negative non-matches</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintValidationStats.FalseNegatives">
<summary>Number of false negative non-matches</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintValidationStats.Precision">
<summary>Precision: TP / (TP + FP)</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintValidationStats.Recall">
<summary>Recall: TP / (TP + FN)</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintMatch">
<summary>
Represents a fingerprint match result.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintMatch.Id">
<summary>Match identifier</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintMatch.ScanId">
<summary>Scan identifier</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintMatch.Type">
<summary>Match type</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintMatch.BinaryKey">
<summary>Binary key that was matched</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintMatch.VulnerablePurl">
<summary>Vulnerable package PURL</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintMatch.VulnerableVersion">
<summary>Vulnerable version</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintMatch.MatchedFingerprintId">
<summary>Matched fingerprint ID</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintMatch.MatchedFunction">
<summary>Matched function name</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintMatch.Similarity">
<summary>Similarity score (0.0-1.0)</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintMatch.AdvisoryIds">
<summary>Associated advisory IDs (CVEs, etc.)</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintMatch.ReachabilityStatus">
<summary>Reachability status</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Models.FingerprintMatch.MatchedAt">
<summary>Timestamp when match occurred</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Models.MatchType">
<summary>
Match type enumeration.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Fingerprints.Models.MatchType.Fingerprint">
<summary>Match via fingerprint comparison</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Fingerprints.Models.MatchType.BuildId">
<summary>Match via Build-ID</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Fingerprints.Models.MatchType.HashExact">
<summary>Exact hash match</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Models.ReachabilityStatus">
<summary>
Reachability status for matched vulnerabilities.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Fingerprints.Models.ReachabilityStatus.Reachable">
<summary>Vulnerable function is reachable</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Fingerprints.Models.ReachabilityStatus.Unreachable">
<summary>Vulnerable function is unreachable</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Fingerprints.Models.ReachabilityStatus.Unknown">
<summary>Reachability unknown</summary>
</member>
<member name="F:StellaOps.BinaryIndex.Fingerprints.Models.ReachabilityStatus.Partial">
<summary>Partial reachability</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildRequest">
<summary>
Request for building reference binaries.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildRequest.CveId">
<summary>CVE identifier.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildRequest.Component">
<summary>Component name (e.g., "openssl").</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildRequest.RepoUrl">
<summary>Git repository URL.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildRequest.VulnerableRef">
<summary>Vulnerable commit or tag.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildRequest.FixedRef">
<summary>Fixed commit or tag.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildRequest.Architectures">
<summary>Target architectures.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildRequest.BuildCommand">
<summary>Build command template.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildRequest.TargetFunctions">
<summary>Function names to fingerprint (optional).</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildResult">
<summary>
Result of a reference build pipeline run.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildResult.Success">
<summary>Whether the pipeline succeeded.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildResult.Error">
<summary>Error message if failed.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildResult.Fingerprints">
<summary>Generated fingerprints.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildResult.VulnBuildPath">
<summary>Storage path for vulnerable build.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildResult.FixedBuildPath">
<summary>Storage path for fixed build.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildResult.BuildLog">
<summary>Build log.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Pipeline.BuildArtifact">
<summary>
Represents a built binary artifact.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.BuildArtifact.Path">
<summary>Path within build output.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.BuildArtifact.Content">
<summary>Binary content.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.BuildArtifact.Architecture">
<summary>Target architecture.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.BuildArtifact.IsVulnerable">
<summary>Whether this is the vulnerable or fixed version.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Pipeline.ExtractedFunction">
<summary>
Represents a function extracted from a binary for fingerprinting.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ExtractedFunction.Name">
<summary>Function name.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ExtractedFunction.Data">
<summary>Function binary data.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ExtractedFunction.Offset">
<summary>Start offset in original binary.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ExtractedFunction.Size">
<summary>Size in bytes.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ExtractedFunction.SourceFile">
<summary>Source file if known.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Fingerprints.Pipeline.ExtractedFunction.SourceLine">
<summary>Source line if known.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildPipeline">
<summary>
Pipeline for generating reference builds and extracting vulnerability fingerprints.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildPipeline.ExecuteAsync(StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildRequest,System.Threading.CancellationToken)">
<summary>
Executes the full reference build pipeline.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildPipeline.GenerateDifferentialFingerprintsAsync(StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildRequest,System.Collections.Generic.IReadOnlyList{StellaOps.BinaryIndex.Fingerprints.Pipeline.ExtractedFunction},System.Collections.Generic.IReadOnlyList{StellaOps.BinaryIndex.Fingerprints.Pipeline.ExtractedFunction},System.Threading.CancellationToken)">
<summary>
Generates differential fingerprints by comparing vulnerable and fixed versions.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildPipeline.FindChangedFunctions(System.Collections.Generic.IReadOnlyList{StellaOps.BinaryIndex.Fingerprints.Pipeline.ExtractedFunction},System.Collections.Generic.IReadOnlyList{StellaOps.BinaryIndex.Fingerprints.Pipeline.ExtractedFunction})">
<summary>
Finds functions that changed between vulnerable and fixed versions.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Pipeline.ReferenceBuildPipeline.StoreReferenceBuildAsync(System.String,System.Collections.Generic.IReadOnlyList{StellaOps.BinaryIndex.Fingerprints.Pipeline.BuildArtifact},System.String,System.Threading.CancellationToken)">
<summary>
Stores reference build artifacts to blob storage.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Storage.FingerprintBlobStorage">
<summary>
Blob storage implementation for fingerprints.
NOTE: This is a placeholder implementation showing deterministic storage paths.
Production implementation would use RustFS or S3-compatible storage with atomic writes.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Storage.FingerprintBlobStorage.StoreFingerprintAsync(StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint,System.Byte[],System.Threading.CancellationToken)">
<summary>
Stores fingerprint data to blob storage.
Layout: {BasePath}/{algorithm}/{prefix}/{fingerprint_id}.bin
where prefix is first 2 chars of fingerprint_id for sharding.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Storage.FingerprintBlobStorage.StoreReferenceBuildAsync(System.String,System.String,System.Byte[],System.Threading.CancellationToken)">
<summary>
Stores reference build artifacts.
Layout: {BasePath}/refbuilds/{cve_id}/{build_type}.tar.zst
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Fingerprints.Storage.IFingerprintBlobStorage">
<summary>
Interface for fingerprint blob storage.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Storage.IFingerprintBlobStorage.StoreFingerprintAsync(StellaOps.BinaryIndex.Fingerprints.Models.VulnFingerprint,System.Byte[],System.Threading.CancellationToken)">
<summary>
Stores fingerprint data to blob storage.
</summary>
<param name="fingerprint">Fingerprint metadata</param>
<param name="fullData">Full fingerprint data blob</param>
<param name="ct">Cancellation token</param>
<returns>Storage path</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Storage.IFingerprintBlobStorage.RetrieveFingerprintAsync(System.String,System.Threading.CancellationToken)">
<summary>
Retrieves fingerprint data from blob storage.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Storage.IFingerprintBlobStorage.StoreReferenceBuildAsync(System.String,System.String,System.Byte[],System.Threading.CancellationToken)">
<summary>
Stores a reference build artifact (vulnerable or fixed version).
</summary>
<param name="cveId">CVE identifier</param>
<param name="buildType">"vulnerable" or "fixed"</param>
<param name="buildArtifact">Build artifact data (tar.zst compressed)</param>
<param name="ct">Cancellation token</param>
<returns>Storage path</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Fingerprints.Storage.IFingerprintBlobStorage.RetrieveReferenceBuildAsync(System.String,System.Threading.CancellationToken)">
<summary>
Retrieves a reference build artifact.
</summary>
</member>
</members>
</doc>

View File

@@ -0,0 +1,904 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>StellaOps.BinaryIndex.FixIndex</name>
</assembly>
<members>
<member name="T:StellaOps.BinaryIndex.FixIndex.Models.FixEvidence">
<summary>
Evidence of a CVE fix in a distro package.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.FixEvidence.Distro">
<summary>Distro identifier (e.g., "debian", "ubuntu", "alpine")</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.FixEvidence.Release">
<summary>Release/codename (e.g., "bookworm", "jammy", "v3.19")</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.FixEvidence.SourcePkg">
<summary>Source package name</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.FixEvidence.CveId">
<summary>CVE identifier (e.g., "CVE-2024-1234")</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.FixEvidence.State">
<summary>Fix state</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.FixEvidence.FixedVersion">
<summary>Version where the fix was applied (if applicable)</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.FixEvidence.Method">
<summary>Method used to detect the fix</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.FixEvidence.Confidence">
<summary>Confidence score (0.0 - 1.0)</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.FixEvidence.Evidence">
<summary>Evidence payload for audit trail</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.FixEvidence.SnapshotId">
<summary>Corpus snapshot ID (if from snapshot ingestion)</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.FixEvidence.CreatedAt">
<summary>Timestamp when this evidence was created</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Models.FixEvidencePayload">
<summary>
Base class for evidence payloads.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Models.ChangelogEvidence">
<summary>
Evidence from changelog parsing.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.ChangelogEvidence.File">
<summary>Path to changelog file</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.ChangelogEvidence.Version">
<summary>Version from changelog entry</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.ChangelogEvidence.Excerpt">
<summary>Excerpt from changelog mentioning CVE</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.ChangelogEvidence.LineNumber">
<summary>Line number where CVE was mentioned</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Models.PatchHeaderEvidence">
<summary>
Evidence from patch header parsing.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.PatchHeaderEvidence.PatchPath">
<summary>Path to patch file</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.PatchHeaderEvidence.PatchSha256">
<summary>SHA-256 digest of patch file</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.PatchHeaderEvidence.HeaderExcerpt">
<summary>Excerpt from patch header</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Models.SecurityFeedEvidence">
<summary>
Evidence from official security feed.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.SecurityFeedEvidence.FeedId">
<summary>Feed identifier (e.g., "alpine-secfixes", "debian-oval")</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.SecurityFeedEvidence.EntryId">
<summary>Entry identifier within the feed</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Models.SecurityFeedEvidence.PublishedAt">
<summary>Published timestamp from feed</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Parsers.AlpineSecfixesParser">
<summary>
Parses Alpine APKBUILD secfixes section for CVE fix evidence.
</summary>
<remarks>
APKBUILD secfixes format:
# secfixes:
# 1.2.3-r0:
# - CVE-2024-1234
# - CVE-2024-1235
</remarks>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.AlpineSecfixesParser.SecfixesPatternRegex">
<remarks>
Pattern:<br/>
<code>^#\\s*secfixes:\\s*$</code><br/>
Options:<br/>
<code>RegexOptions.Multiline | RegexOptions.Compiled</code><br/>
Explanation:<br/>
<code>
○ Match if at the beginning of a line.<br/>
○ Match '#'.<br/>
○ Match a whitespace character atomically any number of times.<br/>
○ Match the string "secfixes:".<br/>
○ Match a whitespace character greedily any number of times.<br/>
○ Match if at the end of a line.<br/>
</code>
</remarks>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.AlpineSecfixesParser.VersionPatternRegex">
<remarks>
Pattern:<br/>
<code>^#\\s+([vV]?\\d[^\\s:]*):\\s*$</code><br/>
Options:<br/>
<code>RegexOptions.Compiled</code><br/>
Explanation:<br/>
<code>
○ Match if at the beginning of the string.<br/>
○ Match '#'.<br/>
○ Match a whitespace character atomically at least once.<br/>
○ 1st capture group.<br/>
○ Match a character in the set [Vv] atomically, optionally.<br/>
○ Match a Unicode digit.<br/>
○ Match a character in the set [^:\s] atomically any number of times.<br/>
○ Match ':'.<br/>
○ Match a whitespace character greedily any number of times.<br/>
○ Match if at the end of the string or if before an ending newline.<br/>
</code>
</remarks>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.AlpineSecfixesParser.CvePatternRegex">
<remarks>
Pattern:<br/>
<code>^#\\s+-\\s+(CVE-\\d{4}-\\d{4,7})(?:\\s|$)</code><br/>
Options:<br/>
<code>RegexOptions.Compiled</code><br/>
Explanation:<br/>
<code>
○ Match if at the beginning of the string.<br/>
○ Match '#'.<br/>
○ Match a whitespace character atomically at least once.<br/>
○ Match '-'.<br/>
○ Match a whitespace character atomically at least once.<br/>
○ 1st capture group.<br/>
○ Match the string "CVE-".<br/>
○ Match a Unicode digit exactly 4 times.<br/>
○ Match '-'.<br/>
○ Match a Unicode digit atomically at least 4 and at most 7 times.<br/>
○ Match with 2 alternative expressions, atomically.<br/>
○ Match a whitespace character.<br/>
○ Match if at the end of the string or if before an ending newline.<br/>
</code>
</remarks>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.AlpineSecfixesParser.Parse(System.String,System.String,System.String,System.String)">
<summary>
Parses APKBUILD secfixes section for version-to-CVE mappings.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Parsers.DebianChangelogParser">
<summary>
Parses Debian/Ubuntu changelog files for CVE mentions.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.DebianChangelogParser.CvePatternRegex">
<remarks>
Pattern:<br/>
<code>\\bCVE-\\d{4}-\\d{4,7}\\b</code><br/>
Options:<br/>
<code>RegexOptions.Compiled</code><br/>
Explanation:<br/>
<code>
○ Match if at a word boundary.<br/>
○ Match the string "CVE-".<br/>
○ Match a Unicode digit exactly 4 times.<br/>
○ Match '-'.<br/>
○ Match a Unicode digit atomically at least 4 and at most 7 times.<br/>
○ Match if at a word boundary.<br/>
</code>
</remarks>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.DebianChangelogParser.EntryHeaderPatternRegex">
<remarks>
Pattern:<br/>
<code>^(\\S+)\\s+\\(([^)]+)\\)\\s+</code><br/>
Options:<br/>
<code>RegexOptions.Compiled</code><br/>
Explanation:<br/>
<code>
○ Match if at the beginning of the string.<br/>
○ 1st capture group.<br/>
○ Match any character other than a whitespace character atomically at least once.<br/>
○ Match a whitespace character atomically at least once.<br/>
○ Match '('.<br/>
○ 2nd capture group.<br/>
○ Match a character other than ')' atomically at least once.<br/>
○ Match ')'.<br/>
○ Match a whitespace character atomically at least once.<br/>
</code>
</remarks>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.DebianChangelogParser.TrailerPatternRegex">
<remarks>
Pattern:<br/>
<code>^\\s+--\\s+</code><br/>
Options:<br/>
<code>RegexOptions.Compiled</code><br/>
Explanation:<br/>
<code>
○ Match if at the beginning of the string.<br/>
○ Match a whitespace character atomically at least once.<br/>
○ Match the string "--".<br/>
○ Match a whitespace character atomically at least once.<br/>
</code>
</remarks>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.DebianChangelogParser.ParseTopEntry(System.String,System.String,System.String,System.String)">
<summary>
Parses the top entry of a Debian changelog for CVE mentions.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Parsers.IChangelogParser">
<summary>
Interface for parsing changelogs for CVE fix evidence.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.IChangelogParser.ParseTopEntry(System.String,System.String,System.String,System.String)">
<summary>
Parses the top entry of a changelog for CVE mentions.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Parsers.IPatchParser">
<summary>
Interface for parsing patch files for CVE fix evidence.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.IPatchParser.ParsePatches(System.Collections.Generic.IEnumerable{System.ValueTuple{System.String,System.String,System.String}},System.String,System.String,System.String,System.String)">
<summary>
Parses patches for CVE mentions in headers.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Parsers.ISecfixesParser">
<summary>
Interface for parsing Alpine APKBUILD secfixes for CVE mappings.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.ISecfixesParser.Parse(System.String,System.String,System.String,System.String)">
<summary>
Parses APKBUILD secfixes section for version-to-CVE mappings.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Parsers.PatchHeaderParser">
<summary>
Parses patch headers (DEP-3 format) for CVE mentions.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.PatchHeaderParser.CvePatternRegex">
<remarks>
Pattern:<br/>
<code>\\bCVE-\\d{4}-\\d{4,7}\\b</code><br/>
Options:<br/>
<code>RegexOptions.Compiled</code><br/>
Explanation:<br/>
<code>
○ Match if at a word boundary.<br/>
○ Match the string "CVE-".<br/>
○ Match a Unicode digit exactly 4 times.<br/>
○ Match '-'.<br/>
○ Match a Unicode digit atomically at least 4 and at most 7 times.<br/>
○ Match if at a word boundary.<br/>
</code>
</remarks>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.PatchHeaderParser.ParsePatches(System.Collections.Generic.IEnumerable{System.ValueTuple{System.String,System.String,System.String}},System.String,System.String,System.String,System.String)">
<summary>
Parses patches for CVE mentions in headers.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Parsers.RpmChangelogParser">
<summary>
Parses RPM spec file changelog sections for CVE mentions.
</summary>
<remarks>
RPM changelog format:
%changelog
* Mon Jan 01 2024 Packager &lt;email&gt; - 1.2.3-4
- Fix CVE-2024-1234
</remarks>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.RpmChangelogParser.CvePatternRegex">
<remarks>
Pattern:<br/>
<code>\\bCVE-\\d{4}-\\d{4,7}\\b</code><br/>
Options:<br/>
<code>RegexOptions.Compiled</code><br/>
Explanation:<br/>
<code>
○ Match if at a word boundary.<br/>
○ Match the string "CVE-".<br/>
○ Match a Unicode digit exactly 4 times.<br/>
○ Match '-'.<br/>
○ Match a Unicode digit atomically at least 4 and at most 7 times.<br/>
○ Match if at a word boundary.<br/>
</code>
</remarks>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.RpmChangelogParser.EntryHeaderPatternRegex">
<remarks>
Pattern:<br/>
<code>^\\*\\s+\\w{3}\\s+\\w{3}\\s+\\d{1,2}\\s+\\d{4}\\s+(.+?)\\s+-\\s+(\\S+)</code><br/>
Options:<br/>
<code>RegexOptions.Compiled</code><br/>
Explanation:<br/>
<code>
○ Match if at the beginning of the string.<br/>
○ Match '*'.<br/>
○ Match a whitespace character atomically at least once.<br/>
○ Match a word character exactly 3 times.<br/>
○ Match a whitespace character atomically at least once.<br/>
○ Match a word character exactly 3 times.<br/>
○ Match a whitespace character atomically at least once.<br/>
○ Match a Unicode digit atomically at least 1 and at most 2 times.<br/>
○ Match a whitespace character atomically at least once.<br/>
○ Match a Unicode digit exactly 4 times.<br/>
○ Match a whitespace character greedily at least once.<br/>
○ 1st capture group.<br/>
○ Match a character other than '\n' lazily at least once.<br/>
○ Match a whitespace character atomically at least once.<br/>
○ Match '-'.<br/>
○ Match a whitespace character atomically at least once.<br/>
○ 2nd capture group.<br/>
○ Match any character other than a whitespace character atomically at least once.<br/>
</code>
</remarks>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.RpmChangelogParser.ChangelogStartPatternRegex">
<remarks>
Pattern:<br/>
<code>^%changelog\\s*$</code><br/>
Options:<br/>
<code>RegexOptions.IgnoreCase | RegexOptions.Compiled</code><br/>
Explanation:<br/>
<code>
○ Match if at the beginning of the string.<br/>
○ Match '%'.<br/>
○ Match a character in the set [Cc].<br/>
○ Match a character in the set [Hh].<br/>
○ Match a character in the set [Aa].<br/>
○ Match a character in the set [Nn].<br/>
○ Match a character in the set [Gg].<br/>
○ Match a character in the set [Ee].<br/>
○ Match a character in the set [Ll].<br/>
○ Match a character in the set [Oo].<br/>
○ Match a character in the set [Gg].<br/>
○ Match a whitespace character greedily any number of times.<br/>
○ Match if at the end of the string or if before an ending newline.<br/>
</code>
</remarks>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.RpmChangelogParser.SectionStartPatternRegex">
<remarks>
Pattern:<br/>
<code>^%\\w+</code><br/>
Options:<br/>
<code>RegexOptions.Compiled</code><br/>
Explanation:<br/>
<code>
○ Match if at the beginning of the string.<br/>
○ Match '%'.<br/>
○ Match a word character atomically at least once.<br/>
</code>
</remarks>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.RpmChangelogParser.ParseTopEntry(System.String,System.String,System.String,System.String)">
<summary>
Parses the top entry of an RPM spec changelog for CVE mentions.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Parsers.RpmChangelogParser.ParseAllEntries(System.String,System.String,System.String,System.String)">
<summary>
Parses the full RPM spec changelog for all CVE mentions with their versions.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Repositories.IFixIndexRepository">
<summary>
Repository interface for CVE fix index operations.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Repositories.IFixIndexRepository.GetFixStatusAsync(System.String,System.String,System.String,System.String,System.Threading.CancellationToken)">
<summary>
Gets the fix status for a specific CVE/package/distro combination.
</summary>
<param name="distro">Distribution (debian, ubuntu, alpine, rhel)</param>
<param name="release">Release codename (bookworm, jammy, v3.19)</param>
<param name="sourcePkg">Source package name</param>
<param name="cveId">CVE identifier</param>
<param name="cancellationToken">Cancellation token</param>
<returns>Fix status if found, null otherwise</returns>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Repositories.IFixIndexRepository.GetFixStatusesForPackageAsync(System.String,System.String,System.String,System.Threading.CancellationToken)">
<summary>
Gets all fix statuses for a package.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Repositories.IFixIndexRepository.GetFixLocationsForCveAsync(System.String,System.Threading.CancellationToken)">
<summary>
Gets all known fix locations for a CVE across distros.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Repositories.IFixIndexRepository.UpsertAsync(StellaOps.BinaryIndex.FixIndex.Models.FixEvidence,System.Threading.CancellationToken)">
<summary>
Upserts a fix index entry.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Repositories.IFixIndexRepository.UpsertBatchAsync(System.Collections.Generic.IEnumerable{StellaOps.BinaryIndex.FixIndex.Models.FixEvidence},System.Threading.CancellationToken)">
<summary>
Batch upserts fix index entries.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Repositories.IFixIndexRepository.StoreEvidenceAsync(StellaOps.BinaryIndex.FixIndex.Models.FixEvidence,System.Threading.CancellationToken)">
<summary>
Stores fix evidence for audit trail.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Repositories.IFixIndexRepository.GetEvidenceAsync(System.Guid,System.Threading.CancellationToken)">
<summary>
Gets evidence by ID.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Repositories.IFixIndexRepository.DeleteBySnapshotAsync(System.Guid,System.Threading.CancellationToken)">
<summary>
Deletes all entries from a specific snapshot (for re-ingestion).
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Repositories.FixIndexEntry">
<summary>
Fix index entry from the database.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Repositories.FixEvidenceRecord">
<summary>
Fix evidence record from the database.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Services.FixIndexBuilder">
<summary>
Default implementation of <see cref="T:StellaOps.BinaryIndex.FixIndex.Services.IFixIndexBuilder"/>.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Services.FixIndexBuilder.BuildDebianIndexAsync(StellaOps.BinaryIndex.FixIndex.Services.DebianFixIndexRequest,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Services.FixIndexBuilder.BuildAlpineIndexAsync(StellaOps.BinaryIndex.FixIndex.Services.AlpineFixIndexRequest,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Services.FixIndexBuilder.BuildRpmIndexAsync(StellaOps.BinaryIndex.FixIndex.Services.RpmFixIndexRequest,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Services.IFixIndexBuilder">
<summary>
Interface for building the CVE fix index from various sources.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Services.IFixIndexBuilder.BuildDebianIndexAsync(StellaOps.BinaryIndex.FixIndex.Services.DebianFixIndexRequest,System.Threading.CancellationToken)">
<summary>
Builds fix index entries for a Debian/Ubuntu package.
</summary>
<param name="request">The Debian build request.</param>
<param name="cancellationToken">Cancellation token.</param>
<returns>Fix evidence entries.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Services.IFixIndexBuilder.BuildAlpineIndexAsync(StellaOps.BinaryIndex.FixIndex.Services.AlpineFixIndexRequest,System.Threading.CancellationToken)">
<summary>
Builds fix index entries for an Alpine package.
</summary>
<param name="request">The Alpine build request.</param>
<param name="cancellationToken">Cancellation token.</param>
<returns>Fix evidence entries.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.FixIndex.Services.IFixIndexBuilder.BuildRpmIndexAsync(StellaOps.BinaryIndex.FixIndex.Services.RpmFixIndexRequest,System.Threading.CancellationToken)">
<summary>
Builds fix index entries for an RPM package.
</summary>
<param name="request">The RPM build request.</param>
<param name="cancellationToken">Cancellation token.</param>
<returns>Fix evidence entries.</returns>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Services.DebianFixIndexRequest">
<summary>
Request for building Debian fix index.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.DebianFixIndexRequest.Distro">
<summary>Distribution (debian or ubuntu).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.DebianFixIndexRequest.Release">
<summary>Release codename (bookworm, jammy).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.DebianFixIndexRequest.SourcePkg">
<summary>Source package name.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.DebianFixIndexRequest.Changelog">
<summary>Changelog content.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.DebianFixIndexRequest.Patches">
<summary>Patches with path, content, and SHA-256.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.DebianFixIndexRequest.Version">
<summary>Package version for patch association.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.DebianFixIndexRequest.SnapshotId">
<summary>Corpus snapshot ID.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Services.AlpineFixIndexRequest">
<summary>
Request for building Alpine fix index.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.AlpineFixIndexRequest.Distro">
<summary>Distribution (always "alpine").</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.AlpineFixIndexRequest.Release">
<summary>Release (v3.19, edge).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.AlpineFixIndexRequest.SourcePkg">
<summary>Source package name.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.AlpineFixIndexRequest.ApkBuild">
<summary>APKBUILD file content.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.AlpineFixIndexRequest.SnapshotId">
<summary>Corpus snapshot ID.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Services.RpmFixIndexRequest">
<summary>
Request for building RPM fix index.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.RpmFixIndexRequest.Distro">
<summary>Distribution (rhel, fedora, centos, rocky, alma).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.RpmFixIndexRequest.Release">
<summary>Release version (9, 39, etc.).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.RpmFixIndexRequest.SourcePkg">
<summary>Source package name.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.RpmFixIndexRequest.SpecContent">
<summary>Spec file content.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.RpmFixIndexRequest.SnapshotId">
<summary>Corpus snapshot ID.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.FixIndex.Services.PatchFile">
<summary>
Represents a patch file with content.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.PatchFile.Path">
<summary>Relative path to the patch file.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.PatchFile.Content">
<summary>Content of the patch file.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.FixIndex.Services.PatchFile.Sha256">
<summary>SHA-256 hash of the patch content.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.SecfixesPatternRegex_0">
<summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the SecfixesPatternRegex method.</summary>
</member>
<member name="F:System.Text.RegularExpressions.Generated.SecfixesPatternRegex_0.Instance">
<summary>Cached, thread-safe singleton instance.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.SecfixesPatternRegex_0.#ctor">
<summary>Initializes the instance.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.SecfixesPatternRegex_0.RunnerFactory">
<summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.SecfixesPatternRegex_0.RunnerFactory.CreateInstance">
<summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.SecfixesPatternRegex_0.RunnerFactory.Runner">
<summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.SecfixesPatternRegex_0.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
<summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
</member>
<member name="M:System.Text.RegularExpressions.Generated.SecfixesPatternRegex_0.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
<summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if a possible match was found; false if no more matches are possible.</returns>
</member>
<member name="M:System.Text.RegularExpressions.Generated.SecfixesPatternRegex_0.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
<summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if the regular expression matches at the current position; otherwise, false.</returns>
</member>
<member name="T:System.Text.RegularExpressions.Generated.VersionPatternRegex_1">
<summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the VersionPatternRegex method.</summary>
</member>
<member name="F:System.Text.RegularExpressions.Generated.VersionPatternRegex_1.Instance">
<summary>Cached, thread-safe singleton instance.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.VersionPatternRegex_1.#ctor">
<summary>Initializes the instance.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.VersionPatternRegex_1.RunnerFactory">
<summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.VersionPatternRegex_1.RunnerFactory.CreateInstance">
<summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.VersionPatternRegex_1.RunnerFactory.Runner">
<summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.VersionPatternRegex_1.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
<summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
</member>
<member name="M:System.Text.RegularExpressions.Generated.VersionPatternRegex_1.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
<summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if a possible match was found; false if no more matches are possible.</returns>
</member>
<member name="M:System.Text.RegularExpressions.Generated.VersionPatternRegex_1.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
<summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if the regular expression matches at the current position; otherwise, false.</returns>
</member>
<member name="T:System.Text.RegularExpressions.Generated.CvePatternRegex_2">
<summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the CvePatternRegex method.</summary>
</member>
<member name="F:System.Text.RegularExpressions.Generated.CvePatternRegex_2.Instance">
<summary>Cached, thread-safe singleton instance.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.CvePatternRegex_2.#ctor">
<summary>Initializes the instance.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.CvePatternRegex_2.RunnerFactory">
<summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.CvePatternRegex_2.RunnerFactory.CreateInstance">
<summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.CvePatternRegex_2.RunnerFactory.Runner">
<summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.CvePatternRegex_2.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
<summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
</member>
<member name="M:System.Text.RegularExpressions.Generated.CvePatternRegex_2.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
<summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if a possible match was found; false if no more matches are possible.</returns>
</member>
<member name="M:System.Text.RegularExpressions.Generated.CvePatternRegex_2.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
<summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if the regular expression matches at the current position; otherwise, false.</returns>
</member>
<member name="T:System.Text.RegularExpressions.Generated.CvePatternRegex_3">
<summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the CvePatternRegex method.</summary>
</member>
<member name="F:System.Text.RegularExpressions.Generated.CvePatternRegex_3.Instance">
<summary>Cached, thread-safe singleton instance.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.CvePatternRegex_3.#ctor">
<summary>Initializes the instance.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.CvePatternRegex_3.RunnerFactory">
<summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.CvePatternRegex_3.RunnerFactory.CreateInstance">
<summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.CvePatternRegex_3.RunnerFactory.Runner">
<summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.CvePatternRegex_3.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
<summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
</member>
<member name="M:System.Text.RegularExpressions.Generated.CvePatternRegex_3.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
<summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if a possible match was found; false if no more matches are possible.</returns>
</member>
<member name="M:System.Text.RegularExpressions.Generated.CvePatternRegex_3.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
<summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if the regular expression matches at the current position; otherwise, false.</returns>
</member>
<member name="T:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_4">
<summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the EntryHeaderPatternRegex method.</summary>
</member>
<member name="F:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_4.Instance">
<summary>Cached, thread-safe singleton instance.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_4.#ctor">
<summary>Initializes the instance.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_4.RunnerFactory">
<summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_4.RunnerFactory.CreateInstance">
<summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_4.RunnerFactory.Runner">
<summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_4.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
<summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
</member>
<member name="M:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_4.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
<summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if a possible match was found; false if no more matches are possible.</returns>
</member>
<member name="M:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_4.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
<summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if the regular expression matches at the current position; otherwise, false.</returns>
</member>
<member name="T:System.Text.RegularExpressions.Generated.TrailerPatternRegex_5">
<summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the TrailerPatternRegex method.</summary>
</member>
<member name="F:System.Text.RegularExpressions.Generated.TrailerPatternRegex_5.Instance">
<summary>Cached, thread-safe singleton instance.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.TrailerPatternRegex_5.#ctor">
<summary>Initializes the instance.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.TrailerPatternRegex_5.RunnerFactory">
<summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.TrailerPatternRegex_5.RunnerFactory.CreateInstance">
<summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.TrailerPatternRegex_5.RunnerFactory.Runner">
<summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.TrailerPatternRegex_5.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
<summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
</member>
<member name="M:System.Text.RegularExpressions.Generated.TrailerPatternRegex_5.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
<summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if a possible match was found; false if no more matches are possible.</returns>
</member>
<member name="M:System.Text.RegularExpressions.Generated.TrailerPatternRegex_5.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
<summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if the regular expression matches at the current position; otherwise, false.</returns>
</member>
<member name="T:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_6">
<summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the EntryHeaderPatternRegex method.</summary>
</member>
<member name="F:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_6.Instance">
<summary>Cached, thread-safe singleton instance.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_6.#ctor">
<summary>Initializes the instance.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_6.RunnerFactory">
<summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_6.RunnerFactory.CreateInstance">
<summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_6.RunnerFactory.Runner">
<summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_6.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
<summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
</member>
<member name="M:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_6.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
<summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if a possible match was found; false if no more matches are possible.</returns>
</member>
<member name="M:System.Text.RegularExpressions.Generated.EntryHeaderPatternRegex_6.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
<summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if the regular expression matches at the current position; otherwise, false.</returns>
</member>
<member name="T:System.Text.RegularExpressions.Generated.ChangelogStartPatternRegex_7">
<summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the ChangelogStartPatternRegex method.</summary>
</member>
<member name="F:System.Text.RegularExpressions.Generated.ChangelogStartPatternRegex_7.Instance">
<summary>Cached, thread-safe singleton instance.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.ChangelogStartPatternRegex_7.#ctor">
<summary>Initializes the instance.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.ChangelogStartPatternRegex_7.RunnerFactory">
<summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.ChangelogStartPatternRegex_7.RunnerFactory.CreateInstance">
<summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.ChangelogStartPatternRegex_7.RunnerFactory.Runner">
<summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.ChangelogStartPatternRegex_7.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
<summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
</member>
<member name="M:System.Text.RegularExpressions.Generated.ChangelogStartPatternRegex_7.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
<summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if a possible match was found; false if no more matches are possible.</returns>
</member>
<member name="M:System.Text.RegularExpressions.Generated.ChangelogStartPatternRegex_7.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
<summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if the regular expression matches at the current position; otherwise, false.</returns>
</member>
<member name="T:System.Text.RegularExpressions.Generated.SectionStartPatternRegex_8">
<summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the SectionStartPatternRegex method.</summary>
</member>
<member name="F:System.Text.RegularExpressions.Generated.SectionStartPatternRegex_8.Instance">
<summary>Cached, thread-safe singleton instance.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.SectionStartPatternRegex_8.#ctor">
<summary>Initializes the instance.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.SectionStartPatternRegex_8.RunnerFactory">
<summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.SectionStartPatternRegex_8.RunnerFactory.CreateInstance">
<summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
</member>
<member name="T:System.Text.RegularExpressions.Generated.SectionStartPatternRegex_8.RunnerFactory.Runner">
<summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.SectionStartPatternRegex_8.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
<summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
</member>
<member name="M:System.Text.RegularExpressions.Generated.SectionStartPatternRegex_8.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
<summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if a possible match was found; false if no more matches are possible.</returns>
</member>
<member name="M:System.Text.RegularExpressions.Generated.SectionStartPatternRegex_8.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
<summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
<param name="inputSpan">The text being scanned by the regular expression.</param>
<returns>true if the regular expression matches at the current position; otherwise, false.</returns>
</member>
<member name="T:System.Text.RegularExpressions.Generated.Utilities">
<summary>Helper methods used by generated <see cref="T:System.Text.RegularExpressions.Regex"/>-derived implementations.</summary>
</member>
<member name="F:System.Text.RegularExpressions.Generated.Utilities.s_defaultTimeout">
<summary>Default timeout value set in <see cref="T:System.AppContext"/>, or <see cref="F:System.Text.RegularExpressions.Regex.InfiniteMatchTimeout"/> if none was set.</summary>
</member>
<member name="F:System.Text.RegularExpressions.Generated.Utilities.s_hasTimeout">
<summary>Whether <see cref="F:System.Text.RegularExpressions.Generated.Utilities.s_defaultTimeout"/> is non-infinite.</summary>
</member>
<member name="M:System.Text.RegularExpressions.Generated.Utilities.IsBoundaryWordChar(System.Char)">
<summary>Determines whether the specified index is a boundary word character.</summary>
<remarks>This is the same as \w plus U+200C ZERO WIDTH NON-JOINER and U+200D ZERO WIDTH JOINER.</remarks>
</member>
<member name="M:System.Text.RegularExpressions.Generated.Utilities.IsPostWordCharBoundary(System.ReadOnlySpan{System.Char},System.Int32)">
<summary>Determines whether the specified index is a boundary.</summary>
<remarks>This variant is only employed when the previous character has already been validated as a word character.</remarks>
</member>
<member name="M:System.Text.RegularExpressions.Generated.Utilities.IsPreWordCharBoundary(System.ReadOnlySpan{System.Char},System.Int32)">
<summary>Determines whether the specified index is a boundary.</summary>
<remarks>This variant is only employed when the subsequent character will separately be validated as a word character.</remarks>
</member>
<member name="M:System.Text.RegularExpressions.Generated.Utilities.IsWordChar(System.Char)">
<summary>Determines whether the character is part of the [\w] set.</summary>
</member>
<member name="F:System.Text.RegularExpressions.Generated.Utilities.WordCategoriesMask">
<summary>Provides a mask of Unicode categories that combine to form [\w].</summary>
</member>
<member name="P:System.Text.RegularExpressions.Generated.Utilities.WordCharBitmap">
<summary>Gets a bitmap for whether each character 0 through 127 is in [\w]</summary>
</member>
<member name="F:System.Text.RegularExpressions.Generated.Utilities.s_indexOfString_2F93FE89B97147CEC70A0EB0ACFDB2E4BA07C5F0174666AF09DD4CE814752C02">
<summary>Supports searching for the string "CVE-".</summary>
</member>
</members>
</doc>

View File

@@ -0,0 +1,815 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>StellaOps.BinaryIndex.Persistence</name>
</assembly>
<members>
<member name="T:StellaOps.BinaryIndex.Persistence.BinaryIndexDbContext">
<summary>
Database context for BinaryIndex with tenant isolation.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.BinaryIndexDbContext.OpenConnectionAsync(System.Threading.CancellationToken)">
<summary>
Opens a connection with the tenant context set for RLS.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.BinaryIndexMigrationRunner">
<summary>
Runs embedded SQL migrations for the binaries schema.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.BinaryIndexMigrationRunner.MigrateAsync(System.Threading.CancellationToken)">
<summary>
Applies all embedded migrations to the database.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.BinaryIdentityRepository">
<summary>
Repository implementation for binary identity operations.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.CorpusSnapshotRepository">
<summary>
Repository for corpus snapshots.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository">
<summary>
PostgreSQL repository implementation for delta signatures.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.CreateAsync(StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureEntity,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.CreateBatchAsync(System.Collections.Generic.IEnumerable{StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureEntity},System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.GetByIdAsync(System.Guid,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.GetByCveAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.GetByPackageAsync(System.String,System.String,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.GetByHashAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.GetForMatchingAsync(System.String,System.String,System.Collections.Generic.IEnumerable{System.String},System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.GetAllMatchingAsync(System.Collections.Generic.IReadOnlyList{System.String},System.String,System.String,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.UpdateAsync(StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureEntity,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.DeleteAsync(System.Guid,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.GetCountsByStateAsync(System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.GetPatchCoverageAsync(System.Collections.Generic.IReadOnlyList{System.String},System.String,System.Int32,System.Int32,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.GetPatchCoverageDetailsAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.GetMatchingImagesAsync(System.String,System.String,System.String,System.Int32,System.Int32,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureRepository.DeltaSignatureRow">
<summary>
Internal row type for Dapper mapping.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.FingerprintRepository">
<summary>
Repository implementation for vulnerable fingerprints.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.FingerprintMatchRepository">
<summary>
Repository implementation for fingerprint matches.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.FixIndexRepository">
<summary>
PostgreSQL implementation of <see cref="T:StellaOps.BinaryIndex.FixIndex.Repositories.IFixIndexRepository"/>.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.FixIndexRepository.GetFixStatusAsync(System.String,System.String,System.String,System.String,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.FixIndexRepository.GetFixStatusesForPackageAsync(System.String,System.String,System.String,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.FixIndexRepository.GetFixLocationsForCveAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.FixIndexRepository.UpsertAsync(StellaOps.BinaryIndex.FixIndex.Models.FixEvidence,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.FixIndexRepository.UpsertBatchAsync(System.Collections.Generic.IEnumerable{StellaOps.BinaryIndex.FixIndex.Models.FixEvidence},System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.FixIndexRepository.StoreEvidenceAsync(StellaOps.BinaryIndex.FixIndex.Models.FixEvidence,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.FixIndexRepository.GetEvidenceAsync(System.Guid,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.FixIndexRepository.DeleteBySnapshotAsync(System.Guid,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.FunctionCorpusRepository">
<summary>
PostgreSQL repository for function corpus data.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.IRawDocumentRepository">
<summary>
Repository for raw document storage (immutable, append-only).
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.IRawDocumentRepository.GetByDigestAsync(System.String,System.Threading.CancellationToken)">
<summary>
Get a raw document by digest.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.IRawDocumentRepository.ExistsAsync(System.String,System.Threading.CancellationToken)">
<summary>
Check if a document exists by digest.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.IRawDocumentRepository.GetPendingParseAsync(System.String,System.Int32,System.Threading.CancellationToken)">
<summary>
Get documents pending parse.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.IRawDocumentRepository.GetPendingMapAsync(System.String,System.Int32,System.Threading.CancellationToken)">
<summary>
Get documents pending map.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.IRawDocumentRepository.InsertAsync(StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.RawDocumentEntity,System.Threading.CancellationToken)">
<summary>
Insert a new raw document (append-only).
</summary>
<returns>True if inserted, false if already exists.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.IRawDocumentRepository.UpdateStatusAsync(System.String,System.String,System.Threading.CancellationToken)">
<summary>
Update document status.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.IRawDocumentRepository.GetCountByStatusAsync(System.String,System.Threading.CancellationToken)">
<summary>
Get document count by source and status.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.RawDocumentEntity">
<summary>
Raw document entity.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.DocumentStatus">
<summary>
Document status values.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISecurityPairRepository">
<summary>
Repository for security pair (pre/post CVE binary) management.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISecurityPairRepository.GetByIdAsync(System.Guid,System.Threading.CancellationToken)">
<summary>
Get a security pair by ID.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISecurityPairRepository.GetByCveAsync(System.String,System.Threading.CancellationToken)">
<summary>
Get security pairs by CVE ID.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISecurityPairRepository.GetByPackageAsync(System.String,System.String,System.Threading.CancellationToken)">
<summary>
Get security pairs by package.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISecurityPairRepository.GetPendingVerificationAsync(System.Int32,System.Threading.CancellationToken)">
<summary>
Get pairs pending verification.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISecurityPairRepository.UpsertAsync(StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SecurityPairEntity,System.Threading.CancellationToken)">
<summary>
Create or update a security pair.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISecurityPairRepository.UpdateVerificationStatusAsync(System.Guid,System.String,System.Threading.CancellationToken)">
<summary>
Update verification status.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISecurityPairRepository.LinkObservationsAsync(System.Guid,System.String,System.String,System.Threading.CancellationToken)">
<summary>
Link observations to a pair.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISecurityPairRepository.GetLinkedPairsAsync(System.Int32,System.Threading.CancellationToken)">
<summary>
Get pairs with linked observations for validation.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SecurityPairEntity">
<summary>
Security pair entity.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.VerificationStatus">
<summary>
Verification status values.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISourceStateRepository">
<summary>
Repository for source sync state and cursor management.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISourceStateRepository.GetAsync(System.String,System.Threading.CancellationToken)">
<summary>
Get state for a source.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISourceStateRepository.GetAllAsync(System.Threading.CancellationToken)">
<summary>
Get states for all sources.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISourceStateRepository.UpdateAsync(StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SourceStateEntity,System.Threading.CancellationToken)">
<summary>
Update sync state and cursor position.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISourceStateRepository.TrySetSyncingAsync(System.String,System.Threading.CancellationToken)">
<summary>
Set sync status (for concurrent sync protection).
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISourceStateRepository.ClearSyncingAsync(System.String,System.String,System.Threading.CancellationToken)">
<summary>
Clear syncing status.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISourceStateRepository.IncrementCountsAsync(System.String,System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>
Increment document and observation counts.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SourceStateEntity">
<summary>
Source state entity.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SyncStatus">
<summary>
Sync status values.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolObservationRepository">
<summary>
Repository for symbol observation persistence.
Follows immutable, append-only pattern with supersession.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolObservationRepository.GetByIdAsync(System.String,System.Threading.CancellationToken)">
<summary>
Get an observation by its ID.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolObservationRepository.GetByDebugIdAsync(System.String,System.Threading.CancellationToken)">
<summary>
Get observations by debug ID.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolObservationRepository.GetLatestByDebugIdAsync(System.String,System.Threading.CancellationToken)">
<summary>
Get the latest observation for a debug ID (considering supersession).
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolObservationRepository.GetByPackageAsync(System.String,System.String,System.String,System.Threading.CancellationToken)">
<summary>
Get observations by package.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolObservationRepository.GetExistingContentHashAsync(System.String,System.Threading.CancellationToken)">
<summary>
Check if content hash already exists (for idempotency).
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolObservationRepository.InsertAsync(StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolObservationEntity,System.Threading.CancellationToken)">
<summary>
Insert a new observation (append-only).
</summary>
<returns>True if inserted, false if identical observation already exists.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolObservationRepository.SearchBySymbolNameAsync(System.String,System.Int32,System.Threading.CancellationToken)">
<summary>
Search observations by symbol name.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolObservationRepository.GetCountBySourceAsync(System.Threading.CancellationToken)">
<summary>
Get observation count by source.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolObservationEntity">
<summary>
Symbol observation entity.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolSourceRepository">
<summary>
Repository for symbol source management.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolSourceRepository.GetAllAsync(System.Threading.CancellationToken)">
<summary>
Get all registered symbol sources.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolSourceRepository.GetByIdAsync(System.String,System.Threading.CancellationToken)">
<summary>
Get a symbol source by ID.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolSourceRepository.GetEnabledAsync(System.Threading.CancellationToken)">
<summary>
Get all enabled symbol sources.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolSourceRepository.UpsertAsync(StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolSourceEntity,System.Threading.CancellationToken)">
<summary>
Register or update a symbol source.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.ISymbolSourceRepository.SetEnabledAsync(System.String,System.Boolean,System.Threading.CancellationToken)">
<summary>
Enable or disable a symbol source.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolSourceEntity">
<summary>
Symbol source entity.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.RawDocumentRepository">
<summary>
Repository implementation for raw document storage (immutable, append-only).
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.RawDocumentRepository.GetByDigestAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.RawDocumentRepository.ExistsAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.RawDocumentRepository.GetPendingParseAsync(System.String,System.Int32,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.RawDocumentRepository.GetPendingMapAsync(System.String,System.Int32,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.RawDocumentRepository.InsertAsync(StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.RawDocumentEntity,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.RawDocumentRepository.UpdateStatusAsync(System.String,System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.RawDocumentRepository.GetCountByStatusAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SecurityPairRepository">
<summary>
Repository implementation for security pair (pre/post CVE binary) management.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SecurityPairRepository.GetByIdAsync(System.Guid,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SecurityPairRepository.GetByCveAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SecurityPairRepository.GetByPackageAsync(System.String,System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SecurityPairRepository.GetPendingVerificationAsync(System.Int32,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SecurityPairRepository.UpsertAsync(StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SecurityPairEntity,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SecurityPairRepository.UpdateVerificationStatusAsync(System.Guid,System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SecurityPairRepository.LinkObservationsAsync(System.Guid,System.String,System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SecurityPairRepository.GetLinkedPairsAsync(System.Int32,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SourceStateRepository">
<summary>
Repository implementation for source sync state and cursor management.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SourceStateRepository.GetAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SourceStateRepository.GetAllAsync(System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SourceStateRepository.UpdateAsync(StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SourceStateEntity,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SourceStateRepository.TrySetSyncingAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SourceStateRepository.ClearSyncingAsync(System.String,System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SourceStateRepository.IncrementCountsAsync(System.String,System.Int32,System.Int32,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolObservationRepository">
<summary>
Repository implementation for symbol observation persistence.
Follows immutable, append-only pattern with supersession.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolObservationRepository.GetByIdAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolObservationRepository.GetByDebugIdAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolObservationRepository.GetLatestByDebugIdAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolObservationRepository.GetByPackageAsync(System.String,System.String,System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolObservationRepository.GetExistingContentHashAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolObservationRepository.InsertAsync(StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolObservationEntity,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolObservationRepository.SearchBySymbolNameAsync(System.String,System.Int32,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolObservationRepository.GetCountBySourceAsync(System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolSourceRepository">
<summary>
Repository implementation for symbol source management.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolSourceRepository.GetAllAsync(System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolSourceRepository.GetByIdAsync(System.String,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolSourceRepository.GetEnabledAsync(System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolSourceRepository.UpsertAsync(StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolSourceEntity,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.GroundTruth.SymbolSourceRepository.SetEnabledAsync(System.String,System.Boolean,System.Threading.CancellationToken)">
<inheritdoc/>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.IBinaryIdentityRepository">
<summary>
Repository for binary identity operations.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IBinaryIdentityRepository.GetByBuildIdAsync(System.String,System.String,System.Threading.CancellationToken)">
<summary>
Gets a binary identity by its Build-ID.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IBinaryIdentityRepository.GetByKeyAsync(System.String,System.Threading.CancellationToken)">
<summary>
Gets a binary identity by its key.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IBinaryIdentityRepository.GetByFileSha256Async(System.String,System.Threading.CancellationToken)">
<summary>
Gets a binary identity by its file SHA-256 hash.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IBinaryIdentityRepository.UpsertAsync(StellaOps.BinaryIndex.Core.Models.BinaryIdentity,System.Threading.CancellationToken)">
<summary>
Upserts a binary identity.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IBinaryIdentityRepository.GetBatchAsync(System.Collections.Generic.IEnumerable{System.String},System.Threading.CancellationToken)">
<summary>
Gets multiple binary identities by their keys.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository">
<summary>
Repository interface for delta signatures.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository.CreateAsync(StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureEntity,System.Threading.CancellationToken)">
<summary>
Creates a new delta signature.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository.CreateBatchAsync(System.Collections.Generic.IEnumerable{StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureEntity},System.Threading.CancellationToken)">
<summary>
Creates multiple delta signatures in a batch.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository.GetByIdAsync(System.Guid,System.Threading.CancellationToken)">
<summary>
Gets a delta signature by ID.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository.GetByCveAsync(System.String,System.Threading.CancellationToken)">
<summary>
Gets delta signatures by CVE ID.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository.GetByPackageAsync(System.String,System.String,System.Threading.CancellationToken)">
<summary>
Gets delta signatures by package name.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository.GetByHashAsync(System.String,System.Threading.CancellationToken)">
<summary>
Gets delta signatures by hash.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository.GetForMatchingAsync(System.String,System.String,System.Collections.Generic.IEnumerable{System.String},System.Threading.CancellationToken)">
<summary>
Gets delta signatures for matching by architecture and symbols.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository.GetAllMatchingAsync(System.Collections.Generic.IReadOnlyList{System.String},System.String,System.String,System.Threading.CancellationToken)">
<summary>
Gets all delta signatures matching the specified filters.
Used for vulnerability lookup with flexible filtering.
</summary>
<param name="cveFilter">Optional CVE IDs to filter.</param>
<param name="packageFilter">Optional package name to filter.</param>
<param name="archFilter">Optional architecture to filter.</param>
<param name="ct">Cancellation token.</param>
<returns>Matching delta signature entities.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository.UpdateAsync(StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureEntity,System.Threading.CancellationToken)">
<summary>
Updates a delta signature.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository.DeleteAsync(System.Guid,System.Threading.CancellationToken)">
<summary>
Deletes a delta signature.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository.GetCountsByStateAsync(System.Threading.CancellationToken)">
<summary>
Gets the count of signatures by state.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository.GetPatchCoverageAsync(System.Collections.Generic.IReadOnlyList{System.String},System.String,System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>
Gets aggregated patch coverage statistics by CVE.
Returns summary counts of vulnerable/patched/unknown states per CVE.
</summary>
<param name="cveFilter">Optional CVE IDs to filter.</param>
<param name="packageFilter">Optional package name filter.</param>
<param name="limit">Maximum number of CVEs to return (default 100).</param>
<param name="offset">Offset for pagination.</param>
<param name="ct">Cancellation token.</param>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository.GetPatchCoverageDetailsAsync(System.String,System.Threading.CancellationToken)">
<summary>
Gets detailed patch coverage for a specific CVE with function-level breakdown.
</summary>
<param name="cveId">CVE identifier.</param>
<param name="ct">Cancellation token.</param>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.IDeltaSignatureRepository.GetMatchingImagesAsync(System.String,System.String,System.String,System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>
Gets paginated list of images/binaries matching a specific CVE and symbol.
</summary>
<param name="cveId">CVE identifier.</param>
<param name="symbolName">Optional symbol name filter.</param>
<param name="matchState">Optional state filter (vulnerable/patched/unknown).</param>
<param name="limit">Maximum results.</param>
<param name="offset">Pagination offset.</param>
<param name="ct">Cancellation token.</param>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageResult">
<summary>
Result of patch coverage aggregation query.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageResult.Entries">
<summary>Coverage entries by CVE.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageResult.TotalCount">
<summary>Total number of CVEs matching filter.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageResult.Offset">
<summary>Offset used for pagination.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageResult.Limit">
<summary>Limit used for pagination.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageEntry">
<summary>
Patch coverage summary for a single CVE.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageEntry.CveId">
<summary>CVE identifier.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageEntry.PackageName">
<summary>Primary package name.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageEntry.VulnerableCount">
<summary>Number of images with vulnerable state.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageEntry.PatchedCount">
<summary>Number of images with patched state.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageEntry.UnknownCount">
<summary>Number of images with unknown state.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageEntry.SymbolCount">
<summary>Total number of distinct symbols tracked.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageEntry.CoveragePercent">
<summary>Patch coverage percentage (0-100).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageEntry.LastUpdatedAt">
<summary>When this CVE's signatures were last updated.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageDetails">
<summary>
Detailed patch coverage for a CVE with function-level breakdown.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageDetails.CveId">
<summary>CVE identifier.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageDetails.PackageName">
<summary>Primary package name.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageDetails.Functions">
<summary>Function-level breakdown.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageDetails.Summary">
<summary>Summary statistics.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.FunctionCoverageEntry">
<summary>
Coverage entry for a single function/symbol.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.FunctionCoverageEntry.SymbolName">
<summary>Symbol/function name.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.FunctionCoverageEntry.Soname">
<summary>Shared object name (soname).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.FunctionCoverageEntry.VulnerableCount">
<summary>Number of vulnerable matches.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.FunctionCoverageEntry.PatchedCount">
<summary>Number of patched matches.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.FunctionCoverageEntry.UnknownCount">
<summary>Number of unknown matches.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.FunctionCoverageEntry.HasDelta">
<summary>Whether vulnerable and patched signatures exist.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageSummary">
<summary>
Summary statistics for patch coverage.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageSummary.TotalImages">
<summary>Total images analyzed.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageSummary.VulnerableImages">
<summary>Total vulnerable images.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageSummary.PatchedImages">
<summary>Total patched images.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageSummary.UnknownImages">
<summary>Total unknown images.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageSummary.OverallCoverage">
<summary>Overall coverage percentage.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageSummary.SymbolCount">
<summary>Number of distinct symbols.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchCoverageSummary.DeltaPairCount">
<summary>Number of symbols with delta pairs.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.PatchMatchPage">
<summary>
Paginated list of matching images.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchMatchPage.Matches">
<summary>Matching image entries.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchMatchPage.TotalCount">
<summary>Total count matching filter.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchMatchPage.Offset">
<summary>Offset used.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchMatchPage.Limit">
<summary>Limit used.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.PatchMatchEntry">
<summary>
Single image match entry.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchMatchEntry.MatchId">
<summary>Match ID.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchMatchEntry.BinaryKey">
<summary>Binary key (image digest or path).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchMatchEntry.BinarySha256">
<summary>Binary SHA-256 hash.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchMatchEntry.SymbolName">
<summary>Matched symbol name.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchMatchEntry.MatchState">
<summary>Match state (vulnerable/patched/unknown).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchMatchEntry.Confidence">
<summary>Match confidence (0-1).</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchMatchEntry.ScanId">
<summary>Scan ID that produced this match.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.Persistence.Repositories.PatchMatchEntry.ScannedAt">
<summary>When the match was recorded.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureEntity">
<summary>
Entity representing a persisted delta signature.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSignatureEntity.ToSymbolSignature">
<summary>
Converts to a DeltaSig model SymbolSignature.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Repositories.DeltaSigMatchEntity">
<summary>
Entity representing a persisted match result.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.Persistence.Services.BinaryVulnerabilityService">
<summary>
Implementation of binary vulnerability lookup service.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Services.BinaryVulnerabilityService.LookupByDeltaSignatureAsync(System.IO.Stream,StellaOps.BinaryIndex.Core.Services.DeltaSigLookupOptions,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Services.BinaryVulnerabilityService.LookupBySymbolHashAsync(System.String,System.String,StellaOps.BinaryIndex.Core.Services.DeltaSigLookupOptions,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Services.BinaryVulnerabilityService.IdentifyFunctionFromCorpusAsync(StellaOps.BinaryIndex.Core.Services.FunctionFingerprintSet,StellaOps.BinaryIndex.Core.Services.CorpusLookupOptions,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.Persistence.Services.BinaryVulnerabilityService.IdentifyFunctionsFromCorpusBatchAsync(System.Collections.Generic.IEnumerable{System.ValueTuple{System.String,StellaOps.BinaryIndex.Core.Services.FunctionFingerprintSet}},StellaOps.BinaryIndex.Core.Services.CorpusLookupOptions,System.Threading.CancellationToken)">
<inheritdoc />
</member>
</members>
</doc>

View File

@@ -0,0 +1,270 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>StellaOps.BinaryIndex.VexBridge</name>
</assembly>
<members>
<member name="T:StellaOps.BinaryIndex.VexBridge.BinaryMatchEvidenceSchema">
<summary>
Constants and schema definitions for binary match evidence in VEX observations.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.VexBridge.BinaryMatchEvidenceSchema.EvidenceType">
<summary>Evidence type identifier for binary fingerprint matches.</summary>
</member>
<member name="F:StellaOps.BinaryIndex.VexBridge.BinaryMatchEvidenceSchema.SchemaVersion">
<summary>Schema version for evidence payloads.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.VexBridge.BinaryMatchEvidenceSchema.Fields">
<summary>Evidence field names.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.VexBridge.BinaryMatchEvidenceSchema.MatchTypes">
<summary>Match type values.</summary>
</member>
<member name="M:StellaOps.BinaryIndex.VexBridge.BinaryMatchEvidenceSchema.ValidateEvidence(System.Text.Json.Nodes.JsonObject,System.String@)">
<summary>
Validates an evidence payload against the expected schema.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.VexBridge.BinaryMatchEvidenceSchema.CreateEvidence(System.String,System.String,System.String,System.String,System.String,System.Nullable{System.Decimal},System.String,System.String,System.String,System.String,System.Nullable{System.Decimal},System.String,System.String,System.String,System.String,System.Nullable{System.DateTimeOffset})">
<summary>
Creates an evidence JSON object from the provided parameters.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.VexBridge.IDsseSigningAdapter">
<summary>
Adapter interface for DSSE signing operations.
Abstracts the Attestor signing service for VexBridge use.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.VexBridge.IDsseSigningAdapter.SignAsync(System.Byte[],System.String,System.Threading.CancellationToken)">
<summary>
Sign a payload and return a DSSE envelope.
</summary>
<param name="payload">The payload bytes to sign.</param>
<param name="payloadType">The DSSE payload type URI.</param>
<param name="ct">Cancellation token.</param>
<returns>DSSE envelope as JSON bytes.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.VexBridge.IDsseSigningAdapter.VerifyAsync(System.Byte[],System.Threading.CancellationToken)">
<summary>
Verify a DSSE envelope signature.
</summary>
<param name="envelope">The DSSE envelope bytes.</param>
<param name="ct">Cancellation token.</param>
<returns>True if signature is valid.</returns>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.IDsseSigningAdapter.SigningKeyId">
<summary>
Get the key ID used for signing.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.IDsseSigningAdapter.IsAvailable">
<summary>
Check if signing is available.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.VexBridge.DsseEnvelopeResult">
<summary>
DSSE envelope result with metadata.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.DsseEnvelopeResult.Envelope">
<summary>The DSSE envelope as JSON string.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.DsseEnvelopeResult.KeyId">
<summary>The signing key ID used.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.DsseEnvelopeResult.EnvelopeHash">
<summary>SHA-256 hash of the envelope.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.DsseEnvelopeResult.SignedAt">
<summary>Timestamp when signed.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.VexBridge.IVexEvidenceGenerator">
<summary>
Generates VEX observations from binary vulnerability match results.
Bridges the gap between binary fingerprint analysis and VEX decision flow.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.VexBridge.IVexEvidenceGenerator.GenerateFromBinaryMatchAsync(StellaOps.BinaryIndex.Core.Services.BinaryVulnMatch,StellaOps.BinaryIndex.Core.Models.BinaryIdentity,StellaOps.BinaryIndex.Core.Services.FixStatusResult,StellaOps.BinaryIndex.VexBridge.VexGenerationContext,System.Threading.CancellationToken)">
<summary>
Generate a VEX observation from a binary vulnerability match.
</summary>
<param name="match">The binary vulnerability match result.</param>
<param name="identity">The binary identity being analyzed.</param>
<param name="fixStatus">Optional fix status from the fix index.</param>
<param name="context">Generation context with tenant and scan metadata.</param>
<param name="ct">Cancellation token.</param>
<returns>A VEX observation ready for Excititor persistence.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.VexBridge.IVexEvidenceGenerator.GenerateBatchAsync(System.Collections.Generic.IEnumerable{StellaOps.BinaryIndex.VexBridge.BinaryMatchWithContext},System.Threading.CancellationToken)">
<summary>
Batch generation of VEX observations for scan performance.
</summary>
<param name="matches">Collection of matches with their context.</param>
<param name="ct">Cancellation token.</param>
<returns>List of VEX observations in deterministic order.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.VexBridge.IVexEvidenceGenerator.GenerateObservationId(System.String,System.String,System.String,System.String)">
<summary>
Generate observation ID deterministically for replay/idempotency.
</summary>
<param name="tenantId">Tenant identifier.</param>
<param name="cveId">CVE identifier.</param>
<param name="productKey">PURL or product key.</param>
<param name="scanId">Scan identifier.</param>
<returns>Deterministic UUID5-based observation ID.</returns>
</member>
<member name="T:StellaOps.BinaryIndex.VexBridge.VexGenerationContext">
<summary>
Context for VEX observation generation.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexGenerationContext.TenantId">
<summary>Tenant identifier.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexGenerationContext.ScanId">
<summary>Scan identifier for traceability.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexGenerationContext.ProductKey">
<summary>Product key, typically a PURL.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexGenerationContext.DistroRelease">
<summary>Optional distro release identifier (e.g., "debian:bookworm").</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexGenerationContext.SignWithDsse">
<summary>Whether to sign the observation with DSSE. Default true.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexGenerationContext.ProviderId">
<summary>Provider ID for the VEX observation. Defaults to "stellaops.binaryindex".</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexGenerationContext.StreamId">
<summary>Stream ID for the VEX observation. Defaults to "binary_resolution".</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexGenerationContext.EvidenceVersion">
<summary>Optional version for the resolution evidence.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.VexBridge.BinaryMatchWithContext">
<summary>
Wrapper for a binary match with its full context.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.BinaryMatchWithContext.Match">
<summary>The binary vulnerability match.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.BinaryMatchWithContext.Identity">
<summary>The binary identity being analyzed.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.BinaryMatchWithContext.FixStatus">
<summary>Optional fix status from the fix index.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.BinaryMatchWithContext.Context">
<summary>Generation context.</summary>
</member>
<member name="T:StellaOps.BinaryIndex.VexBridge.ServiceCollectionExtensions">
<summary>
Extension methods for registering VexBridge services.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.VexBridge.ServiceCollectionExtensions.AddBinaryVexBridge(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.Configuration.IConfiguration)">
<summary>
Adds VEX Bridge services for converting binary matches to VEX observations.
</summary>
<param name="services">The service collection.</param>
<param name="configuration">Configuration containing VexBridge section.</param>
<returns>The service collection for chaining.</returns>
</member>
<member name="M:StellaOps.BinaryIndex.VexBridge.ServiceCollectionExtensions.AddBinaryVexBridge(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{StellaOps.BinaryIndex.VexBridge.VexBridgeOptions})">
<summary>
Adds VEX Bridge services with custom options configuration.
</summary>
<param name="services">The service collection.</param>
<param name="configureOptions">Action to configure options.</param>
<returns>The service collection for chaining.</returns>
</member>
<member name="T:StellaOps.BinaryIndex.VexBridge.VexBridgeOptions">
<summary>
Configuration options for the VEX Bridge.
</summary>
</member>
<member name="F:StellaOps.BinaryIndex.VexBridge.VexBridgeOptions.SectionName">
<summary>Configuration section name.</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexBridgeOptions.SignWithDsse">
<summary>
Whether to sign generated VEX observations with DSSE.
Default: true
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexBridgeOptions.DsseKeyId">
<summary>
Key ID to use for DSSE signing.
If null, uses the default attestor key.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexBridgeOptions.DefaultProviderId">
<summary>
Default provider ID for generated observations.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexBridgeOptions.DefaultStreamId">
<summary>
Default stream ID for generated observations.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexBridgeOptions.MinConfidenceThreshold">
<summary>
Minimum confidence threshold for creating observations.
Matches below this threshold will be skipped.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexBridgeOptions.IncludeFunctionEvidence">
<summary>
Whether to include function-level evidence when available.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexBridgeOptions.MaxBatchSize">
<summary>
Maximum number of observations to generate in a single batch.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexBridgeOptions.ObservationIdNamespace">
<summary>
Namespace UUID for generating deterministic observation IDs.
Default: StellaOps BinaryIndex namespace.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexBridgeOptions.IncludeExternalLinks">
<summary>
Whether to include external reference links (e.g., NVD) in linksets.
</summary>
</member>
<member name="P:StellaOps.BinaryIndex.VexBridge.VexBridgeOptions.NvdCveBaseUrl">
<summary>
Base URL for CVE references when external links are enabled.
</summary>
</member>
<member name="T:StellaOps.BinaryIndex.VexBridge.VexEvidenceGenerator">
<summary>
Generates VEX observations from binary vulnerability matches.
Maps FixState to VexClaimStatus with appropriate justifications.
Supports optional DSSE signing for attestable proofs.
</summary>
</member>
<member name="M:StellaOps.BinaryIndex.VexBridge.VexEvidenceGenerator.GenerateFromBinaryMatchAsync(StellaOps.BinaryIndex.Core.Services.BinaryVulnMatch,StellaOps.BinaryIndex.Core.Models.BinaryIdentity,StellaOps.BinaryIndex.Core.Services.FixStatusResult,StellaOps.BinaryIndex.VexBridge.VexGenerationContext,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.VexBridge.VexEvidenceGenerator.GenerateBatchAsync(System.Collections.Generic.IEnumerable{StellaOps.BinaryIndex.VexBridge.BinaryMatchWithContext},System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.VexBridge.VexEvidenceGenerator.GenerateObservationId(System.String,System.String,System.String,System.String)">
<inheritdoc />
</member>
<member name="M:StellaOps.BinaryIndex.VexBridge.VexEvidenceGenerator.GenerateUuid5(System.Guid,System.String)">
<summary>
Generate a UUID v5 (name-based, SHA-1) from namespace and name.
</summary>
</member>
</members>
</doc>

View File

@@ -0,0 +1,20 @@
{
"runtimeOptions": {
"tfm": "net10.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "10.0.0"
},
{
"name": "Microsoft.AspNetCore.App",
"version": "10.0.0"
}
],
"configProperties": {
"System.GC.Server": true,
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

View File

@@ -0,0 +1,221 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>StellaOps.Cryptography.PluginLoader</name>
</assembly>
<members>
<member name="T:StellaOps.Cryptography.PluginLoader.CryptoPluginConfiguration">
<summary>
Configuration for crypto plugin loading and selection.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginConfiguration.ManifestPath">
<summary>
Path to the plugin manifest JSON file.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginConfiguration.DiscoveryMode">
<summary>
Plugin discovery mode: "explicit" (only load configured plugins) or "auto" (load all compatible plugins).
Default: "explicit" for production safety.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginConfiguration.Enabled">
<summary>
List of plugins to enable with optional priority and options overrides.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginConfiguration.Disabled">
<summary>
List of plugin IDs or patterns to explicitly disable.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginConfiguration.FailOnMissingPlugin">
<summary>
Fail application startup if a configured plugin cannot be loaded.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginConfiguration.RequireAtLeastOne">
<summary>
Require at least one crypto provider to be successfully loaded.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginConfiguration.Compliance">
<summary>
Compliance profile configuration.
</summary>
</member>
<member name="T:StellaOps.Cryptography.PluginLoader.EnabledPluginEntry">
<summary>
Configuration entry for an enabled plugin.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.EnabledPluginEntry.Id">
<summary>
Plugin identifier from the manifest.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.EnabledPluginEntry.Priority">
<summary>
Priority override for this plugin (higher = preferred).
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.EnabledPluginEntry.Options">
<summary>
Plugin-specific options (e.g., enginePath for OpenSSL GOST).
</summary>
</member>
<member name="T:StellaOps.Cryptography.PluginLoader.CryptoComplianceConfiguration">
<summary>
Compliance profile configuration for regional crypto requirements.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoComplianceConfiguration.ProfileId">
<summary>
Compliance profile identifier (e.g., "gost", "fips", "eidas", "sm").
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoComplianceConfiguration.StrictValidation">
<summary>
Enable strict validation (reject algorithms not compliant with profile).
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoComplianceConfiguration.EnforceJurisdiction">
<summary>
Enforce jurisdiction filtering (only load plugins for specified jurisdictions).
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoComplianceConfiguration.AllowedJurisdictions">
<summary>
Allowed jurisdictions (e.g., ["russia"], ["eu"], ["world"]).
</summary>
</member>
<member name="T:StellaOps.Cryptography.PluginLoader.CryptoPluginLoader">
<summary>
Loads crypto provider plugins dynamically based on manifest and configuration.
</summary>
</member>
<member name="M:StellaOps.Cryptography.PluginLoader.CryptoPluginLoader.#ctor(StellaOps.Cryptography.PluginLoader.CryptoPluginConfiguration,Microsoft.Extensions.Logging.ILogger{StellaOps.Cryptography.PluginLoader.CryptoPluginLoader},System.String)">
<summary>
Initializes a new instance of the <see cref="T:StellaOps.Cryptography.PluginLoader.CryptoPluginLoader"/> class.
</summary>
<param name="configuration">Plugin configuration.</param>
<param name="logger">Optional logger instance.</param>
<param name="pluginDirectory">Optional plugin directory path. Defaults to application base directory.</param>
</member>
<member name="M:StellaOps.Cryptography.PluginLoader.CryptoPluginLoader.LoadProviders">
<summary>
Loads all configured crypto providers.
</summary>
<returns>Collection of loaded provider instances.</returns>
</member>
<member name="T:StellaOps.Cryptography.PluginLoader.CryptoPluginLoader.PluginAssemblyLoadContext">
<summary>
AssemblyLoadContext for plugin isolation.
</summary>
</member>
<member name="T:StellaOps.Cryptography.PluginLoader.CryptoPluginLoadException">
<summary>
Exception thrown when a crypto plugin fails to load.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginLoadException.PluginId">
<summary>
Gets the identifier of the plugin that failed to load, if known.
</summary>
</member>
<member name="M:StellaOps.Cryptography.PluginLoader.CryptoPluginLoadException.#ctor(System.String,System.String,System.Exception)">
<summary>
Initializes a new instance of the <see cref="T:StellaOps.Cryptography.PluginLoader.CryptoPluginLoadException"/> class.
</summary>
<param name="message">Error message.</param>
<param name="pluginId">Plugin identifier, or null if unknown.</param>
<param name="innerException">Inner exception, or null.</param>
</member>
<member name="T:StellaOps.Cryptography.PluginLoader.CryptoPluginManifest">
<summary>
Root manifest structure declaring available crypto plugins.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginManifest.Schema">
<summary>
Gets or inits the JSON schema URI for manifest validation.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginManifest.Version">
<summary>
Gets or inits the manifest version.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginManifest.Plugins">
<summary>
Gets or inits the list of available crypto plugin descriptors.
</summary>
</member>
<member name="T:StellaOps.Cryptography.PluginLoader.CryptoPluginDescriptor">
<summary>
Describes a single crypto plugin with its capabilities and metadata.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginDescriptor.Id">
<summary>
Unique plugin identifier (e.g., "openssl.gost", "cryptopro.gost").
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginDescriptor.Name">
<summary>
Human-readable plugin name.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginDescriptor.Assembly">
<summary>
Assembly file name containing the provider implementation.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginDescriptor.Type">
<summary>
Fully-qualified type name of the ICryptoProvider implementation.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginDescriptor.Capabilities">
<summary>
Capabilities supported by this plugin (e.g., "signing:ES256", "hashing:SHA256").
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginDescriptor.Jurisdiction">
<summary>
Jurisdiction/region where this plugin is applicable (e.g., "russia", "china", "eu", "world").
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginDescriptor.Compliance">
<summary>
Compliance standards supported (e.g., "GOST", "FIPS-140-3", "eIDAS").
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginDescriptor.Platforms">
<summary>
Supported platforms (e.g., "linux", "windows", "osx").
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginDescriptor.Priority">
<summary>
Priority for provider resolution (higher = preferred). Default: 50.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginDescriptor.Options">
<summary>
Default options for plugin initialization.
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginDescriptor.ConditionalCompilation">
<summary>
Conditional compilation symbol required for this plugin (e.g., "STELLAOPS_CRYPTO_PRO").
</summary>
</member>
<member name="P:StellaOps.Cryptography.PluginLoader.CryptoPluginDescriptor.EnabledByDefault">
<summary>
Whether this plugin is enabled by default. Default: true.
</summary>
</member>
</members>
</doc>

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft.AspNetCore": "Information"
}
}
}

View File

@@ -0,0 +1,33 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"Redis": "localhost:6379"
},
"Resolution": {
"DefaultCacheTtl": "04:00:00",
"MaxBatchSize": 500,
"EnableDsseByDefault": true,
"MinConfidenceThreshold": 0.70
},
"ResolutionCache": {
"FixedTtl": "24:00:00",
"VulnerableTtl": "04:00:00",
"UnknownTtl": "01:00:00",
"KeyPrefix": "resolution",
"EnableEarlyExpiry": true,
"EarlyExpiryFactor": 0.1
},
"VexBridge": {
"SignWithDsse": true,
"DefaultProviderId": "stellaops.binaryindex",
"DefaultStreamId": "binary_resolution",
"MinConfidenceThreshold": 0.70,
"MaxBatchSize": 1000
}
}