Sha256: a81bd05267eeecdfb494c73886caecb4d2547ce23d36bf9dddadf4fcf9c6fc09

Contents?: true

Size: 1.4 KB

Versions: 12

Compression:

Stored size: 1.4 KB

Contents

# frozen_string_literal: true

module AppInfo
  class Android < File
    module Signature
      # Android v1 Signature
      class V1 < Base
        DESCRIPTION = 'JAR signing'

        PKCS7_HEADER = [0x30, 0x82].freeze

        attr_reader :certificates, :signatures

        def version
          Version::V1
        end

        def description
          DESCRIPTION
        end

        def verify
          @signatures = fetch_signatures
          @certificates = fetch_certificates

          raise NotFoundError, 'Not found certificates' if @certificates.empty?
        end

        private

        def fetch_signatures
          case @parser
          when AppInfo::APK
            signatures_from(@parser.apk)
          when AppInfo::AAB
            signatures_from(@parser)
          end
        end

        def fetch_certificates
          @signatures.each_with_object([]) do |(_, sign), obj|
            next if sign.certificates.empty?

            obj << AppInfo::Certificate.new(sign.certificates[0])
          end
        end

        def signatures_from(parser)
          signs = {}
          parser.each_file do |path, data|
            # find META-INF/xxx.{RSA|DSA|EC}
            next unless path =~ %r{^META-INF/} && data.unpack('CC') == PKCS7_HEADER

            signs[path] = OpenSSL::PKCS7.new(data)
          end
          signs
        end
      end

      register(Version::V1, V1)
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
app-info-3.3.0 lib/app_info/android/signatures/v1.rb
app-info-3.2.0 lib/app_info/android/signatures/v1.rb
app-info-3.2.0.beta1 lib/app_info/android/signatures/v1.rb
app-info-3.1.4 lib/app_info/android/signatures/v1.rb
app-info-3.1.3 lib/app_info/android/signatures/v1.rb
app-info-3.1.2 lib/app_info/android/signatures/v1.rb
app-info-3.1.1 lib/app_info/android/signatures/v1.rb
app-info-3.1.0 lib/app_info/android/signatures/v1.rb
app-info-3.0.0 lib/app_info/android/signatures/v1.rb
app-info-3.0.0.beta4 lib/app_info/android/signatures/v1.rb
app-info-3.0.0.beta3 lib/app_info/android/signatures/v1.rb
app-info-3.0.0.beta2 lib/app_info/android/signatures/v1.rb