attr_keyring 0.6.0 → 0.6.1

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
  SHA256:
3
- metadata.gz: ee86bffa6e27d8523d423c8e8bfefa90a15733fdda28a60155a71fd67a794917
4
- data.tar.gz: 340174053331dc2447f2d980ec97d3a4b429f09ed8052ef991908a2de90ad872
3
+ metadata.gz: d02280da9cb28259980ea283b6030672957657ead8b895594176eef09d78382b
4
+ data.tar.gz: 88ddda0bb1d9a85869246e46ab49a8f4889bc0c398d616be9dd162eec239a177
5
5
  SHA512:
6
- metadata.gz: 3f4d6593813ab7f4e2e8672108d40b44f068c70fc8ccc59c83eae84bba0851ba3e6996633ef66b87b83f2f5c93038b573062b446e93045902623aba5dbcd653c
7
- data.tar.gz: e2379acd02af797c2dcf900957404eb6f8552fe1b11f472c4ea8b5a140b06fbda868eec13e65fa998cc27d11274435e329aec3a12b59f516ecc1dddf779b4f4e
6
+ metadata.gz: 6a3108027fac7dbfee097e7afa3227f58f33560e540f19bc0f0b63cb4e482e8315ffafdbd4360bc31724426c9150109c6b9e46e9ecdf70526ca13cb34a8bee93
7
+ data.tar.gz: 16a5ca41d03b434dbf2eb4a5751af6595e7d00c93867159c3990a3e1d0a104d170dfd434580eff0420b1b966afe0877ec70362c6d66cad34e89e0f5fed8867d4
@@ -0,0 +1,3 @@
1
+ ---
2
+ github: [fnando]
3
+ custom: ["https://www.paypal.me/nandovieira/🍕"]
@@ -0,0 +1,15 @@
1
+ ---
2
+ # Documentation:
3
+ # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
4
+
5
+ version: 2
6
+ updates:
7
+ - package-ecosystem: "github-actions"
8
+ directory: "/"
9
+ schedule:
10
+ interval: "daily"
11
+
12
+ - package-ecosystem: bundler
13
+ directory: "/"
14
+ schedule:
15
+ interval: "daily"
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: Tests
3
+
4
+ on:
5
+ pull_request:
6
+ push:
7
+
8
+ jobs:
9
+ build:
10
+ name: Tests with Ruby ${{ matrix.ruby }} with ${{ matrix.gemfile }}
11
+ runs-on: "ubuntu-latest"
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ ruby: ["2.7", "3.0"]
16
+ gemfile:
17
+ - gemfiles/7_0.gemfile
18
+ - gemfiles/6_0.gemfile
19
+
20
+ services:
21
+ postgres:
22
+ image: postgres:11.5
23
+ ports: ["5432:5432"]
24
+ options:
25
+ --health-cmd pg_isready --health-interval 10s --health-timeout 5s
26
+ --health-retries 5
27
+
28
+ steps:
29
+ - uses: actions/checkout@v1
30
+
31
+ - uses: actions/cache@v2
32
+ with:
33
+ path: vendor/bundle
34
+ key: >
35
+ ${{ runner.os }}-${{ matrix.ruby }}-gems-${{
36
+ hashFiles('**/attr_keyring.gemspec') }}
37
+ restore-keys: >
38
+ ${{ runner.os }}-${{ matrix.ruby }}-gems-${{
39
+ hashFiles('**/attr_keyring.gemspec') }}
40
+
41
+ - name: Set up Ruby
42
+ uses: ruby/setup-ruby@v1
43
+ with:
44
+ ruby-version: ${{ matrix.ruby }}
45
+
46
+ - name: Install PostgreSQL 11 client
47
+ run: |
48
+ sudo apt-get -yqq install libpq-dev
49
+
50
+ - name: Install gem dependencies
51
+ env:
52
+ BUNDLE_GEMFILE: ${{ matrix.gemfile }}
53
+ run: |
54
+ gem install bundler
55
+ bundle config path vendor/bundle
56
+ bundle update --jobs 4 --retry 3
57
+
58
+ - name: Run Tests
59
+ env:
60
+ PGHOST: localhost
61
+ PGUSER: postgres
62
+ BUNDLE_GEMFILE: ${{ matrix.gemfile }}
63
+ run: |
64
+ psql -U postgres -c "create database test"
65
+ bundle exec rake
data/.rubocop.yml CHANGED
@@ -3,7 +3,10 @@ inherit_gem:
3
3
  rubocop-fnando: .rubocop.yml
4
4
 
5
5
  AllCops:
6
- TargetRubyVersion: 2.6
6
+ TargetRubyVersion: 2.5
7
+ Exclude:
8
+ - vendor/**/*
9
+ - gemfiles/**/*
7
10
 
8
11
  Metrics/AbcSize:
9
12
  Enabled: false
data/README.md CHANGED
@@ -1,19 +1,21 @@
1
- ![attr_keyring: Simple encryption-at-rest with key rotation support for Ruby.](https://raw.githubusercontent.com/fnando/attr_keyring/master/attr_keyring.png)
1
+ ![attr_keyring: Simple encryption-at-rest with key rotation support for Ruby.](https://raw.githubusercontent.com/fnando/attr_keyring/main/attr_keyring.png)
2
2
 
3
3
  <p align="center">
4
- <a href="https://travis-ci.org/fnando/attr_keyring"><img src="https://travis-ci.org/fnando/attr_keyring.svg" alt="Travis-CI"></a>
4
+ <a href="https://github.com/fnando/attr_keyring/actions?query=workflow%3ATests"><img src="https://github.com/fnando/attr_keyring/workflows/Tests/badge.svg" alt="Tests"></a>
5
5
  <a href="https://codeclimate.com/github/fnando/attr_keyring"><img src="https://codeclimate.com/github/fnando/attr_keyring/badges/gpa.svg" alt="Code Climate"></a>
6
- <a href="https://codeclimate.com/github/fnando/attr_keyring/coverage"><img src="https://codeclimate.com/github/fnando/attr_keyring/badges/coverage.svg" alt="Test Coverage"></a>
7
6
  <a href="https://rubygems.org/gems/attr_keyring"><img src="https://img.shields.io/gem/v/attr_keyring.svg" alt="Gem"></a>
8
7
  <a href="https://rubygems.org/gems/attr_keyring"><img src="https://img.shields.io/gem/dt/attr_keyring.svg" alt="Gem"></a>
9
8
  </p>
10
9
 
11
- N.B.: attr_keyring is *not* for encrypting passwords--for that, you should use something like [bcrypt](https://github.com/codahale/bcrypt-ruby). It's meant for encrypting sensitive data you will need to access in plain text (e.g. storing OAuth token from users). Passwords do not fall in that category.
10
+ N.B.: attr_keyring is not for encrypting passwords--for that, you should use
11
+ something like [bcrypt](https://github.com/codahale/bcrypt-ruby). It's meant for
12
+ encrypting sensitive data you will need to access in plain text (e.g. storing
13
+ OAuth token from users). Passwords do not fall in that category.
12
14
 
13
15
  This library is heavily inspired by
14
16
  [attr_vault](https://github.com/uhoh-itsmaciek/attr_vault), and can read
15
- encrypted messages if you encode them in base64
16
- (e.g. `Base64.strict_encode64(encrypted_by_attr_vault)`).
17
+ encrypted messages if you encode them in base64 (e.g.
18
+ `Base64.strict_encode64(encrypted_by_attr_vault)`).
17
19
 
18
20
  ## Installation
19
21
 
@@ -67,7 +69,7 @@ example uses `AES-256-CBC`.
67
69
  ```ruby
68
70
  keyring = Keyring.new(
69
71
  "1" => "uDiMcWVNTuz//naQ88sOcN+E40CyBRGzGTT7OkoBS6M=",
70
- encryptor: Keyring::Encryptor::AES256CBC,
72
+ encryptor: Keyring::Encryptor::AES::AES256CBC,
71
73
  digest_salt: "<custom salt>"
72
74
  )
73
75
  ```
@@ -179,11 +181,12 @@ contradictory that something has to be unpredictable and unique, but does not
179
181
  have to be secret; it is important to remember that an attacker must not be able
180
182
  to predict ahead of time what a given IV will be.
181
183
 
182
- With that in mind, _attr_keyring_ uses `base64(hmac(unencrypted iv + encrypted
183
- message) + unencrypted iv + encrypted message)` as the final message. If you're
184
- planning to migrate from other encryption mechanisms or read encrypted values
185
- from the database without using _attr_keyring_, make sure you account for this.
186
- The HMAC is 32-bytes long and the IV is 16-bytes long.
184
+ With that in mind, _attr_keyring_ uses
185
+ `base64(hmac(unencrypted iv + encrypted message) + unencrypted iv + encrypted message)`
186
+ as the final message. If you're planning to migrate from other encryption
187
+ mechanisms or read encrypted values from the database without using
188
+ _attr_keyring_, make sure you account for this. The HMAC is 32-bytes long and
189
+ the IV is 16-bytes long.
187
190
 
188
191
  ### Keyring
189
192
 
@@ -204,13 +207,14 @@ encryption key.
204
207
 
205
208
  #### Dynamically loading keyring
206
209
 
207
- If you're using Rails 5.2+, you can use credentials to define your keyring.
208
- Your `credentials.yml` must be define like the following:
210
+ If you're using Rails 5.2+, you can use credentials to define your keyring. Your
211
+ `credentials.yml` must be define like the following:
209
212
 
210
213
  ```yaml
214
+ ---
211
215
  user_keyring:
212
- 1: "QSXyoiRDPoJmfkJUZ4hJeQ=="
213
- 2: "r6AfOeilPDJomFsiOXLdfQ=="
216
+ "1": "QSXyoiRDPoJmfkJUZ4hJeQ=="
217
+ "2": "r6AfOeilPDJomFsiOXLdfQ=="
214
218
  ```
215
219
 
216
220
  Then you can setup your model by using
@@ -330,12 +334,11 @@ The gem is available as open source under the terms of the
330
334
 
331
335
  ## Icon
332
336
 
333
- Icon made by [Icongeek26](https://www.flaticon.com/authors/icongeek26)
334
- from [Flaticon](https://www.flaticon.com/) is licensed by Creative Commons BY
335
- 3.0.
337
+ Icon made by [Icongeek26](https://www.flaticon.com/authors/icongeek26) from
338
+ [Flaticon](https://www.flaticon.com/) is licensed by Creative Commons BY 3.0.
336
339
 
337
340
  ## Code of Conduct
338
341
 
339
342
  Everyone interacting in the attr_keyring project’s codebases, issue trackers,
340
343
  chat rooms and mailing lists is expected to follow the
341
- [code of conduct](https://github.com/fnando/attr_keyring/blob/master/CODE_OF_CONDUCT.md).
344
+ [code of conduct](https://github.com/fnando/attr_keyring/blob/main/CODE_OF_CONDUCT.md).
data/Rakefile CHANGED
@@ -16,4 +16,4 @@ task(:rubocop) do
16
16
  RuboCop::CLI.new.run(["--config", File.join(__dir__, ".rubocop.yml")])
17
17
  end
18
18
 
19
- task :default => [:test, :rubocop] # rubocop:disable Style/HashSyntax, Style/SymbolArray
19
+ task default: %i[test rubocop]
data/attr_keyring.gemspec CHANGED
@@ -12,15 +12,14 @@ Gem::Specification.new do |spec|
12
12
  spec.description = spec.summary
13
13
  spec.homepage = "https://github.com/fnando/attr_keyring"
14
14
  spec.license = "MIT"
15
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
15
16
 
16
- # Specify which files should be added to the gem when it is released.
17
- # The `git ls-files -z` loads the files in the RubyGem that have been added
18
- # into git.
19
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
17
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
18
  `git ls-files -z`
21
19
  .split("\x0")
22
20
  .reject {|f| f.match(%r{^(test|spec|features)/}) }
23
21
  end
22
+
24
23
  spec.bindir = "exe"
25
24
  spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
26
25
  spec.require_paths = ["lib"]
@@ -2,4 +2,4 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
  gemspec path: ".."
5
- gem "activerecord", "~> 5.2.0"
5
+ gem "activerecord", "~> 7.0.0.rc1"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AttrKeyring
4
- VERSION = "0.6.0"
4
+ VERSION = "0.6.1"
5
5
  end
data/lib/attr_keyring.rb CHANGED
@@ -20,9 +20,7 @@ module AttrKeyring
20
20
  include InstanceMethods
21
21
 
22
22
  class << self
23
- attr_accessor :encrypted_attributes
24
- attr_accessor :keyring
25
- attr_accessor :keyring_column_name
23
+ attr_accessor :encrypted_attributes, :keyring, :keyring_column_name
26
24
  end
27
25
 
28
26
  self.encrypted_attributes = []
@@ -38,7 +38,7 @@ module Keyring
38
38
  expected_hmac = hmac_digest(key.signing_key, encrypted_payload)
39
39
 
40
40
  unless verify_signature(expected_hmac, hmac)
41
- raise InvalidAuthentication, "Expected HMAC to be #{Base64.strict_encode64(expected_hmac)}; got #{Base64.strict_encode64(hmac)} instead" # rubocop:disable Metrics/LineLength
41
+ raise InvalidAuthentication, "Expected HMAC to be #{Base64.strict_encode64(expected_hmac)}; got #{Base64.strict_encode64(hmac)} instead" # rubocop:disable Layout/LineLength
42
42
  end
43
43
 
44
44
  cipher.iv = iv
data/lib/keyring/key.rb CHANGED
@@ -5,7 +5,7 @@ module Keyring
5
5
  attr_reader :id, :signing_key, :encryption_key
6
6
 
7
7
  def initialize(id, key, key_size)
8
- @id = Integer(id)
8
+ @id = Integer(id.to_s)
9
9
  @key_size = key_size
10
10
  @encryption_key, @signing_key = parse_key(key)
11
11
  end
@@ -20,7 +20,7 @@ module Keyring
20
20
  secret = decode_key(key, expected_key_size)
21
21
 
22
22
  unless secret.bytesize == expected_key_size
23
- raise InvalidSecret, "Secret must be #{expected_key_size} bytes, instead got #{secret.bytesize}" # rubocop:disable Metrics/LineLength
23
+ raise InvalidSecret, "Secret must be #{expected_key_size} bytes, instead got #{secret.bytesize}" # rubocop:disable Layout/LineLength
24
24
  end
25
25
 
26
26
  signing_key = secret[0...@key_size]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attr_keyring
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-01 00:00:00.000000000 Z
11
+ date: 2021-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -185,9 +185,11 @@ executables: []
185
185
  extensions: []
186
186
  extra_rdoc_files: []
187
187
  files:
188
+ - ".github/FUNDING.yml"
189
+ - ".github/dependabot.yml"
190
+ - ".github/workflows/tests.yml"
188
191
  - ".gitignore"
189
192
  - ".rubocop.yml"
190
- - ".travis.yml"
191
193
  - CODE_OF_CONDUCT.md
192
194
  - Gemfile
193
195
  - LICENSE.txt
@@ -201,8 +203,8 @@ files:
201
203
  - examples/active_record_sample.rb
202
204
  - examples/keyring_sample.rb
203
205
  - examples/sequel_sample.rb
204
- - gemfiles/5_2.gemfile
205
206
  - gemfiles/6_0.gemfile
207
+ - gemfiles/7_0.gemfile
206
208
  - lib/attr_keyring.rb
207
209
  - lib/attr_keyring/active_record.rb
208
210
  - lib/attr_keyring/sequel.rb
@@ -214,7 +216,7 @@ homepage: https://github.com/fnando/attr_keyring
214
216
  licenses:
215
217
  - MIT
216
218
  metadata: {}
217
- post_install_message:
219
+ post_install_message:
218
220
  rdoc_options: []
219
221
  require_paths:
220
222
  - lib
@@ -222,15 +224,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
222
224
  requirements:
223
225
  - - ">="
224
226
  - !ruby/object:Gem::Version
225
- version: '0'
227
+ version: 2.5.0
226
228
  required_rubygems_version: !ruby/object:Gem::Requirement
227
229
  requirements:
228
230
  - - ">="
229
231
  - !ruby/object:Gem::Version
230
232
  version: '0'
231
233
  requirements: []
232
- rubygems_version: 3.1.2
233
- signing_key:
234
+ rubygems_version: 3.2.32
235
+ signing_key:
234
236
  specification_version: 4
235
237
  summary: Simple encryption-at-rest plugin for ActiveRecord.
236
238
  test_files: []
data/.travis.yml DELETED
@@ -1,25 +0,0 @@
1
- ---
2
-
3
- language: ruby
4
- cache: bundler
5
- sudo: false
6
- notifications:
7
- email: false
8
- rvm:
9
- - 2.6.5
10
- - 2.5.7
11
- services:
12
- - postgresql
13
- gemfiles:
14
- - gemfiles/6_0.gemfile
15
- - gemfiles/5_2.gemfile
16
- before_script:
17
- - createdb test
18
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
19
- - chmod +x ./cc-test-reporter
20
- - "./cc-test-reporter before-build"
21
- after_script:
22
- - "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
23
- env:
24
- global:
25
- secure: c0y7opFgX78UQL0dVq2gciMr3Ca4y4Aw4cSbQMnUwGecwuzOPUhjV98yy4b6EpQ0bLVbVcSPtx/PCVV750nxJPQsz9tWS0yGxQPBXuh2w0AX+ErYJVYaF6+hTjovEiHB86Q9g8YCD29CIMLZs2yeUrB+ORJWQcuAn8fw475Zskk8d8BWqR8CDdonFKlwS0Bx6rOqkyVy0JiNbOM4+trV/RzrNC+dc1geqOo45ceTYiGzkkMU1XANjNhzl/v0DYtCWLF/Dj1s8da96btqU6msZDfsBM73zKWtu0KJMnzqa8Ba4Tjc39kd2ro6Zb22cELBdXOFBvNCAEjbmZIaJ2OC45fES1OGZnB66SjAScdVdxKy2jOWjlFvrRiHu3Zrbl5tFTEaJ/PMHueQn4AzneK1wU2kzjq5iCwBZtMp/iJtCvz0V6qBt77qJe65YuENhcj26cDMqQkhKd0QBTWNs8r02KY3HFKcprgM+2TXxVSvfDu2cbiMInvc3K+uFNnEbu/1piTyStKWGd64WHixV6CEFpHxLU04IUNB62mSvUZtZ6V782X9kawoRyUg6lWvXmnGUUvczdJdpSR5/3gVXOWHireYy/qA6Zqoup27PPoaNgnKCa/fWvN/aJDvrGJb9OWpiK8DGi6T35V5gtDF+vd8mVzyPnYJznlWLgA5m7FSzLg=