Class: AppleReceipt::Validator

Inherits:
Object
  • Object
show all
Defined in:
lib/apple_receipt/validator.rb

Overview

Validator allows one to check the validity of a receipt.

Instance Method Summary collapse

Constructor Details

#initialize(receipt) ⇒ Validator

Returns a new instance of Validator.



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/apple_receipt/validator.rb', line 8

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

Instance Method Details

#public_keyObject



27
28
29
# File 'lib/apple_receipt/validator.rb', line 27

def public_key
  receipt.cert.public_key
end

#signed_dataObject



31
32
33
# File 'lib/apple_receipt/validator.rb', line 31

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

#storeObject



35
36
37
# File 'lib/apple_receipt/validator.rb', line 35

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

#valid?Boolean

Returns:

  • (Boolean)


21
22
23
24
25
# File 'lib/apple_receipt/validator.rb', line 21

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