protected HashVerificationFailure? ValidateHashes()

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;
    }