Files
git.stella-ops.org/src/Scanner/__Libraries/StellaOps.Scanner.Analyzers.Lang.Bun/Internal/BunEvidenceHasher.cs
StellaOps Bot 6e45066e37
Some checks failed
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Policy Simulation / policy-simulate (push) Has been cancelled
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Signals CI & Image / signals-ci (push) Has been cancelled
Signals Reachability Scoring & Events / reachability-smoke (push) Has been cancelled
Signals Reachability Scoring & Events / sign-and-upload (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
Scanner Analyzers / Discover Analyzers (push) Has been cancelled
Scanner Analyzers / Build Analyzers (push) Has been cancelled
Scanner Analyzers / Test Language Analyzers (push) Has been cancelled
Scanner Analyzers / Validate Test Fixtures (push) Has been cancelled
Scanner Analyzers / Verify Deterministic Output (push) Has been cancelled
up
2025-12-13 09:37:15 +02:00

46 lines
1.2 KiB
C#

using System.Security.Cryptography;
namespace StellaOps.Scanner.Analyzers.Lang.Bun.Internal;
internal static class BunEvidenceHasher
{
internal const int MaxPackageJsonEvidenceBytes = 1024 * 1024; // 1 MiB
internal const int MaxLockfileEvidenceBytes = 50 * 1024 * 1024; // 50 MiB (matches BunLockParser cap)
internal static string? TryComputeBoundedSha256(string path, int maxBytes, out string? skipReason)
{
skipReason = null;
try
{
var info = new FileInfo(path);
if (!info.Exists)
{
skipReason = "missing";
return null;
}
if (info.Length > maxBytes)
{
skipReason = $"size>{maxBytes}";
return null;
}
using var stream = File.OpenRead(path);
var hash = SHA256.HashData(stream);
return Convert.ToHexString(hash).ToLowerInvariant();
}
catch (UnauthorizedAccessException)
{
skipReason = "unauthorized";
return null;
}
catch (IOException)
{
skipReason = "io";
return null;
}
}
}