aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cask/lib/hbc/verify/checksum.rb
blob: 620703d313d4903226ce3e28b36e334c4e56f6fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
require "digest"

module Hbc
  module Verify
    class Checksum
      def self.me?(cask)
        return true unless cask.sha256 == :no_check
        ohai "No checksum defined for Cask #{cask}, skipping verification"
        false
      end

      attr_reader :cask, :downloaded_path

      def initialize(cask, downloaded_path)
        @cask = cask
        @downloaded_path = downloaded_path
      end

      def verify
        return unless self.class.me?(cask)
        ohai "Verifying checksum for Cask #{cask}"
        verify_checksum
      end

      private

      def expected
        @expected ||= cask.sha256
      end

      def computed
        @computed ||= Digest::SHA2.file(downloaded_path).hexdigest
      end

      def verify_checksum
        raise CaskSha256MissingError.new(cask.token, expected, computed) if expected.nil? || expected.empty?

        if expected == computed
          odebug "SHA256 checksums match"
        else
          ohai 'Note: running "brew update" may fix sha256 checksum errors'
          raise CaskSha256MismatchError.new(cask.token, expected, computed, downloaded_path)
        end
      end
    end
  end
end