in JetBrains.SbomUtils/src/JetBrains.SbomUtils/SbomValidator.cs [132:150]
protected HashVerificationFailure? ValidateHashes(Dictionary<ChecksumAlgorithm, byte[]> fileHashes, FileInfo fileInfo)
{
List<HashMismatch> mismatches = new List<HashMismatch>(fileInfo.File.Checksums.Count);
foreach (var fileChecksum in fileInfo.File.Checksums)
{
var hashOnDisk = fileHashes[fileChecksum.Algorithm];
if (fileChecksum.ChecksumValue.Length % 2 != 0)
throw new InvalidOperationException($"Hash length for function {fileChecksum.Algorithm} for file {fileInfo.File.SPDXID} has odd length");
var hashFromSbom = ParseHashValue(fileChecksum.ChecksumValue);
if (!Utils.ByteArraysEqual(hashOnDisk, hashFromSbom))
mismatches.Add(new HashMismatch(fileChecksum, hashOnDisk));
}
return mismatches.Any() ? new HashVerificationFailure(fileInfo, mismatches.ToArray()) : null;
}