Sha256: 1b52efe6adf93aaa641c700dae093b147efd4b85218d37b21c66761657f54c5f

Contents?: true

Size: 1003 Bytes

Versions: 1

Compression:

Stored size: 1003 Bytes

Contents

# frozen_string_literal: true

require 'openssl'

module AppleReceipt
  # Validator allows one to check the validity of a receipt.
  class Validator
    def initialize(receipt)
      root_cert_pem = File.read('./certificates/AppleIncRootCertificate.cer')
      root_cert = OpenSSL::X509::Certificate.new(root_cert_pem)

      intermediate_cert_pem = File.read('./certificates/AppleWWDRCA.cer')
      intermediate_cert = OpenSSL::X509::Certificate.new(intermediate_cert_pem)

      store.add_cert(root_cert)
      store.add_cert(intermediate_cert)

      @receipt = receipt
    end

    def valid?
      store.verify(receipt.cert) &&
        public_key.verify(OpenSSL::Digest::SHA1.new,
                          receipt.signature, signed_data)
    end

    def public_key
      receipt.cert.public_key
    end

    def signed_data
      [receipt.version, receipt.data].pack('CA*')
    end

    def store
      @store ||= OpenSSL::X509::Store.new
    end

    private

    attr_reader :receipt
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
apple_receipt-0.1.1 lib/apple_receipt/validator.rb