stabilizaiton work - projects rework for maintenanceability and ui livening
This commit is contained in:
96
src/__Libraries/StellaOps.Provcache/VeriKeyBuilder.Build.cs
Normal file
96
src/__Libraries/StellaOps.Provcache/VeriKeyBuilder.Build.cs
Normal file
@@ -0,0 +1,96 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StellaOps.Provcache;
|
||||
|
||||
public sealed partial class VeriKeyBuilder
|
||||
{
|
||||
/// <summary>
|
||||
/// Builds the final VeriKey by hashing all components together.
|
||||
/// </summary>
|
||||
/// <returns>The computed VeriKey in format "sha256:<hex>".</returns>
|
||||
/// <exception cref="InvalidOperationException">If required components are missing.</exception>
|
||||
public string Build()
|
||||
{
|
||||
ValidateRequiredComponents();
|
||||
|
||||
var components = new StringBuilder();
|
||||
components.Append("v1|");
|
||||
components.Append(_sourceHash);
|
||||
components.Append('|');
|
||||
components.Append(_sbomHash);
|
||||
components.Append('|');
|
||||
components.Append(_vexHashSetHash);
|
||||
components.Append('|');
|
||||
components.Append(_mergePolicyHash);
|
||||
components.Append('|');
|
||||
components.Append(_signerSetHash);
|
||||
components.Append('|');
|
||||
components.Append(_timeWindow);
|
||||
|
||||
var compositeBytes = Encoding.UTF8.GetBytes(components.ToString());
|
||||
return ComputeHash(compositeBytes);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds a <see cref="VeriKeyComponents"/> record with all individual components.
|
||||
/// Useful for debugging and serialization.
|
||||
/// </summary>
|
||||
/// <returns>A record containing all VeriKey components.</returns>
|
||||
public VeriKeyComponents BuildWithComponents()
|
||||
{
|
||||
ValidateRequiredComponents();
|
||||
|
||||
return new VeriKeyComponents
|
||||
{
|
||||
VeriKey = Build(),
|
||||
SourceHash = _sourceHash!,
|
||||
SbomHash = _sbomHash!,
|
||||
VexHashSetHash = _vexHashSetHash!,
|
||||
MergePolicyHash = _mergePolicyHash!,
|
||||
SignerSetHash = _signerSetHash!,
|
||||
TimeWindow = _timeWindow!
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the builder to its initial state.
|
||||
/// </summary>
|
||||
/// <returns>This builder for fluent chaining.</returns>
|
||||
public VeriKeyBuilder Reset()
|
||||
{
|
||||
_sourceHash = null;
|
||||
_sbomHash = null;
|
||||
_vexHashSetHash = null;
|
||||
_mergePolicyHash = null;
|
||||
_signerSetHash = null;
|
||||
_timeWindow = null;
|
||||
return this;
|
||||
}
|
||||
|
||||
private void ValidateRequiredComponents()
|
||||
{
|
||||
var missing = new List<string>();
|
||||
|
||||
if (string.IsNullOrWhiteSpace(_sourceHash))
|
||||
missing.Add("SourceHash");
|
||||
if (string.IsNullOrWhiteSpace(_sbomHash))
|
||||
missing.Add("SbomHash");
|
||||
if (string.IsNullOrWhiteSpace(_vexHashSetHash))
|
||||
missing.Add("VexHashSetHash");
|
||||
if (string.IsNullOrWhiteSpace(_mergePolicyHash))
|
||||
missing.Add("MergePolicyHash");
|
||||
if (string.IsNullOrWhiteSpace(_signerSetHash))
|
||||
missing.Add("SignerSetHash");
|
||||
if (string.IsNullOrWhiteSpace(_timeWindow))
|
||||
missing.Add("TimeWindow");
|
||||
|
||||
if (missing.Count > 0)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
$"Cannot build VeriKey: missing required components: {string.Join(", ", missing)}. " +
|
||||
"Use the With* methods to set all required components before calling Build().");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user