gala 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4227537dc0b299428df76e8558c2191c30d065b0
4
- data.tar.gz: 87347e9b12ab6fb03644a13c18c171d4f90801cd
3
+ metadata.gz: a0d3e1fc4a6b470c17fd047d0976d3bb38313a66
4
+ data.tar.gz: 4f0ad1ff3596351cb1c5f01d4eff262fd92010ad
5
5
  SHA512:
6
- metadata.gz: 04c1581817cf346028e8b575802150c3e4639e7b87c44f49c35b83058c939c0d7eff0f5ebc9e98d0e9a14dbb535f5688de72c014ead1a7169727f637c735c0a7
7
- data.tar.gz: 0f12a08997bdba5a6996811f2713c6b68d7cca61de3835b712d4786f6f62c949b2fb930140e912d3a1852ed21458480ae79bab5e58e2d5253e95c86b0ec845a1
6
+ metadata.gz: 519d9de49800d7b2138bbf031c934dd39f00fb66ffa7e705ed8e37c2b939545ec2c6711c255441c92aedb48abb2942262662d223d9b1bad4542a5380d4c32906
7
+ data.tar.gz: aa05c2c3e4a959a0718496bee973d26a4c8461f1f3382c9e271acb3cb938ca4cf61b91058389aeea88e2d7dfd3ab9d3e1cc2d845d8cb998c1929170acbb51ddf
@@ -1,22 +1,15 @@
1
1
  version: 2
2
2
  jobs:
3
- ruby-2.1:
3
+ ruby-2.4:
4
4
  docker:
5
- - image: circleci/ruby:2.1.10
5
+ - image: circleci/ruby:2.4.4
6
6
  steps:
7
7
  - checkout
8
8
  - run: bundle
9
9
  - run: rake test
10
- ruby-2.2:
10
+ ruby-2.5:
11
11
  docker:
12
- - image: circleci/ruby:2.2.10
13
- steps:
14
- - checkout
15
- - run: bundle
16
- - run: rake test
17
- ruby-2.3:
18
- docker:
19
- - image: circleci/ruby:2.3.7
12
+ - image: circleci/ruby:2.5.1
20
13
  steps:
21
14
  - checkout
22
15
  - run: bundle
@@ -25,6 +18,5 @@ workflows:
25
18
  version: 2
26
19
  rubies:
27
20
  jobs:
28
- - ruby-2.1
29
- - ruby-2.2
30
- - ruby-2.3
21
+ - ruby-2.4
22
+ - ruby-2.5
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- gemspec
1
+ source 'https://rubygems.org'
2
2
 
3
- gem 'aead', git: 'https://github.com/Shopify/aead.git', ref: '340e7718d8bd9c1fcf3c443e32f439436ea2b70d'
3
+ gemspec
@@ -1,35 +1,24 @@
1
- GIT
2
- remote: https://github.com/Shopify/aead.git
3
- revision: 340e7718d8bd9c1fcf3c443e32f439436ea2b70d
4
- ref: 340e7718d8bd9c1fcf3c443e32f439436ea2b70d
5
- specs:
6
- aead (1.8.2)
7
- macaddr (~> 1)
8
-
9
1
  PATH
10
2
  remote: .
11
3
  specs:
12
- gala (0.3.1)
13
- aead (~> 1.8)
4
+ gala (0.3.2)
5
+ openssl (~> 2.0)
14
6
 
15
7
  GEM
16
8
  remote: https://rubygems.org/
17
9
  specs:
18
- macaddr (1.7.1)
19
- systemu (~> 2.6.2)
20
10
  minitest (5.11.3)
21
- rake (12.0.0)
22
- systemu (2.6.5)
11
+ openssl (2.1.0)
12
+ rake (12.3.1)
23
13
 
24
14
  PLATFORMS
25
15
  ruby
26
16
 
27
17
  DEPENDENCIES
28
- aead!
29
18
  bundler (~> 1.14)
30
19
  gala!
31
20
  minitest
32
21
  rake (~> 12.0)
33
22
 
34
23
  BUNDLED WITH
35
- 1.15.4
24
+ 1.16.1
data/README.md CHANGED
@@ -4,20 +4,23 @@ Named after the [Gala apple](http://en.wikipedia.org/wiki/Gala_(apple)), Gala is
4
4
 
5
5
  Gala is available under the MIT License.
6
6
 
7
+ ## Ruby support
8
+
9
+ * For Ruby v2.3 and below, please use the [legacy-ruby branch](https://github.com/spreedly/gala/commits/legacy-ruby), or specify gala v0.3.2.
10
+ * For Ruby >= 2.4, use the master branch or specify gala v0.4 and above
11
+
7
12
  ## Install
8
13
 
9
- Add both `gala` and `aead` to your `Gemfile`. Specifying `aead` is necessary to pull in the Shopify version of the library which has been updated to support Ruby versions 2.2 and above.
14
+ Add `gala` to your `Gemfile`.
10
15
 
11
16
  ```ruby
12
- gem "gala", "~> 0.3.1"
13
- gem 'aead', git: 'https://github.com/Shopify/aead.git', ref: '340e7718d8bd9c1fcf3c443e32f439436ea2b70d'
17
+ gem "gala", "~> 0.4.0"
14
18
  ```
15
19
 
16
20
  If you need to track a development branch or reference functionality not yet contained in the RubyGem release you can specify the gala repo directly.
17
21
 
18
22
  ```ruby
19
23
  gem "gala", git: "https://github.com/spreedly/gala.git", ref: :master
20
- gem 'aead', git: 'https://github.com/Shopify/aead.git', ref: '340e7718d8bd9c1fcf3c443e32f439436ea2b70d'
21
24
  ```
22
25
 
23
26
  Then `bundle install` to fetch Gala into your local environment.
@@ -91,6 +94,11 @@ $ rake release
91
94
 
92
95
  ## Changelog
93
96
 
97
+ ### v0.4.0
98
+
99
+ * Remove unmaintained `aead` gem dependency
100
+ * Rely on Ruby 2.4 openssl support for aes-256-gcm ciphers (and specifying the initialization vector length).
101
+
94
102
  ### v0.3.2
95
103
 
96
104
  * Setup CircleCI for more comprehensive Ruby version/compatibility testing
@@ -17,11 +17,11 @@ Gem::Specification.new do |spec|
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test)/}) }
18
18
  spec.test_files = `git ls-files -- test/*`.split("\n")
19
19
  spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
21
21
 
22
- spec.required_ruby_version = ">= 1.8.7"
22
+ spec.required_ruby_version = '>= 2.4.0'
23
23
 
24
- spec.add_runtime_dependency 'aead', '~> 1.8'
24
+ spec.add_runtime_dependency 'openssl', '~> 2.0'
25
25
 
26
26
  spec.add_development_dependency 'bundler', '~> 1.14'
27
27
  spec.add_development_dependency 'rake', '~> 12.0'
@@ -1,6 +1,5 @@
1
1
  require 'openssl'
2
2
  require 'base64'
3
- require 'aead'
4
3
 
5
4
  module Gala
6
5
  class PaymentToken
@@ -56,7 +55,7 @@ module Gala
56
55
  raise InvalidSignatureError, "Signature does not contain the correct custom OIDs." unless leaf_cert && intermediate_cert
57
56
 
58
57
  # Ensure that the root CA is the Apple Root CA - G3
59
- root_cert = certificate = OpenSSL::X509::Certificate.new(APPLE_ROOT_CERT)
58
+ root_cert = OpenSSL::X509::Certificate.new(APPLE_ROOT_CERT)
60
59
 
61
60
  # Ensure that there is a valid X.509 chain of trust from the signature to the root CA
62
61
  raise InvalidSignatureError, "Unable to verify a valid chain of trust from signature to root certificate." unless chain_of_trust_verified?(leaf_cert, intermediate_cert, root_cert)
@@ -111,11 +110,26 @@ module Gala
111
110
  end
112
111
 
113
112
  def decrypt(encrypted_data, symmetric_key)
114
- init_length = 16
115
- init_vector = 0.chr * init_length
116
- mode = ::AEAD::Cipher.new('aes-256-gcm')
117
- cipher = mode.new(symmetric_key, iv_len: init_length)
118
- cipher.decrypt(init_vector, '', encrypted_data)
113
+ # Initialization vector of 16 null bytes
114
+ iv_length = 16
115
+ # 0.chr => "\x00"
116
+ iv = 0.chr * iv_length
117
+
118
+ # Last 16 bytes (iv_length) of encrypted data
119
+ tag = encrypted_data[-iv_length..-1]
120
+ # Data without tag
121
+ encrypted_data = encrypted_data[0..(-iv_length - 1)]
122
+
123
+ cipher = OpenSSL::Cipher.new("aes-256-gcm").decrypt
124
+ cipher.key = symmetric_key
125
+ cipher.iv_len = iv_length
126
+ cipher.iv = iv
127
+
128
+ # Decipher without associated authentication data
129
+ cipher.auth_tag = tag
130
+ cipher.auth_data = ''
131
+
132
+ cipher.update(encrypted_data) + cipher.final
119
133
  end
120
134
  end
121
135
  end
@@ -1,3 +1,3 @@
1
1
  module Gala
2
- VERSION = "0.3.2" unless defined? Gala::VERSION
2
+ VERSION = "0.4.0" unless defined? Gala::VERSION
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gala
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Bennett
@@ -12,19 +12,19 @@ cert_chain: []
12
12
  date: 2018-05-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: aead
15
+ name: openssl
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '1.8'
20
+ version: '2.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '1.8'
27
+ version: '2.0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: bundler
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -103,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
103
  requirements:
104
104
  - - ">="
105
105
  - !ruby/object:Gem::Version
106
- version: 1.8.7
106
+ version: 2.4.0
107
107
  required_rubygems_version: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - ">="
@@ -111,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
111
  version: '0'
112
112
  requirements: []
113
113
  rubyforge_project:
114
- rubygems_version: 2.2.5
114
+ rubygems_version: 2.6.11
115
115
  signing_key:
116
116
  specification_version: 4
117
117
  summary: Apple Pay payment token decryption library