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
46 lines
1.2 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
|